/* * 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([["app/page"],{ /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js": /*!********************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js ***! \********************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\");\n\r\nconst AuthAdminApi = _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (AuthAdminApi);\r\n//# sourceMappingURL=AuthAdminApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9BdXRoQWRtaW5BcGkuanMiLCJtYXBwaW5ncyI6Ijs7QUFBOEM7QUFDOUMscUJBQXFCLHVEQUFjO0FBQ25DLCtEQUFlLFlBQVksRUFBQztBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvQXV0aEFkbWluQXBpLmpzPzk5NTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEdvVHJ1ZUFkbWluQXBpIGZyb20gJy4vR29UcnVlQWRtaW5BcGknO1xyXG5jb25zdCBBdXRoQWRtaW5BcGkgPSBHb1RydWVBZG1pbkFwaTtcclxuZXhwb3J0IGRlZmF1bHQgQXV0aEFkbWluQXBpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdXRoQWRtaW5BcGkuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthClient.js": /*!******************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/AuthClient.js ***! \******************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _GoTrueClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueClient */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js\");\n\r\nconst AuthClient = _GoTrueClient__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (AuthClient);\r\n//# sourceMappingURL=AuthClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9BdXRoQ2xpZW50LmpzIiwibWFwcGluZ3MiOiI7O0FBQTBDO0FBQzFDLG1CQUFtQixxREFBWTtBQUMvQiwrREFBZSxVQUFVLEVBQUM7QUFDMUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL0F1dGhDbGllbnQuanM/N2Y5YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR29UcnVlQ2xpZW50IGZyb20gJy4vR29UcnVlQ2xpZW50JztcclxuY29uc3QgQXV0aENsaWVudCA9IEdvVHJ1ZUNsaWVudDtcclxuZXhwb3J0IGRlZmF1bHQgQXV0aENsaWVudDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aENsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js": /*!**********************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js ***! \**********************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ GoTrueAdminApi; }\n/* harmony export */ });\n/* harmony import */ var _lib_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/fetch */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _lib_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/types */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js\");\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\n\r\n\r\n\r\n\r\nclass GoTrueAdminApi {\r\n constructor({ url = '', headers = {}, fetch, }) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.fetch = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.resolveFetch)(fetch);\r\n this.mfa = {\r\n listFactors: this._listFactors.bind(this),\r\n deleteFactor: this._deleteFactor.bind(this),\r\n };\r\n }\r\n /**\r\n * Removes a logged-in session.\r\n * @param jwt A valid, logged-in JWT.\r\n * @param scope The logout sope.\r\n */\r\n async signOut(jwt, scope = _lib_types__WEBPACK_IMPORTED_MODULE_2__.SIGN_OUT_SCOPES[0]) {\r\n if (_lib_types__WEBPACK_IMPORTED_MODULE_2__.SIGN_OUT_SCOPES.indexOf(scope) < 0) {\r\n throw new Error(`@supabase/auth-js: Parameter scope must be one of ${_lib_types__WEBPACK_IMPORTED_MODULE_2__.SIGN_OUT_SCOPES.join(', ')}`);\r\n }\r\n try {\r\n await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/logout?scope=${scope}`, {\r\n headers: this.headers,\r\n jwt,\r\n noResolveJson: true,\r\n });\r\n return { data: null, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Sends an invite link to an email address.\r\n * @param email The email address of the user.\r\n * @param options Additional options to be included when inviting.\r\n */\r\n async inviteUserByEmail(email, options = {}) {\r\n try {\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/invite`, {\r\n body: { email, data: options.data },\r\n headers: this.headers,\r\n redirectTo: options.redirectTo,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Generates email links and OTPs to be sent via a custom email provider.\r\n * @param email The user's email.\r\n * @param options.password User password. For signup only.\r\n * @param options.data Optional user metadata. For signup only.\r\n * @param options.redirectTo The redirect url which should be appended to the generated link\r\n */\r\n async generateLink(params) {\r\n try {\r\n const { options } = params, rest = __rest(params, [\"options\"]);\r\n const body = Object.assign(Object.assign({}, rest), options);\r\n if ('newEmail' in rest) {\r\n // replace newEmail with new_email in request body\r\n body.new_email = rest === null || rest === void 0 ? void 0 : rest.newEmail;\r\n delete body['newEmail'];\r\n }\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/admin/generate_link`, {\r\n body: body,\r\n headers: this.headers,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._generateLinkResponse,\r\n redirectTo: options === null || options === void 0 ? void 0 : options.redirectTo,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return {\r\n data: {\r\n properties: null,\r\n user: null,\r\n },\r\n error,\r\n };\r\n }\r\n throw error;\r\n }\r\n }\r\n // User Admin API\r\n /**\r\n * Creates a new user.\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async createUser(attributes) {\r\n try {\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/admin/users`, {\r\n body: attributes,\r\n headers: this.headers,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Get a list of users.\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n * @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results.\r\n */\r\n async listUsers(params) {\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n try {\r\n const pagination = { nextPage: null, lastPage: 0, total: 0 };\r\n const response = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/users`, {\r\n headers: this.headers,\r\n noResolveJson: true,\r\n query: {\r\n page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',\r\n per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._noResolveJsonResponse,\r\n });\r\n if (response.error)\r\n throw response.error;\r\n const users = await response.json();\r\n const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;\r\n const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];\r\n if (links.length > 0) {\r\n links.forEach((link) => {\r\n const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));\r\n const rel = JSON.parse(link.split(';')[1].split('=')[1]);\r\n pagination[`${rel}Page`] = page;\r\n });\r\n pagination.total = parseInt(total);\r\n }\r\n return { data: Object.assign(Object.assign({}, users), pagination), error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: { users: [] }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Get user by id.\r\n *\r\n * @param uid The user's unique identifier\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async getUserById(uid) {\r\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(uid);\r\n try {\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/users/${uid}`, {\r\n headers: this.headers,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Updates the user data.\r\n *\r\n * @param attributes The data you want to update.\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async updateUserById(uid, attributes) {\r\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(uid);\r\n try {\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'PUT', `${this.url}/admin/users/${uid}`, {\r\n body: attributes,\r\n headers: this.headers,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Delete a user. Requires a `service_role` key.\r\n *\r\n * @param id The user id you want to remove.\r\n * @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible.\r\n * Defaults to false for backward compatibility.\r\n *\r\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\r\n */\r\n async deleteUser(id, shouldSoftDelete = false) {\r\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(id);\r\n try {\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'DELETE', `${this.url}/admin/users/${id}`, {\r\n headers: this.headers,\r\n body: {\r\n should_soft_delete: shouldSoftDelete,\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _listFactors(params) {\r\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.userId);\r\n try {\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/factors`, {\r\n headers: this.headers,\r\n xform: (factors) => {\r\n return { data: { factors }, error: null };\r\n },\r\n });\r\n return { data, error };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _deleteFactor(params) {\r\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.userId);\r\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.id);\r\n try {\r\n const data = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/factors/${params.id}`, {\r\n headers: this.headers,\r\n });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=GoTrueAdminApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9Hb1RydWVBZG1pbkFwaS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLGNBQWMsU0FBSSxJQUFJLFNBQUk7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsY0FBYztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NHO0FBQzNDO0FBQ1o7QUFDSjtBQUM1QjtBQUNmLGtCQUFrQixzQkFBc0IsVUFBVTtBQUNsRDtBQUNBO0FBQ0EscUJBQXFCLDBEQUFZO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHVEQUFlO0FBQzlDLFlBQVksdURBQWU7QUFDM0IsaUZBQWlGLHVEQUFlLFlBQVk7QUFDNUc7QUFDQTtBQUNBLGtCQUFrQixvREFBUSx3QkFBd0IsU0FBUyxnQkFBZ0IsTUFBTTtBQUNqRjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxnQkFBZ0Isd0RBQVc7QUFDM0IseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBLHlCQUF5QixvREFBUSx3QkFBd0IsU0FBUztBQUNsRSx3QkFBd0IsMkJBQTJCO0FBQ25EO0FBQ0E7QUFDQSx1QkFBdUIscURBQWE7QUFDcEMsYUFBYTtBQUNiO0FBQ0E7QUFDQSxnQkFBZ0Isd0RBQVc7QUFDM0IseUJBQXlCLFFBQVEsWUFBWTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLG9EQUFRLHdCQUF3QixTQUFTO0FBQ2xF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bGUvR29UcnVlQWRtaW5BcGkuanM/MzcxYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufTtcclxuaW1wb3J0IHsgX2dlbmVyYXRlTGlua1Jlc3BvbnNlLCBfbm9SZXNvbHZlSnNvblJlc3BvbnNlLCBfcmVxdWVzdCwgX3VzZXJSZXNwb25zZSwgfSBmcm9tICcuL2xpYi9mZXRjaCc7XHJcbmltcG9ydCB7IHJlc29sdmVGZXRjaCwgdmFsaWRhdGVVVUlEIH0gZnJvbSAnLi9saWIvaGVscGVycyc7XHJcbmltcG9ydCB7IFNJR05fT1VUX1NDT1BFUywgfSBmcm9tICcuL2xpYi90eXBlcyc7XHJcbmltcG9ydCB7IGlzQXV0aEVycm9yIH0gZnJvbSAnLi9saWIvZXJyb3JzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR29UcnVlQWRtaW5BcGkge1xyXG4gICAgY29uc3RydWN0b3IoeyB1cmwgPSAnJywgaGVhZGVycyA9IHt9LCBmZXRjaCwgfSkge1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgICAgICAgdGhpcy5mZXRjaCA9IHJlc29sdmVGZXRjaChmZXRjaCk7XHJcbiAgICAgICAgdGhpcy5tZmEgPSB7XHJcbiAgICAgICAgICAgIGxpc3RGYWN0b3JzOiB0aGlzLl9saXN0RmFjdG9ycy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBkZWxldGVGYWN0b3I6IHRoaXMuX2RlbGV0ZUZhY3Rvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBsb2dnZWQtaW4gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSBqd3QgQSB2YWxpZCwgbG9nZ2VkLWluIEpXVC5cclxuICAgICAqIEBwYXJhbSBzY29wZSBUaGUgbG9nb3V0IHNvcGUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNpZ25PdXQoand0LCBzY29wZSA9IFNJR05fT1VUX1NDT1BFU1swXSkge1xyXG4gICAgICAgIGlmIChTSUdOX09VVF9TQ09QRVMuaW5kZXhPZihzY29wZSkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IFBhcmFtZXRlciBzY29wZSBtdXN0IGJlIG9uZSBvZiAke1NJR05fT1VUX1NDT1BFUy5qb2luKCcsICcpfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9sb2dvdXQ/c2NvcGU9JHtzY29wZX1gLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBqd3QsXHJcbiAgICAgICAgICAgICAgICBub1Jlc29sdmVKc29uOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kcyBhbiBpbnZpdGUgbGluayB0byBhbiBlbWFpbCBhZGRyZXNzLlxyXG4gICAgICogQHBhcmFtIGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRvIGJlIGluY2x1ZGVkIHdoZW4gaW52aXRpbmcuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGludml0ZVVzZXJCeUVtYWlsKGVtYWlsLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vaW52aXRlYCwge1xyXG4gICAgICAgICAgICAgICAgYm9keTogeyBlbWFpbCwgZGF0YTogb3B0aW9ucy5kYXRhIH0sXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogX3VzZXJSZXNwb25zZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBlbWFpbCBsaW5rcyBhbmQgT1RQcyB0byBiZSBzZW50IHZpYSBhIGN1c3RvbSBlbWFpbCBwcm92aWRlci5cclxuICAgICAqIEBwYXJhbSBlbWFpbCBUaGUgdXNlcidzIGVtYWlsLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucGFzc3dvcmQgVXNlciBwYXNzd29yZC4gRm9yIHNpZ251cCBvbmx5LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGF0YSBPcHRpb25hbCB1c2VyIG1ldGFkYXRhLiBGb3Igc2lnbnVwIG9ubHkuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRpcmVjdFRvIFRoZSByZWRpcmVjdCB1cmwgd2hpY2ggc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBnZW5lcmF0ZWQgbGlua1xyXG4gICAgICovXHJcbiAgICBhc3luYyBnZW5lcmF0ZUxpbmsocGFyYW1zKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSBwYXJhbXMsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJvcHRpb25zXCJdKTtcclxuICAgICAgICAgICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdCksIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAoJ25ld0VtYWlsJyBpbiByZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXBsYWNlIG5ld0VtYWlsIHdpdGggbmV3X2VtYWlsIGluIHJlcXVlc3QgYm9keVxyXG4gICAgICAgICAgICAgICAgYm9keS5uZXdfZW1haWwgPSByZXN0ID09PSBudWxsIHx8IHJlc3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3QubmV3RW1haWw7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYm9keVsnbmV3RW1haWwnXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vYWRtaW4vZ2VuZXJhdGVfbGlua2AsIHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogX2dlbmVyYXRlTGlua1Jlc3BvbnNlLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gVXNlciBBZG1pbiBBUElcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyB1c2VyLlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVXNlcihhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzYCwge1xyXG4gICAgICAgICAgICAgICAgYm9keTogYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiBfdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgbGlzdCBvZiB1c2Vycy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlcnZlci4gTmV2ZXIgZXhwb3NlIHlvdXIgYHNlcnZpY2Vfcm9sZWAga2V5IGluIHRoZSBicm93c2VyLlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBBbiBvYmplY3Qgd2hpY2ggc3VwcG9ydHMgYHBhZ2VgIGFuZCBgcGVyUGFnZWAgYXMgbnVtYmVycywgdG8gYWx0ZXIgdGhlIHBhZ2luYXRlZCByZXN1bHRzLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBsaXN0VXNlcnMocGFyYW1zKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7IG5leHRQYWdlOiBudWxsLCBsYXN0UGFnZTogMCwgdG90YWw6IDAgfTtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzYCwge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgbm9SZXNvbHZlSnNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogKF9iID0gKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBwZXJfcGFnZTogKF9kID0gKF9jID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBlclBhZ2UpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogX25vUmVzb2x2ZUpzb25SZXNwb25zZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcilcclxuICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlLmVycm9yO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VycyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWwgPSAoX2UgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC10b3RhbC1jb3VudCcpKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAwO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5rcyA9IChfZyA9IChfZiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdsaW5rJykpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5zcGxpdCgnLCcpKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBbXTtcclxuICAgICAgICAgICAgaWYgKGxpbmtzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gcGFyc2VJbnQobGluay5zcGxpdCgnOycpWzBdLnNwbGl0KCc9JylbMV0uc3Vic3RyaW5nKDAsIDEpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWwgPSBKU09OLnBhcnNlKGxpbmsuc3BsaXQoJzsnKVsxXS5zcGxpdCgnPScpWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uW2Ake3JlbH1QYWdlYF0gPSBwYWdlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uLnRvdGFsID0gcGFyc2VJbnQodG90YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXNlcnMpLCBwYWdpbmF0aW9uKSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcnM6IFtdIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdXNlciBieSBpZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdWlkIFRoZSB1c2VyJ3MgdW5pcXVlIGlkZW50aWZpZXJcclxuICAgICAqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlcnZlci4gTmV2ZXIgZXhwb3NlIHlvdXIgYHNlcnZpY2Vfcm9sZWAga2V5IGluIHRoZSBicm93c2VyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRVc2VyQnlJZCh1aWQpIHtcclxuICAgICAgICB2YWxpZGF0ZVVVSUQodWlkKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke3VpZH1gLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB4Zm9ybTogX3VzZXJSZXNwb25zZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBUaGUgZGF0YSB5b3Ugd2FudCB0byB1cGRhdGUuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlVXNlckJ5SWQodWlkLCBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgdmFsaWRhdGVVVUlEKHVpZCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQVVQnLCBgJHt0aGlzLnVybH0vYWRtaW4vdXNlcnMvJHt1aWR9YCwge1xyXG4gICAgICAgICAgICAgICAgYm9keTogYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiBfdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlIGEgdXNlci4gUmVxdWlyZXMgYSBgc2VydmljZV9yb2xlYCBrZXkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIFRoZSB1c2VyIGlkIHlvdSB3YW50IHRvIHJlbW92ZS5cclxuICAgICAqIEBwYXJhbSBzaG91bGRTb2Z0RGVsZXRlIElmIHRydWUsIHRoZW4gdGhlIHVzZXIgd2lsbCBiZSBzb2Z0LWRlbGV0ZWQgZnJvbSB0aGUgYXV0aCBzY2hlbWEuIFNvZnQgZGVsZXRpb24gYWxsb3dzIHVzZXIgaWRlbnRpZmljYXRpb24gZnJvbSB0aGUgaGFzaGVkIHVzZXIgSUQgYnV0IGlzIG5vdCByZXZlcnNpYmxlLlxyXG4gICAgICogRGVmYXVsdHMgdG8gZmFsc2UgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlVXNlcihpZCwgc2hvdWxkU29mdERlbGV0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFsaWRhdGVVVUlEKGlkKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0RFTEVURScsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke2lkfWAsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGRfc29mdF9kZWxldGU6IHNob3VsZFNvZnREZWxldGUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IF91c2VyUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX2xpc3RGYWN0b3JzKHBhcmFtcykge1xyXG4gICAgICAgIHZhbGlkYXRlVVVJRChwYXJhbXMudXNlcklkKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzLyR7cGFyYW1zLnVzZXJJZH0vZmFjdG9yc2AsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiAoZmFjdG9ycykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgZmFjdG9ycyB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9kZWxldGVGYWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdmFsaWRhdGVVVUlEKHBhcmFtcy51c2VySWQpO1xyXG4gICAgICAgIHZhbGlkYXRlVVVJRChwYXJhbXMuaWQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzLyR7cGFyYW1zLnVzZXJJZH0vZmFjdG9ycy8ke3BhcmFtcy5pZH1gLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9R29UcnVlQWRtaW5BcGkuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js": /*!********************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js ***! \********************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ GoTrueClient; }\n/* harmony export */ });\n/* harmony import */ var _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\");\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\");\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n/* harmony import */ var _lib_fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/fetch */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _lib_local_storage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/local-storage */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js\");\n/* harmony import */ var _lib_polyfills__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/polyfills */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js\");\n/* harmony import */ var _lib_version__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/version */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js\");\n/* harmony import */ var _lib_locks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/locks */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js\");\n/* harmony import */ var _lib_base64url__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lib/base64url */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n(0,_lib_polyfills__WEBPACK_IMPORTED_MODULE_6__.polyfillGlobalThis)(); // Make \"globalThis\" available\r\nconst DEFAULT_OPTIONS = {\r\n url: _lib_constants__WEBPACK_IMPORTED_MODULE_1__.GOTRUE_URL,\r\n storageKey: _lib_constants__WEBPACK_IMPORTED_MODULE_1__.STORAGE_KEY,\r\n autoRefreshToken: true,\r\n persistSession: true,\r\n detectSessionInUrl: true,\r\n headers: _lib_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_HEADERS,\r\n flowType: 'implicit',\r\n debug: false,\r\n hasCustomAuthorizationHeader: false,\r\n};\r\nasync function lockNoOp(name, acquireTimeout, fn) {\r\n return await fn();\r\n}\r\n/**\r\n * Caches JWKS values for all clients created in the same environment. This is\r\n * especially useful for shared-memory execution environments such as Vercel's\r\n * Fluid Compute, AWS Lambda or Supabase's Edge Functions. Regardless of how\r\n * many clients are created, if they share the same storage key they will use\r\n * the same JWKS cache, significantly speeding up getClaims() with asymmetric\r\n * JWTs.\r\n */\r\nconst GLOBAL_JWKS = {};\r\nclass GoTrueClient {\r\n /**\r\n * Create a new client for use in the browser.\r\n */\r\n constructor(options) {\r\n var _a, _b;\r\n /**\r\n * @experimental\r\n */\r\n this.userStorage = null;\r\n this.memoryStorage = null;\r\n this.stateChangeEmitters = new Map();\r\n this.autoRefreshTicker = null;\r\n this.visibilityChangedCallback = null;\r\n this.refreshingDeferred = null;\r\n /**\r\n * Keeps track of the async client initialization.\r\n * When null or not yet resolved the auth state is `unknown`\r\n * Once resolved the the auth state is known and it's save to call any further client methods.\r\n * Keep extra care to never reject or throw uncaught errors\r\n */\r\n this.initializePromise = null;\r\n this.detectSessionInUrl = true;\r\n this.hasCustomAuthorizationHeader = false;\r\n this.suppressGetSessionWarning = false;\r\n this.lockAcquired = false;\r\n this.pendingInLock = [];\r\n /**\r\n * Used to broadcast state change events to other tabs listening.\r\n */\r\n this.broadcastChannel = null;\r\n this.logger = console.log;\r\n this.instanceID = GoTrueClient.nextInstanceID;\r\n GoTrueClient.nextInstanceID += 1;\r\n if (this.instanceID > 0 && (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)()) {\r\n console.warn('Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.');\r\n }\r\n const settings = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\r\n this.logDebugMessages = !!settings.debug;\r\n if (typeof settings.debug === 'function') {\r\n this.logger = settings.debug;\r\n }\r\n this.persistSession = settings.persistSession;\r\n this.storageKey = settings.storageKey;\r\n this.autoRefreshToken = settings.autoRefreshToken;\r\n this.admin = new _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\r\n url: settings.url,\r\n headers: settings.headers,\r\n fetch: settings.fetch,\r\n });\r\n this.url = settings.url;\r\n this.headers = settings.headers;\r\n this.fetch = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.resolveFetch)(settings.fetch);\r\n this.lock = settings.lock || lockNoOp;\r\n this.detectSessionInUrl = settings.detectSessionInUrl;\r\n this.flowType = settings.flowType;\r\n this.hasCustomAuthorizationHeader = settings.hasCustomAuthorizationHeader;\r\n if (settings.lock) {\r\n this.lock = settings.lock;\r\n }\r\n else if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _a === void 0 ? void 0 : _a.locks)) {\r\n this.lock = _lib_locks__WEBPACK_IMPORTED_MODULE_8__.navigatorLock;\r\n }\r\n else {\r\n this.lock = lockNoOp;\r\n }\r\n if (!this.jwks) {\r\n this.jwks = { keys: [] };\r\n this.jwks_cached_at = Number.MIN_SAFE_INTEGER;\r\n }\r\n this.mfa = {\r\n verify: this._verify.bind(this),\r\n enroll: this._enroll.bind(this),\r\n unenroll: this._unenroll.bind(this),\r\n challenge: this._challenge.bind(this),\r\n listFactors: this._listFactors.bind(this),\r\n challengeAndVerify: this._challengeAndVerify.bind(this),\r\n getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this),\r\n };\r\n if (this.persistSession) {\r\n if (settings.storage) {\r\n this.storage = settings.storage;\r\n }\r\n else {\r\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.supportsLocalStorage)()) {\r\n this.storage = globalThis.localStorage;\r\n }\r\n else {\r\n this.memoryStorage = {};\r\n this.storage = (0,_lib_local_storage__WEBPACK_IMPORTED_MODULE_5__.memoryLocalStorageAdapter)(this.memoryStorage);\r\n }\r\n }\r\n if (settings.userStorage) {\r\n this.userStorage = settings.userStorage;\r\n }\r\n }\r\n else {\r\n this.memoryStorage = {};\r\n this.storage = (0,_lib_local_storage__WEBPACK_IMPORTED_MODULE_5__.memoryLocalStorageAdapter)(this.memoryStorage);\r\n }\r\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) {\r\n try {\r\n this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey);\r\n }\r\n catch (e) {\r\n console.error('Failed to create a new BroadcastChannel, multi-tab state changes will not be available', e);\r\n }\r\n (_b = this.broadcastChannel) === null || _b === void 0 ? void 0 : _b.addEventListener('message', async (event) => {\r\n this._debug('received broadcast notification from other tab or client', event);\r\n await this._notifyAllSubscribers(event.data.event, event.data.session, false); // broadcast = false so we don't get an endless loop of messages\r\n });\r\n }\r\n this.initialize();\r\n }\r\n /**\r\n * The JWKS used for verifying asymmetric JWTs\r\n */\r\n get jwks() {\r\n var _a, _b;\r\n return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.jwks) !== null && _b !== void 0 ? _b : { keys: [] };\r\n }\r\n set jwks(value) {\r\n GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { jwks: value });\r\n }\r\n get jwks_cached_at() {\r\n var _a, _b;\r\n return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.cachedAt) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER;\r\n }\r\n set jwks_cached_at(value) {\r\n GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { cachedAt: value });\r\n }\r\n _debug(...args) {\r\n if (this.logDebugMessages) {\r\n this.logger(`GoTrueClient@${this.instanceID} (${_lib_version__WEBPACK_IMPORTED_MODULE_7__.version}) ${new Date().toISOString()}`, ...args);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Initializes the client session either from the url or from storage.\r\n * This method is automatically called when instantiating the client, but should also be called\r\n * manually when checking for an error from an auth redirect (oauth, magiclink, password recovery, etc).\r\n */\r\n async initialize() {\r\n if (this.initializePromise) {\r\n return await this.initializePromise;\r\n }\r\n this.initializePromise = (async () => {\r\n return await this._acquireLock(-1, async () => {\r\n return await this._initialize();\r\n });\r\n })();\r\n return await this.initializePromise;\r\n }\r\n /**\r\n * IMPORTANT:\r\n * 1. Never throw in this method, as it is called from the constructor\r\n * 2. Never return a session from this method as it would be cached over\r\n * the whole lifetime of the client\r\n */\r\n async _initialize() {\r\n var _a;\r\n try {\r\n const params = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.parseParametersFromURL)(window.location.href);\r\n let callbackUrlType = 'none';\r\n if (this._isImplicitGrantCallback(params)) {\r\n callbackUrlType = 'implicit';\r\n }\r\n else if (await this._isPKCECallback(params)) {\r\n callbackUrlType = 'pkce';\r\n }\r\n /**\r\n * Attempt to get the session from the URL only if these conditions are fulfilled\r\n *\r\n * Note: If the URL isn't one of the callback url types (implicit or pkce),\r\n * then there could be an existing session so we don't want to prematurely remove it\r\n */\r\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && this.detectSessionInUrl && callbackUrlType !== 'none') {\r\n const { data, error } = await this._getSessionFromURL(params, callbackUrlType);\r\n if (error) {\r\n this._debug('#_initialize()', 'error detecting session from URL', error);\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthImplicitGrantRedirectError)(error)) {\r\n const errorCode = (_a = error.details) === null || _a === void 0 ? void 0 : _a.code;\r\n if (errorCode === 'identity_already_exists' ||\r\n errorCode === 'identity_not_found' ||\r\n errorCode === 'single_identity_not_deletable') {\r\n return { error };\r\n }\r\n }\r\n // failed login attempt via url,\r\n // remove old session as in verifyOtp, signUp and signInWith*\r\n await this._removeSession();\r\n return { error };\r\n }\r\n const { session, redirectType } = data;\r\n this._debug('#_initialize()', 'detected session in URL', session, 'redirect type', redirectType);\r\n await this._saveSession(session);\r\n setTimeout(async () => {\r\n if (redirectType === 'recovery') {\r\n await this._notifyAllSubscribers('PASSWORD_RECOVERY', session);\r\n }\r\n else {\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n }, 0);\r\n return { error: null };\r\n }\r\n // no login attempt via callback url try to recover session from storage\r\n await this._recoverAndRefresh();\r\n return { error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { error };\r\n }\r\n return {\r\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError('Unexpected error during initialization', error),\r\n };\r\n }\r\n finally {\r\n await this._handleVisibilityChange();\r\n this._debug('#_initialize()', 'end');\r\n }\r\n }\r\n /**\r\n * Creates a new anonymous user.\r\n *\r\n * @returns A session where the is_anonymous claim in the access token JWT set to true\r\n */\r\n async signInAnonymously(credentials) {\r\n var _a, _b, _c;\r\n try {\r\n const res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/signup`, {\r\n headers: this.headers,\r\n body: {\r\n data: (_b = (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : {},\r\n gotrue_meta_security: { captcha_token: (_c = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _c === void 0 ? void 0 : _c.captchaToken },\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n const { data, error } = res;\r\n if (error || !data) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n const session = data.session;\r\n const user = data.user;\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n return { data: { user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Creates a new user.\r\n *\r\n * Be aware that if a user account exists in the system you may get back an\r\n * error message that attempts to hide this information from the user.\r\n * This method has support for PKCE via email signups. The PKCE flow cannot be used when autoconfirm is enabled.\r\n *\r\n * @returns A logged-in session if the server has \"autoconfirm\" ON\r\n * @returns A user if the server has \"autoconfirm\" OFF\r\n */\r\n async signUp(credentials) {\r\n var _a, _b, _c;\r\n try {\r\n let res;\r\n if ('email' in credentials) {\r\n const { email, password, options } = credentials;\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/signup`, {\r\n headers: this.headers,\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n body: {\r\n email,\r\n password,\r\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n code_challenge: codeChallenge,\r\n code_challenge_method: codeChallengeMethod,\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n }\r\n else if ('phone' in credentials) {\r\n const { phone, password, options } = credentials;\r\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/signup`, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n password,\r\n data: (_b = options === null || options === void 0 ? void 0 : options.data) !== null && _b !== void 0 ? _b : {},\r\n channel: (_c = options === null || options === void 0 ? void 0 : options.channel) !== null && _c !== void 0 ? _c : 'sms',\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n }\r\n else {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\r\n }\r\n const { data, error } = res;\r\n if (error || !data) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n const session = data.session;\r\n const user = data.user;\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n return { data: { user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in an existing user with an email and password or phone and password.\r\n *\r\n * Be aware that you may get back an error message that will not distinguish\r\n * between the cases where the account does not exist or that the\r\n * email/phone and password combination is wrong or that the account can only\r\n * be accessed via social login.\r\n */\r\n async signInWithPassword(credentials) {\r\n try {\r\n let res;\r\n if ('email' in credentials) {\r\n const { email, password, options } = credentials;\r\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\r\n headers: this.headers,\r\n body: {\r\n email,\r\n password,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponsePassword,\r\n });\r\n }\r\n else if ('phone' in credentials) {\r\n const { phone, password, options } = credentials;\r\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n password,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponsePassword,\r\n });\r\n }\r\n else {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\r\n }\r\n const { data, error } = res;\r\n if (error) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n else if (!data || !data.session || !data.user) {\r\n return { data: { user: null, session: null }, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError() };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return {\r\n data: Object.assign({ user: data.user, session: data.session }, (data.weak_password ? { weakPassword: data.weak_password } : null)),\r\n error,\r\n };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in an existing user via a third-party provider.\r\n * This method supports the PKCE flow.\r\n */\r\n async signInWithOAuth(credentials) {\r\n var _a, _b, _c, _d;\r\n return await this._handleProviderSignIn(credentials.provider, {\r\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\r\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\r\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\r\n skipBrowserRedirect: (_d = credentials.options) === null || _d === void 0 ? void 0 : _d.skipBrowserRedirect,\r\n });\r\n }\r\n /**\r\n * Log in an existing user by exchanging an Auth Code issued during the PKCE flow.\r\n */\r\n async exchangeCodeForSession(authCode) {\r\n await this.initializePromise;\r\n return this._acquireLock(-1, async () => {\r\n return this._exchangeCodeForSession(authCode);\r\n });\r\n }\r\n /**\r\n * Signs in a user by verifying a message signed by the user's private key.\r\n * Only Solana supported at this time, using the Sign in with Solana standard.\r\n */\r\n async signInWithWeb3(credentials) {\r\n const { chain } = credentials;\r\n if (chain === 'solana') {\r\n return await this.signInWithSolana(credentials);\r\n }\r\n throw new Error(`@supabase/auth-js: Unsupported chain \"${chain}\"`);\r\n }\r\n async signInWithSolana(credentials) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\r\n let message;\r\n let signature;\r\n if ('message' in credentials) {\r\n message = credentials.message;\r\n signature = credentials.signature;\r\n }\r\n else {\r\n const { chain, wallet, statement, options } = credentials;\r\n let resolvedWallet;\r\n if (!(0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)()) {\r\n if (typeof wallet !== 'object' || !(options === null || options === void 0 ? void 0 : options.url)) {\r\n throw new Error('@supabase/auth-js: Both wallet and url must be specified in non-browser environments.');\r\n }\r\n resolvedWallet = wallet;\r\n }\r\n else if (typeof wallet === 'object') {\r\n resolvedWallet = wallet;\r\n }\r\n else {\r\n const windowAny = window;\r\n if ('solana' in windowAny &&\r\n typeof windowAny.solana === 'object' &&\r\n (('signIn' in windowAny.solana && typeof windowAny.solana.signIn === 'function') ||\r\n ('signMessage' in windowAny.solana &&\r\n typeof windowAny.solana.signMessage === 'function'))) {\r\n resolvedWallet = windowAny.solana;\r\n }\r\n else {\r\n throw new Error(`@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.`);\r\n }\r\n }\r\n const url = new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : window.location.href);\r\n if ('signIn' in resolvedWallet && resolvedWallet.signIn) {\r\n const output = await resolvedWallet.signIn(Object.assign(Object.assign(Object.assign({ issuedAt: new Date().toISOString() }, options === null || options === void 0 ? void 0 : options.signInWithSolana), { \r\n // non-overridable properties\r\n version: '1', domain: url.host, uri: url.href }), (statement ? { statement } : null)));\r\n let outputToProcess;\r\n if (Array.isArray(output) && output[0] && typeof output[0] === 'object') {\r\n outputToProcess = output[0];\r\n }\r\n else if (output &&\r\n typeof output === 'object' &&\r\n 'signedMessage' in output &&\r\n 'signature' in output) {\r\n outputToProcess = output;\r\n }\r\n else {\r\n throw new Error('@supabase/auth-js: Wallet method signIn() returned unrecognized value');\r\n }\r\n if ('signedMessage' in outputToProcess &&\r\n 'signature' in outputToProcess &&\r\n (typeof outputToProcess.signedMessage === 'string' ||\r\n outputToProcess.signedMessage instanceof Uint8Array) &&\r\n outputToProcess.signature instanceof Uint8Array) {\r\n message =\r\n typeof outputToProcess.signedMessage === 'string'\r\n ? outputToProcess.signedMessage\r\n : new TextDecoder().decode(outputToProcess.signedMessage);\r\n signature = outputToProcess.signature;\r\n }\r\n else {\r\n throw new Error('@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields');\r\n }\r\n }\r\n else {\r\n if (!('signMessage' in resolvedWallet) ||\r\n typeof resolvedWallet.signMessage !== 'function' ||\r\n !('publicKey' in resolvedWallet) ||\r\n typeof resolvedWallet !== 'object' ||\r\n !resolvedWallet.publicKey ||\r\n !('toBase58' in resolvedWallet.publicKey) ||\r\n typeof resolvedWallet.publicKey.toBase58 !== 'function') {\r\n throw new Error('@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API');\r\n }\r\n message = [\r\n `${url.host} wants you to sign in with your Solana account:`,\r\n resolvedWallet.publicKey.toBase58(),\r\n ...(statement ? ['', statement, ''] : ['']),\r\n 'Version: 1',\r\n `URI: ${url.href}`,\r\n `Issued At: ${(_c = (_b = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _b === void 0 ? void 0 : _b.issuedAt) !== null && _c !== void 0 ? _c : new Date().toISOString()}`,\r\n ...(((_d = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _d === void 0 ? void 0 : _d.notBefore)\r\n ? [`Not Before: ${options.signInWithSolana.notBefore}`]\r\n : []),\r\n ...(((_e = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _e === void 0 ? void 0 : _e.expirationTime)\r\n ? [`Expiration Time: ${options.signInWithSolana.expirationTime}`]\r\n : []),\r\n ...(((_f = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _f === void 0 ? void 0 : _f.chainId)\r\n ? [`Chain ID: ${options.signInWithSolana.chainId}`]\r\n : []),\r\n ...(((_g = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _g === void 0 ? void 0 : _g.nonce) ? [`Nonce: ${options.signInWithSolana.nonce}`] : []),\r\n ...(((_h = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _h === void 0 ? void 0 : _h.requestId)\r\n ? [`Request ID: ${options.signInWithSolana.requestId}`]\r\n : []),\r\n ...(((_k = (_j = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _j === void 0 ? void 0 : _j.resources) === null || _k === void 0 ? void 0 : _k.length)\r\n ? [\r\n 'Resources',\r\n ...options.signInWithSolana.resources.map((resource) => `- ${resource}`),\r\n ]\r\n : []),\r\n ].join('\\n');\r\n const maybeSignature = await resolvedWallet.signMessage(new TextEncoder().encode(message), 'utf8');\r\n if (!maybeSignature || !(maybeSignature instanceof Uint8Array)) {\r\n throw new Error('@supabase/auth-js: Wallet signMessage() API returned an recognized value');\r\n }\r\n signature = maybeSignature;\r\n }\r\n }\r\n try {\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=web3`, {\r\n headers: this.headers,\r\n body: Object.assign({ chain: 'solana', message, signature: (0,_lib_base64url__WEBPACK_IMPORTED_MODULE_9__.bytesToBase64URL)(signature) }, (((_l = credentials.options) === null || _l === void 0 ? void 0 : _l.captchaToken)\r\n ? { gotrue_meta_security: { captcha_token: (_m = credentials.options) === null || _m === void 0 ? void 0 : _m.captchaToken } }\r\n : null)),\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data || !data.session || !data.user) {\r\n return {\r\n data: { user: null, session: null },\r\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError(),\r\n };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return { data: Object.assign({}, data), error };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _exchangeCodeForSession(authCode) {\r\n const storageItem = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n const [codeVerifier, redirectType] = (storageItem !== null && storageItem !== void 0 ? storageItem : '').split('/');\r\n try {\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=pkce`, {\r\n headers: this.headers,\r\n body: {\r\n auth_code: authCode,\r\n code_verifier: codeVerifier,\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data || !data.session || !data.user) {\r\n return {\r\n data: { user: null, session: null, redirectType: null },\r\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError(),\r\n };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return { data: Object.assign(Object.assign({}, data), { redirectType: redirectType !== null && redirectType !== void 0 ? redirectType : null }), error };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null, redirectType: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Allows signing in with an OIDC ID token. The authentication provider used\r\n * should be enabled and configured.\r\n */\r\n async signInWithIdToken(credentials) {\r\n try {\r\n const { options, provider, token, access_token, nonce } = credentials;\r\n const res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\r\n headers: this.headers,\r\n body: {\r\n provider,\r\n id_token: token,\r\n access_token,\r\n nonce,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n const { data, error } = res;\r\n if (error) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n else if (!data || !data.session || !data.user) {\r\n return {\r\n data: { user: null, session: null },\r\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError(),\r\n };\r\n }\r\n if (data.session) {\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\r\n }\r\n return { data, error };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in a user using magiclink or a one-time password (OTP).\r\n *\r\n * If the `{{ .ConfirmationURL }}` variable is specified in the email template, a magiclink will be sent.\r\n * If the `{{ .Token }}` variable is specified in the email template, an OTP will be sent.\r\n * If you're using phone sign-ins, only an OTP will be sent. You won't be able to send a magiclink for phone sign-ins.\r\n *\r\n * Be aware that you may get back an error message that will not distinguish\r\n * between the cases where the account does not exist or, that the account\r\n * can only be accessed via social login.\r\n *\r\n * Do note that you will need to configure a Whatsapp sender on Twilio\r\n * if you are using phone sign in with the 'whatsapp' channel. The whatsapp\r\n * channel is not supported on other providers\r\n * at this time.\r\n * This method supports PKCE when an email is passed.\r\n */\r\n async signInWithOtp(credentials) {\r\n var _a, _b, _c, _d, _e;\r\n try {\r\n if ('email' in credentials) {\r\n const { email, options } = credentials;\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n const { error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/otp`, {\r\n headers: this.headers,\r\n body: {\r\n email,\r\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\r\n create_user: (_b = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _b !== void 0 ? _b : true,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n code_challenge: codeChallenge,\r\n code_challenge_method: codeChallengeMethod,\r\n },\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n });\r\n return { data: { user: null, session: null }, error };\r\n }\r\n if ('phone' in credentials) {\r\n const { phone, options } = credentials;\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/otp`, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n data: (_c = options === null || options === void 0 ? void 0 : options.data) !== null && _c !== void 0 ? _c : {},\r\n create_user: (_d = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _d !== void 0 ? _d : true,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n channel: (_e = options === null || options === void 0 ? void 0 : options.channel) !== null && _e !== void 0 ? _e : 'sms',\r\n },\r\n });\r\n return { data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id }, error };\r\n }\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number.');\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Log in a user given a User supplied OTP or TokenHash received through mobile or email.\r\n */\r\n async verifyOtp(params) {\r\n var _a, _b;\r\n try {\r\n let redirectTo = undefined;\r\n let captchaToken = undefined;\r\n if ('options' in params) {\r\n redirectTo = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo;\r\n captchaToken = (_b = params.options) === null || _b === void 0 ? void 0 : _b.captchaToken;\r\n }\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/verify`, {\r\n headers: this.headers,\r\n body: Object.assign(Object.assign({}, params), { gotrue_meta_security: { captcha_token: captchaToken } }),\r\n redirectTo,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data) {\r\n throw new Error('An error occurred on token verification.');\r\n }\r\n const session = data.session;\r\n const user = data.user;\r\n if (session === null || session === void 0 ? void 0 : session.access_token) {\r\n await this._saveSession(session);\r\n await this._notifyAllSubscribers(params.type == 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN', session);\r\n }\r\n return { data: { user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Attempts a single-sign on using an enterprise Identity Provider. A\r\n * successful SSO attempt will redirect the current page to the identity\r\n * provider authorization page. The redirect URL is implementation and SSO\r\n * protocol specific.\r\n *\r\n * You can use it by providing a SSO domain. Typically you can extract this\r\n * domain by asking users for their email address. If this domain is\r\n * registered on the Auth instance the redirect will use that organization's\r\n * currently active SSO Identity Provider for the login.\r\n *\r\n * If you have built an organization-specific login page, you can use the\r\n * organization's SSO Identity Provider UUID directly instead.\r\n */\r\n async signInWithSSO(params) {\r\n var _a, _b, _c;\r\n try {\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/sso`, {\r\n body: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ('providerId' in params ? { provider_id: params.providerId } : null)), ('domain' in params ? { domain: params.domain } : null)), { redirect_to: (_b = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo) !== null && _b !== void 0 ? _b : undefined }), (((_c = params === null || params === void 0 ? void 0 : params.options) === null || _c === void 0 ? void 0 : _c.captchaToken)\r\n ? { gotrue_meta_security: { captcha_token: params.options.captchaToken } }\r\n : null)), { skip_http_redirect: true, code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\r\n headers: this.headers,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._ssoResponse,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Sends a reauthentication OTP to the user's email or phone number.\r\n * Requires the user to be signed-in.\r\n */\r\n async reauthenticate() {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._reauthenticate();\r\n });\r\n }\r\n async _reauthenticate() {\r\n try {\r\n return await this._useSession(async (result) => {\r\n const { data: { session }, error: sessionError, } = result;\r\n if (sessionError)\r\n throw sessionError;\r\n if (!session)\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\r\n const { error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/reauthenticate`, {\r\n headers: this.headers,\r\n jwt: session.access_token,\r\n });\r\n return { data: { user: null, session: null }, error };\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Resends an existing signup confirmation email, email change email, SMS OTP or phone change OTP.\r\n */\r\n async resend(credentials) {\r\n try {\r\n const endpoint = `${this.url}/resend`;\r\n if ('email' in credentials) {\r\n const { email, type, options } = credentials;\r\n const { error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', endpoint, {\r\n headers: this.headers,\r\n body: {\r\n email,\r\n type,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n });\r\n return { data: { user: null, session: null }, error };\r\n }\r\n else if ('phone' in credentials) {\r\n const { phone, type, options } = credentials;\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', endpoint, {\r\n headers: this.headers,\r\n body: {\r\n phone,\r\n type,\r\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\r\n },\r\n });\r\n return { data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id }, error };\r\n }\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number and a type');\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Returns the session, refreshing it if necessary.\r\n *\r\n * The session returned can be null if the session is not detected which can happen in the event a user is not signed-in or has logged out.\r\n *\r\n * **IMPORTANT:** This method loads values directly from the storage attached\r\n * to the client. If that storage is based on request cookies for example,\r\n * the values in it may not be authentic and therefore it's strongly advised\r\n * against using this method and its results in such circumstances. A warning\r\n * will be emitted if this is detected. Use {@link #getUser()} instead.\r\n */\r\n async getSession() {\r\n await this.initializePromise;\r\n const result = await this._acquireLock(-1, async () => {\r\n return this._useSession(async (result) => {\r\n return result;\r\n });\r\n });\r\n return result;\r\n }\r\n /**\r\n * Acquires a global lock based on the storage key.\r\n */\r\n async _acquireLock(acquireTimeout, fn) {\r\n this._debug('#_acquireLock', 'begin', acquireTimeout);\r\n try {\r\n if (this.lockAcquired) {\r\n const last = this.pendingInLock.length\r\n ? this.pendingInLock[this.pendingInLock.length - 1]\r\n : Promise.resolve();\r\n const result = (async () => {\r\n await last;\r\n return await fn();\r\n })();\r\n this.pendingInLock.push((async () => {\r\n try {\r\n await result;\r\n }\r\n catch (e) {\r\n // we just care if it finished\r\n }\r\n })());\r\n return result;\r\n }\r\n return await this.lock(`lock:${this.storageKey}`, acquireTimeout, async () => {\r\n this._debug('#_acquireLock', 'lock acquired for storage key', this.storageKey);\r\n try {\r\n this.lockAcquired = true;\r\n const result = fn();\r\n this.pendingInLock.push((async () => {\r\n try {\r\n await result;\r\n }\r\n catch (e) {\r\n // we just care if it finished\r\n }\r\n })());\r\n await result;\r\n // keep draining the queue until there's nothing to wait on\r\n while (this.pendingInLock.length) {\r\n const waitOn = [...this.pendingInLock];\r\n await Promise.all(waitOn);\r\n this.pendingInLock.splice(0, waitOn.length);\r\n }\r\n return await result;\r\n }\r\n finally {\r\n this._debug('#_acquireLock', 'lock released for storage key', this.storageKey);\r\n this.lockAcquired = false;\r\n }\r\n });\r\n }\r\n finally {\r\n this._debug('#_acquireLock', 'end');\r\n }\r\n }\r\n /**\r\n * Use instead of {@link #getSession} inside the library. It is\r\n * semantically usually what you want, as getting a session involves some\r\n * processing afterwards that requires only one client operating on the\r\n * session at once across multiple tabs or processes.\r\n */\r\n async _useSession(fn) {\r\n this._debug('#_useSession', 'begin');\r\n try {\r\n // the use of __loadSession here is the only correct use of the function!\r\n const result = await this.__loadSession();\r\n return await fn(result);\r\n }\r\n finally {\r\n this._debug('#_useSession', 'end');\r\n }\r\n }\r\n /**\r\n * NEVER USE DIRECTLY!\r\n *\r\n * Always use {@link #_useSession}.\r\n */\r\n async __loadSession() {\r\n this._debug('#__loadSession()', 'begin');\r\n if (!this.lockAcquired) {\r\n this._debug('#__loadSession()', 'used outside of an acquired lock!', new Error().stack);\r\n }\r\n try {\r\n let currentSession = null;\r\n const maybeSession = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, this.storageKey);\r\n this._debug('#getSession()', 'session from storage', maybeSession);\r\n if (maybeSession !== null) {\r\n if (this._isValidSession(maybeSession)) {\r\n currentSession = maybeSession;\r\n }\r\n else {\r\n this._debug('#getSession()', 'session from storage is not valid');\r\n await this._removeSession();\r\n }\r\n }\r\n if (!currentSession) {\r\n return { data: { session: null }, error: null };\r\n }\r\n // A session is considered expired before the access token _actually_\r\n // expires. When the autoRefreshToken option is off (or when the tab is\r\n // in the background), very eager users of getSession() -- like\r\n // realtime-js -- might send a valid JWT which will expire by the time it\r\n // reaches the server.\r\n const hasExpired = currentSession.expires_at\r\n ? currentSession.expires_at * 1000 - Date.now() < _lib_constants__WEBPACK_IMPORTED_MODULE_1__.EXPIRY_MARGIN_MS\r\n : false;\r\n this._debug('#__loadSession()', `session has${hasExpired ? '' : ' not'} expired`, 'expires_at', currentSession.expires_at);\r\n if (!hasExpired) {\r\n if (this.userStorage) {\r\n const maybeUser = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.userStorage, this.storageKey + '-user'));\r\n if (maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) {\r\n currentSession.user = maybeUser.user;\r\n }\r\n else {\r\n currentSession.user = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.userNotAvailableProxy)();\r\n }\r\n }\r\n if (this.storage.isServer && currentSession.user) {\r\n let suppressWarning = this.suppressGetSessionWarning;\r\n const proxySession = new Proxy(currentSession, {\r\n get: (target, prop, receiver) => {\r\n if (!suppressWarning && prop === 'user') {\r\n // only show warning when the user object is being accessed from the server\r\n console.warn('Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.');\r\n suppressWarning = true; // keeps this proxy instance from logging additional warnings\r\n this.suppressGetSessionWarning = true; // keeps this client's future proxy instances from warning\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n currentSession = proxySession;\r\n }\r\n return { data: { session: currentSession }, error: null };\r\n }\r\n const { session, error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n return { data: { session: null }, error };\r\n }\r\n return { data: { session }, error: null };\r\n }\r\n finally {\r\n this._debug('#__loadSession()', 'end');\r\n }\r\n }\r\n /**\r\n * Gets the current user details if there is an existing session. This method\r\n * performs a network request to the Supabase Auth server, so the returned\r\n * value is authentic and can be used to base authorization rules on.\r\n *\r\n * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used.\r\n */\r\n async getUser(jwt) {\r\n if (jwt) {\r\n return await this._getUser(jwt);\r\n }\r\n await this.initializePromise;\r\n const result = await this._acquireLock(-1, async () => {\r\n return await this._getUser();\r\n });\r\n return result;\r\n }\r\n async _getUser(jwt) {\r\n try {\r\n if (jwt) {\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/user`, {\r\n headers: this.headers,\r\n jwt: jwt,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._userResponse,\r\n });\r\n }\r\n return await this._useSession(async (result) => {\r\n var _a, _b, _c;\r\n const { data, error } = result;\r\n if (error) {\r\n throw error;\r\n }\r\n // returns an error if there is no access_token or custom authorization header\r\n if (!((_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) && !this.hasCustomAuthorizationHeader) {\r\n return { data: { user: null }, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() };\r\n }\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/user`, {\r\n headers: this.headers,\r\n jwt: (_c = (_b = data.session) === null || _b === void 0 ? void 0 : _b.access_token) !== null && _c !== void 0 ? _c : undefined,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._userResponse,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthSessionMissingError)(error)) {\r\n // JWT contains a `session_id` which does not correspond to an active\r\n // session in the database, indicating the user is signed out.\r\n await this._removeSession();\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n }\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Updates user data for a logged in user.\r\n */\r\n async updateUser(attributes, options = {}) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._updateUser(attributes, options);\r\n });\r\n }\r\n async _updateUser(attributes, options = {}) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n throw sessionError;\r\n }\r\n if (!sessionData.session) {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\r\n }\r\n const session = sessionData.session;\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce' && attributes.email != null) {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n }\r\n const { data, error: userError } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'PUT', `${this.url}/user`, {\r\n headers: this.headers,\r\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\r\n body: Object.assign(Object.assign({}, attributes), { code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\r\n jwt: session.access_token,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._userResponse,\r\n });\r\n if (userError)\r\n throw userError;\r\n session.user = data.user;\r\n await this._saveSession(session);\r\n await this._notifyAllSubscribers('USER_UPDATED', session);\r\n return { data: { user: session.user }, error: null };\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Sets the session data from the current session. If the current session is expired, setSession will take care of refreshing it to obtain a new session.\r\n * If the refresh token or access token in the current session is invalid, an error will be thrown.\r\n * @param currentSession The current session that minimally contains an access token and refresh token.\r\n */\r\n async setSession(currentSession) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._setSession(currentSession);\r\n });\r\n }\r\n async _setSession(currentSession) {\r\n try {\r\n if (!currentSession.access_token || !currentSession.refresh_token) {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\r\n }\r\n const timeNow = Date.now() / 1000;\r\n let expiresAt = timeNow;\r\n let hasExpired = true;\r\n let session = null;\r\n const { payload } = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.decodeJWT)(currentSession.access_token);\r\n if (payload.exp) {\r\n expiresAt = payload.exp;\r\n hasExpired = expiresAt <= timeNow;\r\n }\r\n if (hasExpired) {\r\n const { session: refreshedSession, error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n if (!refreshedSession) {\r\n return { data: { user: null, session: null }, error: null };\r\n }\r\n session = refreshedSession;\r\n }\r\n else {\r\n const { data, error } = await this._getUser(currentSession.access_token);\r\n if (error) {\r\n throw error;\r\n }\r\n session = {\r\n access_token: currentSession.access_token,\r\n refresh_token: currentSession.refresh_token,\r\n user: data.user,\r\n token_type: 'bearer',\r\n expires_in: expiresAt - timeNow,\r\n expires_at: expiresAt,\r\n };\r\n await this._saveSession(session);\r\n await this._notifyAllSubscribers('SIGNED_IN', session);\r\n }\r\n return { data: { user: session.user, session }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { session: null, user: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Returns a new session, regardless of expiry status.\r\n * Takes in an optional current session. If not passed in, then refreshSession() will attempt to retrieve it from getSession().\r\n * If the current session's refresh token is invalid, an error will be thrown.\r\n * @param currentSession The current session. If passed in, it must contain a refresh token.\r\n */\r\n async refreshSession(currentSession) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._refreshSession(currentSession);\r\n });\r\n }\r\n async _refreshSession(currentSession) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n if (!currentSession) {\r\n const { data, error } = result;\r\n if (error) {\r\n throw error;\r\n }\r\n currentSession = (_a = data.session) !== null && _a !== void 0 ? _a : undefined;\r\n }\r\n if (!(currentSession === null || currentSession === void 0 ? void 0 : currentSession.refresh_token)) {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\r\n }\r\n const { session, error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n return { data: { user: null, session: null }, error: error };\r\n }\r\n if (!session) {\r\n return { data: { user: null, session: null }, error: null };\r\n }\r\n return { data: { user: session.user, session }, error: null };\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { user: null, session: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Gets the session data from a URL string\r\n */\r\n async _getSessionFromURL(params, callbackUrlType) {\r\n try {\r\n if (!(0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)())\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError('No browser detected.');\r\n // If there's an error in the URL, it doesn't matter what flow it is, we just return the error.\r\n if (params.error || params.error_description || params.error_code) {\r\n // The error class returned implies that the redirect is from an implicit grant flow\r\n // but it could also be from a redirect error from a PKCE flow.\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError(params.error_description || 'Error in URL with unspecified error_description', {\r\n error: params.error || 'unspecified_error',\r\n code: params.error_code || 'unspecified_code',\r\n });\r\n }\r\n // Checks for mismatches between the flowType initialised in the client and the URL parameters\r\n switch (callbackUrlType) {\r\n case 'implicit':\r\n if (this.flowType === 'pkce') {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthPKCEGrantCodeExchangeError('Not a valid PKCE flow url.');\r\n }\r\n break;\r\n case 'pkce':\r\n if (this.flowType === 'implicit') {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.');\r\n }\r\n break;\r\n default:\r\n // there's no mismatch so we continue\r\n }\r\n // Since this is a redirect for PKCE, we attempt to retrieve the code from the URL for the code exchange\r\n if (callbackUrlType === 'pkce') {\r\n this._debug('#_initialize()', 'begin', 'is PKCE flow', true);\r\n if (!params.code)\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthPKCEGrantCodeExchangeError('No code detected.');\r\n const { data, error } = await this._exchangeCodeForSession(params.code);\r\n if (error)\r\n throw error;\r\n const url = new URL(window.location.href);\r\n url.searchParams.delete('code');\r\n window.history.replaceState(window.history.state, '', url.toString());\r\n return { data: { session: data.session, redirectType: null }, error: null };\r\n }\r\n const { provider_token, provider_refresh_token, access_token, refresh_token, expires_in, expires_at, token_type, } = params;\r\n if (!access_token || !expires_in || !refresh_token || !token_type) {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError('No session defined in URL');\r\n }\r\n const timeNow = Math.round(Date.now() / 1000);\r\n const expiresIn = parseInt(expires_in);\r\n let expiresAt = timeNow + expiresIn;\r\n if (expires_at) {\r\n expiresAt = parseInt(expires_at);\r\n }\r\n const actuallyExpiresIn = expiresAt - timeNow;\r\n if (actuallyExpiresIn * 1000 <= _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS) {\r\n console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${actuallyExpiresIn}s, should have been closer to ${expiresIn}s`);\r\n }\r\n const issuedAt = expiresAt - expiresIn;\r\n if (timeNow - issuedAt >= 120) {\r\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale', issuedAt, expiresAt, timeNow);\r\n }\r\n else if (timeNow - issuedAt < 0) {\r\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew', issuedAt, expiresAt, timeNow);\r\n }\r\n const { data, error } = await this._getUser(access_token);\r\n if (error)\r\n throw error;\r\n const session = {\r\n provider_token,\r\n provider_refresh_token,\r\n access_token,\r\n expires_in: expiresIn,\r\n expires_at: expiresAt,\r\n refresh_token,\r\n token_type,\r\n user: data.user,\r\n };\r\n // Remove tokens from URL\r\n window.location.hash = '';\r\n this._debug('#_getSessionFromURL()', 'clearing window.location.hash');\r\n return { data: { session, redirectType: params.type }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { session: null, redirectType: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Checks if the current URL contains parameters given by an implicit oauth grant flow (https://www.rfc-editor.org/rfc/rfc6749.html#section-4.2)\r\n */\r\n _isImplicitGrantCallback(params) {\r\n return Boolean(params.access_token || params.error_description);\r\n }\r\n /**\r\n * Checks if the current URL and backing storage contain parameters given by a PKCE flow\r\n */\r\n async _isPKCECallback(params) {\r\n const currentStorageContent = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n return !!(params.code && currentStorageContent);\r\n }\r\n /**\r\n * Inside a browser context, `signOut()` will remove the logged in user from the browser session and log them out - removing all items from localstorage and then trigger a `\"SIGNED_OUT\"` event.\r\n *\r\n * For server-side management, you can revoke all refresh tokens for a user by passing a user's JWT through to `auth.api.signOut(JWT: string)`.\r\n * There is no way to revoke a user's access token jwt until it expires. It is recommended to set a shorter expiry on the jwt for this reason.\r\n *\r\n * If using `others` scope, no `SIGNED_OUT` event is fired!\r\n */\r\n async signOut(options = { scope: 'global' }) {\r\n await this.initializePromise;\r\n return await this._acquireLock(-1, async () => {\r\n return await this._signOut(options);\r\n });\r\n }\r\n async _signOut({ scope } = { scope: 'global' }) {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data, error: sessionError } = result;\r\n if (sessionError) {\r\n return { error: sessionError };\r\n }\r\n const accessToken = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token;\r\n if (accessToken) {\r\n const { error } = await this.admin.signOut(accessToken, scope);\r\n if (error) {\r\n // ignore 404s since user might not exist anymore\r\n // ignore 401s since an invalid or expired JWT should sign out the current session\r\n if (!((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthApiError)(error) &&\r\n (error.status === 404 || error.status === 401 || error.status === 403))) {\r\n return { error };\r\n }\r\n }\r\n }\r\n if (scope !== 'others') {\r\n await this._removeSession();\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\r\n }\r\n return { error: null };\r\n });\r\n }\r\n /**\r\n * Receive a notification every time an auth event happens.\r\n * @param callback A callback function to be invoked when an auth event happens.\r\n */\r\n onAuthStateChange(callback) {\r\n const id = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.uuid)();\r\n const subscription = {\r\n id,\r\n callback,\r\n unsubscribe: () => {\r\n this._debug('#unsubscribe()', 'state change callback with id removed', id);\r\n this.stateChangeEmitters.delete(id);\r\n },\r\n };\r\n this._debug('#onAuthStateChange()', 'registered callback with id', id);\r\n this.stateChangeEmitters.set(id, subscription);\r\n (async () => {\r\n await this.initializePromise;\r\n await this._acquireLock(-1, async () => {\r\n this._emitInitialSession(id);\r\n });\r\n })();\r\n return { data: { subscription } };\r\n }\r\n async _emitInitialSession(id) {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n try {\r\n const { data: { session }, error, } = result;\r\n if (error)\r\n throw error;\r\n await ((_a = this.stateChangeEmitters.get(id)) === null || _a === void 0 ? void 0 : _a.callback('INITIAL_SESSION', session));\r\n this._debug('INITIAL_SESSION', 'callback id', id, 'session', session);\r\n }\r\n catch (err) {\r\n await ((_b = this.stateChangeEmitters.get(id)) === null || _b === void 0 ? void 0 : _b.callback('INITIAL_SESSION', null));\r\n this._debug('INITIAL_SESSION', 'callback id', id, 'error', err);\r\n console.error(err);\r\n }\r\n });\r\n }\r\n /**\r\n * Sends a password reset request to an email address. This method supports the PKCE flow.\r\n *\r\n * @param email The email address of the user.\r\n * @param options.redirectTo The URL to send the user to after they click the password reset link.\r\n * @param options.captchaToken Verification token received when the user completes the captcha on the site.\r\n */\r\n async resetPasswordForEmail(email, options = {}) {\r\n let codeChallenge = null;\r\n let codeChallengeMethod = null;\r\n if (this.flowType === 'pkce') {\r\n ;\r\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey, true // isPasswordRecovery\r\n );\r\n }\r\n try {\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/recover`, {\r\n body: {\r\n email,\r\n code_challenge: codeChallenge,\r\n code_challenge_method: codeChallengeMethod,\r\n gotrue_meta_security: { captcha_token: options.captchaToken },\r\n },\r\n headers: this.headers,\r\n redirectTo: options.redirectTo,\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Gets all the identities linked to a user.\r\n */\r\n async getUserIdentities() {\r\n var _a;\r\n try {\r\n const { data, error } = await this.getUser();\r\n if (error)\r\n throw error;\r\n return { data: { identities: (_a = data.user.identities) !== null && _a !== void 0 ? _a : [] }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Links an oauth identity to an existing user.\r\n * This method supports the PKCE flow.\r\n */\r\n async linkIdentity(credentials) {\r\n var _a;\r\n try {\r\n const { data, error } = await this._useSession(async (result) => {\r\n var _a, _b, _c, _d, _e;\r\n const { data, error } = result;\r\n if (error)\r\n throw error;\r\n const url = await this._getUrlForProvider(`${this.url}/user/identities/authorize`, credentials.provider, {\r\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\r\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\r\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\r\n skipBrowserRedirect: true,\r\n });\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', url, {\r\n headers: this.headers,\r\n jwt: (_e = (_d = data.session) === null || _d === void 0 ? void 0 : _d.access_token) !== null && _e !== void 0 ? _e : undefined,\r\n });\r\n });\r\n if (error)\r\n throw error;\r\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && !((_a = credentials.options) === null || _a === void 0 ? void 0 : _a.skipBrowserRedirect)) {\r\n window.location.assign(data === null || data === void 0 ? void 0 : data.url);\r\n }\r\n return { data: { provider: credentials.provider, url: data === null || data === void 0 ? void 0 : data.url }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { provider: credentials.provider, url: null }, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Unlinks an identity from a user by deleting it. The user will no longer be able to sign in with that identity once it's unlinked.\r\n */\r\n async unlinkIdentity(identity) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n const { data, error } = result;\r\n if (error) {\r\n throw error;\r\n }\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'DELETE', `${this.url}/user/identities/${identity.identity_id}`, {\r\n headers: this.headers,\r\n jwt: (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : undefined,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Generates a new JWT.\r\n * @param refreshToken A valid refresh token that was returned on login.\r\n */\r\n async _refreshAccessToken(refreshToken) {\r\n const debugName = `#_refreshAccessToken(${refreshToken.substring(0, 5)}...)`;\r\n this._debug(debugName, 'begin');\r\n try {\r\n const startedAt = Date.now();\r\n // will attempt to refresh the token with exponential backoff\r\n return await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.retryable)(async (attempt) => {\r\n if (attempt > 0) {\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.sleep)(200 * Math.pow(2, attempt - 1)); // 200, 400, 800, ...\r\n }\r\n this._debug(debugName, 'refreshing attempt', attempt);\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=refresh_token`, {\r\n body: { refresh_token: refreshToken },\r\n headers: this.headers,\r\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\r\n });\r\n }, (attempt, error) => {\r\n const nextBackOffInterval = 200 * Math.pow(2, attempt);\r\n return (error &&\r\n (0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthRetryableFetchError)(error) &&\r\n // retryable only if the request can be sent before the backoff overflows the tick duration\r\n Date.now() + nextBackOffInterval - startedAt < _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS);\r\n });\r\n }\r\n catch (error) {\r\n this._debug(debugName, 'error', error);\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: { session: null, user: null }, error };\r\n }\r\n throw error;\r\n }\r\n finally {\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n _isValidSession(maybeSession) {\r\n const isValidSession = typeof maybeSession === 'object' &&\r\n maybeSession !== null &&\r\n 'access_token' in maybeSession &&\r\n 'refresh_token' in maybeSession &&\r\n 'expires_at' in maybeSession;\r\n return isValidSession;\r\n }\r\n async _handleProviderSignIn(provider, options) {\r\n const url = await this._getUrlForProvider(`${this.url}/authorize`, provider, {\r\n redirectTo: options.redirectTo,\r\n scopes: options.scopes,\r\n queryParams: options.queryParams,\r\n });\r\n this._debug('#_handleProviderSignIn()', 'provider', provider, 'options', options, 'url', url);\r\n // try to open on the browser\r\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && !options.skipBrowserRedirect) {\r\n window.location.assign(url);\r\n }\r\n return { data: { provider, url }, error: null };\r\n }\r\n /**\r\n * Recovers the session from LocalStorage and refreshes the token\r\n * Note: this method is async to accommodate for AsyncStorage e.g. in React native.\r\n */\r\n async _recoverAndRefresh() {\r\n var _a, _b;\r\n const debugName = '#_recoverAndRefresh()';\r\n this._debug(debugName, 'begin');\r\n try {\r\n const currentSession = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, this.storageKey));\r\n if (currentSession && this.userStorage) {\r\n let maybeUser = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.userStorage, this.storageKey + '-user'));\r\n if (!this.storage.isServer && Object.is(this.storage, this.userStorage) && !maybeUser) {\r\n // storage and userStorage are the same storage medium, for example\r\n // window.localStorage if userStorage does not have the user from\r\n // storage stored, store it first thereby migrating the user object\r\n // from storage -> userStorage\r\n maybeUser = { user: currentSession.user };\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.userStorage, this.storageKey + '-user', maybeUser);\r\n }\r\n currentSession.user = (_a = maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) !== null && _a !== void 0 ? _a : (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.userNotAvailableProxy)();\r\n }\r\n else if (currentSession && !currentSession.user) {\r\n // user storage is not set, let's check if it was previously enabled so\r\n // we bring back the storage as it should be\r\n if (!currentSession.user) {\r\n // test if userStorage was previously enabled and the storage medium was the same, to move the user back under the same key\r\n const separateUser = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, this.storageKey + '-user'));\r\n if (separateUser && (separateUser === null || separateUser === void 0 ? void 0 : separateUser.user)) {\r\n currentSession.user = separateUser.user;\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey + '-user');\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.storage, this.storageKey, currentSession);\r\n }\r\n else {\r\n currentSession.user = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.userNotAvailableProxy)();\r\n }\r\n }\r\n }\r\n this._debug(debugName, 'session from storage', currentSession);\r\n if (!this._isValidSession(currentSession)) {\r\n this._debug(debugName, 'session is not valid');\r\n if (currentSession !== null) {\r\n await this._removeSession();\r\n }\r\n return;\r\n }\r\n const expiresWithMargin = ((_b = currentSession.expires_at) !== null && _b !== void 0 ? _b : Infinity) * 1000 - Date.now() < _lib_constants__WEBPACK_IMPORTED_MODULE_1__.EXPIRY_MARGIN_MS;\r\n this._debug(debugName, `session has${expiresWithMargin ? '' : ' not'} expired with margin of ${_lib_constants__WEBPACK_IMPORTED_MODULE_1__.EXPIRY_MARGIN_MS}s`);\r\n if (expiresWithMargin) {\r\n if (this.autoRefreshToken && currentSession.refresh_token) {\r\n const { error } = await this._callRefreshToken(currentSession.refresh_token);\r\n if (error) {\r\n console.error(error);\r\n if (!(0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthRetryableFetchError)(error)) {\r\n this._debug(debugName, 'refresh failed with a non-retryable error, removing the session', error);\r\n await this._removeSession();\r\n }\r\n }\r\n }\r\n }\r\n else if (currentSession.user &&\r\n currentSession.user.__isUserNotAvailableProxy === true) {\r\n // If we have a proxy user, try to get the real user data\r\n try {\r\n const { data, error: userError } = await this._getUser(currentSession.access_token);\r\n if (!userError && (data === null || data === void 0 ? void 0 : data.user)) {\r\n currentSession.user = data.user;\r\n await this._saveSession(currentSession);\r\n await this._notifyAllSubscribers('SIGNED_IN', currentSession);\r\n }\r\n else {\r\n this._debug(debugName, 'could not get user data, skipping SIGNED_IN notification');\r\n }\r\n }\r\n catch (getUserError) {\r\n console.error('Error getting user data:', getUserError);\r\n this._debug(debugName, 'error getting user data, skipping SIGNED_IN notification', getUserError);\r\n }\r\n }\r\n else {\r\n // no need to persist currentSession again, as we just loaded it from\r\n // local storage; persisting it again may overwrite a value saved by\r\n // another client with access to the same local storage\r\n await this._notifyAllSubscribers('SIGNED_IN', currentSession);\r\n }\r\n }\r\n catch (err) {\r\n this._debug(debugName, 'error', err);\r\n console.error(err);\r\n return;\r\n }\r\n finally {\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n async _callRefreshToken(refreshToken) {\r\n var _a, _b;\r\n if (!refreshToken) {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\r\n }\r\n // refreshing is already in progress\r\n if (this.refreshingDeferred) {\r\n return this.refreshingDeferred.promise;\r\n }\r\n const debugName = `#_callRefreshToken(${refreshToken.substring(0, 5)}...)`;\r\n this._debug(debugName, 'begin');\r\n try {\r\n this.refreshingDeferred = new _lib_helpers__WEBPACK_IMPORTED_MODULE_4__.Deferred();\r\n const { data, error } = await this._refreshAccessToken(refreshToken);\r\n if (error)\r\n throw error;\r\n if (!data.session)\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\r\n await this._saveSession(data.session);\r\n await this._notifyAllSubscribers('TOKEN_REFRESHED', data.session);\r\n const result = { session: data.session, error: null };\r\n this.refreshingDeferred.resolve(result);\r\n return result;\r\n }\r\n catch (error) {\r\n this._debug(debugName, 'error', error);\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n const result = { session: null, error };\r\n if (!(0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthRetryableFetchError)(error)) {\r\n await this._removeSession();\r\n }\r\n (_a = this.refreshingDeferred) === null || _a === void 0 ? void 0 : _a.resolve(result);\r\n return result;\r\n }\r\n (_b = this.refreshingDeferred) === null || _b === void 0 ? void 0 : _b.reject(error);\r\n throw error;\r\n }\r\n finally {\r\n this.refreshingDeferred = null;\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n async _notifyAllSubscribers(event, session, broadcast = true) {\r\n const debugName = `#_notifyAllSubscribers(${event})`;\r\n this._debug(debugName, 'begin', session, `broadcast = ${broadcast}`);\r\n try {\r\n if (this.broadcastChannel && broadcast) {\r\n this.broadcastChannel.postMessage({ event, session });\r\n }\r\n const errors = [];\r\n const promises = Array.from(this.stateChangeEmitters.values()).map(async (x) => {\r\n try {\r\n await x.callback(event, session);\r\n }\r\n catch (e) {\r\n errors.push(e);\r\n }\r\n });\r\n await Promise.all(promises);\r\n if (errors.length > 0) {\r\n for (let i = 0; i < errors.length; i += 1) {\r\n console.error(errors[i]);\r\n }\r\n throw errors[0];\r\n }\r\n }\r\n finally {\r\n this._debug(debugName, 'end');\r\n }\r\n }\r\n /**\r\n * set currentSession and currentUser\r\n * process to _startAutoRefreshToken if possible\r\n */\r\n async _saveSession(session) {\r\n this._debug('#_saveSession()', session);\r\n // _saveSession is always called whenever a new session has been acquired\r\n // so we can safely suppress the warning returned by future getSession calls\r\n this.suppressGetSessionWarning = true;\r\n // Create a shallow copy to work with, to avoid mutating the original session object if it's used elsewhere\r\n const sessionToProcess = Object.assign({}, session);\r\n const userIsProxy = sessionToProcess.user && sessionToProcess.user.__isUserNotAvailableProxy === true;\r\n if (this.userStorage) {\r\n if (!userIsProxy && sessionToProcess.user) {\r\n // If it's a real user object, save it to userStorage.\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.userStorage, this.storageKey + '-user', {\r\n user: sessionToProcess.user,\r\n });\r\n }\r\n else if (userIsProxy) {\r\n // If it's the proxy, it means user was not found in userStorage.\r\n // We should ensure no stale user data for this key exists in userStorage if we were to save null,\r\n // or simply not save the proxy. For now, we don't save the proxy here.\r\n // If there's a need to clear userStorage if user becomes proxy, that logic would go here.\r\n }\r\n // Prepare the main session data for primary storage: remove the user property before cloning\r\n // This is important because the original session.user might be the proxy\r\n const mainSessionData = Object.assign({}, sessionToProcess);\r\n delete mainSessionData.user; // Remove user (real or proxy) before cloning for main storage\r\n const clonedMainSessionData = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.deepClone)(mainSessionData);\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.storage, this.storageKey, clonedMainSessionData);\r\n }\r\n else {\r\n // No userStorage is configured.\r\n // In this case, session.user should ideally not be a proxy.\r\n // If it were, structuredClone would fail. This implies an issue elsewhere if user is a proxy here\r\n const clonedSession = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.deepClone)(sessionToProcess); // sessionToProcess still has its original user property\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.storage, this.storageKey, clonedSession);\r\n }\r\n }\r\n async _removeSession() {\r\n this._debug('#_removeSession()');\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey);\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey + '-code-verifier');\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey + '-user');\r\n if (this.userStorage) {\r\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.userStorage, this.storageKey + '-user');\r\n }\r\n await this._notifyAllSubscribers('SIGNED_OUT', null);\r\n }\r\n /**\r\n * Removes any registered visibilitychange callback.\r\n *\r\n * {@see #startAutoRefresh}\r\n * {@see #stopAutoRefresh}\r\n */\r\n _removeVisibilityChangedCallback() {\r\n this._debug('#_removeVisibilityChangedCallback()');\r\n const callback = this.visibilityChangedCallback;\r\n this.visibilityChangedCallback = null;\r\n try {\r\n if (callback && (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && (window === null || window === void 0 ? void 0 : window.removeEventListener)) {\r\n window.removeEventListener('visibilitychange', callback);\r\n }\r\n }\r\n catch (e) {\r\n console.error('removing visibilitychange callback failed', e);\r\n }\r\n }\r\n /**\r\n * This is the private implementation of {@link #startAutoRefresh}. Use this\r\n * within the library.\r\n */\r\n async _startAutoRefresh() {\r\n await this._stopAutoRefresh();\r\n this._debug('#_startAutoRefresh()');\r\n const ticker = setInterval(() => this._autoRefreshTokenTick(), _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS);\r\n this.autoRefreshTicker = ticker;\r\n if (ticker && typeof ticker === 'object' && typeof ticker.unref === 'function') {\r\n // ticker is a NodeJS Timeout object that has an `unref` method\r\n // https://nodejs.org/api/timers.html#timeoutunref\r\n // When auto refresh is used in NodeJS (like for testing) the\r\n // `setInterval` is preventing the process from being marked as\r\n // finished and tests run endlessly. This can be prevented by calling\r\n // `unref()` on the returned object.\r\n ticker.unref();\r\n // @ts-expect-error TS has no context of Deno\r\n }\r\n else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\r\n // similar like for NodeJS, but with the Deno API\r\n // https://deno.land/api@latest?unstable&s=Deno.unrefTimer\r\n // @ts-expect-error TS has no context of Deno\r\n Deno.unrefTimer(ticker);\r\n }\r\n // run the tick immediately, but in the next pass of the event loop so that\r\n // #_initialize can be allowed to complete without recursively waiting on\r\n // itself\r\n setTimeout(async () => {\r\n await this.initializePromise;\r\n await this._autoRefreshTokenTick();\r\n }, 0);\r\n }\r\n /**\r\n * This is the private implementation of {@link #stopAutoRefresh}. Use this\r\n * within the library.\r\n */\r\n async _stopAutoRefresh() {\r\n this._debug('#_stopAutoRefresh()');\r\n const ticker = this.autoRefreshTicker;\r\n this.autoRefreshTicker = null;\r\n if (ticker) {\r\n clearInterval(ticker);\r\n }\r\n }\r\n /**\r\n * Starts an auto-refresh process in the background. The session is checked\r\n * every few seconds. Close to the time of expiration a process is started to\r\n * refresh the session. If refreshing fails it will be retried for as long as\r\n * necessary.\r\n *\r\n * If you set the {@link GoTrueClientOptions#autoRefreshToken} you don't need\r\n * to call this function, it will be called for you.\r\n *\r\n * On browsers the refresh process works only when the tab/window is in the\r\n * foreground to conserve resources as well as prevent race conditions and\r\n * flooding auth with requests. If you call this method any managed\r\n * visibility change callback will be removed and you must manage visibility\r\n * changes on your own.\r\n *\r\n * On non-browser platforms the refresh process works *continuously* in the\r\n * background, which may not be desirable. You should hook into your\r\n * platform's foreground indication mechanism and call these methods\r\n * appropriately to conserve resources.\r\n *\r\n * {@see #stopAutoRefresh}\r\n */\r\n async startAutoRefresh() {\r\n this._removeVisibilityChangedCallback();\r\n await this._startAutoRefresh();\r\n }\r\n /**\r\n * Stops an active auto refresh process running in the background (if any).\r\n *\r\n * If you call this method any managed visibility change callback will be\r\n * removed and you must manage visibility changes on your own.\r\n *\r\n * See {@link #startAutoRefresh} for more details.\r\n */\r\n async stopAutoRefresh() {\r\n this._removeVisibilityChangedCallback();\r\n await this._stopAutoRefresh();\r\n }\r\n /**\r\n * Runs the auto refresh token tick.\r\n */\r\n async _autoRefreshTokenTick() {\r\n this._debug('#_autoRefreshTokenTick()', 'begin');\r\n try {\r\n await this._acquireLock(0, async () => {\r\n try {\r\n const now = Date.now();\r\n try {\r\n return await this._useSession(async (result) => {\r\n const { data: { session }, } = result;\r\n if (!session || !session.refresh_token || !session.expires_at) {\r\n this._debug('#_autoRefreshTokenTick()', 'no session');\r\n return;\r\n }\r\n // session will expire in this many ticks (or has already expired if <= 0)\r\n const expiresInTicks = Math.floor((session.expires_at * 1000 - now) / _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS);\r\n this._debug('#_autoRefreshTokenTick()', `access token expires in ${expiresInTicks} ticks, a tick lasts ${_lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS}ms, refresh threshold is ${_lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_THRESHOLD} ticks`);\r\n if (expiresInTicks <= _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_THRESHOLD) {\r\n await this._callRefreshToken(session.refresh_token);\r\n }\r\n });\r\n }\r\n catch (e) {\r\n console.error('Auto refresh tick failed with error. This is likely a transient error.', e);\r\n }\r\n }\r\n finally {\r\n this._debug('#_autoRefreshTokenTick()', 'end');\r\n }\r\n });\r\n }\r\n catch (e) {\r\n if (e.isAcquireTimeout || e instanceof _lib_locks__WEBPACK_IMPORTED_MODULE_8__.LockAcquireTimeoutError) {\r\n this._debug('auto refresh token tick lock not available');\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n /**\r\n * Registers callbacks on the browser / platform, which in-turn run\r\n * algorithms when the browser window/tab are in foreground. On non-browser\r\n * platforms it assumes always foreground.\r\n */\r\n async _handleVisibilityChange() {\r\n this._debug('#_handleVisibilityChange()');\r\n if (!(0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() || !(window === null || window === void 0 ? void 0 : window.addEventListener)) {\r\n if (this.autoRefreshToken) {\r\n // in non-browser environments the refresh token ticker runs always\r\n this.startAutoRefresh();\r\n }\r\n return false;\r\n }\r\n try {\r\n this.visibilityChangedCallback = async () => await this._onVisibilityChanged(false);\r\n window === null || window === void 0 ? void 0 : window.addEventListener('visibilitychange', this.visibilityChangedCallback);\r\n // now immediately call the visbility changed callback to setup with the\r\n // current visbility state\r\n await this._onVisibilityChanged(true); // initial call\r\n }\r\n catch (error) {\r\n console.error('_handleVisibilityChange', error);\r\n }\r\n }\r\n /**\r\n * Callback registered with `window.addEventListener('visibilitychange')`.\r\n */\r\n async _onVisibilityChanged(calledFromInitialize) {\r\n const methodName = `#_onVisibilityChanged(${calledFromInitialize})`;\r\n this._debug(methodName, 'visibilityState', document.visibilityState);\r\n if (document.visibilityState === 'visible') {\r\n if (this.autoRefreshToken) {\r\n // in browser environments the refresh token ticker runs only on focused tabs\r\n // which prevents race conditions\r\n this._startAutoRefresh();\r\n }\r\n if (!calledFromInitialize) {\r\n // called when the visibility has changed, i.e. the browser\r\n // transitioned from hidden -> visible so we need to see if the session\r\n // should be recovered immediately... but to do that we need to acquire\r\n // the lock first asynchronously\r\n await this.initializePromise;\r\n await this._acquireLock(-1, async () => {\r\n if (document.visibilityState !== 'visible') {\r\n this._debug(methodName, 'acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting');\r\n // visibility has changed while waiting for the lock, abort\r\n return;\r\n }\r\n // recover the session\r\n await this._recoverAndRefresh();\r\n });\r\n }\r\n }\r\n else if (document.visibilityState === 'hidden') {\r\n if (this.autoRefreshToken) {\r\n this._stopAutoRefresh();\r\n }\r\n }\r\n }\r\n /**\r\n * Generates the relevant login URL for a third-party provider.\r\n * @param options.redirectTo A URL or mobile address to send the user to after they are confirmed.\r\n * @param options.scopes A space-separated list of scopes granted to the OAuth application.\r\n * @param options.queryParams An object of key-value pairs containing query parameters granted to the OAuth application.\r\n */\r\n async _getUrlForProvider(url, provider, options) {\r\n const urlParams = [`provider=${encodeURIComponent(provider)}`];\r\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\r\n urlParams.push(`redirect_to=${encodeURIComponent(options.redirectTo)}`);\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.scopes) {\r\n urlParams.push(`scopes=${encodeURIComponent(options.scopes)}`);\r\n }\r\n if (this.flowType === 'pkce') {\r\n const [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\r\n const flowParams = new URLSearchParams({\r\n code_challenge: `${encodeURIComponent(codeChallenge)}`,\r\n code_challenge_method: `${encodeURIComponent(codeChallengeMethod)}`,\r\n });\r\n urlParams.push(flowParams.toString());\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.queryParams) {\r\n const query = new URLSearchParams(options.queryParams);\r\n urlParams.push(query.toString());\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.skipBrowserRedirect) {\r\n urlParams.push(`skip_http_redirect=${options.skipBrowserRedirect}`);\r\n }\r\n return `${url}?${urlParams.join('&')}`;\r\n }\r\n async _unenroll(params) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'DELETE', `${this.url}/factors/${params.factorId}`, {\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n async _enroll(params) {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n const body = Object.assign({ friendly_name: params.friendlyName, factor_type: params.factorType }, (params.factorType === 'phone' ? { phone: params.phone } : { issuer: params.issuer }));\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/factors`, {\r\n body,\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n if (error) {\r\n return { data: null, error };\r\n }\r\n if (params.factorType === 'totp' && ((_b = data === null || data === void 0 ? void 0 : data.totp) === null || _b === void 0 ? void 0 : _b.qr_code)) {\r\n data.totp.qr_code = `data:image/svg+xml;utf-8,${data.totp.qr_code}`;\r\n }\r\n return { data, error: null };\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#verify}\r\n */\r\n async _verify(params) {\r\n return this._acquireLock(-1, async () => {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/verify`, {\r\n body: { code: params.code, challenge_id: params.challengeId },\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n if (error) {\r\n return { data: null, error };\r\n }\r\n await this._saveSession(Object.assign({ expires_at: Math.round(Date.now() / 1000) + data.expires_in }, data));\r\n await this._notifyAllSubscribers('MFA_CHALLENGE_VERIFIED', data);\r\n return { data, error };\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#challenge}\r\n */\r\n async _challenge(params) {\r\n return this._acquireLock(-1, async () => {\r\n try {\r\n return await this._useSession(async (result) => {\r\n var _a;\r\n const { data: sessionData, error: sessionError } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/challenge`, {\r\n body: { channel: params.channel },\r\n headers: this.headers,\r\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\r\n });\r\n });\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#challengeAndVerify}\r\n */\r\n async _challengeAndVerify(params) {\r\n // both _challenge and _verify independently acquire the lock, so no need\r\n // to acquire it here\r\n const { data: challengeData, error: challengeError } = await this._challenge({\r\n factorId: params.factorId,\r\n });\r\n if (challengeError) {\r\n return { data: null, error: challengeError };\r\n }\r\n return await this._verify({\r\n factorId: params.factorId,\r\n challengeId: challengeData.id,\r\n code: params.code,\r\n });\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#listFactors}\r\n */\r\n async _listFactors() {\r\n // use #getUser instead of #_getUser as the former acquires a lock\r\n const { data: { user }, error: userError, } = await this.getUser();\r\n if (userError) {\r\n return { data: null, error: userError };\r\n }\r\n const factors = (user === null || user === void 0 ? void 0 : user.factors) || [];\r\n const totp = factors.filter((factor) => factor.factor_type === 'totp' && factor.status === 'verified');\r\n const phone = factors.filter((factor) => factor.factor_type === 'phone' && factor.status === 'verified');\r\n return {\r\n data: {\r\n all: factors,\r\n totp,\r\n phone,\r\n },\r\n error: null,\r\n };\r\n }\r\n /**\r\n * {@see GoTrueMFAApi#getAuthenticatorAssuranceLevel}\r\n */\r\n async _getAuthenticatorAssuranceLevel() {\r\n return this._acquireLock(-1, async () => {\r\n return await this._useSession(async (result) => {\r\n var _a, _b;\r\n const { data: { session }, error: sessionError, } = result;\r\n if (sessionError) {\r\n return { data: null, error: sessionError };\r\n }\r\n if (!session) {\r\n return {\r\n data: { currentLevel: null, nextLevel: null, currentAuthenticationMethods: [] },\r\n error: null,\r\n };\r\n }\r\n const { payload } = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.decodeJWT)(session.access_token);\r\n let currentLevel = null;\r\n if (payload.aal) {\r\n currentLevel = payload.aal;\r\n }\r\n let nextLevel = currentLevel;\r\n const verifiedFactors = (_b = (_a = session.user.factors) === null || _a === void 0 ? void 0 : _a.filter((factor) => factor.status === 'verified')) !== null && _b !== void 0 ? _b : [];\r\n if (verifiedFactors.length > 0) {\r\n nextLevel = 'aal2';\r\n }\r\n const currentAuthenticationMethods = payload.amr || [];\r\n return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null };\r\n });\r\n });\r\n }\r\n async fetchJwk(kid, jwks = { keys: [] }) {\r\n // try fetching from the supplied jwks\r\n let jwk = jwks.keys.find((key) => key.kid === kid);\r\n if (jwk) {\r\n return jwk;\r\n }\r\n const now = Date.now();\r\n // try fetching from cache\r\n jwk = this.jwks.keys.find((key) => key.kid === kid);\r\n // jwk exists and jwks isn't stale\r\n if (jwk && this.jwks_cached_at + _lib_constants__WEBPACK_IMPORTED_MODULE_1__.JWKS_TTL > now) {\r\n return jwk;\r\n }\r\n // jwk isn't cached in memory so we need to fetch it from the well-known endpoint\r\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/.well-known/jwks.json`, {\r\n headers: this.headers,\r\n });\r\n if (error) {\r\n throw error;\r\n }\r\n if (!data.keys || data.keys.length === 0) {\r\n return null;\r\n }\r\n this.jwks = data;\r\n this.jwks_cached_at = now;\r\n // Find the signing key\r\n jwk = data.keys.find((key) => key.kid === kid);\r\n if (!jwk) {\r\n return null;\r\n }\r\n return jwk;\r\n }\r\n /**\r\n * Extracts the JWT claims present in the access token by first verifying the\r\n * JWT against the server's JSON Web Key Set endpoint\r\n * `/.well-known/jwks.json` which is often cached, resulting in significantly\r\n * faster responses. Prefer this method over {@link #getUser} which always\r\n * sends a request to the Auth server for each JWT.\r\n *\r\n * If the project is not using an asymmetric JWT signing key (like ECC or\r\n * RSA) it always sends a request to the Auth server (similar to {@link\r\n * #getUser}) to verify the JWT.\r\n *\r\n * @param jwt An optional specific JWT you wish to verify, not the one you\r\n * can obtain from {@link #getSession}.\r\n * @param options Various additional options that allow you to customize the\r\n * behavior of this method.\r\n */\r\n async getClaims(jwt, options = {}) {\r\n try {\r\n let token = jwt;\r\n if (!token) {\r\n const { data, error } = await this.getSession();\r\n if (error || !data.session) {\r\n return { data: null, error };\r\n }\r\n token = data.session.access_token;\r\n }\r\n const { header, payload, signature, raw: { header: rawHeader, payload: rawPayload }, } = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.decodeJWT)(token);\r\n if (!(options === null || options === void 0 ? void 0 : options.allowExpired)) {\r\n // Reject expired JWTs should only happen if jwt argument was passed\r\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.validateExp)(payload.exp);\r\n }\r\n const signingKey = !header.alg ||\r\n header.alg.startsWith('HS') ||\r\n !header.kid ||\r\n !('crypto' in globalThis && 'subtle' in globalThis.crypto)\r\n ? null\r\n : await this.fetchJwk(header.kid, (options === null || options === void 0 ? void 0 : options.keys) ? { keys: options.keys } : options === null || options === void 0 ? void 0 : options.jwks);\r\n // If symmetric algorithm or WebCrypto API is unavailable, fallback to getUser()\r\n if (!signingKey) {\r\n const { error } = await this.getUser(token);\r\n if (error) {\r\n throw error;\r\n }\r\n // getUser succeeds so the claims in the JWT can be trusted\r\n return {\r\n data: {\r\n claims: payload,\r\n header,\r\n signature,\r\n },\r\n error: null,\r\n };\r\n }\r\n const algorithm = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getAlgorithm)(header.alg);\r\n // Convert JWK to CryptoKey\r\n const publicKey = await crypto.subtle.importKey('jwk', signingKey, algorithm, true, [\r\n 'verify',\r\n ]);\r\n // Verify the signature\r\n const isValid = await crypto.subtle.verify(algorithm, publicKey, signature, (0,_lib_base64url__WEBPACK_IMPORTED_MODULE_9__.stringToUint8Array)(`${rawHeader}.${rawPayload}`));\r\n if (!isValid) {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidJwtError('Invalid JWT signature');\r\n }\r\n // If verification succeeds, decode and return claims\r\n return {\r\n data: {\r\n claims: payload,\r\n header,\r\n signature,\r\n },\r\n error: null,\r\n };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n }\r\n}\r\nGoTrueClient.nextInstanceID = 0;\r\n//# sourceMappingURL=GoTrueClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9Hb1RydWVDbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBOEM7QUFDc0g7QUFDNEs7QUFDL047QUFDNko7QUFDOU07QUFDWDtBQUNiO0FBQzZCO0FBQ0U7QUFDN0I7QUFDMUMsa0VBQWtCLElBQUk7QUFDdEI7QUFDQSxTQUFTLHNEQUFVO0FBQ25CLGdCQUFnQix1REFBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLDJEQUFlO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsdURBQVM7QUFDNUM7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qix1REFBYztBQUN2QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHFCQUFxQiwwREFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1REFBUztBQUMxQix3QkFBd0IscURBQWE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrRUFBb0I7QUFDeEM7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STtBQUNBO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwwREFBWTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGLGtFQUFrQixJQUFJLFVBQVUsR0FBRyxXQUFXO0FBQ3RJO0FBQ0EsMEJBQTBCLDREQUFtQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3REFBVztBQUMzQix5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL0dvVHJ1ZUNsaWVudC5qcz9lMDI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHb1RydWVBZG1pbkFwaSBmcm9tICcuL0dvVHJ1ZUFkbWluQXBpJztcclxuaW1wb3J0IHsgREVGQVVMVF9IRUFERVJTLCBFWFBJUllfTUFSR0lOX01TLCBBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUywgQVVUT19SRUZSRVNIX1RJQ0tfVEhSRVNIT0xELCBHT1RSVUVfVVJMLCBTVE9SQUdFX0tFWSwgSldLU19UVEwsIH0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yLCBBdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3IsIEF1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvciwgQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IsIEF1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yLCBBdXRoVW5rbm93bkVycm9yLCBpc0F1dGhBcGlFcnJvciwgaXNBdXRoRXJyb3IsIGlzQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IsIGlzQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IsIGlzQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yLCBBdXRoSW52YWxpZEp3dEVycm9yLCB9IGZyb20gJy4vbGliL2Vycm9ycyc7XHJcbmltcG9ydCB7IF9yZXF1ZXN0LCBfc2Vzc2lvblJlc3BvbnNlLCBfc2Vzc2lvblJlc3BvbnNlUGFzc3dvcmQsIF91c2VyUmVzcG9uc2UsIF9zc29SZXNwb25zZSwgfSBmcm9tICcuL2xpYi9mZXRjaCc7XHJcbmltcG9ydCB7IERlZmVycmVkLCBnZXRJdGVtQXN5bmMsIGlzQnJvd3NlciwgcmVtb3ZlSXRlbUFzeW5jLCByZXNvbHZlRmV0Y2gsIHNldEl0ZW1Bc3luYywgdXVpZCwgcmV0cnlhYmxlLCBzbGVlcCwgcGFyc2VQYXJhbWV0ZXJzRnJvbVVSTCwgZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZCwgZ2V0QWxnb3JpdGhtLCB2YWxpZGF0ZUV4cCwgZGVjb2RlSldULCB1c2VyTm90QXZhaWxhYmxlUHJveHksIHN1cHBvcnRzTG9jYWxTdG9yYWdlLCB9IGZyb20gJy4vbGliL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBtZW1vcnlMb2NhbFN0b3JhZ2VBZGFwdGVyIH0gZnJvbSAnLi9saWIvbG9jYWwtc3RvcmFnZSc7XHJcbmltcG9ydCB7IHBvbHlmaWxsR2xvYmFsVGhpcyB9IGZyb20gJy4vbGliL3BvbHlmaWxscyc7XHJcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2xpYi92ZXJzaW9uJztcclxuaW1wb3J0IHsgTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IsIG5hdmlnYXRvckxvY2sgfSBmcm9tICcuL2xpYi9sb2Nrcyc7XHJcbmltcG9ydCB7IHN0cmluZ1RvVWludDhBcnJheSwgYnl0ZXNUb0Jhc2U2NFVSTCB9IGZyb20gJy4vbGliL2Jhc2U2NHVybCc7XHJcbmltcG9ydCB7IGRlZXBDbG9uZSB9IGZyb20gJy4vbGliL2hlbHBlcnMnO1xyXG5wb2x5ZmlsbEdsb2JhbFRoaXMoKTsgLy8gTWFrZSBcImdsb2JhbFRoaXNcIiBhdmFpbGFibGVcclxuY29uc3QgREVGQVVMVF9PUFRJT05TID0ge1xyXG4gICAgdXJsOiBHT1RSVUVfVVJMLFxyXG4gICAgc3RvcmFnZUtleTogU1RPUkFHRV9LRVksXHJcbiAgICBhdXRvUmVmcmVzaFRva2VuOiB0cnVlLFxyXG4gICAgcGVyc2lzdFNlc3Npb246IHRydWUsXHJcbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IHRydWUsXHJcbiAgICBoZWFkZXJzOiBERUZBVUxUX0hFQURFUlMsXHJcbiAgICBmbG93VHlwZTogJ2ltcGxpY2l0JyxcclxuICAgIGRlYnVnOiBmYWxzZSxcclxuICAgIGhhc0N1c3RvbUF1dGhvcml6YXRpb25IZWFkZXI6IGZhbHNlLFxyXG59O1xyXG5hc3luYyBmdW5jdGlvbiBsb2NrTm9PcChuYW1lLCBhY3F1aXJlVGltZW91dCwgZm4pIHtcclxuICAgIHJldHVybiBhd2FpdCBmbigpO1xyXG59XHJcbi8qKlxyXG4gKiBDYWNoZXMgSldLUyB2YWx1ZXMgZm9yIGFsbCBjbGllbnRzIGNyZWF0ZWQgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQuIFRoaXMgaXNcclxuICogZXNwZWNpYWxseSB1c2VmdWwgZm9yIHNoYXJlZC1tZW1vcnkgZXhlY3V0aW9uIGVudmlyb25tZW50cyBzdWNoIGFzIFZlcmNlbCdzXHJcbiAqIEZsdWlkIENvbXB1dGUsIEFXUyBMYW1iZGEgb3IgU3VwYWJhc2UncyBFZGdlIEZ1bmN0aW9ucy4gUmVnYXJkbGVzcyBvZiBob3dcclxuICogbWFueSBjbGllbnRzIGFyZSBjcmVhdGVkLCBpZiB0aGV5IHNoYXJlIHRoZSBzYW1lIHN0b3JhZ2Uga2V5IHRoZXkgd2lsbCB1c2VcclxuICogdGhlIHNhbWUgSldLUyBjYWNoZSwgc2lnbmlmaWNhbnRseSBzcGVlZGluZyB1cCBnZXRDbGFpbXMoKSB3aXRoIGFzeW1tZXRyaWNcclxuICogSldUcy5cclxuICovXHJcbmNvbnN0IEdMT0JBTF9KV0tTID0ge307XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdvVHJ1ZUNsaWVudCB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBjbGllbnQgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGV4cGVyaW1lbnRhbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudXNlclN0b3JhZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZUVtaXR0ZXJzID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuYXV0b1JlZnJlc2hUaWNrZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQgPSBudWxsO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEtlZXBzIHRyYWNrIG9mIHRoZSBhc3luYyBjbGllbnQgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgICAgICogV2hlbiBudWxsIG9yIG5vdCB5ZXQgcmVzb2x2ZWQgdGhlIGF1dGggc3RhdGUgaXMgYHVua25vd25gXHJcbiAgICAgICAgICogT25jZSByZXNvbHZlZCB0aGUgdGhlIGF1dGggc3RhdGUgaXMga25vd24gYW5kIGl0J3Mgc2F2ZSB0byBjYWxsIGFueSBmdXJ0aGVyIGNsaWVudCBtZXRob2RzLlxyXG4gICAgICAgICAqIEtlZXAgZXh0cmEgY2FyZSB0byBuZXZlciByZWplY3Qgb3IgdGhyb3cgdW5jYXVnaHQgZXJyb3JzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RTZXNzaW9uSW5VcmwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tQXV0aG9yaXphdGlvbkhlYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3VwcHJlc3NHZXRTZXNzaW9uV2FybmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9ja0FjcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrID0gW107XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXNlZCB0byBicm9hZGNhc3Qgc3RhdGUgY2hhbmdlIGV2ZW50cyB0byBvdGhlciB0YWJzIGxpc3RlbmluZy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyID0gY29uc29sZS5sb2c7XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZUlEID0gR29UcnVlQ2xpZW50Lm5leHRJbnN0YW5jZUlEO1xyXG4gICAgICAgIEdvVHJ1ZUNsaWVudC5uZXh0SW5zdGFuY2VJRCArPSAxO1xyXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlSUQgPiAwICYmIGlzQnJvd3NlcigpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTXVsdGlwbGUgR29UcnVlQ2xpZW50IGluc3RhbmNlcyBkZXRlY3RlZCBpbiB0aGUgc2FtZSBicm93c2VyIGNvbnRleHQuIEl0IGlzIG5vdCBhbiBlcnJvciwgYnV0IHRoaXMgc2hvdWxkIGJlIGF2b2lkZWQgYXMgaXQgbWF5IHByb2R1Y2UgdW5kZWZpbmVkIGJlaGF2aW9yIHdoZW4gdXNlZCBjb25jdXJyZW50bHkgdW5kZXIgdGhlIHNhbWUgc3RvcmFnZSBrZXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMpLCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmxvZ0RlYnVnTWVzc2FnZXMgPSAhIXNldHRpbmdzLmRlYnVnO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MuZGVidWcgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIgPSBzZXR0aW5ncy5kZWJ1ZztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wZXJzaXN0U2Vzc2lvbiA9IHNldHRpbmdzLnBlcnNpc3RTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZUtleSA9IHNldHRpbmdzLnN0b3JhZ2VLZXk7XHJcbiAgICAgICAgdGhpcy5hdXRvUmVmcmVzaFRva2VuID0gc2V0dGluZ3MuYXV0b1JlZnJlc2hUb2tlbjtcclxuICAgICAgICB0aGlzLmFkbWluID0gbmV3IEdvVHJ1ZUFkbWluQXBpKHtcclxuICAgICAgICAgICAgdXJsOiBzZXR0aW5ncy51cmwsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHNldHRpbmdzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIGZldGNoOiBzZXR0aW5ncy5mZXRjaCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVybCA9IHNldHRpbmdzLnVybDtcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBzZXR0aW5ncy5oZWFkZXJzO1xyXG4gICAgICAgIHRoaXMuZmV0Y2ggPSByZXNvbHZlRmV0Y2goc2V0dGluZ3MuZmV0Y2gpO1xyXG4gICAgICAgIHRoaXMubG9jayA9IHNldHRpbmdzLmxvY2sgfHwgbG9ja05vT3A7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RTZXNzaW9uSW5VcmwgPSBzZXR0aW5ncy5kZXRlY3RTZXNzaW9uSW5Vcmw7XHJcbiAgICAgICAgdGhpcy5mbG93VHlwZSA9IHNldHRpbmdzLmZsb3dUeXBlO1xyXG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tQXV0aG9yaXphdGlvbkhlYWRlciA9IHNldHRpbmdzLmhhc0N1c3RvbUF1dGhvcml6YXRpb25IZWFkZXI7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzLmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrID0gc2V0dGluZ3MubG9jaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNCcm93c2VyKCkgJiYgKChfYSA9IGdsb2JhbFRoaXMgPT09IG51bGwgfHwgZ2xvYmFsVGhpcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2xvYmFsVGhpcy5uYXZpZ2F0b3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sb2NrcykpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrID0gbmF2aWdhdG9yTG9jaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jayA9IGxvY2tOb09wO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuandrcykge1xyXG4gICAgICAgICAgICB0aGlzLmp3a3MgPSB7IGtleXM6IFtdIH07XHJcbiAgICAgICAgICAgIHRoaXMuandrc19jYWNoZWRfYXQgPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZmEgPSB7XHJcbiAgICAgICAgICAgIHZlcmlmeTogdGhpcy5fdmVyaWZ5LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGVucm9sbDogdGhpcy5fZW5yb2xsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHVuZW5yb2xsOiB0aGlzLl91bmVucm9sbC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBjaGFsbGVuZ2U6IHRoaXMuX2NoYWxsZW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBsaXN0RmFjdG9yczogdGhpcy5fbGlzdEZhY3RvcnMuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgY2hhbGxlbmdlQW5kVmVyaWZ5OiB0aGlzLl9jaGFsbGVuZ2VBbmRWZXJpZnkuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgZ2V0QXV0aGVudGljYXRvckFzc3VyYW5jZUxldmVsOiB0aGlzLl9nZXRBdXRoZW50aWNhdG9yQXNzdXJhbmNlTGV2ZWwuYmluZCh0aGlzKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnBlcnNpc3RTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5zdG9yYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UgPSBzZXR0aW5ncy5zdG9yYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzTG9jYWxTdG9yYWdlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UgPSBnbG9iYWxUaGlzLmxvY2FsU3RvcmFnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZSA9IG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIodGhpcy5tZW1vcnlTdG9yYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MudXNlclN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclN0b3JhZ2UgPSBzZXR0aW5ncy51c2VyU3RvcmFnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZSA9IG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIodGhpcy5tZW1vcnlTdG9yYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzQnJvd3NlcigpICYmIGdsb2JhbFRoaXMuQnJvYWRjYXN0Q2hhbm5lbCAmJiB0aGlzLnBlcnNpc3RTZXNzaW9uICYmIHRoaXMuc3RvcmFnZUtleSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gbmV3IGdsb2JhbFRoaXMuQnJvYWRjYXN0Q2hhbm5lbCh0aGlzLnN0b3JhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IEJyb2FkY2FzdENoYW5uZWwsIG11bHRpLXRhYiBzdGF0ZSBjaGFuZ2VzIHdpbGwgbm90IGJlIGF2YWlsYWJsZScsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIChfYiA9IHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdyZWNlaXZlZCBicm9hZGNhc3Qgbm90aWZpY2F0aW9uIGZyb20gb3RoZXIgdGFiIG9yIGNsaWVudCcsIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKGV2ZW50LmRhdGEuZXZlbnQsIGV2ZW50LmRhdGEuc2Vzc2lvbiwgZmFsc2UpOyAvLyBicm9hZGNhc3QgPSBmYWxzZSBzbyB3ZSBkb24ndCBnZXQgYW4gZW5kbGVzcyBsb29wIG9mIG1lc3NhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEpXS1MgdXNlZCBmb3IgdmVyaWZ5aW5nIGFzeW1tZXRyaWMgSldUc1xyXG4gICAgICovXHJcbiAgICBnZXQgandrcygpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBHTE9CQUxfSldLU1t0aGlzLnN0b3JhZ2VLZXldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuandrcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogeyBrZXlzOiBbXSB9O1xyXG4gICAgfVxyXG4gICAgc2V0IGp3a3ModmFsdWUpIHtcclxuICAgICAgICBHTE9CQUxfSldLU1t0aGlzLnN0b3JhZ2VLZXldID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBHTE9CQUxfSldLU1t0aGlzLnN0b3JhZ2VLZXldKSwgeyBqd2tzOiB2YWx1ZSB9KTtcclxuICAgIH1cclxuICAgIGdldCBqd2tzX2NhY2hlZF9hdCgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBHTE9CQUxfSldLU1t0aGlzLnN0b3JhZ2VLZXldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FjaGVkQXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xyXG4gICAgfVxyXG4gICAgc2V0IGp3a3NfY2FjaGVkX2F0KHZhbHVlKSB7XHJcbiAgICAgICAgR0xPQkFMX0pXS1NbdGhpcy5zdG9yYWdlS2V5XSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgR0xPQkFMX0pXS1NbdGhpcy5zdG9yYWdlS2V5XSksIHsgY2FjaGVkQXQ6IHZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgX2RlYnVnKC4uLmFyZ3MpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2dEZWJ1Z01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyKGBHb1RydWVDbGllbnRAJHt0aGlzLmluc3RhbmNlSUR9ICgke3ZlcnNpb259KSAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1gLCAuLi5hcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIHRoZSBjbGllbnQgc2Vzc2lvbiBlaXRoZXIgZnJvbSB0aGUgdXJsIG9yIGZyb20gc3RvcmFnZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgY2xpZW50LCBidXQgc2hvdWxkIGFsc28gYmUgY2FsbGVkXHJcbiAgICAgKiBtYW51YWxseSB3aGVuIGNoZWNraW5nIGZvciBhbiBlcnJvciBmcm9tIGFuIGF1dGggcmVkaXJlY3QgKG9hdXRoLCBtYWdpY2xpbmssIHBhc3N3b3JkIHJlY292ZXJ5LCBldGMpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVQcm9taXNlID0gKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBJTVBPUlRBTlQ6XHJcbiAgICAgKiAxLiBOZXZlciB0aHJvdyBpbiB0aGlzIG1ldGhvZCwgYXMgaXQgaXMgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgKiAyLiBOZXZlciByZXR1cm4gYSBzZXNzaW9uIGZyb20gdGhpcyBtZXRob2QgYXMgaXQgd291bGQgYmUgY2FjaGVkIG92ZXJcclxuICAgICAqICAgIHRoZSB3aG9sZSBsaWZldGltZSBvZiB0aGUgY2xpZW50XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9pbml0aWFsaXplKCkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNGcm9tVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrVXJsVHlwZSA9ICdub25lJztcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW1wbGljaXRHcmFudENhbGxiYWNrKHBhcmFtcykpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrVXJsVHlwZSA9ICdpbXBsaWNpdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYXdhaXQgdGhpcy5faXNQS0NFQ2FsbGJhY2socGFyYW1zKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tVcmxUeXBlID0gJ3BrY2UnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBBdHRlbXB0IHRvIGdldCB0aGUgc2Vzc2lvbiBmcm9tIHRoZSBVUkwgb25seSBpZiB0aGVzZSBjb25kaXRpb25zIGFyZSBmdWxmaWxsZWRcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogTm90ZTogSWYgdGhlIFVSTCBpc24ndCBvbmUgb2YgdGhlIGNhbGxiYWNrIHVybCB0eXBlcyAoaW1wbGljaXQgb3IgcGtjZSksXHJcbiAgICAgICAgICAgICAqIHRoZW4gdGhlcmUgY291bGQgYmUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBzbyB3ZSBkb24ndCB3YW50IHRvIHByZW1hdHVyZWx5IHJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKGlzQnJvd3NlcigpICYmIHRoaXMuZGV0ZWN0U2Vzc2lvbkluVXJsICYmIGNhbGxiYWNrVXJsVHlwZSAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9nZXRTZXNzaW9uRnJvbVVSTChwYXJhbXMsIGNhbGxiYWNrVXJsVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZXJyb3IgZGV0ZWN0aW5nIHNlc3Npb24gZnJvbSBVUkwnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSAoX2EgPSBlcnJvci5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ29kZSA9PT0gJ2lkZW50aXR5X2FscmVhZHlfZXhpc3RzJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID09PSAnaWRlbnRpdHlfbm90X2ZvdW5kJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID09PSAnc2luZ2xlX2lkZW50aXR5X25vdF9kZWxldGFibGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZhaWxlZCBsb2dpbiBhdHRlbXB0IHZpYSB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG9sZCBzZXNzaW9uIGFzIGluIHZlcmlmeU90cCwgc2lnblVwIGFuZCBzaWduSW5XaXRoKlxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlbW92ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZXNzaW9uLCByZWRpcmVjdFR5cGUgfSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZGV0ZWN0ZWQgc2Vzc2lvbiBpbiBVUkwnLCBzZXNzaW9uLCAncmVkaXJlY3QgdHlwZScsIHJlZGlyZWN0VHlwZSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihzZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWRpcmVjdFR5cGUgPT09ICdyZWNvdmVyeScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1BBU1NXT1JEX1JFQ09WRVJZJywgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG5vIGxvZ2luIGF0dGVtcHQgdmlhIGNhbGxiYWNrIHVybCB0cnkgdG8gcmVjb3ZlciBzZXNzaW9uIGZyb20gc3RvcmFnZVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWNvdmVyQW5kUmVmcmVzaCgpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBBdXRoVW5rbm93bkVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbicsIGVycm9yKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZVZpc2liaWxpdHlDaGFuZ2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfaW5pdGlhbGl6ZSgpJywgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhbm9ueW1vdXMgdXNlci5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIHNlc3Npb24gd2hlcmUgdGhlIGlzX2Fub255bW91cyBjbGFpbSBpbiB0aGUgYWNjZXNzIHRva2VuIEpXVCBzZXQgdG8gdHJ1ZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5Bbm9ueW1vdXNseShjcmVkZW50aWFscykge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3NpZ251cGAsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2IgPSAoX2EgPSBjcmVkZW50aWFscyA9PT0gbnVsbCB8fCBjcmVkZW50aWFscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRhdGEpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IChfYyA9IGNyZWRlbnRpYWxzID09PSBudWxsIHx8IGNyZWRlbnRpYWxzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FwdGNoYVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCAhZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBkYXRhLnNlc3Npb247XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBkYXRhLnVzZXI7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgdXNlci5cclxuICAgICAqXHJcbiAgICAgKiBCZSBhd2FyZSB0aGF0IGlmIGEgdXNlciBhY2NvdW50IGV4aXN0cyBpbiB0aGUgc3lzdGVtIHlvdSBtYXkgZ2V0IGJhY2sgYW5cclxuICAgICAqIGVycm9yIG1lc3NhZ2UgdGhhdCBhdHRlbXB0cyB0byBoaWRlIHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdXNlci5cclxuICAgICAqIFRoaXMgbWV0aG9kIGhhcyBzdXBwb3J0IGZvciBQS0NFIHZpYSBlbWFpbCBzaWdudXBzLiBUaGUgUEtDRSBmbG93IGNhbm5vdCBiZSB1c2VkIHdoZW4gYXV0b2NvbmZpcm0gaXMgZW5hYmxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIGxvZ2dlZC1pbiBzZXNzaW9uIGlmIHRoZSBzZXJ2ZXIgaGFzIFwiYXV0b2NvbmZpcm1cIiBPTlxyXG4gICAgICogQHJldHVybnMgQSB1c2VyIGlmIHRoZSBzZXJ2ZXIgaGFzIFwiYXV0b2NvbmZpcm1cIiBPRkZcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnblVwKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlcztcclxuICAgICAgICAgICAgaWYgKCdlbWFpbCcgaW4gY3JlZGVudGlhbHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1haWwsIHBhc3N3b3JkLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlTWV0aG9kID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAncGtjZScpIHtcclxuICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICAgICAgW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdID0gYXdhaXQgZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZCh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXMgPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9zaWdudXBgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG86IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5lbWFpbFJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kYXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBjb2RlQ2hhbGxlbmdlTWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgncGhvbmUnIGluIGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCBwYXNzd29yZCwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9zaWdudXBgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGF0YSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw6IChfYyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jaGFubmVsKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnc21zJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlciBhbmQgYSBwYXNzd29yZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGRhdGEuc2Vzc2lvbjtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IGRhdGEudXNlcjtcclxuICAgICAgICAgICAgaWYgKGRhdGEuc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVNlc3Npb24oZGF0YS5zZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBzZXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgd2l0aCBhbiBlbWFpbCBhbmQgcGFzc3dvcmQgb3IgcGhvbmUgYW5kIHBhc3N3b3JkLlxyXG4gICAgICpcclxuICAgICAqIEJlIGF3YXJlIHRoYXQgeW91IG1heSBnZXQgYmFjayBhbiBlcnJvciBtZXNzYWdlIHRoYXQgd2lsbCBub3QgZGlzdGluZ3Vpc2hcclxuICAgICAqIGJldHdlZW4gdGhlIGNhc2VzIHdoZXJlIHRoZSBhY2NvdW50IGRvZXMgbm90IGV4aXN0IG9yIHRoYXQgdGhlXHJcbiAgICAgKiBlbWFpbC9waG9uZSBhbmQgcGFzc3dvcmQgY29tYmluYXRpb24gaXMgd3Jvbmcgb3IgdGhhdCB0aGUgYWNjb3VudCBjYW4gb25seVxyXG4gICAgICogYmUgYWNjZXNzZWQgdmlhIHNvY2lhbCBsb2dpbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnbkluV2l0aFBhc3N3b3JkKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlcztcclxuICAgICAgICAgICAgaWYgKCdlbWFpbCcgaW4gY3JlZGVudGlhbHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1haWwsIHBhc3N3b3JkLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgICAgIHJlcyA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3Rva2VuP2dyYW50X3R5cGU9cGFzc3dvcmRgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogX3Nlc3Npb25SZXNwb25zZVBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoJ3Bob25lJyBpbiBjcmVkZW50aWFscykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBwaG9uZSwgcGFzc3dvcmQsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xyXG4gICAgICAgICAgICAgICAgcmVzID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vdG9rZW4/Z3JhbnRfdHlwZT1wYXNzd29yZGAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlUGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlciBhbmQgYSBwYXNzd29yZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghZGF0YSB8fCAhZGF0YS5zZXNzaW9uIHx8ICFkYXRhLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogbmV3IEF1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yKCkgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oeyB1c2VyOiBkYXRhLnVzZXIsIHNlc3Npb246IGRhdGEuc2Vzc2lvbiB9LCAoZGF0YS53ZWFrX3Bhc3N3b3JkID8geyB3ZWFrUGFzc3dvcmQ6IGRhdGEud2Vha19wYXNzd29yZCB9IDogbnVsbCkpLFxyXG4gICAgICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvZyBpbiBhbiBleGlzdGluZyB1c2VyIHZpYSBhIHRoaXJkLXBhcnR5IHByb3ZpZGVyLlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3VwcG9ydHMgdGhlIFBLQ0UgZmxvdy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnbkluV2l0aE9BdXRoKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9oYW5kbGVQcm92aWRlclNpZ25JbihjcmVkZW50aWFscy5wcm92aWRlciwge1xyXG4gICAgICAgICAgICByZWRpcmVjdFRvOiAoX2EgPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVkaXJlY3RUbyxcclxuICAgICAgICAgICAgc2NvcGVzOiAoX2IgPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2NvcGVzLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogKF9jID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICBza2lwQnJvd3NlclJlZGlyZWN0OiAoX2QgPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Quc2tpcEJyb3dzZXJSZWRpcmVjdCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgYnkgZXhjaGFuZ2luZyBhbiBBdXRoIENvZGUgaXNzdWVkIGR1cmluZyB0aGUgUEtDRSBmbG93LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBleGNoYW5nZUNvZGVGb3JTZXNzaW9uKGF1dGhDb2RlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4Y2hhbmdlQ29kZUZvclNlc3Npb24oYXV0aENvZGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWducyBpbiBhIHVzZXIgYnkgdmVyaWZ5aW5nIGEgbWVzc2FnZSBzaWduZWQgYnkgdGhlIHVzZXIncyBwcml2YXRlIGtleS5cclxuICAgICAqIE9ubHkgU29sYW5hIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUsIHVzaW5nIHRoZSBTaWduIGluIHdpdGggU29sYW5hIHN0YW5kYXJkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5XaXRoV2ViMyhjcmVkZW50aWFscykge1xyXG4gICAgICAgIGNvbnN0IHsgY2hhaW4gfSA9IGNyZWRlbnRpYWxzO1xyXG4gICAgICAgIGlmIChjaGFpbiA9PT0gJ3NvbGFuYScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2lnbkluV2l0aFNvbGFuYShjcmVkZW50aWFscyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IFVuc3VwcG9ydGVkIGNoYWluIFwiJHtjaGFpbn1cImApO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgc2lnbkluV2l0aFNvbGFuYShjcmVkZW50aWFscykge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tO1xyXG4gICAgICAgIGxldCBtZXNzYWdlO1xyXG4gICAgICAgIGxldCBzaWduYXR1cmU7XHJcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiBjcmVkZW50aWFscykge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gY3JlZGVudGlhbHMubWVzc2FnZTtcclxuICAgICAgICAgICAgc2lnbmF0dXJlID0gY3JlZGVudGlhbHMuc2lnbmF0dXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjaGFpbiwgd2FsbGV0LCBzdGF0ZW1lbnQsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xyXG4gICAgICAgICAgICBsZXQgcmVzb2x2ZWRXYWxsZXQ7XHJcbiAgICAgICAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2FsbGV0ICE9PSAnb2JqZWN0JyB8fCAhKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy51cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogQm90aCB3YWxsZXQgYW5kIHVybCBtdXN0IGJlIHNwZWNpZmllZCBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudHMuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlZFdhbGxldCA9IHdhbGxldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2FsbGV0ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRXYWxsZXQgPSB3YWxsZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3aW5kb3dBbnkgPSB3aW5kb3c7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ3NvbGFuYScgaW4gd2luZG93QW55ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHdpbmRvd0FueS5zb2xhbmEgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKCgnc2lnbkluJyBpbiB3aW5kb3dBbnkuc29sYW5hICYmIHR5cGVvZiB3aW5kb3dBbnkuc29sYW5hLnNpZ25JbiA9PT0gJ2Z1bmN0aW9uJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKCdzaWduTWVzc2FnZScgaW4gd2luZG93QW55LnNvbGFuYSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHdpbmRvd0FueS5zb2xhbmEuc2lnbk1lc3NhZ2UgPT09ICdmdW5jdGlvbicpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkV2FsbGV0ID0gd2luZG93QW55LnNvbGFuYTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IE5vIGNvbXBhdGlibGUgU29sYW5hIHdhbGxldCBpbnRlcmZhY2Ugb24gdGhlIHdpbmRvdyBvYmplY3QgKHdpbmRvdy5zb2xhbmEpIGRldGVjdGVkLiBNYWtlIHN1cmUgdGhlIHVzZXIgYWxyZWFkeSBoYXMgYSB3YWxsZXQgaW5zdGFsbGVkIGFuZCBjb25uZWN0ZWQgZm9yIHRoaXMgYXBwLiBQcmVmZXIgcGFzc2luZyB0aGUgd2FsbGV0IGludGVyZmFjZSBvYmplY3QgZGlyZWN0bHkgdG8gc2lnbkluV2l0aFdlYjMoeyBjaGFpbjogJ3NvbGFuYScsIHdhbGxldDogcmVzb2x2ZWRVc2VyV2FsbGV0IH0pIGluc3RlYWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudXJsKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIGlmICgnc2lnbkluJyBpbiByZXNvbHZlZFdhbGxldCAmJiByZXNvbHZlZFdhbGxldC5zaWduSW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVkV2FsbGV0LnNpZ25JbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGlzc3VlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEpLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vbi1vdmVycmlkYWJsZSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogJzEnLCBkb21haW46IHVybC5ob3N0LCB1cmk6IHVybC5ocmVmIH0pLCAoc3RhdGVtZW50ID8geyBzdGF0ZW1lbnQgfSA6IG51bGwpKSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3V0cHV0VG9Qcm9jZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3V0cHV0KSAmJiBvdXRwdXRbMF0gJiYgdHlwZW9mIG91dHB1dFswXSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRUb1Byb2Nlc3MgPSBvdXRwdXRbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXQgJiZcclxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3V0cHV0ID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICdzaWduZWRNZXNzYWdlJyBpbiBvdXRwdXQgJiZcclxuICAgICAgICAgICAgICAgICAgICAnc2lnbmF0dXJlJyBpbiBvdXRwdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRUb1Byb2Nlc3MgPSBvdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BzdXBhYmFzZS9hdXRoLWpzOiBXYWxsZXQgbWV0aG9kIHNpZ25JbigpIHJldHVybmVkIHVucmVjb2duaXplZCB2YWx1ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCdzaWduZWRNZXNzYWdlJyBpbiBvdXRwdXRUb1Byb2Nlc3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAnc2lnbmF0dXJlJyBpbiBvdXRwdXRUb1Byb2Nlc3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG91dHB1dFRvUHJvY2Vzcy5zaWduZWRNZXNzYWdlID09PSAnc3RyaW5nJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRUb1Byb2Nlc3Muc2lnbmVkTWVzc2FnZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0VG9Qcm9jZXNzLnNpZ25hdHVyZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG91dHB1dFRvUHJvY2Vzcy5zaWduZWRNZXNzYWdlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvdXRwdXRUb1Byb2Nlc3Muc2lnbmVkTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUob3V0cHV0VG9Qcm9jZXNzLnNpZ25lZE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IG91dHB1dFRvUHJvY2Vzcy5zaWduYXR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BzdXBhYmFzZS9hdXRoLWpzOiBXYWxsZXQgbWV0aG9kIHNpZ25JbigpIEFQSSByZXR1cm5lZCBvYmplY3Qgd2l0aG91dCBzaWduZWRNZXNzYWdlIGFuZCBzaWduYXR1cmUgZmllbGRzJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISgnc2lnbk1lc3NhZ2UnIGluIHJlc29sdmVkV2FsbGV0KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXNvbHZlZFdhbGxldC5zaWduTWVzc2FnZSAhPT0gJ2Z1bmN0aW9uJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICEoJ3B1YmxpY0tleScgaW4gcmVzb2x2ZWRXYWxsZXQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc29sdmVkV2FsbGV0ICE9PSAnb2JqZWN0JyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICFyZXNvbHZlZFdhbGxldC5wdWJsaWNLZXkgfHxcclxuICAgICAgICAgICAgICAgICAgICAhKCd0b0Jhc2U1OCcgaW4gcmVzb2x2ZWRXYWxsZXQucHVibGljS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXNvbHZlZFdhbGxldC5wdWJsaWNLZXkudG9CYXNlNTggIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BzdXBhYmFzZS9hdXRoLWpzOiBXYWxsZXQgZG9lcyBub3QgaGF2ZSBhIGNvbXBhdGlibGUgc2lnbk1lc3NhZ2UoKSBhbmQgcHVibGljS2V5LnRvQmFzZTU4KCkgQVBJJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIGAke3VybC5ob3N0fSB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6YCxcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFdhbGxldC5wdWJsaWNLZXkudG9CYXNlNTgoKSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4oc3RhdGVtZW50ID8gWycnLCBzdGF0ZW1lbnQsICcnXSA6IFsnJ10pLFxyXG4gICAgICAgICAgICAgICAgICAgICdWZXJzaW9uOiAxJyxcclxuICAgICAgICAgICAgICAgICAgICBgVVJJOiAke3VybC5ocmVmfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgYElzc3VlZCBBdDogJHsoX2MgPSAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlzc3VlZEF0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCxcclxuICAgICAgICAgICAgICAgICAgICAuLi4oKChfZCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Qubm90QmVmb3JlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtgTm90IEJlZm9yZTogJHtvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEubm90QmVmb3JlfWBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10pLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLigoKF9lID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5leHBpcmF0aW9uVGltZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbYEV4cGlyYXRpb24gVGltZTogJHtvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEuZXhwaXJhdGlvblRpbWV9YF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKCgoX2YgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmNoYWluSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW2BDaGFpbiBJRDogJHtvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEuY2hhaW5JZH1gXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4oKChfZyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2cubm9uY2UpID8gW2BOb25jZTogJHtvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEubm9uY2V9YF0gOiBbXSksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKCgoX2ggPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oLnJlcXVlc3RJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbYFJlcXVlc3QgSUQ6ICR7b3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLnJlcXVlc3RJZH1gXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4oKChfayA9IChfaiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oucmVzb3VyY2VzKSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2subGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLnJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiBgLSAke3Jlc291cmNlfWApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10pLFxyXG4gICAgICAgICAgICAgICAgXS5qb2luKCdcXG4nKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlU2lnbmF0dXJlID0gYXdhaXQgcmVzb2x2ZWRXYWxsZXQuc2lnbk1lc3NhZ2UobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG1lc3NhZ2UpLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXliZVNpZ25hdHVyZSB8fCAhKG1heWJlU2lnbmF0dXJlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BzdXBhYmFzZS9hdXRoLWpzOiBXYWxsZXQgc2lnbk1lc3NhZ2UoKSBBUEkgcmV0dXJuZWQgYW4gcmVjb2duaXplZCB2YWx1ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vdG9rZW4/Z3JhbnRfdHlwZT13ZWIzYCwge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgYm9keTogT2JqZWN0LmFzc2lnbih7IGNoYWluOiAnc29sYW5hJywgbWVzc2FnZSwgc2lnbmF0dXJlOiBieXRlc1RvQmFzZTY0VVJMKHNpZ25hdHVyZSkgfSwgKCgoX2wgPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wuY2FwdGNoYVRva2VuKVxyXG4gICAgICAgICAgICAgICAgICAgID8geyBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiAoX20gPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX20uY2FwdGNoYVRva2VuIH0gfVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCkpLFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5zZXNzaW9uIHx8ICFkYXRhLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBBdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvcigpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZGF0YSksIGVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfZXhjaGFuZ2VDb2RlRm9yU2Vzc2lvbihhdXRoQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gYXdhaXQgZ2V0SXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgYCR7dGhpcy5zdG9yYWdlS2V5fS1jb2RlLXZlcmlmaWVyYCk7XHJcbiAgICAgICAgY29uc3QgW2NvZGVWZXJpZmllciwgcmVkaXJlY3RUeXBlXSA9IChzdG9yYWdlSXRlbSAhPT0gbnVsbCAmJiBzdG9yYWdlSXRlbSAhPT0gdm9pZCAwID8gc3RvcmFnZUl0ZW0gOiAnJykuc3BsaXQoJy8nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXBrY2VgLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXV0aF9jb2RlOiBhdXRoQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEuc2Vzc2lvbiB8fCAhZGF0YS51c2VyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCwgcmVkaXJlY3RUeXBlOiBudWxsIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBBdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvcigpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkYXRhKSwgeyByZWRpcmVjdFR5cGU6IHJlZGlyZWN0VHlwZSAhPT0gbnVsbCAmJiByZWRpcmVjdFR5cGUgIT09IHZvaWQgMCA/IHJlZGlyZWN0VHlwZSA6IG51bGwgfSksIGVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwsIHJlZGlyZWN0VHlwZTogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWxsb3dzIHNpZ25pbmcgaW4gd2l0aCBhbiBPSURDIElEIHRva2VuLiBUaGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgdXNlZFxyXG4gICAgICogc2hvdWxkIGJlIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNpZ25JbldpdGhJZFRva2VuKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvcHRpb25zLCBwcm92aWRlciwgdG9rZW4sIGFjY2Vzc190b2tlbiwgbm9uY2UgfSA9IGNyZWRlbnRpYWxzO1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPWlkX3Rva2VuYCwge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuOiB0b2tlbixcclxuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgbm9uY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFkYXRhIHx8ICFkYXRhLnNlc3Npb24gfHwgIWRhdGEudXNlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEF1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yKCksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgZGF0YS5zZXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvciB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgaW4gYSB1c2VyIHVzaW5nIG1hZ2ljbGluayBvciBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBge3sgLkNvbmZpcm1hdGlvblVSTCB9fWAgdmFyaWFibGUgaXMgc3BlY2lmaWVkIGluIHRoZSBlbWFpbCB0ZW1wbGF0ZSwgYSBtYWdpY2xpbmsgd2lsbCBiZSBzZW50LlxyXG4gICAgICogSWYgdGhlIGB7eyAuVG9rZW4gfX1gIHZhcmlhYmxlIGlzIHNwZWNpZmllZCBpbiB0aGUgZW1haWwgdGVtcGxhdGUsIGFuIE9UUCB3aWxsIGJlIHNlbnQuXHJcbiAgICAgKiBJZiB5b3UncmUgdXNpbmcgcGhvbmUgc2lnbi1pbnMsIG9ubHkgYW4gT1RQIHdpbGwgYmUgc2VudC4gWW91IHdvbid0IGJlIGFibGUgdG8gc2VuZCBhIG1hZ2ljbGluayBmb3IgcGhvbmUgc2lnbi1pbnMuXHJcbiAgICAgKlxyXG4gICAgICogQmUgYXdhcmUgdGhhdCB5b3UgbWF5IGdldCBiYWNrIGFuIGVycm9yIG1lc3NhZ2UgdGhhdCB3aWxsIG5vdCBkaXN0aW5ndWlzaFxyXG4gICAgICogYmV0d2VlbiB0aGUgY2FzZXMgd2hlcmUgdGhlIGFjY291bnQgZG9lcyBub3QgZXhpc3Qgb3IsIHRoYXQgdGhlIGFjY291bnRcclxuICAgICAqIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHZpYSBzb2NpYWwgbG9naW4uXHJcbiAgICAgKlxyXG4gICAgICogRG8gbm90ZSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gY29uZmlndXJlIGEgV2hhdHNhcHAgc2VuZGVyIG9uIFR3aWxpb1xyXG4gICAgICogaWYgeW91IGFyZSB1c2luZyBwaG9uZSBzaWduIGluIHdpdGggdGhlICd3aGF0c2FwcCcgY2hhbm5lbC4gVGhlIHdoYXRzYXBwXHJcbiAgICAgKiBjaGFubmVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gb3RoZXIgcHJvdmlkZXJzXHJcbiAgICAgKiBhdCB0aGlzIHRpbWUuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBQS0NFIHdoZW4gYW4gZW1haWwgaXMgcGFzc2VkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5XaXRoT3RwKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBjcmVkZW50aWFscykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbWFpbCwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZU1ldGhvZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgICAgIFtjb2RlQ2hhbGxlbmdlLCBjb2RlQ2hhbGxlbmdlTWV0aG9kXSA9IGF3YWl0IGdldENvZGVDaGFsbGVuZ2VBbmRNZXRob2QodGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vb3RwYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV91c2VyOiAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2hvdWxkQ3JlYXRlVXNlcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBjb2RlQ2hhbGxlbmdlTWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmVtYWlsUmVkaXJlY3RUbyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCdwaG9uZScgaW4gY3JlZGVudGlhbHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGhvbmUsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vb3RwYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBob25lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2MgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGF0YSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV91c2VyOiAoX2QgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2hvdWxkQ3JlYXRlVXNlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiAoX2UgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2hhbm5lbCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogJ3NtcycsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsLCBtZXNzYWdlSWQ6IGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS5tZXNzYWdlX2lkIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvcignWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYW4gZW1haWwgb3IgcGhvbmUgbnVtYmVyLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgaW4gYSB1c2VyIGdpdmVuIGEgVXNlciBzdXBwbGllZCBPVFAgb3IgVG9rZW5IYXNoIHJlY2VpdmVkIHRocm91Z2ggbW9iaWxlIG9yIGVtYWlsLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB2ZXJpZnlPdHAocGFyYW1zKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVkaXJlY3RUbyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgbGV0IGNhcHRjaGFUb2tlbiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaWYgKCdvcHRpb25zJyBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0VG8gPSAoX2EgPSBwYXJhbXMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlZGlyZWN0VG87XHJcbiAgICAgICAgICAgICAgICBjYXB0Y2hhVG9rZW4gPSAoX2IgPSBwYXJhbXMub3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhcHRjaGFUb2tlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS92ZXJpZnlgLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBib2R5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogY2FwdGNoYVRva2VuIH0gfSksXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvLFxyXG4gICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBvbiB0b2tlbiB2ZXJpZmljYXRpb24uJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGRhdGEuc2Vzc2lvbjtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IGRhdGEudXNlcjtcclxuICAgICAgICAgICAgaWYgKHNlc3Npb24gPT09IG51bGwgfHwgc2Vzc2lvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKHNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMocGFyYW1zLnR5cGUgPT0gJ3JlY292ZXJ5JyA/ICdQQVNTV09SRF9SRUNPVkVSWScgOiAnU0lHTkVEX0lOJywgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEF0dGVtcHRzIGEgc2luZ2xlLXNpZ24gb24gdXNpbmcgYW4gZW50ZXJwcmlzZSBJZGVudGl0eSBQcm92aWRlci4gQVxyXG4gICAgICogc3VjY2Vzc2Z1bCBTU08gYXR0ZW1wdCB3aWxsIHJlZGlyZWN0IHRoZSBjdXJyZW50IHBhZ2UgdG8gdGhlIGlkZW50aXR5XHJcbiAgICAgKiBwcm92aWRlciBhdXRob3JpemF0aW9uIHBhZ2UuIFRoZSByZWRpcmVjdCBVUkwgaXMgaW1wbGVtZW50YXRpb24gYW5kIFNTT1xyXG4gICAgICogcHJvdG9jb2wgc3BlY2lmaWMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgaXQgYnkgcHJvdmlkaW5nIGEgU1NPIGRvbWFpbi4gVHlwaWNhbGx5IHlvdSBjYW4gZXh0cmFjdCB0aGlzXHJcbiAgICAgKiBkb21haW4gYnkgYXNraW5nIHVzZXJzIGZvciB0aGVpciBlbWFpbCBhZGRyZXNzLiBJZiB0aGlzIGRvbWFpbiBpc1xyXG4gICAgICogcmVnaXN0ZXJlZCBvbiB0aGUgQXV0aCBpbnN0YW5jZSB0aGUgcmVkaXJlY3Qgd2lsbCB1c2UgdGhhdCBvcmdhbml6YXRpb24nc1xyXG4gICAgICogY3VycmVudGx5IGFjdGl2ZSBTU08gSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHRoZSBsb2dpbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3UgaGF2ZSBidWlsdCBhbiBvcmdhbml6YXRpb24tc3BlY2lmaWMgbG9naW4gcGFnZSwgeW91IGNhbiB1c2UgdGhlXHJcbiAgICAgKiBvcmdhbml6YXRpb24ncyBTU08gSWRlbnRpdHkgUHJvdmlkZXIgVVVJRCBkaXJlY3RseSBpbnN0ZWFkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSW5XaXRoU1NPKHBhcmFtcykge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2VNZXRob2QgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnKSB7XHJcbiAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vc3NvYCwge1xyXG4gICAgICAgICAgICAgICAgYm9keTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoJ3Byb3ZpZGVySWQnIGluIHBhcmFtcyA/IHsgcHJvdmlkZXJfaWQ6IHBhcmFtcy5wcm92aWRlcklkIH0gOiBudWxsKSksICgnZG9tYWluJyBpbiBwYXJhbXMgPyB7IGRvbWFpbjogcGFyYW1zLmRvbWFpbiB9IDogbnVsbCkpLCB7IHJlZGlyZWN0X3RvOiAoX2IgPSAoX2EgPSBwYXJhbXMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlZGlyZWN0VG8pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHVuZGVmaW5lZCB9KSwgKCgoX2MgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMub3B0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhcHRjaGFUb2tlbilcclxuICAgICAgICAgICAgICAgICAgICA/IHsgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogcGFyYW1zLm9wdGlvbnMuY2FwdGNoYVRva2VuIH0gfVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCkpLCB7IHNraXBfaHR0cF9yZWRpcmVjdDogdHJ1ZSwgY29kZV9jaGFsbGVuZ2U6IGNvZGVDaGFsbGVuZ2UsIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogY29kZUNoYWxsZW5nZU1ldGhvZCB9KSxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHhmb3JtOiBfc3NvUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNlbmRzIGEgcmVhdXRoZW50aWNhdGlvbiBPVFAgdG8gdGhlIHVzZXIncyBlbWFpbCBvciBwaG9uZSBudW1iZXIuXHJcbiAgICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBzaWduZWQtaW4uXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlYXV0aGVudGljYXRlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZWF1dGhlbnRpY2F0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX3JlYXV0aGVudGljYXRlKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yOiBzZXNzaW9uRXJyb3IsIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHNlc3Npb25FcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vcmVhdXRoZW50aWNhdGVgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVzZW5kcyBhbiBleGlzdGluZyBzaWdudXAgY29uZmlybWF0aW9uIGVtYWlsLCBlbWFpbCBjaGFuZ2UgZW1haWwsIFNNUyBPVFAgb3IgcGhvbmUgY2hhbmdlIE9UUC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVzZW5kKGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLnVybH0vcmVzZW5kYDtcclxuICAgICAgICAgICAgaWYgKCdlbWFpbCcgaW4gY3JlZGVudGlhbHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1haWwsIHR5cGUsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBlbmRwb2ludCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZW1haWxSZWRpcmVjdFRvLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgncGhvbmUnIGluIGNyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCB0eXBlLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgZW5kcG9pbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCwgbWVzc2FnZUlkOiBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEubWVzc2FnZV9pZCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlciBhbmQgYSB0eXBlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNlc3Npb24sIHJlZnJlc2hpbmcgaXQgaWYgbmVjZXNzYXJ5LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBzZXNzaW9uIHJldHVybmVkIGNhbiBiZSBudWxsIGlmIHRoZSBzZXNzaW9uIGlzIG5vdCBkZXRlY3RlZCB3aGljaCBjYW4gaGFwcGVuIGluIHRoZSBldmVudCBhIHVzZXIgaXMgbm90IHNpZ25lZC1pbiBvciBoYXMgbG9nZ2VkIG91dC5cclxuICAgICAqXHJcbiAgICAgKiAqKklNUE9SVEFOVDoqKiBUaGlzIG1ldGhvZCBsb2FkcyB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgc3RvcmFnZSBhdHRhY2hlZFxyXG4gICAgICogdG8gdGhlIGNsaWVudC4gSWYgdGhhdCBzdG9yYWdlIGlzIGJhc2VkIG9uIHJlcXVlc3QgY29va2llcyBmb3IgZXhhbXBsZSxcclxuICAgICAqIHRoZSB2YWx1ZXMgaW4gaXQgbWF5IG5vdCBiZSBhdXRoZW50aWMgYW5kIHRoZXJlZm9yZSBpdCdzIHN0cm9uZ2x5IGFkdmlzZWRcclxuICAgICAqIGFnYWluc3QgdXNpbmcgdGhpcyBtZXRob2QgYW5kIGl0cyByZXN1bHRzIGluIHN1Y2ggY2lyY3Vtc3RhbmNlcy4gQSB3YXJuaW5nXHJcbiAgICAgKiB3aWxsIGJlIGVtaXR0ZWQgaWYgdGhpcyBpcyBkZXRlY3RlZC4gVXNlIHtAbGluayAjZ2V0VXNlcigpfSBpbnN0ZWFkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRTZXNzaW9uKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWNxdWlyZXMgYSBnbG9iYWwgbG9jayBiYXNlZCBvbiB0aGUgc3RvcmFnZSBrZXkuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9hY3F1aXJlTG9jayhhY3F1aXJlVGltZW91dCwgZm4pIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19hY3F1aXJlTG9jaycsICdiZWdpbicsIGFjcXVpcmVUaW1lb3V0KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2NrQWNxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnBlbmRpbmdJbkxvY2subGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnBlbmRpbmdJbkxvY2tbdGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbGFzdDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcclxuICAgICAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdJbkxvY2sucHVzaCgoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2soYGxvY2s6JHt0aGlzLnN0b3JhZ2VLZXl9YCwgYWNxdWlyZVRpbWVvdXQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2xvY2sgYWNxdWlyZWQgZm9yIHN0b3JhZ2Uga2V5JywgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NrQWNxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnB1c2goKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSgpKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBkcmFpbmluZyB0aGUgcXVldWUgdW50aWwgdGhlcmUncyBub3RoaW5nIHRvIHdhaXQgb25cclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0T24gPSBbLi4udGhpcy5wZW5kaW5nSW5Mb2NrXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod2FpdE9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnNwbGljZSgwLCB3YWl0T24ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2xvY2sgcmVsZWFzZWQgZm9yIHN0b3JhZ2Uga2V5JywgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2tBY3F1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIGluc3RlYWQgb2Yge0BsaW5rICNnZXRTZXNzaW9ufSBpbnNpZGUgdGhlIGxpYnJhcnkuIEl0IGlzXHJcbiAgICAgKiBzZW1hbnRpY2FsbHkgdXN1YWxseSB3aGF0IHlvdSB3YW50LCBhcyBnZXR0aW5nIGEgc2Vzc2lvbiBpbnZvbHZlcyBzb21lXHJcbiAgICAgKiBwcm9jZXNzaW5nIGFmdGVyd2FyZHMgdGhhdCByZXF1aXJlcyBvbmx5IG9uZSBjbGllbnQgb3BlcmF0aW5nIG9uIHRoZVxyXG4gICAgICogc2Vzc2lvbiBhdCBvbmNlIGFjcm9zcyBtdWx0aXBsZSB0YWJzIG9yIHByb2Nlc3Nlcy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX3VzZVNlc3Npb24oZm4pIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI191c2VTZXNzaW9uJywgJ2JlZ2luJyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gdGhlIHVzZSBvZiBfX2xvYWRTZXNzaW9uIGhlcmUgaXMgdGhlIG9ubHkgY29ycmVjdCB1c2Ugb2YgdGhlIGZ1bmN0aW9uIVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9fbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI191c2VTZXNzaW9uJywgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTkVWRVIgVVNFIERJUkVDVExZIVxyXG4gICAgICpcclxuICAgICAqIEFsd2F5cyB1c2Uge0BsaW5rICNfdXNlU2Vzc2lvbn0uXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9fbG9hZFNlc3Npb24oKSB7XHJcbiAgICAgICAgdGhpcy5fZGVidWcoJyNfX2xvYWRTZXNzaW9uKCknLCAnYmVnaW4nKTtcclxuICAgICAgICBpZiAoIXRoaXMubG9ja0FjcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgJ3VzZWQgb3V0c2lkZSBvZiBhbiBhY3F1aXJlZCBsb2NrIScsIG5ldyBFcnJvcigpLnN0YWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRTZXNzaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgbWF5YmVTZXNzaW9uID0gYXdhaXQgZ2V0SXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNnZXRTZXNzaW9uKCknLCAnc2Vzc2lvbiBmcm9tIHN0b3JhZ2UnLCBtYXliZVNlc3Npb24pO1xyXG4gICAgICAgICAgICBpZiAobWF5YmVTZXNzaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNWYWxpZFNlc3Npb24obWF5YmVTZXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uID0gbWF5YmVTZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNnZXRTZXNzaW9uKCknLCAnc2Vzc2lvbiBmcm9tIHN0b3JhZ2UgaXMgbm90IHZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudFNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEEgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGV4cGlyZWQgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gX2FjdHVhbGx5X1xyXG4gICAgICAgICAgICAvLyBleHBpcmVzLiBXaGVuIHRoZSBhdXRvUmVmcmVzaFRva2VuIG9wdGlvbiBpcyBvZmYgKG9yIHdoZW4gdGhlIHRhYiBpc1xyXG4gICAgICAgICAgICAvLyBpbiB0aGUgYmFja2dyb3VuZCksIHZlcnkgZWFnZXIgdXNlcnMgb2YgZ2V0U2Vzc2lvbigpIC0tIGxpa2VcclxuICAgICAgICAgICAgLy8gcmVhbHRpbWUtanMgLS0gbWlnaHQgc2VuZCBhIHZhbGlkIEpXVCB3aGljaCB3aWxsIGV4cGlyZSBieSB0aGUgdGltZSBpdFxyXG4gICAgICAgICAgICAvLyByZWFjaGVzIHRoZSBzZXJ2ZXIuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0V4cGlyZWQgPSBjdXJyZW50U2Vzc2lvbi5leHBpcmVzX2F0XHJcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXQgKiAxMDAwIC0gRGF0ZS5ub3coKSA8IEVYUElSWV9NQVJHSU5fTVNcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgYHNlc3Npb24gaGFzJHtoYXNFeHBpcmVkID8gJycgOiAnIG5vdCd9IGV4cGlyZWRgLCAnZXhwaXJlc19hdCcsIGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXQpO1xyXG4gICAgICAgICAgICBpZiAoIWhhc0V4cGlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF5YmVVc2VyID0gKGF3YWl0IGdldEl0ZW1Bc3luYyh0aGlzLnVzZXJTdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1heWJlVXNlciA9PT0gbnVsbCB8fCBtYXliZVVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1heWJlVXNlci51c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSBtYXliZVVzZXIudXNlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSB1c2VyTm90QXZhaWxhYmxlUHJveHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdG9yYWdlLmlzU2VydmVyICYmIGN1cnJlbnRTZXNzaW9uLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3VwcHJlc3NXYXJuaW5nID0gdGhpcy5zdXBwcmVzc0dldFNlc3Npb25XYXJuaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5U2Vzc2lvbiA9IG5ldyBQcm94eShjdXJyZW50U2Vzc2lvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1cHByZXNzV2FybmluZyAmJiBwcm9wID09PSAndXNlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHNob3cgd2FybmluZyB3aGVuIHRoZSB1c2VyIG9iamVjdCBpcyBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VzaW5nIHRoZSB1c2VyIG9iamVjdCBhcyByZXR1cm5lZCBmcm9tIHN1cGFiYXNlLmF1dGguZ2V0U2Vzc2lvbigpIG9yIGZyb20gc29tZSBzdXBhYmFzZS5hdXRoLm9uQXV0aFN0YXRlQ2hhbmdlKCkgZXZlbnRzIGNvdWxkIGJlIGluc2VjdXJlISBUaGlzIHZhbHVlIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIHN0b3JhZ2UgbWVkaXVtICh1c3VhbGx5IGNvb2tpZXMgb24gdGhlIHNlcnZlcikgYW5kIG1heSBub3QgYmUgYXV0aGVudGljLiBVc2Ugc3VwYWJhc2UuYXV0aC5nZXRVc2VyKCkgaW5zdGVhZCB3aGljaCBhdXRoZW50aWNhdGVzIHRoZSBkYXRhIGJ5IGNvbnRhY3RpbmcgdGhlIFN1cGFiYXNlIEF1dGggc2VydmVyLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzV2FybmluZyA9IHRydWU7IC8vIGtlZXBzIHRoaXMgcHJveHkgaW5zdGFuY2UgZnJvbSBsb2dnaW5nIGFkZGl0aW9uYWwgd2FybmluZ3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHByZXNzR2V0U2Vzc2lvbldhcm5pbmcgPSB0cnVlOyAvLyBrZWVwcyB0aGlzIGNsaWVudCdzIGZ1dHVyZSBwcm94eSBpbnN0YW5jZXMgZnJvbSB3YXJuaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24gPSBwcm94eVNlc3Npb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IGN1cnJlbnRTZXNzaW9uIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBzZXNzaW9uLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCB1c2VyIGRldGFpbHMgaWYgdGhlcmUgaXMgYW4gZXhpc3Rpbmcgc2Vzc2lvbi4gVGhpcyBtZXRob2RcclxuICAgICAqIHBlcmZvcm1zIGEgbmV0d29yayByZXF1ZXN0IHRvIHRoZSBTdXBhYmFzZSBBdXRoIHNlcnZlciwgc28gdGhlIHJldHVybmVkXHJcbiAgICAgKiB2YWx1ZSBpcyBhdXRoZW50aWMgYW5kIGNhbiBiZSB1c2VkIHRvIGJhc2UgYXV0aG9yaXphdGlvbiBydWxlcyBvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gand0IFRha2VzIGluIGFuIG9wdGlvbmFsIGFjY2VzcyB0b2tlbiBKV1QuIElmIG5vIEpXVCBpcyBwcm92aWRlZCwgdGhlIEpXVCBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24gaXMgdXNlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0VXNlcihqd3QpIHtcclxuICAgICAgICBpZiAoand0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRVc2VyKGp3dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFVzZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX2dldFVzZXIoand0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGp3dCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vdXNlcmAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgand0OiBqd3QsXHJcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IF91c2VyUmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBhY2Nlc3NfdG9rZW4gb3IgY3VzdG9tIGF1dGhvcml6YXRpb24gaGVhZGVyXHJcbiAgICAgICAgICAgICAgICBpZiAoISgoX2EgPSBkYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4pICYmICF0aGlzLmhhc0N1c3RvbUF1dGhvcml6YXRpb25IZWFkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3I6IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS91c2VyYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBqd3Q6IChfYyA9IChfYiA9IGRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFjY2Vzc190b2tlbikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBfdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSldUIGNvbnRhaW5zIGEgYHNlc3Npb25faWRgIHdoaWNoIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2Vzc2lvbiBpbiB0aGUgZGF0YWJhc2UsIGluZGljYXRpbmcgdGhlIHVzZXIgaXMgc2lnbmVkIG91dC5cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZW1vdmVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlSXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgYCR7dGhpcy5zdG9yYWdlS2V5fS1jb2RlLXZlcmlmaWVyYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdXNlciBkYXRhIGZvciBhIGxvZ2dlZCBpbiB1c2VyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVVc2VyKGF0dHJpYnV0ZXMsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91cGRhdGVVc2VyKGF0dHJpYnV0ZXMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX3VwZGF0ZVVzZXIoYXR0cmlidXRlcywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHNlc3Npb25FcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbkRhdGEuc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25EYXRhLnNlc3Npb247XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZU1ldGhvZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnICYmIGF0dHJpYnV0ZXMuZW1haWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgICAgICAgICAgICAgICBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3I6IHVzZXJFcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BVVCcsIGAke3RoaXMudXJsfS91c2VyYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZW1haWxSZWRpcmVjdFRvLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYXR0cmlidXRlcyksIHsgY29kZV9jaGFsbGVuZ2U6IGNvZGVDaGFsbGVuZ2UsIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogY29kZUNoYWxsZW5nZU1ldGhvZCB9KSxcclxuICAgICAgICAgICAgICAgICAgICBqd3Q6IHNlc3Npb24uYWNjZXNzX3Rva2VuLFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBfdXNlclJlc3BvbnNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHVzZXJFcnJvcjtcclxuICAgICAgICAgICAgICAgIHNlc3Npb24udXNlciA9IGRhdGEudXNlcjtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKHNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1VTRVJfVVBEQVRFRCcsIHNlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIgfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNlc3Npb24gZGF0YSBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uIElmIHRoZSBjdXJyZW50IHNlc3Npb24gaXMgZXhwaXJlZCwgc2V0U2Vzc2lvbiB3aWxsIHRha2UgY2FyZSBvZiByZWZyZXNoaW5nIGl0IHRvIG9idGFpbiBhIG5ldyBzZXNzaW9uLlxyXG4gICAgICogSWYgdGhlIHJlZnJlc2ggdG9rZW4gb3IgYWNjZXNzIHRva2VuIGluIHRoZSBjdXJyZW50IHNlc3Npb24gaXMgaW52YWxpZCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXHJcbiAgICAgKiBAcGFyYW0gY3VycmVudFNlc3Npb24gVGhlIGN1cnJlbnQgc2Vzc2lvbiB0aGF0IG1pbmltYWxseSBjb250YWlucyBhbiBhY2Nlc3MgdG9rZW4gYW5kIHJlZnJlc2ggdG9rZW4uXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldFNlc3Npb24oY3VycmVudFNlc3Npb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jaygtMSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fc2V0U2Vzc2lvbihjdXJyZW50U2Vzc2lvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBfc2V0U2Vzc2lvbihjdXJyZW50U2Vzc2lvbikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudFNlc3Npb24uYWNjZXNzX3Rva2VuIHx8ICFjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0aW1lTm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XHJcbiAgICAgICAgICAgIGxldCBleHBpcmVzQXQgPSB0aW1lTm93O1xyXG4gICAgICAgICAgICBsZXQgaGFzRXhwaXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBzZXNzaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBkZWNvZGVKV1QoY3VycmVudFNlc3Npb24uYWNjZXNzX3Rva2VuKTtcclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICBleHBpcmVzQXQgPSBwYXlsb2FkLmV4cDtcclxuICAgICAgICAgICAgICAgIGhhc0V4cGlyZWQgPSBleHBpcmVzQXQgPD0gdGltZU5vdztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFzRXhwaXJlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZXNzaW9uOiByZWZyZXNoZWRTZXNzaW9uLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcmVmcmVzaGVkU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2Vzc2lvbiA9IHJlZnJlc2hlZFNlc3Npb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9nZXRVc2VyKGN1cnJlbnRTZXNzaW9uLmFjY2Vzc190b2tlbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlc3Npb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBjdXJyZW50U2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbixcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5fdHlwZTogJ2JlYXJlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc0F0IC0gdGltZU5vdyxcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmVzX2F0OiBleHBpcmVzQXQsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVNlc3Npb24oc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogbnVsbCwgdXNlcjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIG5ldyBzZXNzaW9uLCByZWdhcmRsZXNzIG9mIGV4cGlyeSBzdGF0dXMuXHJcbiAgICAgKiBUYWtlcyBpbiBhbiBvcHRpb25hbCBjdXJyZW50IHNlc3Npb24uIElmIG5vdCBwYXNzZWQgaW4sIHRoZW4gcmVmcmVzaFNlc3Npb24oKSB3aWxsIGF0dGVtcHQgdG8gcmV0cmlldmUgaXQgZnJvbSBnZXRTZXNzaW9uKCkuXHJcbiAgICAgKiBJZiB0aGUgY3VycmVudCBzZXNzaW9uJ3MgcmVmcmVzaCB0b2tlbiBpcyBpbnZhbGlkLCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cclxuICAgICAqIEBwYXJhbSBjdXJyZW50U2Vzc2lvbiBUaGUgY3VycmVudCBzZXNzaW9uLiBJZiBwYXNzZWQgaW4sIGl0IG11c3QgY29udGFpbiBhIHJlZnJlc2ggdG9rZW4uXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlZnJlc2hTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlZnJlc2hTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGFzeW5jIF9yZWZyZXNoU2Vzc2lvbihjdXJyZW50U2Vzc2lvbikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudFNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbiA9IChfYSA9IGRhdGEuc2Vzc2lvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCEoY3VycmVudFNlc3Npb24gPT09IG51bGwgfHwgY3VycmVudFNlc3Npb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRTZXNzaW9uLnJlZnJlc2hfdG9rZW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlc3Npb24sIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9jYWxsUmVmcmVzaFRva2VuKGN1cnJlbnRTZXNzaW9uLnJlZnJlc2hfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgc2Vzc2lvbiBkYXRhIGZyb20gYSBVUkwgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9nZXRTZXNzaW9uRnJvbVVSTChwYXJhbXMsIGNhbGxiYWNrVXJsVHlwZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICghaXNCcm93c2VyKCkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yKCdObyBicm93c2VyIGRldGVjdGVkLicpO1xyXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSBVUkwsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgZmxvdyBpdCBpcywgd2UganVzdCByZXR1cm4gdGhlIGVycm9yLlxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmVycm9yIHx8IHBhcmFtcy5lcnJvcl9kZXNjcmlwdGlvbiB8fCBwYXJhbXMuZXJyb3JfY29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhlIGVycm9yIGNsYXNzIHJldHVybmVkIGltcGxpZXMgdGhhdCB0aGUgcmVkaXJlY3QgaXMgZnJvbSBhbiBpbXBsaWNpdCBncmFudCBmbG93XHJcbiAgICAgICAgICAgICAgICAvLyBidXQgaXQgY291bGQgYWxzbyBiZSBmcm9tIGEgcmVkaXJlY3QgZXJyb3IgZnJvbSBhIFBLQ0UgZmxvdy5cclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW1wbGljaXRHcmFudFJlZGlyZWN0RXJyb3IocGFyYW1zLmVycm9yX2Rlc2NyaXB0aW9uIHx8ICdFcnJvciBpbiBVUkwgd2l0aCB1bnNwZWNpZmllZCBlcnJvcl9kZXNjcmlwdGlvbicsIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogcGFyYW1zLmVycm9yIHx8ICd1bnNwZWNpZmllZF9lcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogcGFyYW1zLmVycm9yX2NvZGUgfHwgJ3Vuc3BlY2lmaWVkX2NvZGUnLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ2hlY2tzIGZvciBtaXNtYXRjaGVzIGJldHdlZW4gdGhlIGZsb3dUeXBlIGluaXRpYWxpc2VkIGluIHRoZSBjbGllbnQgYW5kIHRoZSBVUkwgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGNhbGxiYWNrVXJsVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW1wbGljaXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAncGtjZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhQS0NFR3JhbnRDb2RlRXhjaGFuZ2VFcnJvcignTm90IGEgdmFsaWQgUEtDRSBmbG93IHVybC4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwa2NlJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ2ltcGxpY2l0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yKCdOb3QgYSB2YWxpZCBpbXBsaWNpdCBncmFudCBmbG93IHVybC4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgLy8gdGhlcmUncyBubyBtaXNtYXRjaCBzbyB3ZSBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSByZWRpcmVjdCBmb3IgUEtDRSwgd2UgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgY29kZSBmcm9tIHRoZSBVUkwgZm9yIHRoZSBjb2RlIGV4Y2hhbmdlXHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFja1VybFR5cGUgPT09ICdwa2NlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfaW5pdGlhbGl6ZSgpJywgJ2JlZ2luJywgJ2lzIFBLQ0UgZmxvdycsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMuY29kZSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aFBLQ0VHcmFudENvZGVFeGNoYW5nZUVycm9yKCdObyBjb2RlIGRldGVjdGVkLicpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fZXhjaGFuZ2VDb2RlRm9yU2Vzc2lvbihwYXJhbXMuY29kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKCdjb2RlJyk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsICcnLCB1cmwudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IGRhdGEuc2Vzc2lvbiwgcmVkaXJlY3RUeXBlOiBudWxsIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbiwgcHJvdmlkZXJfcmVmcmVzaF90b2tlbiwgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBleHBpcmVzX2luLCBleHBpcmVzX2F0LCB0b2tlbl90eXBlLCB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBpZiAoIWFjY2Vzc190b2tlbiB8fCAhZXhwaXJlc19pbiB8fCAhcmVmcmVzaF90b2tlbiB8fCAhdG9rZW5fdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcignTm8gc2Vzc2lvbiBkZWZpbmVkIGluIFVSTCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVOb3cgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgY29uc3QgZXhwaXJlc0luID0gcGFyc2VJbnQoZXhwaXJlc19pbik7XHJcbiAgICAgICAgICAgIGxldCBleHBpcmVzQXQgPSB0aW1lTm93ICsgZXhwaXJlc0luO1xyXG4gICAgICAgICAgICBpZiAoZXhwaXJlc19hdCkge1xyXG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0ID0gcGFyc2VJbnQoZXhwaXJlc19hdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWN0dWFsbHlFeHBpcmVzSW4gPSBleHBpcmVzQXQgLSB0aW1lTm93O1xyXG4gICAgICAgICAgICBpZiAoYWN0dWFsbHlFeHBpcmVzSW4gKiAxMDAwIDw9IEFVVE9fUkVGUkVTSF9USUNLX0RVUkFUSU9OX01TKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEBzdXBhYmFzZS9nb3RydWUtanM6IFNlc3Npb24gYXMgcmV0cmlldmVkIGZyb20gVVJMIGV4cGlyZXMgaW4gJHthY3R1YWxseUV4cGlyZXNJbn1zLCBzaG91bGQgaGF2ZSBiZWVuIGNsb3NlciB0byAke2V4cGlyZXNJbn1zYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXNzdWVkQXQgPSBleHBpcmVzQXQgLSBleHBpcmVzSW47XHJcbiAgICAgICAgICAgIGlmICh0aW1lTm93IC0gaXNzdWVkQXQgPj0gMTIwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0BzdXBhYmFzZS9nb3RydWUtanM6IFNlc3Npb24gYXMgcmV0cmlldmVkIGZyb20gVVJMIHdhcyBpc3N1ZWQgb3ZlciAxMjBzIGFnbywgVVJMIGNvdWxkIGJlIHN0YWxlJywgaXNzdWVkQXQsIGV4cGlyZXNBdCwgdGltZU5vdyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGltZU5vdyAtIGlzc3VlZEF0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBTZXNzaW9uIGFzIHJldHJpZXZlZCBmcm9tIFVSTCB3YXMgaXNzdWVkIGluIHRoZSBmdXR1cmU/IENoZWNrIHRoZSBkZXZpY2UgY2xvY2sgZm9yIHNrZXcnLCBpc3N1ZWRBdCwgZXhwaXJlc0F0LCB0aW1lTm93KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9nZXRVc2VyKGFjY2Vzc190b2tlbik7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcilcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuLFxyXG4gICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc0luLFxyXG4gICAgICAgICAgICAgICAgZXhwaXJlc19hdDogZXhwaXJlc0F0LFxyXG4gICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbixcclxuICAgICAgICAgICAgICAgIHRva2VuX3R5cGUsXHJcbiAgICAgICAgICAgICAgICB1c2VyOiBkYXRhLnVzZXIsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0b2tlbnMgZnJvbSBVUkxcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJztcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfZ2V0U2Vzc2lvbkZyb21VUkwoKScsICdjbGVhcmluZyB3aW5kb3cubG9jYXRpb24uaGFzaCcpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb24sIHJlZGlyZWN0VHlwZTogcGFyYW1zLnR5cGUgfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogbnVsbCwgcmVkaXJlY3RUeXBlOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgVVJMIGNvbnRhaW5zIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgYW4gaW1wbGljaXQgb2F1dGggZ3JhbnQgZmxvdyAoaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY3NDkuaHRtbCNzZWN0aW9uLTQuMilcclxuICAgICAqL1xyXG4gICAgX2lzSW1wbGljaXRHcmFudENhbGxiYWNrKHBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiBCb29sZWFuKHBhcmFtcy5hY2Nlc3NfdG9rZW4gfHwgcGFyYW1zLmVycm9yX2Rlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IFVSTCBhbmQgYmFja2luZyBzdG9yYWdlIGNvbnRhaW4gcGFyYW1ldGVycyBnaXZlbiBieSBhIFBLQ0UgZmxvd1xyXG4gICAgICovXHJcbiAgICBhc3luYyBfaXNQS0NFQ2FsbGJhY2socGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFN0b3JhZ2VDb250ZW50ID0gYXdhaXQgZ2V0SXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgYCR7dGhpcy5zdG9yYWdlS2V5fS1jb2RlLXZlcmlmaWVyYCk7XHJcbiAgICAgICAgcmV0dXJuICEhKHBhcmFtcy5jb2RlICYmIGN1cnJlbnRTdG9yYWdlQ29udGVudCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEluc2lkZSBhIGJyb3dzZXIgY29udGV4dCwgYHNpZ25PdXQoKWAgd2lsbCByZW1vdmUgdGhlIGxvZ2dlZCBpbiB1c2VyIGZyb20gdGhlIGJyb3dzZXIgc2Vzc2lvbiBhbmQgbG9nIHRoZW0gb3V0IC0gcmVtb3ZpbmcgYWxsIGl0ZW1zIGZyb20gbG9jYWxzdG9yYWdlIGFuZCB0aGVuIHRyaWdnZXIgYSBgXCJTSUdORURfT1VUXCJgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIEZvciBzZXJ2ZXItc2lkZSBtYW5hZ2VtZW50LCB5b3UgY2FuIHJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciBieSBwYXNzaW5nIGEgdXNlcidzIEpXVCB0aHJvdWdoIHRvIGBhdXRoLmFwaS5zaWduT3V0KEpXVDogc3RyaW5nKWAuXHJcbiAgICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gcmV2b2tlIGEgdXNlcidzIGFjY2VzcyB0b2tlbiBqd3QgdW50aWwgaXQgZXhwaXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IGEgc2hvcnRlciBleHBpcnkgb24gdGhlIGp3dCBmb3IgdGhpcyByZWFzb24uXHJcbiAgICAgKlxyXG4gICAgICogSWYgdXNpbmcgYG90aGVyc2Agc2NvcGUsIG5vIGBTSUdORURfT1VUYCBldmVudCBpcyBmaXJlZCFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnbk91dChvcHRpb25zID0geyBzY29wZTogJ2dsb2JhbCcgfSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9zaWduT3V0KG9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgX3NpZ25PdXQoeyBzY29wZSB9ID0geyBzY29wZTogJ2dsb2JhbCcgfSkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHNlc3Npb25FcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gKF9hID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICBpZiAoYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHRoaXMuYWRtaW4uc2lnbk91dChhY2Nlc3NUb2tlbiwgc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIDQwNHMgc2luY2UgdXNlciBtaWdodCBub3QgZXhpc3QgYW55bW9yZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSA0MDFzIHNpbmNlIGFuIGludmFsaWQgb3IgZXhwaXJlZCBKV1Qgc2hvdWxkIHNpZ24gb3V0IHRoZSBjdXJyZW50IHNlc3Npb25cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShpc0F1dGhBcGlFcnJvcihlcnJvcikgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yLnN0YXR1cyA9PT0gNDA0IHx8IGVycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGVycm9yLnN0YXR1cyA9PT0gNDAzKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNjb3BlICE9PSAnb3RoZXJzJykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlSXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgYCR7dGhpcy5zdG9yYWdlS2V5fS1jb2RlLXZlcmlmaWVyYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVjZWl2ZSBhIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGFuIGF1dGggZXZlbnQgaGFwcGVucy5cclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiBhbiBhdXRoIGV2ZW50IGhhcHBlbnMuXHJcbiAgICAgKi9cclxuICAgIG9uQXV0aFN0YXRlQ2hhbmdlKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkKCk7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgY2FsbGJhY2ssXHJcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI3Vuc3Vic2NyaWJlKCknLCAnc3RhdGUgY2hhbmdlIGNhbGxiYWNrIHdpdGggaWQgcmVtb3ZlZCcsIGlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VFbWl0dGVycy5kZWxldGUoaWQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fZGVidWcoJyNvbkF1dGhTdGF0ZUNoYW5nZSgpJywgJ3JlZ2lzdGVyZWQgY2FsbGJhY2sgd2l0aCBpZCcsIGlkKTtcclxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlRW1pdHRlcnMuc2V0KGlkLCBzdWJzY3JpcHRpb24pO1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0SW5pdGlhbFNlc3Npb24oaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgICAgIHJldHVybiB7IGRhdGE6IHsgc3Vic2NyaXB0aW9uIH0gfTtcclxuICAgIH1cclxuICAgIGFzeW5jIF9lbWl0SW5pdGlhbFNlc3Npb24oaWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvciwgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcilcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICgoX2EgPSB0aGlzLnN0YXRlQ2hhbmdlRW1pdHRlcnMuZ2V0KGlkKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGxiYWNrKCdJTklUSUFMX1NFU1NJT04nLCBzZXNzaW9uKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnSU5JVElBTF9TRVNTSU9OJywgJ2NhbGxiYWNrIGlkJywgaWQsICdzZXNzaW9uJywgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgKChfYiA9IHRoaXMuc3RhdGVDaGFuZ2VFbWl0dGVycy5nZXQoaWQpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbGJhY2soJ0lOSVRJQUxfU0VTU0lPTicsIG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdJTklUSUFMX1NFU1NJT04nLCAnY2FsbGJhY2sgaWQnLCBpZCwgJ2Vycm9yJywgZXJyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kcyBhIHBhc3N3b3JkIHJlc2V0IHJlcXVlc3QgdG8gYW4gZW1haWwgYWRkcmVzcy4gVGhpcyBtZXRob2Qgc3VwcG9ydHMgdGhlIFBLQ0UgZmxvdy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRpcmVjdFRvIFRoZSBVUkwgdG8gc2VuZCB0aGUgdXNlciB0byBhZnRlciB0aGV5IGNsaWNrIHRoZSBwYXNzd29yZCByZXNldCBsaW5rLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuY2FwdGNoYVRva2VuIFZlcmlmaWNhdGlvbiB0b2tlbiByZWNlaXZlZCB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyB0aGUgY2FwdGNoYSBvbiB0aGUgc2l0ZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVzZXRQYXNzd29yZEZvckVtYWlsKGVtYWlsLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBsZXQgY29kZUNoYWxsZW5nZSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2VNZXRob2QgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAncGtjZScpIHtcclxuICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5LCB0cnVlIC8vIGlzUGFzc3dvcmRSZWNvdmVyeVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vcmVjb3ZlcmAsIHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbWFpbCxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IGNvZGVDaGFsbGVuZ2VNZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHRoZSBpZGVudGl0aWVzIGxpbmtlZCB0byBhIHVzZXIuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldFVzZXJJZGVudGl0aWVzKCkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgaWRlbnRpdGllczogKF9hID0gZGF0YS51c2VyLmlkZW50aXRpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTGlua3MgYW4gb2F1dGggaWRlbnRpdHkgdG8gYW4gZXhpc3RpbmcgdXNlci5cclxuICAgICAqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIHRoZSBQS0NFIGZsb3cuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGxpbmtJZGVudGl0eShjcmVkZW50aWFscykge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB0aGlzLl9nZXRVcmxGb3JQcm92aWRlcihgJHt0aGlzLnVybH0vdXNlci9pZGVudGl0aWVzL2F1dGhvcml6ZWAsIGNyZWRlbnRpYWxzLnByb3ZpZGVyLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogKF9hID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiAoX2IgPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2NvcGVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiAoX2MgPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc2tpcEJyb3dzZXJSZWRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCB1cmwsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgand0OiAoX2UgPSAoX2QgPSBkYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5hY2Nlc3NfdG9rZW4pICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiAhKChfYSA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5za2lwQnJvd3NlclJlZGlyZWN0KSkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEudXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHByb3ZpZGVyOiBjcmVkZW50aWFscy5wcm92aWRlciwgdXJsOiBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEudXJsIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHByb3ZpZGVyOiBjcmVkZW50aWFscy5wcm92aWRlciwgdXJsOiBudWxsIH0sIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmxpbmtzIGFuIGlkZW50aXR5IGZyb20gYSB1c2VyIGJ5IGRlbGV0aW5nIGl0LiBUaGUgdXNlciB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHNpZ24gaW4gd2l0aCB0aGF0IGlkZW50aXR5IG9uY2UgaXQncyB1bmxpbmtlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdW5saW5rSWRlbnRpdHkoaWRlbnRpdHkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0RFTEVURScsIGAke3RoaXMudXJsfS91c2VyL2lkZW50aXRpZXMvJHtpZGVudGl0eS5pZGVudGl0eV9pZH1gLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGp3dDogKF9iID0gKF9hID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWNjZXNzX3Rva2VuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IEpXVC5cclxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW4gQSB2YWxpZCByZWZyZXNoIHRva2VuIHRoYXQgd2FzIHJldHVybmVkIG9uIGxvZ2luLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfcmVmcmVzaEFjY2Vzc1Rva2VuKHJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgIGNvbnN0IGRlYnVnTmFtZSA9IGAjX3JlZnJlc2hBY2Nlc3NUb2tlbigke3JlZnJlc2hUb2tlbi5zdWJzdHJpbmcoMCwgNSl9Li4uKWA7XHJcbiAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnYmVnaW4nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAvLyB3aWxsIGF0dGVtcHQgdG8gcmVmcmVzaCB0aGUgdG9rZW4gd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmXHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXRyeWFibGUoYXN5bmMgKGF0dGVtcHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKDIwMCAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSk7IC8vIDIwMCwgNDAwLCA4MDAsIC4uLlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAncmVmcmVzaGluZyBhdHRlbXB0JywgYXR0ZW1wdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vdG9rZW4/Z3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHsgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIChhdHRlbXB0LCBlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEJhY2tPZmZJbnRlcnZhbCA9IDIwMCAqIE1hdGgucG93KDIsIGF0dGVtcHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChlcnJvciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoZXJyb3IpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0cnlhYmxlIG9ubHkgaWYgdGhlIHJlcXVlc3QgY2FuIGJlIHNlbnQgYmVmb3JlIHRoZSBiYWNrb2ZmIG92ZXJmbG93cyB0aGUgdGljayBkdXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIERhdGUubm93KCkgKyBuZXh0QmFja09mZkludGVydmFsIC0gc3RhcnRlZEF0IDwgQVVUT19SRUZSRVNIX1RJQ0tfRFVSQVRJT05fTVMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2Vycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IG51bGwsIHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9pc1ZhbGlkU2Vzc2lvbihtYXliZVNlc3Npb24pIHtcclxuICAgICAgICBjb25zdCBpc1ZhbGlkU2Vzc2lvbiA9IHR5cGVvZiBtYXliZVNlc3Npb24gPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICAgIG1heWJlU2Vzc2lvbiAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAnYWNjZXNzX3Rva2VuJyBpbiBtYXliZVNlc3Npb24gJiZcclxuICAgICAgICAgICAgJ3JlZnJlc2hfdG9rZW4nIGluIG1heWJlU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAnZXhwaXJlc19hdCcgaW4gbWF5YmVTZXNzaW9uO1xyXG4gICAgICAgIHJldHVybiBpc1ZhbGlkU2Vzc2lvbjtcclxuICAgIH1cclxuICAgIGFzeW5jIF9oYW5kbGVQcm92aWRlclNpZ25Jbihwcm92aWRlciwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMuX2dldFVybEZvclByb3ZpZGVyKGAke3RoaXMudXJsfS9hdXRob3JpemVgLCBwcm92aWRlciwge1xyXG4gICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zLnJlZGlyZWN0VG8sXHJcbiAgICAgICAgICAgIHNjb3Blczogb3B0aW9ucy5zY29wZXMsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX2hhbmRsZVByb3ZpZGVyU2lnbkluKCknLCAncHJvdmlkZXInLCBwcm92aWRlciwgJ29wdGlvbnMnLCBvcHRpb25zLCAndXJsJywgdXJsKTtcclxuICAgICAgICAvLyB0cnkgdG8gb3BlbiBvbiB0aGUgYnJvd3NlclxyXG4gICAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiAhb3B0aW9ucy5za2lwQnJvd3NlclJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBwcm92aWRlciwgdXJsIH0sIGVycm9yOiBudWxsIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlY292ZXJzIHRoZSBzZXNzaW9uIGZyb20gTG9jYWxTdG9yYWdlIGFuZCByZWZyZXNoZXMgdGhlIHRva2VuXHJcbiAgICAgKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyBhc3luYyB0byBhY2NvbW1vZGF0ZSBmb3IgQXN5bmNTdG9yYWdlIGUuZy4gaW4gUmVhY3QgbmF0aXZlLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfcmVjb3ZlckFuZFJlZnJlc2goKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCBkZWJ1Z05hbWUgPSAnI19yZWNvdmVyQW5kUmVmcmVzaCgpJztcclxuICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdiZWdpbicpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGF3YWl0IGdldEl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSkpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNlc3Npb24gJiYgdGhpcy51c2VyU3RvcmFnZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1heWJlVXNlciA9IChhd2FpdCBnZXRJdGVtQXN5bmModGhpcy51c2VyU3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UuaXNTZXJ2ZXIgJiYgT2JqZWN0LmlzKHRoaXMuc3RvcmFnZSwgdGhpcy51c2VyU3RvcmFnZSkgJiYgIW1heWJlVXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgYW5kIHVzZXJTdG9yYWdlIGFyZSB0aGUgc2FtZSBzdG9yYWdlIG1lZGl1bSwgZm9yIGV4YW1wbGVcclxuICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYWxTdG9yYWdlIGlmIHVzZXJTdG9yYWdlIGRvZXMgbm90IGhhdmUgdGhlIHVzZXIgZnJvbVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2Ugc3RvcmVkLCBzdG9yZSBpdCBmaXJzdCB0aGVyZWJ5IG1pZ3JhdGluZyB0aGUgdXNlciBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHN0b3JhZ2UgLT4gdXNlclN0b3JhZ2VcclxuICAgICAgICAgICAgICAgICAgICBtYXliZVVzZXIgPSB7IHVzZXI6IGN1cnJlbnRTZXNzaW9uLnVzZXIgfTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZXRJdGVtQXN5bmModGhpcy51c2VyU3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJywgbWF5YmVVc2VyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSAoX2EgPSBtYXliZVVzZXIgPT09IG51bGwgfHwgbWF5YmVVc2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXliZVVzZXIudXNlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdXNlck5vdEF2YWlsYWJsZVByb3h5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFNlc3Npb24gJiYgIWN1cnJlbnRTZXNzaW9uLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIC8vIHVzZXIgc3RvcmFnZSBpcyBub3Qgc2V0LCBsZXQncyBjaGVjayBpZiBpdCB3YXMgcHJldmlvdXNseSBlbmFibGVkIHNvXHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBicmluZyBiYWNrIHRoZSBzdG9yYWdlIGFzIGl0IHNob3VsZCBiZVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50U2Vzc2lvbi51c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGVzdCBpZiB1c2VyU3RvcmFnZSB3YXMgcHJldmlvdXNseSBlbmFibGVkIGFuZCB0aGUgc3RvcmFnZSBtZWRpdW0gd2FzIHRoZSBzYW1lLCB0byBtb3ZlIHRoZSB1c2VyIGJhY2sgdW5kZXIgdGhlIHNhbWUga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdGVVc2VyID0gKGF3YWl0IGdldEl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VwYXJhdGVVc2VyICYmIChzZXBhcmF0ZVVzZXIgPT09IG51bGwgfHwgc2VwYXJhdGVVc2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXBhcmF0ZVVzZXIudXNlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24udXNlciA9IHNlcGFyYXRlVXNlci51c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0SXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5LCBjdXJyZW50U2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyID0gdXNlck5vdEF2YWlsYWJsZVByb3h5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ3Nlc3Npb24gZnJvbSBzdG9yYWdlJywgY3VycmVudFNlc3Npb24pO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWRTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnc2Vzc2lvbiBpcyBub3QgdmFsaWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2Vzc2lvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlbW92ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBleHBpcmVzV2l0aE1hcmdpbiA9ICgoX2IgPSBjdXJyZW50U2Vzc2lvbi5leHBpcmVzX2F0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBJbmZpbml0eSkgKiAxMDAwIC0gRGF0ZS5ub3coKSA8IEVYUElSWV9NQVJHSU5fTVM7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgYHNlc3Npb24gaGFzJHtleHBpcmVzV2l0aE1hcmdpbiA/ICcnIDogJyBub3QnfSBleHBpcmVkIHdpdGggbWFyZ2luIG9mICR7RVhQSVJZX01BUkdJTl9NU31zYCk7XHJcbiAgICAgICAgICAgIGlmIChleHBpcmVzV2l0aE1hcmdpbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1JlZnJlc2hUb2tlbiAmJiBjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ3JlZnJlc2ggZmFpbGVkIHdpdGggYSBub24tcmV0cnlhYmxlIGVycm9yLCByZW1vdmluZyB0aGUgc2Vzc2lvbicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlbW92ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U2Vzc2lvbi51c2VyICYmXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyLl9faXNVc2VyTm90QXZhaWxhYmxlUHJveHkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBwcm94eSB1c2VyLCB0cnkgdG8gZ2V0IHRoZSByZWFsIHVzZXIgZGF0YVxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yOiB1c2VyRXJyb3IgfSA9IGF3YWl0IHRoaXMuX2dldFVzZXIoY3VycmVudFNlc3Npb24uYWNjZXNzX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXJFcnJvciAmJiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLnVzZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSBkYXRhLnVzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGN1cnJlbnRTZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2NvdWxkIG5vdCBnZXQgdXNlciBkYXRhLCBza2lwcGluZyBTSUdORURfSU4gbm90aWZpY2F0aW9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGdldFVzZXJFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgdXNlciBkYXRhOicsIGdldFVzZXJFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnZXJyb3IgZ2V0dGluZyB1c2VyIGRhdGEsIHNraXBwaW5nIFNJR05FRF9JTiBub3RpZmljYXRpb24nLCBnZXRVc2VyRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBwZXJzaXN0IGN1cnJlbnRTZXNzaW9uIGFnYWluLCBhcyB3ZSBqdXN0IGxvYWRlZCBpdCBmcm9tXHJcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCBzdG9yYWdlOyBwZXJzaXN0aW5nIGl0IGFnYWluIG1heSBvdmVyd3JpdGUgYSB2YWx1ZSBzYXZlZCBieVxyXG4gICAgICAgICAgICAgICAgLy8gYW5vdGhlciBjbGllbnQgd2l0aCBhY2Nlc3MgdG8gdGhlIHNhbWUgbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGN1cnJlbnRTZXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2Vycm9yJywgZXJyKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlbmQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZWZyZXNoaW5nIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcclxuICAgICAgICBpZiAodGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaGluZ0RlZmVycmVkLnByb21pc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRlYnVnTmFtZSA9IGAjX2NhbGxSZWZyZXNoVG9rZW4oJHtyZWZyZXNoVG9rZW4uc3Vic3RyaW5nKDAsIDUpfS4uLilgO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2JlZ2luJyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fcmVmcmVzaEFjY2Vzc1Rva2VuKHJlZnJlc2hUb2tlbik7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcilcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuc2Vzc2lvbilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnVE9LRU5fUkVGUkVTSEVEJywgZGF0YS5zZXNzaW9uKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geyBzZXNzaW9uOiBkYXRhLnNlc3Npb24sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaGluZ0RlZmVycmVkLnJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2Vycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7IHNlc3Npb246IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKF9hID0gdGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIChfYiA9IHRoaXMucmVmcmVzaGluZ0RlZmVycmVkKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hpbmdEZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9ub3RpZnlBbGxTdWJzY3JpYmVycyhldmVudCwgc2Vzc2lvbiwgYnJvYWRjYXN0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGRlYnVnTmFtZSA9IGAjX25vdGlmeUFsbFN1YnNjcmliZXJzKCR7ZXZlbnR9KWA7XHJcbiAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnYmVnaW4nLCBzZXNzaW9uLCBgYnJvYWRjYXN0ID0gJHticm9hZGNhc3R9YCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCAmJiBicm9hZGNhc3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZSh7IGV2ZW50LCBzZXNzaW9uIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20odGhpcy5zdGF0ZUNoYW5nZUVtaXR0ZXJzLnZhbHVlcygpKS5tYXAoYXN5bmMgKHgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgeC5jYWxsYmFjayhldmVudCwgc2Vzc2lvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcnNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlbmQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNldCBjdXJyZW50U2Vzc2lvbiBhbmQgY3VycmVudFVzZXJcclxuICAgICAqIHByb2Nlc3MgdG8gX3N0YXJ0QXV0b1JlZnJlc2hUb2tlbiBpZiBwb3NzaWJsZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBfc2F2ZVNlc3Npb24oc2Vzc2lvbikge1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3NhdmVTZXNzaW9uKCknLCBzZXNzaW9uKTtcclxuICAgICAgICAvLyBfc2F2ZVNlc3Npb24gaXMgYWx3YXlzIGNhbGxlZCB3aGVuZXZlciBhIG5ldyBzZXNzaW9uIGhhcyBiZWVuIGFjcXVpcmVkXHJcbiAgICAgICAgLy8gc28gd2UgY2FuIHNhZmVseSBzdXBwcmVzcyB0aGUgd2FybmluZyByZXR1cm5lZCBieSBmdXR1cmUgZ2V0U2Vzc2lvbiBjYWxsc1xyXG4gICAgICAgIHRoaXMuc3VwcHJlc3NHZXRTZXNzaW9uV2FybmluZyA9IHRydWU7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2hhbGxvdyBjb3B5IHRvIHdvcmsgd2l0aCwgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIHNlc3Npb24gb2JqZWN0IGlmIGl0J3MgdXNlZCBlbHNld2hlcmVcclxuICAgICAgICBjb25zdCBzZXNzaW9uVG9Qcm9jZXNzID0gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbik7XHJcbiAgICAgICAgY29uc3QgdXNlcklzUHJveHkgPSBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIgJiYgc2Vzc2lvblRvUHJvY2Vzcy51c2VyLl9faXNVc2VyTm90QXZhaWxhYmxlUHJveHkgPT09IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCF1c2VySXNQcm94eSAmJiBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYSByZWFsIHVzZXIgb2JqZWN0LCBzYXZlIGl0IHRvIHVzZXJTdG9yYWdlLlxyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2V0SXRlbUFzeW5jKHRoaXMudXNlclN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicsIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh1c2VySXNQcm94eSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyB0aGUgcHJveHksIGl0IG1lYW5zIHVzZXIgd2FzIG5vdCBmb3VuZCBpbiB1c2VyU3RvcmFnZS5cclxuICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBlbnN1cmUgbm8gc3RhbGUgdXNlciBkYXRhIGZvciB0aGlzIGtleSBleGlzdHMgaW4gdXNlclN0b3JhZ2UgaWYgd2Ugd2VyZSB0byBzYXZlIG51bGwsXHJcbiAgICAgICAgICAgICAgICAvLyBvciBzaW1wbHkgbm90IHNhdmUgdGhlIHByb3h5LiBGb3Igbm93LCB3ZSBkb24ndCBzYXZlIHRoZSBwcm94eSBoZXJlLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIG5lZWQgdG8gY2xlYXIgdXNlclN0b3JhZ2UgaWYgdXNlciBiZWNvbWVzIHByb3h5LCB0aGF0IGxvZ2ljIHdvdWxkIGdvIGhlcmUuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUHJlcGFyZSB0aGUgbWFpbiBzZXNzaW9uIGRhdGEgZm9yIHByaW1hcnkgc3RvcmFnZTogcmVtb3ZlIHRoZSB1c2VyIHByb3BlcnR5IGJlZm9yZSBjbG9uaW5nXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIG9yaWdpbmFsIHNlc3Npb24udXNlciBtaWdodCBiZSB0aGUgcHJveHlcclxuICAgICAgICAgICAgY29uc3QgbWFpblNlc3Npb25EYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvblRvUHJvY2Vzcyk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBtYWluU2Vzc2lvbkRhdGEudXNlcjsgLy8gUmVtb3ZlIHVzZXIgKHJlYWwgb3IgcHJveHkpIGJlZm9yZSBjbG9uaW5nIGZvciBtYWluIHN0b3JhZ2VcclxuICAgICAgICAgICAgY29uc3QgY2xvbmVkTWFpblNlc3Npb25EYXRhID0gZGVlcENsb25lKG1haW5TZXNzaW9uRGF0YSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHNldEl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSwgY2xvbmVkTWFpblNlc3Npb25EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIE5vIHVzZXJTdG9yYWdlIGlzIGNvbmZpZ3VyZWQuXHJcbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgc2Vzc2lvbi51c2VyIHNob3VsZCBpZGVhbGx5IG5vdCBiZSBhIHByb3h5LlxyXG4gICAgICAgICAgICAvLyBJZiBpdCB3ZXJlLCBzdHJ1Y3R1cmVkQ2xvbmUgd291bGQgZmFpbC4gVGhpcyBpbXBsaWVzIGFuIGlzc3VlIGVsc2V3aGVyZSBpZiB1c2VyIGlzIGEgcHJveHkgaGVyZVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRTZXNzaW9uID0gZGVlcENsb25lKHNlc3Npb25Ub1Byb2Nlc3MpOyAvLyBzZXNzaW9uVG9Qcm9jZXNzIHN0aWxsIGhhcyBpdHMgb3JpZ2luYWwgdXNlciBwcm9wZXJ0eVxyXG4gICAgICAgICAgICBhd2FpdCBzZXRJdGVtQXN5bmModGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXksIGNsb25lZFNlc3Npb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9yZW1vdmVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3JlbW92ZVNlc3Npb24oKScpO1xyXG4gICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgICAgYXdhaXQgcmVtb3ZlSXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy1jb2RlLXZlcmlmaWVyJyk7XHJcbiAgICAgICAgYXdhaXQgcmVtb3ZlSXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJyk7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgYXdhaXQgcmVtb3ZlSXRlbUFzeW5jKHRoaXMudXNlclN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX09VVCcsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFueSByZWdpc3RlcmVkIHZpc2liaWxpdHljaGFuZ2UgY2FsbGJhY2suXHJcbiAgICAgKlxyXG4gICAgICoge0BzZWUgI3N0YXJ0QXV0b1JlZnJlc2h9XHJcbiAgICAgKiB7QHNlZSAjc3RvcEF1dG9SZWZyZXNofVxyXG4gICAgICovXHJcbiAgICBfcmVtb3ZlVmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19yZW1vdmVWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKCknKTtcclxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjaztcclxuICAgICAgICB0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Jyb3dzZXIoKSAmJiAod2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdyZW1vdmluZyB2aXNpYmlsaXR5Y2hhbmdlIGNhbGxiYWNrIGZhaWxlZCcsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgI3N0YXJ0QXV0b1JlZnJlc2h9LiBVc2UgdGhpc1xyXG4gICAgICogd2l0aGluIHRoZSBsaWJyYXJ5LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfc3RhcnRBdXRvUmVmcmVzaCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdG9wQXV0b1JlZnJlc2goKTtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19zdGFydEF1dG9SZWZyZXNoKCknKTtcclxuICAgICAgICBjb25zdCB0aWNrZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9hdXRvUmVmcmVzaFRva2VuVGljaygpLCBBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUyk7XHJcbiAgICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpY2tlciA9IHRpY2tlcjtcclxuICAgICAgICBpZiAodGlja2VyICYmIHR5cGVvZiB0aWNrZXIgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aWNrZXIudW5yZWYgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgLy8gdGlja2VyIGlzIGEgTm9kZUpTIFRpbWVvdXQgb2JqZWN0IHRoYXQgaGFzIGFuIGB1bnJlZmAgbWV0aG9kXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdGltZXJzLmh0bWwjdGltZW91dHVucmVmXHJcbiAgICAgICAgICAgIC8vIFdoZW4gYXV0byByZWZyZXNoIGlzIHVzZWQgaW4gTm9kZUpTIChsaWtlIGZvciB0ZXN0aW5nKSB0aGVcclxuICAgICAgICAgICAgLy8gYHNldEludGVydmFsYCBpcyBwcmV2ZW50aW5nIHRoZSBwcm9jZXNzIGZyb20gYmVpbmcgbWFya2VkIGFzXHJcbiAgICAgICAgICAgIC8vIGZpbmlzaGVkIGFuZCB0ZXN0cyBydW4gZW5kbGVzc2x5LiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZ1xyXG4gICAgICAgICAgICAvLyBgdW5yZWYoKWAgb24gdGhlIHJldHVybmVkIG9iamVjdC5cclxuICAgICAgICAgICAgdGlja2VyLnVucmVmKCk7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgaGFzIG5vIGNvbnRleHQgb2YgRGVub1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgRGVubyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIERlbm8udW5yZWZUaW1lciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAvLyBzaW1pbGFyIGxpa2UgZm9yIE5vZGVKUywgYnV0IHdpdGggdGhlIERlbm8gQVBJXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGVuby5sYW5kL2FwaUBsYXRlc3Q/dW5zdGFibGUmcz1EZW5vLnVucmVmVGltZXJcclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUUyBoYXMgbm8gY29udGV4dCBvZiBEZW5vXHJcbiAgICAgICAgICAgIERlbm8udW5yZWZUaW1lcih0aWNrZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBydW4gdGhlIHRpY2sgaW1tZWRpYXRlbHksIGJ1dCBpbiB0aGUgbmV4dCBwYXNzIG9mIHRoZSBldmVudCBsb29wIHNvIHRoYXRcclxuICAgICAgICAvLyAjX2luaXRpYWxpemUgY2FuIGJlIGFsbG93ZWQgdG8gY29tcGxldGUgd2l0aG91dCByZWN1cnNpdmVseSB3YWl0aW5nIG9uXHJcbiAgICAgICAgLy8gaXRzZWxmXHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2F1dG9SZWZyZXNoVG9rZW5UaWNrKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgdGhlIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rICNzdG9wQXV0b1JlZnJlc2h9LiBVc2UgdGhpc1xyXG4gICAgICogd2l0aGluIHRoZSBsaWJyYXJ5LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfc3RvcEF1dG9SZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3N0b3BBdXRvUmVmcmVzaCgpJyk7XHJcbiAgICAgICAgY29uc3QgdGlja2VyID0gdGhpcy5hdXRvUmVmcmVzaFRpY2tlcjtcclxuICAgICAgICB0aGlzLmF1dG9SZWZyZXNoVGlja2VyID0gbnVsbDtcclxuICAgICAgICBpZiAodGlja2VyKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGlja2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyBhbiBhdXRvLXJlZnJlc2ggcHJvY2VzcyBpbiB0aGUgYmFja2dyb3VuZC4gVGhlIHNlc3Npb24gaXMgY2hlY2tlZFxyXG4gICAgICogZXZlcnkgZmV3IHNlY29uZHMuIENsb3NlIHRvIHRoZSB0aW1lIG9mIGV4cGlyYXRpb24gYSBwcm9jZXNzIGlzIHN0YXJ0ZWQgdG9cclxuICAgICAqIHJlZnJlc2ggdGhlIHNlc3Npb24uIElmIHJlZnJlc2hpbmcgZmFpbHMgaXQgd2lsbCBiZSByZXRyaWVkIGZvciBhcyBsb25nIGFzXHJcbiAgICAgKiBuZWNlc3NhcnkuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IHNldCB0aGUge0BsaW5rIEdvVHJ1ZUNsaWVudE9wdGlvbnMjYXV0b1JlZnJlc2hUb2tlbn0geW91IGRvbid0IG5lZWRcclxuICAgICAqIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgZm9yIHlvdS5cclxuICAgICAqXHJcbiAgICAgKiBPbiBicm93c2VycyB0aGUgcmVmcmVzaCBwcm9jZXNzIHdvcmtzIG9ubHkgd2hlbiB0aGUgdGFiL3dpbmRvdyBpcyBpbiB0aGVcclxuICAgICAqIGZvcmVncm91bmQgdG8gY29uc2VydmUgcmVzb3VyY2VzIGFzIHdlbGwgYXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kXHJcbiAgICAgKiBmbG9vZGluZyBhdXRoIHdpdGggcmVxdWVzdHMuIElmIHlvdSBjYWxsIHRoaXMgbWV0aG9kIGFueSBtYW5hZ2VkXHJcbiAgICAgKiB2aXNpYmlsaXR5IGNoYW5nZSBjYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQgYW5kIHlvdSBtdXN0IG1hbmFnZSB2aXNpYmlsaXR5XHJcbiAgICAgKiBjaGFuZ2VzIG9uIHlvdXIgb3duLlxyXG4gICAgICpcclxuICAgICAqIE9uIG5vbi1icm93c2VyIHBsYXRmb3JtcyB0aGUgcmVmcmVzaCBwcm9jZXNzIHdvcmtzICpjb250aW51b3VzbHkqIGluIHRoZVxyXG4gICAgICogYmFja2dyb3VuZCwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmFibGUuIFlvdSBzaG91bGQgaG9vayBpbnRvIHlvdXJcclxuICAgICAqIHBsYXRmb3JtJ3MgZm9yZWdyb3VuZCBpbmRpY2F0aW9uIG1lY2hhbmlzbSBhbmQgY2FsbCB0aGVzZSBtZXRob2RzXHJcbiAgICAgKiBhcHByb3ByaWF0ZWx5IHRvIGNvbnNlcnZlIHJlc291cmNlcy5cclxuICAgICAqXHJcbiAgICAgKiB7QHNlZSAjc3RvcEF1dG9SZWZyZXNofVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzdGFydEF1dG9SZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZVZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdGFydEF1dG9SZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIGFuIGFjdGl2ZSBhdXRvIHJlZnJlc2ggcHJvY2VzcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kIChpZiBhbnkpLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBjYWxsIHRoaXMgbWV0aG9kIGFueSBtYW5hZ2VkIHZpc2liaWxpdHkgY2hhbmdlIGNhbGxiYWNrIHdpbGwgYmVcclxuICAgICAqIHJlbW92ZWQgYW5kIHlvdSBtdXN0IG1hbmFnZSB2aXNpYmlsaXR5IGNoYW5nZXMgb24geW91ciBvd24uXHJcbiAgICAgKlxyXG4gICAgICogU2VlIHtAbGluayAjc3RhcnRBdXRvUmVmcmVzaH0gZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc3RvcEF1dG9SZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZVZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdG9wQXV0b1JlZnJlc2goKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUnVucyB0aGUgYXV0byByZWZyZXNoIHRva2VuIHRpY2suXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9hdXRvUmVmcmVzaFRva2VuVGljaygpIHtcclxuICAgICAgICB0aGlzLl9kZWJ1ZygnI19hdXRvUmVmcmVzaFRva2VuVGljaygpJywgJ2JlZ2luJyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soMCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24ucmVmcmVzaF90b2tlbiB8fCAhc2Vzc2lvbi5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfYXV0b1JlZnJlc2hUb2tlblRpY2soKScsICdubyBzZXNzaW9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2Vzc2lvbiB3aWxsIGV4cGlyZSBpbiB0aGlzIG1hbnkgdGlja3MgKG9yIGhhcyBhbHJlYWR5IGV4cGlyZWQgaWYgPD0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGlyZXNJblRpY2tzID0gTWF0aC5mbG9vcigoc2Vzc2lvbi5leHBpcmVzX2F0ICogMTAwMCAtIG5vdykgLyBBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19hdXRvUmVmcmVzaFRva2VuVGljaygpJywgYGFjY2VzcyB0b2tlbiBleHBpcmVzIGluICR7ZXhwaXJlc0luVGlja3N9IHRpY2tzLCBhIHRpY2sgbGFzdHMgJHtBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NU31tcywgcmVmcmVzaCB0aHJlc2hvbGQgaXMgJHtBVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTER9IHRpY2tzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwaXJlc0luVGlja3MgPD0gQVVUT19SRUZSRVNIX1RJQ0tfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihzZXNzaW9uLnJlZnJlc2hfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQXV0byByZWZyZXNoIHRpY2sgZmFpbGVkIHdpdGggZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgdHJhbnNpZW50IGVycm9yLicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2F1dG9SZWZyZXNoVG9rZW5UaWNrKCknLCAnZW5kJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5pc0FjcXVpcmVUaW1lb3V0IHx8IGUgaW5zdGFuY2VvZiBMb2NrQWNxdWlyZVRpbWVvdXRFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ2F1dG8gcmVmcmVzaCB0b2tlbiB0aWNrIGxvY2sgbm90IGF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBvbiB0aGUgYnJvd3NlciAvIHBsYXRmb3JtLCB3aGljaCBpbi10dXJuIHJ1blxyXG4gICAgICogYWxnb3JpdGhtcyB3aGVuIHRoZSBicm93c2VyIHdpbmRvdy90YWIgYXJlIGluIGZvcmVncm91bmQuIE9uIG5vbi1icm93c2VyXHJcbiAgICAgKiBwbGF0Zm9ybXMgaXQgYXNzdW1lcyBhbHdheXMgZm9yZWdyb3VuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX2hhbmRsZVZpc2liaWxpdHlDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5fZGVidWcoJyNfaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpJyk7XHJcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIoKSB8fCAhKHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudHMgdGhlIHJlZnJlc2ggdG9rZW4gdGlja2VyIHJ1bnMgYWx3YXlzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0QXV0b1JlZnJlc2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayA9IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX29uVmlzaWJpbGl0eUNoYW5nZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIC8vIG5vdyBpbW1lZGlhdGVseSBjYWxsIHRoZSB2aXNiaWxpdHkgY2hhbmdlZCBjYWxsYmFjayB0byBzZXR1cCB3aXRoIHRoZVxyXG4gICAgICAgICAgICAvLyBjdXJyZW50IHZpc2JpbGl0eSBzdGF0ZVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2VkKHRydWUpOyAvLyBpbml0aWFsIGNhbGxcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ19oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgcmVnaXN0ZXJlZCB3aXRoIGB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScpYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX29uVmlzaWJpbGl0eUNoYW5nZWQoY2FsbGVkRnJvbUluaXRpYWxpemUpIHtcclxuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYCNfb25WaXNpYmlsaXR5Q2hhbmdlZCgke2NhbGxlZEZyb21Jbml0aWFsaXplfSlgO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnKG1ldGhvZE5hbWUsICd2aXNpYmlsaXR5U3RhdGUnLCBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpO1xyXG4gICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpbiBicm93c2VyIGVudmlyb25tZW50cyB0aGUgcmVmcmVzaCB0b2tlbiB0aWNrZXIgcnVucyBvbmx5IG9uIGZvY3VzZWQgdGFic1xyXG4gICAgICAgICAgICAgICAgLy8gd2hpY2ggcHJldmVudHMgcmFjZSBjb25kaXRpb25zXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydEF1dG9SZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjYWxsZWRGcm9tSW5pdGlhbGl6ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHZpc2liaWxpdHkgaGFzIGNoYW5nZWQsIGkuZS4gdGhlIGJyb3dzZXJcclxuICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb25lZCBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlIHNvIHdlIG5lZWQgdG8gc2VlIGlmIHRoZSBzZXNzaW9uXHJcbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgcmVjb3ZlcmVkIGltbWVkaWF0ZWx5Li4uIGJ1dCB0byBkbyB0aGF0IHdlIG5lZWQgdG8gYWNxdWlyZVxyXG4gICAgICAgICAgICAgICAgLy8gdGhlIGxvY2sgZmlyc3QgYXN5bmNocm9ub3VzbHlcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jaygtMSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgIT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhtZXRob2ROYW1lLCAnYWNxdWlyZWQgdGhlIGxvY2sgdG8gcmVjb3ZlciB0aGUgc2Vzc2lvbiwgYnV0IHRoZSBicm93c2VyIHZpc2liaWxpdHlTdGF0ZSBpcyBubyBsb25nZXIgdmlzaWJsZSwgYWJvcnRpbmcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmlzaWJpbGl0eSBoYXMgY2hhbmdlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jaywgYWJvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyByZWNvdmVyIHRoZSBzZXNzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVjb3ZlckFuZFJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1JlZnJlc2hUb2tlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF1dG9SZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyB0aGUgcmVsZXZhbnQgbG9naW4gVVJMIGZvciBhIHRoaXJkLXBhcnR5IHByb3ZpZGVyLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmVkaXJlY3RUbyBBIFVSTCBvciBtb2JpbGUgYWRkcmVzcyB0byBzZW5kIHRoZSB1c2VyIHRvIGFmdGVyIHRoZXkgYXJlIGNvbmZpcm1lZC5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnNjb3BlcyBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHNjb3BlcyBncmFudGVkIHRvIHRoZSBPQXV0aCBhcHBsaWNhdGlvbi5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnF1ZXJ5UGFyYW1zIEFuIG9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgY29udGFpbmluZyBxdWVyeSBwYXJhbWV0ZXJzIGdyYW50ZWQgdG8gdGhlIE9BdXRoIGFwcGxpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBfZ2V0VXJsRm9yUHJvdmlkZXIodXJsLCBwcm92aWRlciwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IFtgcHJvdmlkZXI9JHtlbmNvZGVVUklDb21wb25lbnQocHJvdmlkZXIpfWBdO1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmVkaXJlY3RUbykge1xyXG4gICAgICAgICAgICB1cmxQYXJhbXMucHVzaChgcmVkaXJlY3RfdG89JHtlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5yZWRpcmVjdFRvKX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zY29wZXMpIHtcclxuICAgICAgICAgICAgdXJsUGFyYW1zLnB1c2goYHNjb3Blcz0ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnNjb3Blcyl9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAncGtjZScpIHtcclxuICAgICAgICAgICAgY29uc3QgW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdID0gYXdhaXQgZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZCh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsb3dQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcclxuICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlOiBgJHtlbmNvZGVVUklDb21wb25lbnQoY29kZUNoYWxsZW5nZSl9YCxcclxuICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvZGVDaGFsbGVuZ2VNZXRob2QpfWAsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB1cmxQYXJhbXMucHVzaChmbG93UGFyYW1zLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuICAgICAgICAgICAgdXJsUGFyYW1zLnB1c2gocXVlcnkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2tpcEJyb3dzZXJSZWRpcmVjdCkge1xyXG4gICAgICAgICAgICB1cmxQYXJhbXMucHVzaChgc2tpcF9odHRwX3JlZGlyZWN0PSR7b3B0aW9ucy5za2lwQnJvd3NlclJlZGlyZWN0fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7dXJsfT8ke3VybFBhcmFtcy5qb2luKCcmJyl9YDtcclxuICAgIH1cclxuICAgIGFzeW5jIF91bmVucm9sbChwYXJhbXMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHNlc3Npb25EYXRhLCBlcnJvcjogc2Vzc2lvbkVycm9yIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdERUxFVEUnLCBgJHt0aGlzLnVybH0vZmFjdG9ycy8ke3BhcmFtcy5mYWN0b3JJZH1gLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGp3dDogKF9hID0gc2Vzc2lvbkRhdGEgPT09IG51bGwgfHwgc2Vzc2lvbkRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb25EYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9lbnJvbGwocGFyYW1zKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogc2Vzc2lvbkRhdGEsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogc2Vzc2lvbkVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbih7IGZyaWVuZGx5X25hbWU6IHBhcmFtcy5mcmllbmRseU5hbWUsIGZhY3Rvcl90eXBlOiBwYXJhbXMuZmFjdG9yVHlwZSB9LCAocGFyYW1zLmZhY3RvclR5cGUgPT09ICdwaG9uZScgPyB7IHBob25lOiBwYXJhbXMucGhvbmUgfSA6IHsgaXNzdWVyOiBwYXJhbXMuaXNzdWVyIH0pKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L2ZhY3RvcnNgLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgand0OiAoX2EgPSBzZXNzaW9uRGF0YSA9PT0gbnVsbCB8fCBzZXNzaW9uRGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbkRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuZmFjdG9yVHlwZSA9PT0gJ3RvdHAnICYmICgoX2IgPSBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEudG90cCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnFyX2NvZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS50b3RwLnFyX2NvZGUgPSBgZGF0YTppbWFnZS9zdmcreG1sO3V0Zi04LCR7ZGF0YS50b3RwLnFyX2NvZGV9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHtAc2VlIEdvVHJ1ZU1GQUFwaSN2ZXJpZnl9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF92ZXJpZnkocGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogc2Vzc2lvbkRhdGEsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vZmFjdG9ycy8ke3BhcmFtcy5mYWN0b3JJZH0vdmVyaWZ5YCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7IGNvZGU6IHBhcmFtcy5jb2RlLCBjaGFsbGVuZ2VfaWQ6IHBhcmFtcy5jaGFsbGVuZ2VJZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGp3dDogKF9hID0gc2Vzc2lvbkRhdGEgPT09IG51bGwgfHwgc2Vzc2lvbkRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb25EYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKE9iamVjdC5hc3NpZ24oeyBleHBpcmVzX2F0OiBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSArIGRhdGEuZXhwaXJlc19pbiB9LCBkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ01GQV9DSEFMTEVOR0VfVkVSSUZJRUQnLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHtAc2VlIEdvVHJ1ZU1GQUFwaSNjaGFsbGVuZ2V9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9jaGFsbGVuZ2UocGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogc2Vzc2lvbkRhdGEsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L2ZhY3RvcnMvJHtwYXJhbXMuZmFjdG9ySWR9L2NoYWxsZW5nZWAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogeyBjaGFubmVsOiBwYXJhbXMuY2hhbm5lbCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGp3dDogKF9hID0gc2Vzc2lvbkRhdGEgPT09IG51bGwgfHwgc2Vzc2lvbkRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb25EYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICoge0BzZWUgR29UcnVlTUZBQXBpI2NoYWxsZW5nZUFuZFZlcmlmeX1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgX2NoYWxsZW5nZUFuZFZlcmlmeShwYXJhbXMpIHtcclxuICAgICAgICAvLyBib3RoIF9jaGFsbGVuZ2UgYW5kIF92ZXJpZnkgaW5kZXBlbmRlbnRseSBhY3F1aXJlIHRoZSBsb2NrLCBzbyBubyBuZWVkXHJcbiAgICAgICAgLy8gdG8gYWNxdWlyZSBpdCBoZXJlXHJcbiAgICAgICAgY29uc3QgeyBkYXRhOiBjaGFsbGVuZ2VEYXRhLCBlcnJvcjogY2hhbGxlbmdlRXJyb3IgfSA9IGF3YWl0IHRoaXMuX2NoYWxsZW5nZSh7XHJcbiAgICAgICAgICAgIGZhY3RvcklkOiBwYXJhbXMuZmFjdG9ySWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGNoYWxsZW5nZUVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBjaGFsbGVuZ2VFcnJvciB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdmVyaWZ5KHtcclxuICAgICAgICAgICAgZmFjdG9ySWQ6IHBhcmFtcy5mYWN0b3JJZCxcclxuICAgICAgICAgICAgY2hhbGxlbmdlSWQ6IGNoYWxsZW5nZURhdGEuaWQsXHJcbiAgICAgICAgICAgIGNvZGU6IHBhcmFtcy5jb2RlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB7QHNlZSBHb1RydWVNRkFBcGkjbGlzdEZhY3RvcnN9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9saXN0RmFjdG9ycygpIHtcclxuICAgICAgICAvLyB1c2UgI2dldFVzZXIgaW5zdGVhZCBvZiAjX2dldFVzZXIgYXMgdGhlIGZvcm1lciBhY3F1aXJlcyBhIGxvY2tcclxuICAgICAgICBjb25zdCB7IGRhdGE6IHsgdXNlciB9LCBlcnJvcjogdXNlckVycm9yLCB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKCk7XHJcbiAgICAgICAgaWYgKHVzZXJFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogdXNlckVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZhY3RvcnMgPSAodXNlciA9PT0gbnVsbCB8fCB1c2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1c2VyLmZhY3RvcnMpIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IHRvdHAgPSBmYWN0b3JzLmZpbHRlcigoZmFjdG9yKSA9PiBmYWN0b3IuZmFjdG9yX3R5cGUgPT09ICd0b3RwJyAmJiBmYWN0b3Iuc3RhdHVzID09PSAndmVyaWZpZWQnKTtcclxuICAgICAgICBjb25zdCBwaG9uZSA9IGZhY3RvcnMuZmlsdGVyKChmYWN0b3IpID0+IGZhY3Rvci5mYWN0b3JfdHlwZSA9PT0gJ3Bob25lJyAmJiBmYWN0b3Iuc3RhdHVzID09PSAndmVyaWZpZWQnKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBhbGw6IGZhY3RvcnMsXHJcbiAgICAgICAgICAgICAgICB0b3RwLFxyXG4gICAgICAgICAgICAgICAgcGhvbmUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHtAc2VlIEdvVHJ1ZU1GQUFwaSNnZXRBdXRoZW50aWNhdG9yQXNzdXJhbmNlTGV2ZWx9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIF9nZXRBdXRoZW50aWNhdG9yQXNzdXJhbmNlTGV2ZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvcjogc2Vzc2lvbkVycm9yLCB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVudExldmVsOiBudWxsLCBuZXh0TGV2ZWw6IG51bGwsIGN1cnJlbnRBdXRoZW50aWNhdGlvbk1ldGhvZHM6IFtdIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGRlY29kZUpXVChzZXNzaW9uLmFjY2Vzc190b2tlbik7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudExldmVsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmFhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IHBheWxvYWQuYWFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IG5leHRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWVkRmFjdG9ycyA9IChfYiA9IChfYSA9IHNlc3Npb24udXNlci5mYWN0b3JzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsdGVyKChmYWN0b3IpID0+IGZhY3Rvci5zdGF0dXMgPT09ICd2ZXJpZmllZCcpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh2ZXJpZmllZEZhY3RvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRMZXZlbCA9ICdhYWwyJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBdXRoZW50aWNhdGlvbk1ldGhvZHMgPSBwYXlsb2FkLmFtciB8fCBbXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgY3VycmVudExldmVsLCBuZXh0TGV2ZWwsIGN1cnJlbnRBdXRoZW50aWNhdGlvbk1ldGhvZHMgfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBmZXRjaEp3ayhraWQsIGp3a3MgPSB7IGtleXM6IFtdIH0pIHtcclxuICAgICAgICAvLyB0cnkgZmV0Y2hpbmcgZnJvbSB0aGUgc3VwcGxpZWQgandrc1xyXG4gICAgICAgIGxldCBqd2sgPSBqd2tzLmtleXMuZmluZCgoa2V5KSA9PiBrZXkua2lkID09PSBraWQpO1xyXG4gICAgICAgIGlmIChqd2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIGp3aztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAvLyB0cnkgZmV0Y2hpbmcgZnJvbSBjYWNoZVxyXG4gICAgICAgIGp3ayA9IHRoaXMuandrcy5rZXlzLmZpbmQoKGtleSkgPT4ga2V5LmtpZCA9PT0ga2lkKTtcclxuICAgICAgICAvLyBqd2sgZXhpc3RzIGFuZCBqd2tzIGlzbid0IHN0YWxlXHJcbiAgICAgICAgaWYgKGp3ayAmJiB0aGlzLmp3a3NfY2FjaGVkX2F0ICsgSldLU19UVEwgPiBub3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGp3aztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gandrIGlzbid0IGNhY2hlZCBpbiBtZW1vcnkgc28gd2UgbmVlZCB0byBmZXRjaCBpdCBmcm9tIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50XHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS8ud2VsbC1rbm93bi9qd2tzLmpzb25gLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGF0YS5rZXlzIHx8IGRhdGEua2V5cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuandrcyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5qd2tzX2NhY2hlZF9hdCA9IG5vdztcclxuICAgICAgICAvLyBGaW5kIHRoZSBzaWduaW5nIGtleVxyXG4gICAgICAgIGp3ayA9IGRhdGEua2V5cy5maW5kKChrZXkpID0+IGtleS5raWQgPT09IGtpZCk7XHJcbiAgICAgICAgaWYgKCFqd2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBqd2s7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEV4dHJhY3RzIHRoZSBKV1QgY2xhaW1zIHByZXNlbnQgaW4gdGhlIGFjY2VzcyB0b2tlbiBieSBmaXJzdCB2ZXJpZnlpbmcgdGhlXHJcbiAgICAgKiBKV1QgYWdhaW5zdCB0aGUgc2VydmVyJ3MgSlNPTiBXZWIgS2V5IFNldCBlbmRwb2ludFxyXG4gICAgICogYC8ud2VsbC1rbm93bi9qd2tzLmpzb25gIHdoaWNoIGlzIG9mdGVuIGNhY2hlZCwgcmVzdWx0aW5nIGluIHNpZ25pZmljYW50bHlcclxuICAgICAqIGZhc3RlciByZXNwb25zZXMuIFByZWZlciB0aGlzIG1ldGhvZCBvdmVyIHtAbGluayAjZ2V0VXNlcn0gd2hpY2ggYWx3YXlzXHJcbiAgICAgKiBzZW5kcyBhIHJlcXVlc3QgdG8gdGhlIEF1dGggc2VydmVyIGZvciBlYWNoIEpXVC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgcHJvamVjdCBpcyBub3QgdXNpbmcgYW4gYXN5bW1ldHJpYyBKV1Qgc2lnbmluZyBrZXkgKGxpa2UgRUNDIG9yXHJcbiAgICAgKiBSU0EpIGl0IGFsd2F5cyBzZW5kcyBhIHJlcXVlc3QgdG8gdGhlIEF1dGggc2VydmVyIChzaW1pbGFyIHRvIHtAbGlua1xyXG4gICAgICogI2dldFVzZXJ9KSB0byB2ZXJpZnkgdGhlIEpXVC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gand0IEFuIG9wdGlvbmFsIHNwZWNpZmljIEpXVCB5b3Ugd2lzaCB0byB2ZXJpZnksIG5vdCB0aGUgb25lIHlvdVxyXG4gICAgICogICAgICAgICAgICBjYW4gb2J0YWluIGZyb20ge0BsaW5rICNnZXRTZXNzaW9ufS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFZhcmlvdXMgYWRkaXRpb25hbCBvcHRpb25zIHRoYXQgYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSB0aGVcclxuICAgICAqICAgICAgICAgICAgICAgIGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRDbGFpbXMoand0LCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgdG9rZW4gPSBqd3Q7XHJcbiAgICAgICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFkYXRhLnNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdG9rZW4gPSBkYXRhLnNlc3Npb24uYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBwYXlsb2FkLCBzaWduYXR1cmUsIHJhdzogeyBoZWFkZXI6IHJhd0hlYWRlciwgcGF5bG9hZDogcmF3UGF5bG9hZCB9LCB9ID0gZGVjb2RlSldUKHRva2VuKTtcclxuICAgICAgICAgICAgaWYgKCEob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFsbG93RXhwaXJlZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFJlamVjdCBleHBpcmVkIEpXVHMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIGp3dCBhcmd1bWVudCB3YXMgcGFzc2VkXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUV4cChwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2lnbmluZ0tleSA9ICFoZWFkZXIuYWxnIHx8XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIuYWxnLnN0YXJ0c1dpdGgoJ0hTJykgfHxcclxuICAgICAgICAgICAgICAgICFoZWFkZXIua2lkIHx8XHJcbiAgICAgICAgICAgICAgICAhKCdjcnlwdG8nIGluIGdsb2JhbFRoaXMgJiYgJ3N1YnRsZScgaW4gZ2xvYmFsVGhpcy5jcnlwdG8pXHJcbiAgICAgICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgICAgIDogYXdhaXQgdGhpcy5mZXRjaEp3ayhoZWFkZXIua2lkLCAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmtleXMpID8geyBrZXlzOiBvcHRpb25zLmtleXMgfSA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5qd2tzKTtcclxuICAgICAgICAgICAgLy8gSWYgc3ltbWV0cmljIGFsZ29yaXRobSBvciBXZWJDcnlwdG8gQVBJIGlzIHVuYXZhaWxhYmxlLCBmYWxsYmFjayB0byBnZXRVc2VyKClcclxuICAgICAgICAgICAgaWYgKCFzaWduaW5nS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIodG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBnZXRVc2VyIHN1Y2NlZWRzIHNvIHRoZSBjbGFpbXMgaW4gdGhlIEpXVCBjYW4gYmUgdHJ1c3RlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYWltczogcGF5bG9hZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWxnb3JpdGhtID0gZ2V0QWxnb3JpdGhtKGhlYWRlci5hbGcpO1xyXG4gICAgICAgICAgICAvLyBDb252ZXJ0IEpXSyB0byBDcnlwdG9LZXlcclxuICAgICAgICAgICAgY29uc3QgcHVibGljS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ2p3aycsIHNpZ25pbmdLZXksIGFsZ29yaXRobSwgdHJ1ZSwgW1xyXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeScsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAvLyBWZXJpZnkgdGhlIHNpZ25hdHVyZVxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgY3J5cHRvLnN1YnRsZS52ZXJpZnkoYWxnb3JpdGhtLCBwdWJsaWNLZXksIHNpZ25hdHVyZSwgc3RyaW5nVG9VaW50OEFycmF5KGAke3Jhd0hlYWRlcn0uJHtyYXdQYXlsb2FkfWApKTtcclxuICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aEludmFsaWRKd3RFcnJvcignSW52YWxpZCBKV1Qgc2lnbmF0dXJlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gSWYgdmVyaWZpY2F0aW9uIHN1Y2NlZWRzLCBkZWNvZGUgYW5kIHJldHVybiBjbGFpbXNcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFpbXM6IHBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbkdvVHJ1ZUNsaWVudC5uZXh0SW5zdGFuY2VJRCA9IDA7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUdvVHJ1ZUNsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/index.js": /*!*************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/index.js ***! \*************************************************************/ /***/ (function(__unused_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 */ AuthAdminApi: function() { return /* reexport safe */ _AuthAdminApi__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; },\n/* harmony export */ AuthApiError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthApiError; },\n/* harmony export */ AuthClient: function() { return /* reexport safe */ _AuthClient__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; },\n/* harmony export */ AuthError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthError; },\n/* harmony export */ AuthImplicitGrantRedirectError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthImplicitGrantRedirectError; },\n/* harmony export */ AuthInvalidCredentialsError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthInvalidCredentialsError; },\n/* harmony export */ AuthInvalidJwtError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthInvalidJwtError; },\n/* harmony export */ AuthInvalidTokenResponseError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthInvalidTokenResponseError; },\n/* harmony export */ AuthPKCEGrantCodeExchangeError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthPKCEGrantCodeExchangeError; },\n/* harmony export */ AuthRetryableFetchError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthRetryableFetchError; },\n/* harmony export */ AuthSessionMissingError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthSessionMissingError; },\n/* harmony export */ AuthUnknownError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthUnknownError; },\n/* harmony export */ AuthWeakPasswordError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthWeakPasswordError; },\n/* harmony export */ CustomAuthError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.CustomAuthError; },\n/* harmony export */ GoTrueAdminApi: function() { return /* reexport safe */ _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; },\n/* harmony export */ GoTrueClient: function() { return /* reexport safe */ _GoTrueClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; },\n/* harmony export */ NavigatorLockAcquireTimeoutError: function() { return /* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.NavigatorLockAcquireTimeoutError; },\n/* harmony export */ SIGN_OUT_SCOPES: function() { return /* reexport safe */ _lib_types__WEBPACK_IMPORTED_MODULE_4__.SIGN_OUT_SCOPES; },\n/* harmony export */ isAuthApiError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthApiError; },\n/* harmony export */ isAuthError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthError; },\n/* harmony export */ isAuthImplicitGrantRedirectError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthImplicitGrantRedirectError; },\n/* harmony export */ isAuthRetryableFetchError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthRetryableFetchError; },\n/* harmony export */ isAuthSessionMissingError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthSessionMissingError; },\n/* harmony export */ isAuthWeakPasswordError: function() { return /* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthWeakPasswordError; },\n/* harmony export */ lockInternals: function() { return /* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.internals; },\n/* harmony export */ navigatorLock: function() { return /* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.navigatorLock; },\n/* harmony export */ processLock: function() { return /* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.processLock; }\n/* harmony export */ });\n/* harmony import */ var _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\");\n/* harmony import */ var _GoTrueClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GoTrueClient */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js\");\n/* harmony import */ var _AuthAdminApi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AuthAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js\");\n/* harmony import */ var _AuthClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AuthClient */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthClient.js\");\n/* harmony import */ var _lib_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/types */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js\");\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n/* harmony import */ var _lib_locks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/locks */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThDO0FBQ0o7QUFDQTtBQUNKO0FBQzRCO0FBQ3RDO0FBQ0M7QUFDMkY7QUFDeEgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL2luZGV4LmpzPzY2MTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEdvVHJ1ZUFkbWluQXBpIGZyb20gJy4vR29UcnVlQWRtaW5BcGknO1xyXG5pbXBvcnQgR29UcnVlQ2xpZW50IGZyb20gJy4vR29UcnVlQ2xpZW50JztcclxuaW1wb3J0IEF1dGhBZG1pbkFwaSBmcm9tICcuL0F1dGhBZG1pbkFwaSc7XHJcbmltcG9ydCBBdXRoQ2xpZW50IGZyb20gJy4vQXV0aENsaWVudCc7XHJcbmV4cG9ydCB7IEdvVHJ1ZUFkbWluQXBpLCBHb1RydWVDbGllbnQsIEF1dGhBZG1pbkFwaSwgQXV0aENsaWVudCB9O1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Vycm9ycyc7XHJcbmV4cG9ydCB7IG5hdmlnYXRvckxvY2ssIE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yLCBpbnRlcm5hbHMgYXMgbG9ja0ludGVybmFscywgcHJvY2Vzc0xvY2ssIH0gZnJvbSAnLi9saWIvbG9ja3MnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js": /*!*********************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/base64url.js ***! \*********************************************************************/ /***/ (function(__unused_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 */ base64UrlToUint8Array: function() { return /* binding */ base64UrlToUint8Array; },\n/* harmony export */ byteFromBase64URL: function() { return /* binding */ byteFromBase64URL; },\n/* harmony export */ byteToBase64URL: function() { return /* binding */ byteToBase64URL; },\n/* harmony export */ bytesToBase64URL: function() { return /* binding */ bytesToBase64URL; },\n/* harmony export */ codepointToUTF8: function() { return /* binding */ codepointToUTF8; },\n/* harmony export */ stringFromBase64URL: function() { return /* binding */ stringFromBase64URL; },\n/* harmony export */ stringFromUTF8: function() { return /* binding */ stringFromUTF8; },\n/* harmony export */ stringToBase64URL: function() { return /* binding */ stringToBase64URL; },\n/* harmony export */ stringToUTF8: function() { return /* binding */ stringToUTF8; },\n/* harmony export */ stringToUint8Array: function() { return /* binding */ stringToUint8Array; }\n/* harmony export */ });\n/**\r\n * Avoid modifying this file. It's part of\r\n * https://github.com/supabase-community/base64url-js. Submit all fixes on\r\n * that repo!\r\n */\r\n/**\r\n * An array of characters that encode 6 bits into a Base64-URL alphabet\r\n * character.\r\n */\r\nconst TO_BASE64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.split('');\r\n/**\r\n * An array of characters that can appear in a Base64-URL encoded string but\r\n * should be ignored.\r\n */\r\nconst IGNORE_BASE64URL = ' \\t\\n\\r='.split('');\r\n/**\r\n * An array of 128 numbers that map a Base64-URL character to 6 bits, or if -2\r\n * used to skip the character, or if -1 used to error out.\r\n */\r\nconst FROM_BASE64URL = (() => {\r\n const charMap = new Array(128);\r\n for (let i = 0; i < charMap.length; i += 1) {\r\n charMap[i] = -1;\r\n }\r\n for (let i = 0; i < IGNORE_BASE64URL.length; i += 1) {\r\n charMap[IGNORE_BASE64URL[i].charCodeAt(0)] = -2;\r\n }\r\n for (let i = 0; i < TO_BASE64URL.length; i += 1) {\r\n charMap[TO_BASE64URL[i].charCodeAt(0)] = i;\r\n }\r\n return charMap;\r\n})();\r\n/**\r\n * Converts a byte to a Base64-URL string.\r\n *\r\n * @param byte The byte to convert, or null to flush at the end of the byte sequence.\r\n * @param state The Base64 conversion state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\r\n * @param emit A function called with the next Base64 character when ready.\r\n */\r\nfunction byteToBase64URL(byte, state, emit) {\r\n if (byte !== null) {\r\n state.queue = (state.queue << 8) | byte;\r\n state.queuedBits += 8;\r\n while (state.queuedBits >= 6) {\r\n const pos = (state.queue >> (state.queuedBits - 6)) & 63;\r\n emit(TO_BASE64URL[pos]);\r\n state.queuedBits -= 6;\r\n }\r\n }\r\n else if (state.queuedBits > 0) {\r\n state.queue = state.queue << (6 - state.queuedBits);\r\n state.queuedBits = 6;\r\n while (state.queuedBits >= 6) {\r\n const pos = (state.queue >> (state.queuedBits - 6)) & 63;\r\n emit(TO_BASE64URL[pos]);\r\n state.queuedBits -= 6;\r\n }\r\n }\r\n}\r\n/**\r\n * Converts a String char code (extracted using `string.charCodeAt(position)`) to a sequence of Base64-URL characters.\r\n *\r\n * @param charCode The char code of the JavaScript string.\r\n * @param state The Base64 state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\r\n * @param emit A function called with the next byte.\r\n */\r\nfunction byteFromBase64URL(charCode, state, emit) {\r\n const bits = FROM_BASE64URL[charCode];\r\n if (bits > -1) {\r\n // valid Base64-URL character\r\n state.queue = (state.queue << 6) | bits;\r\n state.queuedBits += 6;\r\n while (state.queuedBits >= 8) {\r\n emit((state.queue >> (state.queuedBits - 8)) & 0xff);\r\n state.queuedBits -= 8;\r\n }\r\n }\r\n else if (bits === -2) {\r\n // ignore spaces, tabs, newlines, =\r\n return;\r\n }\r\n else {\r\n throw new Error(`Invalid Base64-URL character \"${String.fromCharCode(charCode)}\"`);\r\n }\r\n}\r\n/**\r\n * Converts a JavaScript string (which may include any valid character) into a\r\n * Base64-URL encoded string. The string is first encoded in UTF-8 which is\r\n * then encoded as Base64-URL.\r\n *\r\n * @param str The string to convert.\r\n */\r\nfunction stringToBase64URL(str) {\r\n const base64 = [];\r\n const emitter = (char) => {\r\n base64.push(char);\r\n };\r\n const state = { queue: 0, queuedBits: 0 };\r\n stringToUTF8(str, (byte) => {\r\n byteToBase64URL(byte, state, emitter);\r\n });\r\n byteToBase64URL(null, state, emitter);\r\n return base64.join('');\r\n}\r\n/**\r\n * Converts a Base64-URL encoded string into a JavaScript string. It is assumed\r\n * that the underlying string has been encoded as UTF-8.\r\n *\r\n * @param str The Base64-URL encoded string.\r\n */\r\nfunction stringFromBase64URL(str) {\r\n const conv = [];\r\n const utf8Emit = (codepoint) => {\r\n conv.push(String.fromCodePoint(codepoint));\r\n };\r\n const utf8State = {\r\n utf8seq: 0,\r\n codepoint: 0,\r\n };\r\n const b64State = { queue: 0, queuedBits: 0 };\r\n const byteEmit = (byte) => {\r\n stringFromUTF8(byte, utf8State, utf8Emit);\r\n };\r\n for (let i = 0; i < str.length; i += 1) {\r\n byteFromBase64URL(str.charCodeAt(i), b64State, byteEmit);\r\n }\r\n return conv.join('');\r\n}\r\n/**\r\n * Converts a Unicode codepoint to a multi-byte UTF-8 sequence.\r\n *\r\n * @param codepoint The Unicode codepoint.\r\n * @param emit Function which will be called for each UTF-8 byte that represents the codepoint.\r\n */\r\nfunction codepointToUTF8(codepoint, emit) {\r\n if (codepoint <= 0x7f) {\r\n emit(codepoint);\r\n return;\r\n }\r\n else if (codepoint <= 0x7ff) {\r\n emit(0xc0 | (codepoint >> 6));\r\n emit(0x80 | (codepoint & 0x3f));\r\n return;\r\n }\r\n else if (codepoint <= 0xffff) {\r\n emit(0xe0 | (codepoint >> 12));\r\n emit(0x80 | ((codepoint >> 6) & 0x3f));\r\n emit(0x80 | (codepoint & 0x3f));\r\n return;\r\n }\r\n else if (codepoint <= 0x10ffff) {\r\n emit(0xf0 | (codepoint >> 18));\r\n emit(0x80 | ((codepoint >> 12) & 0x3f));\r\n emit(0x80 | ((codepoint >> 6) & 0x3f));\r\n emit(0x80 | (codepoint & 0x3f));\r\n return;\r\n }\r\n throw new Error(`Unrecognized Unicode codepoint: ${codepoint.toString(16)}`);\r\n}\r\n/**\r\n * Converts a JavaScript string to a sequence of UTF-8 bytes.\r\n *\r\n * @param str The string to convert to UTF-8.\r\n * @param emit Function which will be called for each UTF-8 byte of the string.\r\n */\r\nfunction stringToUTF8(str, emit) {\r\n for (let i = 0; i < str.length; i += 1) {\r\n let codepoint = str.charCodeAt(i);\r\n if (codepoint > 0xd7ff && codepoint <= 0xdbff) {\r\n // most UTF-16 codepoints are Unicode codepoints, except values in this\r\n // range where the next UTF-16 codepoint needs to be combined with the\r\n // current one to get the Unicode codepoint\r\n const highSurrogate = ((codepoint - 0xd800) * 0x400) & 0xffff;\r\n const lowSurrogate = (str.charCodeAt(i + 1) - 0xdc00) & 0xffff;\r\n codepoint = (lowSurrogate | highSurrogate) + 0x10000;\r\n i += 1;\r\n }\r\n codepointToUTF8(codepoint, emit);\r\n }\r\n}\r\n/**\r\n * Converts a UTF-8 byte to a Unicode codepoint.\r\n *\r\n * @param byte The UTF-8 byte next in the sequence.\r\n * @param state The shared state between consecutive UTF-8 bytes in the\r\n * sequence, an object with the shape `{ utf8seq: 0, codepoint: 0 }`.\r\n * @param emit Function which will be called for each codepoint.\r\n */\r\nfunction stringFromUTF8(byte, state, emit) {\r\n if (state.utf8seq === 0) {\r\n if (byte <= 0x7f) {\r\n emit(byte);\r\n return;\r\n }\r\n // count the number of 1 leading bits until you reach 0\r\n for (let leadingBit = 1; leadingBit < 6; leadingBit += 1) {\r\n if (((byte >> (7 - leadingBit)) & 1) === 0) {\r\n state.utf8seq = leadingBit;\r\n break;\r\n }\r\n }\r\n if (state.utf8seq === 2) {\r\n state.codepoint = byte & 31;\r\n }\r\n else if (state.utf8seq === 3) {\r\n state.codepoint = byte & 15;\r\n }\r\n else if (state.utf8seq === 4) {\r\n state.codepoint = byte & 7;\r\n }\r\n else {\r\n throw new Error('Invalid UTF-8 sequence');\r\n }\r\n state.utf8seq -= 1;\r\n }\r\n else if (state.utf8seq > 0) {\r\n if (byte <= 0x7f) {\r\n throw new Error('Invalid UTF-8 sequence');\r\n }\r\n state.codepoint = (state.codepoint << 6) | (byte & 63);\r\n state.utf8seq -= 1;\r\n if (state.utf8seq === 0) {\r\n emit(state.codepoint);\r\n }\r\n }\r\n}\r\n/**\r\n * Helper functions to convert different types of strings to Uint8Array\r\n */\r\nfunction base64UrlToUint8Array(str) {\r\n const result = [];\r\n const state = { queue: 0, queuedBits: 0 };\r\n const onByte = (byte) => {\r\n result.push(byte);\r\n };\r\n for (let i = 0; i < str.length; i += 1) {\r\n byteFromBase64URL(str.charCodeAt(i), state, onByte);\r\n }\r\n return new Uint8Array(result);\r\n}\r\nfunction stringToUint8Array(str) {\r\n const result = [];\r\n stringToUTF8(str, (byte) => result.push(byte));\r\n return new Uint8Array(result);\r\n}\r\nfunction bytesToBase64URL(bytes) {\r\n const result = [];\r\n const state = { queue: 0, queuedBits: 0 };\r\n const onChar = (char) => {\r\n result.push(char);\r\n };\r\n bytes.forEach((byte) => byteToBase64URL(byte, state, onChar));\r\n // always call with `null` after processing all bytes\r\n byteToBase64URL(null, state, onChar);\r\n return result.join('');\r\n}\r\n//# sourceMappingURL=base64url.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvYmFzZTY0dXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQSxvQkFBb0IsNkJBQTZCO0FBQ2pEO0FBQ0E7QUFDQSxvQkFBb0IseUJBQXlCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSx5QkFBeUI7QUFDbEc7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCx5QkFBeUI7QUFDdkY7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELDhCQUE4QjtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELHVCQUF1QjtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1Asb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsMEJBQTBCO0FBQ2hGO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxnQkFBZ0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvYmFzZTY0dXJsLmpzP2Q3OTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEF2b2lkIG1vZGlmeWluZyB0aGlzIGZpbGUuIEl0J3MgcGFydCBvZlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UtY29tbXVuaXR5L2Jhc2U2NHVybC1qcy4gIFN1Ym1pdCBhbGwgZml4ZXMgb25cclxuICogdGhhdCByZXBvIVxyXG4gKi9cclxuLyoqXHJcbiAqIEFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBlbmNvZGUgNiBiaXRzIGludG8gYSBCYXNlNjQtVVJMIGFscGhhYmV0XHJcbiAqIGNoYXJhY3Rlci5cclxuICovXHJcbmNvbnN0IFRPX0JBU0U2NFVSTCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJy5zcGxpdCgnJyk7XHJcbi8qKlxyXG4gKiBBbiBhcnJheSBvZiBjaGFyYWN0ZXJzIHRoYXQgY2FuIGFwcGVhciBpbiBhIEJhc2U2NC1VUkwgZW5jb2RlZCBzdHJpbmcgYnV0XHJcbiAqIHNob3VsZCBiZSBpZ25vcmVkLlxyXG4gKi9cclxuY29uc3QgSUdOT1JFX0JBU0U2NFVSTCA9ICcgXFx0XFxuXFxyPScuc3BsaXQoJycpO1xyXG4vKipcclxuICogQW4gYXJyYXkgb2YgMTI4IG51bWJlcnMgdGhhdCBtYXAgYSBCYXNlNjQtVVJMIGNoYXJhY3RlciB0byA2IGJpdHMsIG9yIGlmIC0yXHJcbiAqIHVzZWQgdG8gc2tpcCB0aGUgY2hhcmFjdGVyLCBvciBpZiAtMSB1c2VkIHRvIGVycm9yIG91dC5cclxuICovXHJcbmNvbnN0IEZST01fQkFTRTY0VVJMID0gKCgpID0+IHtcclxuICAgIGNvbnN0IGNoYXJNYXAgPSBuZXcgQXJyYXkoMTI4KTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhck1hcC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGNoYXJNYXBbaV0gPSAtMTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSUdOT1JFX0JBU0U2NFVSTC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGNoYXJNYXBbSUdOT1JFX0JBU0U2NFVSTFtpXS5jaGFyQ29kZUF0KDApXSA9IC0yO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBUT19CQVNFNjRVUkwubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBjaGFyTWFwW1RPX0JBU0U2NFVSTFtpXS5jaGFyQ29kZUF0KDApXSA9IGk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hhck1hcDtcclxufSkoKTtcclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgYnl0ZSB0byBhIEJhc2U2NC1VUkwgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gYnl0ZSBUaGUgYnl0ZSB0byBjb252ZXJ0LCBvciBudWxsIHRvIGZsdXNoIGF0IHRoZSBlbmQgb2YgdGhlIGJ5dGUgc2VxdWVuY2UuXHJcbiAqIEBwYXJhbSBzdGF0ZSBUaGUgQmFzZTY0IGNvbnZlcnNpb24gc3RhdGUuIFBhc3MgYW4gaW5pdGlhbCB2YWx1ZSBvZiBgeyBxdWV1ZTogMCwgcXVldWVkQml0czogMCB9YC5cclxuICogQHBhcmFtIGVtaXQgQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCB0aGUgbmV4dCBCYXNlNjQgY2hhcmFjdGVyIHdoZW4gcmVhZHkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYnl0ZVRvQmFzZTY0VVJMKGJ5dGUsIHN0YXRlLCBlbWl0KSB7XHJcbiAgICBpZiAoYnl0ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHN0YXRlLnF1ZXVlID0gKHN0YXRlLnF1ZXVlIDw8IDgpIHwgYnl0ZTtcclxuICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzICs9IDg7XHJcbiAgICAgICAgd2hpbGUgKHN0YXRlLnF1ZXVlZEJpdHMgPj0gNikge1xyXG4gICAgICAgICAgICBjb25zdCBwb3MgPSAoc3RhdGUucXVldWUgPj4gKHN0YXRlLnF1ZXVlZEJpdHMgLSA2KSkgJiA2MztcclxuICAgICAgICAgICAgZW1pdChUT19CQVNFNjRVUkxbcG9zXSk7XHJcbiAgICAgICAgICAgIHN0YXRlLnF1ZXVlZEJpdHMgLT0gNjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzdGF0ZS5xdWV1ZWRCaXRzID4gMCkge1xyXG4gICAgICAgIHN0YXRlLnF1ZXVlID0gc3RhdGUucXVldWUgPDwgKDYgLSBzdGF0ZS5xdWV1ZWRCaXRzKTtcclxuICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzID0gNjtcclxuICAgICAgICB3aGlsZSAoc3RhdGUucXVldWVkQml0cyA+PSA2KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IChzdGF0ZS5xdWV1ZSA+PiAoc3RhdGUucXVldWVkQml0cyAtIDYpKSAmIDYzO1xyXG4gICAgICAgICAgICBlbWl0KFRPX0JBU0U2NFVSTFtwb3NdKTtcclxuICAgICAgICAgICAgc3RhdGUucXVldWVkQml0cyAtPSA2O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydHMgYSBTdHJpbmcgY2hhciBjb2RlIChleHRyYWN0ZWQgdXNpbmcgYHN0cmluZy5jaGFyQ29kZUF0KHBvc2l0aW9uKWApIHRvIGEgc2VxdWVuY2Ugb2YgQmFzZTY0LVVSTCBjaGFyYWN0ZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2hhckNvZGUgVGhlIGNoYXIgY29kZSBvZiB0aGUgSmF2YVNjcmlwdCBzdHJpbmcuXHJcbiAqIEBwYXJhbSBzdGF0ZSBUaGUgQmFzZTY0IHN0YXRlLiBQYXNzIGFuIGluaXRpYWwgdmFsdWUgb2YgYHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfWAuXHJcbiAqIEBwYXJhbSBlbWl0IEEgZnVuY3Rpb24gY2FsbGVkIHdpdGggdGhlIG5leHQgYnl0ZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBieXRlRnJvbUJhc2U2NFVSTChjaGFyQ29kZSwgc3RhdGUsIGVtaXQpIHtcclxuICAgIGNvbnN0IGJpdHMgPSBGUk9NX0JBU0U2NFVSTFtjaGFyQ29kZV07XHJcbiAgICBpZiAoYml0cyA+IC0xKSB7XHJcbiAgICAgICAgLy8gdmFsaWQgQmFzZTY0LVVSTCBjaGFyYWN0ZXJcclxuICAgICAgICBzdGF0ZS5xdWV1ZSA9IChzdGF0ZS5xdWV1ZSA8PCA2KSB8IGJpdHM7XHJcbiAgICAgICAgc3RhdGUucXVldWVkQml0cyArPSA2O1xyXG4gICAgICAgIHdoaWxlIChzdGF0ZS5xdWV1ZWRCaXRzID49IDgpIHtcclxuICAgICAgICAgICAgZW1pdCgoc3RhdGUucXVldWUgPj4gKHN0YXRlLnF1ZXVlZEJpdHMgLSA4KSkgJiAweGZmKTtcclxuICAgICAgICAgICAgc3RhdGUucXVldWVkQml0cyAtPSA4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGJpdHMgPT09IC0yKSB7XHJcbiAgICAgICAgLy8gaWdub3JlIHNwYWNlcywgdGFicywgbmV3bGluZXMsID1cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgQmFzZTY0LVVSTCBjaGFyYWN0ZXIgXCIke1N0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpfVwiYCk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBzdHJpbmcgKHdoaWNoIG1heSBpbmNsdWRlIGFueSB2YWxpZCBjaGFyYWN0ZXIpIGludG8gYVxyXG4gKiBCYXNlNjQtVVJMIGVuY29kZWQgc3RyaW5nLiBUaGUgc3RyaW5nIGlzIGZpcnN0IGVuY29kZWQgaW4gVVRGLTggd2hpY2ggaXNcclxuICogdGhlbiBlbmNvZGVkIGFzIEJhc2U2NC1VUkwuXHJcbiAqXHJcbiAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0VVJMKHN0cikge1xyXG4gICAgY29uc3QgYmFzZTY0ID0gW107XHJcbiAgICBjb25zdCBlbWl0dGVyID0gKGNoYXIpID0+IHtcclxuICAgICAgICBiYXNlNjQucHVzaChjaGFyKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBzdGF0ZSA9IHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfTtcclxuICAgIHN0cmluZ1RvVVRGOChzdHIsIChieXRlKSA9PiB7XHJcbiAgICAgICAgYnl0ZVRvQmFzZTY0VVJMKGJ5dGUsIHN0YXRlLCBlbWl0dGVyKTtcclxuICAgIH0pO1xyXG4gICAgYnl0ZVRvQmFzZTY0VVJMKG51bGwsIHN0YXRlLCBlbWl0dGVyKTtcclxuICAgIHJldHVybiBiYXNlNjQuam9pbignJyk7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBzdHJpbmcuIEl0IGlzIGFzc3VtZWRcclxuICogdGhhdCB0aGUgdW5kZXJseWluZyBzdHJpbmcgaGFzIGJlZW4gZW5jb2RlZCBhcyBVVEYtOC5cclxuICpcclxuICogQHBhcmFtIHN0ciBUaGUgQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdGcm9tQmFzZTY0VVJMKHN0cikge1xyXG4gICAgY29uc3QgY29udiA9IFtdO1xyXG4gICAgY29uc3QgdXRmOEVtaXQgPSAoY29kZXBvaW50KSA9PiB7XHJcbiAgICAgICAgY29udi5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVwb2ludCkpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHV0ZjhTdGF0ZSA9IHtcclxuICAgICAgICB1dGY4c2VxOiAwLFxyXG4gICAgICAgIGNvZGVwb2ludDogMCxcclxuICAgIH07XHJcbiAgICBjb25zdCBiNjRTdGF0ZSA9IHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfTtcclxuICAgIGNvbnN0IGJ5dGVFbWl0ID0gKGJ5dGUpID0+IHtcclxuICAgICAgICBzdHJpbmdGcm9tVVRGOChieXRlLCB1dGY4U3RhdGUsIHV0ZjhFbWl0KTtcclxuICAgIH07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGJ5dGVGcm9tQmFzZTY0VVJMKHN0ci5jaGFyQ29kZUF0KGkpLCBiNjRTdGF0ZSwgYnl0ZUVtaXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnYuam9pbignJyk7XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBjb2RlcG9pbnQgdG8gYSBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29kZXBvaW50IFRoZSBVbmljb2RlIGNvZGVwb2ludC5cclxuICogQHBhcmFtIGVtaXQgICAgICBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBVVEYtOCBieXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgY29kZXBvaW50LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNvZGVwb2ludFRvVVRGOChjb2RlcG9pbnQsIGVtaXQpIHtcclxuICAgIGlmIChjb2RlcG9pbnQgPD0gMHg3Zikge1xyXG4gICAgICAgIGVtaXQoY29kZXBvaW50KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHg3ZmYpIHtcclxuICAgICAgICBlbWl0KDB4YzAgfCAoY29kZXBvaW50ID4+IDYpKTtcclxuICAgICAgICBlbWl0KDB4ODAgfCAoY29kZXBvaW50ICYgMHgzZikpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvZGVwb2ludCA8PSAweGZmZmYpIHtcclxuICAgICAgICBlbWl0KDB4ZTAgfCAoY29kZXBvaW50ID4+IDEyKSk7XHJcbiAgICAgICAgZW1pdCgweDgwIHwgKChjb2RlcG9pbnQgPj4gNikgJiAweDNmKSk7XHJcbiAgICAgICAgZW1pdCgweDgwIHwgKGNvZGVwb2ludCAmIDB4M2YpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHgxMGZmZmYpIHtcclxuICAgICAgICBlbWl0KDB4ZjAgfCAoY29kZXBvaW50ID4+IDE4KSk7XHJcbiAgICAgICAgZW1pdCgweDgwIHwgKChjb2RlcG9pbnQgPj4gMTIpICYgMHgzZikpO1xyXG4gICAgICAgIGVtaXQoMHg4MCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgzZikpO1xyXG4gICAgICAgIGVtaXQoMHg4MCB8IChjb2RlcG9pbnQgJiAweDNmKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgVW5pY29kZSBjb2RlcG9pbnQ6ICR7Y29kZXBvaW50LnRvU3RyaW5nKDE2KX1gKTtcclxufVxyXG4vKipcclxuICogQ29udmVydHMgYSBKYXZhU2NyaXB0IHN0cmluZyB0byBhIHNlcXVlbmNlIG9mIFVURi04IGJ5dGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gc3RyICBUaGUgc3RyaW5nIHRvIGNvbnZlcnQgdG8gVVRGLTguXHJcbiAqIEBwYXJhbSBlbWl0IEZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIFVURi04IGJ5dGUgb2YgdGhlIHN0cmluZy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBlbWl0KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGxldCBjb2RlcG9pbnQgPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoY29kZXBvaW50ID4gMHhkN2ZmICYmIGNvZGVwb2ludCA8PSAweGRiZmYpIHtcclxuICAgICAgICAgICAgLy8gbW9zdCBVVEYtMTYgY29kZXBvaW50cyBhcmUgVW5pY29kZSBjb2RlcG9pbnRzLCBleGNlcHQgdmFsdWVzIGluIHRoaXNcclxuICAgICAgICAgICAgLy8gcmFuZ2Ugd2hlcmUgdGhlIG5leHQgVVRGLTE2IGNvZGVwb2ludCBuZWVkcyB0byBiZSBjb21iaW5lZCB3aXRoIHRoZVxyXG4gICAgICAgICAgICAvLyBjdXJyZW50IG9uZSB0byBnZXQgdGhlIFVuaWNvZGUgY29kZXBvaW50XHJcbiAgICAgICAgICAgIGNvbnN0IGhpZ2hTdXJyb2dhdGUgPSAoKGNvZGVwb2ludCAtIDB4ZDgwMCkgKiAweDQwMCkgJiAweGZmZmY7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvd1N1cnJvZ2F0ZSA9IChzdHIuY2hhckNvZGVBdChpICsgMSkgLSAweGRjMDApICYgMHhmZmZmO1xyXG4gICAgICAgICAgICBjb2RlcG9pbnQgPSAobG93U3Vycm9nYXRlIHwgaGlnaFN1cnJvZ2F0ZSkgKyAweDEwMDAwO1xyXG4gICAgICAgICAgICBpICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvZGVwb2ludFRvVVRGOChjb2RlcG9pbnQsIGVtaXQpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIFVURi04IGJ5dGUgdG8gYSBVbmljb2RlIGNvZGVwb2ludC5cclxuICpcclxuICogQHBhcmFtIGJ5dGUgIFRoZSBVVEYtOCBieXRlIG5leHQgaW4gdGhlIHNlcXVlbmNlLlxyXG4gKiBAcGFyYW0gc3RhdGUgVGhlIHNoYXJlZCBzdGF0ZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIFVURi04IGJ5dGVzIGluIHRoZVxyXG4gKiAgICAgICAgICAgICAgc2VxdWVuY2UsIGFuIG9iamVjdCB3aXRoIHRoZSBzaGFwZSBgeyB1dGY4c2VxOiAwLCBjb2RlcG9pbnQ6IDAgfWAuXHJcbiAqIEBwYXJhbSBlbWl0ICBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBjb2RlcG9pbnQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRnJvbVVURjgoYnl0ZSwgc3RhdGUsIGVtaXQpIHtcclxuICAgIGlmIChzdGF0ZS51dGY4c2VxID09PSAwKSB7XHJcbiAgICAgICAgaWYgKGJ5dGUgPD0gMHg3Zikge1xyXG4gICAgICAgICAgICBlbWl0KGJ5dGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgMSBsZWFkaW5nIGJpdHMgdW50aWwgeW91IHJlYWNoIDBcclxuICAgICAgICBmb3IgKGxldCBsZWFkaW5nQml0ID0gMTsgbGVhZGluZ0JpdCA8IDY7IGxlYWRpbmdCaXQgKz0gMSkge1xyXG4gICAgICAgICAgICBpZiAoKChieXRlID4+ICg3IC0gbGVhZGluZ0JpdCkpICYgMSkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlLnV0ZjhzZXEgPSBsZWFkaW5nQml0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXRlLnV0ZjhzZXEgPT09IDIpIHtcclxuICAgICAgICAgICAgc3RhdGUuY29kZXBvaW50ID0gYnl0ZSAmIDMxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzdGF0ZS51dGY4c2VxID09PSAzKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmNvZGVwb2ludCA9IGJ5dGUgJiAxNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RhdGUudXRmOHNlcSA9PT0gNCkge1xyXG4gICAgICAgICAgICBzdGF0ZS5jb2RlcG9pbnQgPSBieXRlICYgNztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVVEYtOCBzZXF1ZW5jZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS51dGY4c2VxIC09IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzdGF0ZS51dGY4c2VxID4gMCkge1xyXG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVURi04IHNlcXVlbmNlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmNvZGVwb2ludCA9IChzdGF0ZS5jb2RlcG9pbnQgPDwgNikgfCAoYnl0ZSAmIDYzKTtcclxuICAgICAgICBzdGF0ZS51dGY4c2VxIC09IDE7XHJcbiAgICAgICAgaWYgKHN0YXRlLnV0ZjhzZXEgPT09IDApIHtcclxuICAgICAgICAgICAgZW1pdChzdGF0ZS5jb2RlcG9pbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogSGVscGVyIGZ1bmN0aW9ucyB0byBjb252ZXJ0IGRpZmZlcmVudCB0eXBlcyBvZiBzdHJpbmdzIHRvIFVpbnQ4QXJyYXlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRVcmxUb1VpbnQ4QXJyYXkoc3RyKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgIGNvbnN0IHN0YXRlID0geyBxdWV1ZTogMCwgcXVldWVkQml0czogMCB9O1xyXG4gICAgY29uc3Qgb25CeXRlID0gKGJ5dGUpID0+IHtcclxuICAgICAgICByZXN1bHQucHVzaChieXRlKTtcclxuICAgIH07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGJ5dGVGcm9tQmFzZTY0VVJMKHN0ci5jaGFyQ29kZUF0KGkpLCBzdGF0ZSwgb25CeXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb1VpbnQ4QXJyYXkoc3RyKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgIHN0cmluZ1RvVVRGOChzdHIsIChieXRlKSA9PiByZXN1bHQucHVzaChieXRlKSk7XHJcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnl0ZXNUb0Jhc2U2NFVSTChieXRlcykge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICBjb25zdCBzdGF0ZSA9IHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfTtcclxuICAgIGNvbnN0IG9uQ2hhciA9IChjaGFyKSA9PiB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY2hhcik7XHJcbiAgICB9O1xyXG4gICAgYnl0ZXMuZm9yRWFjaCgoYnl0ZSkgPT4gYnl0ZVRvQmFzZTY0VVJMKGJ5dGUsIHN0YXRlLCBvbkNoYXIpKTtcclxuICAgIC8vIGFsd2F5cyBjYWxsIHdpdGggYG51bGxgIGFmdGVyIHByb2Nlc3NpbmcgYWxsIGJ5dGVzXHJcbiAgICBieXRlVG9CYXNlNjRVUkwobnVsbCwgc3RhdGUsIG9uQ2hhcik7XHJcbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpO1xyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2U2NHVybC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js": /*!*********************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/constants.js ***! \*********************************************************************/ /***/ (function(__unused_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 */ API_VERSIONS: function() { return /* binding */ API_VERSIONS; },\n/* harmony export */ API_VERSION_HEADER_NAME: function() { return /* binding */ API_VERSION_HEADER_NAME; },\n/* harmony export */ AUDIENCE: function() { return /* binding */ AUDIENCE; },\n/* harmony export */ AUTO_REFRESH_TICK_DURATION_MS: function() { return /* binding */ AUTO_REFRESH_TICK_DURATION_MS; },\n/* harmony export */ AUTO_REFRESH_TICK_THRESHOLD: function() { return /* binding */ AUTO_REFRESH_TICK_THRESHOLD; },\n/* harmony export */ BASE64URL_REGEX: function() { return /* binding */ BASE64URL_REGEX; },\n/* harmony export */ DEFAULT_HEADERS: function() { return /* binding */ DEFAULT_HEADERS; },\n/* harmony export */ EXPIRY_MARGIN_MS: function() { return /* binding */ EXPIRY_MARGIN_MS; },\n/* harmony export */ GOTRUE_URL: function() { return /* binding */ GOTRUE_URL; },\n/* harmony export */ JWKS_TTL: function() { return /* binding */ JWKS_TTL; },\n/* harmony export */ NETWORK_FAILURE: function() { return /* binding */ NETWORK_FAILURE; },\n/* harmony export */ STORAGE_KEY: function() { return /* binding */ STORAGE_KEY; }\n/* harmony export */ });\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js\");\n\r\n/** Current session will be checked for refresh at this interval. */\r\nconst AUTO_REFRESH_TICK_DURATION_MS = 30 * 1000;\r\n/**\r\n * A token refresh will be attempted this many ticks before the current session expires. */\r\nconst AUTO_REFRESH_TICK_THRESHOLD = 3;\r\n/*\r\n * Earliest time before an access token expires that the session should be refreshed.\r\n */\r\nconst EXPIRY_MARGIN_MS = AUTO_REFRESH_TICK_THRESHOLD * AUTO_REFRESH_TICK_DURATION_MS;\r\nconst GOTRUE_URL = 'http://localhost:9999';\r\nconst STORAGE_KEY = 'supabase.auth.token';\r\nconst AUDIENCE = '';\r\nconst DEFAULT_HEADERS = { 'X-Client-Info': `gotrue-js/${_version__WEBPACK_IMPORTED_MODULE_0__.version}` };\r\nconst NETWORK_FAILURE = {\r\n MAX_RETRIES: 10,\r\n RETRY_INTERVAL: 2, // in deciseconds\r\n};\r\nconst API_VERSION_HEADER_NAME = 'X-Supabase-Api-Version';\r\nconst API_VERSIONS = {\r\n '2024-01-01': {\r\n timestamp: Date.parse('2024-01-01T00:00:00.0Z'),\r\n name: '2024-01-01',\r\n },\r\n};\r\nconst BASE64URL_REGEX = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i;\r\nconst JWKS_TTL = 10 * 60 * 1000; // 10 minutes\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb0M7QUFDcEM7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDhCQUE4Qiw2Q0FBTyxDQUFDO0FBQ2hFO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNPLHNDQUFzQyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRTtBQUN6RSxpQ0FBaUM7QUFDeEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL2xpYi9jb25zdGFudHMuanM/MWJhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcclxuLyoqIEN1cnJlbnQgc2Vzc2lvbiB3aWxsIGJlIGNoZWNrZWQgZm9yIHJlZnJlc2ggYXQgdGhpcyBpbnRlcnZhbC4gKi9cclxuZXhwb3J0IGNvbnN0IEFVVE9fUkVGUkVTSF9USUNLX0RVUkFUSU9OX01TID0gMzAgKiAxMDAwO1xyXG4vKipcclxuICogQSB0b2tlbiByZWZyZXNoIHdpbGwgYmUgYXR0ZW1wdGVkIHRoaXMgbWFueSB0aWNrcyBiZWZvcmUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBleHBpcmVzLiAqL1xyXG5leHBvcnQgY29uc3QgQVVUT19SRUZSRVNIX1RJQ0tfVEhSRVNIT0xEID0gMztcclxuLypcclxuICogRWFybGllc3QgdGltZSBiZWZvcmUgYW4gYWNjZXNzIHRva2VuIGV4cGlyZXMgdGhhdCB0aGUgc2Vzc2lvbiBzaG91bGQgYmUgcmVmcmVzaGVkLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEVYUElSWV9NQVJHSU5fTVMgPSBBVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTEQgKiBBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUztcclxuZXhwb3J0IGNvbnN0IEdPVFJVRV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo5OTk5JztcclxuZXhwb3J0IGNvbnN0IFNUT1JBR0VfS0VZID0gJ3N1cGFiYXNlLmF1dGgudG9rZW4nO1xyXG5leHBvcnQgY29uc3QgQVVESUVOQ0UgPSAnJztcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVBREVSUyA9IHsgJ1gtQ2xpZW50LUluZm8nOiBgZ290cnVlLWpzLyR7dmVyc2lvbn1gIH07XHJcbmV4cG9ydCBjb25zdCBORVRXT1JLX0ZBSUxVUkUgPSB7XHJcbiAgICBNQVhfUkVUUklFUzogMTAsXHJcbiAgICBSRVRSWV9JTlRFUlZBTDogMiwgLy8gaW4gZGVjaXNlY29uZHNcclxufTtcclxuZXhwb3J0IGNvbnN0IEFQSV9WRVJTSU9OX0hFQURFUl9OQU1FID0gJ1gtU3VwYWJhc2UtQXBpLVZlcnNpb24nO1xyXG5leHBvcnQgY29uc3QgQVBJX1ZFUlNJT05TID0ge1xyXG4gICAgJzIwMjQtMDEtMDEnOiB7XHJcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLnBhcnNlKCcyMDI0LTAxLTAxVDAwOjAwOjAwLjBaJyksXHJcbiAgICAgICAgbmFtZTogJzIwMjQtMDEtMDEnLFxyXG4gICAgfSxcclxufTtcclxuZXhwb3J0IGNvbnN0IEJBU0U2NFVSTF9SRUdFWCA9IC9eKFthLXowLTlfLV17NH0pKigkfFthLXowLTlfLV17M30kfFthLXowLTlfLV17Mn0kKSQvaTtcclxuZXhwb3J0IGNvbnN0IEpXS1NfVFRMID0gMTAgKiA2MCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXNcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js": /*!******************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/errors.js ***! \******************************************************************/ /***/ (function(__unused_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 */ AuthApiError: function() { return /* binding */ AuthApiError; },\n/* harmony export */ AuthError: function() { return /* binding */ AuthError; },\n/* harmony export */ AuthImplicitGrantRedirectError: function() { return /* binding */ AuthImplicitGrantRedirectError; },\n/* harmony export */ AuthInvalidCredentialsError: function() { return /* binding */ AuthInvalidCredentialsError; },\n/* harmony export */ AuthInvalidJwtError: function() { return /* binding */ AuthInvalidJwtError; },\n/* harmony export */ AuthInvalidTokenResponseError: function() { return /* binding */ AuthInvalidTokenResponseError; },\n/* harmony export */ AuthPKCEGrantCodeExchangeError: function() { return /* binding */ AuthPKCEGrantCodeExchangeError; },\n/* harmony export */ AuthRetryableFetchError: function() { return /* binding */ AuthRetryableFetchError; },\n/* harmony export */ AuthSessionMissingError: function() { return /* binding */ AuthSessionMissingError; },\n/* harmony export */ AuthUnknownError: function() { return /* binding */ AuthUnknownError; },\n/* harmony export */ AuthWeakPasswordError: function() { return /* binding */ AuthWeakPasswordError; },\n/* harmony export */ CustomAuthError: function() { return /* binding */ CustomAuthError; },\n/* harmony export */ isAuthApiError: function() { return /* binding */ isAuthApiError; },\n/* harmony export */ isAuthError: function() { return /* binding */ isAuthError; },\n/* harmony export */ isAuthImplicitGrantRedirectError: function() { return /* binding */ isAuthImplicitGrantRedirectError; },\n/* harmony export */ isAuthRetryableFetchError: function() { return /* binding */ isAuthRetryableFetchError; },\n/* harmony export */ isAuthSessionMissingError: function() { return /* binding */ isAuthSessionMissingError; },\n/* harmony export */ isAuthWeakPasswordError: function() { return /* binding */ isAuthWeakPasswordError; }\n/* harmony export */ });\nclass AuthError extends Error {\r\n constructor(message, status, code) {\r\n super(message);\r\n this.__isAuthError = true;\r\n this.name = 'AuthError';\r\n this.status = status;\r\n this.code = code;\r\n }\r\n}\r\nfunction isAuthError(error) {\r\n return typeof error === 'object' && error !== null && '__isAuthError' in error;\r\n}\r\nclass AuthApiError extends AuthError {\r\n constructor(message, status, code) {\r\n super(message, status, code);\r\n this.name = 'AuthApiError';\r\n this.status = status;\r\n this.code = code;\r\n }\r\n}\r\nfunction isAuthApiError(error) {\r\n return isAuthError(error) && error.name === 'AuthApiError';\r\n}\r\nclass AuthUnknownError extends AuthError {\r\n constructor(message, originalError) {\r\n super(message);\r\n this.name = 'AuthUnknownError';\r\n this.originalError = originalError;\r\n }\r\n}\r\nclass CustomAuthError extends AuthError {\r\n constructor(message, name, status, code) {\r\n super(message, status, code);\r\n this.name = name;\r\n this.status = status;\r\n }\r\n}\r\nclass AuthSessionMissingError extends CustomAuthError {\r\n constructor() {\r\n super('Auth session missing!', 'AuthSessionMissingError', 400, undefined);\r\n }\r\n}\r\nfunction isAuthSessionMissingError(error) {\r\n return isAuthError(error) && error.name === 'AuthSessionMissingError';\r\n}\r\nclass AuthInvalidTokenResponseError extends CustomAuthError {\r\n constructor() {\r\n super('Auth session or user missing', 'AuthInvalidTokenResponseError', 500, undefined);\r\n }\r\n}\r\nclass AuthInvalidCredentialsError extends CustomAuthError {\r\n constructor(message) {\r\n super(message, 'AuthInvalidCredentialsError', 400, undefined);\r\n }\r\n}\r\nclass AuthImplicitGrantRedirectError extends CustomAuthError {\r\n constructor(message, details = null) {\r\n super(message, 'AuthImplicitGrantRedirectError', 500, undefined);\r\n this.details = null;\r\n this.details = details;\r\n }\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n status: this.status,\r\n details: this.details,\r\n };\r\n }\r\n}\r\nfunction isAuthImplicitGrantRedirectError(error) {\r\n return isAuthError(error) && error.name === 'AuthImplicitGrantRedirectError';\r\n}\r\nclass AuthPKCEGrantCodeExchangeError extends CustomAuthError {\r\n constructor(message, details = null) {\r\n super(message, 'AuthPKCEGrantCodeExchangeError', 500, undefined);\r\n this.details = null;\r\n this.details = details;\r\n }\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n status: this.status,\r\n details: this.details,\r\n };\r\n }\r\n}\r\nclass AuthRetryableFetchError extends CustomAuthError {\r\n constructor(message, status) {\r\n super(message, 'AuthRetryableFetchError', status, undefined);\r\n }\r\n}\r\nfunction isAuthRetryableFetchError(error) {\r\n return isAuthError(error) && error.name === 'AuthRetryableFetchError';\r\n}\r\n/**\r\n * This error is thrown on certain methods when the password used is deemed\r\n * weak. Inspect the reasons to identify what password strength rules are\r\n * inadequate.\r\n */\r\nclass AuthWeakPasswordError extends CustomAuthError {\r\n constructor(message, status, reasons) {\r\n super(message, 'AuthWeakPasswordError', status, 'weak_password');\r\n this.reasons = reasons;\r\n }\r\n}\r\nfunction isAuthWeakPasswordError(error) {\r\n return isAuthError(error) && error.name === 'AuthWeakPasswordError';\r\n}\r\nclass AuthInvalidJwtError extends CustomAuthError {\r\n constructor(message) {\r\n super(message, 'AuthInvalidJwtError', 400, 'invalid_jwt');\r\n }\r\n}\r\n//# sourceMappingURL=errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL2xpYi9lcnJvcnMuanM/N2ZlMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQXV0aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzLCBjb2RlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fX2lzQXV0aEVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnQXV0aEVycm9yJztcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgJ19faXNBdXRoRXJyb3InIGluIGVycm9yO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBBdXRoQXBpRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzLCBjb2RlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgc3RhdHVzLCBjb2RlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnQXV0aEFwaUVycm9yJztcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhBcGlFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIGlzQXV0aEVycm9yKGVycm9yKSAmJiBlcnJvci5uYW1lID09PSAnQXV0aEFwaUVycm9yJztcclxufVxyXG5leHBvcnQgY2xhc3MgQXV0aFVua25vd25FcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBvcmlnaW5hbEVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ0F1dGhVbmtub3duRXJyb3InO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxFcnJvciA9IG9yaWdpbmFsRXJyb3I7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUF1dGhFcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBuYW1lLCBzdGF0dXMsIGNvZGUpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCBzdGF0dXMsIGNvZGUpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yIGV4dGVuZHMgQ3VzdG9tQXV0aEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCdBdXRoIHNlc3Npb24gbWlzc2luZyEnLCAnQXV0aFNlc3Npb25NaXNzaW5nRXJyb3InLCA0MDAsIHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoZXJyb3IpIHtcclxuICAgIHJldHVybiBpc0F1dGhFcnJvcihlcnJvcikgJiYgZXJyb3IubmFtZSA9PT0gJ0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yJztcclxufVxyXG5leHBvcnQgY2xhc3MgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoJ0F1dGggc2Vzc2lvbiBvciB1c2VyIG1pc3NpbmcnLCAnQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3InLCA1MDAsIHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEF1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvcicsIDQwMCwgdW5kZWZpbmVkKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yIGV4dGVuZHMgQ3VzdG9tQXV0aEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGRldGFpbHMgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcicsIDUwMCwgdW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZGV0YWlscyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIGlzQXV0aEVycm9yKGVycm9yKSAmJiBlcnJvci5uYW1lID09PSAnQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yJztcclxufVxyXG5leHBvcnQgY2xhc3MgQXV0aFBLQ0VHcmFudENvZGVFeGNoYW5nZUVycm9yIGV4dGVuZHMgQ3VzdG9tQXV0aEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGRldGFpbHMgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhQS0NFR3JhbnRDb2RlRXhjaGFuZ2VFcnJvcicsIDUwMCwgdW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZGV0YWlscyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCAnQXV0aFJldHJ5YWJsZUZldGNoRXJyb3InLCBzdGF0dXMsIHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoZXJyb3IpIHtcclxuICAgIHJldHVybiBpc0F1dGhFcnJvcihlcnJvcikgJiYgZXJyb3IubmFtZSA9PT0gJ0F1dGhSZXRyeWFibGVGZXRjaEVycm9yJztcclxufVxyXG4vKipcclxuICogVGhpcyBlcnJvciBpcyB0aHJvd24gb24gY2VydGFpbiBtZXRob2RzIHdoZW4gdGhlIHBhc3N3b3JkIHVzZWQgaXMgZGVlbWVkXHJcbiAqIHdlYWsuIEluc3BlY3QgdGhlIHJlYXNvbnMgdG8gaWRlbnRpZnkgd2hhdCBwYXNzd29yZCBzdHJlbmd0aCBydWxlcyBhcmVcclxuICogaW5hZGVxdWF0ZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBdXRoV2Vha1Bhc3N3b3JkRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzLCByZWFzb25zKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhXZWFrUGFzc3dvcmRFcnJvcicsIHN0YXR1cywgJ3dlYWtfcGFzc3dvcmQnKTtcclxuICAgICAgICB0aGlzLnJlYXNvbnMgPSByZWFzb25zO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhXZWFrUGFzc3dvcmRFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIGlzQXV0aEVycm9yKGVycm9yKSAmJiBlcnJvci5uYW1lID09PSAnQXV0aFdlYWtQYXNzd29yZEVycm9yJztcclxufVxyXG5leHBvcnQgY2xhc3MgQXV0aEludmFsaWRKd3RFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhJbnZhbGlkSnd0RXJyb3InLCA0MDAsICdpbnZhbGlkX2p3dCcpO1xyXG4gICAgfVxyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js": /*!*****************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/fetch.js ***! \*****************************************************************/ /***/ (function(__unused_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 */ _generateLinkResponse: function() { return /* binding */ _generateLinkResponse; },\n/* harmony export */ _noResolveJsonResponse: function() { return /* binding */ _noResolveJsonResponse; },\n/* harmony export */ _request: function() { return /* binding */ _request; },\n/* harmony export */ _sessionResponse: function() { return /* binding */ _sessionResponse; },\n/* harmony export */ _sessionResponsePassword: function() { return /* binding */ _sessionResponsePassword; },\n/* harmony export */ _ssoResponse: function() { return /* binding */ _ssoResponse; },\n/* harmony export */ _userResponse: function() { return /* binding */ _userResponse; },\n/* harmony export */ handleError: function() { return /* binding */ handleError; }\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\n\r\n\r\n\r\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\r\nconst NETWORK_ERROR_CODES = [502, 503, 504];\r\nasync function handleError(error) {\r\n var _a;\r\n if (!(0,_helpers__WEBPACK_IMPORTED_MODULE_1__.looksLikeFetchResponse)(error)) {\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthRetryableFetchError(_getErrorMessage(error), 0);\r\n }\r\n if (NETWORK_ERROR_CODES.includes(error.status)) {\r\n // status in 500...599 range - server had an error, request might be retryed.\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthRetryableFetchError(_getErrorMessage(error), error.status);\r\n }\r\n let data;\r\n try {\r\n data = await error.json();\r\n }\r\n catch (e) {\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError(_getErrorMessage(e), e);\r\n }\r\n let errorCode = undefined;\r\n const responseAPIVersion = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.parseResponseAPIVersion)(error);\r\n if (responseAPIVersion &&\r\n responseAPIVersion.getTime() >= _constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSIONS['2024-01-01'].timestamp &&\r\n typeof data === 'object' &&\r\n data &&\r\n typeof data.code === 'string') {\r\n errorCode = data.code;\r\n }\r\n else if (typeof data === 'object' && data && typeof data.error_code === 'string') {\r\n errorCode = data.error_code;\r\n }\r\n if (!errorCode) {\r\n // Legacy support for weak password errors, when there were no error codes\r\n if (typeof data === 'object' &&\r\n data &&\r\n typeof data.weak_password === 'object' &&\r\n data.weak_password &&\r\n Array.isArray(data.weak_password.reasons) &&\r\n data.weak_password.reasons.length &&\r\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthWeakPasswordError(_getErrorMessage(data), error.status, data.weak_password.reasons);\r\n }\r\n }\r\n else if (errorCode === 'weak_password') {\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthWeakPasswordError(_getErrorMessage(data), error.status, ((_a = data.weak_password) === null || _a === void 0 ? void 0 : _a.reasons) || []);\r\n }\r\n else if (errorCode === 'session_not_found') {\r\n // The `session_id` inside the JWT does not correspond to a row in the\r\n // `sessions` table. This usually means the user has signed out, has been\r\n // deleted, or their session has somehow been terminated.\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\r\n }\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthApiError(_getErrorMessage(data), error.status || 500, errorCode);\r\n}\r\nconst _getRequestParams = (method, options, parameters, body) => {\r\n const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\r\n if (method === 'GET') {\r\n return params;\r\n }\r\n params.headers = Object.assign({ 'Content-Type': 'application/json;charset=UTF-8' }, options === null || options === void 0 ? void 0 : options.headers);\r\n params.body = JSON.stringify(body);\r\n return Object.assign(Object.assign({}, params), parameters);\r\n};\r\nasync function _request(fetcher, method, url, options) {\r\n var _a;\r\n const headers = Object.assign({}, options === null || options === void 0 ? void 0 : options.headers);\r\n if (!headers[_constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSION_HEADER_NAME]) {\r\n headers[_constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSION_HEADER_NAME] = _constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSIONS['2024-01-01'].name;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.jwt) {\r\n headers['Authorization'] = `Bearer ${options.jwt}`;\r\n }\r\n const qs = (_a = options === null || options === void 0 ? void 0 : options.query) !== null && _a !== void 0 ? _a : {};\r\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\r\n qs['redirect_to'] = options.redirectTo;\r\n }\r\n const queryString = Object.keys(qs).length ? '?' + new URLSearchParams(qs).toString() : '';\r\n const data = await _handleRequest(fetcher, method, url + queryString, {\r\n headers,\r\n noResolveJson: options === null || options === void 0 ? void 0 : options.noResolveJson,\r\n }, {}, options === null || options === void 0 ? void 0 : options.body);\r\n return (options === null || options === void 0 ? void 0 : options.xform) ? options === null || options === void 0 ? void 0 : options.xform(data) : { data: Object.assign({}, data), error: null };\r\n}\r\nasync function _handleRequest(fetcher, method, url, options, parameters, body) {\r\n const requestParams = _getRequestParams(method, options, parameters, body);\r\n let result;\r\n try {\r\n result = await fetcher(url, Object.assign({}, requestParams));\r\n }\r\n catch (e) {\r\n console.error(e);\r\n // fetch failed, likely due to a network or CORS error\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthRetryableFetchError(_getErrorMessage(e), 0);\r\n }\r\n if (!result.ok) {\r\n await handleError(result);\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.noResolveJson) {\r\n return result;\r\n }\r\n try {\r\n return await result.json();\r\n }\r\n catch (e) {\r\n await handleError(e);\r\n }\r\n}\r\nfunction _sessionResponse(data) {\r\n var _a;\r\n let session = null;\r\n if (hasSession(data)) {\r\n session = Object.assign({}, data);\r\n if (!data.expires_at) {\r\n session.expires_at = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.expiresAt)(data.expires_in);\r\n }\r\n }\r\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\r\n return { data: { session, user }, error: null };\r\n}\r\nfunction _sessionResponsePassword(data) {\r\n const response = _sessionResponse(data);\r\n if (!response.error &&\r\n data.weak_password &&\r\n typeof data.weak_password === 'object' &&\r\n Array.isArray(data.weak_password.reasons) &&\r\n data.weak_password.reasons.length &&\r\n data.weak_password.message &&\r\n typeof data.weak_password.message === 'string' &&\r\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\r\n response.data.weak_password = data.weak_password;\r\n }\r\n return response;\r\n}\r\nfunction _userResponse(data) {\r\n var _a;\r\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\r\n return { data: { user }, error: null };\r\n}\r\nfunction _ssoResponse(data) {\r\n return { data, error: null };\r\n}\r\nfunction _generateLinkResponse(data) {\r\n const { action_link, email_otp, hashed_token, redirect_to, verification_type } = data, rest = __rest(data, [\"action_link\", \"email_otp\", \"hashed_token\", \"redirect_to\", \"verification_type\"]);\r\n const properties = {\r\n action_link,\r\n email_otp,\r\n hashed_token,\r\n redirect_to,\r\n verification_type,\r\n };\r\n const user = Object.assign({}, rest);\r\n return {\r\n data: {\r\n properties,\r\n user,\r\n },\r\n error: null,\r\n };\r\n}\r\nfunction _noResolveJsonResponse(data) {\r\n return data;\r\n}\r\n/**\r\n * hasSession checks if the response object contains a valid session\r\n * @param data A response object\r\n * @returns true if a session is in the response\r\n */\r\nfunction hasSession(data) {\r\n return data.access_token && data.refresh_token && data.expires_in;\r\n}\r\n//# sourceMappingURL=fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvZmV0Y2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxjQUFjLFNBQUksSUFBSSxTQUFJO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGNBQWM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNvRTtBQUNtQjtBQUM2QztBQUNwSTtBQUNBO0FBQ087QUFDUDtBQUNBLFNBQVMsZ0VBQXNCO0FBQy9CLGtCQUFrQiw0REFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDREQUF1QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IscURBQWdCO0FBQ2xDO0FBQ0E7QUFDQSwrQkFBK0IsaUVBQXVCO0FBQ3REO0FBQ0Esd0NBQXdDLG9EQUFZO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMERBQXFCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwwREFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw0REFBdUI7QUFDekM7QUFDQSxjQUFjLGlEQUFZO0FBQzFCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGtDQUFrQyxnQkFBZ0I7QUFDdkY7QUFDQSx5Q0FBeUM7QUFDekM7QUFDTztBQUNQO0FBQ0Esb0NBQW9DO0FBQ3BDLGlCQUFpQiwrREFBdUI7QUFDeEMsZ0JBQWdCLCtEQUF1QixJQUFJLG9EQUFZO0FBQ3ZEO0FBQ0E7QUFDQSw2Q0FBNkMsWUFBWTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVCx5SkFBeUosc0JBQXNCO0FBQy9LO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNERBQXVCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBLGlDQUFpQyxtREFBUztBQUMxQztBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVEsZUFBZTtBQUNwQztBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxhQUFhLFFBQVEsTUFBTTtBQUMzQjtBQUNPO0FBQ1AsYUFBYTtBQUNiO0FBQ087QUFDUCxZQUFZLHVFQUF1RTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL2xpYi9mZXRjaC5qcz83MDU0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59O1xyXG5pbXBvcnQgeyBBUElfVkVSU0lPTlMsIEFQSV9WRVJTSU9OX0hFQURFUl9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBleHBpcmVzQXQsIGxvb2tzTGlrZUZldGNoUmVzcG9uc2UsIHBhcnNlUmVzcG9uc2VBUElWZXJzaW9uIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgQXV0aEFwaUVycm9yLCBBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvciwgQXV0aFdlYWtQYXNzd29yZEVycm9yLCBBdXRoVW5rbm93bkVycm9yLCBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvciwgfSBmcm9tICcuL2Vycm9ycyc7XHJcbmNvbnN0IF9nZXRFcnJvck1lc3NhZ2UgPSAoZXJyKSA9PiBlcnIubXNnIHx8IGVyci5tZXNzYWdlIHx8IGVyci5lcnJvcl9kZXNjcmlwdGlvbiB8fCBlcnIuZXJyb3IgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKTtcclxuY29uc3QgTkVUV09SS19FUlJPUl9DT0RFUyA9IFs1MDIsIDUwMywgNTA0XTtcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVycm9yKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBpZiAoIWxvb2tzTGlrZUZldGNoUmVzcG9uc2UoZXJyb3IpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhSZXRyeWFibGVGZXRjaEVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCAwKTtcclxuICAgIH1cclxuICAgIGlmIChORVRXT1JLX0VSUk9SX0NPREVTLmluY2x1ZGVzKGVycm9yLnN0YXR1cykpIHtcclxuICAgICAgICAvLyBzdGF0dXMgaW4gNTAwLi4uNTk5IHJhbmdlIC0gc2VydmVyIGhhZCBhbiBlcnJvciwgcmVxdWVzdCBtaWdodCBiZSByZXRyeWVkLlxyXG4gICAgICAgIHRocm93IG5ldyBBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgZXJyb3Iuc3RhdHVzKTtcclxuICAgIH1cclxuICAgIGxldCBkYXRhO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBkYXRhID0gYXdhaXQgZXJyb3IuanNvbigpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgQXV0aFVua25vd25FcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGUpLCBlKTtcclxuICAgIH1cclxuICAgIGxldCBlcnJvckNvZGUgPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCByZXNwb25zZUFQSVZlcnNpb24gPSBwYXJzZVJlc3BvbnNlQVBJVmVyc2lvbihlcnJvcik7XHJcbiAgICBpZiAocmVzcG9uc2VBUElWZXJzaW9uICYmXHJcbiAgICAgICAgcmVzcG9uc2VBUElWZXJzaW9uLmdldFRpbWUoKSA+PSBBUElfVkVSU0lPTlNbJzIwMjQtMDEtMDEnXS50aW1lc3RhbXAgJiZcclxuICAgICAgICB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICBkYXRhICYmXHJcbiAgICAgICAgdHlwZW9mIGRhdGEuY29kZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBlcnJvckNvZGUgPSBkYXRhLmNvZGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAmJiB0eXBlb2YgZGF0YS5lcnJvcl9jb2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGVycm9yQ29kZSA9IGRhdGEuZXJyb3JfY29kZTtcclxuICAgIH1cclxuICAgIGlmICghZXJyb3JDb2RlKSB7XHJcbiAgICAgICAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIHdlYWsgcGFzc3dvcmQgZXJyb3JzLCB3aGVuIHRoZXJlIHdlcmUgbm8gZXJyb3IgY29kZXNcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICAgIGRhdGEgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGRhdGEud2Vha19wYXNzd29yZCA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMpICYmXHJcbiAgICAgICAgICAgIGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICBkYXRhLndlYWtfcGFzc3dvcmQucmVhc29ucy5yZWR1Y2UoKGEsIGkpID0+IGEgJiYgdHlwZW9mIGkgPT09ICdzdHJpbmcnLCB0cnVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aFdlYWtQYXNzd29yZEVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZGF0YSksIGVycm9yLnN0YXR1cywgZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVycm9yQ29kZSA9PT0gJ3dlYWtfcGFzc3dvcmQnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhXZWFrUGFzc3dvcmRFcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGRhdGEpLCBlcnJvci5zdGF0dXMsICgoX2EgPSBkYXRhLndlYWtfcGFzc3dvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWFzb25zKSB8fCBbXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlcnJvckNvZGUgPT09ICdzZXNzaW9uX25vdF9mb3VuZCcpIHtcclxuICAgICAgICAvLyBUaGUgYHNlc3Npb25faWRgIGluc2lkZSB0aGUgSldUIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByb3cgaW4gdGhlXHJcbiAgICAgICAgLy8gYHNlc3Npb25zYCB0YWJsZS4gVGhpcyB1c3VhbGx5IG1lYW5zIHRoZSB1c2VyIGhhcyBzaWduZWQgb3V0LCBoYXMgYmVlblxyXG4gICAgICAgIC8vIGRlbGV0ZWQsIG9yIHRoZWlyIHNlc3Npb24gaGFzIHNvbWVob3cgYmVlbiB0ZXJtaW5hdGVkLlxyXG4gICAgICAgIHRocm93IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEF1dGhBcGlFcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGRhdGEpLCBlcnJvci5zdGF0dXMgfHwgNTAwLCBlcnJvckNvZGUpO1xyXG59XHJcbmNvbnN0IF9nZXRSZXF1ZXN0UGFyYW1zID0gKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSkgPT4ge1xyXG4gICAgY29uc3QgcGFyYW1zID0geyBtZXRob2QsIGhlYWRlcnM6IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhZGVycykgfHwge30gfTtcclxuICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgIH1cclxuICAgIHBhcmFtcy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04JyB9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhZGVycyk7XHJcbiAgICBwYXJhbXMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgcGFyYW1ldGVycyk7XHJcbn07XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcmVxdWVzdChmZXRjaGVyLCBtZXRob2QsIHVybCwgb3B0aW9ucykge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5oZWFkZXJzKTtcclxuICAgIGlmICghaGVhZGVyc1tBUElfVkVSU0lPTl9IRUFERVJfTkFNRV0pIHtcclxuICAgICAgICBoZWFkZXJzW0FQSV9WRVJTSU9OX0hFQURFUl9OQU1FXSA9IEFQSV9WRVJTSU9OU1snMjAyNC0wMS0wMSddLm5hbWU7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmp3dCkge1xyXG4gICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtvcHRpb25zLmp3dH1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcXMgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZWRpcmVjdFRvKSB7XHJcbiAgICAgICAgcXNbJ3JlZGlyZWN0X3RvJ10gPSBvcHRpb25zLnJlZGlyZWN0VG87XHJcbiAgICB9XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKHFzKS5sZW5ndGggPyAnPycgKyBuZXcgVVJMU2VhcmNoUGFyYW1zKHFzKS50b1N0cmluZygpIDogJyc7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgbWV0aG9kLCB1cmwgKyBxdWVyeVN0cmluZywge1xyXG4gICAgICAgIGhlYWRlcnMsXHJcbiAgICAgICAgbm9SZXNvbHZlSnNvbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmVzb2x2ZUpzb24sXHJcbiAgICB9LCB7fSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmJvZHkpO1xyXG4gICAgcmV0dXJuIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMueGZvcm0pID8gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnhmb3JtKGRhdGEpIDogeyBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBkYXRhKSwgZXJyb3I6IG51bGwgfTtcclxufVxyXG5hc3luYyBmdW5jdGlvbiBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCBtZXRob2QsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSkge1xyXG4gICAgY29uc3QgcmVxdWVzdFBhcmFtcyA9IF9nZXRSZXF1ZXN0UGFyYW1zKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSk7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaGVyKHVybCwgT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdFBhcmFtcykpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIC8vIGZldGNoIGZhaWxlZCwgbGlrZWx5IGR1ZSB0byBhIG5ldHdvcmsgb3IgQ09SUyBlcnJvclxyXG4gICAgICAgIHRocm93IG5ldyBBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGUpLCAwKTtcclxuICAgIH1cclxuICAgIGlmICghcmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgYXdhaXQgaGFuZGxlRXJyb3IocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubm9SZXNvbHZlSnNvbikge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHQuanNvbigpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBhd2FpdCBoYW5kbGVFcnJvcihlKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gX3Nlc3Npb25SZXNwb25zZShkYXRhKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBsZXQgc2Vzc2lvbiA9IG51bGw7XHJcbiAgICBpZiAoaGFzU2Vzc2lvbihkYXRhKSkge1xyXG4gICAgICAgIHNlc3Npb24gPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcclxuICAgICAgICBpZiAoIWRhdGEuZXhwaXJlc19hdCkge1xyXG4gICAgICAgICAgICBzZXNzaW9uLmV4cGlyZXNfYXQgPSBleHBpcmVzQXQoZGF0YS5leHBpcmVzX2luKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyID0gKF9hID0gZGF0YS51c2VyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkYXRhO1xyXG4gICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uLCB1c2VyIH0sIGVycm9yOiBudWxsIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIF9zZXNzaW9uUmVzcG9uc2VQYXNzd29yZChkYXRhKSB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IF9zZXNzaW9uUmVzcG9uc2UoZGF0YSk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLmVycm9yICYmXHJcbiAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkICYmXHJcbiAgICAgICAgdHlwZW9mIGRhdGEud2Vha19wYXNzd29yZCA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zKSAmJlxyXG4gICAgICAgIGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zLmxlbmd0aCAmJlxyXG4gICAgICAgIGRhdGEud2Vha19wYXNzd29yZC5tZXNzYWdlICYmXHJcbiAgICAgICAgdHlwZW9mIGRhdGEud2Vha19wYXNzd29yZC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zLnJlZHVjZSgoYSwgaSkgPT4gYSAmJiB0eXBlb2YgaSA9PT0gJ3N0cmluZycsIHRydWUpKSB7XHJcbiAgICAgICAgcmVzcG9uc2UuZGF0YS53ZWFrX3Bhc3N3b3JkID0gZGF0YS53ZWFrX3Bhc3N3b3JkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBfdXNlclJlc3BvbnNlKGRhdGEpIHtcclxuICAgIHZhciBfYTtcclxuICAgIGNvbnN0IHVzZXIgPSAoX2EgPSBkYXRhLnVzZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRhdGE7XHJcbiAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIgfSwgZXJyb3I6IG51bGwgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gX3Nzb1Jlc3BvbnNlKGRhdGEpIHtcclxuICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBudWxsIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIF9nZW5lcmF0ZUxpbmtSZXNwb25zZShkYXRhKSB7XHJcbiAgICBjb25zdCB7IGFjdGlvbl9saW5rLCBlbWFpbF9vdHAsIGhhc2hlZF90b2tlbiwgcmVkaXJlY3RfdG8sIHZlcmlmaWNhdGlvbl90eXBlIH0gPSBkYXRhLCByZXN0ID0gX19yZXN0KGRhdGEsIFtcImFjdGlvbl9saW5rXCIsIFwiZW1haWxfb3RwXCIsIFwiaGFzaGVkX3Rva2VuXCIsIFwicmVkaXJlY3RfdG9cIiwgXCJ2ZXJpZmljYXRpb25fdHlwZVwiXSk7XHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgIGFjdGlvbl9saW5rLFxyXG4gICAgICAgIGVtYWlsX290cCxcclxuICAgICAgICBoYXNoZWRfdG9rZW4sXHJcbiAgICAgICAgcmVkaXJlY3RfdG8sXHJcbiAgICAgICAgdmVyaWZpY2F0aW9uX3R5cGUsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgdXNlciA9IE9iamVjdC5hc3NpZ24oe30sIHJlc3QpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIHVzZXIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIF9ub1Jlc29sdmVKc29uUmVzcG9uc2UoZGF0YSkge1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn1cclxuLyoqXHJcbiAqIGhhc1Nlc3Npb24gY2hlY2tzIGlmIHRoZSByZXNwb25zZSBvYmplY3QgY29udGFpbnMgYSB2YWxpZCBzZXNzaW9uXHJcbiAqIEBwYXJhbSBkYXRhIEEgcmVzcG9uc2Ugb2JqZWN0XHJcbiAqIEByZXR1cm5zIHRydWUgaWYgYSBzZXNzaW9uIGlzIGluIHRoZSByZXNwb25zZVxyXG4gKi9cclxuZnVuY3Rpb24gaGFzU2Vzc2lvbihkYXRhKSB7XHJcbiAgICByZXR1cm4gZGF0YS5hY2Nlc3NfdG9rZW4gJiYgZGF0YS5yZWZyZXNoX3Rva2VuICYmIGRhdGEuZXhwaXJlc19pbjtcclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mZXRjaC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js": /*!*******************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/helpers.js ***! \*******************************************************************/ /***/ (function(__unused_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 */ Deferred: function() { return /* binding */ Deferred; },\n/* harmony export */ decodeJWT: function() { return /* binding */ decodeJWT; },\n/* harmony export */ deepClone: function() { return /* binding */ deepClone; },\n/* harmony export */ expiresAt: function() { return /* binding */ expiresAt; },\n/* harmony export */ generatePKCEChallenge: function() { return /* binding */ generatePKCEChallenge; },\n/* harmony export */ generatePKCEVerifier: function() { return /* binding */ generatePKCEVerifier; },\n/* harmony export */ getAlgorithm: function() { return /* binding */ getAlgorithm; },\n/* harmony export */ getCodeChallengeAndMethod: function() { return /* binding */ getCodeChallengeAndMethod; },\n/* harmony export */ getItemAsync: function() { return /* binding */ getItemAsync; },\n/* harmony export */ isBrowser: function() { return /* binding */ isBrowser; },\n/* harmony export */ looksLikeFetchResponse: function() { return /* binding */ looksLikeFetchResponse; },\n/* harmony export */ parseParametersFromURL: function() { return /* binding */ parseParametersFromURL; },\n/* harmony export */ parseResponseAPIVersion: function() { return /* binding */ parseResponseAPIVersion; },\n/* harmony export */ removeItemAsync: function() { return /* binding */ removeItemAsync; },\n/* harmony export */ resolveFetch: function() { return /* binding */ resolveFetch; },\n/* harmony export */ retryable: function() { return /* binding */ retryable; },\n/* harmony export */ setItemAsync: function() { return /* binding */ setItemAsync; },\n/* harmony export */ sleep: function() { return /* binding */ sleep; },\n/* harmony export */ supportsLocalStorage: function() { return /* binding */ supportsLocalStorage; },\n/* harmony export */ userNotAvailableProxy: function() { return /* binding */ userNotAvailableProxy; },\n/* harmony export */ uuid: function() { return /* binding */ uuid; },\n/* harmony export */ validateExp: function() { return /* binding */ validateExp; },\n/* harmony export */ validateUUID: function() { return /* binding */ validateUUID; }\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n/* harmony import */ var _base64url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base64url */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js\");\n\r\n\r\n\r\nfunction expiresAt(expiresIn) {\r\n const timeNow = Math.round(Date.now() / 1000);\r\n return timeNow + expiresIn;\r\n}\r\nfunction uuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\nconst isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined';\r\nconst localStorageWriteTests = {\r\n tested: false,\r\n writable: false,\r\n};\r\n/**\r\n * Checks whether localStorage is supported on this browser.\r\n */\r\nconst supportsLocalStorage = () => {\r\n if (!isBrowser()) {\r\n return false;\r\n }\r\n try {\r\n if (typeof globalThis.localStorage !== 'object') {\r\n return false;\r\n }\r\n }\r\n catch (e) {\r\n // DOM exception when accessing `localStorage`\r\n return false;\r\n }\r\n if (localStorageWriteTests.tested) {\r\n return localStorageWriteTests.writable;\r\n }\r\n const randomKey = `lswt-${Math.random()}${Math.random()}`;\r\n try {\r\n globalThis.localStorage.setItem(randomKey, randomKey);\r\n globalThis.localStorage.removeItem(randomKey);\r\n localStorageWriteTests.tested = true;\r\n localStorageWriteTests.writable = true;\r\n }\r\n catch (e) {\r\n // localStorage can't be written to\r\n // https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document\r\n localStorageWriteTests.tested = true;\r\n localStorageWriteTests.writable = false;\r\n }\r\n return localStorageWriteTests.writable;\r\n};\r\n/**\r\n * Extracts parameters encoded in the URL both in the query and fragment.\r\n */\r\nfunction parseParametersFromURL(href) {\r\n const result = {};\r\n const url = new URL(href);\r\n if (url.hash && url.hash[0] === '#') {\r\n try {\r\n const hashSearchParams = new URLSearchParams(url.hash.substring(1));\r\n hashSearchParams.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n }\r\n catch (e) {\r\n // hash is not a query string\r\n }\r\n }\r\n // search parameters take precedence over hash parameters\r\n url.searchParams.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n}\r\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! @supabase/node-fetch */ \"(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\")).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\nconst looksLikeFetchResponse = (maybeResponse) => {\r\n return (typeof maybeResponse === 'object' &&\r\n maybeResponse !== null &&\r\n 'status' in maybeResponse &&\r\n 'ok' in maybeResponse &&\r\n 'json' in maybeResponse &&\r\n typeof maybeResponse.json === 'function');\r\n};\r\n// Storage helpers\r\nconst setItemAsync = async (storage, key, data) => {\r\n await storage.setItem(key, JSON.stringify(data));\r\n};\r\nconst getItemAsync = async (storage, key) => {\r\n const value = await storage.getItem(key);\r\n if (!value) {\r\n return null;\r\n }\r\n try {\r\n return JSON.parse(value);\r\n }\r\n catch (_a) {\r\n return value;\r\n }\r\n};\r\nconst removeItemAsync = async (storage, key) => {\r\n await storage.removeItem(key);\r\n};\r\n/**\r\n * A deferred represents some asynchronous work that is not yet finished, which\r\n * may or may not culminate in a value.\r\n * Taken from: https://github.com/mike-north/types/blob/master/src/async.ts\r\n */\r\nclass Deferred {\r\n constructor() {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\r\n ;\r\n this.promise = new Deferred.promiseConstructor((res, rej) => {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\r\n ;\r\n this.resolve = res;\r\n this.reject = rej;\r\n });\r\n }\r\n}\r\nDeferred.promiseConstructor = Promise;\r\nfunction decodeJWT(token) {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) {\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthInvalidJwtError('Invalid JWT structure');\r\n }\r\n // Regex checks for base64url format\r\n for (let i = 0; i < parts.length; i++) {\r\n if (!_constants__WEBPACK_IMPORTED_MODULE_0__.BASE64URL_REGEX.test(parts[i])) {\r\n throw new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthInvalidJwtError('JWT not in base64url format');\r\n }\r\n }\r\n const data = {\r\n // using base64url lib\r\n header: JSON.parse((0,_base64url__WEBPACK_IMPORTED_MODULE_2__.stringFromBase64URL)(parts[0])),\r\n payload: JSON.parse((0,_base64url__WEBPACK_IMPORTED_MODULE_2__.stringFromBase64URL)(parts[1])),\r\n signature: (0,_base64url__WEBPACK_IMPORTED_MODULE_2__.base64UrlToUint8Array)(parts[2]),\r\n raw: {\r\n header: parts[0],\r\n payload: parts[1],\r\n },\r\n };\r\n return data;\r\n}\r\n/**\r\n * Creates a promise that resolves to null after some time.\r\n */\r\nasync function sleep(time) {\r\n return await new Promise((accept) => {\r\n setTimeout(() => accept(null), time);\r\n });\r\n}\r\n/**\r\n * Converts the provided async function into a retryable function. Each result\r\n * or thrown error is sent to the isRetryable function which should return true\r\n * if the function should run again.\r\n */\r\nfunction retryable(fn, isRetryable) {\r\n const promise = new Promise((accept, reject) => {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\r\n ;\r\n (async () => {\r\n for (let attempt = 0; attempt < Infinity; attempt++) {\r\n try {\r\n const result = await fn(attempt);\r\n if (!isRetryable(attempt, null, result)) {\r\n accept(result);\r\n return;\r\n }\r\n }\r\n catch (e) {\r\n if (!isRetryable(attempt, e)) {\r\n reject(e);\r\n return;\r\n }\r\n }\r\n }\r\n })();\r\n });\r\n return promise;\r\n}\r\nfunction dec2hex(dec) {\r\n return ('0' + dec.toString(16)).substr(-2);\r\n}\r\n// Functions below taken from: https://stackoverflow.com/questions/63309409/creating-a-code-verifier-and-challenge-for-pkce-auth-on-spotify-api-in-reactjs\r\nfunction generatePKCEVerifier() {\r\n const verifierLength = 56;\r\n const array = new Uint32Array(verifierLength);\r\n if (typeof crypto === 'undefined') {\r\n const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\r\n const charSetLen = charSet.length;\r\n let verifier = '';\r\n for (let i = 0; i < verifierLength; i++) {\r\n verifier += charSet.charAt(Math.floor(Math.random() * charSetLen));\r\n }\r\n return verifier;\r\n }\r\n crypto.getRandomValues(array);\r\n return Array.from(array, dec2hex).join('');\r\n}\r\nasync function sha256(randomString) {\r\n const encoder = new TextEncoder();\r\n const encodedData = encoder.encode(randomString);\r\n const hash = await crypto.subtle.digest('SHA-256', encodedData);\r\n const bytes = new Uint8Array(hash);\r\n return Array.from(bytes)\r\n .map((c) => String.fromCharCode(c))\r\n .join('');\r\n}\r\nasync function generatePKCEChallenge(verifier) {\r\n const hasCryptoSupport = typeof crypto !== 'undefined' &&\r\n typeof crypto.subtle !== 'undefined' &&\r\n typeof TextEncoder !== 'undefined';\r\n if (!hasCryptoSupport) {\r\n console.warn('WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.');\r\n return verifier;\r\n }\r\n const hashed = await sha256(verifier);\r\n return btoa(hashed).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\r\n}\r\nasync function getCodeChallengeAndMethod(storage, storageKey, isPasswordRecovery = false) {\r\n const codeVerifier = generatePKCEVerifier();\r\n let storedCodeVerifier = codeVerifier;\r\n if (isPasswordRecovery) {\r\n storedCodeVerifier += '/PASSWORD_RECOVERY';\r\n }\r\n await setItemAsync(storage, `${storageKey}-code-verifier`, storedCodeVerifier);\r\n const codeChallenge = await generatePKCEChallenge(codeVerifier);\r\n const codeChallengeMethod = codeVerifier === codeChallenge ? 'plain' : 's256';\r\n return [codeChallenge, codeChallengeMethod];\r\n}\r\n/** Parses the API version which is 2YYY-MM-DD. */\r\nconst API_VERSION_REGEX = /^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;\r\nfunction parseResponseAPIVersion(response) {\r\n const apiVersion = response.headers.get(_constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSION_HEADER_NAME);\r\n if (!apiVersion) {\r\n return null;\r\n }\r\n if (!apiVersion.match(API_VERSION_REGEX)) {\r\n return null;\r\n }\r\n try {\r\n const date = new Date(`${apiVersion}T00:00:00.0Z`);\r\n return date;\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n}\r\nfunction validateExp(exp) {\r\n if (!exp) {\r\n throw new Error('Missing exp claim');\r\n }\r\n const timeNow = Math.floor(Date.now() / 1000);\r\n if (exp <= timeNow) {\r\n throw new Error('JWT has expired');\r\n }\r\n}\r\nfunction getAlgorithm(alg) {\r\n switch (alg) {\r\n case 'RS256':\r\n return {\r\n name: 'RSASSA-PKCS1-v1_5',\r\n hash: { name: 'SHA-256' },\r\n };\r\n case 'ES256':\r\n return {\r\n name: 'ECDSA',\r\n namedCurve: 'P-256',\r\n hash: { name: 'SHA-256' },\r\n };\r\n default:\r\n throw new Error('Invalid alg claim');\r\n }\r\n}\r\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\r\nfunction validateUUID(str) {\r\n if (!UUID_REGEX.test(str)) {\r\n throw new Error('@supabase/auth-js: Expected parameter to be UUID but is not');\r\n }\r\n}\r\nfunction userNotAvailableProxy() {\r\n const proxyTarget = {};\r\n return new Proxy(proxyTarget, {\r\n get: (target, prop) => {\r\n if (prop === '__isUserNotAvailableProxy') {\r\n return true;\r\n }\r\n // Preventative check for common problematic symbols during cloning/inspection\r\n // These symbols might be accessed by structuredClone or other internal mechanisms.\r\n if (typeof prop === 'symbol') {\r\n const sProp = prop.toString();\r\n if (sProp === 'Symbol(Symbol.toPrimitive)' ||\r\n sProp === 'Symbol(Symbol.toStringTag)' ||\r\n sProp === 'Symbol(util.inspect.custom)') {\r\n // Node.js util.inspect\r\n return undefined;\r\n }\r\n }\r\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the \"${prop}\" property of the session object is not supported. Please use getUser() instead.`);\r\n },\r\n set: (_target, prop) => {\r\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\r\n },\r\n deleteProperty: (_target, prop) => {\r\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\r\n },\r\n });\r\n}\r\n/**\r\n * Deep clones a JSON-serializable object using JSON.parse(JSON.stringify(obj)).\r\n * Note: Only works for JSON-safe data.\r\n */\r\nfunction deepClone(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF1RTtBQUN4QjtBQUMwQjtBQUNsRTtBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGNBQWMsRUFBRSxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixzTEFBOEIsU0FBUyxnQkFBZ0I7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxrQkFBa0Isd0RBQW1CO0FBQ3JDO0FBQ0E7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDLGFBQWEsdURBQWU7QUFDNUIsc0JBQXNCLHdEQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwrREFBbUI7QUFDOUMsNEJBQTRCLCtEQUFtQjtBQUMvQyxtQkFBbUIsaUVBQXFCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxvQkFBb0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxXQUFXO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsRUFBRTtBQUM5QjtBQUNQLDRDQUE0QywrREFBdUI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHO0FBQzFFO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SkFBOEosS0FBSztBQUNuSyxTQUFTO0FBQ1Q7QUFDQSw0SkFBNEosS0FBSztBQUNqSyxTQUFTO0FBQ1Q7QUFDQSw2SkFBNkosS0FBSztBQUNsSyxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL2hlbHBlcnMuanM/ZjQxYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUElfVkVSU0lPTl9IRUFERVJfTkFNRSwgQkFTRTY0VVJMX1JFR0VYIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBdXRoSW52YWxpZEp3dEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xyXG5pbXBvcnQgeyBiYXNlNjRVcmxUb1VpbnQ4QXJyYXksIHN0cmluZ0Zyb21CYXNlNjRVUkwgfSBmcm9tICcuL2Jhc2U2NHVybCc7XHJcbmV4cG9ydCBmdW5jdGlvbiBleHBpcmVzQXQoZXhwaXJlc0luKSB7XHJcbiAgICBjb25zdCB0aW1lTm93ID0gTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICByZXR1cm4gdGltZU5vdyArIGV4cGlyZXNJbjtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnQgY29uc3QgaXNCcm93c2VyID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcclxuY29uc3QgbG9jYWxTdG9yYWdlV3JpdGVUZXN0cyA9IHtcclxuICAgIHRlc3RlZDogZmFsc2UsXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbn07XHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBsb2NhbFN0b3JhZ2UgaXMgc3VwcG9ydGVkIG9uIHRoaXMgYnJvd3Nlci5cclxuICovXHJcbmV4cG9ydCBjb25zdCBzdXBwb3J0c0xvY2FsU3RvcmFnZSA9ICgpID0+IHtcclxuICAgIGlmICghaXNCcm93c2VyKCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2UgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIERPTSBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcgYGxvY2FsU3RvcmFnZWBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAobG9jYWxTdG9yYWdlV3JpdGVUZXN0cy50ZXN0ZWQpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlV3JpdGVUZXN0cy53cml0YWJsZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJhbmRvbUtleSA9IGBsc3d0LSR7TWF0aC5yYW5kb20oKX0ke01hdGgucmFuZG9tKCl9YDtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShyYW5kb21LZXksIHJhbmRvbUtleSk7XHJcbiAgICAgICAgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShyYW5kb21LZXkpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZVdyaXRlVGVzdHMudGVzdGVkID0gdHJ1ZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzLndyaXRhYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gbG9jYWxTdG9yYWdlIGNhbid0IGJlIHdyaXR0ZW4gdG9cclxuICAgICAgICAvLyBodHRwczovL3d3dy5jaHJvbWl1bS5vcmcvZm9yLXRlc3RlcnMvYnVnLXJlcG9ydGluZy1ndWlkZWxpbmVzL3VuY2F1Z2h0LXNlY3VyaXR5ZXJyb3ItZmFpbGVkLXRvLXJlYWQtdGhlLWxvY2Fsc3RvcmFnZS1wcm9wZXJ0eS1mcm9tLXdpbmRvdy1hY2Nlc3MtaXMtZGVuaWVkLWZvci10aGlzLWRvY3VtZW50XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlV3JpdGVUZXN0cy50ZXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZVdyaXRlVGVzdHMud3JpdGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzLndyaXRhYmxlO1xyXG59O1xyXG4vKipcclxuICogRXh0cmFjdHMgcGFyYW1ldGVycyBlbmNvZGVkIGluIHRoZSBVUkwgYm90aCBpbiB0aGUgcXVlcnkgYW5kIGZyYWdtZW50LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyc0Zyb21VUkwoaHJlZikge1xyXG4gICAgY29uc3QgcmVzdWx0ID0ge307XHJcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGhyZWYpO1xyXG4gICAgaWYgKHVybC5oYXNoICYmIHVybC5oYXNoWzBdID09PSAnIycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuaGFzaC5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICAgICAgICBoYXNoU2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBoYXNoIGlzIG5vdCBhIHF1ZXJ5IHN0cmluZ1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHNlYXJjaCBwYXJhbWV0ZXJzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGhhc2ggcGFyYW1ldGVyc1xyXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZldGNoID0gKGN1c3RvbUZldGNoKSA9PiB7XHJcbiAgICBsZXQgX2ZldGNoO1xyXG4gICAgaWYgKGN1c3RvbUZldGNoKSB7XHJcbiAgICAgICAgX2ZldGNoID0gY3VzdG9tRmV0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgX2ZldGNoID0gKC4uLmFyZ3MpID0+IGltcG9ydCgnQHN1cGFiYXNlL25vZGUtZmV0Y2gnKS50aGVuKCh7IGRlZmF1bHQ6IGZldGNoIH0pID0+IGZldGNoKC4uLmFyZ3MpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIF9mZXRjaCA9IGZldGNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiBfZmV0Y2goLi4uYXJncyk7XHJcbn07XHJcbmV4cG9ydCBjb25zdCBsb29rc0xpa2VGZXRjaFJlc3BvbnNlID0gKG1heWJlUmVzcG9uc2UpID0+IHtcclxuICAgIHJldHVybiAodHlwZW9mIG1heWJlUmVzcG9uc2UgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgbWF5YmVSZXNwb25zZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICdzdGF0dXMnIGluIG1heWJlUmVzcG9uc2UgJiZcclxuICAgICAgICAnb2snIGluIG1heWJlUmVzcG9uc2UgJiZcclxuICAgICAgICAnanNvbicgaW4gbWF5YmVSZXNwb25zZSAmJlxyXG4gICAgICAgIHR5cGVvZiBtYXliZVJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpO1xyXG59O1xyXG4vLyBTdG9yYWdlIGhlbHBlcnNcclxuZXhwb3J0IGNvbnN0IHNldEl0ZW1Bc3luYyA9IGFzeW5jIChzdG9yYWdlLCBrZXksIGRhdGEpID0+IHtcclxuICAgIGF3YWl0IHN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxufTtcclxuZXhwb3J0IGNvbnN0IGdldEl0ZW1Bc3luYyA9IGFzeW5jIChzdG9yYWdlLCBrZXkpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufTtcclxuZXhwb3J0IGNvbnN0IHJlbW92ZUl0ZW1Bc3luYyA9IGFzeW5jIChzdG9yYWdlLCBrZXkpID0+IHtcclxuICAgIGF3YWl0IHN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG59O1xyXG4vKipcclxuICogQSBkZWZlcnJlZCByZXByZXNlbnRzIHNvbWUgYXN5bmNocm9ub3VzIHdvcmsgdGhhdCBpcyBub3QgeWV0IGZpbmlzaGVkLCB3aGljaFxyXG4gKiBtYXkgb3IgbWF5IG5vdCBjdWxtaW5hdGUgaW4gYSB2YWx1ZS5cclxuICogVGFrZW4gZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL21pa2Utbm9ydGgvdHlwZXMvYmxvYi9tYXN0ZXIvc3JjL2FzeW5jLnRzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGVmZXJyZWQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHRyYS1zZW1pXHJcbiAgICAgICAgO1xyXG4gICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBEZWZlcnJlZC5wcm9taXNlQ29uc3RydWN0b3IoKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXh0cmEtc2VtaVxyXG4gICAgICAgICAgICA7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5yZWplY3QgPSByZWo7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuRGVmZXJyZWQucHJvbWlzZUNvbnN0cnVjdG9yID0gUHJvbWlzZTtcclxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUpXVCh0b2tlbikge1xyXG4gICAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZEp3dEVycm9yKCdJbnZhbGlkIEpXVCBzdHJ1Y3R1cmUnKTtcclxuICAgIH1cclxuICAgIC8vIFJlZ2V4IGNoZWNrcyBmb3IgYmFzZTY0dXJsIGZvcm1hdFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghQkFTRTY0VVJMX1JFR0VYLnRlc3QocGFydHNbaV0pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZEp3dEVycm9yKCdKV1Qgbm90IGluIGJhc2U2NHVybCBmb3JtYXQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgIC8vIHVzaW5nIGJhc2U2NHVybCBsaWJcclxuICAgICAgICBoZWFkZXI6IEpTT04ucGFyc2Uoc3RyaW5nRnJvbUJhc2U2NFVSTChwYXJ0c1swXSkpLFxyXG4gICAgICAgIHBheWxvYWQ6IEpTT04ucGFyc2Uoc3RyaW5nRnJvbUJhc2U2NFVSTChwYXJ0c1sxXSkpLFxyXG4gICAgICAgIHNpZ25hdHVyZTogYmFzZTY0VXJsVG9VaW50OEFycmF5KHBhcnRzWzJdKSxcclxuICAgICAgICByYXc6IHtcclxuICAgICAgICAgICAgaGVhZGVyOiBwYXJ0c1swXSxcclxuICAgICAgICAgICAgcGF5bG9hZDogcGFydHNbMV0sXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGF0YTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBudWxsIGFmdGVyIHNvbWUgdGltZS5cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcCh0aW1lKSB7XHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKGFjY2VwdCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYWNjZXB0KG51bGwpLCB0aW1lKTtcclxuICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgcHJvdmlkZWQgYXN5bmMgZnVuY3Rpb24gaW50byBhIHJldHJ5YWJsZSBmdW5jdGlvbi4gRWFjaCByZXN1bHRcclxuICogb3IgdGhyb3duIGVycm9yIGlzIHNlbnQgdG8gdGhlIGlzUmV0cnlhYmxlIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCByZXR1cm4gdHJ1ZVxyXG4gKiBpZiB0aGUgZnVuY3Rpb24gc2hvdWxkIHJ1biBhZ2Fpbi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXRyeWFibGUoZm4sIGlzUmV0cnlhYmxlKSB7XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKGFjY2VwdCwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHRyYS1zZW1pXHJcbiAgICAgICAgO1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgSW5maW5pdHk7IGF0dGVtcHQrKykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbihhdHRlbXB0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmV0cnlhYmxlKGF0dGVtcHQsIG51bGwsIHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZXRyeWFibGUoYXR0ZW1wdCwgZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbn1cclxuZnVuY3Rpb24gZGVjMmhleChkZWMpIHtcclxuICAgIHJldHVybiAoJzAnICsgZGVjLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKTtcclxufVxyXG4vLyBGdW5jdGlvbnMgYmVsb3cgdGFrZW4gZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjMzMDk0MDkvY3JlYXRpbmctYS1jb2RlLXZlcmlmaWVyLWFuZC1jaGFsbGVuZ2UtZm9yLXBrY2UtYXV0aC1vbi1zcG90aWZ5LWFwaS1pbi1yZWFjdGpzXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0VWZXJpZmllcigpIHtcclxuICAgIGNvbnN0IHZlcmlmaWVyTGVuZ3RoID0gNTY7XHJcbiAgICBjb25zdCBhcnJheSA9IG5ldyBVaW50MzJBcnJheSh2ZXJpZmllckxlbmd0aCk7XHJcbiAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBjb25zdCBjaGFyU2V0ID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LS5ffic7XHJcbiAgICAgICAgY29uc3QgY2hhclNldExlbiA9IGNoYXJTZXQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB2ZXJpZmllciA9ICcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVyaWZpZXJMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2ZXJpZmllciArPSBjaGFyU2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyU2V0TGVuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpO1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYXJyYXksIGRlYzJoZXgpLmpvaW4oJycpO1xyXG59XHJcbmFzeW5jIGZ1bmN0aW9uIHNoYTI1NihyYW5kb21TdHJpbmcpIHtcclxuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcclxuICAgIGNvbnN0IGVuY29kZWREYXRhID0gZW5jb2Rlci5lbmNvZGUocmFuZG9tU3RyaW5nKTtcclxuICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGVuY29kZWREYXRhKTtcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaGFzaCk7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbShieXRlcylcclxuICAgICAgICAubWFwKChjKSA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKVxyXG4gICAgICAgIC5qb2luKCcnKTtcclxufVxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQS0NFQ2hhbGxlbmdlKHZlcmlmaWVyKSB7XHJcbiAgICBjb25zdCBoYXNDcnlwdG9TdXBwb3J0ID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICB0eXBlb2YgY3J5cHRvLnN1YnRsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICB0eXBlb2YgVGV4dEVuY29kZXIgIT09ICd1bmRlZmluZWQnO1xyXG4gICAgaWYgKCFoYXNDcnlwdG9TdXBwb3J0KSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdXZWJDcnlwdG8gQVBJIGlzIG5vdCBzdXBwb3J0ZWQuIENvZGUgY2hhbGxlbmdlIG1ldGhvZCB3aWxsIGRlZmF1bHQgdG8gdXNlIHBsYWluIGluc3RlYWQgb2Ygc2hhMjU2LicpO1xyXG4gICAgICAgIHJldHVybiB2ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhc2hlZCA9IGF3YWl0IHNoYTI1Nih2ZXJpZmllcik7XHJcbiAgICByZXR1cm4gYnRvYShoYXNoZWQpLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoLz0rJC8sICcnKTtcclxufVxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZChzdG9yYWdlLCBzdG9yYWdlS2V5LCBpc1Bhc3N3b3JkUmVjb3ZlcnkgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgY29kZVZlcmlmaWVyID0gZ2VuZXJhdGVQS0NFVmVyaWZpZXIoKTtcclxuICAgIGxldCBzdG9yZWRDb2RlVmVyaWZpZXIgPSBjb2RlVmVyaWZpZXI7XHJcbiAgICBpZiAoaXNQYXNzd29yZFJlY292ZXJ5KSB7XHJcbiAgICAgICAgc3RvcmVkQ29kZVZlcmlmaWVyICs9ICcvUEFTU1dPUkRfUkVDT1ZFUlknO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgc2V0SXRlbUFzeW5jKHN0b3JhZ2UsIGAke3N0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgLCBzdG9yZWRDb2RlVmVyaWZpZXIpO1xyXG4gICAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGF3YWl0IGdlbmVyYXRlUEtDRUNoYWxsZW5nZShjb2RlVmVyaWZpZXIpO1xyXG4gICAgY29uc3QgY29kZUNoYWxsZW5nZU1ldGhvZCA9IGNvZGVWZXJpZmllciA9PT0gY29kZUNoYWxsZW5nZSA/ICdwbGFpbicgOiAnczI1Nic7XHJcbiAgICByZXR1cm4gW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdO1xyXG59XHJcbi8qKiBQYXJzZXMgdGhlIEFQSSB2ZXJzaW9uIHdoaWNoIGlzIDJZWVktTU0tREQuICovXHJcbmNvbnN0IEFQSV9WRVJTSU9OX1JFR0VYID0gL14yWzAtOV17M30tKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVswLTldfDJbMC05XXwzWzAtMV0pJC9pO1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXNwb25zZUFQSVZlcnNpb24ocmVzcG9uc2UpIHtcclxuICAgIGNvbnN0IGFwaVZlcnNpb24gPSByZXNwb25zZS5oZWFkZXJzLmdldChBUElfVkVSU0lPTl9IRUFERVJfTkFNRSk7XHJcbiAgICBpZiAoIWFwaVZlcnNpb24pIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICghYXBpVmVyc2lvbi5tYXRjaChBUElfVkVSU0lPTl9SRUdFWCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGAke2FwaVZlcnNpb259VDAwOjAwOjAwLjBaYCk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV4cChleHApIHtcclxuICAgIGlmICghZXhwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGV4cCBjbGFpbScpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGltZU5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgaWYgKGV4cCA8PSB0aW1lTm93KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKV1QgaGFzIGV4cGlyZWQnKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKGFsZykge1xyXG4gICAgc3dpdGNoIChhbGcpIHtcclxuICAgICAgICBjYXNlICdSUzI1Nic6XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnUlNBU1NBLVBLQ1MxLXYxXzUnLFxyXG4gICAgICAgICAgICAgICAgaGFzaDogeyBuYW1lOiAnU0hBLTI1NicgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICBjYXNlICdFUzI1Nic6XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnRUNEU0EnLFxyXG4gICAgICAgICAgICAgICAgbmFtZWRDdXJ2ZTogJ1AtMjU2JyxcclxuICAgICAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogJ1NIQS0yNTYnIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFsZyBjbGFpbScpO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IFVVSURfUkVHRVggPSAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQvO1xyXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVVVUlEKHN0cikge1xyXG4gICAgaWYgKCFVVUlEX1JFR0VYLnRlc3Qoc3RyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQHN1cGFiYXNlL2F1dGgtanM6IEV4cGVjdGVkIHBhcmFtZXRlciB0byBiZSBVVUlEIGJ1dCBpcyBub3QnKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdXNlck5vdEF2YWlsYWJsZVByb3h5KCkge1xyXG4gICAgY29uc3QgcHJveHlUYXJnZXQgPSB7fTtcclxuICAgIHJldHVybiBuZXcgUHJveHkocHJveHlUYXJnZXQsIHtcclxuICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3ApID0+IHtcclxuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdfX2lzVXNlck5vdEF2YWlsYWJsZVByb3h5Jykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUHJldmVudGF0aXZlIGNoZWNrIGZvciBjb21tb24gcHJvYmxlbWF0aWMgc3ltYm9scyBkdXJpbmcgY2xvbmluZy9pbnNwZWN0aW9uXHJcbiAgICAgICAgICAgIC8vIFRoZXNlIHN5bWJvbHMgbWlnaHQgYmUgYWNjZXNzZWQgYnkgc3RydWN0dXJlZENsb25lIG9yIG90aGVyIGludGVybmFsIG1lY2hhbmlzbXMuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNQcm9wID0gcHJvcC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNQcm9wID09PSAnU3ltYm9sKFN5bWJvbC50b1ByaW1pdGl2ZSknIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc1Byb3AgPT09ICdTeW1ib2woU3ltYm9sLnRvU3RyaW5nVGFnKScgfHxcclxuICAgICAgICAgICAgICAgICAgICBzUHJvcCA9PT0gJ1N5bWJvbCh1dGlsLmluc3BlY3QuY3VzdG9tKScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBOb2RlLmpzIHV0aWwuaW5zcGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2UvYXV0aC1qczogY2xpZW50IHdhcyBjcmVhdGVkIHdpdGggdXNlclN0b3JhZ2Ugb3B0aW9uIGFuZCB0aGVyZSB3YXMgbm8gdXNlciBzdG9yZWQgaW4gdGhlIHVzZXIgc3RvcmFnZS4gQWNjZXNzaW5nIHRoZSBcIiR7cHJvcH1cIiBwcm9wZXJ0eSBvZiB0aGUgc2Vzc2lvbiBvYmplY3QgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBnZXRVc2VyKCkgaW5zdGVhZC5gKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogKF90YXJnZXQsIHByb3ApID0+IHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2UvYXV0aC1qczogY2xpZW50IHdhcyBjcmVhdGVkIHdpdGggdXNlclN0b3JhZ2Ugb3B0aW9uIGFuZCB0aGVyZSB3YXMgbm8gdXNlciBzdG9yZWQgaW4gdGhlIHVzZXIgc3RvcmFnZS4gU2V0dGluZyB0aGUgXCIke3Byb3B9XCIgcHJvcGVydHkgb2YgdGhlIHNlc3Npb24gb2JqZWN0IGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgZ2V0VXNlcigpIHRvIGZldGNoIGEgdXNlciBvYmplY3QgeW91IGNhbiBtYW5pcHVsYXRlLmApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlUHJvcGVydHk6IChfdGFyZ2V0LCBwcm9wKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IGNsaWVudCB3YXMgY3JlYXRlZCB3aXRoIHVzZXJTdG9yYWdlIG9wdGlvbiBhbmQgdGhlcmUgd2FzIG5vIHVzZXIgc3RvcmVkIGluIHRoZSB1c2VyIHN0b3JhZ2UuIERlbGV0aW5nIHRoZSBcIiR7cHJvcH1cIiBwcm9wZXJ0eSBvZiB0aGUgc2Vzc2lvbiBvYmplY3QgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBnZXRVc2VyKCkgdG8gZmV0Y2ggYSB1c2VyIG9iamVjdCB5b3UgY2FuIG1hbmlwdWxhdGUuYCk7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGNsb25lcyBhIEpTT04tc2VyaWFsaXphYmxlIG9iamVjdCB1c2luZyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpLlxyXG4gKiBOb3RlOiBPbmx5IHdvcmtzIGZvciBKU09OLXNhZmUgZGF0YS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ2xvbmUob2JqKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js": /*!*************************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js ***! \*************************************************************************/ /***/ (function(__unused_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 */ memoryLocalStorageAdapter: function() { return /* binding */ memoryLocalStorageAdapter; }\n/* harmony export */ });\n/**\r\n * Returns a localStorage-like object that stores the key-value pairs in\r\n * memory.\r\n */\r\nfunction memoryLocalStorageAdapter(store = {}) {\r\n return {\r\n getItem: (key) => {\r\n return store[key] || null;\r\n },\r\n setItem: (key, value) => {\r\n store[key] = value;\r\n },\r\n removeItem: (key) => {\r\n delete store[key];\r\n },\r\n };\r\n}\r\n//# sourceMappingURL=local-storage.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvbG9jYWwtc3RvcmFnZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyw2Q0FBNkM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL2xpYi9sb2NhbC1zdG9yYWdlLmpzPzU5NWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFJldHVybnMgYSBsb2NhbFN0b3JhZ2UtbGlrZSBvYmplY3QgdGhhdCBzdG9yZXMgdGhlIGtleS12YWx1ZSBwYWlycyBpblxyXG4gKiBtZW1vcnkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVtb3J5TG9jYWxTdG9yYWdlQWRhcHRlcihzdG9yZSA9IHt9KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGdldEl0ZW06IChrZXkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0b3JlW2tleV0gfHwgbnVsbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldEl0ZW06IChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHN0b3JlW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUl0ZW06IChrZXkpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIHN0b3JlW2tleV07XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9jYWwtc3RvcmFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js": /*!*****************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/locks.js ***! \*****************************************************************/ /***/ (function(__unused_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 */ LockAcquireTimeoutError: function() { return /* binding */ LockAcquireTimeoutError; },\n/* harmony export */ NavigatorLockAcquireTimeoutError: function() { return /* binding */ NavigatorLockAcquireTimeoutError; },\n/* harmony export */ ProcessLockAcquireTimeoutError: function() { return /* binding */ ProcessLockAcquireTimeoutError; },\n/* harmony export */ internals: function() { return /* binding */ internals; },\n/* harmony export */ navigatorLock: function() { return /* binding */ navigatorLock; },\n/* harmony export */ processLock: function() { return /* binding */ processLock; }\n/* harmony export */ });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n\r\n/**\r\n * @experimental\r\n */\r\nconst internals = {\r\n /**\r\n * @experimental\r\n */\r\n debug: !!(globalThis &&\r\n (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.supportsLocalStorage)() &&\r\n globalThis.localStorage &&\r\n globalThis.localStorage.getItem('supabase.gotrue-js.locks.debug') === 'true'),\r\n};\r\n/**\r\n * An error thrown when a lock cannot be acquired after some amount of time.\r\n *\r\n * Use the {@link #isAcquireTimeout} property instead of checking with `instanceof`.\r\n */\r\nclass LockAcquireTimeoutError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.isAcquireTimeout = true;\r\n }\r\n}\r\nclass NavigatorLockAcquireTimeoutError extends LockAcquireTimeoutError {\r\n}\r\nclass ProcessLockAcquireTimeoutError extends LockAcquireTimeoutError {\r\n}\r\n/**\r\n * Implements a global exclusive lock using the Navigator LockManager API. It\r\n * is available on all browsers released after 2022-03-15 with Safari being the\r\n * last one to release support. If the API is not available, this function will\r\n * throw. Make sure you check availablility before configuring {@link\r\n * GoTrueClient}.\r\n *\r\n * You can turn on debugging by setting the `supabase.gotrue-js.locks.debug`\r\n * local storage item to `true`.\r\n *\r\n * Internals:\r\n *\r\n * Since the LockManager API does not preserve stack traces for the async\r\n * function passed in the `request` method, a trick is used where acquiring the\r\n * lock releases a previously started promise to run the operation in the `fn`\r\n * function. The lock waits for that promise to finish (with or without error),\r\n * while the function will finally wait for the result anyway.\r\n *\r\n * @param name Name of the lock to be acquired.\r\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\r\n * the lock can't be acquired without waiting. If positive, the lock acquire\r\n * will time out after so many milliseconds. An error is\r\n * a timeout if it has `isAcquireTimeout` set to true.\r\n * @param fn The operation to run once the lock is acquired.\r\n */\r\nasync function navigatorLock(name, acquireTimeout, fn) {\r\n if (internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: acquire lock', name, acquireTimeout);\r\n }\r\n const abortController = new globalThis.AbortController();\r\n if (acquireTimeout > 0) {\r\n setTimeout(() => {\r\n abortController.abort();\r\n if (internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock acquire timed out', name);\r\n }\r\n }, acquireTimeout);\r\n }\r\n // MDN article: https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request\r\n // Wrapping navigator.locks.request() with a plain Promise is done as some\r\n // libraries like zone.js patch the Promise object to track the execution\r\n // context. However, it appears that most browsers use an internal promise\r\n // implementation when using the navigator.locks.request() API causing them\r\n // to lose context and emit confusing log messages or break certain features.\r\n // This wrapping is believed to help zone.js track the execution context\r\n // better.\r\n return await Promise.resolve().then(() => globalThis.navigator.locks.request(name, acquireTimeout === 0\r\n ? {\r\n mode: 'exclusive',\r\n ifAvailable: true,\r\n }\r\n : {\r\n mode: 'exclusive',\r\n signal: abortController.signal,\r\n }, async (lock) => {\r\n if (lock) {\r\n if (internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: acquired', name, lock.name);\r\n }\r\n try {\r\n return await fn();\r\n }\r\n finally {\r\n if (internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: released', name, lock.name);\r\n }\r\n }\r\n }\r\n else {\r\n if (acquireTimeout === 0) {\r\n if (internals.debug) {\r\n console.log('@supabase/gotrue-js: navigatorLock: not immediately available', name);\r\n }\r\n throw new NavigatorLockAcquireTimeoutError(`Acquiring an exclusive Navigator LockManager lock \"${name}\" immediately failed`);\r\n }\r\n else {\r\n if (internals.debug) {\r\n try {\r\n const result = await globalThis.navigator.locks.query();\r\n console.log('@supabase/gotrue-js: Navigator LockManager state', JSON.stringify(result, null, ' '));\r\n }\r\n catch (e) {\r\n console.warn('@supabase/gotrue-js: Error when querying Navigator LockManager state', e);\r\n }\r\n }\r\n // Browser is not following the Navigator LockManager spec, it\r\n // returned a null lock when we didn't use ifAvailable. So we can\r\n // pretend the lock is acquired in the name of backward compatibility\r\n // and user experience and just run the function.\r\n console.warn('@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request');\r\n return await fn();\r\n }\r\n }\r\n }));\r\n}\r\nconst PROCESS_LOCKS = {};\r\n/**\r\n * Implements a global exclusive lock that works only in the current process.\r\n * Useful for environments like React Native or other non-browser\r\n * single-process (i.e. no concept of \"tabs\") environments.\r\n *\r\n * Use {@link #navigatorLock} in browser environments.\r\n *\r\n * @param name Name of the lock to be acquired.\r\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\r\n * the lock can't be acquired without waiting. If positive, the lock acquire\r\n * will time out after so many milliseconds. An error is\r\n * a timeout if it has `isAcquireTimeout` set to true.\r\n * @param fn The operation to run once the lock is acquired.\r\n */\r\nasync function processLock(name, acquireTimeout, fn) {\r\n var _a;\r\n const previousOperation = (_a = PROCESS_LOCKS[name]) !== null && _a !== void 0 ? _a : Promise.resolve();\r\n const currentOperation = Promise.race([\r\n previousOperation.catch(() => {\r\n // ignore error of previous operation that we're waiting to finish\r\n return null;\r\n }),\r\n acquireTimeout >= 0\r\n ? new Promise((_, reject) => {\r\n setTimeout(() => {\r\n reject(new ProcessLockAcquireTimeoutError(`Acquring process lock with name \"${name}\" timed out`));\r\n }, acquireTimeout);\r\n })\r\n : null,\r\n ].filter((x) => x))\r\n .catch((e) => {\r\n if (e && e.isAcquireTimeout) {\r\n throw e;\r\n }\r\n return null;\r\n })\r\n .then(async () => {\r\n // previous operations finished and we didn't get a race on the acquire\r\n // timeout, so the current operation can finally start\r\n return await fn();\r\n });\r\n PROCESS_LOCKS[name] = currentOperation.catch(async (e) => {\r\n if (e && e.isAcquireTimeout) {\r\n // if the current operation timed out, it doesn't mean that the previous\r\n // operation finished, so we need contnue waiting for it to finish\r\n await previousOperation;\r\n return null;\r\n }\r\n throw e;\r\n });\r\n // finally wait for the current operation to finish successfully, with an\r\n // error or with an acquire timeout error\r\n return await currentOperation;\r\n}\r\n//# sourceMappingURL=locks.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvbG9ja3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4REFBb0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpSEFBaUgsS0FBSztBQUN0SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0JBQXNCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxrR0FBa0csS0FBSztBQUN2RyxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL2xvY2tzLmpzPzM2YTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3VwcG9ydHNMb2NhbFN0b3JhZ2UgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG4vKipcclxuICogQGV4cGVyaW1lbnRhbFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGludGVybmFscyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGV4cGVyaW1lbnRhbFxyXG4gICAgICovXHJcbiAgICBkZWJ1ZzogISEoZ2xvYmFsVGhpcyAmJlxyXG4gICAgICAgIHN1cHBvcnRzTG9jYWxTdG9yYWdlKCkgJiZcclxuICAgICAgICBnbG9iYWxUaGlzLmxvY2FsU3RvcmFnZSAmJlxyXG4gICAgICAgIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1cGFiYXNlLmdvdHJ1ZS1qcy5sb2Nrcy5kZWJ1ZycpID09PSAndHJ1ZScpLFxyXG59O1xyXG4vKipcclxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gYSBsb2NrIGNhbm5vdCBiZSBhY3F1aXJlZCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lLlxyXG4gKlxyXG4gKiBVc2UgdGhlIHtAbGluayAjaXNBY3F1aXJlVGltZW91dH0gcHJvcGVydHkgaW5zdGVhZCBvZiBjaGVja2luZyB3aXRoIGBpbnN0YW5jZW9mYC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmlzQWNxdWlyZVRpbWVvdXQgPSB0cnVlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0b3JMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciBleHRlbmRzIExvY2tBY3F1aXJlVGltZW91dEVycm9yIHtcclxufVxyXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0xvY2tBY3F1aXJlVGltZW91dEVycm9yIGV4dGVuZHMgTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3Ige1xyXG59XHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRzIGEgZ2xvYmFsIGV4Y2x1c2l2ZSBsb2NrIHVzaW5nIHRoZSBOYXZpZ2F0b3IgTG9ja01hbmFnZXIgQVBJLiBJdFxyXG4gKiBpcyBhdmFpbGFibGUgb24gYWxsIGJyb3dzZXJzIHJlbGVhc2VkIGFmdGVyIDIwMjItMDMtMTUgd2l0aCBTYWZhcmkgYmVpbmcgdGhlXHJcbiAqIGxhc3Qgb25lIHRvIHJlbGVhc2Ugc3VwcG9ydC4gSWYgdGhlIEFQSSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIHdpbGxcclxuICogdGhyb3cuIE1ha2Ugc3VyZSB5b3UgY2hlY2sgYXZhaWxhYmxpbGl0eSBiZWZvcmUgY29uZmlndXJpbmcge0BsaW5rXHJcbiAqIEdvVHJ1ZUNsaWVudH0uXHJcbiAqXHJcbiAqIFlvdSBjYW4gdHVybiBvbiBkZWJ1Z2dpbmcgYnkgc2V0dGluZyB0aGUgYHN1cGFiYXNlLmdvdHJ1ZS1qcy5sb2Nrcy5kZWJ1Z2BcclxuICogbG9jYWwgc3RvcmFnZSBpdGVtIHRvIGB0cnVlYC5cclxuICpcclxuICogSW50ZXJuYWxzOlxyXG4gKlxyXG4gKiBTaW5jZSB0aGUgTG9ja01hbmFnZXIgQVBJIGRvZXMgbm90IHByZXNlcnZlIHN0YWNrIHRyYWNlcyBmb3IgdGhlIGFzeW5jXHJcbiAqIGZ1bmN0aW9uIHBhc3NlZCBpbiB0aGUgYHJlcXVlc3RgIG1ldGhvZCwgYSB0cmljayBpcyB1c2VkIHdoZXJlIGFjcXVpcmluZyB0aGVcclxuICogbG9jayByZWxlYXNlcyBhIHByZXZpb3VzbHkgc3RhcnRlZCBwcm9taXNlIHRvIHJ1biB0aGUgb3BlcmF0aW9uIGluIHRoZSBgZm5gXHJcbiAqIGZ1bmN0aW9uLiBUaGUgbG9jayB3YWl0cyBmb3IgdGhhdCBwcm9taXNlIHRvIGZpbmlzaCAod2l0aCBvciB3aXRob3V0IGVycm9yKSxcclxuICogd2hpbGUgdGhlIGZ1bmN0aW9uIHdpbGwgZmluYWxseSB3YWl0IGZvciB0aGUgcmVzdWx0IGFueXdheS5cclxuICpcclxuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgbG9jayB0byBiZSBhY3F1aXJlZC5cclxuICogQHBhcmFtIGFjcXVpcmVUaW1lb3V0IElmIG5lZ2F0aXZlLCBubyB0aW1lb3V0LiBJZiAwIGFuIGVycm9yIGlzIHRocm93biBpZlxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2sgY2FuJ3QgYmUgYWNxdWlyZWQgd2l0aG91dCB3YWl0aW5nLiBJZiBwb3NpdGl2ZSwgdGhlIGxvY2sgYWNxdWlyZVxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgd2lsbCB0aW1lIG91dCBhZnRlciBzbyBtYW55IG1pbGxpc2Vjb25kcy4gQW4gZXJyb3IgaXNcclxuICogICAgICAgICAgICAgICAgICAgICAgIGEgdGltZW91dCBpZiBpdCBoYXMgYGlzQWNxdWlyZVRpbWVvdXRgIHNldCB0byB0cnVlLlxyXG4gKiBAcGFyYW0gZm4gVGhlIG9wZXJhdGlvbiB0byBydW4gb25jZSB0aGUgbG9jayBpcyBhY3F1aXJlZC5cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYXZpZ2F0b3JMb2NrKG5hbWUsIGFjcXVpcmVUaW1lb3V0LCBmbikge1xyXG4gICAgaWYgKGludGVybmFscy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrOiBhY3F1aXJlIGxvY2snLCBuYW1lLCBhY3F1aXJlVGltZW91dCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIoKTtcclxuICAgIGlmIChhY3F1aXJlVGltZW91dCA+IDApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVidWcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrIGFjcXVpcmUgdGltZWQgb3V0JywgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBhY3F1aXJlVGltZW91dCk7XHJcbiAgICB9XHJcbiAgICAvLyBNRE4gYXJ0aWNsZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0xvY2tNYW5hZ2VyL3JlcXVlc3RcclxuICAgIC8vIFdyYXBwaW5nIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KCkgd2l0aCBhIHBsYWluIFByb21pc2UgaXMgZG9uZSBhcyBzb21lXHJcbiAgICAvLyBsaWJyYXJpZXMgbGlrZSB6b25lLmpzIHBhdGNoIHRoZSBQcm9taXNlIG9iamVjdCB0byB0cmFjayB0aGUgZXhlY3V0aW9uXHJcbiAgICAvLyBjb250ZXh0LiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgbW9zdCBicm93c2VycyB1c2UgYW4gaW50ZXJuYWwgcHJvbWlzZVxyXG4gICAgLy8gaW1wbGVtZW50YXRpb24gd2hlbiB1c2luZyB0aGUgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QoKSBBUEkgY2F1c2luZyB0aGVtXHJcbiAgICAvLyB0byBsb3NlIGNvbnRleHQgYW5kIGVtaXQgY29uZnVzaW5nIGxvZyBtZXNzYWdlcyBvciBicmVhayBjZXJ0YWluIGZlYXR1cmVzLlxyXG4gICAgLy8gVGhpcyB3cmFwcGluZyBpcyBiZWxpZXZlZCB0byBoZWxwIHpvbmUuanMgdHJhY2sgdGhlIGV4ZWN1dGlvbiBjb250ZXh0XHJcbiAgICAvLyBiZXR0ZXIuXHJcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBnbG9iYWxUaGlzLm5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KG5hbWUsIGFjcXVpcmVUaW1lb3V0ID09PSAwXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIG1vZGU6ICdleGNsdXNpdmUnLFxyXG4gICAgICAgICAgICBpZkF2YWlsYWJsZTogdHJ1ZSxcclxuICAgICAgICB9XHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgIG1vZGU6ICdleGNsdXNpdmUnLFxyXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgfSwgYXN5bmMgKGxvY2spID0+IHtcclxuICAgICAgICBpZiAobG9jaykge1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJuYWxzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQHN1cGFiYXNlL2dvdHJ1ZS1qczogbmF2aWdhdG9yTG9jazogYWNxdWlyZWQnLCBuYW1lLCBsb2NrLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVidWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQHN1cGFiYXNlL2dvdHJ1ZS1qczogbmF2aWdhdG9yTG9jazogcmVsZWFzZWQnLCBuYW1lLCBsb2NrLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYWNxdWlyZVRpbWVvdXQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVidWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQHN1cGFiYXNlL2dvdHJ1ZS1qczogbmF2aWdhdG9yTG9jazogbm90IGltbWVkaWF0ZWx5IGF2YWlsYWJsZScsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yKGBBY3F1aXJpbmcgYW4gZXhjbHVzaXZlIE5hdmlnYXRvciBMb2NrTWFuYWdlciBsb2NrIFwiJHtuYW1lfVwiIGltbWVkaWF0ZWx5IGZhaWxlZGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFscy5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdsb2JhbFRoaXMubmF2aWdhdG9yLmxvY2tzLnF1ZXJ5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBOYXZpZ2F0b3IgTG9ja01hbmFnZXIgc3RhdGUnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsICcgICcpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBFcnJvciB3aGVuIHF1ZXJ5aW5nIE5hdmlnYXRvciBMb2NrTWFuYWdlciBzdGF0ZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEJyb3dzZXIgaXMgbm90IGZvbGxvd2luZyB0aGUgTmF2aWdhdG9yIExvY2tNYW5hZ2VyIHNwZWMsIGl0XHJcbiAgICAgICAgICAgICAgICAvLyByZXR1cm5lZCBhIG51bGwgbG9jayB3aGVuIHdlIGRpZG4ndCB1c2UgaWZBdmFpbGFibGUuIFNvIHdlIGNhblxyXG4gICAgICAgICAgICAgICAgLy8gcHJldGVuZCB0aGUgbG9jayBpcyBhY3F1aXJlZCBpbiB0aGUgbmFtZSBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XHJcbiAgICAgICAgICAgICAgICAvLyBhbmQgdXNlciBleHBlcmllbmNlIGFuZCBqdXN0IHJ1biB0aGUgZnVuY3Rpb24uXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0BzdXBhYmFzZS9nb3RydWUtanM6IE5hdmlnYXRvciBMb2NrTWFuYWdlciByZXR1cm5lZCBhIG51bGwgbG9jayB3aGVuIHVzaW5nICNyZXF1ZXN0IHdpdGhvdXQgaWZBdmFpbGFibGUgc2V0IHRvIHRydWUsIGl0IGFwcGVhcnMgdGhpcyBicm93c2VyIGlzIG5vdCBmb2xsb3dpbmcgdGhlIExvY2tNYW5hZ2VyIHNwZWMgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0xvY2tNYW5hZ2VyL3JlcXVlc3QnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbmNvbnN0IFBST0NFU1NfTE9DS1MgPSB7fTtcclxuLyoqXHJcbiAqIEltcGxlbWVudHMgYSBnbG9iYWwgZXhjbHVzaXZlIGxvY2sgdGhhdCB3b3JrcyBvbmx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MuXHJcbiAqIFVzZWZ1bCBmb3IgZW52aXJvbm1lbnRzIGxpa2UgUmVhY3QgTmF0aXZlIG9yIG90aGVyIG5vbi1icm93c2VyXHJcbiAqIHNpbmdsZS1wcm9jZXNzIChpLmUuIG5vIGNvbmNlcHQgb2YgXCJ0YWJzXCIpIGVudmlyb25tZW50cy5cclxuICpcclxuICogVXNlIHtAbGluayAjbmF2aWdhdG9yTG9ja30gaW4gYnJvd3NlciBlbnZpcm9ubWVudHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGxvY2sgdG8gYmUgYWNxdWlyZWQuXHJcbiAqIEBwYXJhbSBhY3F1aXJlVGltZW91dCBJZiBuZWdhdGl2ZSwgbm8gdGltZW91dC4gSWYgMCBhbiBlcnJvciBpcyB0aHJvd24gaWZcclxuICogICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NrIGNhbid0IGJlIGFjcXVpcmVkIHdpdGhvdXQgd2FpdGluZy4gSWYgcG9zaXRpdmUsIHRoZSBsb2NrIGFjcXVpcmVcclxuICogICAgICAgICAgICAgICAgICAgICAgIHdpbGwgdGltZSBvdXQgYWZ0ZXIgc28gbWFueSBtaWxsaXNlY29uZHMuIEFuIGVycm9yIGlzXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICBhIHRpbWVvdXQgaWYgaXQgaGFzIGBpc0FjcXVpcmVUaW1lb3V0YCBzZXQgdG8gdHJ1ZS5cclxuICogQHBhcmFtIGZuIFRoZSBvcGVyYXRpb24gdG8gcnVuIG9uY2UgdGhlIGxvY2sgaXMgYWNxdWlyZWQuXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0xvY2sobmFtZSwgYWNxdWlyZVRpbWVvdXQsIGZuKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBjb25zdCBwcmV2aW91c09wZXJhdGlvbiA9IChfYSA9IFBST0NFU1NfTE9DS1NbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudE9wZXJhdGlvbiA9IFByb21pc2UucmFjZShbXHJcbiAgICAgICAgcHJldmlvdXNPcGVyYXRpb24uY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3Igb2YgcHJldmlvdXMgb3BlcmF0aW9uIHRoYXQgd2UncmUgd2FpdGluZyB0byBmaW5pc2hcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgYWNxdWlyZVRpbWVvdXQgPj0gMFxyXG4gICAgICAgICAgICA/IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgUHJvY2Vzc0xvY2tBY3F1aXJlVGltZW91dEVycm9yKGBBY3F1cmluZyBwcm9jZXNzIGxvY2sgd2l0aCBuYW1lIFwiJHtuYW1lfVwiIHRpbWVkIG91dGApKTtcclxuICAgICAgICAgICAgICAgIH0sIGFjcXVpcmVUaW1lb3V0KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgXS5maWx0ZXIoKHgpID0+IHgpKVxyXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlICYmIGUuaXNBY3F1aXJlVGltZW91dCkge1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0pXHJcbiAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIC8vIHByZXZpb3VzIG9wZXJhdGlvbnMgZmluaXNoZWQgYW5kIHdlIGRpZG4ndCBnZXQgYSByYWNlIG9uIHRoZSBhY3F1aXJlXHJcbiAgICAgICAgLy8gdGltZW91dCwgc28gdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGNhbiBmaW5hbGx5IHN0YXJ0XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XHJcbiAgICB9KTtcclxuICAgIFBST0NFU1NfTE9DS1NbbmFtZV0gPSBjdXJyZW50T3BlcmF0aW9uLmNhdGNoKGFzeW5jIChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGUgJiYgZS5pc0FjcXVpcmVUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IG9wZXJhdGlvbiB0aW1lZCBvdXQsIGl0IGRvZXNuJ3QgbWVhbiB0aGF0IHRoZSBwcmV2aW91c1xyXG4gICAgICAgICAgICAvLyBvcGVyYXRpb24gZmluaXNoZWQsIHNvIHdlIG5lZWQgY29udG51ZSB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2hcclxuICAgICAgICAgICAgYXdhaXQgcHJldmlvdXNPcGVyYXRpb247XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBlO1xyXG4gICAgfSk7XHJcbiAgICAvLyBmaW5hbGx5IHdhaXQgZm9yIHRoZSBjdXJyZW50IG9wZXJhdGlvbiB0byBmaW5pc2ggc3VjY2Vzc2Z1bGx5LCB3aXRoIGFuXHJcbiAgICAvLyBlcnJvciBvciB3aXRoIGFuIGFjcXVpcmUgdGltZW91dCBlcnJvclxyXG4gICAgcmV0dXJuIGF3YWl0IGN1cnJlbnRPcGVyYXRpb247XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9ja3MuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js": /*!*********************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js ***! \*********************************************************************/ /***/ (function(__unused_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 */ polyfillGlobalThis: function() { return /* binding */ polyfillGlobalThis; }\n/* harmony export */ });\n/**\r\n * https://mathiasbynens.be/notes/globalthis\r\n */\r\nfunction polyfillGlobalThis() {\r\n if (typeof globalThis === 'object')\r\n return;\r\n try {\r\n Object.defineProperty(Object.prototype, '__magic__', {\r\n get: function () {\r\n return this;\r\n },\r\n configurable: true,\r\n });\r\n // @ts-expect-error 'Allow access to magic'\r\n __magic__.globalThis = __magic__;\r\n // @ts-expect-error 'Allow access to magic'\r\n delete Object.prototype.__magic__;\r\n }\r\n catch (e) {\r\n if (typeof self !== 'undefined') {\r\n // @ts-expect-error 'Allow access to globals'\r\n self.globalThis = self;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=polyfills.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvcG9seWZpbGxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL3BvbHlmaWxscy5qcz9mMTY0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvZ2xvYmFsdGhpc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBvbHlmaWxsR2xvYmFsVGhpcygpIHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgJ19fbWFnaWNfXycsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgJ0FsbG93IGFjY2VzcyB0byBtYWdpYydcclxuICAgICAgICBfX21hZ2ljX18uZ2xvYmFsVGhpcyA9IF9fbWFnaWNfXztcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yICdBbGxvdyBhY2Nlc3MgdG8gbWFnaWMnXHJcbiAgICAgICAgZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuX19tYWdpY19fO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgJ0FsbG93IGFjY2VzcyB0byBnbG9iYWxzJ1xyXG4gICAgICAgICAgICBzZWxmLmdsb2JhbFRoaXMgPSBzZWxmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2x5ZmlsbHMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js": /*!*****************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/types.js ***! \*****************************************************************/ /***/ (function(__unused_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 */ SIGN_OUT_SCOPES: function() { return /* binding */ SIGN_OUT_SCOPES; }\n/* harmony export */ });\nconst SIGN_OUT_SCOPES = ['global', 'local', 'others'];\r\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvdHlwZXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1AiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL2xpYi90eXBlcy5qcz8yYjViIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBTSUdOX09VVF9TQ09QRVMgPSBbJ2dsb2JhbCcsICdsb2NhbCcsICdvdGhlcnMnXTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js": /*!*******************************************************************!*\ !*** ./node_modules/@supabase/auth-js/dist/module/lib/version.js ***! \*******************************************************************/ /***/ (function(__unused_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 */ version: function() { return /* binding */ version; }\n/* harmony export */ });\nconst version = '2.71.1';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvdmVyc2lvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL3ZlcnNpb24uanM/ZjIwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICcyLjcxLjEnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js": /*!****************************************************************************!*\ !*** ./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js ***! \****************************************************************************/ /***/ (function(__unused_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 */ FunctionsClient: function() { return /* binding */ FunctionsClient; }\n/* harmony export */ });\n/* harmony import */ var _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helper */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/helper.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\nclass FunctionsClient {\r\n constructor(url, { headers = {}, customFetch, region = _types__WEBPACK_IMPORTED_MODULE_0__.FunctionRegion.Any, } = {}) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.region = region;\r\n this.fetch = (0,_helper__WEBPACK_IMPORTED_MODULE_1__.resolveFetch)(customFetch);\r\n }\r\n /**\r\n * Updates the authorization header\r\n * @param token - the new jwt token sent in the authorisation header\r\n */\r\n setAuth(token) {\r\n this.headers.Authorization = `Bearer ${token}`;\r\n }\r\n /**\r\n * Invokes a function\r\n * @param functionName - The name of the Function to invoke.\r\n * @param options - Options for invoking the Function.\r\n */\r\n invoke(functionName, options = {}) {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const { headers, method, body: functionArgs } = options;\r\n let _headers = {};\r\n let { region } = options;\r\n if (!region) {\r\n region = this.region;\r\n }\r\n // Add region as query parameter using URL API\r\n const url = new URL(`${this.url}/${functionName}`);\r\n if (region && region !== 'any') {\r\n _headers['x-region'] = region;\r\n url.searchParams.set('forceFunctionRegion', region);\r\n }\r\n let body;\r\n if (functionArgs &&\r\n ((headers && !Object.prototype.hasOwnProperty.call(headers, 'Content-Type')) || !headers)) {\r\n if ((typeof Blob !== 'undefined' && functionArgs instanceof Blob) ||\r\n functionArgs instanceof ArrayBuffer) {\r\n // will work for File as File inherits Blob\r\n // also works for ArrayBuffer as it is the same underlying structure as a Blob\r\n _headers['Content-Type'] = 'application/octet-stream';\r\n body = functionArgs;\r\n }\r\n else if (typeof functionArgs === 'string') {\r\n // plain string\r\n _headers['Content-Type'] = 'text/plain';\r\n body = functionArgs;\r\n }\r\n else if (typeof FormData !== 'undefined' && functionArgs instanceof FormData) {\r\n // don't set content-type headers\r\n // Request will automatically add the right boundary value\r\n body = functionArgs;\r\n }\r\n else {\r\n // default, assume this is JSON\r\n _headers['Content-Type'] = 'application/json';\r\n body = JSON.stringify(functionArgs);\r\n }\r\n }\r\n const response = yield this.fetch(url.toString(), {\r\n method: method || 'POST',\r\n // headers priority is (high to low):\r\n // 1. invoke-level headers\r\n // 2. client-level headers\r\n // 3. default Content-Type header\r\n headers: Object.assign(Object.assign(Object.assign({}, _headers), this.headers), headers),\r\n body,\r\n }).catch((fetchError) => {\r\n throw new _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsFetchError(fetchError);\r\n });\r\n const isRelayError = response.headers.get('x-relay-error');\r\n if (isRelayError && isRelayError === 'true') {\r\n throw new _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsRelayError(response);\r\n }\r\n if (!response.ok) {\r\n throw new _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsHttpError(response);\r\n }\r\n let responseType = ((_a = response.headers.get('Content-Type')) !== null && _a !== void 0 ? _a : 'text/plain').split(';')[0].trim();\r\n let data;\r\n if (responseType === 'application/json') {\r\n data = yield response.json();\r\n }\r\n else if (responseType === 'application/octet-stream') {\r\n data = yield response.blob();\r\n }\r\n else if (responseType === 'text/event-stream') {\r\n data = response;\r\n }\r\n else if (responseType === 'multipart/form-data') {\r\n data = yield response.formData();\r\n }\r\n else {\r\n // default to text\r\n data = yield response.text();\r\n }\r\n return { data, error: null, response };\r\n }\r\n catch (error) {\r\n return {\r\n data: null,\r\n error,\r\n response: error instanceof _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsHttpError || error instanceof _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsRelayError\r\n ? error.context\r\n : undefined,\r\n };\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=FunctionsClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL0Z1bmN0aW9uc0NsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDd0M7QUFDZ0U7QUFDakc7QUFDUCx1QkFBdUIsWUFBWSx3QkFBd0Isa0RBQWMsUUFBUSxJQUFJO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixxREFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsTUFBTTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNDQUFzQztBQUM5RDtBQUNBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFNBQVMsR0FBRyxhQUFhO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTtBQUN6RTtBQUNBLGlCQUFpQjtBQUNqQiw4QkFBOEIsdURBQW1CO0FBQ2pELGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsOEJBQThCLHVEQUFtQjtBQUNqRDtBQUNBO0FBQ0EsOEJBQThCLHNEQUFrQjtBQUNoRDtBQUNBLHVJQUF1STtBQUN2STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0Msc0RBQWtCLHFCQUFxQix1REFBbUI7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL0Z1bmN0aW9uc0NsaWVudC5qcz9hZGM0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IHsgcmVzb2x2ZUZldGNoIH0gZnJvbSAnLi9oZWxwZXInO1xyXG5pbXBvcnQgeyBGdW5jdGlvbnNGZXRjaEVycm9yLCBGdW5jdGlvbnNIdHRwRXJyb3IsIEZ1bmN0aW9uc1JlbGF5RXJyb3IsIEZ1bmN0aW9uUmVnaW9uLCB9IGZyb20gJy4vdHlwZXMnO1xyXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25zQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCwgeyBoZWFkZXJzID0ge30sIGN1c3RvbUZldGNoLCByZWdpb24gPSBGdW5jdGlvblJlZ2lvbi5BbnksIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgICAgICAgdGhpcy5yZWdpb24gPSByZWdpb247XHJcbiAgICAgICAgdGhpcy5mZXRjaCA9IHJlc29sdmVGZXRjaChjdXN0b21GZXRjaCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyXHJcbiAgICAgKiBAcGFyYW0gdG9rZW4gLSB0aGUgbmV3IGp3dCB0b2tlbiBzZW50IGluIHRoZSBhdXRob3Jpc2F0aW9uIGhlYWRlclxyXG4gICAgICovXHJcbiAgICBzZXRBdXRoKHRva2VuKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyBhIGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIEZ1bmN0aW9uIHRvIGludm9rZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgaW52b2tpbmcgdGhlIEZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBpbnZva2UoZnVuY3Rpb25OYW1lLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVycywgbWV0aG9kLCBib2R5OiBmdW5jdGlvbkFyZ3MgfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBsZXQgX2hlYWRlcnMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGxldCB7IHJlZ2lvbiB9ID0gb3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGlmICghcmVnaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gdGhpcy5yZWdpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBBZGQgcmVnaW9uIGFzIHF1ZXJ5IHBhcmFtZXRlciB1c2luZyBVUkwgQVBJXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMudXJsfS8ke2Z1bmN0aW9uTmFtZX1gKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9PSAnYW55Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIF9oZWFkZXJzWyd4LXJlZ2lvbiddID0gcmVnaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdmb3JjZUZ1bmN0aW9uUmVnaW9uJywgcmVnaW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQXJncyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICgoaGVhZGVycyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKSkgfHwgIWhlYWRlcnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgZnVuY3Rpb25BcmdzIGluc3RhbmNlb2YgQmxvYikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25BcmdzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCB3b3JrIGZvciBGaWxlIGFzIEZpbGUgaW5oZXJpdHMgQmxvYlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIHdvcmtzIGZvciBBcnJheUJ1ZmZlciBhcyBpdCBpcyB0aGUgc2FtZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBhcyBhIEJsb2JcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmdW5jdGlvbkFyZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmdW5jdGlvbkFyZ3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWluIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmdW5jdGlvbkFyZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgZnVuY3Rpb25BcmdzIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc2V0IGNvbnRlbnQtdHlwZSBoZWFkZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVlc3Qgd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgcmlnaHQgYm91bmRhcnkgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGZ1bmN0aW9uQXJncztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQsIGFzc3VtZSB0aGlzIGlzIEpTT05cclxuICAgICAgICAgICAgICAgICAgICAgICAgX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoZnVuY3Rpb25BcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMuZmV0Y2godXJsLnRvU3RyaW5nKCksIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCB8fCAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVycyBwcmlvcml0eSBpcyAoaGlnaCB0byBsb3cpOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDEuIGludm9rZS1sZXZlbCBoZWFkZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gY2xpZW50LWxldmVsIGhlYWRlcnNcclxuICAgICAgICAgICAgICAgICAgICAvLyAzLiBkZWZhdWx0IENvbnRlbnQtVHlwZSBoZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgX2hlYWRlcnMpLCB0aGlzLmhlYWRlcnMpLCBoZWFkZXJzKSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5LFxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGZldGNoRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRnVuY3Rpb25zRmV0Y2hFcnJvcihmZXRjaEVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWxheUVycm9yID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtcmVsYXktZXJyb3InKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1JlbGF5RXJyb3IgJiYgaXNSZWxheUVycm9yID09PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRnVuY3Rpb25zUmVsYXlFcnJvcihyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1bmN0aW9uc0h0dHBFcnJvcihyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VUeXBlID0gKChfYSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ3RleHQvcGxhaW4nKS5zcGxpdCgnOycpWzBdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHlpZWxkIHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgcmVzcG9uc2UuYmxvYigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSAndGV4dC9ldmVudC1zdHJlYW0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgcmVzcG9uc2UuZm9ybURhdGEoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB5aWVsZCByZXNwb25zZS50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCwgcmVzcG9uc2UgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbnNIdHRwRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbnNSZWxheUVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3IuY29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1GdW5jdGlvbnNDbGllbnQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/helper.js": /*!*******************************************************************!*\ !*** ./node_modules/@supabase/functions-js/dist/module/helper.js ***! \*******************************************************************/ /***/ (function(__unused_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 */ resolveFetch: function() { return /* binding */ resolveFetch; }\n/* harmony export */ });\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! @supabase/node-fetch */ \"(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\")).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\n//# sourceMappingURL=helper.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL2hlbHBlci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHNMQUE4QixTQUFTLGdCQUFnQjtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21vZHVsZS9oZWxwZXIuanM/YjBiNCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcmVzb2x2ZUZldGNoID0gKGN1c3RvbUZldGNoKSA9PiB7XHJcbiAgICBsZXQgX2ZldGNoO1xyXG4gICAgaWYgKGN1c3RvbUZldGNoKSB7XHJcbiAgICAgICAgX2ZldGNoID0gY3VzdG9tRmV0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgX2ZldGNoID0gKC4uLmFyZ3MpID0+IGltcG9ydCgnQHN1cGFiYXNlL25vZGUtZmV0Y2gnKS50aGVuKCh7IGRlZmF1bHQ6IGZldGNoIH0pID0+IGZldGNoKC4uLmFyZ3MpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIF9mZXRjaCA9IGZldGNoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiBfZmV0Y2goLi4uYXJncyk7XHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/helper.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js": /*!******************************************************************!*\ !*** ./node_modules/@supabase/functions-js/dist/module/types.js ***! \******************************************************************/ /***/ (function(__unused_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 */ FunctionRegion: function() { return /* binding */ FunctionRegion; },\n/* harmony export */ FunctionsError: function() { return /* binding */ FunctionsError; },\n/* harmony export */ FunctionsFetchError: function() { return /* binding */ FunctionsFetchError; },\n/* harmony export */ FunctionsHttpError: function() { return /* binding */ FunctionsHttpError; },\n/* harmony export */ FunctionsRelayError: function() { return /* binding */ FunctionsRelayError; }\n/* harmony export */ });\nclass FunctionsError extends Error {\r\n constructor(message, name = 'FunctionsError', context) {\r\n super(message);\r\n this.name = name;\r\n this.context = context;\r\n }\r\n}\r\nclass FunctionsFetchError extends FunctionsError {\r\n constructor(context) {\r\n super('Failed to send a request to the Edge Function', 'FunctionsFetchError', context);\r\n }\r\n}\r\nclass FunctionsRelayError extends FunctionsError {\r\n constructor(context) {\r\n super('Relay Error invoking the Edge Function', 'FunctionsRelayError', context);\r\n }\r\n}\r\nclass FunctionsHttpError extends FunctionsError {\r\n constructor(context) {\r\n super('Edge Function returned a non-2xx status code', 'FunctionsHttpError', context);\r\n }\r\n}\r\n// Define the enum for the 'region' property\r\nvar FunctionRegion;\r\n(function (FunctionRegion) {\r\n FunctionRegion[\"Any\"] = \"any\";\r\n FunctionRegion[\"ApNortheast1\"] = \"ap-northeast-1\";\r\n FunctionRegion[\"ApNortheast2\"] = \"ap-northeast-2\";\r\n FunctionRegion[\"ApSouth1\"] = \"ap-south-1\";\r\n FunctionRegion[\"ApSoutheast1\"] = \"ap-southeast-1\";\r\n FunctionRegion[\"ApSoutheast2\"] = \"ap-southeast-2\";\r\n FunctionRegion[\"CaCentral1\"] = \"ca-central-1\";\r\n FunctionRegion[\"EuCentral1\"] = \"eu-central-1\";\r\n FunctionRegion[\"EuWest1\"] = \"eu-west-1\";\r\n FunctionRegion[\"EuWest2\"] = \"eu-west-2\";\r\n FunctionRegion[\"EuWest3\"] = \"eu-west-3\";\r\n FunctionRegion[\"SaEast1\"] = \"sa-east-1\";\r\n FunctionRegion[\"UsEast1\"] = \"us-east-1\";\r\n FunctionRegion[\"UsWest1\"] = \"us-west-1\";\r\n FunctionRegion[\"UsWest2\"] = \"us-west-2\";\r\n})(FunctionRegion || (FunctionRegion = {}));\r\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL3R5cGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QztBQUN6QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21vZHVsZS90eXBlcy5qcz80OTFhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBGdW5jdGlvbnNFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG5hbWUgPSAnRnVuY3Rpb25zRXJyb3InLCBjb250ZXh0KSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbnNGZXRjaEVycm9yIGV4dGVuZHMgRnVuY3Rpb25zRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoY29udGV4dCkge1xyXG4gICAgICAgIHN1cGVyKCdGYWlsZWQgdG8gc2VuZCBhIHJlcXVlc3QgdG8gdGhlIEVkZ2UgRnVuY3Rpb24nLCAnRnVuY3Rpb25zRmV0Y2hFcnJvcicsIGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbnNSZWxheUVycm9yIGV4dGVuZHMgRnVuY3Rpb25zRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoY29udGV4dCkge1xyXG4gICAgICAgIHN1cGVyKCdSZWxheSBFcnJvciBpbnZva2luZyB0aGUgRWRnZSBGdW5jdGlvbicsICdGdW5jdGlvbnNSZWxheUVycm9yJywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uc0h0dHBFcnJvciBleHRlbmRzIEZ1bmN0aW9uc0Vycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcclxuICAgICAgICBzdXBlcignRWRnZSBGdW5jdGlvbiByZXR1cm5lZCBhIG5vbi0yeHggc3RhdHVzIGNvZGUnLCAnRnVuY3Rpb25zSHR0cEVycm9yJywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuLy8gRGVmaW5lIHRoZSBlbnVtIGZvciB0aGUgJ3JlZ2lvbicgcHJvcGVydHlcclxuZXhwb3J0IHZhciBGdW5jdGlvblJlZ2lvbjtcclxuKGZ1bmN0aW9uIChGdW5jdGlvblJlZ2lvbikge1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJBbnlcIl0gPSBcImFueVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJBcE5vcnRoZWFzdDFcIl0gPSBcImFwLW5vcnRoZWFzdC0xXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIkFwTm9ydGhlYXN0MlwiXSA9IFwiYXAtbm9ydGhlYXN0LTJcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiQXBTb3V0aDFcIl0gPSBcImFwLXNvdXRoLTFcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiQXBTb3V0aGVhc3QxXCJdID0gXCJhcC1zb3V0aGVhc3QtMVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJBcFNvdXRoZWFzdDJcIl0gPSBcImFwLXNvdXRoZWFzdC0yXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIkNhQ2VudHJhbDFcIl0gPSBcImNhLWNlbnRyYWwtMVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJFdUNlbnRyYWwxXCJdID0gXCJldS1jZW50cmFsLTFcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiRXVXZXN0MVwiXSA9IFwiZXUtd2VzdC0xXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIkV1V2VzdDJcIl0gPSBcImV1LXdlc3QtMlwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJFdVdlc3QzXCJdID0gXCJldS13ZXN0LTNcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiU2FFYXN0MVwiXSA9IFwic2EtZWFzdC0xXCI7XHJcbiAgICBGdW5jdGlvblJlZ2lvbltcIlVzRWFzdDFcIl0gPSBcInVzLWVhc3QtMVwiO1xyXG4gICAgRnVuY3Rpb25SZWdpb25bXCJVc1dlc3QxXCJdID0gXCJ1cy13ZXN0LTFcIjtcclxuICAgIEZ1bmN0aW9uUmVnaW9uW1wiVXNXZXN0MlwiXSA9IFwidXMtd2VzdC0yXCI7XHJcbn0pKEZ1bmN0aW9uUmVnaW9uIHx8IChGdW5jdGlvblJlZ2lvbiA9IHt9KSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js": /*!******************************************************!*\ !*** ./node_modules/@supabase/node-fetch/browser.js ***! \******************************************************/ /***/ (function(__unused_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 */ Headers: function() { return /* binding */ Headers; },\n/* harmony export */ Request: function() { return /* binding */ Request; },\n/* harmony export */ Response: function() { return /* binding */ Response; },\n/* harmony export */ fetch: function() { return /* binding */ fetch; }\n/* harmony export */ });\n\r\n\r\n// ref: https://github.com/tc39/proposal-global\r\nvar getGlobal = function() {\r\n // the only reliable means to get the global object is\r\n // `Function('return this')()`\r\n // However, this causes CSP violations in Chrome apps.\r\n if (typeof self !== 'undefined') { return self; }\r\n if (typeof window !== 'undefined') { return window; }\r\n if (typeof __webpack_require__.g !== 'undefined') { return __webpack_require__.g; }\r\n throw new Error('unable to locate global object');\r\n}\r\n\r\nvar globalObject = getGlobal();\r\n\r\nconst fetch = globalObject.fetch;\r\n\r\n/* harmony default export */ __webpack_exports__[\"default\"] = (globalObject.fetch.bind(globalObject));\r\n\r\nconst Headers = globalObject.Headers;\r\nconst Request = globalObject.Request;\r\nconst Response = globalObject.Response;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvbm9kZS1mZXRjaC9icm93c2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qyx5Q0FBeUM7QUFDekMsZUFBZSxxQkFBTSxvQkFBb0IsT0FBTyxxQkFBTTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLCtEQUFlLHFDQUFxQyxFQUFDO0FBQ3JEO0FBQ087QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvbm9kZS1mZXRjaC9icm93c2VyLmpzP2VjNTkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxyXG52YXIgZ2V0R2xvYmFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvLyB0aGUgb25seSByZWxpYWJsZSBtZWFucyB0byBnZXQgdGhlIGdsb2JhbCBvYmplY3QgaXNcclxuICAgIC8vIGBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpYFxyXG4gICAgLy8gSG93ZXZlciwgdGhpcyBjYXVzZXMgQ1NQIHZpb2xhdGlvbnMgaW4gQ2hyb21lIGFwcHMuXHJcbiAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cclxuICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Jyk7XHJcbn1cclxuXHJcbnZhciBnbG9iYWxPYmplY3QgPSBnZXRHbG9iYWwoKTtcclxuXHJcbmV4cG9ydCBjb25zdCBmZXRjaCA9IGdsb2JhbE9iamVjdC5mZXRjaDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdsb2JhbE9iamVjdC5mZXRjaC5iaW5kKGdsb2JhbE9iamVjdCk7XHJcblxyXG5leHBvcnQgY29uc3QgSGVhZGVycyA9IGdsb2JhbE9iamVjdC5IZWFkZXJzO1xyXG5leHBvcnQgY29uc3QgUmVxdWVzdCA9IGdsb2JhbE9iamVjdC5SZXF1ZXN0O1xyXG5leHBvcnQgY29uc3QgUmVzcG9uc2UgPSBnbG9iYWxPYmplY3QuUmVzcG9uc2U7XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js": /*!**************************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js ***! \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n// @ts-ignore\r\nconst node_fetch_1 = __importDefault(__webpack_require__(/*! @supabase/node-fetch */ \"(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\"));\r\nconst PostgrestError_1 = __importDefault(__webpack_require__(/*! ./PostgrestError */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js\"));\r\nclass PostgrestBuilder {\r\n constructor(builder) {\r\n this.shouldThrowOnError = false;\r\n this.method = builder.method;\r\n this.url = builder.url;\r\n this.headers = builder.headers;\r\n this.schema = builder.schema;\r\n this.body = builder.body;\r\n this.shouldThrowOnError = builder.shouldThrowOnError;\r\n this.signal = builder.signal;\r\n this.isMaybeSingle = builder.isMaybeSingle;\r\n if (builder.fetch) {\r\n this.fetch = builder.fetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n this.fetch = node_fetch_1.default;\r\n }\r\n else {\r\n this.fetch = fetch;\r\n }\r\n }\r\n /**\r\n * If there's an error with the query, throwOnError will reject the promise by\r\n * throwing the error instead of returning it as part of a successful response.\r\n *\r\n * {@link https://github.com/supabase/supabase-js/issues/92}\r\n */\r\n throwOnError() {\r\n this.shouldThrowOnError = true;\r\n return this;\r\n }\r\n /**\r\n * Set an HTTP header for the request.\r\n */\r\n setHeader(name, value) {\r\n this.headers = Object.assign({}, this.headers);\r\n this.headers[name] = value;\r\n return this;\r\n }\r\n then(onfulfilled, onrejected) {\r\n // https://postgrest.org/en/stable/api.html#switching-schemas\r\n if (this.schema === undefined) {\r\n // skip\r\n }\r\n else if (['GET', 'HEAD'].includes(this.method)) {\r\n this.headers['Accept-Profile'] = this.schema;\r\n }\r\n else {\r\n this.headers['Content-Profile'] = this.schema;\r\n }\r\n if (this.method !== 'GET' && this.method !== 'HEAD') {\r\n this.headers['Content-Type'] = 'application/json';\r\n }\r\n // NOTE: Invoke w/o `this` to avoid illegal invocation error.\r\n // https://github.com/supabase/postgrest-js/pull/247\r\n const _fetch = this.fetch;\r\n let res = _fetch(this.url.toString(), {\r\n method: this.method,\r\n headers: this.headers,\r\n body: JSON.stringify(this.body),\r\n signal: this.signal,\r\n }).then(async (res) => {\r\n var _a, _b, _c;\r\n let error = null;\r\n let data = null;\r\n let count = null;\r\n let status = res.status;\r\n let statusText = res.statusText;\r\n if (res.ok) {\r\n if (this.method !== 'HEAD') {\r\n const body = await res.text();\r\n if (body === '') {\r\n // Prefer: return=minimal\r\n }\r\n else if (this.headers['Accept'] === 'text/csv') {\r\n data = body;\r\n }\r\n else if (this.headers['Accept'] &&\r\n this.headers['Accept'].includes('application/vnd.pgrst.plan+text')) {\r\n data = body;\r\n }\r\n else {\r\n data = JSON.parse(body);\r\n }\r\n }\r\n const countHeader = (_a = this.headers['Prefer']) === null || _a === void 0 ? void 0 : _a.match(/count=(exact|planned|estimated)/);\r\n const contentRange = (_b = res.headers.get('content-range')) === null || _b === void 0 ? void 0 : _b.split('/');\r\n if (countHeader && contentRange && contentRange.length > 1) {\r\n count = parseInt(contentRange[1]);\r\n }\r\n // Temporary partial fix for https://github.com/supabase/postgrest-js/issues/361\r\n // Issue persists e.g. for `.insert([...]).select().maybeSingle()`\r\n if (this.isMaybeSingle && this.method === 'GET' && Array.isArray(data)) {\r\n if (data.length > 1) {\r\n error = {\r\n // https://github.com/PostgREST/postgrest/blob/a867d79c42419af16c18c3fb019eba8df992626f/src/PostgREST/Error.hs#L553\r\n code: 'PGRST116',\r\n details: `Results contain ${data.length} rows, application/vnd.pgrst.object+json requires 1 row`,\r\n hint: null,\r\n message: 'JSON object requested, multiple (or no) rows returned',\r\n };\r\n data = null;\r\n count = null;\r\n status = 406;\r\n statusText = 'Not Acceptable';\r\n }\r\n else if (data.length === 1) {\r\n data = data[0];\r\n }\r\n else {\r\n data = null;\r\n }\r\n }\r\n }\r\n else {\r\n const body = await res.text();\r\n try {\r\n error = JSON.parse(body);\r\n // Workaround for https://github.com/supabase/postgrest-js/issues/295\r\n if (Array.isArray(error) && res.status === 404) {\r\n data = [];\r\n error = null;\r\n status = 200;\r\n statusText = 'OK';\r\n }\r\n }\r\n catch (_d) {\r\n // Workaround for https://github.com/supabase/postgrest-js/issues/295\r\n if (res.status === 404 && body === '') {\r\n status = 204;\r\n statusText = 'No Content';\r\n }\r\n else {\r\n error = {\r\n message: body,\r\n };\r\n }\r\n }\r\n if (error && this.isMaybeSingle && ((_c = error === null || error === void 0 ? void 0 : error.details) === null || _c === void 0 ? void 0 : _c.includes('0 rows'))) {\r\n error = null;\r\n status = 200;\r\n statusText = 'OK';\r\n }\r\n if (error && this.shouldThrowOnError) {\r\n throw new PostgrestError_1.default(error);\r\n }\r\n }\r\n const postgrestResponse = {\r\n error,\r\n data,\r\n count,\r\n status,\r\n statusText,\r\n };\r\n return postgrestResponse;\r\n });\r\n if (!this.shouldThrowOnError) {\r\n res = res.catch((fetchError) => {\r\n var _a, _b, _c;\r\n return ({\r\n error: {\r\n message: `${(_a = fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) !== null && _a !== void 0 ? _a : 'FetchError'}: ${fetchError === null || fetchError === void 0 ? void 0 : fetchError.message}`,\r\n details: `${(_b = fetchError === null || fetchError === void 0 ? void 0 : fetchError.stack) !== null && _b !== void 0 ? _b : ''}`,\r\n hint: '',\r\n code: `${(_c = fetchError === null || fetchError === void 0 ? void 0 : fetchError.code) !== null && _c !== void 0 ? _c : ''}`,\r\n },\r\n data: null,\r\n count: null,\r\n status: 0,\r\n statusText: '',\r\n });\r\n });\r\n }\r\n return res.then(onfulfilled, onrejected);\r\n }\r\n /**\r\n * Override the type of the returned `data`.\r\n *\r\n * @typeParam NewResult - The new result type to override with\r\n * @deprecated Use overrideTypes() method at the end of your call chain instead\r\n */\r\n returns() {\r\n /* istanbul ignore next */\r\n return this;\r\n }\r\n /**\r\n * Override the type of the returned `data` field in the response.\r\n *\r\n * @typeParam NewResult - The new type to cast the response data to\r\n * @typeParam Options - Optional type configuration (defaults to { merge: true })\r\n * @typeParam Options.merge - When true, merges the new type with existing return type. When false, replaces the existing types entirely (defaults to true)\r\n * @example\r\n * ```typescript\r\n * // Merge with existing types (default behavior)\r\n * const query = supabase\r\n * .from('users')\r\n * .select()\r\n * .overrideTypes<{ custom_field: string }>()\r\n *\r\n * // Replace existing types completely\r\n * const replaceQuery = supabase\r\n * .from('users')\r\n * .select()\r\n * .overrideTypes<{ id: number; name: string }, { merge: false }>()\r\n * ```\r\n * @returns A PostgrestBuilder instance with the new type\r\n */\r\n overrideTypes() {\r\n return this;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestBuilder;\r\n//# sourceMappingURL=PostgrestBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdEJ1aWxkZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBLHFDQUFxQyxtQkFBTyxDQUFDLGdHQUFzQjtBQUNuRSx5Q0FBeUMsbUJBQU8sQ0FBQyw4R0FBa0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsYUFBYTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyw2SEFBNkgsSUFBSSwyRUFBMkU7QUFDaFAsb0NBQW9DLG9IQUFvSDtBQUN4SjtBQUNBLGlDQUFpQyxtSEFBbUg7QUFDcEoscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxjQUFjO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLFlBQVksY0FBYyxJQUFJLGNBQWM7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdEJ1aWxkZXIuanM/MzVjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4vLyBAdHMtaWdub3JlXHJcbmNvbnN0IG5vZGVfZmV0Y2hfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQHN1cGFiYXNlL25vZGUtZmV0Y2hcIikpO1xyXG5jb25zdCBQb3N0Z3Jlc3RFcnJvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEVycm9yXCIpKTtcclxuY2xhc3MgUG9zdGdyZXN0QnVpbGRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihidWlsZGVyKSB7XHJcbiAgICAgICAgdGhpcy5zaG91bGRUaHJvd09uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1ldGhvZCA9IGJ1aWxkZXIubWV0aG9kO1xyXG4gICAgICAgIHRoaXMudXJsID0gYnVpbGRlci51cmw7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gYnVpbGRlci5oZWFkZXJzO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gYnVpbGRlci5zY2hlbWE7XHJcbiAgICAgICAgdGhpcy5ib2R5ID0gYnVpbGRlci5ib2R5O1xyXG4gICAgICAgIHRoaXMuc2hvdWxkVGhyb3dPbkVycm9yID0gYnVpbGRlci5zaG91bGRUaHJvd09uRXJyb3I7XHJcbiAgICAgICAgdGhpcy5zaWduYWwgPSBidWlsZGVyLnNpZ25hbDtcclxuICAgICAgICB0aGlzLmlzTWF5YmVTaW5nbGUgPSBidWlsZGVyLmlzTWF5YmVTaW5nbGU7XHJcbiAgICAgICAgaWYgKGJ1aWxkZXIuZmV0Y2gpIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCA9IGJ1aWxkZXIuZmV0Y2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCA9IG5vZGVfZmV0Y2hfMS5kZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCA9IGZldGNoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlcmUncyBhbiBlcnJvciB3aXRoIHRoZSBxdWVyeSwgdGhyb3dPbkVycm9yIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlIGJ5XHJcbiAgICAgKiB0aHJvd2luZyB0aGUgZXJyb3IgaW5zdGVhZCBvZiByZXR1cm5pbmcgaXQgYXMgcGFydCBvZiBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXHJcbiAgICAgKlxyXG4gICAgICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9zdXBhYmFzZS1qcy9pc3N1ZXMvOTJ9XHJcbiAgICAgKi9cclxuICAgIHRocm93T25FcnJvcigpIHtcclxuICAgICAgICB0aGlzLnNob3VsZFRocm93T25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbiBIVFRQIGhlYWRlciBmb3IgdGhlIHJlcXVlc3QuXHJcbiAgICAgKi9cclxuICAgIHNldEhlYWRlcihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGVhZGVycyk7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9wb3N0Z3Jlc3Qub3JnL2VuL3N0YWJsZS9hcGkuaHRtbCNzd2l0Y2hpbmctc2NoZW1hc1xyXG4gICAgICAgIGlmICh0aGlzLnNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIC8vIHNraXBcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoWydHRVQnLCAnSEVBRCddLmluY2x1ZGVzKHRoaXMubWV0aG9kKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdC1Qcm9maWxlJ10gPSB0aGlzLnNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snQ29udGVudC1Qcm9maWxlJ10gPSB0aGlzLnNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kICE9PSAnR0VUJyAmJiB0aGlzLm1ldGhvZCAhPT0gJ0hFQUQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE5PVEU6IEludm9rZSB3L28gYHRoaXNgIHRvIGF2b2lkIGlsbGVnYWwgaW52b2NhdGlvbiBlcnJvci5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UvcG9zdGdyZXN0LWpzL3B1bGwvMjQ3XHJcbiAgICAgICAgY29uc3QgX2ZldGNoID0gdGhpcy5mZXRjaDtcclxuICAgICAgICBsZXQgcmVzID0gX2ZldGNoKHRoaXMudXJsLnRvU3RyaW5nKCksIHtcclxuICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpLFxyXG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgY291bnQgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gcmVzLnN0YXR1cztcclxuICAgICAgICAgICAgbGV0IHN0YXR1c1RleHQgPSByZXMuc3RhdHVzVGV4dDtcclxuICAgICAgICAgICAgaWYgKHJlcy5vaykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWV0aG9kICE9PSAnSEVBRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZmVyOiByZXR1cm49bWluaW1hbFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID09PSAndGV4dC9jc3YnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmhlYWRlcnNbJ0FjY2VwdCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snQWNjZXB0J10uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL3ZuZC5wZ3JzdC5wbGFuK3RleHQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50SGVhZGVyID0gKF9hID0gdGhpcy5oZWFkZXJzWydQcmVmZXInXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hdGNoKC9jb3VudD0oZXhhY3R8cGxhbm5lZHxlc3RpbWF0ZWQpLyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSAoX2IgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtcmFuZ2UnKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnRIZWFkZXIgJiYgY29udGVudFJhbmdlICYmIGNvbnRlbnRSYW5nZS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBwYXJzZUludChjb250ZW50UmFuZ2VbMV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHBhcnRpYWwgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UvcG9zdGdyZXN0LWpzL2lzc3Vlcy8zNjFcclxuICAgICAgICAgICAgICAgIC8vIElzc3VlIHBlcnNpc3RzIGUuZy4gZm9yIGAuaW5zZXJ0KFsuLi5dKS5zZWxlY3QoKS5tYXliZVNpbmdsZSgpYFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNYXliZVNpbmdsZSAmJiB0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vUG9zdGdSRVNUL3Bvc3RncmVzdC9ibG9iL2E4NjdkNzljNDI0MTlhZjE2YzE4YzNmYjAxOWViYThkZjk5MjYyNmYvc3JjL1Bvc3RnUkVTVC9FcnJvci5ocyNMNTUzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUEdSU1QxMTYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYFJlc3VsdHMgY29udGFpbiAke2RhdGEubGVuZ3RofSByb3dzLCBhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb24gcmVxdWlyZXMgMSByb3dgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdKU09OIG9iamVjdCByZXF1ZXN0ZWQsIG11bHRpcGxlIChvciBubykgcm93cyByZXR1cm5lZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDQwNjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICdOb3QgQWNjZXB0YWJsZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcy50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gSlNPTi5wYXJzZShib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UvcG9zdGdyZXN0LWpzL2lzc3Vlcy8yOTVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvcikgJiYgcmVzLnN0YXR1cyA9PT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChfZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9wb3N0Z3Jlc3QtanMvaXNzdWVzLzI5NVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQgJiYgYm9keSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMjA0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gJ05vIENvbnRlbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiB0aGlzLmlzTWF5YmVTaW5nbGUgJiYgKChfYyA9IGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaW5jbHVkZXMoJzAgcm93cycpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgdGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUG9zdGdyZXN0RXJyb3JfMS5kZWZhdWx0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwb3N0Z3Jlc3RSZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzVGV4dCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHBvc3RncmVzdFJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzID0gcmVzLmNhdGNoKChmZXRjaEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgICAgIHJldHVybiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAkeyhfYSA9IGZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5uYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnRmV0Y2hFcnJvcid9OiAke2ZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5tZXNzYWdlfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGAkeyhfYiA9IGZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5zdGFjaykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGludDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGAkeyhfYyA9IGZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5jb2RlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnJ31gLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogJycsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXMudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlIHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBgZGF0YWAuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGVQYXJhbSBOZXdSZXN1bHQgLSBUaGUgbmV3IHJlc3VsdCB0eXBlIHRvIG92ZXJyaWRlIHdpdGhcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBvdmVycmlkZVR5cGVzPHlvdXJUeXBlLCB7IG1lcmdlOiBmYWxzZSB9PigpIG1ldGhvZCBhdCB0aGUgZW5kIG9mIHlvdXIgY2FsbCBjaGFpbiBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHJldHVybnMoKSB7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGUgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIGBkYXRhYCBmaWVsZCBpbiB0aGUgcmVzcG9uc2UuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGVQYXJhbSBOZXdSZXN1bHQgLSBUaGUgbmV3IHR5cGUgdG8gY2FzdCB0aGUgcmVzcG9uc2UgZGF0YSB0b1xyXG4gICAgICogQHR5cGVQYXJhbSBPcHRpb25zIC0gT3B0aW9uYWwgdHlwZSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyB0byB7IG1lcmdlOiB0cnVlIH0pXHJcbiAgICAgKiBAdHlwZVBhcmFtIE9wdGlvbnMubWVyZ2UgLSBXaGVuIHRydWUsIG1lcmdlcyB0aGUgbmV3IHR5cGUgd2l0aCBleGlzdGluZyByZXR1cm4gdHlwZS4gV2hlbiBmYWxzZSwgcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHR5cGVzIGVudGlyZWx5IChkZWZhdWx0cyB0byB0cnVlKVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIE1lcmdlIHdpdGggZXhpc3RpbmcgdHlwZXMgKGRlZmF1bHQgYmVoYXZpb3IpXHJcbiAgICAgKiBjb25zdCBxdWVyeSA9IHN1cGFiYXNlXHJcbiAgICAgKiAgIC5mcm9tKCd1c2VycycpXHJcbiAgICAgKiAgIC5zZWxlY3QoKVxyXG4gICAgICogICAub3ZlcnJpZGVUeXBlczx7IGN1c3RvbV9maWVsZDogc3RyaW5nIH0+KClcclxuICAgICAqXHJcbiAgICAgKiAvLyBSZXBsYWNlIGV4aXN0aW5nIHR5cGVzIGNvbXBsZXRlbHlcclxuICAgICAqIGNvbnN0IHJlcGxhY2VRdWVyeSA9IHN1cGFiYXNlXHJcbiAgICAgKiAgIC5mcm9tKCd1c2VycycpXHJcbiAgICAgKiAgIC5zZWxlY3QoKVxyXG4gICAgICogICAub3ZlcnJpZGVUeXBlczx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9LCB7IG1lcmdlOiBmYWxzZSB9PigpXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEByZXR1cm5zIEEgUG9zdGdyZXN0QnVpbGRlciBpbnN0YW5jZSB3aXRoIHRoZSBuZXcgdHlwZVxyXG4gICAgICovXHJcbiAgICBvdmVycmlkZVR5cGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFBvc3RncmVzdEJ1aWxkZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdEJ1aWxkZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js": /*!*************************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js ***! \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestQueryBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestQueryBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js\"));\r\nconst PostgrestFilterBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestFilterBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\"));\r\nconst constants_1 = __webpack_require__(/*! ./constants */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/constants.js\");\r\n/**\r\n * PostgREST client.\r\n *\r\n * @typeParam Database - Types for the schema from the [type\r\n * generator](https://supabase.com/docs/reference/javascript/next/typescript-support)\r\n *\r\n * @typeParam SchemaName - Postgres schema to switch to. Must be a string\r\n * literal, the same one passed to the constructor. If the schema is not\r\n * `\"public\"`, this must be supplied manually.\r\n */\r\nclass PostgrestClient {\r\n // TODO: Add back shouldThrowOnError once we figure out the typings\r\n /**\r\n * Creates a PostgREST client.\r\n *\r\n * @param url - URL of the PostgREST endpoint\r\n * @param options - Named parameters\r\n * @param options.headers - Custom headers\r\n * @param options.schema - Postgres schema to switch to\r\n * @param options.fetch - Custom fetch\r\n */\r\n constructor(url, { headers = {}, schema, fetch, } = {}) {\r\n this.url = url;\r\n this.headers = Object.assign(Object.assign({}, constants_1.DEFAULT_HEADERS), headers);\r\n this.schemaName = schema;\r\n this.fetch = fetch;\r\n }\r\n /**\r\n * Perform a query on a table or a view.\r\n *\r\n * @param relation - The table or view name to query\r\n */\r\n from(relation) {\r\n const url = new URL(`${this.url}/${relation}`);\r\n return new PostgrestQueryBuilder_1.default(url, {\r\n headers: Object.assign({}, this.headers),\r\n schema: this.schemaName,\r\n fetch: this.fetch,\r\n });\r\n }\r\n /**\r\n * Select a schema to query or perform an function (rpc) call.\r\n *\r\n * The schema needs to be on the list of exposed schemas inside Supabase.\r\n *\r\n * @param schema - The schema to query\r\n */\r\n schema(schema) {\r\n return new PostgrestClient(this.url, {\r\n headers: this.headers,\r\n schema,\r\n fetch: this.fetch,\r\n });\r\n }\r\n /**\r\n * Perform a function call.\r\n *\r\n * @param fn - The function name to call\r\n * @param args - The arguments to pass to the function call\r\n * @param options - Named parameters\r\n * @param options.head - When set to `true`, `data` will not be returned.\r\n * Useful if you only need the count.\r\n * @param options.get - When set to `true`, the function will be called with\r\n * read-only access mode.\r\n * @param options.count - Count algorithm to use to count rows returned by the\r\n * function. Only applicable for [set-returning\r\n * functions](https://www.postgresql.org/docs/current/functions-srf.html).\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n rpc(fn, args = {}, { head = false, get = false, count, } = {}) {\r\n let method;\r\n const url = new URL(`${this.url}/rpc/${fn}`);\r\n let body;\r\n if (head || get) {\r\n method = head ? 'HEAD' : 'GET';\r\n Object.entries(args)\r\n // params with undefined value needs to be filtered out, otherwise it'll\r\n // show up as `?param=undefined`\r\n .filter(([_, value]) => value !== undefined)\r\n // array values need special syntax\r\n .map(([name, value]) => [name, Array.isArray(value) ? `{${value.join(',')}}` : `${value}`])\r\n .forEach(([name, value]) => {\r\n url.searchParams.append(name, value);\r\n });\r\n }\r\n else {\r\n method = 'POST';\r\n body = args;\r\n }\r\n const headers = Object.assign({}, this.headers);\r\n if (count) {\r\n headers['Prefer'] = `count=${count}`;\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url,\r\n headers,\r\n schema: this.schemaName,\r\n body,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n}\r\nexports[\"default\"] = PostgrestClient;\r\n//# sourceMappingURL=PostgrestClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdENsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdEQUFnRCxtQkFBTyxDQUFDLDRIQUF5QjtBQUNqRixpREFBaUQsbUJBQU8sQ0FBQyw4SEFBMEI7QUFDbkYsb0JBQW9CLG1CQUFPLENBQUMsb0dBQWE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVksbUJBQW1CLElBQUk7QUFDMUQ7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVMsR0FBRyxTQUFTO0FBQ3BEO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLElBQUksb0NBQW9DLElBQUk7QUFDakU7QUFDQSwrQkFBK0IsU0FBUyxPQUFPLEdBQUc7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RSxFQUFFLGlCQUFpQixPQUFPLE1BQU07QUFDeEc7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0EseUNBQXlDLE1BQU07QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdENsaWVudC5qcz8wMTAzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IFBvc3RncmVzdFF1ZXJ5QnVpbGRlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdFF1ZXJ5QnVpbGRlclwiKSk7XHJcbmNvbnN0IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9Qb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXCIpKTtcclxuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XHJcbi8qKlxyXG4gKiBQb3N0Z1JFU1QgY2xpZW50LlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIERhdGFiYXNlIC0gVHlwZXMgZm9yIHRoZSBzY2hlbWEgZnJvbSB0aGUgW3R5cGVcclxuICogZ2VuZXJhdG9yXShodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L25leHQvdHlwZXNjcmlwdC1zdXBwb3J0KVxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFNjaGVtYU5hbWUgLSBQb3N0Z3JlcyBzY2hlbWEgdG8gc3dpdGNoIHRvLiBNdXN0IGJlIGEgc3RyaW5nXHJcbiAqIGxpdGVyYWwsIHRoZSBzYW1lIG9uZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBJZiB0aGUgc2NoZW1hIGlzIG5vdFxyXG4gKiBgXCJwdWJsaWNcImAsIHRoaXMgbXVzdCBiZSBzdXBwbGllZCBtYW51YWxseS5cclxuICovXHJcbmNsYXNzIFBvc3RncmVzdENsaWVudCB7XHJcbiAgICAvLyBUT0RPOiBBZGQgYmFjayBzaG91bGRUaHJvd09uRXJyb3Igb25jZSB3ZSBmaWd1cmUgb3V0IHRoZSB0eXBpbmdzXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBQb3N0Z1JFU1QgY2xpZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB1cmwgLSBVUkwgb2YgdGhlIFBvc3RnUkVTVCBlbmRwb2ludFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5oZWFkZXJzIC0gQ3VzdG9tIGhlYWRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnNjaGVtYSAtIFBvc3RncmVzIHNjaGVtYSB0byBzd2l0Y2ggdG9cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmZldGNoIC0gQ3VzdG9tIGZldGNoXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHVybCwgeyBoZWFkZXJzID0ge30sIHNjaGVtYSwgZmV0Y2gsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uc3RhbnRzXzEuREVGQVVMVF9IRUFERVJTKSwgaGVhZGVycyk7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hO1xyXG4gICAgICAgIHRoaXMuZmV0Y2ggPSBmZXRjaDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIHF1ZXJ5IG9uIGEgdGFibGUgb3IgYSB2aWV3LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZWxhdGlvbiAtIFRoZSB0YWJsZSBvciB2aWV3IG5hbWUgdG8gcXVlcnlcclxuICAgICAqL1xyXG4gICAgZnJvbShyZWxhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7dGhpcy51cmx9LyR7cmVsYXRpb259YCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXJfMS5kZWZhdWx0KHVybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpLFxyXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hTmFtZSxcclxuICAgICAgICAgICAgZmV0Y2g6IHRoaXMuZmV0Y2gsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBhIHNjaGVtYSB0byBxdWVyeSBvciBwZXJmb3JtIGFuIGZ1bmN0aW9uIChycGMpIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHNjaGVtYSBuZWVkcyB0byBiZSBvbiB0aGUgbGlzdCBvZiBleHBvc2VkIHNjaGVtYXMgaW5zaWRlIFN1cGFiYXNlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzY2hlbWEgLSBUaGUgc2NoZW1hIHRvIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIHNjaGVtYShzY2hlbWEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvc3RncmVzdENsaWVudCh0aGlzLnVybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHNjaGVtYSxcclxuICAgICAgICAgICAgZmV0Y2g6IHRoaXMuZmV0Y2gsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gYSBmdW5jdGlvbiBjYWxsLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiBuYW1lIHRvIGNhbGxcclxuICAgICAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbiBjYWxsXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmhlYWQgLSBXaGVuIHNldCB0byBgdHJ1ZWAsIGBkYXRhYCB3aWxsIG5vdCBiZSByZXR1cm5lZC5cclxuICAgICAqIFVzZWZ1bCBpZiB5b3Ugb25seSBuZWVkIHRoZSBjb3VudC5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmdldCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhcclxuICAgICAqIHJlYWQtb25seSBhY2Nlc3MgbW9kZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCByb3dzIHJldHVybmVkIGJ5IHRoZVxyXG4gICAgICogZnVuY3Rpb24uIE9ubHkgYXBwbGljYWJsZSBmb3IgW3NldC1yZXR1cm5pbmdcclxuICAgICAqIGZ1bmN0aW9uc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L2Z1bmN0aW9ucy1zcmYuaHRtbCkuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxyXG4gICAgICogaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xyXG4gICAgICogc3RhdGlzdGljcyB1bmRlciB0aGUgaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXHJcbiAgICAgKiBudW1iZXJzLlxyXG4gICAgICovXHJcbiAgICBycGMoZm4sIGFyZ3MgPSB7fSwgeyBoZWFkID0gZmFsc2UsIGdldCA9IGZhbHNlLCBjb3VudCwgfSA9IHt9KSB7XHJcbiAgICAgICAgbGV0IG1ldGhvZDtcclxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMudXJsfS9ycGMvJHtmbn1gKTtcclxuICAgICAgICBsZXQgYm9keTtcclxuICAgICAgICBpZiAoaGVhZCB8fCBnZXQpIHtcclxuICAgICAgICAgICAgbWV0aG9kID0gaGVhZCA/ICdIRUFEJyA6ICdHRVQnO1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhcmdzKVxyXG4gICAgICAgICAgICAgICAgLy8gcGFyYW1zIHdpdGggdW5kZWZpbmVkIHZhbHVlIG5lZWRzIHRvIGJlIGZpbHRlcmVkIG91dCwgb3RoZXJ3aXNlIGl0J2xsXHJcbiAgICAgICAgICAgICAgICAvLyBzaG93IHVwIGFzIGA/cGFyYW09dW5kZWZpbmVkYFxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIC8vIGFycmF5IHZhbHVlcyBuZWVkIHNwZWNpYWwgc3ludGF4XHJcbiAgICAgICAgICAgICAgICAubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbbmFtZSwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBgeyR7dmFsdWUuam9pbignLCcpfX1gIDogYCR7dmFsdWV9YF0pXHJcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1ldGhvZCA9ICdQT1NUJztcclxuICAgICAgICAgICAgYm9keSA9IGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpO1xyXG4gICAgICAgIGlmIChjb3VudCkge1xyXG4gICAgICAgICAgICBoZWFkZXJzWydQcmVmZXInXSA9IGBjb3VudD0ke2NvdW50fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgaGVhZGVycyxcclxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgIGJvZHksXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBQb3N0Z3Jlc3RDbGllbnQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdENsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js": /*!************************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js ***! \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n/**\r\n * Error format\r\n *\r\n * {@link https://postgrest.org/en/stable/api.html?highlight=options#errors-and-http-status-codes}\r\n */\r\nclass PostgrestError extends Error {\r\n constructor(context) {\r\n super(context.message);\r\n this.name = 'PostgrestError';\r\n this.details = context.details;\r\n this.hint = context.hint;\r\n this.code = context.code;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestError;\r\n//# sourceMappingURL=PostgrestError.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdEVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMvZGlzdC9janMvUG9zdGdyZXN0RXJyb3IuanM/Nzk2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4vKipcclxuICogRXJyb3IgZm9ybWF0XHJcbiAqXHJcbiAqIHtAbGluayBodHRwczovL3Bvc3RncmVzdC5vcmcvZW4vc3RhYmxlL2FwaS5odG1sP2hpZ2hsaWdodD1vcHRpb25zI2Vycm9ycy1hbmQtaHR0cC1zdGF0dXMtY29kZXN9XHJcbiAqL1xyXG5jbGFzcyBQb3N0Z3Jlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdQb3N0Z3Jlc3RFcnJvcic7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gY29udGV4dC5kZXRhaWxzO1xyXG4gICAgICAgIHRoaXMuaGludCA9IGNvbnRleHQuaGludDtcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb250ZXh0LmNvZGU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUG9zdGdyZXN0RXJyb3I7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdEVycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js": /*!********************************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js ***! \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestTransformBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestTransformBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js\"));\r\nclass PostgrestFilterBuilder extends PostgrestTransformBuilder_1.default {\r\n /**\r\n * Match only rows where `column` is equal to `value`.\r\n *\r\n * To check if the value of `column` is NULL, you should use `.is()` instead.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n eq(column, value) {\r\n this.url.searchParams.append(column, `eq.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is not equal to `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n neq(column, value) {\r\n this.url.searchParams.append(column, `neq.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is greater than `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n gt(column, value) {\r\n this.url.searchParams.append(column, `gt.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is greater than or equal to `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n gte(column, value) {\r\n this.url.searchParams.append(column, `gte.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is less than `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n lt(column, value) {\r\n this.url.searchParams.append(column, `lt.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is less than or equal to `value`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n lte(column, value) {\r\n this.url.searchParams.append(column, `lte.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches `pattern` case-sensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param pattern - The pattern to match with\r\n */\r\n like(column, pattern) {\r\n this.url.searchParams.append(column, `like.${pattern}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches all of `patterns` case-sensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n likeAllOf(column, patterns) {\r\n this.url.searchParams.append(column, `like(all).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches any of `patterns` case-sensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n likeAnyOf(column, patterns) {\r\n this.url.searchParams.append(column, `like(any).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches `pattern` case-insensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param pattern - The pattern to match with\r\n */\r\n ilike(column, pattern) {\r\n this.url.searchParams.append(column, `ilike.${pattern}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches all of `patterns` case-insensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n ilikeAllOf(column, patterns) {\r\n this.url.searchParams.append(column, `ilike(all).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` matches any of `patterns` case-insensitively.\r\n *\r\n * @param column - The column to filter on\r\n * @param patterns - The patterns to match with\r\n */\r\n ilikeAnyOf(column, patterns) {\r\n this.url.searchParams.append(column, `ilike(any).{${patterns.join(',')}}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` IS `value`.\r\n *\r\n * For non-boolean columns, this is only relevant for checking if the value of\r\n * `column` is NULL by setting `value` to `null`.\r\n *\r\n * For boolean columns, you can also set `value` to `true` or `false` and it\r\n * will behave the same way as `.eq()`.\r\n *\r\n * @param column - The column to filter on\r\n * @param value - The value to filter with\r\n */\r\n is(column, value) {\r\n this.url.searchParams.append(column, `is.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where `column` is included in the `values` array.\r\n *\r\n * @param column - The column to filter on\r\n * @param values - The values array to filter with\r\n */\r\n in(column, values) {\r\n const cleanedValues = Array.from(new Set(values))\r\n .map((s) => {\r\n // handle postgrest reserved characters\r\n // https://postgrest.org/en/v7.0.0/api.html#reserved-characters\r\n if (typeof s === 'string' && new RegExp('[,()]').test(s))\r\n return `\"${s}\"`;\r\n else\r\n return `${s}`;\r\n })\r\n .join(',');\r\n this.url.searchParams.append(column, `in.(${cleanedValues})`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for jsonb, array, and range columns. Match only rows where\r\n * `column` contains every element appearing in `value`.\r\n *\r\n * @param column - The jsonb, array, or range column to filter on\r\n * @param value - The jsonb, array, or range value to filter with\r\n */\r\n contains(column, value) {\r\n if (typeof value === 'string') {\r\n // range types can be inclusive '[', ']' or exclusive '(', ')' so just\r\n // keep it simple and accept a string\r\n this.url.searchParams.append(column, `cs.${value}`);\r\n }\r\n else if (Array.isArray(value)) {\r\n // array\r\n this.url.searchParams.append(column, `cs.{${value.join(',')}}`);\r\n }\r\n else {\r\n // json\r\n this.url.searchParams.append(column, `cs.${JSON.stringify(value)}`);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Only relevant for jsonb, array, and range columns. Match only rows where\r\n * every element appearing in `column` is contained by `value`.\r\n *\r\n * @param column - The jsonb, array, or range column to filter on\r\n * @param value - The jsonb, array, or range value to filter with\r\n */\r\n containedBy(column, value) {\r\n if (typeof value === 'string') {\r\n // range\r\n this.url.searchParams.append(column, `cd.${value}`);\r\n }\r\n else if (Array.isArray(value)) {\r\n // array\r\n this.url.searchParams.append(column, `cd.{${value.join(',')}}`);\r\n }\r\n else {\r\n // json\r\n this.url.searchParams.append(column, `cd.${JSON.stringify(value)}`);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is greater than any element in `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeGt(column, range) {\r\n this.url.searchParams.append(column, `sr.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is either contained in `range` or greater than any element in\r\n * `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeGte(column, range) {\r\n this.url.searchParams.append(column, `nxl.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is less than any element in `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeLt(column, range) {\r\n this.url.searchParams.append(column, `sl.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where every element in\r\n * `column` is either contained in `range` or less than any element in\r\n * `range`.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeLte(column, range) {\r\n this.url.searchParams.append(column, `nxr.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for range columns. Match only rows where `column` is\r\n * mutually exclusive to `range` and there can be no element between the two\r\n * ranges.\r\n *\r\n * @param column - The range column to filter on\r\n * @param range - The range to filter with\r\n */\r\n rangeAdjacent(column, range) {\r\n this.url.searchParams.append(column, `adj.${range}`);\r\n return this;\r\n }\r\n /**\r\n * Only relevant for array and range columns. Match only rows where\r\n * `column` and `value` have an element in common.\r\n *\r\n * @param column - The array or range column to filter on\r\n * @param value - The array or range value to filter with\r\n */\r\n overlaps(column, value) {\r\n if (typeof value === 'string') {\r\n // range\r\n this.url.searchParams.append(column, `ov.${value}`);\r\n }\r\n else {\r\n // array\r\n this.url.searchParams.append(column, `ov.{${value.join(',')}}`);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Only relevant for text and tsvector columns. Match only rows where\r\n * `column` matches the query string in `query`.\r\n *\r\n * @param column - The text or tsvector column to filter on\r\n * @param query - The query text to match with\r\n * @param options - Named parameters\r\n * @param options.config - The text search configuration to use\r\n * @param options.type - Change how the `query` text is interpreted\r\n */\r\n textSearch(column, query, { config, type } = {}) {\r\n let typePart = '';\r\n if (type === 'plain') {\r\n typePart = 'pl';\r\n }\r\n else if (type === 'phrase') {\r\n typePart = 'ph';\r\n }\r\n else if (type === 'websearch') {\r\n typePart = 'w';\r\n }\r\n const configPart = config === undefined ? '' : `(${config})`;\r\n this.url.searchParams.append(column, `${typePart}fts${configPart}.${query}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows where each column in `query` keys is equal to its\r\n * associated value. Shorthand for multiple `.eq()`s.\r\n *\r\n * @param query - The object to filter with, with column names as keys mapped\r\n * to their filter values\r\n */\r\n match(query) {\r\n Object.entries(query).forEach(([column, value]) => {\r\n this.url.searchParams.append(column, `eq.${value}`);\r\n });\r\n return this;\r\n }\r\n /**\r\n * Match only rows which doesn't satisfy the filter.\r\n *\r\n * Unlike most filters, `opearator` and `value` are used as-is and need to\r\n * follow [PostgREST\r\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\r\n * to make sure they are properly sanitized.\r\n *\r\n * @param column - The column to filter on\r\n * @param operator - The operator to be negated to filter with, following\r\n * PostgREST syntax\r\n * @param value - The value to filter with, following PostgREST syntax\r\n */\r\n not(column, operator, value) {\r\n this.url.searchParams.append(column, `not.${operator}.${value}`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows which satisfy at least one of the filters.\r\n *\r\n * Unlike most filters, `filters` is used as-is and needs to follow [PostgREST\r\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\r\n * to make sure it's properly sanitized.\r\n *\r\n * It's currently not possible to do an `.or()` filter across multiple tables.\r\n *\r\n * @param filters - The filters to use, following PostgREST syntax\r\n * @param options - Named parameters\r\n * @param options.referencedTable - Set this to filter on referenced tables\r\n * instead of the parent table\r\n * @param options.foreignTable - Deprecated, use `referencedTable` instead\r\n */\r\n or(filters, { foreignTable, referencedTable = foreignTable, } = {}) {\r\n const key = referencedTable ? `${referencedTable}.or` : 'or';\r\n this.url.searchParams.append(key, `(${filters})`);\r\n return this;\r\n }\r\n /**\r\n * Match only rows which satisfy the filter. This is an escape hatch - you\r\n * should use the specific filter methods wherever possible.\r\n *\r\n * Unlike most filters, `opearator` and `value` are used as-is and need to\r\n * follow [PostgREST\r\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\r\n * to make sure they are properly sanitized.\r\n *\r\n * @param column - The column to filter on\r\n * @param operator - The operator to filter with, following PostgREST syntax\r\n * @param value - The value to filter with, following PostgREST syntax\r\n */\r\n filter(column, operator, value) {\r\n this.url.searchParams.append(column, `${operator}.${value}`);\r\n return this;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestFilterBuilder;\r\n//# sourceMappingURL=PostgrestFilterBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdEZpbHRlckJ1aWxkZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxvREFBb0QsbUJBQU8sQ0FBQyxvSUFBNkI7QUFDekY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsTUFBTTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsTUFBTTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsTUFBTTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsTUFBTTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsTUFBTTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsTUFBTTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsUUFBUTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsRUFBRSxvQkFBb0I7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELEVBQUUsb0JBQW9CO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxRQUFRO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMvZGlzdC9janMvUG9zdGdyZXN0RmlsdGVyQnVpbGRlci5qcz8yZThkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmNvbnN0IFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9Qb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyXCIpKTtcclxuY2xhc3MgUG9zdGdyZXN0RmlsdGVyQnVpbGRlciBleHRlbmRzIFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXJfMS5kZWZhdWx0IHtcclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGVxdWFsIHRvIGB2YWx1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogVG8gY2hlY2sgaWYgdGhlIHZhbHVlIG9mIGBjb2x1bW5gIGlzIE5VTEwsIHlvdSBzaG91bGQgdXNlIGAuaXMoKWAgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBlcShjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBlcS4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgbm90IGVxdWFsIHRvIGB2YWx1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgbmVxKGNvbHVtbiwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG5lcS4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgZ3JlYXRlciB0aGFuIGB2YWx1ZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgZ3QoY29sdW1uLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgZ3QuJHt2YWx1ZX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgdmFsdWVgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIGd0ZShjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBndGUuJHt2YWx1ZX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGxlc3MgdGhhbiBgdmFsdWVgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIGx0KGNvbHVtbiwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGx0LiR7dmFsdWV9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHZhbHVlYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBsdGUoY29sdW1uLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbHRlLiR7dmFsdWV9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIGBwYXR0ZXJuYCBjYXNlLXNlbnNpdGl2ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHBhdHRlcm4gLSBUaGUgcGF0dGVybiB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGxpa2UoY29sdW1uLCBwYXR0ZXJuKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsaWtlLiR7cGF0dGVybn1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYWxsIG9mIGBwYXR0ZXJuc2AgY2FzZS1zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGxpa2VBbGxPZihjb2x1bW4sIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsaWtlKGFsbCkueyR7cGF0dGVybnMuam9pbignLCcpfX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYW55IG9mIGBwYXR0ZXJuc2AgY2FzZS1zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGxpa2VBbnlPZihjb2x1bW4sIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsaWtlKGFueSkueyR7cGF0dGVybnMuam9pbignLCcpfX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYHBhdHRlcm5gIGNhc2UtaW5zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJuIC0gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggd2l0aFxyXG4gICAgICovXHJcbiAgICBpbGlrZShjb2x1bW4sIHBhdHRlcm4pIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGlsaWtlLiR7cGF0dGVybn1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYWxsIG9mIGBwYXR0ZXJuc2AgY2FzZS1pbnNlbnNpdGl2ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHBhdHRlcm5zIC0gVGhlIHBhdHRlcm5zIHRvIG1hdGNoIHdpdGhcclxuICAgICAqL1xyXG4gICAgaWxpa2VBbGxPZihjb2x1bW4sIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpbGlrZShhbGwpLnske3BhdHRlcm5zLmpvaW4oJywnKX19YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIGFueSBvZiBgcGF0dGVybnNgIGNhc2UtaW5zZW5zaXRpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXHJcbiAgICAgKi9cclxuICAgIGlsaWtlQW55T2YoY29sdW1uLCBwYXR0ZXJucykge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgaWxpa2UoYW55KS57JHtwYXR0ZXJucy5qb2luKCcsJyl9fWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgSVMgYHZhbHVlYC5cclxuICAgICAqXHJcbiAgICAgKiBGb3Igbm9uLWJvb2xlYW4gY29sdW1ucywgdGhpcyBpcyBvbmx5IHJlbGV2YW50IGZvciBjaGVja2luZyBpZiB0aGUgdmFsdWUgb2ZcclxuICAgICAqIGBjb2x1bW5gIGlzIE5VTEwgYnkgc2V0dGluZyBgdmFsdWVgIHRvIGBudWxsYC5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgYm9vbGVhbiBjb2x1bW5zLCB5b3UgY2FuIGFsc28gc2V0IGB2YWx1ZWAgdG8gYHRydWVgIG9yIGBmYWxzZWAgYW5kIGl0XHJcbiAgICAgKiB3aWxsIGJlaGF2ZSB0aGUgc2FtZSB3YXkgYXMgYC5lcSgpYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBpcyhjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpcy4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgaW5jbHVkZWQgaW4gdGhlIGB2YWx1ZXNgIGFycmF5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgYXJyYXkgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgaW4oY29sdW1uLCB2YWx1ZXMpIHtcclxuICAgICAgICBjb25zdCBjbGVhbmVkVmFsdWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KHZhbHVlcykpXHJcbiAgICAgICAgICAgIC5tYXAoKHMpID0+IHtcclxuICAgICAgICAgICAgLy8gaGFuZGxlIHBvc3RncmVzdCByZXNlcnZlZCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vcG9zdGdyZXN0Lm9yZy9lbi92Ny4wLjAvYXBpLmh0bWwjcmVzZXJ2ZWQtY2hhcmFjdGVyc1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnICYmIG5ldyBSZWdFeHAoJ1ssKCldJykudGVzdChzKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBgXCIke3N9XCJgO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7c31gO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpbi4oJHtjbGVhbmVkVmFsdWVzfSlgKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IganNvbmIsIGFycmF5LCBhbmQgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlXHJcbiAgICAgKiBgY29sdW1uYCBjb250YWlucyBldmVyeSBlbGVtZW50IGFwcGVhcmluZyBpbiBgdmFsdWVgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUganNvbmIsIGFycmF5LCBvciByYW5nZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUganNvbmIsIGFycmF5LCBvciByYW5nZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICBjb250YWlucyhjb2x1bW4sIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgLy8gcmFuZ2UgdHlwZXMgY2FuIGJlIGluY2x1c2l2ZSAnWycsICddJyBvciBleGNsdXNpdmUgJygnLCAnKScgc28ganVzdFxyXG4gICAgICAgICAgICAvLyBrZWVwIGl0IHNpbXBsZSBhbmQgYWNjZXB0IGEgc3RyaW5nXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgY3MuJHt2YWx1ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBjcy57JHt2YWx1ZS5qb2luKCcsJyl9fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8ganNvblxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGNzLiR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IganNvbmIsIGFycmF5LCBhbmQgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlXHJcbiAgICAgKiBldmVyeSBlbGVtZW50IGFwcGVhcmluZyBpbiBgY29sdW1uYCBpcyBjb250YWluZWQgYnkgYHZhbHVlYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGpzb25iLCBhcnJheSwgb3IgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGpzb25iLCBhcnJheSwgb3IgcmFuZ2UgdmFsdWUgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVkQnkoY29sdW1uLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIC8vIHJhbmdlXHJcbiAgICAgICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgY2QuJHt2YWx1ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgLy8gYXJyYXlcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBjZC57JHt2YWx1ZS5qb2luKCcsJyl9fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8ganNvblxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGNkLiR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaW5cclxuICAgICAqIGBjb2x1bW5gIGlzIGdyZWF0ZXIgdGhhbiBhbnkgZWxlbWVudCBpbiBgcmFuZ2VgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHJhbmdlIC0gVGhlIHJhbmdlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIHJhbmdlR3QoY29sdW1uLCByYW5nZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgc3IuJHtyYW5nZX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT25seSByZWxldmFudCBmb3IgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaW5cclxuICAgICAqIGBjb2x1bW5gIGlzIGVpdGhlciBjb250YWluZWQgaW4gYHJhbmdlYCBvciBncmVhdGVyIHRoYW4gYW55IGVsZW1lbnQgaW5cclxuICAgICAqIGByYW5nZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSByYW5nZSBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gcmFuZ2UgLSBUaGUgcmFuZ2UgdG8gZmlsdGVyIHdpdGhcclxuICAgICAqL1xyXG4gICAgcmFuZ2VHdGUoY29sdW1uLCByYW5nZSkge1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbnhsLiR7cmFuZ2V9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9ubHkgcmVsZXZhbnQgZm9yIHJhbmdlIGNvbHVtbnMuIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBldmVyeSBlbGVtZW50IGluXHJcbiAgICAgKiBgY29sdW1uYCBpcyBsZXNzIHRoYW4gYW55IGVsZW1lbnQgaW4gYHJhbmdlYC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIHJhbmdlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSByYW5nZSAtIFRoZSByYW5nZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICByYW5nZUx0KGNvbHVtbiwgcmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYHNsLiR7cmFuZ2V9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9ubHkgcmVsZXZhbnQgZm9yIHJhbmdlIGNvbHVtbnMuIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBldmVyeSBlbGVtZW50IGluXHJcbiAgICAgKiBgY29sdW1uYCBpcyBlaXRoZXIgY29udGFpbmVkIGluIGByYW5nZWAgb3IgbGVzcyB0aGFuIGFueSBlbGVtZW50IGluXHJcbiAgICAgKiBgcmFuZ2VgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHJhbmdlIC0gVGhlIHJhbmdlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIHJhbmdlTHRlKGNvbHVtbiwgcmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG54ci4ke3JhbmdlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbmx5IHJlbGV2YW50IGZvciByYW5nZSBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXNcclxuICAgICAqIG11dHVhbGx5IGV4Y2x1c2l2ZSB0byBgcmFuZ2VgIGFuZCB0aGVyZSBjYW4gYmUgbm8gZWxlbWVudCBiZXR3ZWVuIHRoZSB0d29cclxuICAgICAqIHJhbmdlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIHJhbmdlIGNvbHVtbiB0byBmaWx0ZXIgb25cclxuICAgICAqIEBwYXJhbSByYW5nZSAtIFRoZSByYW5nZSB0byBmaWx0ZXIgd2l0aFxyXG4gICAgICovXHJcbiAgICByYW5nZUFkamFjZW50KGNvbHVtbiwgcmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGFkai4ke3JhbmdlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbmx5IHJlbGV2YW50IGZvciBhcnJheSBhbmQgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlXHJcbiAgICAgKiBgY29sdW1uYCBhbmQgYHZhbHVlYCBoYXZlIGFuIGVsZW1lbnQgaW4gY29tbW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgYXJyYXkgb3IgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFycmF5IG9yIHJhbmdlIHZhbHVlIHRvIGZpbHRlciB3aXRoXHJcbiAgICAgKi9cclxuICAgIG92ZXJsYXBzKGNvbHVtbiwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvLyByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG92LiR7dmFsdWV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG92Lnske3ZhbHVlLmpvaW4oJywnKX19YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbmx5IHJlbGV2YW50IGZvciB0ZXh0IGFuZCB0c3ZlY3RvciBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmVcclxuICAgICAqIGBjb2x1bW5gIG1hdGNoZXMgdGhlIHF1ZXJ5IHN0cmluZyBpbiBgcXVlcnlgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgdGV4dCBvciB0c3ZlY3RvciBjb2x1bW4gdG8gZmlsdGVyIG9uXHJcbiAgICAgKiBAcGFyYW0gcXVlcnkgLSBUaGUgcXVlcnkgdGV4dCB0byBtYXRjaCB3aXRoXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvbmZpZyAtIFRoZSB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIHRvIHVzZVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMudHlwZSAtIENoYW5nZSBob3cgdGhlIGBxdWVyeWAgdGV4dCBpcyBpbnRlcnByZXRlZFxyXG4gICAgICovXHJcbiAgICB0ZXh0U2VhcmNoKGNvbHVtbiwgcXVlcnksIHsgY29uZmlnLCB0eXBlIH0gPSB7fSkge1xyXG4gICAgICAgIGxldCB0eXBlUGFydCA9ICcnO1xyXG4gICAgICAgIGlmICh0eXBlID09PSAncGxhaW4nKSB7XHJcbiAgICAgICAgICAgIHR5cGVQYXJ0ID0gJ3BsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3BocmFzZScpIHtcclxuICAgICAgICAgICAgdHlwZVBhcnQgPSAncGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnd2Vic2VhcmNoJykge1xyXG4gICAgICAgICAgICB0eXBlUGFydCA9ICd3JztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29uZmlnUGFydCA9IGNvbmZpZyA9PT0gdW5kZWZpbmVkID8gJycgOiBgKCR7Y29uZmlnfSlgO1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgJHt0eXBlUGFydH1mdHMke2NvbmZpZ1BhcnR9LiR7cXVlcnl9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBlYWNoIGNvbHVtbiBpbiBgcXVlcnlgIGtleXMgaXMgZXF1YWwgdG8gaXRzXHJcbiAgICAgKiBhc3NvY2lhdGVkIHZhbHVlLiBTaG9ydGhhbmQgZm9yIG11bHRpcGxlIGAuZXEoKWBzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBxdWVyeSAtIFRoZSBvYmplY3QgdG8gZmlsdGVyIHdpdGgsIHdpdGggY29sdW1uIG5hbWVzIGFzIGtleXMgbWFwcGVkXHJcbiAgICAgKiB0byB0aGVpciBmaWx0ZXIgdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIG1hdGNoKHF1ZXJ5KSB7XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocXVlcnkpLmZvckVhY2goKFtjb2x1bW4sIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGVxLiR7dmFsdWV9YCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGljaCBkb2Vzbid0IHNhdGlzZnkgdGhlIGZpbHRlci5cclxuICAgICAqXHJcbiAgICAgKiBVbmxpa2UgbW9zdCBmaWx0ZXJzLCBgb3BlYXJhdG9yYCBhbmQgYHZhbHVlYCBhcmUgdXNlZCBhcy1pcyBhbmQgbmVlZCB0b1xyXG4gICAgICogZm9sbG93IFtQb3N0Z1JFU1RcclxuICAgICAqIHN5bnRheF0oaHR0cHM6Ly9wb3N0Z3Jlc3Qub3JnL2VuL3N0YWJsZS9hcGkuaHRtbCNvcGVyYXRvcnMpLiBZb3UgYWxzbyBuZWVkXHJcbiAgICAgKiB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJvcGVybHkgc2FuaXRpemVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIG9wZXJhdG9yIC0gVGhlIG9wZXJhdG9yIHRvIGJlIG5lZ2F0ZWQgdG8gZmlsdGVyIHdpdGgsIGZvbGxvd2luZ1xyXG4gICAgICogUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICovXHJcbiAgICBub3QoY29sdW1uLCBvcGVyYXRvciwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG5vdC4ke29wZXJhdG9yfS4ke3ZhbHVlfWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXRjaCBvbmx5IHJvd3Mgd2hpY2ggc2F0aXNmeSBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpbHRlcnMuXHJcbiAgICAgKlxyXG4gICAgICogVW5saWtlIG1vc3QgZmlsdGVycywgYGZpbHRlcnNgIGlzIHVzZWQgYXMtaXMgYW5kIG5lZWRzIHRvIGZvbGxvdyBbUG9zdGdSRVNUXHJcbiAgICAgKiBzeW50YXhdKGh0dHBzOi8vcG9zdGdyZXN0Lm9yZy9lbi9zdGFibGUvYXBpLmh0bWwjb3BlcmF0b3JzKS4gWW91IGFsc28gbmVlZFxyXG4gICAgICogdG8gbWFrZSBzdXJlIGl0J3MgcHJvcGVybHkgc2FuaXRpemVkLlxyXG4gICAgICpcclxuICAgICAqIEl0J3MgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0byBkbyBhbiBgLm9yKClgIGZpbHRlciBhY3Jvc3MgbXVsdGlwbGUgdGFibGVzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmaWx0ZXJzIC0gVGhlIGZpbHRlcnMgdG8gdXNlLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBmaWx0ZXIgb24gcmVmZXJlbmNlZCB0YWJsZXNcclxuICAgICAqIGluc3RlYWQgb2YgdGhlIHBhcmVudCB0YWJsZVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZm9yZWlnblRhYmxlIC0gRGVwcmVjYXRlZCwgdXNlIGByZWZlcmVuY2VkVGFibGVgIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgb3IoZmlsdGVycywgeyBmb3JlaWduVGFibGUsIHJlZmVyZW5jZWRUYWJsZSA9IGZvcmVpZ25UYWJsZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcmVmZXJlbmNlZFRhYmxlID8gYCR7cmVmZXJlbmNlZFRhYmxlfS5vcmAgOiAnb3InO1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBgKCR7ZmlsdGVyc30pYCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1hdGNoIG9ubHkgcm93cyB3aGljaCBzYXRpc2Z5IHRoZSBmaWx0ZXIuIFRoaXMgaXMgYW4gZXNjYXBlIGhhdGNoIC0geW91XHJcbiAgICAgKiBzaG91bGQgdXNlIHRoZSBzcGVjaWZpYyBmaWx0ZXIgbWV0aG9kcyB3aGVyZXZlciBwb3NzaWJsZS5cclxuICAgICAqXHJcbiAgICAgKiBVbmxpa2UgbW9zdCBmaWx0ZXJzLCBgb3BlYXJhdG9yYCBhbmQgYHZhbHVlYCBhcmUgdXNlZCBhcy1pcyBhbmQgbmVlZCB0b1xyXG4gICAgICogZm9sbG93IFtQb3N0Z1JFU1RcclxuICAgICAqIHN5bnRheF0oaHR0cHM6Ly9wb3N0Z3Jlc3Qub3JnL2VuL3N0YWJsZS9hcGkuaHRtbCNvcGVyYXRvcnMpLiBZb3UgYWxzbyBuZWVkXHJcbiAgICAgKiB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJvcGVybHkgc2FuaXRpemVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxyXG4gICAgICogQHBhcmFtIG9wZXJhdG9yIC0gVGhlIG9wZXJhdG9yIHRvIGZpbHRlciB3aXRoLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxyXG4gICAgICovXHJcbiAgICBmaWx0ZXIoY29sdW1uLCBvcGVyYXRvciwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYCR7b3BlcmF0b3J9LiR7dmFsdWV9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUG9zdGdyZXN0RmlsdGVyQnVpbGRlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UG9zdGdyZXN0RmlsdGVyQnVpbGRlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js": /*!*******************************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js ***! \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestFilterBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestFilterBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\"));\r\nclass PostgrestQueryBuilder {\r\n constructor(url, { headers = {}, schema, fetch, }) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.schema = schema;\r\n this.fetch = fetch;\r\n }\r\n /**\r\n * Perform a SELECT query on the table or view.\r\n *\r\n * @param columns - The columns to retrieve, separated by commas. Columns can be renamed when returned with `customName:columnName`\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.head - When set to `true`, `data` will not be returned.\r\n * Useful if you only need the count.\r\n *\r\n * @param options.count - Count algorithm to use to count rows in the table or view.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n select(columns, { head = false, count, } = {}) {\r\n const method = head ? 'HEAD' : 'GET';\r\n // Remove whitespaces except when quoted\r\n let quoted = false;\r\n const cleanedColumns = (columns !== null && columns !== void 0 ? columns : '*')\r\n .split('')\r\n .map((c) => {\r\n if (/\\s/.test(c) && !quoted) {\r\n return '';\r\n }\r\n if (c === '\"') {\r\n quoted = !quoted;\r\n }\r\n return c;\r\n })\r\n .join('');\r\n this.url.searchParams.set('select', cleanedColumns);\r\n if (count) {\r\n this.headers['Prefer'] = `count=${count}`;\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform an INSERT into the table or view.\r\n *\r\n * By default, inserted rows are not returned. To return it, chain the call\r\n * with `.select()`.\r\n *\r\n * @param values - The values to insert. Pass an object to insert a single row\r\n * or an array to insert multiple rows.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.count - Count algorithm to use to count inserted rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n *\r\n * @param options.defaultToNull - Make missing fields default to `null`.\r\n * Otherwise, use the default value for the column. Only applies for bulk\r\n * inserts.\r\n */\r\n insert(values, { count, defaultToNull = true, } = {}) {\r\n const method = 'POST';\r\n const prefersHeaders = [];\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.push(this.headers['Prefer']);\r\n }\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n if (!defaultToNull) {\r\n prefersHeaders.push('missing=default');\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n if (Array.isArray(values)) {\r\n const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\r\n if (columns.length > 0) {\r\n const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\r\n this.url.searchParams.set('columns', uniqueColumns.join(','));\r\n }\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n body: values,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform an UPSERT on the table or view. Depending on the column(s) passed\r\n * to `onConflict`, `.upsert()` allows you to perform the equivalent of\r\n * `.insert()` if a row with the corresponding `onConflict` columns doesn't\r\n * exist, or if it does exist, perform an alternative action depending on\r\n * `ignoreDuplicates`.\r\n *\r\n * By default, upserted rows are not returned. To return it, chain the call\r\n * with `.select()`.\r\n *\r\n * @param values - The values to upsert with. Pass an object to upsert a\r\n * single row or an array to upsert multiple rows.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.onConflict - Comma-separated UNIQUE column(s) to specify how\r\n * duplicate rows are determined. Two rows are duplicates if all the\r\n * `onConflict` columns are equal.\r\n *\r\n * @param options.ignoreDuplicates - If `true`, duplicate rows are ignored. If\r\n * `false`, duplicate rows are merged with existing rows.\r\n *\r\n * @param options.count - Count algorithm to use to count upserted rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n *\r\n * @param options.defaultToNull - Make missing fields default to `null`.\r\n * Otherwise, use the default value for the column. This only applies when\r\n * inserting new rows, not when merging with existing rows under\r\n * `ignoreDuplicates: false`. This also only applies when doing bulk upserts.\r\n */\r\n upsert(values, { onConflict, ignoreDuplicates = false, count, defaultToNull = true, } = {}) {\r\n const method = 'POST';\r\n const prefersHeaders = [`resolution=${ignoreDuplicates ? 'ignore' : 'merge'}-duplicates`];\r\n if (onConflict !== undefined)\r\n this.url.searchParams.set('on_conflict', onConflict);\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.push(this.headers['Prefer']);\r\n }\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n if (!defaultToNull) {\r\n prefersHeaders.push('missing=default');\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n if (Array.isArray(values)) {\r\n const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\r\n if (columns.length > 0) {\r\n const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\r\n this.url.searchParams.set('columns', uniqueColumns.join(','));\r\n }\r\n }\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n body: values,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform an UPDATE on the table or view.\r\n *\r\n * By default, updated rows are not returned. To return it, chain the call\r\n * with `.select()` after filters.\r\n *\r\n * @param values - The values to update with\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.count - Count algorithm to use to count updated rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n update(values, { count, } = {}) {\r\n const method = 'PATCH';\r\n const prefersHeaders = [];\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.push(this.headers['Prefer']);\r\n }\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n body: values,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n /**\r\n * Perform a DELETE on the table or view.\r\n *\r\n * By default, deleted rows are not returned. To return it, chain the call\r\n * with `.select()` after filters.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.count - Count algorithm to use to count deleted rows.\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n delete({ count, } = {}) {\r\n const method = 'DELETE';\r\n const prefersHeaders = [];\r\n if (count) {\r\n prefersHeaders.push(`count=${count}`);\r\n }\r\n if (this.headers['Prefer']) {\r\n prefersHeaders.unshift(this.headers['Prefer']);\r\n }\r\n this.headers['Prefer'] = prefersHeaders.join(',');\r\n return new PostgrestFilterBuilder_1.default({\r\n method,\r\n url: this.url,\r\n headers: this.headers,\r\n schema: this.schema,\r\n fetch: this.fetch,\r\n allowEmpty: false,\r\n });\r\n }\r\n}\r\nexports[\"default\"] = PostgrestQueryBuilder;\r\n//# sourceMappingURL=PostgrestQueryBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdFF1ZXJ5QnVpbGRlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGlEQUFpRCxtQkFBTyxDQUFDLDhIQUEwQjtBQUNuRjtBQUNBLHVCQUF1QixZQUFZLGtCQUFrQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVCQUF1QixJQUFJO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxNQUFNO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLCtCQUErQixJQUFJO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxNQUFNO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRkFBZ0YsT0FBTztBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixxRUFBcUUsSUFBSTtBQUM5RjtBQUNBLDhDQUE4QyxzQ0FBc0M7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLE1BQU07QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdGQUFnRixPQUFPO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUyxJQUFJO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxNQUFNO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVMsSUFBSTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsTUFBTTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMvZGlzdC9janMvUG9zdGdyZXN0UXVlcnlCdWlsZGVyLmpzPzA4OTEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY29uc3QgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEZpbHRlckJ1aWxkZXJcIikpO1xyXG5jbGFzcyBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCB7IGhlYWRlcnMgPSB7fSwgc2NoZW1hLCBmZXRjaCwgfSkge1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XHJcbiAgICAgICAgdGhpcy5mZXRjaCA9IGZldGNoO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgU0VMRUNUIHF1ZXJ5IG9uIHRoZSB0YWJsZSBvciB2aWV3LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb2x1bW5zIC0gVGhlIGNvbHVtbnMgdG8gcmV0cmlldmUsIHNlcGFyYXRlZCBieSBjb21tYXMuIENvbHVtbnMgY2FuIGJlIHJlbmFtZWQgd2hlbiByZXR1cm5lZCB3aXRoIGBjdXN0b21OYW1lOmNvbHVtbk5hbWVgXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaGVhZCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgYGRhdGFgIHdpbGwgbm90IGJlIHJldHVybmVkLlxyXG4gICAgICogVXNlZnVsIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGNvdW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCByb3dzIGluIHRoZSB0YWJsZSBvciB2aWV3LlxyXG4gICAgICpcclxuICAgICAqIGBcImV4YWN0XCJgOiBFeGFjdCBidXQgc2xvdyBjb3VudCBhbGdvcml0aG0uIFBlcmZvcm1zIGEgYENPVU5UKCopYCB1bmRlciB0aGVcclxuICAgICAqIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwicGxhbm5lZFwiYDogQXBwcm94aW1hdGVkIGJ1dCBmYXN0IGNvdW50IGFsZ29yaXRobS4gVXNlcyB0aGUgUG9zdGdyZXNcclxuICAgICAqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXN0aW1hdGVkXCJgOiBVc2VzIGV4YWN0IGNvdW50IGZvciBsb3cgbnVtYmVycyBhbmQgcGxhbm5lZCBjb3VudCBmb3IgaGlnaFxyXG4gICAgICogbnVtYmVycy5cclxuICAgICAqL1xyXG4gICAgc2VsZWN0KGNvbHVtbnMsIHsgaGVhZCA9IGZhbHNlLCBjb3VudCwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kID0gaGVhZCA/ICdIRUFEJyA6ICdHRVQnO1xyXG4gICAgICAgIC8vIFJlbW92ZSB3aGl0ZXNwYWNlcyBleGNlcHQgd2hlbiBxdW90ZWRcclxuICAgICAgICBsZXQgcXVvdGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY2xlYW5lZENvbHVtbnMgPSAoY29sdW1ucyAhPT0gbnVsbCAmJiBjb2x1bW5zICE9PSB2b2lkIDAgPyBjb2x1bW5zIDogJyonKVxyXG4gICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKC9cXHMvLnRlc3QoYykgJiYgIXF1b3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjID09PSAnXCInKSB7XHJcbiAgICAgICAgICAgICAgICBxdW90ZWQgPSAhcXVvdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5qb2luKCcnKTtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdzZWxlY3QnLCBjbGVhbmVkQ29sdW1ucyk7XHJcbiAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gPSBgY291bnQ9JHtjb3VudH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhbiBJTlNFUlQgaW50byB0aGUgdGFibGUgb3Igdmlldy5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0LCBpbnNlcnRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcclxuICAgICAqIHdpdGggYC5zZWxlY3QoKWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gaW5zZXJ0LiBQYXNzIGFuIG9iamVjdCB0byBpbnNlcnQgYSBzaW5nbGUgcm93XHJcbiAgICAgKiBvciBhbiBhcnJheSB0byBpbnNlcnQgbXVsdGlwbGUgcm93cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5jb3VudCAtIENvdW50IGFsZ29yaXRobSB0byB1c2UgdG8gY291bnQgaW5zZXJ0ZWQgcm93cy5cclxuICAgICAqXHJcbiAgICAgKiBgXCJleGFjdFwiYDogRXhhY3QgYnV0IHNsb3cgY291bnQgYWxnb3JpdGhtLiBQZXJmb3JtcyBhIGBDT1VOVCgqKWAgdW5kZXIgdGhlXHJcbiAgICAgKiBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcInBsYW5uZWRcImA6IEFwcHJveGltYXRlZCBidXQgZmFzdCBjb3VudCBhbGdvcml0aG0uIFVzZXMgdGhlIFBvc3RncmVzXHJcbiAgICAgKiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcImVzdGltYXRlZFwiYDogVXNlcyBleGFjdCBjb3VudCBmb3IgbG93IG51bWJlcnMgYW5kIHBsYW5uZWQgY291bnQgZm9yIGhpZ2hcclxuICAgICAqIG51bWJlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGVmYXVsdFRvTnVsbCAtIE1ha2UgbWlzc2luZyBmaWVsZHMgZGVmYXVsdCB0byBgbnVsbGAuXHJcbiAgICAgKiBPdGhlcndpc2UsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi4gT25seSBhcHBsaWVzIGZvciBidWxrXHJcbiAgICAgKiBpbnNlcnRzLlxyXG4gICAgICovXHJcbiAgICBpbnNlcnQodmFsdWVzLCB7IGNvdW50LCBkZWZhdWx0VG9OdWxsID0gdHJ1ZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kID0gJ1BPU1QnO1xyXG4gICAgICAgIGNvbnN0IHByZWZlcnNIZWFkZXJzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaCh0aGlzLmhlYWRlcnNbJ1ByZWZlciddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIHByZWZlcnNIZWFkZXJzLnB1c2goYGNvdW50PSR7Y291bnR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmYXVsdFRvTnVsbCkge1xyXG4gICAgICAgICAgICBwcmVmZXJzSGVhZGVycy5wdXNoKCdtaXNzaW5nPWRlZmF1bHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzWydQcmVmZXInXSA9IHByZWZlcnNIZWFkZXJzLmpvaW4oJywnKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHgpID0+IGFjYy5jb25jYXQoT2JqZWN0LmtleXMoeCkpLCBbXSk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUNvbHVtbnMgPSBbLi4ubmV3IFNldChjb2x1bW5zKV0ubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1ufVwiYCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdjb2x1bW5zJywgdW5pcXVlQ29sdW1ucy5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcclxuICAgICAgICAgICAgYm9keTogdmFsdWVzLFxyXG4gICAgICAgICAgICBmZXRjaDogdGhpcy5mZXRjaCxcclxuICAgICAgICAgICAgYWxsb3dFbXB0eTogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gYW4gVVBTRVJUIG9uIHRoZSB0YWJsZSBvciB2aWV3LiBEZXBlbmRpbmcgb24gdGhlIGNvbHVtbihzKSBwYXNzZWRcclxuICAgICAqIHRvIGBvbkNvbmZsaWN0YCwgYC51cHNlcnQoKWAgYWxsb3dzIHlvdSB0byBwZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mXHJcbiAgICAgKiBgLmluc2VydCgpYCBpZiBhIHJvdyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGBvbkNvbmZsaWN0YCBjb2x1bW5zIGRvZXNuJ3RcclxuICAgICAqIGV4aXN0LCBvciBpZiBpdCBkb2VzIGV4aXN0LCBwZXJmb3JtIGFuIGFsdGVybmF0aXZlIGFjdGlvbiBkZXBlbmRpbmcgb25cclxuICAgICAqIGBpZ25vcmVEdXBsaWNhdGVzYC5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0LCB1cHNlcnRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcclxuICAgICAqIHdpdGggYC5zZWxlY3QoKWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gdXBzZXJ0IHdpdGguIFBhc3MgYW4gb2JqZWN0IHRvIHVwc2VydCBhXHJcbiAgICAgKiBzaW5nbGUgcm93IG9yIGFuIGFycmF5IHRvIHVwc2VydCBtdWx0aXBsZSByb3dzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLm9uQ29uZmxpY3QgLSBDb21tYS1zZXBhcmF0ZWQgVU5JUVVFIGNvbHVtbihzKSB0byBzcGVjaWZ5IGhvd1xyXG4gICAgICogZHVwbGljYXRlIHJvd3MgYXJlIGRldGVybWluZWQuIFR3byByb3dzIGFyZSBkdXBsaWNhdGVzIGlmIGFsbCB0aGVcclxuICAgICAqIGBvbkNvbmZsaWN0YCBjb2x1bW5zIGFyZSBlcXVhbC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzIC0gSWYgYHRydWVgLCBkdXBsaWNhdGUgcm93cyBhcmUgaWdub3JlZC4gSWZcclxuICAgICAqIGBmYWxzZWAsIGR1cGxpY2F0ZSByb3dzIGFyZSBtZXJnZWQgd2l0aCBleGlzdGluZyByb3dzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCB1cHNlcnRlZCByb3dzLlxyXG4gICAgICpcclxuICAgICAqIGBcImV4YWN0XCJgOiBFeGFjdCBidXQgc2xvdyBjb3VudCBhbGdvcml0aG0uIFBlcmZvcm1zIGEgYENPVU5UKCopYCB1bmRlciB0aGVcclxuICAgICAqIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwicGxhbm5lZFwiYDogQXBwcm94aW1hdGVkIGJ1dCBmYXN0IGNvdW50IGFsZ29yaXRobS4gVXNlcyB0aGUgUG9zdGdyZXNcclxuICAgICAqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXN0aW1hdGVkXCJgOiBVc2VzIGV4YWN0IGNvdW50IGZvciBsb3cgbnVtYmVycyBhbmQgcGxhbm5lZCBjb3VudCBmb3IgaGlnaFxyXG4gICAgICogbnVtYmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5kZWZhdWx0VG9OdWxsIC0gTWFrZSBtaXNzaW5nIGZpZWxkcyBkZWZhdWx0IHRvIGBudWxsYC5cclxuICAgICAqIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29sdW1uLiBUaGlzIG9ubHkgYXBwbGllcyB3aGVuXHJcbiAgICAgKiBpbnNlcnRpbmcgbmV3IHJvd3MsIG5vdCB3aGVuIG1lcmdpbmcgd2l0aCBleGlzdGluZyByb3dzIHVuZGVyXHJcbiAgICAgKiBgaWdub3JlRHVwbGljYXRlczogZmFsc2VgLiBUaGlzIGFsc28gb25seSBhcHBsaWVzIHdoZW4gZG9pbmcgYnVsayB1cHNlcnRzLlxyXG4gICAgICovXHJcbiAgICB1cHNlcnQodmFsdWVzLCB7IG9uQ29uZmxpY3QsIGlnbm9yZUR1cGxpY2F0ZXMgPSBmYWxzZSwgY291bnQsIGRlZmF1bHRUb051bGwgPSB0cnVlLCB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCBtZXRob2QgPSAnUE9TVCc7XHJcbiAgICAgICAgY29uc3QgcHJlZmVyc0hlYWRlcnMgPSBbYHJlc29sdXRpb249JHtpZ25vcmVEdXBsaWNhdGVzID8gJ2lnbm9yZScgOiAnbWVyZ2UnfS1kdXBsaWNhdGVzYF07XHJcbiAgICAgICAgaWYgKG9uQ29uZmxpY3QgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLnNldCgnb25fY29uZmxpY3QnLCBvbkNvbmZsaWN0KTtcclxuICAgICAgICBpZiAodGhpcy5oZWFkZXJzWydQcmVmZXInXSkge1xyXG4gICAgICAgICAgICBwcmVmZXJzSGVhZGVycy5wdXNoKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291bnQpIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaChgY291bnQ9JHtjb3VudH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWZhdWx0VG9OdWxsKSB7XHJcbiAgICAgICAgICAgIHByZWZlcnNIZWFkZXJzLnB1c2goJ21pc3Npbmc9ZGVmYXVsdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhlYWRlcnNbJ1ByZWZlciddID0gcHJlZmVyc0hlYWRlcnMuam9pbignLCcpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjLmNvbmNhdChPYmplY3Qua2V5cyh4KSksIFtdKTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdW5pcXVlQ29sdW1ucyA9IFsuLi5uZXcgU2V0KGNvbHVtbnMpXS5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW59XCJgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbHVtbnMnLCB1bmlxdWVDb2x1bW5zLmpvaW4oJywnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXzEuZGVmYXVsdCh7XHJcbiAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxyXG4gICAgICAgICAgICBib2R5OiB2YWx1ZXMsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhbiBVUERBVEUgb24gdGhlIHRhYmxlIG9yIHZpZXcuXHJcbiAgICAgKlxyXG4gICAgICogQnkgZGVmYXVsdCwgdXBkYXRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcclxuICAgICAqIHdpdGggYC5zZWxlY3QoKWAgYWZ0ZXIgZmlsdGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVzIC0gVGhlIHZhbHVlcyB0byB1cGRhdGUgd2l0aFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCB1cGRhdGVkIHJvd3MuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxyXG4gICAgICogaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xyXG4gICAgICogc3RhdGlzdGljcyB1bmRlciB0aGUgaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXHJcbiAgICAgKiBudW1iZXJzLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGUodmFsdWVzLCB7IGNvdW50LCB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCBtZXRob2QgPSAnUEFUQ0gnO1xyXG4gICAgICAgIGNvbnN0IHByZWZlcnNIZWFkZXJzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaCh0aGlzLmhlYWRlcnNbJ1ByZWZlciddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIHByZWZlcnNIZWFkZXJzLnB1c2goYGNvdW50PSR7Y291bnR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gPSBwcmVmZXJzSGVhZGVycy5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXzEuZGVmYXVsdCh7XHJcbiAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxyXG4gICAgICAgICAgICBib2R5OiB2YWx1ZXMsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIERFTEVURSBvbiB0aGUgdGFibGUgb3Igdmlldy5cclxuICAgICAqXHJcbiAgICAgKiBCeSBkZWZhdWx0LCBkZWxldGVkIHJvd3MgYXJlIG5vdCByZXR1cm5lZC4gVG8gcmV0dXJuIGl0LCBjaGFpbiB0aGUgY2FsbFxyXG4gICAgICogd2l0aCBgLnNlbGVjdCgpYCBhZnRlciBmaWx0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCBkZWxldGVkIHJvd3MuXHJcbiAgICAgKlxyXG4gICAgICogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxyXG4gICAgICogaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xyXG4gICAgICogc3RhdGlzdGljcyB1bmRlciB0aGUgaG9vZC5cclxuICAgICAqXHJcbiAgICAgKiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXHJcbiAgICAgKiBudW1iZXJzLlxyXG4gICAgICovXHJcbiAgICBkZWxldGUoeyBjb3VudCwgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kID0gJ0RFTEVURSc7XHJcbiAgICAgICAgY29uc3QgcHJlZmVyc0hlYWRlcnMgPSBbXTtcclxuICAgICAgICBpZiAoY291bnQpIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMucHVzaChgY291bnQ9JHtjb3VudH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgcHJlZmVyc0hlYWRlcnMudW5zaGlmdCh0aGlzLmhlYWRlcnNbJ1ByZWZlciddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzWydQcmVmZXInXSA9IHByZWZlcnNIZWFkZXJzLmpvaW4oJywnKTtcclxuICAgICAgICByZXR1cm4gbmV3IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXHJcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLmZldGNoLFxyXG4gICAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBvc3RncmVzdFF1ZXJ5QnVpbGRlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js": /*!***********************************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js ***! \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nconst PostgrestBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js\"));\r\nclass PostgrestTransformBuilder extends PostgrestBuilder_1.default {\r\n /**\r\n * Perform a SELECT on the query result.\r\n *\r\n * By default, `.insert()`, `.update()`, `.upsert()`, and `.delete()` do not\r\n * return modified rows. By calling this method, modified rows are returned in\r\n * `data`.\r\n *\r\n * @param columns - The columns to retrieve, separated by commas\r\n */\r\n select(columns) {\r\n // Remove whitespaces except when quoted\r\n let quoted = false;\r\n const cleanedColumns = (columns !== null && columns !== void 0 ? columns : '*')\r\n .split('')\r\n .map((c) => {\r\n if (/\\s/.test(c) && !quoted) {\r\n return '';\r\n }\r\n if (c === '\"') {\r\n quoted = !quoted;\r\n }\r\n return c;\r\n })\r\n .join('');\r\n this.url.searchParams.set('select', cleanedColumns);\r\n if (this.headers['Prefer']) {\r\n this.headers['Prefer'] += ',';\r\n }\r\n this.headers['Prefer'] += 'return=representation';\r\n return this;\r\n }\r\n /**\r\n * Order the query result by `column`.\r\n *\r\n * You can call this method multiple times to order by multiple columns.\r\n *\r\n * You can order referenced tables, but it only affects the ordering of the\r\n * parent table if you use `!inner` in the query.\r\n *\r\n * @param column - The column to order by\r\n * @param options - Named parameters\r\n * @param options.ascending - If `true`, the result will be in ascending order\r\n * @param options.nullsFirst - If `true`, `null`s appear first. If `false`,\r\n * `null`s appear last.\r\n * @param options.referencedTable - Set this to order a referenced table by\r\n * its columns\r\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\r\n * instead\r\n */\r\n order(column, { ascending = true, nullsFirst, foreignTable, referencedTable = foreignTable, } = {}) {\r\n const key = referencedTable ? `${referencedTable}.order` : 'order';\r\n const existingOrder = this.url.searchParams.get(key);\r\n this.url.searchParams.set(key, `${existingOrder ? `${existingOrder},` : ''}${column}.${ascending ? 'asc' : 'desc'}${nullsFirst === undefined ? '' : nullsFirst ? '.nullsfirst' : '.nullslast'}`);\r\n return this;\r\n }\r\n /**\r\n * Limit the query result by `count`.\r\n *\r\n * @param count - The maximum number of rows to return\r\n * @param options - Named parameters\r\n * @param options.referencedTable - Set this to limit rows of referenced\r\n * tables instead of the parent table\r\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\r\n * instead\r\n */\r\n limit(count, { foreignTable, referencedTable = foreignTable, } = {}) {\r\n const key = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`;\r\n this.url.searchParams.set(key, `${count}`);\r\n return this;\r\n }\r\n /**\r\n * Limit the query result by starting at an offset `from` and ending at the offset `to`.\r\n * Only records within this range are returned.\r\n * This respects the query order and if there is no order clause the range could behave unexpectedly.\r\n * The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third\r\n * and fourth rows of the query.\r\n *\r\n * @param from - The starting index from which to limit the result\r\n * @param to - The last index to which to limit the result\r\n * @param options - Named parameters\r\n * @param options.referencedTable - Set this to limit rows of referenced\r\n * tables instead of the parent table\r\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\r\n * instead\r\n */\r\n range(from, to, { foreignTable, referencedTable = foreignTable, } = {}) {\r\n const keyOffset = typeof referencedTable === 'undefined' ? 'offset' : `${referencedTable}.offset`;\r\n const keyLimit = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`;\r\n this.url.searchParams.set(keyOffset, `${from}`);\r\n // Range is inclusive, so add 1\r\n this.url.searchParams.set(keyLimit, `${to - from + 1}`);\r\n return this;\r\n }\r\n /**\r\n * Set the AbortSignal for the fetch request.\r\n *\r\n * @param signal - The AbortSignal to use for the fetch request\r\n */\r\n abortSignal(signal) {\r\n this.signal = signal;\r\n return this;\r\n }\r\n /**\r\n * Return `data` as a single object instead of an array of objects.\r\n *\r\n * Query result must be one row (e.g. using `.limit(1)`), otherwise this\r\n * returns an error.\r\n */\r\n single() {\r\n this.headers['Accept'] = 'application/vnd.pgrst.object+json';\r\n return this;\r\n }\r\n /**\r\n * Return `data` as a single object instead of an array of objects.\r\n *\r\n * Query result must be zero or one row (e.g. using `.limit(1)`), otherwise\r\n * this returns an error.\r\n */\r\n maybeSingle() {\r\n // Temporary partial fix for https://github.com/supabase/postgrest-js/issues/361\r\n // Issue persists e.g. for `.insert([...]).select().maybeSingle()`\r\n if (this.method === 'GET') {\r\n this.headers['Accept'] = 'application/json';\r\n }\r\n else {\r\n this.headers['Accept'] = 'application/vnd.pgrst.object+json';\r\n }\r\n this.isMaybeSingle = true;\r\n return this;\r\n }\r\n /**\r\n * Return `data` as a string in CSV format.\r\n */\r\n csv() {\r\n this.headers['Accept'] = 'text/csv';\r\n return this;\r\n }\r\n /**\r\n * Return `data` as an object in [GeoJSON](https://geojson.org) format.\r\n */\r\n geojson() {\r\n this.headers['Accept'] = 'application/geo+json';\r\n return this;\r\n }\r\n /**\r\n * Return `data` as the EXPLAIN plan for the query.\r\n *\r\n * You need to enable the\r\n * [db_plan_enabled](https://supabase.com/docs/guides/database/debugging-performance#enabling-explain)\r\n * setting before using this method.\r\n *\r\n * @param options - Named parameters\r\n *\r\n * @param options.analyze - If `true`, the query will be executed and the\r\n * actual run time will be returned\r\n *\r\n * @param options.verbose - If `true`, the query identifier will be returned\r\n * and `data` will include the output columns of the query\r\n *\r\n * @param options.settings - If `true`, include information on configuration\r\n * parameters that affect query planning\r\n *\r\n * @param options.buffers - If `true`, include information on buffer usage\r\n *\r\n * @param options.wal - If `true`, include information on WAL record generation\r\n *\r\n * @param options.format - The format of the output, can be `\"text\"` (default)\r\n * or `\"json\"`\r\n */\r\n explain({ analyze = false, verbose = false, settings = false, buffers = false, wal = false, format = 'text', } = {}) {\r\n var _a;\r\n const options = [\r\n analyze ? 'analyze' : null,\r\n verbose ? 'verbose' : null,\r\n settings ? 'settings' : null,\r\n buffers ? 'buffers' : null,\r\n wal ? 'wal' : null,\r\n ]\r\n .filter(Boolean)\r\n .join('|');\r\n // An Accept header can carry multiple media types but postgrest-js always sends one\r\n const forMediatype = (_a = this.headers['Accept']) !== null && _a !== void 0 ? _a : 'application/json';\r\n this.headers['Accept'] = `application/vnd.pgrst.plan+${format}; for=\"${forMediatype}\"; options=${options};`;\r\n if (format === 'json')\r\n return this;\r\n else\r\n return this;\r\n }\r\n /**\r\n * Rollback the query.\r\n *\r\n * `data` will still be returned, but the query is not committed.\r\n */\r\n rollback() {\r\n var _a;\r\n if (((_a = this.headers['Prefer']) !== null && _a !== void 0 ? _a : '').trim().length > 0) {\r\n this.headers['Prefer'] += ',tx=rollback';\r\n }\r\n else {\r\n this.headers['Prefer'] = 'tx=rollback';\r\n }\r\n return this;\r\n }\r\n /**\r\n * Override the type of the returned `data`.\r\n *\r\n * @typeParam NewResult - The new result type to override with\r\n * @deprecated Use overrideTypes() method at the end of your call chain instead\r\n */\r\n returns() {\r\n return this;\r\n }\r\n}\r\nexports[\"default\"] = PostgrestTransformBuilder;\r\n//# sourceMappingURL=PostgrestTransformBuilder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL1Bvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCwyQ0FBMkMsbUJBQU8sQ0FBQyxrSEFBb0I7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDhFQUE4RSxJQUFJO0FBQ3RHLHlDQUF5QyxnQkFBZ0I7QUFDekQ7QUFDQSwwQ0FBMEMsbUJBQW1CLGNBQWMsUUFBUSxFQUFFLE9BQU8sR0FBRywyQkFBMkIsRUFBRSwwRUFBMEU7QUFDdE07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdEQUFnRCxJQUFJO0FBQ3ZFLDBFQUEwRSxnQkFBZ0I7QUFDMUYsMENBQTBDLE1BQU07QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixnREFBZ0QsSUFBSTtBQUMxRSxpRkFBaUYsZ0JBQWdCO0FBQ2pHLCtFQUErRSxnQkFBZ0I7QUFDL0YsZ0RBQWdELEtBQUs7QUFDckQ7QUFDQSwrQ0FBK0MsY0FBYztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLHFHQUFxRyxJQUFJO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxTQUFTLE9BQU8sYUFBYSxHQUFHLFVBQVUsU0FBUztBQUNsSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsY0FBYztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9Qb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyLmpzP2U1ZjgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuY29uc3QgUG9zdGdyZXN0QnVpbGRlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEJ1aWxkZXJcIikpO1xyXG5jbGFzcyBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyIGV4dGVuZHMgUG9zdGdyZXN0QnVpbGRlcl8xLmRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgU0VMRUNUIG9uIHRoZSBxdWVyeSByZXN1bHQuXHJcbiAgICAgKlxyXG4gICAgICogQnkgZGVmYXVsdCwgYC5pbnNlcnQoKWAsIGAudXBkYXRlKClgLCBgLnVwc2VydCgpYCwgYW5kIGAuZGVsZXRlKClgIGRvIG5vdFxyXG4gICAgICogcmV0dXJuIG1vZGlmaWVkIHJvd3MuIEJ5IGNhbGxpbmcgdGhpcyBtZXRob2QsIG1vZGlmaWVkIHJvd3MgYXJlIHJldHVybmVkIGluXHJcbiAgICAgKiBgZGF0YWAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1ucyB0byByZXRyaWV2ZSwgc2VwYXJhdGVkIGJ5IGNvbW1hc1xyXG4gICAgICovXHJcbiAgICBzZWxlY3QoY29sdW1ucykge1xyXG4gICAgICAgIC8vIFJlbW92ZSB3aGl0ZXNwYWNlcyBleGNlcHQgd2hlbiBxdW90ZWRcclxuICAgICAgICBsZXQgcXVvdGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY2xlYW5lZENvbHVtbnMgPSAoY29sdW1ucyAhPT0gbnVsbCAmJiBjb2x1bW5zICE9PSB2b2lkIDAgPyBjb2x1bW5zIDogJyonKVxyXG4gICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKC9cXHMvLnRlc3QoYykgJiYgIXF1b3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjID09PSAnXCInKSB7XHJcbiAgICAgICAgICAgICAgICBxdW90ZWQgPSAhcXVvdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5qb2luKCcnKTtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KCdzZWxlY3QnLCBjbGVhbmVkQ29sdW1ucyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyc1snUHJlZmVyJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXJzWydQcmVmZXInXSArPSAnLCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gKz0gJ3JldHVybj1yZXByZXNlbnRhdGlvbic7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9yZGVyIHRoZSBxdWVyeSByZXN1bHQgYnkgYGNvbHVtbmAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIG11bHRpcGxlIHRpbWVzIHRvIG9yZGVyIGJ5IG11bHRpcGxlIGNvbHVtbnMuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBvcmRlciByZWZlcmVuY2VkIHRhYmxlcywgYnV0IGl0IG9ubHkgYWZmZWN0cyB0aGUgb3JkZXJpbmcgb2YgdGhlXHJcbiAgICAgKiBwYXJlbnQgdGFibGUgaWYgeW91IHVzZSBgIWlubmVyYCBpbiB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gb3JkZXIgYnlcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYXNjZW5kaW5nIC0gSWYgYHRydWVgLCB0aGUgcmVzdWx0IHdpbGwgYmUgaW4gYXNjZW5kaW5nIG9yZGVyXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5udWxsc0ZpcnN0IC0gSWYgYHRydWVgLCBgbnVsbGBzIGFwcGVhciBmaXJzdC4gSWYgYGZhbHNlYCxcclxuICAgICAqIGBudWxsYHMgYXBwZWFyIGxhc3QuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBvcmRlciBhIHJlZmVyZW5jZWQgdGFibGUgYnlcclxuICAgICAqIGl0cyBjb2x1bW5zXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5mb3JlaWduVGFibGUgLSBEZXByZWNhdGVkLCB1c2UgYG9wdGlvbnMucmVmZXJlbmNlZFRhYmxlYFxyXG4gICAgICogaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBvcmRlcihjb2x1bW4sIHsgYXNjZW5kaW5nID0gdHJ1ZSwgbnVsbHNGaXJzdCwgZm9yZWlnblRhYmxlLCByZWZlcmVuY2VkVGFibGUgPSBmb3JlaWduVGFibGUsIH0gPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHJlZmVyZW5jZWRUYWJsZSA/IGAke3JlZmVyZW5jZWRUYWJsZX0ub3JkZXJgIDogJ29yZGVyJztcclxuICAgICAgICBjb25zdCBleGlzdGluZ09yZGVyID0gdGhpcy51cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xyXG4gICAgICAgIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBgJHtleGlzdGluZ09yZGVyID8gYCR7ZXhpc3RpbmdPcmRlcn0sYCA6ICcnfSR7Y29sdW1ufS4ke2FzY2VuZGluZyA/ICdhc2MnIDogJ2Rlc2MnfSR7bnVsbHNGaXJzdCA9PT0gdW5kZWZpbmVkID8gJycgOiBudWxsc0ZpcnN0ID8gJy5udWxsc2ZpcnN0JyA6ICcubnVsbHNsYXN0J31gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTGltaXQgdGhlIHF1ZXJ5IHJlc3VsdCBieSBgY291bnRgLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb3VudCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIHJldHVyblxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBsaW1pdCByb3dzIG9mIHJlZmVyZW5jZWRcclxuICAgICAqIHRhYmxlcyBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQgdGFibGVcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmZvcmVpZ25UYWJsZSAtIERlcHJlY2F0ZWQsIHVzZSBgb3B0aW9ucy5yZWZlcmVuY2VkVGFibGVgXHJcbiAgICAgKiBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIGxpbWl0KGNvdW50LCB7IGZvcmVpZ25UYWJsZSwgcmVmZXJlbmNlZFRhYmxlID0gZm9yZWlnblRhYmxlLCB9ID0ge30pIHtcclxuICAgICAgICBjb25zdCBrZXkgPSB0eXBlb2YgcmVmZXJlbmNlZFRhYmxlID09PSAndW5kZWZpbmVkJyA/ICdsaW1pdCcgOiBgJHtyZWZlcmVuY2VkVGFibGV9LmxpbWl0YDtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KGtleSwgYCR7Y291bnR9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExpbWl0IHRoZSBxdWVyeSByZXN1bHQgYnkgc3RhcnRpbmcgYXQgYW4gb2Zmc2V0IGBmcm9tYCBhbmQgZW5kaW5nIGF0IHRoZSBvZmZzZXQgYHRvYC5cclxuICAgICAqIE9ubHkgcmVjb3JkcyB3aXRoaW4gdGhpcyByYW5nZSBhcmUgcmV0dXJuZWQuXHJcbiAgICAgKiBUaGlzIHJlc3BlY3RzIHRoZSBxdWVyeSBvcmRlciBhbmQgaWYgdGhlcmUgaXMgbm8gb3JkZXIgY2xhdXNlIHRoZSByYW5nZSBjb3VsZCBiZWhhdmUgdW5leHBlY3RlZGx5LlxyXG4gICAgICogVGhlIGBmcm9tYCBhbmQgYHRvYCB2YWx1ZXMgYXJlIDAtYmFzZWQgYW5kIGluY2x1c2l2ZTogYHJhbmdlKDEsIDMpYCB3aWxsIGluY2x1ZGUgdGhlIHNlY29uZCwgdGhpcmRcclxuICAgICAqIGFuZCBmb3VydGggcm93cyBvZiB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZyb20gLSBUaGUgc3RhcnRpbmcgaW5kZXggZnJvbSB3aGljaCB0byBsaW1pdCB0aGUgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gdG8gLSBUaGUgbGFzdCBpbmRleCB0byB3aGljaCB0byBsaW1pdCB0aGUgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnJlZmVyZW5jZWRUYWJsZSAtIFNldCB0aGlzIHRvIGxpbWl0IHJvd3Mgb2YgcmVmZXJlbmNlZFxyXG4gICAgICogdGFibGVzIGluc3RlYWQgb2YgdGhlIHBhcmVudCB0YWJsZVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZm9yZWlnblRhYmxlIC0gRGVwcmVjYXRlZCwgdXNlIGBvcHRpb25zLnJlZmVyZW5jZWRUYWJsZWBcclxuICAgICAqIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgcmFuZ2UoZnJvbSwgdG8sIHsgZm9yZWlnblRhYmxlLCByZWZlcmVuY2VkVGFibGUgPSBmb3JlaWduVGFibGUsIH0gPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGtleU9mZnNldCA9IHR5cGVvZiByZWZlcmVuY2VkVGFibGUgPT09ICd1bmRlZmluZWQnID8gJ29mZnNldCcgOiBgJHtyZWZlcmVuY2VkVGFibGV9Lm9mZnNldGA7XHJcbiAgICAgICAgY29uc3Qga2V5TGltaXQgPSB0eXBlb2YgcmVmZXJlbmNlZFRhYmxlID09PSAndW5kZWZpbmVkJyA/ICdsaW1pdCcgOiBgJHtyZWZlcmVuY2VkVGFibGV9LmxpbWl0YDtcclxuICAgICAgICB0aGlzLnVybC5zZWFyY2hQYXJhbXMuc2V0KGtleU9mZnNldCwgYCR7ZnJvbX1gKTtcclxuICAgICAgICAvLyBSYW5nZSBpcyBpbmNsdXNpdmUsIHNvIGFkZCAxXHJcbiAgICAgICAgdGhpcy51cmwuc2VhcmNoUGFyYW1zLnNldChrZXlMaW1pdCwgYCR7dG8gLSBmcm9tICsgMX1gKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBBYm9ydFNpZ25hbCBmb3IgdGhlIGZldGNoIHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNpZ25hbCAtIFRoZSBBYm9ydFNpZ25hbCB0byB1c2UgZm9yIHRoZSBmZXRjaCByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFib3J0U2lnbmFsKHNpZ25hbCkge1xyXG4gICAgICAgIHRoaXMuc2lnbmFsID0gc2lnbmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gYGRhdGFgIGFzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5IG9mIG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogUXVlcnkgcmVzdWx0IG11c3QgYmUgb25lIHJvdyAoZS5nLiB1c2luZyBgLmxpbWl0KDEpYCksIG90aGVyd2lzZSB0aGlzXHJcbiAgICAgKiByZXR1cm5zIGFuIGVycm9yLlxyXG4gICAgICovXHJcbiAgICBzaW5nbGUoKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb24nO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gYGRhdGFgIGFzIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5IG9mIG9iamVjdHMuXHJcbiAgICAgKlxyXG4gICAgICogUXVlcnkgcmVzdWx0IG11c3QgYmUgemVybyBvciBvbmUgcm93IChlLmcuIHVzaW5nIGAubGltaXQoMSlgKSwgb3RoZXJ3aXNlXHJcbiAgICAgKiB0aGlzIHJldHVybnMgYW4gZXJyb3IuXHJcbiAgICAgKi9cclxuICAgIG1heWJlU2luZ2xlKCkge1xyXG4gICAgICAgIC8vIFRlbXBvcmFyeSBwYXJ0aWFsIGZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3N1cGFiYXNlL3Bvc3RncmVzdC1qcy9pc3N1ZXMvMzYxXHJcbiAgICAgICAgLy8gSXNzdWUgcGVyc2lzdHMgZS5nLiBmb3IgYC5pbnNlcnQoWy4uLl0pLnNlbGVjdCgpLm1heWJlU2luZ2xlKClgXHJcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJykge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXJzWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTWF5YmVTaW5nbGUgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gYGRhdGFgIGFzIGEgc3RyaW5nIGluIENTViBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAgIGNzdigpIHtcclxuICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ3RleHQvY3N2JztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIGBkYXRhYCBhcyBhbiBvYmplY3QgaW4gW0dlb0pTT05dKGh0dHBzOi8vZ2VvanNvbi5vcmcpIGZvcm1hdC5cclxuICAgICAqL1xyXG4gICAgZ2VvanNvbigpIHtcclxuICAgICAgICB0aGlzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2dlbytqc29uJztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIGBkYXRhYCBhcyB0aGUgRVhQTEFJTiBwbGFuIGZvciB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogWW91IG5lZWQgdG8gZW5hYmxlIHRoZVxyXG4gICAgICogW2RiX3BsYW5fZW5hYmxlZF0oaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9ndWlkZXMvZGF0YWJhc2UvZGVidWdnaW5nLXBlcmZvcm1hbmNlI2VuYWJsaW5nLWV4cGxhaW4pXHJcbiAgICAgKiBzZXR0aW5nIGJlZm9yZSB1c2luZyB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5hbmFseXplIC0gSWYgYHRydWVgLCB0aGUgcXVlcnkgd2lsbCBiZSBleGVjdXRlZCBhbmQgdGhlXHJcbiAgICAgKiBhY3R1YWwgcnVuIHRpbWUgd2lsbCBiZSByZXR1cm5lZFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnZlcmJvc2UgLSBJZiBgdHJ1ZWAsIHRoZSBxdWVyeSBpZGVudGlmaWVyIHdpbGwgYmUgcmV0dXJuZWRcclxuICAgICAqIGFuZCBgZGF0YWAgd2lsbCBpbmNsdWRlIHRoZSBvdXRwdXQgY29sdW1ucyBvZiB0aGUgcXVlcnlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zZXR0aW5ncyAtIElmIGB0cnVlYCwgaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmF0aW9uXHJcbiAgICAgKiBwYXJhbWV0ZXJzIHRoYXQgYWZmZWN0IHF1ZXJ5IHBsYW5uaW5nXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYnVmZmVycyAtIElmIGB0cnVlYCwgaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiBidWZmZXIgdXNhZ2VcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy53YWwgLSBJZiBgdHJ1ZWAsIGluY2x1ZGUgaW5mb3JtYXRpb24gb24gV0FMIHJlY29yZCBnZW5lcmF0aW9uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZm9ybWF0IC0gVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0LCBjYW4gYmUgYFwidGV4dFwiYCAoZGVmYXVsdClcclxuICAgICAqIG9yIGBcImpzb25cImBcclxuICAgICAqL1xyXG4gICAgZXhwbGFpbih7IGFuYWx5emUgPSBmYWxzZSwgdmVyYm9zZSA9IGZhbHNlLCBzZXR0aW5ncyA9IGZhbHNlLCBidWZmZXJzID0gZmFsc2UsIHdhbCA9IGZhbHNlLCBmb3JtYXQgPSAndGV4dCcsIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gW1xyXG4gICAgICAgICAgICBhbmFseXplID8gJ2FuYWx5emUnIDogbnVsbCxcclxuICAgICAgICAgICAgdmVyYm9zZSA/ICd2ZXJib3NlJyA6IG51bGwsXHJcbiAgICAgICAgICAgIHNldHRpbmdzID8gJ3NldHRpbmdzJyA6IG51bGwsXHJcbiAgICAgICAgICAgIGJ1ZmZlcnMgPyAnYnVmZmVycycgOiBudWxsLFxyXG4gICAgICAgICAgICB3YWwgPyAnd2FsJyA6IG51bGwsXHJcbiAgICAgICAgXVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXHJcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XHJcbiAgICAgICAgLy8gQW4gQWNjZXB0IGhlYWRlciBjYW4gY2FycnkgbXVsdGlwbGUgbWVkaWEgdHlwZXMgYnV0IHBvc3RncmVzdC1qcyBhbHdheXMgc2VuZHMgb25lXHJcbiAgICAgICAgY29uc3QgZm9yTWVkaWF0eXBlID0gKF9hID0gdGhpcy5oZWFkZXJzWydBY2NlcHQnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgIHRoaXMuaGVhZGVyc1snQWNjZXB0J10gPSBgYXBwbGljYXRpb24vdm5kLnBncnN0LnBsYW4rJHtmb3JtYXR9OyBmb3I9XCIke2Zvck1lZGlhdHlwZX1cIjsgb3B0aW9ucz0ke29wdGlvbnN9O2A7XHJcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSb2xsYmFjayB0aGUgcXVlcnkuXHJcbiAgICAgKlxyXG4gICAgICogYGRhdGFgIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQsIGJ1dCB0aGUgcXVlcnkgaXMgbm90IGNvbW1pdHRlZC5cclxuICAgICAqL1xyXG4gICAgcm9sbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIGlmICgoKF9hID0gdGhpcy5oZWFkZXJzWydQcmVmZXInXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpLnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyc1snUHJlZmVyJ10gKz0gJyx0eD1yb2xsYmFjayc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlcnNbJ1ByZWZlciddID0gJ3R4PXJvbGxiYWNrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlIHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBgZGF0YWAuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGVQYXJhbSBOZXdSZXN1bHQgLSBUaGUgbmV3IHJlc3VsdCB0eXBlIHRvIG92ZXJyaWRlIHdpdGhcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBvdmVycmlkZVR5cGVzPHlvdXJUeXBlLCB7IG1lcmdlOiBmYWxzZSB9PigpIG1ldGhvZCBhdCB0aGUgZW5kIG9mIHlvdXIgY2FsbCBjaGFpbiBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHJldHVybnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/constants.js": /*!*******************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/constants.js ***! \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DEFAULT_HEADERS = void 0;\r\nconst version_1 = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/version.js\");\r\nexports.DEFAULT_HEADERS = { 'X-Client-Info': `postgrest-js/${version_1.version}` };\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCx1QkFBdUI7QUFDdkIsa0JBQWtCLG1CQUFPLENBQUMsZ0dBQVc7QUFDckMsdUJBQXVCLEtBQUssaUNBQWlDLGtCQUFrQjtBQUMvRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy9jb25zdGFudHMuanM/NGU4YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLkRFRkFVTFRfSEVBREVSUyA9IHZvaWQgMDtcclxuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcclxuZXhwb3J0cy5ERUZBVUxUX0hFQURFUlMgPSB7ICdYLUNsaWVudC1JbmZvJzogYHBvc3RncmVzdC1qcy8ke3ZlcnNpb25fMS52ZXJzaW9ufWAgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/constants.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/index.js": /*!***************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/index.js ***! \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.PostgrestError = exports.PostgrestBuilder = exports.PostgrestTransformBuilder = exports.PostgrestFilterBuilder = exports.PostgrestQueryBuilder = exports.PostgrestClient = void 0;\r\n// Always update wrapper.mjs when updating this file.\r\nconst PostgrestClient_1 = __importDefault(__webpack_require__(/*! ./PostgrestClient */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js\"));\r\nexports.PostgrestClient = PostgrestClient_1.default;\r\nconst PostgrestQueryBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestQueryBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js\"));\r\nexports.PostgrestQueryBuilder = PostgrestQueryBuilder_1.default;\r\nconst PostgrestFilterBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestFilterBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js\"));\r\nexports.PostgrestFilterBuilder = PostgrestFilterBuilder_1.default;\r\nconst PostgrestTransformBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestTransformBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js\"));\r\nexports.PostgrestTransformBuilder = PostgrestTransformBuilder_1.default;\r\nconst PostgrestBuilder_1 = __importDefault(__webpack_require__(/*! ./PostgrestBuilder */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js\"));\r\nexports.PostgrestBuilder = PostgrestBuilder_1.default;\r\nconst PostgrestError_1 = __importDefault(__webpack_require__(/*! ./PostgrestError */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js\"));\r\nexports.PostgrestError = PostgrestError_1.default;\r\nexports[\"default\"] = {\r\n PostgrestClient: PostgrestClient_1.default,\r\n PostgrestQueryBuilder: PostgrestQueryBuilder_1.default,\r\n PostgrestFilterBuilder: PostgrestFilterBuilder_1.default,\r\n PostgrestTransformBuilder: PostgrestTransformBuilder_1.default,\r\n PostgrestBuilder: PostgrestBuilder_1.default,\r\n PostgrestError: PostgrestError_1.default,\r\n};\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsc0JBQXNCLEdBQUcsd0JBQXdCLEdBQUcsaUNBQWlDLEdBQUcsOEJBQThCLEdBQUcsNkJBQTZCLEdBQUcsdUJBQXVCO0FBQ2hMO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsZ0hBQW1CO0FBQ3JFLHVCQUF1QjtBQUN2QixnREFBZ0QsbUJBQU8sQ0FBQyw0SEFBeUI7QUFDakYsNkJBQTZCO0FBQzdCLGlEQUFpRCxtQkFBTyxDQUFDLDhIQUEwQjtBQUNuRiw4QkFBOEI7QUFDOUIsb0RBQW9ELG1CQUFPLENBQUMsb0lBQTZCO0FBQ3pGLGlDQUFpQztBQUNqQywyQ0FBMkMsbUJBQU8sQ0FBQyxrSEFBb0I7QUFDdkUsd0JBQXdCO0FBQ3hCLHlDQUF5QyxtQkFBTyxDQUFDLDhHQUFrQjtBQUNuRSxzQkFBc0I7QUFDdEIsa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL2luZGV4LmpzPzIwZjQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5Qb3N0Z3Jlc3RFcnJvciA9IGV4cG9ydHMuUG9zdGdyZXN0QnVpbGRlciA9IGV4cG9ydHMuUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlciA9IGV4cG9ydHMuUG9zdGdyZXN0RmlsdGVyQnVpbGRlciA9IGV4cG9ydHMuUG9zdGdyZXN0UXVlcnlCdWlsZGVyID0gZXhwb3J0cy5Qb3N0Z3Jlc3RDbGllbnQgPSB2b2lkIDA7XHJcbi8vIEFsd2F5cyB1cGRhdGUgd3JhcHBlci5tanMgd2hlbiB1cGRhdGluZyB0aGlzIGZpbGUuXHJcbmNvbnN0IFBvc3RncmVzdENsaWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdENsaWVudFwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0Q2xpZW50ID0gUG9zdGdyZXN0Q2xpZW50XzEuZGVmYXVsdDtcclxuY29uc3QgUG9zdGdyZXN0UXVlcnlCdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0UXVlcnlCdWlsZGVyXCIpKTtcclxuZXhwb3J0cy5Qb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIgPSBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0RmlsdGVyQnVpbGRlclwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0RmlsdGVyQnVpbGRlciA9IFBvc3RncmVzdEZpbHRlckJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlclwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlciA9IFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RCdWlsZGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zdGdyZXN0QnVpbGRlclwiKSk7XHJcbmV4cG9ydHMuUG9zdGdyZXN0QnVpbGRlciA9IFBvc3RncmVzdEJ1aWxkZXJfMS5kZWZhdWx0O1xyXG5jb25zdCBQb3N0Z3Jlc3RFcnJvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Bvc3RncmVzdEVycm9yXCIpKTtcclxuZXhwb3J0cy5Qb3N0Z3Jlc3RFcnJvciA9IFBvc3RncmVzdEVycm9yXzEuZGVmYXVsdDtcclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgUG9zdGdyZXN0Q2xpZW50OiBQb3N0Z3Jlc3RDbGllbnRfMS5kZWZhdWx0LFxyXG4gICAgUG9zdGdyZXN0UXVlcnlCdWlsZGVyOiBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXJfMS5kZWZhdWx0LFxyXG4gICAgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcjogUG9zdGdyZXN0RmlsdGVyQnVpbGRlcl8xLmRlZmF1bHQsXHJcbiAgICBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyOiBQb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyXzEuZGVmYXVsdCxcclxuICAgIFBvc3RncmVzdEJ1aWxkZXI6IFBvc3RncmVzdEJ1aWxkZXJfMS5kZWZhdWx0LFxyXG4gICAgUG9zdGdyZXN0RXJyb3I6IFBvc3RncmVzdEVycm9yXzEuZGVmYXVsdCxcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/version.js": /*!*****************************************************************!*\ !*** ./node_modules/@supabase/postgrest-js/dist/cjs/version.js ***! \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.version = void 0;\r\nexports.version = '0.0.0-automated';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvY2pzL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZUFBZTtBQUNmLGVBQWU7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Bvc3RncmVzdC1qcy9kaXN0L2Nqcy92ZXJzaW9uLmpzP2I5MzYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy52ZXJzaW9uID0gdm9pZCAwO1xyXG5leHBvcnRzLnZlcnNpb24gPSAnMC4wLjAtYXV0b21hdGVkJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/cjs/version.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js": /*!***************************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js ***! \***************************************************************************/ /***/ (function(__unused_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 */ REALTIME_CHANNEL_STATES: function() { return /* binding */ REALTIME_CHANNEL_STATES; },\n/* harmony export */ REALTIME_LISTEN_TYPES: function() { return /* binding */ REALTIME_LISTEN_TYPES; },\n/* harmony export */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT: function() { return /* binding */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT; },\n/* harmony export */ REALTIME_SUBSCRIBE_STATES: function() { return /* binding */ REALTIME_SUBSCRIBE_STATES; },\n/* harmony export */ \"default\": function() { return /* binding */ RealtimeChannel; }\n/* harmony export */ });\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\");\n/* harmony import */ var _lib_push__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/push */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/push.js\");\n/* harmony import */ var _lib_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/timer */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/timer.js\");\n/* harmony import */ var _RealtimePresence__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./RealtimePresence */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js\");\n/* harmony import */ var _lib_transformers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/transformers */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nvar REALTIME_POSTGRES_CHANGES_LISTEN_EVENT;\r\n(function (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT) {\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"ALL\"] = \"*\";\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"INSERT\"] = \"INSERT\";\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"UPDATE\"] = \"UPDATE\";\r\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"DELETE\"] = \"DELETE\";\r\n})(REALTIME_POSTGRES_CHANGES_LISTEN_EVENT || (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = {}));\r\nvar REALTIME_LISTEN_TYPES;\r\n(function (REALTIME_LISTEN_TYPES) {\r\n REALTIME_LISTEN_TYPES[\"BROADCAST\"] = \"broadcast\";\r\n REALTIME_LISTEN_TYPES[\"PRESENCE\"] = \"presence\";\r\n REALTIME_LISTEN_TYPES[\"POSTGRES_CHANGES\"] = \"postgres_changes\";\r\n REALTIME_LISTEN_TYPES[\"SYSTEM\"] = \"system\";\r\n})(REALTIME_LISTEN_TYPES || (REALTIME_LISTEN_TYPES = {}));\r\nvar REALTIME_SUBSCRIBE_STATES;\r\n(function (REALTIME_SUBSCRIBE_STATES) {\r\n REALTIME_SUBSCRIBE_STATES[\"SUBSCRIBED\"] = \"SUBSCRIBED\";\r\n REALTIME_SUBSCRIBE_STATES[\"TIMED_OUT\"] = \"TIMED_OUT\";\r\n REALTIME_SUBSCRIBE_STATES[\"CLOSED\"] = \"CLOSED\";\r\n REALTIME_SUBSCRIBE_STATES[\"CHANNEL_ERROR\"] = \"CHANNEL_ERROR\";\r\n})(REALTIME_SUBSCRIBE_STATES || (REALTIME_SUBSCRIBE_STATES = {}));\r\nconst REALTIME_CHANNEL_STATES = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES;\r\n/** A channel is the basic building block of Realtime\r\n * and narrows the scope of data flow to subscribed clients.\r\n * You can think of a channel as a chatroom where participants are able to see who's online\r\n * and send and receive messages.\r\n */\r\nclass RealtimeChannel {\r\n constructor(\r\n /** Topic name can be any string. */\r\n topic, params = { config: {} }, socket) {\r\n this.topic = topic;\r\n this.params = params;\r\n this.socket = socket;\r\n this.bindings = {};\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.closed;\r\n this.joinedOnce = false;\r\n this.pushBuffer = [];\r\n this.subTopic = topic.replace(/^realtime:/i, '');\r\n this.params.config = Object.assign({\r\n broadcast: { ack: false, self: false },\r\n presence: { key: '' },\r\n private: false,\r\n }, params.config);\r\n this.timeout = this.socket.timeout;\r\n this.joinPush = new _lib_push__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this, _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.join, this.params, this.timeout);\r\n this.rejoinTimer = new _lib_timer__WEBPACK_IMPORTED_MODULE_2__[\"default\"](() => this._rejoinUntilConnected(), this.socket.reconnectAfterMs);\r\n this.joinPush.receive('ok', () => {\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.joined;\r\n this.rejoinTimer.reset();\r\n this.pushBuffer.forEach((pushEvent) => pushEvent.send());\r\n this.pushBuffer = [];\r\n });\r\n this._onClose(() => {\r\n this.rejoinTimer.reset();\r\n this.socket.log('channel', `close ${this.topic} ${this._joinRef()}`);\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.closed;\r\n this.socket._remove(this);\r\n });\r\n this._onError((reason) => {\r\n if (this._isLeaving() || this._isClosed()) {\r\n return;\r\n }\r\n this.socket.log('channel', `error ${this.topic}`, reason);\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.errored;\r\n this.rejoinTimer.scheduleTimeout();\r\n });\r\n this.joinPush.receive('timeout', () => {\r\n if (!this._isJoining()) {\r\n return;\r\n }\r\n this.socket.log('channel', `timeout ${this.topic}`, this.joinPush.timeout);\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.errored;\r\n this.rejoinTimer.scheduleTimeout();\r\n });\r\n this._on(_lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.reply, {}, (payload, ref) => {\r\n this._trigger(this._replyEventName(ref), payload);\r\n });\r\n this.presence = new _RealtimePresence__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this);\r\n this.broadcastEndpointURL =\r\n (0,_lib_transformers__WEBPACK_IMPORTED_MODULE_4__.httpEndpointURL)(this.socket.endPoint) + '/api/broadcast';\r\n this.private = this.params.config.private || false;\r\n }\r\n /** Subscribe registers your client with the server */\r\n subscribe(callback, timeout = this.timeout) {\r\n var _a, _b;\r\n if (!this.socket.isConnected()) {\r\n this.socket.connect();\r\n }\r\n if (this.state == _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.closed) {\r\n const { config: { broadcast, presence, private: isPrivate }, } = this.params;\r\n this._onError((e) => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, e));\r\n this._onClose(() => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CLOSED));\r\n const accessTokenPayload = {};\r\n const config = {\r\n broadcast,\r\n presence,\r\n postgres_changes: (_b = (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.map((r) => r.filter)) !== null && _b !== void 0 ? _b : [],\r\n private: isPrivate,\r\n };\r\n if (this.socket.accessTokenValue) {\r\n accessTokenPayload.access_token = this.socket.accessTokenValue;\r\n }\r\n this.updateJoinPayload(Object.assign({ config }, accessTokenPayload));\r\n this.joinedOnce = true;\r\n this._rejoin(timeout);\r\n this.joinPush\r\n .receive('ok', async ({ postgres_changes }) => {\r\n var _a;\r\n this.socket.setAuth();\r\n if (postgres_changes === undefined) {\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\r\n return;\r\n }\r\n else {\r\n const clientPostgresBindings = this.bindings.postgres_changes;\r\n const bindingsLen = (_a = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a !== void 0 ? _a : 0;\r\n const newPostgresBindings = [];\r\n for (let i = 0; i < bindingsLen; i++) {\r\n const clientPostgresBinding = clientPostgresBindings[i];\r\n const { filter: { event, schema, table, filter }, } = clientPostgresBinding;\r\n const serverPostgresFilter = postgres_changes && postgres_changes[i];\r\n if (serverPostgresFilter &&\r\n serverPostgresFilter.event === event &&\r\n serverPostgresFilter.schema === schema &&\r\n serverPostgresFilter.table === table &&\r\n serverPostgresFilter.filter === filter) {\r\n newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), { id: serverPostgresFilter.id }));\r\n }\r\n else {\r\n this.unsubscribe();\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.errored;\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error('mismatch between server and client bindings for postgres changes'));\r\n return;\r\n }\r\n }\r\n this.bindings.postgres_changes = newPostgresBindings;\r\n callback && callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\r\n return;\r\n }\r\n })\r\n .receive('error', (error) => {\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.errored;\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error(JSON.stringify(Object.values(error).join(', ') || 'error')));\r\n return;\r\n })\r\n .receive('timeout', () => {\r\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.TIMED_OUT);\r\n return;\r\n });\r\n }\r\n return this;\r\n }\r\n presenceState() {\r\n return this.presence.state;\r\n }\r\n async track(payload, opts = {}) {\r\n return await this.send({\r\n type: 'presence',\r\n event: 'track',\r\n payload,\r\n }, opts.timeout || this.timeout);\r\n }\r\n async untrack(opts = {}) {\r\n return await this.send({\r\n type: 'presence',\r\n event: 'untrack',\r\n }, opts);\r\n }\r\n on(type, filter, callback) {\r\n return this._on(type, filter, callback);\r\n }\r\n /**\r\n * Sends a message into the channel.\r\n *\r\n * @param args Arguments to send to channel\r\n * @param args.type The type of event to send\r\n * @param args.event The name of the event being sent\r\n * @param args.payload Payload to be sent\r\n * @param opts Options to be used during the send process\r\n */\r\n async send(args, opts = {}) {\r\n var _a, _b;\r\n if (!this._canPush() && args.type === 'broadcast') {\r\n const { event, payload: endpoint_payload } = args;\r\n const authorization = this.socket.accessTokenValue\r\n ? `Bearer ${this.socket.accessTokenValue}`\r\n : '';\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n Authorization: authorization,\r\n apikey: this.socket.apiKey ? this.socket.apiKey : '',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n messages: [\r\n {\r\n topic: this.subTopic,\r\n event,\r\n payload: endpoint_payload,\r\n private: this.private,\r\n },\r\n ],\r\n }),\r\n };\r\n try {\r\n const response = await this._fetchWithTimeout(this.broadcastEndpointURL, options, (_a = opts.timeout) !== null && _a !== void 0 ? _a : this.timeout);\r\n await ((_b = response.body) === null || _b === void 0 ? void 0 : _b.cancel());\r\n return response.ok ? 'ok' : 'error';\r\n }\r\n catch (error) {\r\n if (error.name === 'AbortError') {\r\n return 'timed out';\r\n }\r\n else {\r\n return 'error';\r\n }\r\n }\r\n }\r\n else {\r\n return new Promise((resolve) => {\r\n var _a, _b, _c;\r\n const push = this._push(args.type, args, opts.timeout || this.timeout);\r\n if (args.type === 'broadcast' && !((_c = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.broadcast) === null || _c === void 0 ? void 0 : _c.ack)) {\r\n resolve('ok');\r\n }\r\n push.receive('ok', () => resolve('ok'));\r\n push.receive('error', () => resolve('error'));\r\n push.receive('timeout', () => resolve('timed out'));\r\n });\r\n }\r\n }\r\n updateJoinPayload(payload) {\r\n this.joinPush.updatePayload(payload);\r\n }\r\n /**\r\n * Leaves the channel.\r\n *\r\n * Unsubscribes from server events, and instructs channel to terminate on server.\r\n * Triggers onClose() hooks.\r\n *\r\n * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:\r\n * channel.unsubscribe().receive(\"ok\", () => alert(\"left!\") )\r\n */\r\n unsubscribe(timeout = this.timeout) {\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.leaving;\r\n const onClose = () => {\r\n this.socket.log('channel', `leave ${this.topic}`);\r\n this._trigger(_lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.close, 'leave', this._joinRef());\r\n };\r\n this.joinPush.destroy();\r\n let leavePush = null;\r\n return new Promise((resolve) => {\r\n leavePush = new _lib_push__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this, _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.leave, {}, timeout);\r\n leavePush\r\n .receive('ok', () => {\r\n onClose();\r\n resolve('ok');\r\n })\r\n .receive('timeout', () => {\r\n onClose();\r\n resolve('timed out');\r\n })\r\n .receive('error', () => {\r\n resolve('error');\r\n });\r\n leavePush.send();\r\n if (!this._canPush()) {\r\n leavePush.trigger('ok', {});\r\n }\r\n }).finally(() => {\r\n leavePush === null || leavePush === void 0 ? void 0 : leavePush.destroy();\r\n });\r\n }\r\n /**\r\n * Teardown the channel.\r\n *\r\n * Destroys and stops related timers.\r\n */\r\n teardown() {\r\n this.pushBuffer.forEach((push) => push.destroy());\r\n this.rejoinTimer && clearTimeout(this.rejoinTimer.timer);\r\n this.joinPush.destroy();\r\n }\r\n /** @internal */\r\n async _fetchWithTimeout(url, options, timeout) {\r\n const controller = new AbortController();\r\n const id = setTimeout(() => controller.abort(), timeout);\r\n const response = await this.socket.fetch(url, Object.assign(Object.assign({}, options), { signal: controller.signal }));\r\n clearTimeout(id);\r\n return response;\r\n }\r\n /** @internal */\r\n _push(event, payload, timeout = this.timeout) {\r\n if (!this.joinedOnce) {\r\n throw `tried to push '${event}' to '${this.topic}' before joining. Use channel.subscribe() before pushing events`;\r\n }\r\n let pushEvent = new _lib_push__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this, event, payload, timeout);\r\n if (this._canPush()) {\r\n pushEvent.send();\r\n }\r\n else {\r\n pushEvent.startTimeout();\r\n this.pushBuffer.push(pushEvent);\r\n }\r\n return pushEvent;\r\n }\r\n /**\r\n * Overridable message hook\r\n *\r\n * Receives all events for specialized message handling before dispatching to the channel callbacks.\r\n * Must return the payload, modified or unmodified.\r\n *\r\n * @internal\r\n */\r\n _onMessage(_event, payload, _ref) {\r\n return payload;\r\n }\r\n /** @internal */\r\n _isMember(topic) {\r\n return this.topic === topic;\r\n }\r\n /** @internal */\r\n _joinRef() {\r\n return this.joinPush.ref;\r\n }\r\n /** @internal */\r\n _trigger(type, payload, ref) {\r\n var _a, _b;\r\n const typeLower = type.toLocaleLowerCase();\r\n const { close, error, leave, join } = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS;\r\n const events = [close, error, leave, join];\r\n if (ref && events.indexOf(typeLower) >= 0 && ref !== this._joinRef()) {\r\n return;\r\n }\r\n let handledPayload = this._onMessage(typeLower, payload, ref);\r\n if (payload && !handledPayload) {\r\n throw 'channel onMessage callbacks must return the payload, modified or unmodified';\r\n }\r\n if (['insert', 'update', 'delete'].includes(typeLower)) {\r\n (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.filter((bind) => {\r\n var _a, _b, _c;\r\n return (((_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event) === '*' ||\r\n ((_c = (_b = bind.filter) === null || _b === void 0 ? void 0 : _b.event) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase()) === typeLower);\r\n }).map((bind) => bind.callback(handledPayload, ref));\r\n }\r\n else {\r\n (_b = this.bindings[typeLower]) === null || _b === void 0 ? void 0 : _b.filter((bind) => {\r\n var _a, _b, _c, _d, _e, _f;\r\n if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {\r\n if ('id' in bind) {\r\n const bindId = bind.id;\r\n const bindEvent = (_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event;\r\n return (bindId &&\r\n ((_b = payload.ids) === null || _b === void 0 ? void 0 : _b.includes(bindId)) &&\r\n (bindEvent === '*' ||\r\n (bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) ===\r\n ((_c = payload.data) === null || _c === void 0 ? void 0 : _c.type.toLocaleLowerCase())));\r\n }\r\n else {\r\n const bindEvent = (_e = (_d = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _d === void 0 ? void 0 : _d.event) === null || _e === void 0 ? void 0 : _e.toLocaleLowerCase();\r\n return (bindEvent === '*' ||\r\n bindEvent === ((_f = payload === null || payload === void 0 ? void 0 : payload.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase()));\r\n }\r\n }\r\n else {\r\n return bind.type.toLocaleLowerCase() === typeLower;\r\n }\r\n }).map((bind) => {\r\n if (typeof handledPayload === 'object' && 'ids' in handledPayload) {\r\n const postgresChanges = handledPayload.data;\r\n const { schema, table, commit_timestamp, type, errors } = postgresChanges;\r\n const enrichedPayload = {\r\n schema: schema,\r\n table: table,\r\n commit_timestamp: commit_timestamp,\r\n eventType: type,\r\n new: {},\r\n old: {},\r\n errors: errors,\r\n };\r\n handledPayload = Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));\r\n }\r\n bind.callback(handledPayload, ref);\r\n });\r\n }\r\n }\r\n /** @internal */\r\n _isClosed() {\r\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.closed;\r\n }\r\n /** @internal */\r\n _isJoined() {\r\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.joined;\r\n }\r\n /** @internal */\r\n _isJoining() {\r\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.joining;\r\n }\r\n /** @internal */\r\n _isLeaving() {\r\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.leaving;\r\n }\r\n /** @internal */\r\n _replyEventName(ref) {\r\n return `chan_reply_${ref}`;\r\n }\r\n /** @internal */\r\n _on(type, filter, callback) {\r\n const typeLower = type.toLocaleLowerCase();\r\n const binding = {\r\n type: typeLower,\r\n filter: filter,\r\n callback: callback,\r\n };\r\n if (this.bindings[typeLower]) {\r\n this.bindings[typeLower].push(binding);\r\n }\r\n else {\r\n this.bindings[typeLower] = [binding];\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n _off(type, filter) {\r\n const typeLower = type.toLocaleLowerCase();\r\n this.bindings[typeLower] = this.bindings[typeLower].filter((bind) => {\r\n var _a;\r\n return !(((_a = bind.type) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) === typeLower &&\r\n RealtimeChannel.isEqual(bind.filter, filter));\r\n });\r\n return this;\r\n }\r\n /** @internal */\r\n static isEqual(obj1, obj2) {\r\n if (Object.keys(obj1).length !== Object.keys(obj2).length) {\r\n return false;\r\n }\r\n for (const k in obj1) {\r\n if (obj1[k] !== obj2[k]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /** @internal */\r\n _rejoinUntilConnected() {\r\n this.rejoinTimer.scheduleTimeout();\r\n if (this.socket.isConnected()) {\r\n this._rejoin();\r\n }\r\n }\r\n /**\r\n * Registers a callback that will be executed when the channel closes.\r\n *\r\n * @internal\r\n */\r\n _onClose(callback) {\r\n this._on(_lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.close, {}, callback);\r\n }\r\n /**\r\n * Registers a callback that will be executed when the channel encounteres an error.\r\n *\r\n * @internal\r\n */\r\n _onError(callback) {\r\n this._on(_lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.error, {}, (reason) => callback(reason));\r\n }\r\n /**\r\n * Returns `true` if the socket is connected and the channel has been joined.\r\n *\r\n * @internal\r\n */\r\n _canPush() {\r\n return this.socket.isConnected() && this._isJoined();\r\n }\r\n /** @internal */\r\n _rejoin(timeout = this.timeout) {\r\n if (this._isLeaving()) {\r\n return;\r\n }\r\n this.socket._leaveOpenTopic(this.topic);\r\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.joining;\r\n this.joinPush.resend(timeout);\r\n }\r\n /** @internal */\r\n _getPayloadRecords(payload) {\r\n const records = {\r\n new: {},\r\n old: {},\r\n };\r\n if (payload.type === 'INSERT' || payload.type === 'UPDATE') {\r\n records.new = _lib_transformers__WEBPACK_IMPORTED_MODULE_4__.convertChangeData(payload.columns, payload.record);\r\n }\r\n if (payload.type === 'UPDATE' || payload.type === 'DELETE') {\r\n records.old = _lib_transformers__WEBPACK_IMPORTED_MODULE_4__.convertChangeData(payload.columns, payload.old_record);\r\n }\r\n return records;\r\n }\r\n}\r\n//# sourceMappingURL=RealtimeChannel.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVDaGFubmVsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBaUU7QUFDbkM7QUFDRTtBQUNrQjtBQUNDO0FBQ0U7QUFDOUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3RkFBd0Y7QUFDbEY7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxzREFBc0Q7QUFDaEQ7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw4REFBOEQ7QUFDeEQsZ0NBQWdDLDBEQUFjO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQSxzQkFBc0IsWUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwREFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qix5QkFBeUI7QUFDbEQsd0JBQXdCLFNBQVM7QUFDakM7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw0QkFBNEIsaURBQUksT0FBTywwREFBYztBQUNyRCwrQkFBK0Isa0RBQUs7QUFDcEM7QUFDQSx5QkFBeUIsMERBQWM7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxnREFBZ0QsWUFBWSxFQUFFLGdCQUFnQjtBQUM5RSx5QkFBeUIsMERBQWM7QUFDdkM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsV0FBVztBQUMzRCx5QkFBeUIsMERBQWM7QUFDdkM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsV0FBVztBQUM3RCx5QkFBeUIsMERBQWM7QUFDdkM7QUFDQSxTQUFTO0FBQ1QsaUJBQWlCLDBEQUFjLFVBQVU7QUFDekM7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCLHlEQUFnQjtBQUM1QztBQUNBLFlBQVksa0VB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O0FBQ25CO0FBQ0E7QUFDQSwwQkFBMEIsZ0VBQThCO0FBQ3hEO0FBQ0E7QUFDQSwwQkFBMEIsZ0VBQThCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9SZWFsdGltZUNoYW5uZWwuanM/NTIyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDSEFOTkVMX0VWRU5UUywgQ0hBTk5FTF9TVEFURVMgfSBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xyXG5pbXBvcnQgUHVzaCBmcm9tICcuL2xpYi9wdXNoJztcclxuaW1wb3J0IFRpbWVyIGZyb20gJy4vbGliL3RpbWVyJztcclxuaW1wb3J0IFJlYWx0aW1lUHJlc2VuY2UgZnJvbSAnLi9SZWFsdGltZVByZXNlbmNlJztcclxuaW1wb3J0ICogYXMgVHJhbnNmb3JtZXJzIGZyb20gJy4vbGliL3RyYW5zZm9ybWVycyc7XHJcbmltcG9ydCB7IGh0dHBFbmRwb2ludFVSTCB9IGZyb20gJy4vbGliL3RyYW5zZm9ybWVycyc7XHJcbmV4cG9ydCB2YXIgUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlQ7XHJcbihmdW5jdGlvbiAoUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlQpIHtcclxuICAgIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UW1wiQUxMXCJdID0gXCIqXCI7XHJcbiAgICBSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVFtcIklOU0VSVFwiXSA9IFwiSU5TRVJUXCI7XHJcbiAgICBSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVFtcIlVQREFURVwiXSA9IFwiVVBEQVRFXCI7XHJcbiAgICBSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVFtcIkRFTEVURVwiXSA9IFwiREVMRVRFXCI7XHJcbn0pKFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UIHx8IChSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVCA9IHt9KSk7XHJcbmV4cG9ydCB2YXIgUkVBTFRJTUVfTElTVEVOX1RZUEVTO1xyXG4oZnVuY3Rpb24gKFJFQUxUSU1FX0xJU1RFTl9UWVBFUykge1xyXG4gICAgUkVBTFRJTUVfTElTVEVOX1RZUEVTW1wiQlJPQURDQVNUXCJdID0gXCJicm9hZGNhc3RcIjtcclxuICAgIFJFQUxUSU1FX0xJU1RFTl9UWVBFU1tcIlBSRVNFTkNFXCJdID0gXCJwcmVzZW5jZVwiO1xyXG4gICAgUkVBTFRJTUVfTElTVEVOX1RZUEVTW1wiUE9TVEdSRVNfQ0hBTkdFU1wiXSA9IFwicG9zdGdyZXNfY2hhbmdlc1wiO1xyXG4gICAgUkVBTFRJTUVfTElTVEVOX1RZUEVTW1wiU1lTVEVNXCJdID0gXCJzeXN0ZW1cIjtcclxufSkoUkVBTFRJTUVfTElTVEVOX1RZUEVTIHx8IChSRUFMVElNRV9MSVNURU5fVFlQRVMgPSB7fSkpO1xyXG5leHBvcnQgdmFyIFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVM7XHJcbihmdW5jdGlvbiAoUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUykge1xyXG4gICAgUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFU1tcIlNVQlNDUklCRURcIl0gPSBcIlNVQlNDUklCRURcIjtcclxuICAgIFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVNbXCJUSU1FRF9PVVRcIl0gPSBcIlRJTUVEX09VVFwiO1xyXG4gICAgUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFU1tcIkNMT1NFRFwiXSA9IFwiQ0xPU0VEXCI7XHJcbiAgICBSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTW1wiQ0hBTk5FTF9FUlJPUlwiXSA9IFwiQ0hBTk5FTF9FUlJPUlwiO1xyXG59KShSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTIHx8IChSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTID0ge30pKTtcclxuZXhwb3J0IGNvbnN0IFJFQUxUSU1FX0NIQU5ORUxfU1RBVEVTID0gQ0hBTk5FTF9TVEFURVM7XHJcbi8qKiBBIGNoYW5uZWwgaXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIFJlYWx0aW1lXHJcbiAqIGFuZCBuYXJyb3dzIHRoZSBzY29wZSBvZiBkYXRhIGZsb3cgdG8gc3Vic2NyaWJlZCBjbGllbnRzLlxyXG4gKiBZb3UgY2FuIHRoaW5rIG9mIGEgY2hhbm5lbCBhcyBhIGNoYXRyb29tIHdoZXJlIHBhcnRpY2lwYW50cyBhcmUgYWJsZSB0byBzZWUgd2hvJ3Mgb25saW5lXHJcbiAqIGFuZCBzZW5kIGFuZCByZWNlaXZlIG1lc3NhZ2VzLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbHRpbWVDaGFubmVsIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgLyoqIFRvcGljIG5hbWUgY2FuIGJlIGFueSBzdHJpbmcuICovXHJcbiAgICB0b3BpYywgcGFyYW1zID0geyBjb25maWc6IHt9IH0sIHNvY2tldCkge1xyXG4gICAgICAgIHRoaXMudG9waWMgPSB0b3BpYztcclxuICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICB0aGlzLnNvY2tldCA9IHNvY2tldDtcclxuICAgICAgICB0aGlzLmJpbmRpbmdzID0ge307XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmNsb3NlZDtcclxuICAgICAgICB0aGlzLmpvaW5lZE9uY2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXTtcclxuICAgICAgICB0aGlzLnN1YlRvcGljID0gdG9waWMucmVwbGFjZSgvXnJlYWx0aW1lOi9pLCAnJyk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIGJyb2FkY2FzdDogeyBhY2s6IGZhbHNlLCBzZWxmOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICBwcmVzZW5jZTogeyBrZXk6ICcnIH0sXHJcbiAgICAgICAgICAgIHByaXZhdGU6IGZhbHNlLFxyXG4gICAgICAgIH0sIHBhcmFtcy5jb25maWcpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IHRoaXMuc29ja2V0LnRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5qb2luUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmpvaW4sIHRoaXMucGFyYW1zLCB0aGlzLnRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMucmVqb2luVGltZXIgPSBuZXcgVGltZXIoKCkgPT4gdGhpcy5fcmVqb2luVW50aWxDb25uZWN0ZWQoKSwgdGhpcy5zb2NrZXQucmVjb25uZWN0QWZ0ZXJNcyk7XHJcbiAgICAgICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKCdvaycsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmpvaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLnB1c2hCdWZmZXIuZm9yRWFjaCgocHVzaEV2ZW50KSA9PiBwdXNoRXZlbnQuc2VuZCgpKTtcclxuICAgICAgICAgICAgdGhpcy5wdXNoQnVmZmVyID0gW107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fb25DbG9zZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVqb2luVGltZXIucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5zb2NrZXQubG9nKCdjaGFubmVsJywgYGNsb3NlICR7dGhpcy50b3BpY30gJHt0aGlzLl9qb2luUmVmKCl9YCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5jbG9zZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9yZW1vdmUodGhpcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fb25FcnJvcigocmVhc29uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0xlYXZpbmcoKSB8fCB0aGlzLl9pc0Nsb3NlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb2NrZXQubG9nKCdjaGFubmVsJywgYGVycm9yICR7dGhpcy50b3BpY31gLCByZWFzb24pO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZDtcclxuICAgICAgICAgICAgdGhpcy5yZWpvaW5UaW1lci5zY2hlZHVsZVRpbWVvdXQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmpvaW5QdXNoLnJlY2VpdmUoJ3RpbWVvdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNKb2luaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5sb2coJ2NoYW5uZWwnLCBgdGltZW91dCAke3RoaXMudG9waWN9YCwgdGhpcy5qb2luUHVzaC50aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWQ7XHJcbiAgICAgICAgICAgIHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fb24oQ0hBTk5FTF9FVkVOVFMucmVwbHksIHt9LCAocGF5bG9hZCwgcmVmKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIodGhpcy5fcmVwbHlFdmVudE5hbWUocmVmKSwgcGF5bG9hZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wcmVzZW5jZSA9IG5ldyBSZWFsdGltZVByZXNlbmNlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0RW5kcG9pbnRVUkwgPVxyXG4gICAgICAgICAgICBodHRwRW5kcG9pbnRVUkwodGhpcy5zb2NrZXQuZW5kUG9pbnQpICsgJy9hcGkvYnJvYWRjYXN0JztcclxuICAgICAgICB0aGlzLnByaXZhdGUgPSB0aGlzLnBhcmFtcy5jb25maWcucHJpdmF0ZSB8fCBmYWxzZTtcclxuICAgIH1cclxuICAgIC8qKiBTdWJzY3JpYmUgcmVnaXN0ZXJzIHlvdXIgY2xpZW50IHdpdGggdGhlIHNlcnZlciAqL1xyXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrLCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBpZiAoIXRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBDSEFOTkVMX1NUQVRFUy5jbG9zZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjb25maWc6IHsgYnJvYWRjYXN0LCBwcmVzZW5jZSwgcHJpdmF0ZTogaXNQcml2YXRlIH0sIH0gPSB0aGlzLnBhcmFtcztcclxuICAgICAgICAgICAgdGhpcy5fb25FcnJvcigoZSkgPT4gY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMuQ0hBTk5FTF9FUlJPUiwgZSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9vbkNsb3NlKCgpID0+IGNhbGxiYWNrID09PSBudWxsIHx8IGNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYWxsYmFjayhSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTLkNMT1NFRCkpO1xyXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlblBheWxvYWQgPSB7fTtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgYnJvYWRjYXN0LFxyXG4gICAgICAgICAgICAgICAgcHJlc2VuY2UsXHJcbiAgICAgICAgICAgICAgICBwb3N0Z3Jlc19jaGFuZ2VzOiAoX2IgPSAoX2EgPSB0aGlzLmJpbmRpbmdzLnBvc3RncmVzX2NoYW5nZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoKHIpID0+IHIuZmlsdGVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW10sXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlOiBpc1ByaXZhdGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvY2tldC5hY2Nlc3NUb2tlblZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlblBheWxvYWQuYWNjZXNzX3Rva2VuID0gdGhpcy5zb2NrZXQuYWNjZXNzVG9rZW5WYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUpvaW5QYXlsb2FkKE9iamVjdC5hc3NpZ24oeyBjb25maWcgfSwgYWNjZXNzVG9rZW5QYXlsb2FkKSk7XHJcbiAgICAgICAgICAgIHRoaXMuam9pbmVkT25jZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlam9pbih0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5qb2luUHVzaFxyXG4gICAgICAgICAgICAgICAgLnJlY2VpdmUoJ29rJywgYXN5bmMgKHsgcG9zdGdyZXNfY2hhbmdlcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZXRBdXRoKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zdGdyZXNfY2hhbmdlcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMuU1VCU0NSSUJFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50UG9zdGdyZXNCaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MucG9zdGdyZXNfY2hhbmdlcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiaW5kaW5nc0xlbiA9IChfYSA9IGNsaWVudFBvc3RncmVzQmluZGluZ3MgPT09IG51bGwgfHwgY2xpZW50UG9zdGdyZXNCaW5kaW5ncyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xpZW50UG9zdGdyZXNCaW5kaW5ncy5sZW5ndGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UG9zdGdyZXNCaW5kaW5ncyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluZGluZ3NMZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRQb3N0Z3Jlc0JpbmRpbmcgPSBjbGllbnRQb3N0Z3Jlc0JpbmRpbmdzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlcjogeyBldmVudCwgc2NoZW1hLCB0YWJsZSwgZmlsdGVyIH0sIH0gPSBjbGllbnRQb3N0Z3Jlc0JpbmRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZlclBvc3RncmVzRmlsdGVyID0gcG9zdGdyZXNfY2hhbmdlcyAmJiBwb3N0Z3Jlc19jaGFuZ2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmVyUG9zdGdyZXNGaWx0ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclBvc3RncmVzRmlsdGVyLmV2ZW50ID09PSBldmVudCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyUG9zdGdyZXNGaWx0ZXIuc2NoZW1hID09PSBzY2hlbWEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclBvc3RncmVzRmlsdGVyLnRhYmxlID09PSB0YWJsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyUG9zdGdyZXNGaWx0ZXIuZmlsdGVyID09PSBmaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Bvc3RncmVzQmluZGluZ3MucHVzaChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNsaWVudFBvc3RncmVzQmluZGluZyksIHsgaWQ6IHNlcnZlclBvc3RncmVzRmlsdGVyLmlkIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5lcnJvcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMuQ0hBTk5FTF9FUlJPUiwgbmV3IEVycm9yKCdtaXNtYXRjaCBiZXR3ZWVuIHNlcnZlciBhbmQgY2xpZW50IGJpbmRpbmdzIGZvciBwb3N0Z3JlcyBjaGFuZ2VzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZ3MucG9zdGdyZXNfY2hhbmdlcyA9IG5ld1Bvc3RncmVzQmluZGluZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5TVUJTQ1JJQkVEKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAucmVjZWl2ZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5lcnJvcmVkO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMuQ0hBTk5FTF9FUlJPUiwgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KE9iamVjdC52YWx1ZXMoZXJyb3IpLmpvaW4oJywgJykgfHwgJ2Vycm9yJykpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5yZWNlaXZlKCd0aW1lb3V0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMuVElNRURfT1VUKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcHJlc2VuY2VTdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZW5jZS5zdGF0ZTtcclxuICAgIH1cclxuICAgIGFzeW5jIHRyYWNrKHBheWxvYWQsIG9wdHMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiAncHJlc2VuY2UnLFxyXG4gICAgICAgICAgICBldmVudDogJ3RyYWNrJyxcclxuICAgICAgICAgICAgcGF5bG9hZCxcclxuICAgICAgICB9LCBvcHRzLnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuICAgIGFzeW5jIHVudHJhY2sob3B0cyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICdwcmVzZW5jZScsXHJcbiAgICAgICAgICAgIGV2ZW50OiAndW50cmFjaycsXHJcbiAgICAgICAgfSwgb3B0cyk7XHJcbiAgICB9XHJcbiAgICBvbih0eXBlLCBmaWx0ZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uKHR5cGUsIGZpbHRlciwgY2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kcyBhIG1lc3NhZ2UgaW50byB0aGUgY2hhbm5lbC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXJncyBBcmd1bWVudHMgdG8gc2VuZCB0byBjaGFubmVsXHJcbiAgICAgKiBAcGFyYW0gYXJncy50eXBlIFRoZSB0eXBlIG9mIGV2ZW50IHRvIHNlbmRcclxuICAgICAqIEBwYXJhbSBhcmdzLmV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudCBiZWluZyBzZW50XHJcbiAgICAgKiBAcGFyYW0gYXJncy5wYXlsb2FkIFBheWxvYWQgdG8gYmUgc2VudFxyXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyB0byBiZSB1c2VkIGR1cmluZyB0aGUgc2VuZCBwcm9jZXNzXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNlbmQoYXJncywgb3B0cyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBpZiAoIXRoaXMuX2NhblB1c2goKSAmJiBhcmdzLnR5cGUgPT09ICdicm9hZGNhc3QnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZXZlbnQsIHBheWxvYWQ6IGVuZHBvaW50X3BheWxvYWQgfSA9IGFyZ3M7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnNvY2tldC5hY2Nlc3NUb2tlblZhbHVlXHJcbiAgICAgICAgICAgICAgICA/IGBCZWFyZXIgJHt0aGlzLnNvY2tldC5hY2Nlc3NUb2tlblZhbHVlfWBcclxuICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGFwaWtleTogdGhpcy5zb2NrZXQuYXBpS2V5ID8gdGhpcy5zb2NrZXQuYXBpS2V5IDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9waWM6IHRoaXMuc3ViVG9waWMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGVuZHBvaW50X3BheWxvYWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlOiB0aGlzLnByaXZhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9mZXRjaFdpdGhUaW1lb3V0KHRoaXMuYnJvYWRjYXN0RW5kcG9pbnRVUkwsIG9wdGlvbnMsIChfYSA9IG9wdHMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy50aW1lb3V0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICgoX2IgPSByZXNwb25zZS5ib2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FuY2VsKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm9rID8gJ29rJyA6ICdlcnJvcic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0aW1lZCBvdXQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwdXNoID0gdGhpcy5fcHVzaChhcmdzLnR5cGUsIGFyZ3MsIG9wdHMudGltZW91dCB8fCB0aGlzLnRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gJ2Jyb2FkY2FzdCcgJiYgISgoX2MgPSAoX2IgPSAoX2EgPSB0aGlzLnBhcmFtcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbmZpZykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmJyb2FkY2FzdCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmFjaykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCdvaycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHVzaC5yZWNlaXZlKCdvaycsICgpID0+IHJlc29sdmUoJ29rJykpO1xyXG4gICAgICAgICAgICAgICAgcHVzaC5yZWNlaXZlKCdlcnJvcicsICgpID0+IHJlc29sdmUoJ2Vycm9yJykpO1xyXG4gICAgICAgICAgICAgICAgcHVzaC5yZWNlaXZlKCd0aW1lb3V0JywgKCkgPT4gcmVzb2x2ZSgndGltZWQgb3V0JykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB1cGRhdGVKb2luUGF5bG9hZChwYXlsb2FkKSB7XHJcbiAgICAgICAgdGhpcy5qb2luUHVzaC51cGRhdGVQYXlsb2FkKHBheWxvYWQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMZWF2ZXMgdGhlIGNoYW5uZWwuXHJcbiAgICAgKlxyXG4gICAgICogVW5zdWJzY3JpYmVzIGZyb20gc2VydmVyIGV2ZW50cywgYW5kIGluc3RydWN0cyBjaGFubmVsIHRvIHRlcm1pbmF0ZSBvbiBzZXJ2ZXIuXHJcbiAgICAgKiBUcmlnZ2VycyBvbkNsb3NlKCkgaG9va3MuXHJcbiAgICAgKlxyXG4gICAgICogVG8gcmVjZWl2ZSBsZWF2ZSBhY2tub3dsZWRnZW1lbnRzLCB1c2UgdGhlIGEgYHJlY2VpdmVgIGhvb2sgdG8gYmluZCB0byB0aGUgc2VydmVyIGFjaywgaWU6XHJcbiAgICAgKiBjaGFubmVsLnVuc3Vic2NyaWJlKCkucmVjZWl2ZShcIm9rXCIsICgpID0+IGFsZXJ0KFwibGVmdCFcIikgKVxyXG4gICAgICovXHJcbiAgICB1bnN1YnNjcmliZSh0aW1lb3V0ID0gdGhpcy50aW1lb3V0KSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmxlYXZpbmc7XHJcbiAgICAgICAgY29uc3Qgb25DbG9zZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrZXQubG9nKCdjaGFubmVsJywgYGxlYXZlICR7dGhpcy50b3BpY31gKTtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihDSEFOTkVMX0VWRU5UUy5jbG9zZSwgJ2xlYXZlJywgdGhpcy5fam9pblJlZigpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuam9pblB1c2guZGVzdHJveSgpO1xyXG4gICAgICAgIGxldCBsZWF2ZVB1c2ggPSBudWxsO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBsZWF2ZVB1c2ggPSBuZXcgUHVzaCh0aGlzLCBDSEFOTkVMX0VWRU5UUy5sZWF2ZSwge30sIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICBsZWF2ZVB1c2hcclxuICAgICAgICAgICAgICAgIC5yZWNlaXZlKCdvaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoJ29rJyk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAucmVjZWl2ZSgndGltZW91dCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoJ3RpbWVkIG91dCcpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnJlY2VpdmUoJ2Vycm9yJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnZXJyb3InKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxlYXZlUHVzaC5zZW5kKCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2FuUHVzaCgpKSB7XHJcbiAgICAgICAgICAgICAgICBsZWF2ZVB1c2gudHJpZ2dlcignb2snLCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgbGVhdmVQdXNoID09PSBudWxsIHx8IGxlYXZlUHVzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGVhdmVQdXNoLmRlc3Ryb3koKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGVhcmRvd24gdGhlIGNoYW5uZWwuXHJcbiAgICAgKlxyXG4gICAgICogRGVzdHJveXMgYW5kIHN0b3BzIHJlbGF0ZWQgdGltZXJzLlxyXG4gICAgICovXHJcbiAgICB0ZWFyZG93bigpIHtcclxuICAgICAgICB0aGlzLnB1c2hCdWZmZXIuZm9yRWFjaCgocHVzaCkgPT4gcHVzaC5kZXN0cm95KCkpO1xyXG4gICAgICAgIHRoaXMucmVqb2luVGltZXIgJiYgY2xlYXJUaW1lb3V0KHRoaXMucmVqb2luVGltZXIudGltZXIpO1xyXG4gICAgICAgIHRoaXMuam9pblB1c2guZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgYXN5bmMgX2ZldGNoV2l0aFRpbWVvdXQodXJsLCBvcHRpb25zLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc29ja2V0LmZldGNoKHVybCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pKTtcclxuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9wdXNoKGV2ZW50LCBwYXlsb2FkLCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmpvaW5lZE9uY2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgYHRyaWVkIHRvIHB1c2ggJyR7ZXZlbnR9JyB0byAnJHt0aGlzLnRvcGljfScgYmVmb3JlIGpvaW5pbmcuIFVzZSBjaGFubmVsLnN1YnNjcmliZSgpIGJlZm9yZSBwdXNoaW5nIGV2ZW50c2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwdXNoRXZlbnQgPSBuZXcgUHVzaCh0aGlzLCBldmVudCwgcGF5bG9hZCwgdGltZW91dCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhblB1c2goKSkge1xyXG4gICAgICAgICAgICBwdXNoRXZlbnQuc2VuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcHVzaEV2ZW50LnN0YXJ0VGltZW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnB1c2hCdWZmZXIucHVzaChwdXNoRXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHVzaEV2ZW50O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPdmVycmlkYWJsZSBtZXNzYWdlIGhvb2tcclxuICAgICAqXHJcbiAgICAgKiBSZWNlaXZlcyBhbGwgZXZlbnRzIGZvciBzcGVjaWFsaXplZCBtZXNzYWdlIGhhbmRsaW5nIGJlZm9yZSBkaXNwYXRjaGluZyB0byB0aGUgY2hhbm5lbCBjYWxsYmFja3MuXHJcbiAgICAgKiBNdXN0IHJldHVybiB0aGUgcGF5bG9hZCwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZC5cclxuICAgICAqXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgX29uTWVzc2FnZShfZXZlbnQsIHBheWxvYWQsIF9yZWYpIHtcclxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9pc01lbWJlcih0b3BpYykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvcGljID09PSB0b3BpYztcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9qb2luUmVmKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmpvaW5QdXNoLnJlZjtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF90cmlnZ2VyKHR5cGUsIHBheWxvYWQsIHJlZikge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdHlwZUxvd2VyID0gdHlwZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IHsgY2xvc2UsIGVycm9yLCBsZWF2ZSwgam9pbiB9ID0gQ0hBTk5FTF9FVkVOVFM7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gW2Nsb3NlLCBlcnJvciwgbGVhdmUsIGpvaW5dO1xyXG4gICAgICAgIGlmIChyZWYgJiYgZXZlbnRzLmluZGV4T2YodHlwZUxvd2VyKSA+PSAwICYmIHJlZiAhPT0gdGhpcy5fam9pblJlZigpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGhhbmRsZWRQYXlsb2FkID0gdGhpcy5fb25NZXNzYWdlKHR5cGVMb3dlciwgcGF5bG9hZCwgcmVmKTtcclxuICAgICAgICBpZiAocGF5bG9hZCAmJiAhaGFuZGxlZFBheWxvYWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgJ2NoYW5uZWwgb25NZXNzYWdlIGNhbGxiYWNrcyBtdXN0IHJldHVybiB0aGUgcGF5bG9hZCwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChbJ2luc2VydCcsICd1cGRhdGUnLCAnZGVsZXRlJ10uaW5jbHVkZXModHlwZUxvd2VyKSkge1xyXG4gICAgICAgICAgICAoX2EgPSB0aGlzLmJpbmRpbmdzLnBvc3RncmVzX2NoYW5nZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maWx0ZXIoKGJpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoKF9hID0gYmluZC5maWx0ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ldmVudCkgPT09ICcqJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICgoX2MgPSAoX2IgPSBiaW5kLmZpbHRlcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV2ZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudG9Mb2NhbGVMb3dlckNhc2UoKSkgPT09IHR5cGVMb3dlcik7XHJcbiAgICAgICAgICAgIH0pLm1hcCgoYmluZCkgPT4gYmluZC5jYWxsYmFjayhoYW5kbGVkUGF5bG9hZCwgcmVmKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAoX2IgPSB0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5maWx0ZXIoKGJpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xyXG4gICAgICAgICAgICAgICAgaWYgKFsnYnJvYWRjYXN0JywgJ3ByZXNlbmNlJywgJ3Bvc3RncmVzX2NoYW5nZXMnXS5pbmNsdWRlcyh0eXBlTG93ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCdpZCcgaW4gYmluZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiaW5kSWQgPSBiaW5kLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiaW5kRXZlbnQgPSAoX2EgPSBiaW5kLmZpbHRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGJpbmRJZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfYiA9IHBheWxvYWQuaWRzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5jbHVkZXMoYmluZElkKSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kRXZlbnQgPT09ICcqJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kRXZlbnQgPT09IG51bGwgfHwgYmluZEV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiaW5kRXZlbnQudG9Mb2NhbGVMb3dlckNhc2UoKSkgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX2MgPSBwYXlsb2FkLmRhdGEpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50eXBlLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiaW5kRXZlbnQgPSAoX2UgPSAoX2QgPSBiaW5kID09PSBudWxsIHx8IGJpbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJpbmQuZmlsdGVyKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZXZlbnQpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGJpbmRFdmVudCA9PT0gJyonIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kRXZlbnQgPT09ICgoX2YgPSBwYXlsb2FkID09PSBudWxsIHx8IHBheWxvYWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBheWxvYWQuZXZlbnQpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpbmQudHlwZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0eXBlTG93ZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLm1hcCgoYmluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVkUGF5bG9hZCA9PT0gJ29iamVjdCcgJiYgJ2lkcycgaW4gaGFuZGxlZFBheWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3N0Z3Jlc0NoYW5nZXMgPSBoYW5kbGVkUGF5bG9hZC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hLCB0YWJsZSwgY29tbWl0X3RpbWVzdGFtcCwgdHlwZSwgZXJyb3JzIH0gPSBwb3N0Z3Jlc0NoYW5nZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5yaWNoZWRQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21taXRfdGltZXN0YW1wOiBjb21taXRfdGltZXN0YW1wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldzoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZDoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogZXJyb3JzLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZFBheWxvYWQgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGVucmljaGVkUGF5bG9hZCksIHRoaXMuX2dldFBheWxvYWRSZWNvcmRzKHBvc3RncmVzQ2hhbmdlcykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYmluZC5jYWxsYmFjayhoYW5kbGVkUGF5bG9hZCwgcmVmKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX2lzQ2xvc2VkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5jbG9zZWQ7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfaXNKb2luZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5lZDtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9pc0pvaW5pbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5pbmc7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfaXNMZWF2aW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5sZWF2aW5nO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX3JlcGx5RXZlbnROYW1lKHJlZikge1xyXG4gICAgICAgIHJldHVybiBgY2hhbl9yZXBseV8ke3JlZn1gO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX29uKHR5cGUsIGZpbHRlciwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCB0eXBlTG93ZXIgPSB0eXBlLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgYmluZGluZyA9IHtcclxuICAgICAgICAgICAgdHlwZTogdHlwZUxvd2VyLFxyXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcixcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuYmluZGluZ3NbdHlwZUxvd2VyXSkge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0ucHVzaChiaW5kaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ3NbdHlwZUxvd2VyXSA9IFtiaW5kaW5nXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfb2ZmKHR5cGUsIGZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IHR5cGVMb3dlciA9IHR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0gPSB0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0uZmlsdGVyKChiaW5kKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgcmV0dXJuICEoKChfYSA9IGJpbmQudHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvTG9jYWxlTG93ZXJDYXNlKCkpID09PSB0eXBlTG93ZXIgJiZcclxuICAgICAgICAgICAgICAgIFJlYWx0aW1lQ2hhbm5lbC5pc0VxdWFsKGJpbmQuZmlsdGVyLCBmaWx0ZXIpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIHN0YXRpYyBpc0VxdWFsKG9iajEsIG9iajIpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMob2JqMSkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhvYmoyKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gb2JqMSkge1xyXG4gICAgICAgICAgICBpZiAob2JqMVtrXSAhPT0gb2JqMltrXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX3Jlam9pblVudGlsQ29ubmVjdGVkKCkge1xyXG4gICAgICAgIHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVqb2luKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2hhbm5lbCBjbG9zZXMuXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9vbkNsb3NlKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb24oQ0hBTk5FTF9FVkVOVFMuY2xvc2UsIHt9LCBjYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjaGFubmVsIGVuY291bnRlcmVzIGFuIGVycm9yLlxyXG4gICAgICpcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBfb25FcnJvcihjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuX29uKENIQU5ORUxfRVZFTlRTLmVycm9yLCB7fSwgKHJlYXNvbikgPT4gY2FsbGJhY2socmVhc29uKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkIGFuZCB0aGUgY2hhbm5lbCBoYXMgYmVlbiBqb2luZWQuXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9jYW5QdXNoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpICYmIHRoaXMuX2lzSm9pbmVkKCk7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfcmVqb2luKHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNMZWF2aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNvY2tldC5fbGVhdmVPcGVuVG9waWModGhpcy50b3BpYyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmpvaW5pbmc7XHJcbiAgICAgICAgdGhpcy5qb2luUHVzaC5yZXNlbmQodGltZW91dCk7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfZ2V0UGF5bG9hZFJlY29yZHMocGF5bG9hZCkge1xyXG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB7XHJcbiAgICAgICAgICAgIG5ldzoge30sXHJcbiAgICAgICAgICAgIG9sZDoge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGF5bG9hZC50eXBlID09PSAnSU5TRVJUJyB8fCBwYXlsb2FkLnR5cGUgPT09ICdVUERBVEUnKSB7XHJcbiAgICAgICAgICAgIHJlY29yZHMubmV3ID0gVHJhbnNmb3JtZXJzLmNvbnZlcnRDaGFuZ2VEYXRhKHBheWxvYWQuY29sdW1ucywgcGF5bG9hZC5yZWNvcmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGF5bG9hZC50eXBlID09PSAnVVBEQVRFJyB8fCBwYXlsb2FkLnR5cGUgPT09ICdERUxFVEUnKSB7XHJcbiAgICAgICAgICAgIHJlY29yZHMub2xkID0gVHJhbnNmb3JtZXJzLmNvbnZlcnRDaGFuZ2VEYXRhKHBheWxvYWQuY29sdW1ucywgcGF5bG9hZC5vbGRfcmVjb3JkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlY29yZHM7XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVhbHRpbWVDaGFubmVsLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js": /*!**************************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js ***! \**************************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ RealtimeClient; }\n/* harmony export */ });\n/* harmony import */ var isows__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! isows */ \"(app-pages-browser)/./node_modules/isows/_esm/native.js\");\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\");\n/* harmony import */ var _lib_serializer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/serializer */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js\");\n/* harmony import */ var _lib_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/timer */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/timer.js\");\n/* harmony import */ var _lib_transformers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/transformers */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js\");\n/* harmony import */ var _RealtimeChannel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RealtimeChannel */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nconst noop = () => { };\r\nconst WORKER_SCRIPT = `\r\n addEventListener(\"message\", (e) => {\r\n if (e.data.event === \"start\") {\r\n setInterval(() => postMessage({ event: \"keepAlive\" }), e.data.interval);\r\n }\r\n });`;\r\nclass RealtimeClient {\r\n /**\r\n * Initializes the Socket.\r\n *\r\n * @param endPoint The string WebSocket endpoint, ie, \"ws://example.com/socket\", \"wss://example.com\", \"/socket\" (inherited host & protocol)\r\n * @param httpEndpoint The string HTTP endpoint, ie, \"https://example.com\", \"/\" (inherited host & protocol)\r\n * @param options.transport The Websocket Transport, for example WebSocket. This can be a custom implementation\r\n * @param options.timeout The default timeout in milliseconds to trigger push timeouts.\r\n * @param options.params The optional params to pass when connecting.\r\n * @param options.headers Deprecated: headers cannot be set on websocket connections and this option will be removed in the future.\r\n * @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message.\r\n * @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }\r\n * @param options.logLevel Sets the log level for Realtime\r\n * @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload))\r\n * @param options.decode The function to decode incoming messages. Defaults to Serializer's decode.\r\n * @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off.\r\n * @param options.worker Use Web Worker to set a side flow. Defaults to false.\r\n * @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive.\r\n */\r\n constructor(endPoint, options) {\r\n var _a;\r\n this.accessTokenValue = null;\r\n this.apiKey = null;\r\n this.channels = new Array();\r\n this.endPoint = '';\r\n this.httpEndpoint = '';\r\n /** @deprecated headers cannot be set on websocket connections */\r\n this.headers = {};\r\n this.params = {};\r\n this.timeout = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_TIMEOUT;\r\n this.heartbeatIntervalMs = 25000;\r\n this.heartbeatTimer = undefined;\r\n this.pendingHeartbeatRef = null;\r\n this.heartbeatCallback = noop;\r\n this.ref = 0;\r\n this.logger = noop;\r\n this.conn = null;\r\n this.sendBuffer = [];\r\n this.serializer = new _lib_serializer__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\r\n this.stateChangeCallbacks = {\r\n open: [],\r\n close: [],\r\n error: [],\r\n message: [],\r\n };\r\n this.accessToken = null;\r\n /**\r\n * Use either custom fetch, if provided, or default fetch to make HTTP requests\r\n *\r\n * @internal\r\n */\r\n this._resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! @supabase/node-fetch */ \"(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\")).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n };\r\n this.endPoint = `${endPoint}/${_lib_constants__WEBPACK_IMPORTED_MODULE_0__.TRANSPORTS.websocket}`;\r\n this.httpEndpoint = (0,_lib_transformers__WEBPACK_IMPORTED_MODULE_3__.httpEndpointURL)(endPoint);\r\n if (options === null || options === void 0 ? void 0 : options.transport) {\r\n this.transport = options.transport;\r\n }\r\n else {\r\n this.transport = null;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.params)\r\n this.params = options.params;\r\n if (options === null || options === void 0 ? void 0 : options.timeout)\r\n this.timeout = options.timeout;\r\n if (options === null || options === void 0 ? void 0 : options.logger)\r\n this.logger = options.logger;\r\n if ((options === null || options === void 0 ? void 0 : options.logLevel) || (options === null || options === void 0 ? void 0 : options.log_level)) {\r\n this.logLevel = options.logLevel || options.log_level;\r\n this.params = Object.assign(Object.assign({}, this.params), { log_level: this.logLevel });\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs)\r\n this.heartbeatIntervalMs = options.heartbeatIntervalMs;\r\n const accessTokenValue = (_a = options === null || options === void 0 ? void 0 : options.params) === null || _a === void 0 ? void 0 : _a.apikey;\r\n if (accessTokenValue) {\r\n this.accessTokenValue = accessTokenValue;\r\n this.apiKey = accessTokenValue;\r\n }\r\n this.reconnectAfterMs = (options === null || options === void 0 ? void 0 : options.reconnectAfterMs)\r\n ? options.reconnectAfterMs\r\n : (tries) => {\r\n return [1000, 2000, 5000, 10000][tries - 1] || 10000;\r\n };\r\n this.encode = (options === null || options === void 0 ? void 0 : options.encode)\r\n ? options.encode\r\n : (payload, callback) => {\r\n return callback(JSON.stringify(payload));\r\n };\r\n this.decode = (options === null || options === void 0 ? void 0 : options.decode)\r\n ? options.decode\r\n : this.serializer.decode.bind(this.serializer);\r\n this.reconnectTimer = new _lib_timer__WEBPACK_IMPORTED_MODULE_2__[\"default\"](async () => {\r\n this.disconnect();\r\n this.connect();\r\n }, this.reconnectAfterMs);\r\n this.fetch = this._resolveFetch(options === null || options === void 0 ? void 0 : options.fetch);\r\n if (options === null || options === void 0 ? void 0 : options.worker) {\r\n if (typeof window !== 'undefined' && !window.Worker) {\r\n throw new Error('Web Worker is not supported');\r\n }\r\n this.worker = (options === null || options === void 0 ? void 0 : options.worker) || false;\r\n this.workerUrl = options === null || options === void 0 ? void 0 : options.workerUrl;\r\n }\r\n this.accessToken = (options === null || options === void 0 ? void 0 : options.accessToken) || null;\r\n }\r\n /**\r\n * Connects the socket, unless already connected.\r\n */\r\n connect() {\r\n if (this.conn) {\r\n return;\r\n }\r\n if (!this.transport) {\r\n this.transport = isows__WEBPACK_IMPORTED_MODULE_5__.WebSocket;\r\n }\r\n if (!this.transport) {\r\n throw new Error('No transport provided');\r\n }\r\n this.conn = new this.transport(this.endpointURL());\r\n this.setupConnection();\r\n }\r\n /**\r\n * Returns the URL of the websocket.\r\n * @returns string The URL of the websocket.\r\n */\r\n endpointURL() {\r\n return this._appendParams(this.endPoint, Object.assign({}, this.params, { vsn: _lib_constants__WEBPACK_IMPORTED_MODULE_0__.VSN }));\r\n }\r\n /**\r\n * Disconnects the socket.\r\n *\r\n * @param code A numeric status code to send on disconnect.\r\n * @param reason A custom reason for the disconnect.\r\n */\r\n disconnect(code, reason) {\r\n if (this.conn) {\r\n this.conn.onclose = function () { }; // noop\r\n if (code) {\r\n this.conn.close(code, reason !== null && reason !== void 0 ? reason : '');\r\n }\r\n else {\r\n this.conn.close();\r\n }\r\n this.conn = null;\r\n // remove open handles\r\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\r\n this.reconnectTimer.reset();\r\n this.channels.forEach((channel) => channel.teardown());\r\n }\r\n }\r\n /**\r\n * Returns all created channels\r\n */\r\n getChannels() {\r\n return this.channels;\r\n }\r\n /**\r\n * Unsubscribes and removes a single channel\r\n * @param channel A RealtimeChannel instance\r\n */\r\n async removeChannel(channel) {\r\n const status = await channel.unsubscribe();\r\n if (this.channels.length === 0) {\r\n this.disconnect();\r\n }\r\n return status;\r\n }\r\n /**\r\n * Unsubscribes and removes all channels\r\n */\r\n async removeAllChannels() {\r\n const values_1 = await Promise.all(this.channels.map((channel) => channel.unsubscribe()));\r\n this.channels = [];\r\n this.disconnect();\r\n return values_1;\r\n }\r\n /**\r\n * Logs the message.\r\n *\r\n * For customized logging, `this.logger` can be overridden.\r\n */\r\n log(kind, msg, data) {\r\n this.logger(kind, msg, data);\r\n }\r\n /**\r\n * Returns the current state of the socket.\r\n */\r\n connectionState() {\r\n switch (this.conn && this.conn.readyState) {\r\n case _lib_constants__WEBPACK_IMPORTED_MODULE_0__.SOCKET_STATES.connecting:\r\n return _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CONNECTION_STATE.Connecting;\r\n case _lib_constants__WEBPACK_IMPORTED_MODULE_0__.SOCKET_STATES.open:\r\n return _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CONNECTION_STATE.Open;\r\n case _lib_constants__WEBPACK_IMPORTED_MODULE_0__.SOCKET_STATES.closing:\r\n return _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CONNECTION_STATE.Closing;\r\n default:\r\n return _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CONNECTION_STATE.Closed;\r\n }\r\n }\r\n /**\r\n * Returns `true` is the connection is open.\r\n */\r\n isConnected() {\r\n return this.connectionState() === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CONNECTION_STATE.Open;\r\n }\r\n channel(topic, params = { config: {} }) {\r\n const realtimeTopic = `realtime:${topic}`;\r\n const exists = this.getChannels().find((c) => c.topic === realtimeTopic);\r\n if (!exists) {\r\n const chan = new _RealtimeChannel__WEBPACK_IMPORTED_MODULE_4__[\"default\"](`realtime:${topic}`, params, this);\r\n this.channels.push(chan);\r\n return chan;\r\n }\r\n else {\r\n return exists;\r\n }\r\n }\r\n /**\r\n * Push out a message if the socket is connected.\r\n *\r\n * If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.\r\n */\r\n push(data) {\r\n const { topic, event, payload, ref } = data;\r\n const callback = () => {\r\n this.encode(data, (result) => {\r\n var _a;\r\n (_a = this.conn) === null || _a === void 0 ? void 0 : _a.send(result);\r\n });\r\n };\r\n this.log('push', `${topic} ${event} (${ref})`, payload);\r\n if (this.isConnected()) {\r\n callback();\r\n }\r\n else {\r\n this.sendBuffer.push(callback);\r\n }\r\n }\r\n /**\r\n * Sets the JWT access token used for channel subscription authorization and Realtime RLS.\r\n *\r\n * If param is null it will use the `accessToken` callback function or the token set on the client.\r\n *\r\n * On callback used, it will set the value of the token internal to the client.\r\n *\r\n * @param token A JWT string to override the token set on the client.\r\n */\r\n async setAuth(token = null) {\r\n let tokenToSend = token ||\r\n (this.accessToken && (await this.accessToken())) ||\r\n this.accessTokenValue;\r\n if (this.accessTokenValue != tokenToSend) {\r\n this.accessTokenValue = tokenToSend;\r\n this.channels.forEach((channel) => {\r\n const payload = {\r\n access_token: tokenToSend,\r\n version: _lib_constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_VERSION,\r\n };\r\n tokenToSend && channel.updateJoinPayload(payload);\r\n if (channel.joinedOnce && channel._isJoined()) {\r\n channel._push(_lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.access_token, {\r\n access_token: tokenToSend,\r\n });\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Sends a heartbeat message if the socket is connected.\r\n */\r\n async sendHeartbeat() {\r\n var _a;\r\n if (!this.isConnected()) {\r\n this.heartbeatCallback('disconnected');\r\n return;\r\n }\r\n if (this.pendingHeartbeatRef) {\r\n this.pendingHeartbeatRef = null;\r\n this.log('transport', 'heartbeat timeout. Attempting to re-establish connection');\r\n this.heartbeatCallback('timeout');\r\n (_a = this.conn) === null || _a === void 0 ? void 0 : _a.close(_lib_constants__WEBPACK_IMPORTED_MODULE_0__.WS_CLOSE_NORMAL, 'hearbeat timeout');\r\n return;\r\n }\r\n this.pendingHeartbeatRef = this._makeRef();\r\n this.push({\r\n topic: 'phoenix',\r\n event: 'heartbeat',\r\n payload: {},\r\n ref: this.pendingHeartbeatRef,\r\n });\r\n this.heartbeatCallback('sent');\r\n await this.setAuth();\r\n }\r\n onHeartbeat(callback) {\r\n this.heartbeatCallback = callback;\r\n }\r\n /**\r\n * Flushes send buffer\r\n */\r\n flushSendBuffer() {\r\n if (this.isConnected() && this.sendBuffer.length > 0) {\r\n this.sendBuffer.forEach((callback) => callback());\r\n this.sendBuffer = [];\r\n }\r\n }\r\n /**\r\n * Return the next message ref, accounting for overflows\r\n *\r\n * @internal\r\n */\r\n _makeRef() {\r\n let newRef = this.ref + 1;\r\n if (newRef === this.ref) {\r\n this.ref = 0;\r\n }\r\n else {\r\n this.ref = newRef;\r\n }\r\n return this.ref.toString();\r\n }\r\n /**\r\n * Unsubscribe from channels with the specified topic.\r\n *\r\n * @internal\r\n */\r\n _leaveOpenTopic(topic) {\r\n let dupChannel = this.channels.find((c) => c.topic === topic && (c._isJoined() || c._isJoining()));\r\n if (dupChannel) {\r\n this.log('transport', `leaving duplicate topic \"${topic}\"`);\r\n dupChannel.unsubscribe();\r\n }\r\n }\r\n /**\r\n * Removes a subscription from the socket.\r\n *\r\n * @param channel An open subscription.\r\n *\r\n * @internal\r\n */\r\n _remove(channel) {\r\n this.channels = this.channels.filter((c) => c.topic !== channel.topic);\r\n }\r\n /**\r\n * Sets up connection handlers.\r\n *\r\n * @internal\r\n */\r\n setupConnection() {\r\n if (this.conn) {\r\n this.conn.binaryType = 'arraybuffer';\r\n this.conn.onopen = () => this._onConnOpen();\r\n this.conn.onerror = (error) => this._onConnError(error);\r\n this.conn.onmessage = (event) => this._onConnMessage(event);\r\n this.conn.onclose = (event) => this._onConnClose(event);\r\n }\r\n }\r\n /** @internal */\r\n _onConnMessage(rawMessage) {\r\n this.decode(rawMessage.data, (msg) => {\r\n let { topic, event, payload, ref } = msg;\r\n if (topic === 'phoenix' && event === 'phx_reply') {\r\n this.heartbeatCallback(msg.payload.status == 'ok' ? 'ok' : 'error');\r\n }\r\n if (ref && ref === this.pendingHeartbeatRef) {\r\n this.pendingHeartbeatRef = null;\r\n }\r\n this.log('receive', `${payload.status || ''} ${topic} ${event} ${(ref && '(' + ref + ')') || ''}`, payload);\r\n Array.from(this.channels)\r\n .filter((channel) => channel._isMember(topic))\r\n .forEach((channel) => channel._trigger(event, payload, ref));\r\n this.stateChangeCallbacks.message.forEach((callback) => callback(msg));\r\n });\r\n }\r\n /** @internal */\r\n _onConnOpen() {\r\n this.log('transport', `connected to ${this.endpointURL()}`);\r\n this.flushSendBuffer();\r\n this.reconnectTimer.reset();\r\n if (!this.worker) {\r\n this._startHeartbeat();\r\n }\r\n else {\r\n if (!this.workerRef) {\r\n this._startWorkerHeartbeat();\r\n }\r\n }\r\n this.stateChangeCallbacks.open.forEach((callback) => callback());\r\n }\r\n /** @internal */\r\n _startHeartbeat() {\r\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\r\n this.heartbeatTimer = setInterval(() => this.sendHeartbeat(), this.heartbeatIntervalMs);\r\n }\r\n /** @internal */\r\n _startWorkerHeartbeat() {\r\n if (this.workerUrl) {\r\n this.log('worker', `starting worker for from ${this.workerUrl}`);\r\n }\r\n else {\r\n this.log('worker', `starting default worker`);\r\n }\r\n const objectUrl = this._workerObjectUrl(this.workerUrl);\r\n this.workerRef = new Worker(objectUrl);\r\n this.workerRef.onerror = (error) => {\r\n this.log('worker', 'worker error', error.message);\r\n this.workerRef.terminate();\r\n };\r\n this.workerRef.onmessage = (event) => {\r\n if (event.data.event === 'keepAlive') {\r\n this.sendHeartbeat();\r\n }\r\n };\r\n this.workerRef.postMessage({\r\n event: 'start',\r\n interval: this.heartbeatIntervalMs,\r\n });\r\n }\r\n /** @internal */\r\n _onConnClose(event) {\r\n this.log('transport', 'close', event);\r\n this._triggerChanError();\r\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\r\n this.reconnectTimer.scheduleTimeout();\r\n this.stateChangeCallbacks.close.forEach((callback) => callback(event));\r\n }\r\n /** @internal */\r\n _onConnError(error) {\r\n this.log('transport', `${error}`);\r\n this._triggerChanError();\r\n this.stateChangeCallbacks.error.forEach((callback) => callback(error));\r\n }\r\n /** @internal */\r\n _triggerChanError() {\r\n this.channels.forEach((channel) => channel._trigger(_lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS.error));\r\n }\r\n /** @internal */\r\n _appendParams(url, params) {\r\n if (Object.keys(params).length === 0) {\r\n return url;\r\n }\r\n const prefix = url.match(/\\?/) ? '&' : '?';\r\n const query = new URLSearchParams(params);\r\n return `${url}${prefix}${query}`;\r\n }\r\n _workerObjectUrl(url) {\r\n let result_url;\r\n if (url) {\r\n result_url = url;\r\n }\r\n else {\r\n const blob = new Blob([WORKER_SCRIPT], { type: 'application/javascript' });\r\n result_url = URL.createObjectURL(blob);\r\n }\r\n return result_url;\r\n }\r\n}\r\n//# sourceMappingURL=RealtimeClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVDbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFrQztBQUNxSDtBQUM3RztBQUNWO0FBQ3FCO0FBQ0w7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0Msb0JBQW9CO0FBQzFEO0FBQ0EsR0FBRyxFQUFFO0FBQ1U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtHQUErRyxlQUFlLEtBQUssSUFBSSxJQUFJO0FBQzNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMkRBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qix1REFBVTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0Msc0xBQThCLFNBQVMsZ0JBQWdCO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixTQUFTLEdBQUcsc0RBQVUsV0FBVztBQUM1RCw0QkFBNEIsa0VBQWU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxrQkFBa0IsMEJBQTBCO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxrREFB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QzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxtQkFBbUI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxlQUFlO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLE1BQU07QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCwwREFBYztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxnQ0FBZ0M7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVDbGllbnQuanM/ZDMwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJTb2NrZXQgfSBmcm9tICdpc293cyc7XHJcbmltcG9ydCB7IENIQU5ORUxfRVZFTlRTLCBDT05ORUNUSU9OX1NUQVRFLCBERUZBVUxUX1ZFUlNJT04sIERFRkFVTFRfVElNRU9VVCwgU09DS0VUX1NUQVRFUywgVFJBTlNQT1JUUywgVlNOLCBXU19DTE9TRV9OT1JNQUwsIH0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcclxuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSAnLi9saWIvc2VyaWFsaXplcic7XHJcbmltcG9ydCBUaW1lciBmcm9tICcuL2xpYi90aW1lcic7XHJcbmltcG9ydCB7IGh0dHBFbmRwb2ludFVSTCB9IGZyb20gJy4vbGliL3RyYW5zZm9ybWVycyc7XHJcbmltcG9ydCBSZWFsdGltZUNoYW5uZWwgZnJvbSAnLi9SZWFsdGltZUNoYW5uZWwnO1xyXG5jb25zdCBub29wID0gKCkgPT4geyB9O1xyXG5jb25zdCBXT1JLRVJfU0NSSVBUID0gYFxyXG4gIGFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChlKSA9PiB7XHJcbiAgICBpZiAoZS5kYXRhLmV2ZW50ID09PSBcInN0YXJ0XCIpIHtcclxuICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4gcG9zdE1lc3NhZ2UoeyBldmVudDogXCJrZWVwQWxpdmVcIiB9KSwgZS5kYXRhLmludGVydmFsKTtcclxuICAgIH1cclxuICB9KTtgO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsdGltZUNsaWVudCB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIHRoZSBTb2NrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGVuZFBvaW50IFRoZSBzdHJpbmcgV2ViU29ja2V0IGVuZHBvaW50LCBpZSwgXCJ3czovL2V4YW1wbGUuY29tL3NvY2tldFwiLCBcIndzczovL2V4YW1wbGUuY29tXCIsIFwiL3NvY2tldFwiIChpbmhlcml0ZWQgaG9zdCAmIHByb3RvY29sKVxyXG4gICAgICogQHBhcmFtIGh0dHBFbmRwb2ludCBUaGUgc3RyaW5nIEhUVFAgZW5kcG9pbnQsIGllLCBcImh0dHBzOi8vZXhhbXBsZS5jb21cIiwgXCIvXCIgKGluaGVyaXRlZCBob3N0ICYgcHJvdG9jb2wpXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy50cmFuc3BvcnQgVGhlIFdlYnNvY2tldCBUcmFuc3BvcnQsIGZvciBleGFtcGxlIFdlYlNvY2tldC4gVGhpcyBjYW4gYmUgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnRpbWVvdXQgVGhlIGRlZmF1bHQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gdHJpZ2dlciBwdXNoIHRpbWVvdXRzLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucGFyYW1zIFRoZSBvcHRpb25hbCBwYXJhbXMgdG8gcGFzcyB3aGVuIGNvbm5lY3RpbmcuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5oZWFkZXJzIERlcHJlY2F0ZWQ6IGhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiB3ZWJzb2NrZXQgY29ubmVjdGlvbnMgYW5kIHRoaXMgb3B0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaGVhcnRiZWF0SW50ZXJ2YWxNcyBUaGUgbWlsbGlzZWMgaW50ZXJ2YWwgdG8gc2VuZCBhIGhlYXJ0YmVhdCBtZXNzYWdlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMubG9nZ2VyIFRoZSBvcHRpb25hbCBmdW5jdGlvbiBmb3Igc3BlY2lhbGl6ZWQgbG9nZ2luZywgaWU6IGxvZ2dlcjogKGtpbmQsIG1zZywgZGF0YSkgPT4geyBjb25zb2xlLmxvZyhgJHtraW5kfTogJHttc2d9YCwgZGF0YSkgfVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMubG9nTGV2ZWwgU2V0cyB0aGUgbG9nIGxldmVsIGZvciBSZWFsdGltZVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZW5jb2RlIFRoZSBmdW5jdGlvbiB0byBlbmNvZGUgb3V0Z29pbmcgbWVzc2FnZXMuIERlZmF1bHRzIHRvIEpTT046IChwYXlsb2FkLCBjYWxsYmFjaykgPT4gY2FsbGJhY2soSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5kZWNvZGUgVGhlIGZ1bmN0aW9uIHRvIGRlY29kZSBpbmNvbWluZyBtZXNzYWdlcy4gRGVmYXVsdHMgdG8gU2VyaWFsaXplcidzIGRlY29kZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnJlY29ubmVjdEFmdGVyTXMgaGUgb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBtaWxsc2VjIHJlY29ubmVjdCBpbnRlcnZhbC4gRGVmYXVsdHMgdG8gc3RlcHBlZCBiYWNrb2ZmIG9mZi5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLndvcmtlciBVc2UgV2ViIFdvcmtlciB0byBzZXQgYSBzaWRlIGZsb3cuIERlZmF1bHRzIHRvIGZhbHNlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMud29ya2VyVXJsIFRoZSBVUkwgb2YgdGhlIHdvcmtlciBzY3JpcHQuIERlZmF1bHRzIHRvIGh0dHBzOi8vcmVhbHRpbWUuc3VwYWJhc2UuY29tL3dvcmtlci5qcyB0aGF0IGluY2x1ZGVzIGEgaGVhcnRiZWF0IGV2ZW50IGNhbGwgdG8ga2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoZW5kUG9pbnQsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlblZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmFwaUtleSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGFubmVscyA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSAnJztcclxuICAgICAgICB0aGlzLmh0dHBFbmRwb2ludCA9ICcnO1xyXG4gICAgICAgIC8qKiBAZGVwcmVjYXRlZCBoZWFkZXJzIGNhbm5vdCBiZSBzZXQgb24gd2Vic29ja2V0IGNvbm5lY3Rpb25zICovXHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7XHJcbiAgICAgICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zID0gMjUwMDA7XHJcbiAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2sgPSBub29wO1xyXG4gICAgICAgIHRoaXMucmVmID0gMDtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IG5vb3A7XHJcbiAgICAgICAgdGhpcy5jb25uID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXTtcclxuICAgICAgICB0aGlzLnNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplcigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MgPSB7XHJcbiAgICAgICAgICAgIG9wZW46IFtdLFxyXG4gICAgICAgICAgICBjbG9zZTogW10sXHJcbiAgICAgICAgICAgIGVycm9yOiBbXSxcclxuICAgICAgICAgICAgbWVzc2FnZTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gbnVsbDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2UgZWl0aGVyIGN1c3RvbSBmZXRjaCwgaWYgcHJvdmlkZWQsIG9yIGRlZmF1bHQgZmV0Y2ggdG8gbWFrZSBIVFRQIHJlcXVlc3RzXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9yZXNvbHZlRmV0Y2ggPSAoY3VzdG9tRmV0Y2gpID0+IHtcclxuICAgICAgICAgICAgbGV0IF9mZXRjaDtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbUZldGNoKSB7XHJcbiAgICAgICAgICAgICAgICBfZmV0Y2ggPSBjdXN0b21GZXRjaDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBfZmV0Y2ggPSAoLi4uYXJncykgPT4gaW1wb3J0KCdAc3VwYWJhc2Uvbm9kZS1mZXRjaCcpLnRoZW4oKHsgZGVmYXVsdDogZmV0Y2ggfSkgPT4gZmV0Y2goLi4uYXJncykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX2ZldGNoID0gZmV0Y2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiBfZmV0Y2goLi4uYXJncyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVuZFBvaW50ID0gYCR7ZW5kUG9pbnR9LyR7VFJBTlNQT1JUUy53ZWJzb2NrZXR9YDtcclxuICAgICAgICB0aGlzLmh0dHBFbmRwb2ludCA9IGh0dHBFbmRwb2ludFVSTChlbmRQb2ludCk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50cmFuc3BvcnQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQgPSBvcHRpb25zLnRyYW5zcG9ydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXJhbXMpXHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zID0gb3B0aW9ucy5wYXJhbXM7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50aW1lb3V0KVxyXG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2dnZXIpXHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyID0gb3B0aW9ucy5sb2dnZXI7XHJcbiAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9nTGV2ZWwpIHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9nX2xldmVsKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ0xldmVsID0gb3B0aW9ucy5sb2dMZXZlbCB8fCBvcHRpb25zLmxvZ19sZXZlbDtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1zKSwgeyBsb2dfbGV2ZWw6IHRoaXMubG9nTGV2ZWwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhcnRiZWF0SW50ZXJ2YWxNcylcclxuICAgICAgICAgICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zID0gb3B0aW9ucy5oZWFydGJlYXRJbnRlcnZhbE1zO1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuVmFsdWUgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucGFyYW1zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYXBpa2V5O1xyXG4gICAgICAgIGlmIChhY2Nlc3NUb2tlblZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW5WYWx1ZSA9IGFjY2Vzc1Rva2VuVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYXBpS2V5ID0gYWNjZXNzVG9rZW5WYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RBZnRlck1zID0gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZWNvbm5lY3RBZnRlck1zKVxyXG4gICAgICAgICAgICA/IG9wdGlvbnMucmVjb25uZWN0QWZ0ZXJNc1xyXG4gICAgICAgICAgICA6ICh0cmllcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsxMDAwLCAyMDAwLCA1MDAwLCAxMDAwMF1bdHJpZXMgLSAxXSB8fCAxMDAwMDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVuY29kZSA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZW5jb2RlKVxyXG4gICAgICAgICAgICA/IG9wdGlvbnMuZW5jb2RlXHJcbiAgICAgICAgICAgIDogKHBheWxvYWQsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZGVjb2RlID0gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kZWNvZGUpXHJcbiAgICAgICAgICAgID8gb3B0aW9ucy5kZWNvZGVcclxuICAgICAgICAgICAgOiB0aGlzLnNlcmlhbGl6ZXIuZGVjb2RlLmJpbmQodGhpcy5zZXJpYWxpemVyKTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbmV3IFRpbWVyKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdCgpO1xyXG4gICAgICAgIH0sIHRoaXMucmVjb25uZWN0QWZ0ZXJNcyk7XHJcbiAgICAgICAgdGhpcy5mZXRjaCA9IHRoaXMuX3Jlc29sdmVGZXRjaChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmV0Y2gpO1xyXG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud29ya2VyKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhd2luZG93Lldvcmtlcikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWIgV29ya2VyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLndvcmtlciA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud29ya2VyKSB8fCBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy53b3JrZXJVcmwgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud29ya2VyVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hY2Nlc3NUb2tlbikgfHwgbnVsbDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ29ubmVjdHMgdGhlIHNvY2tldCwgdW5sZXNzIGFscmVhZHkgY29ubmVjdGVkLlxyXG4gICAgICovXHJcbiAgICBjb25uZWN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbm4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudHJhbnNwb3J0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gV2ViU29ja2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudHJhbnNwb3J0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdHJhbnNwb3J0IHByb3ZpZGVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29ubiA9IG5ldyB0aGlzLnRyYW5zcG9ydCh0aGlzLmVuZHBvaW50VVJMKCkpO1xyXG4gICAgICAgIHRoaXMuc2V0dXBDb25uZWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgd2Vic29ja2V0LlxyXG4gICAgICogQHJldHVybnMgc3RyaW5nIFRoZSBVUkwgb2YgdGhlIHdlYnNvY2tldC5cclxuICAgICAqL1xyXG4gICAgZW5kcG9pbnRVUkwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGVuZFBhcmFtcyh0aGlzLmVuZFBvaW50LCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcmFtcywgeyB2c246IFZTTiB9KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIERpc2Nvbm5lY3RzIHRoZSBzb2NrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvZGUgQSBudW1lcmljIHN0YXR1cyBjb2RlIHRvIHNlbmQgb24gZGlzY29ubmVjdC5cclxuICAgICAqIEBwYXJhbSByZWFzb24gQSBjdXN0b20gcmVhc29uIGZvciB0aGUgZGlzY29ubmVjdC5cclxuICAgICAqL1xyXG4gICAgZGlzY29ubmVjdChjb2RlLCByZWFzb24pIHtcclxuICAgICAgICBpZiAodGhpcy5jb25uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubi5vbmNsb3NlID0gZnVuY3Rpb24gKCkgeyB9OyAvLyBub29wXHJcbiAgICAgICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm4uY2xvc2UoY29kZSwgcmVhc29uICE9PSBudWxsICYmIHJlYXNvbiAhPT0gdm9pZCAwID8gcmVhc29uIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb25uID0gbnVsbDtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIG9wZW4gaGFuZGxlc1xyXG4gICAgICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyICYmIGNsZWFySW50ZXJ2YWwodGhpcy5oZWFydGJlYXRUaW1lcik7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVscy5mb3JFYWNoKChjaGFubmVsKSA9PiBjaGFubmVsLnRlYXJkb3duKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgY3JlYXRlZCBjaGFubmVsc1xyXG4gICAgICovXHJcbiAgICBnZXRDaGFubmVscygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVscztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVW5zdWJzY3JpYmVzIGFuZCByZW1vdmVzIGEgc2luZ2xlIGNoYW5uZWxcclxuICAgICAqIEBwYXJhbSBjaGFubmVsIEEgUmVhbHRpbWVDaGFubmVsIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlbW92ZUNoYW5uZWwoY2hhbm5lbCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGNoYW5uZWwudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBpZiAodGhpcy5jaGFubmVscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGF0dXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVuc3Vic2NyaWJlcyBhbmQgcmVtb3ZlcyBhbGwgY2hhbm5lbHNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVtb3ZlQWxsQ2hhbm5lbHMoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzXzEgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmNoYW5uZWxzLm1hcCgoY2hhbm5lbCkgPT4gY2hhbm5lbC51bnN1YnNjcmliZSgpKSk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVscyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXNfMTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9ncyB0aGUgbWVzc2FnZS5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgY3VzdG9taXplZCBsb2dnaW5nLCBgdGhpcy5sb2dnZXJgIGNhbiBiZSBvdmVycmlkZGVuLlxyXG4gICAgICovXHJcbiAgICBsb2coa2luZCwgbXNnLCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIoa2luZCwgbXNnLCBkYXRhKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc29ja2V0LlxyXG4gICAgICovXHJcbiAgICBjb25uZWN0aW9uU3RhdGUoKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmNvbm4gJiYgdGhpcy5jb25uLnJlYWR5U3RhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTT0NLRVRfU1RBVEVTLmNvbm5lY3Rpbmc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ09OTkVDVElPTl9TVEFURS5Db25uZWN0aW5nO1xyXG4gICAgICAgICAgICBjYXNlIFNPQ0tFVF9TVEFURVMub3BlbjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDT05ORUNUSU9OX1NUQVRFLk9wZW47XHJcbiAgICAgICAgICAgIGNhc2UgU09DS0VUX1NUQVRFUy5jbG9zaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENPTk5FQ1RJT05fU1RBVEUuQ2xvc2luZztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDT05ORUNUSU9OX1NUQVRFLkNsb3NlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYHRydWVgIGlzIHRoZSBjb25uZWN0aW9uIGlzIG9wZW4uXHJcbiAgICAgKi9cclxuICAgIGlzQ29ubmVjdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25TdGF0ZSgpID09PSBDT05ORUNUSU9OX1NUQVRFLk9wZW47XHJcbiAgICB9XHJcbiAgICBjaGFubmVsKHRvcGljLCBwYXJhbXMgPSB7IGNvbmZpZzoge30gfSkge1xyXG4gICAgICAgIGNvbnN0IHJlYWx0aW1lVG9waWMgPSBgcmVhbHRpbWU6JHt0b3BpY31gO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuZ2V0Q2hhbm5lbHMoKS5maW5kKChjKSA9PiBjLnRvcGljID09PSByZWFsdGltZVRvcGljKTtcclxuICAgICAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGFuID0gbmV3IFJlYWx0aW1lQ2hhbm5lbChgcmVhbHRpbWU6JHt0b3BpY31gLCBwYXJhbXMsIHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxzLnB1c2goY2hhbik7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGFuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV4aXN0cztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFB1c2ggb3V0IGEgbWVzc2FnZSBpZiB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZC5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgc29ja2V0IGlzIG5vdCBjb25uZWN0ZWQsIHRoZSBtZXNzYWdlIGdldHMgZW5xdWV1ZWQgd2l0aGluIGEgbG9jYWwgYnVmZmVyLCBhbmQgc2VudCBvdXQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbmV4dCBlc3RhYmxpc2hlZC5cclxuICAgICAqL1xyXG4gICAgcHVzaChkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeyB0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiB9ID0gZGF0YTtcclxuICAgICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbmNvZGUoZGF0YSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgKF9hID0gdGhpcy5jb25uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VuZChyZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubG9nKCdwdXNoJywgYCR7dG9waWN9ICR7ZXZlbnR9ICgke3JlZn0pYCwgcGF5bG9hZCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kQnVmZmVyLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgSldUIGFjY2VzcyB0b2tlbiB1c2VkIGZvciBjaGFubmVsIHN1YnNjcmlwdGlvbiBhdXRob3JpemF0aW9uIGFuZCBSZWFsdGltZSBSTFMuXHJcbiAgICAgKlxyXG4gICAgICogSWYgcGFyYW0gaXMgbnVsbCBpdCB3aWxsIHVzZSB0aGUgYGFjY2Vzc1Rva2VuYCBjYWxsYmFjayBmdW5jdGlvbiBvciB0aGUgdG9rZW4gc2V0IG9uIHRoZSBjbGllbnQuXHJcbiAgICAgKlxyXG4gICAgICogT24gY2FsbGJhY2sgdXNlZCwgaXQgd2lsbCBzZXQgdGhlIHZhbHVlIG9mIHRoZSB0b2tlbiBpbnRlcm5hbCB0byB0aGUgY2xpZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0b2tlbiBBIEpXVCBzdHJpbmcgdG8gb3ZlcnJpZGUgdGhlIHRva2VuIHNldCBvbiB0aGUgY2xpZW50LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZXRBdXRoKHRva2VuID0gbnVsbCkge1xyXG4gICAgICAgIGxldCB0b2tlblRvU2VuZCA9IHRva2VuIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmFjY2Vzc1Rva2VuICYmIChhd2FpdCB0aGlzLmFjY2Vzc1Rva2VuKCkpKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuVmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuYWNjZXNzVG9rZW5WYWx1ZSAhPSB0b2tlblRvU2VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuVmFsdWUgPSB0b2tlblRvU2VuZDtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVscy5mb3JFYWNoKChjaGFubmVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogdG9rZW5Ub1NlbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogREVGQVVMVF9WRVJTSU9OLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRva2VuVG9TZW5kICYmIGNoYW5uZWwudXBkYXRlSm9pblBheWxvYWQocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbC5qb2luZWRPbmNlICYmIGNoYW5uZWwuX2lzSm9pbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsLl9wdXNoKENIQU5ORUxfRVZFTlRTLmFjY2Vzc190b2tlbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHRva2VuVG9TZW5kLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNlbmRzIGEgaGVhcnRiZWF0IG1lc3NhZ2UgaWYgdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNlbmRIZWFydGJlYXQoKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2soJ2Rpc2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5sb2coJ3RyYW5zcG9ydCcsICdoZWFydGJlYXQgdGltZW91dC4gQXR0ZW1wdGluZyB0byByZS1lc3RhYmxpc2ggY29ubmVjdGlvbicpO1xyXG4gICAgICAgICAgICB0aGlzLmhlYXJ0YmVhdENhbGxiYWNrKCd0aW1lb3V0Jyk7XHJcbiAgICAgICAgICAgIChfYSA9IHRoaXMuY29ubikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsb3NlKFdTX0NMT1NFX05PUk1BTCwgJ2hlYXJiZWF0IHRpbWVvdXQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSB0aGlzLl9tYWtlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5wdXNoKHtcclxuICAgICAgICAgICAgdG9waWM6ICdwaG9lbml4JyxcclxuICAgICAgICAgICAgZXZlbnQ6ICdoZWFydGJlYXQnLFxyXG4gICAgICAgICAgICBwYXlsb2FkOiB7fSxcclxuICAgICAgICAgICAgcmVmOiB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oZWFydGJlYXRDYWxsYmFjaygnc2VudCcpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXV0aCgpO1xyXG4gICAgfVxyXG4gICAgb25IZWFydGJlYXQoY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLmhlYXJ0YmVhdENhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZsdXNoZXMgc2VuZCBidWZmZXJcclxuICAgICAqL1xyXG4gICAgZmx1c2hTZW5kQnVmZmVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkgJiYgdGhpcy5zZW5kQnVmZmVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kQnVmZmVyLmZvckVhY2goKGNhbGxiYWNrKSA9PiBjYWxsYmFjaygpKTtcclxuICAgICAgICAgICAgdGhpcy5zZW5kQnVmZmVyID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIG5leHQgbWVzc2FnZSByZWYsIGFjY291bnRpbmcgZm9yIG92ZXJmbG93c1xyXG4gICAgICpcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBfbWFrZVJlZigpIHtcclxuICAgICAgICBsZXQgbmV3UmVmID0gdGhpcy5yZWYgKyAxO1xyXG4gICAgICAgIGlmIChuZXdSZWYgPT09IHRoaXMucmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmID0gbmV3UmVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWYudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVW5zdWJzY3JpYmUgZnJvbSBjaGFubmVscyB3aXRoIHRoZSBzcGVjaWZpZWQgdG9waWMuXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9sZWF2ZU9wZW5Ub3BpYyh0b3BpYykge1xyXG4gICAgICAgIGxldCBkdXBDaGFubmVsID0gdGhpcy5jaGFubmVscy5maW5kKChjKSA9PiBjLnRvcGljID09PSB0b3BpYyAmJiAoYy5faXNKb2luZWQoKSB8fCBjLl9pc0pvaW5pbmcoKSkpO1xyXG4gICAgICAgIGlmIChkdXBDaGFubmVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKCd0cmFuc3BvcnQnLCBgbGVhdmluZyBkdXBsaWNhdGUgdG9waWMgXCIke3RvcGljfVwiYCk7XHJcbiAgICAgICAgICAgIGR1cENoYW5uZWwudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBzdWJzY3JpcHRpb24gZnJvbSB0aGUgc29ja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjaGFubmVsIEFuIG9wZW4gc3Vic2NyaXB0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBfcmVtb3ZlKGNoYW5uZWwpIHtcclxuICAgICAgICB0aGlzLmNoYW5uZWxzID0gdGhpcy5jaGFubmVscy5maWx0ZXIoKGMpID0+IGMudG9waWMgIT09IGNoYW5uZWwudG9waWMpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHVwIGNvbm5lY3Rpb24gaGFuZGxlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIHNldHVwQ29ubmVjdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubi5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgICAgICAgICAgdGhpcy5jb25uLm9ub3BlbiA9ICgpID0+IHRoaXMuX29uQ29ubk9wZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5jb25uLm9uZXJyb3IgPSAoZXJyb3IpID0+IHRoaXMuX29uQ29ubkVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5jb25uLm9ubWVzc2FnZSA9IChldmVudCkgPT4gdGhpcy5fb25Db25uTWVzc2FnZShldmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubi5vbmNsb3NlID0gKGV2ZW50KSA9PiB0aGlzLl9vbkNvbm5DbG9zZShldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX29uQ29ubk1lc3NhZ2UocmF3TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuZGVjb2RlKHJhd01lc3NhZ2UuZGF0YSwgKG1zZykgPT4ge1xyXG4gICAgICAgICAgICBsZXQgeyB0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiB9ID0gbXNnO1xyXG4gICAgICAgICAgICBpZiAodG9waWMgPT09ICdwaG9lbml4JyAmJiBldmVudCA9PT0gJ3BoeF9yZXBseScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2sobXNnLnBheWxvYWQuc3RhdHVzID09ICdvaycgPyAnb2snIDogJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlZiAmJiByZWYgPT09IHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvZygncmVjZWl2ZScsIGAke3BheWxvYWQuc3RhdHVzIHx8ICcnfSAke3RvcGljfSAke2V2ZW50fSAkeyhyZWYgJiYgJygnICsgcmVmICsgJyknKSB8fCAnJ31gLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmNoYW5uZWxzKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY2hhbm5lbCkgPT4gY2hhbm5lbC5faXNNZW1iZXIodG9waWMpKVxyXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGNoYW5uZWwpID0+IGNoYW5uZWwuX3RyaWdnZXIoZXZlbnQsIHBheWxvYWQsIHJlZikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm1lc3NhZ2UuZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKG1zZykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX29uQ29ubk9wZW4oKSB7XHJcbiAgICAgICAgdGhpcy5sb2coJ3RyYW5zcG9ydCcsIGBjb25uZWN0ZWQgdG8gJHt0aGlzLmVuZHBvaW50VVJMKCl9YCk7XHJcbiAgICAgICAgdGhpcy5mbHVzaFNlbmRCdWZmZXIoKTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLndvcmtlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLndvcmtlclJlZikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRXb3JrZXJIZWFydGJlYXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm9wZW4uZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKCkpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX3N0YXJ0SGVhcnRiZWF0KCkge1xyXG4gICAgICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgJiYgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdFRpbWVyKTtcclxuICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5zZW5kSGVhcnRiZWF0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcyk7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBfc3RhcnRXb3JrZXJIZWFydGJlYXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud29ya2VyVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKCd3b3JrZXInLCBgc3RhcnRpbmcgd29ya2VyIGZvciBmcm9tICR7dGhpcy53b3JrZXJVcmx9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZygnd29ya2VyJywgYHN0YXJ0aW5nIGRlZmF1bHQgd29ya2VyYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9iamVjdFVybCA9IHRoaXMuX3dvcmtlck9iamVjdFVybCh0aGlzLndvcmtlclVybCk7XHJcbiAgICAgICAgdGhpcy53b3JrZXJSZWYgPSBuZXcgV29ya2VyKG9iamVjdFVybCk7XHJcbiAgICAgICAgdGhpcy53b3JrZXJSZWYub25lcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZygnd29ya2VyJywgJ3dvcmtlciBlcnJvcicsIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLndvcmtlclJlZi50ZXJtaW5hdGUoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMud29ya2VyUmVmLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudCA9PT0gJ2tlZXBBbGl2ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZEhlYXJ0YmVhdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLndvcmtlclJlZi5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAnc3RhcnQnLFxyXG4gICAgICAgICAgICBpbnRlcnZhbDogdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX29uQ29ubkNsb3NlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5sb2coJ3RyYW5zcG9ydCcsICdjbG9zZScsIGV2ZW50KTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyQ2hhbkVycm9yKCk7XHJcbiAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciAmJiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0VGltZXIpO1xyXG4gICAgICAgIHRoaXMucmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5jbG9zZS5mb3JFYWNoKChjYWxsYmFjaykgPT4gY2FsbGJhY2soZXZlbnQpKTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF9vbkNvbm5FcnJvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMubG9nKCd0cmFuc3BvcnQnLCBgJHtlcnJvcn1gKTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyQ2hhbkVycm9yKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5lcnJvci5mb3JFYWNoKChjYWxsYmFjaykgPT4gY2FsbGJhY2soZXJyb3IpKTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIF90cmlnZ2VyQ2hhbkVycm9yKCkge1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbHMuZm9yRWFjaCgoY2hhbm5lbCkgPT4gY2hhbm5lbC5fdHJpZ2dlcihDSEFOTkVMX0VWRU5UUy5lcnJvcikpO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgX2FwcGVuZFBhcmFtcyh1cmwsIHBhcmFtcykge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwcmVmaXggPSB1cmwubWF0Y2goL1xcPy8pID8gJyYnIDogJz8nO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBgJHt1cmx9JHtwcmVmaXh9JHtxdWVyeX1gO1xyXG4gICAgfVxyXG4gICAgX3dvcmtlck9iamVjdFVybCh1cmwpIHtcclxuICAgICAgICBsZXQgcmVzdWx0X3VybDtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdF91cmwgPSB1cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW1dPUktFUl9TQ1JJUFRdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JyB9KTtcclxuICAgICAgICAgICAgcmVzdWx0X3VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRfdXJsO1xyXG4gICAgfVxyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlYWx0aW1lQ2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js": /*!****************************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js ***! \****************************************************************************/ /***/ (function(__unused_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 */ REALTIME_PRESENCE_LISTEN_EVENTS: function() { return /* binding */ REALTIME_PRESENCE_LISTEN_EVENTS; },\n/* harmony export */ \"default\": function() { return /* binding */ RealtimePresence; }\n/* harmony export */ });\n/*\r\n This file draws heavily from https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/assets/js/phoenix/presence.js\r\n License: https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/LICENSE.md\r\n*/\r\nvar REALTIME_PRESENCE_LISTEN_EVENTS;\r\n(function (REALTIME_PRESENCE_LISTEN_EVENTS) {\r\n REALTIME_PRESENCE_LISTEN_EVENTS[\"SYNC\"] = \"sync\";\r\n REALTIME_PRESENCE_LISTEN_EVENTS[\"JOIN\"] = \"join\";\r\n REALTIME_PRESENCE_LISTEN_EVENTS[\"LEAVE\"] = \"leave\";\r\n})(REALTIME_PRESENCE_LISTEN_EVENTS || (REALTIME_PRESENCE_LISTEN_EVENTS = {}));\r\nclass RealtimePresence {\r\n /**\r\n * Initializes the Presence.\r\n *\r\n * @param channel - The RealtimeChannel\r\n * @param opts - The options,\r\n * for example `{events: {state: 'state', diff: 'diff'}}`\r\n */\r\n constructor(channel, opts) {\r\n this.channel = channel;\r\n this.state = {};\r\n this.pendingDiffs = [];\r\n this.joinRef = null;\r\n this.caller = {\r\n onJoin: () => { },\r\n onLeave: () => { },\r\n onSync: () => { },\r\n };\r\n const events = (opts === null || opts === void 0 ? void 0 : opts.events) || {\r\n state: 'presence_state',\r\n diff: 'presence_diff',\r\n };\r\n this.channel._on(events.state, {}, (newState) => {\r\n const { onJoin, onLeave, onSync } = this.caller;\r\n this.joinRef = this.channel._joinRef();\r\n this.state = RealtimePresence.syncState(this.state, newState, onJoin, onLeave);\r\n this.pendingDiffs.forEach((diff) => {\r\n this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\r\n });\r\n this.pendingDiffs = [];\r\n onSync();\r\n });\r\n this.channel._on(events.diff, {}, (diff) => {\r\n const { onJoin, onLeave, onSync } = this.caller;\r\n if (this.inPendingSyncState()) {\r\n this.pendingDiffs.push(diff);\r\n }\r\n else {\r\n this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\r\n onSync();\r\n }\r\n });\r\n this.onJoin((key, currentPresences, newPresences) => {\r\n this.channel._trigger('presence', {\r\n event: 'join',\r\n key,\r\n currentPresences,\r\n newPresences,\r\n });\r\n });\r\n this.onLeave((key, currentPresences, leftPresences) => {\r\n this.channel._trigger('presence', {\r\n event: 'leave',\r\n key,\r\n currentPresences,\r\n leftPresences,\r\n });\r\n });\r\n this.onSync(() => {\r\n this.channel._trigger('presence', { event: 'sync' });\r\n });\r\n }\r\n /**\r\n * Used to sync the list of presences on the server with the\r\n * client's state.\r\n *\r\n * An optional `onJoin` and `onLeave` callback can be provided to\r\n * react to changes in the client's local presences across\r\n * disconnects and reconnects with the server.\r\n *\r\n * @internal\r\n */\r\n static syncState(currentState, newState, onJoin, onLeave) {\r\n const state = this.cloneDeep(currentState);\r\n const transformedState = this.transformState(newState);\r\n const joins = {};\r\n const leaves = {};\r\n this.map(state, (key, presences) => {\r\n if (!transformedState[key]) {\r\n leaves[key] = presences;\r\n }\r\n });\r\n this.map(transformedState, (key, newPresences) => {\r\n const currentPresences = state[key];\r\n if (currentPresences) {\r\n const newPresenceRefs = newPresences.map((m) => m.presence_ref);\r\n const curPresenceRefs = currentPresences.map((m) => m.presence_ref);\r\n const joinedPresences = newPresences.filter((m) => curPresenceRefs.indexOf(m.presence_ref) < 0);\r\n const leftPresences = currentPresences.filter((m) => newPresenceRefs.indexOf(m.presence_ref) < 0);\r\n if (joinedPresences.length > 0) {\r\n joins[key] = joinedPresences;\r\n }\r\n if (leftPresences.length > 0) {\r\n leaves[key] = leftPresences;\r\n }\r\n }\r\n else {\r\n joins[key] = newPresences;\r\n }\r\n });\r\n return this.syncDiff(state, { joins, leaves }, onJoin, onLeave);\r\n }\r\n /**\r\n * Used to sync a diff of presence join and leave events from the\r\n * server, as they happen.\r\n *\r\n * Like `syncState`, `syncDiff` accepts optional `onJoin` and\r\n * `onLeave` callbacks to react to a user joining or leaving from a\r\n * device.\r\n *\r\n * @internal\r\n */\r\n static syncDiff(state, diff, onJoin, onLeave) {\r\n const { joins, leaves } = {\r\n joins: this.transformState(diff.joins),\r\n leaves: this.transformState(diff.leaves),\r\n };\r\n if (!onJoin) {\r\n onJoin = () => { };\r\n }\r\n if (!onLeave) {\r\n onLeave = () => { };\r\n }\r\n this.map(joins, (key, newPresences) => {\r\n var _a;\r\n const currentPresences = (_a = state[key]) !== null && _a !== void 0 ? _a : [];\r\n state[key] = this.cloneDeep(newPresences);\r\n if (currentPresences.length > 0) {\r\n const joinedPresenceRefs = state[key].map((m) => m.presence_ref);\r\n const curPresences = currentPresences.filter((m) => joinedPresenceRefs.indexOf(m.presence_ref) < 0);\r\n state[key].unshift(...curPresences);\r\n }\r\n onJoin(key, currentPresences, newPresences);\r\n });\r\n this.map(leaves, (key, leftPresences) => {\r\n let currentPresences = state[key];\r\n if (!currentPresences)\r\n return;\r\n const presenceRefsToRemove = leftPresences.map((m) => m.presence_ref);\r\n currentPresences = currentPresences.filter((m) => presenceRefsToRemove.indexOf(m.presence_ref) < 0);\r\n state[key] = currentPresences;\r\n onLeave(key, currentPresences, leftPresences);\r\n if (currentPresences.length === 0)\r\n delete state[key];\r\n });\r\n return state;\r\n }\r\n /** @internal */\r\n static map(obj, func) {\r\n return Object.getOwnPropertyNames(obj).map((key) => func(key, obj[key]));\r\n }\r\n /**\r\n * Remove 'metas' key\r\n * Change 'phx_ref' to 'presence_ref'\r\n * Remove 'phx_ref' and 'phx_ref_prev'\r\n *\r\n * @example\r\n * // returns {\r\n * abc123: [\r\n * { presence_ref: '2', user_id: 1 },\r\n * { presence_ref: '3', user_id: 2 }\r\n * ]\r\n * }\r\n * RealtimePresence.transformState({\r\n * abc123: {\r\n * metas: [\r\n * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },\r\n * { phx_ref: '3', user_id: 2 }\r\n * ]\r\n * }\r\n * })\r\n *\r\n * @internal\r\n */\r\n static transformState(state) {\r\n state = this.cloneDeep(state);\r\n return Object.getOwnPropertyNames(state).reduce((newState, key) => {\r\n const presences = state[key];\r\n if ('metas' in presences) {\r\n newState[key] = presences.metas.map((presence) => {\r\n presence['presence_ref'] = presence['phx_ref'];\r\n delete presence['phx_ref'];\r\n delete presence['phx_ref_prev'];\r\n return presence;\r\n });\r\n }\r\n else {\r\n newState[key] = presences;\r\n }\r\n return newState;\r\n }, {});\r\n }\r\n /** @internal */\r\n static cloneDeep(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n /** @internal */\r\n onJoin(callback) {\r\n this.caller.onJoin = callback;\r\n }\r\n /** @internal */\r\n onLeave(callback) {\r\n this.caller.onLeave = callback;\r\n }\r\n /** @internal */\r\n onSync(callback) {\r\n this.caller.onSync = callback;\r\n }\r\n /** @internal */\r\n inPendingSyncState() {\r\n return !this.joinRef || this.joinRef !== this.channel._joinRef();\r\n }\r\n}\r\n//# sourceMappingURL=RealtimePresence.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVQcmVzZW5jZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsMEVBQTBFO0FBQzVEO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixTQUFTLDhCQUE4QjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qiw4QkFBOEI7QUFDOUIsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekMsb0JBQW9CLDBCQUEwQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNULHdDQUF3QztBQUN4QyxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLGdEQUFnRCxlQUFlO0FBQy9ELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsc0NBQXNDLGVBQWU7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwrQkFBK0I7QUFDM0MsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDRDQUE0QztBQUMxRCxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL1JlYWx0aW1lUHJlc2VuY2UuanM/MmNiOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gIFRoaXMgZmlsZSBkcmF3cyBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Bob2VuaXhmcmFtZXdvcmsvcGhvZW5peC9ibG9iL2QzNDRlYzBhNzMyYWI0ZWUyMDQyMTViMzFkZTY5Y2Y0YmU3MmUzYmYvYXNzZXRzL2pzL3Bob2VuaXgvcHJlc2VuY2UuanNcclxuICBMaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvZW5peGZyYW1ld29yay9waG9lbml4L2Jsb2IvZDM0NGVjMGE3MzJhYjRlZTIwNDIxNWIzMWRlNjljZjRiZTcyZTNiZi9MSUNFTlNFLm1kXHJcbiovXHJcbmV4cG9ydCB2YXIgUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUztcclxuKGZ1bmN0aW9uIChSRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTKSB7XHJcbiAgICBSRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTW1wiU1lOQ1wiXSA9IFwic3luY1wiO1xyXG4gICAgUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UU1tcIkpPSU5cIl0gPSBcImpvaW5cIjtcclxuICAgIFJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFNbXCJMRUFWRVwiXSA9IFwibGVhdmVcIjtcclxufSkoUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUyB8fCAoUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUyA9IHt9KSk7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWx0aW1lUHJlc2VuY2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgUHJlc2VuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNoYW5uZWwgLSBUaGUgUmVhbHRpbWVDaGFubmVsXHJcbiAgICAgKiBAcGFyYW0gb3B0cyAtIFRoZSBvcHRpb25zLFxyXG4gICAgICogICAgICAgIGZvciBleGFtcGxlIGB7ZXZlbnRzOiB7c3RhdGU6ICdzdGF0ZScsIGRpZmY6ICdkaWZmJ319YFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihjaGFubmVsLCBvcHRzKSB7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge307XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXTtcclxuICAgICAgICB0aGlzLmpvaW5SZWYgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FsbGVyID0ge1xyXG4gICAgICAgICAgICBvbkpvaW46ICgpID0+IHsgfSxcclxuICAgICAgICAgICAgb25MZWF2ZTogKCkgPT4geyB9LFxyXG4gICAgICAgICAgICBvblN5bmM6ICgpID0+IHsgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMuZXZlbnRzKSB8fCB7XHJcbiAgICAgICAgICAgIHN0YXRlOiAncHJlc2VuY2Vfc3RhdGUnLFxyXG4gICAgICAgICAgICBkaWZmOiAncHJlc2VuY2VfZGlmZicsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNoYW5uZWwuX29uKGV2ZW50cy5zdGF0ZSwge30sIChuZXdTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IG9uSm9pbiwgb25MZWF2ZSwgb25TeW5jIH0gPSB0aGlzLmNhbGxlcjtcclxuICAgICAgICAgICAgdGhpcy5qb2luUmVmID0gdGhpcy5jaGFubmVsLl9qb2luUmVmKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBSZWFsdGltZVByZXNlbmNlLnN5bmNTdGF0ZSh0aGlzLnN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKTtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nRGlmZnMuZm9yRWFjaCgoZGlmZikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFJlYWx0aW1lUHJlc2VuY2Uuc3luY0RpZmYodGhpcy5zdGF0ZSwgZGlmZiwgb25Kb2luLCBvbkxlYXZlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0RpZmZzID0gW107XHJcbiAgICAgICAgICAgIG9uU3luYygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbC5fb24oZXZlbnRzLmRpZmYsIHt9LCAoZGlmZikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IG9uSm9pbiwgb25MZWF2ZSwgb25TeW5jIH0gPSB0aGlzLmNhbGxlcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5QZW5kaW5nU3luY1N0YXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0RpZmZzLnB1c2goZGlmZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gUmVhbHRpbWVQcmVzZW5jZS5zeW5jRGlmZih0aGlzLnN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpO1xyXG4gICAgICAgICAgICAgICAgb25TeW5jKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uSm9pbigoa2V5LCBjdXJyZW50UHJlc2VuY2VzLCBuZXdQcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsLl90cmlnZ2VyKCdwcmVzZW5jZScsIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiAnam9pbicsXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJlc2VuY2VzLFxyXG4gICAgICAgICAgICAgICAgbmV3UHJlc2VuY2VzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uTGVhdmUoKGtleSwgY3VycmVudFByZXNlbmNlcywgbGVmdFByZXNlbmNlcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwuX3RyaWdnZXIoJ3ByZXNlbmNlJywge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdsZWF2ZScsXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJlc2VuY2VzLFxyXG4gICAgICAgICAgICAgICAgbGVmdFByZXNlbmNlcyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vblN5bmMoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwuX3RyaWdnZXIoJ3ByZXNlbmNlJywgeyBldmVudDogJ3N5bmMnIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIHN5bmMgdGhlIGxpc3Qgb2YgcHJlc2VuY2VzIG9uIHRoZSBzZXJ2ZXIgd2l0aCB0aGVcclxuICAgICAqIGNsaWVudCdzIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEFuIG9wdGlvbmFsIGBvbkpvaW5gIGFuZCBgb25MZWF2ZWAgY2FsbGJhY2sgY2FuIGJlIHByb3ZpZGVkIHRvXHJcbiAgICAgKiByZWFjdCB0byBjaGFuZ2VzIGluIHRoZSBjbGllbnQncyBsb2NhbCBwcmVzZW5jZXMgYWNyb3NzXHJcbiAgICAgKiBkaXNjb25uZWN0cyBhbmQgcmVjb25uZWN0cyB3aXRoIHRoZSBzZXJ2ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzeW5jU3RhdGUoY3VycmVudFN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNsb25lRGVlcChjdXJyZW50U3RhdGUpO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RhdGUgPSB0aGlzLnRyYW5zZm9ybVN0YXRlKG5ld1N0YXRlKTtcclxuICAgICAgICBjb25zdCBqb2lucyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGxlYXZlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMubWFwKHN0YXRlLCAoa2V5LCBwcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZFN0YXRlW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIGxlYXZlc1trZXldID0gcHJlc2VuY2VzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXAodHJhbnNmb3JtZWRTdGF0ZSwgKGtleSwgbmV3UHJlc2VuY2VzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcmVzZW5jZXMgPSBzdGF0ZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByZXNlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJlc2VuY2VSZWZzID0gbmV3UHJlc2VuY2VzLm1hcCgobSkgPT4gbS5wcmVzZW5jZV9yZWYpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VyUHJlc2VuY2VSZWZzID0gY3VycmVudFByZXNlbmNlcy5tYXAoKG0pID0+IG0ucHJlc2VuY2VfcmVmKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvaW5lZFByZXNlbmNlcyA9IG5ld1ByZXNlbmNlcy5maWx0ZXIoKG0pID0+IGN1clByZXNlbmNlUmVmcy5pbmRleE9mKG0ucHJlc2VuY2VfcmVmKSA8IDApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdFByZXNlbmNlcyA9IGN1cnJlbnRQcmVzZW5jZXMuZmlsdGVyKChtKSA9PiBuZXdQcmVzZW5jZVJlZnMuaW5kZXhPZihtLnByZXNlbmNlX3JlZikgPCAwKTtcclxuICAgICAgICAgICAgICAgIGlmIChqb2luZWRQcmVzZW5jZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW5zW2tleV0gPSBqb2luZWRQcmVzZW5jZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGVmdFByZXNlbmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVhdmVzW2tleV0gPSBsZWZ0UHJlc2VuY2VzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgam9pbnNba2V5XSA9IG5ld1ByZXNlbmNlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNEaWZmKHN0YXRlLCB7IGpvaW5zLCBsZWF2ZXMgfSwgb25Kb2luLCBvbkxlYXZlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB0byBzeW5jIGEgZGlmZiBvZiBwcmVzZW5jZSBqb2luIGFuZCBsZWF2ZSBldmVudHMgZnJvbSB0aGVcclxuICAgICAqIHNlcnZlciwgYXMgdGhleSBoYXBwZW4uXHJcbiAgICAgKlxyXG4gICAgICogTGlrZSBgc3luY1N0YXRlYCwgYHN5bmNEaWZmYCBhY2NlcHRzIG9wdGlvbmFsIGBvbkpvaW5gIGFuZFxyXG4gICAgICogYG9uTGVhdmVgIGNhbGxiYWNrcyB0byByZWFjdCB0byBhIHVzZXIgam9pbmluZyBvciBsZWF2aW5nIGZyb20gYVxyXG4gICAgICogZGV2aWNlLlxyXG4gICAgICpcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3luY0RpZmYoc3RhdGUsIGRpZmYsIG9uSm9pbiwgb25MZWF2ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgam9pbnMsIGxlYXZlcyB9ID0ge1xyXG4gICAgICAgICAgICBqb2luczogdGhpcy50cmFuc2Zvcm1TdGF0ZShkaWZmLmpvaW5zKSxcclxuICAgICAgICAgICAgbGVhdmVzOiB0aGlzLnRyYW5zZm9ybVN0YXRlKGRpZmYubGVhdmVzKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghb25Kb2luKSB7XHJcbiAgICAgICAgICAgIG9uSm9pbiA9ICgpID0+IHsgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvbkxlYXZlKSB7XHJcbiAgICAgICAgICAgIG9uTGVhdmUgPSAoKSA9PiB7IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWFwKGpvaW5zLCAoa2V5LCBuZXdQcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UHJlc2VuY2VzID0gKF9hID0gc3RhdGVba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XHJcbiAgICAgICAgICAgIHN0YXRlW2tleV0gPSB0aGlzLmNsb25lRGVlcChuZXdQcmVzZW5jZXMpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByZXNlbmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2luZWRQcmVzZW5jZVJlZnMgPSBzdGF0ZVtrZXldLm1hcCgobSkgPT4gbS5wcmVzZW5jZV9yZWYpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VyUHJlc2VuY2VzID0gY3VycmVudFByZXNlbmNlcy5maWx0ZXIoKG0pID0+IGpvaW5lZFByZXNlbmNlUmVmcy5pbmRleE9mKG0ucHJlc2VuY2VfcmVmKSA8IDApO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVba2V5XS51bnNoaWZ0KC4uLmN1clByZXNlbmNlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb25Kb2luKGtleSwgY3VycmVudFByZXNlbmNlcywgbmV3UHJlc2VuY2VzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1hcChsZWF2ZXMsIChrZXksIGxlZnRQcmVzZW5jZXMpID0+IHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZXMgPSBzdGF0ZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRQcmVzZW5jZXMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbmNlUmVmc1RvUmVtb3ZlID0gbGVmdFByZXNlbmNlcy5tYXAoKG0pID0+IG0ucHJlc2VuY2VfcmVmKTtcclxuICAgICAgICAgICAgY3VycmVudFByZXNlbmNlcyA9IGN1cnJlbnRQcmVzZW5jZXMuZmlsdGVyKChtKSA9PiBwcmVzZW5jZVJlZnNUb1JlbW92ZS5pbmRleE9mKG0ucHJlc2VuY2VfcmVmKSA8IDApO1xyXG4gICAgICAgICAgICBzdGF0ZVtrZXldID0gY3VycmVudFByZXNlbmNlcztcclxuICAgICAgICAgICAgb25MZWF2ZShrZXksIGN1cnJlbnRQcmVzZW5jZXMsIGxlZnRQcmVzZW5jZXMpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByZXNlbmNlcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGVba2V5XTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBzdGF0aWMgbWFwKG9iaiwgZnVuYykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLm1hcCgoa2V5KSA9PiBmdW5jKGtleSwgb2JqW2tleV0pKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlICdtZXRhcycga2V5XHJcbiAgICAgKiBDaGFuZ2UgJ3BoeF9yZWYnIHRvICdwcmVzZW5jZV9yZWYnXHJcbiAgICAgKiBSZW1vdmUgJ3BoeF9yZWYnIGFuZCAncGh4X3JlZl9wcmV2J1xyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAvLyByZXR1cm5zIHtcclxuICAgICAqICBhYmMxMjM6IFtcclxuICAgICAqICAgIHsgcHJlc2VuY2VfcmVmOiAnMicsIHVzZXJfaWQ6IDEgfSxcclxuICAgICAqICAgIHsgcHJlc2VuY2VfcmVmOiAnMycsIHVzZXJfaWQ6IDIgfVxyXG4gICAgICogIF1cclxuICAgICAqIH1cclxuICAgICAqIFJlYWx0aW1lUHJlc2VuY2UudHJhbnNmb3JtU3RhdGUoe1xyXG4gICAgICogIGFiYzEyMzoge1xyXG4gICAgICogICAgbWV0YXM6IFtcclxuICAgICAqICAgICAgeyBwaHhfcmVmOiAnMicsIHBoeF9yZWZfcHJldjogJzEnIHVzZXJfaWQ6IDEgfSxcclxuICAgICAqICAgICAgeyBwaHhfcmVmOiAnMycsIHVzZXJfaWQ6IDIgfVxyXG4gICAgICogICAgXVxyXG4gICAgICogIH1cclxuICAgICAqIH0pXHJcbiAgICAgKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0cmFuc2Zvcm1TdGF0ZShzdGF0ZSkge1xyXG4gICAgICAgIHN0YXRlID0gdGhpcy5jbG9uZURlZXAoc3RhdGUpO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzdGF0ZSkucmVkdWNlKChuZXdTdGF0ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbmNlcyA9IHN0YXRlW2tleV07XHJcbiAgICAgICAgICAgIGlmICgnbWV0YXMnIGluIHByZXNlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHByZXNlbmNlcy5tZXRhcy5tYXAoKHByZXNlbmNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlc2VuY2VbJ3ByZXNlbmNlX3JlZiddID0gcHJlc2VuY2VbJ3BoeF9yZWYnXTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJlc2VuY2VbJ3BoeF9yZWYnXTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJlc2VuY2VbJ3BoeF9yZWZfcHJldiddO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVzZW5jZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHByZXNlbmNlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgc3RhdGljIGNsb25lRGVlcChvYmopIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIG9uSm9pbihjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuY2FsbGVyLm9uSm9pbiA9IGNhbGxiYWNrO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgb25MZWF2ZShjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuY2FsbGVyLm9uTGVhdmUgPSBjYWxsYmFjaztcclxuICAgIH1cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIG9uU3luYyhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuY2FsbGVyLm9uU3luYyA9IGNhbGxiYWNrO1xyXG4gICAgfVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgaW5QZW5kaW5nU3luY1N0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5qb2luUmVmIHx8IHRoaXMuam9pblJlZiAhPT0gdGhpcy5jaGFubmVsLl9qb2luUmVmKCk7XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVhbHRpbWVQcmVzZW5jZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/index.js": /*!*****************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/index.js ***! \*****************************************************************/ /***/ (function(__unused_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 */ REALTIME_CHANNEL_STATES: function() { return /* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_CHANNEL_STATES; },\n/* harmony export */ REALTIME_LISTEN_TYPES: function() { return /* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_LISTEN_TYPES; },\n/* harmony export */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT: function() { return /* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT; },\n/* harmony export */ REALTIME_PRESENCE_LISTEN_EVENTS: function() { return /* reexport safe */ _RealtimePresence__WEBPACK_IMPORTED_MODULE_2__.REALTIME_PRESENCE_LISTEN_EVENTS; },\n/* harmony export */ REALTIME_SUBSCRIBE_STATES: function() { return /* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_SUBSCRIBE_STATES; },\n/* harmony export */ RealtimeChannel: function() { return /* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; },\n/* harmony export */ RealtimeClient: function() { return /* reexport safe */ _RealtimeClient__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; },\n/* harmony export */ RealtimePresence: function() { return /* reexport safe */ _RealtimePresence__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _RealtimeClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RealtimeClient */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js\");\n/* harmony import */ var _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RealtimeChannel */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js\");\n/* harmony import */ var _RealtimePresence__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RealtimePresence */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js\");\n\r\n\r\n\r\n\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBOEM7QUFDMEg7QUFDaEY7QUFDMEg7QUFDbE4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9pbmRleC5qcz83ODFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFsdGltZUNsaWVudCBmcm9tICcuL1JlYWx0aW1lQ2xpZW50JztcclxuaW1wb3J0IFJlYWx0aW1lQ2hhbm5lbCwgeyBSRUFMVElNRV9MSVNURU5fVFlQRVMsIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5ULCBSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTLCBSRUFMVElNRV9DSEFOTkVMX1NUQVRFUywgfSBmcm9tICcuL1JlYWx0aW1lQ2hhbm5lbCc7XHJcbmltcG9ydCBSZWFsdGltZVByZXNlbmNlLCB7IFJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFMsIH0gZnJvbSAnLi9SZWFsdGltZVByZXNlbmNlJztcclxuZXhwb3J0IHsgUmVhbHRpbWVQcmVzZW5jZSwgUmVhbHRpbWVDaGFubmVsLCBSZWFsdGltZUNsaWVudCwgUkVBTFRJTUVfTElTVEVOX1RZUEVTLCBSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVCwgUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUywgUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUywgUkVBTFRJTUVfQ0hBTk5FTF9TVEFURVMsIH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js": /*!*************************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/lib/constants.js ***! \*************************************************************************/ /***/ (function(__unused_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 */ CHANNEL_EVENTS: function() { return /* binding */ CHANNEL_EVENTS; },\n/* harmony export */ CHANNEL_STATES: function() { return /* binding */ CHANNEL_STATES; },\n/* harmony export */ CONNECTION_STATE: function() { return /* binding */ CONNECTION_STATE; },\n/* harmony export */ DEFAULT_TIMEOUT: function() { return /* binding */ DEFAULT_TIMEOUT; },\n/* harmony export */ DEFAULT_VERSION: function() { return /* binding */ DEFAULT_VERSION; },\n/* harmony export */ SOCKET_STATES: function() { return /* binding */ SOCKET_STATES; },\n/* harmony export */ TRANSPORTS: function() { return /* binding */ TRANSPORTS; },\n/* harmony export */ VERSION: function() { return /* binding */ VERSION; },\n/* harmony export */ VSN: function() { return /* binding */ VSN; },\n/* harmony export */ WS_CLOSE_NORMAL: function() { return /* binding */ WS_CLOSE_NORMAL; }\n/* harmony export */ });\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/version.js\");\n\r\nconst DEFAULT_VERSION = `realtime-js/${_version__WEBPACK_IMPORTED_MODULE_0__.version}`;\r\nconst VSN = '1.0.0';\r\nconst VERSION = _version__WEBPACK_IMPORTED_MODULE_0__.version;\r\nconst DEFAULT_TIMEOUT = 10000;\r\nconst WS_CLOSE_NORMAL = 1000;\r\nvar SOCKET_STATES;\r\n(function (SOCKET_STATES) {\r\n SOCKET_STATES[SOCKET_STATES[\"connecting\"] = 0] = \"connecting\";\r\n SOCKET_STATES[SOCKET_STATES[\"open\"] = 1] = \"open\";\r\n SOCKET_STATES[SOCKET_STATES[\"closing\"] = 2] = \"closing\";\r\n SOCKET_STATES[SOCKET_STATES[\"closed\"] = 3] = \"closed\";\r\n})(SOCKET_STATES || (SOCKET_STATES = {}));\r\nvar CHANNEL_STATES;\r\n(function (CHANNEL_STATES) {\r\n CHANNEL_STATES[\"closed\"] = \"closed\";\r\n CHANNEL_STATES[\"errored\"] = \"errored\";\r\n CHANNEL_STATES[\"joined\"] = \"joined\";\r\n CHANNEL_STATES[\"joining\"] = \"joining\";\r\n CHANNEL_STATES[\"leaving\"] = \"leaving\";\r\n})(CHANNEL_STATES || (CHANNEL_STATES = {}));\r\nvar CHANNEL_EVENTS;\r\n(function (CHANNEL_EVENTS) {\r\n CHANNEL_EVENTS[\"close\"] = \"phx_close\";\r\n CHANNEL_EVENTS[\"error\"] = \"phx_error\";\r\n CHANNEL_EVENTS[\"join\"] = \"phx_join\";\r\n CHANNEL_EVENTS[\"reply\"] = \"phx_reply\";\r\n CHANNEL_EVENTS[\"leave\"] = \"phx_leave\";\r\n CHANNEL_EVENTS[\"access_token\"] = \"access_token\";\r\n})(CHANNEL_EVENTS || (CHANNEL_EVENTS = {}));\r\nvar TRANSPORTS;\r\n(function (TRANSPORTS) {\r\n TRANSPORTS[\"websocket\"] = \"websocket\";\r\n})(TRANSPORTS || (TRANSPORTS = {}));\r\nvar CONNECTION_STATE;\r\n(function (CONNECTION_STATE) {\r\n CONNECTION_STATE[\"Connecting\"] = \"connecting\";\r\n CONNECTION_STATE[\"Open\"] = \"open\";\r\n CONNECTION_STATE[\"Closing\"] = \"closing\";\r\n CONNECTION_STATE[\"Closed\"] = \"closed\";\r\n})(CONNECTION_STATE || (CONNECTION_STATE = {}));\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFvQztBQUM3Qix1Q0FBdUMsNkNBQU8sQ0FBQztBQUMvQztBQUNBLGdCQUFnQiw2Q0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxzQ0FBc0M7QUFDaEM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QztBQUNsQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3Q0FBd0M7QUFDbEM7QUFDUDtBQUNBO0FBQ0EsQ0FBQyxnQ0FBZ0M7QUFDMUI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw0Q0FBNEM7QUFDN0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9saWIvY29uc3RhbnRzLmpzP2UwOTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbic7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZFUlNJT04gPSBgcmVhbHRpbWUtanMvJHt2ZXJzaW9ufWA7XHJcbmV4cG9ydCBjb25zdCBWU04gPSAnMS4wLjAnO1xyXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IHZlcnNpb247XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVQgPSAxMDAwMDtcclxuZXhwb3J0IGNvbnN0IFdTX0NMT1NFX05PUk1BTCA9IDEwMDA7XHJcbmV4cG9ydCB2YXIgU09DS0VUX1NUQVRFUztcclxuKGZ1bmN0aW9uIChTT0NLRVRfU1RBVEVTKSB7XHJcbiAgICBTT0NLRVRfU1RBVEVTW1NPQ0tFVF9TVEFURVNbXCJjb25uZWN0aW5nXCJdID0gMF0gPSBcImNvbm5lY3RpbmdcIjtcclxuICAgIFNPQ0tFVF9TVEFURVNbU09DS0VUX1NUQVRFU1tcIm9wZW5cIl0gPSAxXSA9IFwib3BlblwiO1xyXG4gICAgU09DS0VUX1NUQVRFU1tTT0NLRVRfU1RBVEVTW1wiY2xvc2luZ1wiXSA9IDJdID0gXCJjbG9zaW5nXCI7XHJcbiAgICBTT0NLRVRfU1RBVEVTW1NPQ0tFVF9TVEFURVNbXCJjbG9zZWRcIl0gPSAzXSA9IFwiY2xvc2VkXCI7XHJcbn0pKFNPQ0tFVF9TVEFURVMgfHwgKFNPQ0tFVF9TVEFURVMgPSB7fSkpO1xyXG5leHBvcnQgdmFyIENIQU5ORUxfU1RBVEVTO1xyXG4oZnVuY3Rpb24gKENIQU5ORUxfU1RBVEVTKSB7XHJcbiAgICBDSEFOTkVMX1NUQVRFU1tcImNsb3NlZFwiXSA9IFwiY2xvc2VkXCI7XHJcbiAgICBDSEFOTkVMX1NUQVRFU1tcImVycm9yZWRcIl0gPSBcImVycm9yZWRcIjtcclxuICAgIENIQU5ORUxfU1RBVEVTW1wiam9pbmVkXCJdID0gXCJqb2luZWRcIjtcclxuICAgIENIQU5ORUxfU1RBVEVTW1wiam9pbmluZ1wiXSA9IFwiam9pbmluZ1wiO1xyXG4gICAgQ0hBTk5FTF9TVEFURVNbXCJsZWF2aW5nXCJdID0gXCJsZWF2aW5nXCI7XHJcbn0pKENIQU5ORUxfU1RBVEVTIHx8IChDSEFOTkVMX1NUQVRFUyA9IHt9KSk7XHJcbmV4cG9ydCB2YXIgQ0hBTk5FTF9FVkVOVFM7XHJcbihmdW5jdGlvbiAoQ0hBTk5FTF9FVkVOVFMpIHtcclxuICAgIENIQU5ORUxfRVZFTlRTW1wiY2xvc2VcIl0gPSBcInBoeF9jbG9zZVwiO1xyXG4gICAgQ0hBTk5FTF9FVkVOVFNbXCJlcnJvclwiXSA9IFwicGh4X2Vycm9yXCI7XHJcbiAgICBDSEFOTkVMX0VWRU5UU1tcImpvaW5cIl0gPSBcInBoeF9qb2luXCI7XHJcbiAgICBDSEFOTkVMX0VWRU5UU1tcInJlcGx5XCJdID0gXCJwaHhfcmVwbHlcIjtcclxuICAgIENIQU5ORUxfRVZFTlRTW1wibGVhdmVcIl0gPSBcInBoeF9sZWF2ZVwiO1xyXG4gICAgQ0hBTk5FTF9FVkVOVFNbXCJhY2Nlc3NfdG9rZW5cIl0gPSBcImFjY2Vzc190b2tlblwiO1xyXG59KShDSEFOTkVMX0VWRU5UUyB8fCAoQ0hBTk5FTF9FVkVOVFMgPSB7fSkpO1xyXG5leHBvcnQgdmFyIFRSQU5TUE9SVFM7XHJcbihmdW5jdGlvbiAoVFJBTlNQT1JUUykge1xyXG4gICAgVFJBTlNQT1JUU1tcIndlYnNvY2tldFwiXSA9IFwid2Vic29ja2V0XCI7XHJcbn0pKFRSQU5TUE9SVFMgfHwgKFRSQU5TUE9SVFMgPSB7fSkpO1xyXG5leHBvcnQgdmFyIENPTk5FQ1RJT05fU1RBVEU7XHJcbihmdW5jdGlvbiAoQ09OTkVDVElPTl9TVEFURSkge1xyXG4gICAgQ09OTkVDVElPTl9TVEFURVtcIkNvbm5lY3RpbmdcIl0gPSBcImNvbm5lY3RpbmdcIjtcclxuICAgIENPTk5FQ1RJT05fU1RBVEVbXCJPcGVuXCJdID0gXCJvcGVuXCI7XHJcbiAgICBDT05ORUNUSU9OX1NUQVRFW1wiQ2xvc2luZ1wiXSA9IFwiY2xvc2luZ1wiO1xyXG4gICAgQ09OTkVDVElPTl9TVEFURVtcIkNsb3NlZFwiXSA9IFwiY2xvc2VkXCI7XHJcbn0pKENPTk5FQ1RJT05fU1RBVEUgfHwgKENPTk5FQ1RJT05fU1RBVEUgPSB7fSkpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/push.js": /*!********************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/lib/push.js ***! \********************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Push; }\n/* harmony export */ });\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\");\n\r\nclass Push {\r\n /**\r\n * Initializes the Push\r\n *\r\n * @param channel The Channel\r\n * @param event The event, for example `\"phx_join\"`\r\n * @param payload The payload, for example `{user_id: 123}`\r\n * @param timeout The push timeout in milliseconds\r\n */\r\n constructor(channel, event, payload = {}, timeout = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_TIMEOUT) {\r\n this.channel = channel;\r\n this.event = event;\r\n this.payload = payload;\r\n this.timeout = timeout;\r\n this.sent = false;\r\n this.timeoutTimer = undefined;\r\n this.ref = '';\r\n this.receivedResp = null;\r\n this.recHooks = [];\r\n this.refEvent = null;\r\n }\r\n resend(timeout) {\r\n this.timeout = timeout;\r\n this._cancelRefEvent();\r\n this.ref = '';\r\n this.refEvent = null;\r\n this.receivedResp = null;\r\n this.sent = false;\r\n this.send();\r\n }\r\n send() {\r\n if (this._hasReceived('timeout')) {\r\n return;\r\n }\r\n this.startTimeout();\r\n this.sent = true;\r\n this.channel.socket.push({\r\n topic: this.channel.topic,\r\n event: this.event,\r\n payload: this.payload,\r\n ref: this.ref,\r\n join_ref: this.channel._joinRef(),\r\n });\r\n }\r\n updatePayload(payload) {\r\n this.payload = Object.assign(Object.assign({}, this.payload), payload);\r\n }\r\n receive(status, callback) {\r\n var _a;\r\n if (this._hasReceived(status)) {\r\n callback((_a = this.receivedResp) === null || _a === void 0 ? void 0 : _a.response);\r\n }\r\n this.recHooks.push({ status, callback });\r\n return this;\r\n }\r\n startTimeout() {\r\n if (this.timeoutTimer) {\r\n return;\r\n }\r\n this.ref = this.channel.socket._makeRef();\r\n this.refEvent = this.channel._replyEventName(this.ref);\r\n const callback = (payload) => {\r\n this._cancelRefEvent();\r\n this._cancelTimeout();\r\n this.receivedResp = payload;\r\n this._matchReceive(payload);\r\n };\r\n this.channel._on(this.refEvent, {}, callback);\r\n this.timeoutTimer = setTimeout(() => {\r\n this.trigger('timeout', {});\r\n }, this.timeout);\r\n }\r\n trigger(status, response) {\r\n if (this.refEvent)\r\n this.channel._trigger(this.refEvent, { status, response });\r\n }\r\n destroy() {\r\n this._cancelRefEvent();\r\n this._cancelTimeout();\r\n }\r\n _cancelRefEvent() {\r\n if (!this.refEvent) {\r\n return;\r\n }\r\n this.channel._off(this.refEvent, {});\r\n }\r\n _cancelTimeout() {\r\n clearTimeout(this.timeoutTimer);\r\n this.timeoutTimer = undefined;\r\n }\r\n _matchReceive({ status, response, }) {\r\n this.recHooks\r\n .filter((h) => h.status === status)\r\n .forEach((h) => h.callback(response));\r\n }\r\n _hasReceived(status) {\r\n return this.receivedResp && this.receivedResp.status === status;\r\n }\r\n}\r\n//# sourceMappingURL=push.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3B1c2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBbUQ7QUFDcEM7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELGFBQWE7QUFDOUQ7QUFDQTtBQUNBLDRDQUE0QyxZQUFZLDJEQUFlO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsa0JBQWtCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQSxzQ0FBc0M7QUFDdEMsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxrQkFBa0I7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL2xpYi9wdXNoLmpzP2FjYzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9USU1FT1VUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1c2gge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgUHVzaFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjaGFubmVsIFRoZSBDaGFubmVsXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBmb3IgZXhhbXBsZSBgXCJwaHhfam9pblwiYFxyXG4gICAgICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQsIGZvciBleGFtcGxlIGB7dXNlcl9pZDogMTIzfWBcclxuICAgICAqIEBwYXJhbSB0aW1lb3V0IFRoZSBwdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWwsIGV2ZW50LCBwYXlsb2FkID0ge30sIHRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQpIHtcclxuICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xyXG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5zZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lb3V0VGltZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5yZWYgPSAnJztcclxuICAgICAgICB0aGlzLnJlY2VpdmVkUmVzcCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWNIb29rcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVmRXZlbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmVzZW5kKHRpbWVvdXQpIHtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xyXG4gICAgICAgIHRoaXMuX2NhbmNlbFJlZkV2ZW50KCk7XHJcbiAgICAgICAgdGhpcy5yZWYgPSAnJztcclxuICAgICAgICB0aGlzLnJlZkV2ZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJlY2VpdmVkUmVzcCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZW5kKCk7XHJcbiAgICB9XHJcbiAgICBzZW5kKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9oYXNSZWNlaXZlZCgndGltZW91dCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWVvdXQoKTtcclxuICAgICAgICB0aGlzLnNlbnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbC5zb2NrZXQucHVzaCh7XHJcbiAgICAgICAgICAgIHRvcGljOiB0aGlzLmNoYW5uZWwudG9waWMsXHJcbiAgICAgICAgICAgIGV2ZW50OiB0aGlzLmV2ZW50LFxyXG4gICAgICAgICAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlZjogdGhpcy5yZWYsXHJcbiAgICAgICAgICAgIGpvaW5fcmVmOiB0aGlzLmNoYW5uZWwuX2pvaW5SZWYoKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVBheWxvYWQocGF5bG9hZCkge1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXlsb2FkKSwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgICByZWNlaXZlKHN0YXR1cywgY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgaWYgKHRoaXMuX2hhc1JlY2VpdmVkKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soKF9hID0gdGhpcy5yZWNlaXZlZFJlc3ApID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVjSG9va3MucHVzaCh7IHN0YXR1cywgY2FsbGJhY2sgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzdGFydFRpbWVvdXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGltZW91dFRpbWVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWYgPSB0aGlzLmNoYW5uZWwuc29ja2V0Ll9tYWtlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5yZWZFdmVudCA9IHRoaXMuY2hhbm5lbC5fcmVwbHlFdmVudE5hbWUodGhpcy5yZWYpO1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKHBheWxvYWQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY2FuY2VsUmVmRXZlbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2FuY2VsVGltZW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlY2VpdmVkUmVzcCA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX21hdGNoUmVjZWl2ZShwYXlsb2FkKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbC5fb24odGhpcy5yZWZFdmVudCwge30sIGNhbGxiYWNrKTtcclxuICAgICAgICB0aGlzLnRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3RpbWVvdXQnLCB7fSk7XHJcbiAgICAgICAgfSwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuICAgIHRyaWdnZXIoc3RhdHVzLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlZkV2ZW50KVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwuX3RyaWdnZXIodGhpcy5yZWZFdmVudCwgeyBzdGF0dXMsIHJlc3BvbnNlIH0pO1xyXG4gICAgfVxyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl9jYW5jZWxSZWZFdmVudCgpO1xyXG4gICAgICAgIHRoaXMuX2NhbmNlbFRpbWVvdXQoKTtcclxuICAgIH1cclxuICAgIF9jYW5jZWxSZWZFdmVudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVmRXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5uZWwuX29mZih0aGlzLnJlZkV2ZW50LCB7fSk7XHJcbiAgICB9XHJcbiAgICBfY2FuY2VsVGltZW91dCgpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0VGltZXIpO1xyXG4gICAgICAgIHRoaXMudGltZW91dFRpbWVyID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgX21hdGNoUmVjZWl2ZSh7IHN0YXR1cywgcmVzcG9uc2UsIH0pIHtcclxuICAgICAgICB0aGlzLnJlY0hvb2tzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGgpID0+IGguc3RhdHVzID09PSBzdGF0dXMpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChoKSA9PiBoLmNhbGxiYWNrKHJlc3BvbnNlKSk7XHJcbiAgICB9XHJcbiAgICBfaGFzUmVjZWl2ZWQoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZWl2ZWRSZXNwICYmIHRoaXMucmVjZWl2ZWRSZXNwLnN0YXR1cyA9PT0gc3RhdHVzO1xyXG4gICAgfVxyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1c2guanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/push.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js": /*!**************************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js ***! \**************************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Serializer; }\n/* harmony export */ });\n// This file draws heavily from https://github.com/phoenixframework/phoenix/commit/cf098e9cf7a44ee6479d31d911a97d3c7430c6fe\r\n// License: https://github.com/phoenixframework/phoenix/blob/master/LICENSE.md\r\nclass Serializer {\r\n constructor() {\r\n this.HEADER_LENGTH = 1;\r\n }\r\n decode(rawPayload, callback) {\r\n if (rawPayload.constructor === ArrayBuffer) {\r\n return callback(this._binaryDecode(rawPayload));\r\n }\r\n if (typeof rawPayload === 'string') {\r\n return callback(JSON.parse(rawPayload));\r\n }\r\n return callback({});\r\n }\r\n _binaryDecode(buffer) {\r\n const view = new DataView(buffer);\r\n const decoder = new TextDecoder();\r\n return this._decodeBroadcast(buffer, view, decoder);\r\n }\r\n _decodeBroadcast(buffer, view, decoder) {\r\n const topicSize = view.getUint8(1);\r\n const eventSize = view.getUint8(2);\r\n let offset = this.HEADER_LENGTH + 2;\r\n const topic = decoder.decode(buffer.slice(offset, offset + topicSize));\r\n offset = offset + topicSize;\r\n const event = decoder.decode(buffer.slice(offset, offset + eventSize));\r\n offset = offset + eventSize;\r\n const data = JSON.parse(decoder.decode(buffer.slice(offset, buffer.byteLength)));\r\n return { ref: null, topic: topic, event: event, payload: data };\r\n }\r\n}\r\n//# sourceMappingURL=serializer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3NlcmlhbGl6ZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9saWIvc2VyaWFsaXplci5qcz80ZTBiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBkcmF3cyBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Bob2VuaXhmcmFtZXdvcmsvcGhvZW5peC9jb21taXQvY2YwOThlOWNmN2E0NGVlNjQ3OWQzMWQ5MTFhOTdkM2M3NDMwYzZmZVxyXG4vLyBMaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvZW5peGZyYW1ld29yay9waG9lbml4L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VyaWFsaXplciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLkhFQURFUl9MRU5HVEggPSAxO1xyXG4gICAgfVxyXG4gICAgZGVjb2RlKHJhd1BheWxvYWQsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHJhd1BheWxvYWQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLl9iaW5hcnlEZWNvZGUocmF3UGF5bG9hZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHJhd1BheWxvYWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhKU09OLnBhcnNlKHJhd1BheWxvYWQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHt9KTtcclxuICAgIH1cclxuICAgIF9iaW5hcnlEZWNvZGUoYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xyXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2Rlcik7XHJcbiAgICB9XHJcbiAgICBfZGVjb2RlQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2Rlcikge1xyXG4gICAgICAgIGNvbnN0IHRvcGljU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRTaXplID0gdmlldy5nZXRVaW50OCgyKTtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5IRUFERVJfTEVOR1RIICsgMjtcclxuICAgICAgICBjb25zdCB0b3BpYyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRvcGljU2l6ZSkpO1xyXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCArIHRvcGljU2l6ZTtcclxuICAgICAgICBjb25zdCBldmVudCA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGV2ZW50U2l6ZSkpO1xyXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCArIGV2ZW50U2l6ZTtcclxuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aCkpKTtcclxuICAgICAgICByZXR1cm4geyByZWY6IG51bGwsIHRvcGljOiB0b3BpYywgZXZlbnQ6IGV2ZW50LCBwYXlsb2FkOiBkYXRhIH07XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VyaWFsaXplci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/timer.js": /*!*********************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/lib/timer.js ***! \*********************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Timer; }\n/* harmony export */ });\n/**\r\n * Creates a timer that accepts a `timerCalc` function to perform calculated timeout retries, such as exponential backoff.\r\n *\r\n * @example\r\n * let reconnectTimer = new Timer(() => this.connect(), function(tries){\r\n * return [1000, 5000, 10000][tries - 1] || 10000\r\n * })\r\n * reconnectTimer.scheduleTimeout() // fires after 1000\r\n * reconnectTimer.scheduleTimeout() // fires after 5000\r\n * reconnectTimer.reset()\r\n * reconnectTimer.scheduleTimeout() // fires after 1000\r\n */\r\nclass Timer {\r\n constructor(callback, timerCalc) {\r\n this.callback = callback;\r\n this.timerCalc = timerCalc;\r\n this.timer = undefined;\r\n this.tries = 0;\r\n this.callback = callback;\r\n this.timerCalc = timerCalc;\r\n }\r\n reset() {\r\n this.tries = 0;\r\n clearTimeout(this.timer);\r\n }\r\n // Cancels any previous scheduleTimeout and schedules callback\r\n scheduleTimeout() {\r\n clearTimeout(this.timer);\r\n this.timer = setTimeout(() => {\r\n this.tries = this.tries + 1;\r\n this.callback();\r\n }, this.timerCalc(this.tries + 1));\r\n }\r\n}\r\n//# sourceMappingURL=timer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3RpbWVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL2xpYi90aW1lci5qcz81NWZjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVhdGVzIGEgdGltZXIgdGhhdCBhY2NlcHRzIGEgYHRpbWVyQ2FsY2AgZnVuY3Rpb24gdG8gcGVyZm9ybSBjYWxjdWxhdGVkIHRpbWVvdXQgcmV0cmllcywgc3VjaCBhcyBleHBvbmVudGlhbCBiYWNrb2ZmLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICBsZXQgcmVjb25uZWN0VGltZXIgPSBuZXcgVGltZXIoKCkgPT4gdGhpcy5jb25uZWN0KCksIGZ1bmN0aW9uKHRyaWVzKXtcclxuICogICAgICByZXR1cm4gWzEwMDAsIDUwMDAsIDEwMDAwXVt0cmllcyAtIDFdIHx8IDEwMDAwXHJcbiAqICAgIH0pXHJcbiAqICAgIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcclxuICogICAgcmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgLy8gZmlyZXMgYWZ0ZXIgNTAwMFxyXG4gKiAgICByZWNvbm5lY3RUaW1lci5yZXNldCgpXHJcbiAqICAgIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbWVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCB0aW1lckNhbGMpIHtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy50aW1lckNhbGMgPSB0aW1lckNhbGM7XHJcbiAgICAgICAgdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnRyaWVzID0gMDtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy50aW1lckNhbGMgPSB0aW1lckNhbGM7XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnRyaWVzID0gMDtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XHJcbiAgICB9XHJcbiAgICAvLyBDYW5jZWxzIGFueSBwcmV2aW91cyBzY2hlZHVsZVRpbWVvdXQgYW5kIHNjaGVkdWxlcyBjYWxsYmFja1xyXG4gICAgc2NoZWR1bGVUaW1lb3V0KCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcclxuICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZXMgPSB0aGlzLnRyaWVzICsgMTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xyXG4gICAgICAgIH0sIHRoaXMudGltZXJDYWxjKHRoaXMudHJpZXMgKyAxKSk7XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/timer.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js": /*!****************************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js ***! \****************************************************************************/ /***/ (function(__unused_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 */ PostgresTypes: function() { return /* binding */ PostgresTypes; },\n/* harmony export */ convertCell: function() { return /* binding */ convertCell; },\n/* harmony export */ convertChangeData: function() { return /* binding */ convertChangeData; },\n/* harmony export */ convertColumn: function() { return /* binding */ convertColumn; },\n/* harmony export */ httpEndpointURL: function() { return /* binding */ httpEndpointURL; },\n/* harmony export */ toArray: function() { return /* binding */ toArray; },\n/* harmony export */ toBoolean: function() { return /* binding */ toBoolean; },\n/* harmony export */ toJson: function() { return /* binding */ toJson; },\n/* harmony export */ toNumber: function() { return /* binding */ toNumber; },\n/* harmony export */ toTimestampString: function() { return /* binding */ toTimestampString; }\n/* harmony export */ });\n/**\r\n * Helpers to convert the change Payload into native JS types.\r\n */\r\n// Adapted from epgsql (src/epgsql_binary.erl), this module licensed under\r\n// 3-clause BSD found here: https://raw.githubusercontent.com/epgsql/epgsql/devel/LICENSE\r\nvar PostgresTypes;\r\n(function (PostgresTypes) {\r\n PostgresTypes[\"abstime\"] = \"abstime\";\r\n PostgresTypes[\"bool\"] = \"bool\";\r\n PostgresTypes[\"date\"] = \"date\";\r\n PostgresTypes[\"daterange\"] = \"daterange\";\r\n PostgresTypes[\"float4\"] = \"float4\";\r\n PostgresTypes[\"float8\"] = \"float8\";\r\n PostgresTypes[\"int2\"] = \"int2\";\r\n PostgresTypes[\"int4\"] = \"int4\";\r\n PostgresTypes[\"int4range\"] = \"int4range\";\r\n PostgresTypes[\"int8\"] = \"int8\";\r\n PostgresTypes[\"int8range\"] = \"int8range\";\r\n PostgresTypes[\"json\"] = \"json\";\r\n PostgresTypes[\"jsonb\"] = \"jsonb\";\r\n PostgresTypes[\"money\"] = \"money\";\r\n PostgresTypes[\"numeric\"] = \"numeric\";\r\n PostgresTypes[\"oid\"] = \"oid\";\r\n PostgresTypes[\"reltime\"] = \"reltime\";\r\n PostgresTypes[\"text\"] = \"text\";\r\n PostgresTypes[\"time\"] = \"time\";\r\n PostgresTypes[\"timestamp\"] = \"timestamp\";\r\n PostgresTypes[\"timestamptz\"] = \"timestamptz\";\r\n PostgresTypes[\"timetz\"] = \"timetz\";\r\n PostgresTypes[\"tsrange\"] = \"tsrange\";\r\n PostgresTypes[\"tstzrange\"] = \"tstzrange\";\r\n})(PostgresTypes || (PostgresTypes = {}));\r\n/**\r\n * Takes an array of columns and an object of string values then converts each string value\r\n * to its mapped type.\r\n *\r\n * @param {{name: String, type: String}[]} columns\r\n * @param {Object} record\r\n * @param {Object} options The map of various options that can be applied to the mapper\r\n * @param {Array} options.skipTypes The array of types that should not be converted\r\n *\r\n * @example convertChangeData([{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age:'33'}, {})\r\n * //=>{ first_name: 'Paul', age: 33 }\r\n */\r\nconst convertChangeData = (columns, record, options = {}) => {\r\n var _a;\r\n const skipTypes = (_a = options.skipTypes) !== null && _a !== void 0 ? _a : [];\r\n return Object.keys(record).reduce((acc, rec_key) => {\r\n acc[rec_key] = convertColumn(rec_key, columns, record, skipTypes);\r\n return acc;\r\n }, {});\r\n};\r\n/**\r\n * Converts the value of an individual column.\r\n *\r\n * @param {String} columnName The column that you want to convert\r\n * @param {{name: String, type: String}[]} columns All of the columns\r\n * @param {Object} record The map of string values\r\n * @param {Array} skipTypes An array of types that should not be converted\r\n * @return {object} Useless information\r\n *\r\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, [])\r\n * //=> 33\r\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, ['int4'])\r\n * //=> \"33\"\r\n */\r\nconst convertColumn = (columnName, columns, record, skipTypes) => {\r\n const column = columns.find((x) => x.name === columnName);\r\n const colType = column === null || column === void 0 ? void 0 : column.type;\r\n const value = record[columnName];\r\n if (colType && !skipTypes.includes(colType)) {\r\n return convertCell(colType, value);\r\n }\r\n return noop(value);\r\n};\r\n/**\r\n * If the value of the cell is `null`, returns null.\r\n * Otherwise converts the string value to the correct type.\r\n * @param {String} type A postgres column type\r\n * @param {String} value The cell value\r\n *\r\n * @example convertCell('bool', 't')\r\n * //=> true\r\n * @example convertCell('int8', '10')\r\n * //=> 10\r\n * @example convertCell('_int4', '{1,2,3,4}')\r\n * //=> [1,2,3,4]\r\n */\r\nconst convertCell = (type, value) => {\r\n // if data type is an array\r\n if (type.charAt(0) === '_') {\r\n const dataType = type.slice(1, type.length);\r\n return toArray(value, dataType);\r\n }\r\n // If not null, convert to correct type.\r\n switch (type) {\r\n case PostgresTypes.bool:\r\n return toBoolean(value);\r\n case PostgresTypes.float4:\r\n case PostgresTypes.float8:\r\n case PostgresTypes.int2:\r\n case PostgresTypes.int4:\r\n case PostgresTypes.int8:\r\n case PostgresTypes.numeric:\r\n case PostgresTypes.oid:\r\n return toNumber(value);\r\n case PostgresTypes.json:\r\n case PostgresTypes.jsonb:\r\n return toJson(value);\r\n case PostgresTypes.timestamp:\r\n return toTimestampString(value); // Format to be consistent with PostgREST\r\n case PostgresTypes.abstime: // To allow users to cast it based on Timezone\r\n case PostgresTypes.date: // To allow users to cast it based on Timezone\r\n case PostgresTypes.daterange:\r\n case PostgresTypes.int4range:\r\n case PostgresTypes.int8range:\r\n case PostgresTypes.money:\r\n case PostgresTypes.reltime: // To allow users to cast it based on Timezone\r\n case PostgresTypes.text:\r\n case PostgresTypes.time: // To allow users to cast it based on Timezone\r\n case PostgresTypes.timestamptz: // To allow users to cast it based on Timezone\r\n case PostgresTypes.timetz: // To allow users to cast it based on Timezone\r\n case PostgresTypes.tsrange:\r\n case PostgresTypes.tstzrange:\r\n return noop(value);\r\n default:\r\n // Return the value for remaining types\r\n return noop(value);\r\n }\r\n};\r\nconst noop = (value) => {\r\n return value;\r\n};\r\nconst toBoolean = (value) => {\r\n switch (value) {\r\n case 't':\r\n return true;\r\n case 'f':\r\n return false;\r\n default:\r\n return value;\r\n }\r\n};\r\nconst toNumber = (value) => {\r\n if (typeof value === 'string') {\r\n const parsedValue = parseFloat(value);\r\n if (!Number.isNaN(parsedValue)) {\r\n return parsedValue;\r\n }\r\n }\r\n return value;\r\n};\r\nconst toJson = (value) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n }\r\n catch (error) {\r\n console.log(`JSON parse error: ${error}`);\r\n return value;\r\n }\r\n }\r\n return value;\r\n};\r\n/**\r\n * Converts a Postgres Array into a native JS array\r\n *\r\n * @example toArray('{}', 'int4')\r\n * //=> []\r\n * @example toArray('{\"[2021-01-01,2021-12-31)\",\"(2021-01-01,2021-12-32]\"}', 'daterange')\r\n * //=> ['[2021-01-01,2021-12-31)', '(2021-01-01,2021-12-32]']\r\n * @example toArray([1,2,3,4], 'int4')\r\n * //=> [1,2,3,4]\r\n */\r\nconst toArray = (value, type) => {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n const lastIdx = value.length - 1;\r\n const closeBrace = value[lastIdx];\r\n const openBrace = value[0];\r\n // Confirm value is a Postgres array by checking curly brackets\r\n if (openBrace === '{' && closeBrace === '}') {\r\n let arr;\r\n const valTrim = value.slice(1, lastIdx);\r\n // TODO: find a better solution to separate Postgres array data\r\n try {\r\n arr = JSON.parse('[' + valTrim + ']');\r\n }\r\n catch (_) {\r\n // WARNING: splitting on comma does not cover all edge cases\r\n arr = valTrim ? valTrim.split(',') : [];\r\n }\r\n return arr.map((val) => convertCell(type, val));\r\n }\r\n return value;\r\n};\r\n/**\r\n * Fixes timestamp to be ISO-8601. Swaps the space between the date and time for a 'T'\r\n * See https://github.com/supabase/supabase/issues/18\r\n *\r\n * @example toTimestampString('2019-09-10 00:00:00')\r\n * //=> '2019-09-10T00:00:00'\r\n */\r\nconst toTimestampString = (value) => {\r\n if (typeof value === 'string') {\r\n return value.replace(' ', 'T');\r\n }\r\n return value;\r\n};\r\nconst httpEndpointURL = (socketUrl) => {\r\n let url = socketUrl;\r\n url = url.replace(/^ws/i, 'http');\r\n url = url.replace(/(\\/socket\\/websocket|\\/socket|\\/websocket)\\/?$/i, '');\r\n return url.replace(/\\/+$/, '');\r\n};\r\n//# sourceMappingURL=transformers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3RyYW5zZm9ybWVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHNDQUFzQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkJBQTJCLElBQUk7QUFDM0MsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEI7QUFDQSxnQ0FBZ0MsaUNBQWlDLEdBQUcsMEJBQTBCLElBQUksNkJBQTZCLElBQUk7QUFDbkksU0FBUztBQUNUO0FBQ08sd0RBQXdEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLDJCQUEyQixJQUFJO0FBQzNDLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0EsbUNBQW1DLGlDQUFpQyxHQUFHLDBCQUEwQixJQUFJLDhCQUE4QjtBQUNuSTtBQUNBLG1DQUFtQyxpQ0FBaUMsR0FBRywwQkFBMEIsSUFBSSw4QkFBOEI7QUFDbkk7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxRQUFRO0FBQzNDO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLE1BQU07QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLHNCQUFzQixvREFBb0Q7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL2xpYi90cmFuc2Zvcm1lcnMuanM/MzlmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSGVscGVycyB0byBjb252ZXJ0IHRoZSBjaGFuZ2UgUGF5bG9hZCBpbnRvIG5hdGl2ZSBKUyB0eXBlcy5cclxuICovXHJcbi8vIEFkYXB0ZWQgZnJvbSBlcGdzcWwgKHNyYy9lcGdzcWxfYmluYXJ5LmVybCksIHRoaXMgbW9kdWxlIGxpY2Vuc2VkIHVuZGVyXHJcbi8vIDMtY2xhdXNlIEJTRCBmb3VuZCBoZXJlOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXBnc3FsL2VwZ3NxbC9kZXZlbC9MSUNFTlNFXHJcbmV4cG9ydCB2YXIgUG9zdGdyZXNUeXBlcztcclxuKGZ1bmN0aW9uIChQb3N0Z3Jlc1R5cGVzKSB7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiYWJzdGltZVwiXSA9IFwiYWJzdGltZVwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImJvb2xcIl0gPSBcImJvb2xcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJkYXRlXCJdID0gXCJkYXRlXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiZGF0ZXJhbmdlXCJdID0gXCJkYXRlcmFuZ2VcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJmbG9hdDRcIl0gPSBcImZsb2F0NFwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImZsb2F0OFwiXSA9IFwiZmxvYXQ4XCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiaW50MlwiXSA9IFwiaW50MlwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImludDRcIl0gPSBcImludDRcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJpbnQ0cmFuZ2VcIl0gPSBcImludDRyYW5nZVwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImludDhcIl0gPSBcImludDhcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJpbnQ4cmFuZ2VcIl0gPSBcImludDhyYW5nZVwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcImpzb25cIl0gPSBcImpzb25cIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJqc29uYlwiXSA9IFwianNvbmJcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJtb25leVwiXSA9IFwibW9uZXlcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJudW1lcmljXCJdID0gXCJudW1lcmljXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1wib2lkXCJdID0gXCJvaWRcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJyZWx0aW1lXCJdID0gXCJyZWx0aW1lXCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1widGV4dFwiXSA9IFwidGV4dFwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcInRpbWVcIl0gPSBcInRpbWVcIjtcclxuICAgIFBvc3RncmVzVHlwZXNbXCJ0aW1lc3RhbXBcIl0gPSBcInRpbWVzdGFtcFwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcInRpbWVzdGFtcHR6XCJdID0gXCJ0aW1lc3RhbXB0elwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcInRpbWV0elwiXSA9IFwidGltZXR6XCI7XHJcbiAgICBQb3N0Z3Jlc1R5cGVzW1widHNyYW5nZVwiXSA9IFwidHNyYW5nZVwiO1xyXG4gICAgUG9zdGdyZXNUeXBlc1tcInRzdHpyYW5nZVwiXSA9IFwidHN0enJhbmdlXCI7XHJcbn0pKFBvc3RncmVzVHlwZXMgfHwgKFBvc3RncmVzVHlwZXMgPSB7fSkpO1xyXG4vKipcclxuICogVGFrZXMgYW4gYXJyYXkgb2YgY29sdW1ucyBhbmQgYW4gb2JqZWN0IG9mIHN0cmluZyB2YWx1ZXMgdGhlbiBjb252ZXJ0cyBlYWNoIHN0cmluZyB2YWx1ZVxyXG4gKiB0byBpdHMgbWFwcGVkIHR5cGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7e25hbWU6IFN0cmluZywgdHlwZTogU3RyaW5nfVtdfSBjb2x1bW5zXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWNvcmRcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG1hcCBvZiB2YXJpb3VzIG9wdGlvbnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byB0aGUgbWFwcGVyXHJcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnMuc2tpcFR5cGVzIFRoZSBhcnJheSBvZiB0eXBlcyB0aGF0IHNob3VsZCBub3QgYmUgY29udmVydGVkXHJcbiAqXHJcbiAqIEBleGFtcGxlIGNvbnZlcnRDaGFuZ2VEYXRhKFt7bmFtZTogJ2ZpcnN0X25hbWUnLCB0eXBlOiAndGV4dCd9LCB7bmFtZTogJ2FnZScsIHR5cGU6ICdpbnQ0J31dLCB7Zmlyc3RfbmFtZTogJ1BhdWwnLCBhZ2U6JzMzJ30sIHt9KVxyXG4gKiAvLz0+eyBmaXJzdF9uYW1lOiAnUGF1bCcsIGFnZTogMzMgfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNvbnZlcnRDaGFuZ2VEYXRhID0gKGNvbHVtbnMsIHJlY29yZCwgb3B0aW9ucyA9IHt9KSA9PiB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBjb25zdCBza2lwVHlwZXMgPSAoX2EgPSBvcHRpb25zLnNraXBUeXBlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVjb3JkKS5yZWR1Y2UoKGFjYywgcmVjX2tleSkgPT4ge1xyXG4gICAgICAgIGFjY1tyZWNfa2V5XSA9IGNvbnZlcnRDb2x1bW4ocmVjX2tleSwgY29sdW1ucywgcmVjb3JkLCBza2lwVHlwZXMpO1xyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcbn07XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgdmFsdWUgb2YgYW4gaW5kaXZpZHVhbCBjb2x1bW4uXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5OYW1lIFRoZSBjb2x1bW4gdGhhdCB5b3Ugd2FudCB0byBjb252ZXJ0XHJcbiAqIEBwYXJhbSB7e25hbWU6IFN0cmluZywgdHlwZTogU3RyaW5nfVtdfSBjb2x1bW5zIEFsbCBvZiB0aGUgY29sdW1uc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjb3JkIFRoZSBtYXAgb2Ygc3RyaW5nIHZhbHVlc1xyXG4gKiBAcGFyYW0ge0FycmF5fSBza2lwVHlwZXMgQW4gYXJyYXkgb2YgdHlwZXMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnZlcnRlZFxyXG4gKiBAcmV0dXJuIHtvYmplY3R9IFVzZWxlc3MgaW5mb3JtYXRpb25cclxuICpcclxuICogQGV4YW1wbGUgY29udmVydENvbHVtbignYWdlJywgW3tuYW1lOiAnZmlyc3RfbmFtZScsIHR5cGU6ICd0ZXh0J30sIHtuYW1lOiAnYWdlJywgdHlwZTogJ2ludDQnfV0sIHtmaXJzdF9uYW1lOiAnUGF1bCcsIGFnZTogJzMzJ30sIFtdKVxyXG4gKiAvLz0+IDMzXHJcbiAqIEBleGFtcGxlIGNvbnZlcnRDb2x1bW4oJ2FnZScsIFt7bmFtZTogJ2ZpcnN0X25hbWUnLCB0eXBlOiAndGV4dCd9LCB7bmFtZTogJ2FnZScsIHR5cGU6ICdpbnQ0J31dLCB7Zmlyc3RfbmFtZTogJ1BhdWwnLCBhZ2U6ICczMyd9LCBbJ2ludDQnXSlcclxuICogLy89PiBcIjMzXCJcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb252ZXJ0Q29sdW1uID0gKGNvbHVtbk5hbWUsIGNvbHVtbnMsIHJlY29yZCwgc2tpcFR5cGVzKSA9PiB7XHJcbiAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gY29sdW1uTmFtZSk7XHJcbiAgICBjb25zdCBjb2xUeXBlID0gY29sdW1uID09PSBudWxsIHx8IGNvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sdW1uLnR5cGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFtjb2x1bW5OYW1lXTtcclxuICAgIGlmIChjb2xUeXBlICYmICFza2lwVHlwZXMuaW5jbHVkZXMoY29sVHlwZSkpIHtcclxuICAgICAgICByZXR1cm4gY29udmVydENlbGwoY29sVHlwZSwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vb3AodmFsdWUpO1xyXG59O1xyXG4vKipcclxuICogSWYgdGhlIHZhbHVlIG9mIHRoZSBjZWxsIGlzIGBudWxsYCwgcmV0dXJucyBudWxsLlxyXG4gKiBPdGhlcndpc2UgY29udmVydHMgdGhlIHN0cmluZyB2YWx1ZSB0byB0aGUgY29ycmVjdCB0eXBlLlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBBIHBvc3RncmVzIGNvbHVtbiB0eXBlXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBUaGUgY2VsbCB2YWx1ZVxyXG4gKlxyXG4gKiBAZXhhbXBsZSBjb252ZXJ0Q2VsbCgnYm9vbCcsICd0JylcclxuICogLy89PiB0cnVlXHJcbiAqIEBleGFtcGxlIGNvbnZlcnRDZWxsKCdpbnQ4JywgJzEwJylcclxuICogLy89PiAxMFxyXG4gKiBAZXhhbXBsZSBjb252ZXJ0Q2VsbCgnX2ludDQnLCAnezEsMiwzLDR9JylcclxuICogLy89PiBbMSwyLDMsNF1cclxuICovXHJcbmV4cG9ydCBjb25zdCBjb252ZXJ0Q2VsbCA9ICh0eXBlLCB2YWx1ZSkgPT4ge1xyXG4gICAgLy8gaWYgZGF0YSB0eXBlIGlzIGFuIGFycmF5XHJcbiAgICBpZiAodHlwZS5jaGFyQXQoMCkgPT09ICdfJykge1xyXG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdHlwZS5zbGljZSgxLCB0eXBlLmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIHRvQXJyYXkodmFsdWUsIGRhdGFUeXBlKTtcclxuICAgIH1cclxuICAgIC8vIElmIG5vdCBudWxsLCBjb252ZXJ0IHRvIGNvcnJlY3QgdHlwZS5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5ib29sOlxyXG4gICAgICAgICAgICByZXR1cm4gdG9Cb29sZWFuKHZhbHVlKTtcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuZmxvYXQ0OlxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5mbG9hdDg6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmludDI6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmludDQ6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmludDg6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLm51bWVyaWM6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLm9pZDpcclxuICAgICAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuanNvbjpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuanNvbmI6XHJcbiAgICAgICAgICAgIHJldHVybiB0b0pzb24odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy50aW1lc3RhbXA6XHJcbiAgICAgICAgICAgIHJldHVybiB0b1RpbWVzdGFtcFN0cmluZyh2YWx1ZSk7IC8vIEZvcm1hdCB0byBiZSBjb25zaXN0ZW50IHdpdGggUG9zdGdSRVNUXHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmFic3RpbWU6IC8vIFRvIGFsbG93IHVzZXJzIHRvIGNhc3QgaXQgYmFzZWQgb24gVGltZXpvbmVcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuZGF0ZTogLy8gVG8gYWxsb3cgdXNlcnMgdG8gY2FzdCBpdCBiYXNlZCBvbiBUaW1lem9uZVxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5kYXRlcmFuZ2U6XHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmludDRyYW5nZTpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuaW50OHJhbmdlOlxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5tb25leTpcclxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMucmVsdGltZTogLy8gVG8gYWxsb3cgdXNlcnMgdG8gY2FzdCBpdCBiYXNlZCBvbiBUaW1lem9uZVxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy50ZXh0OlxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy50aW1lOiAvLyBUbyBhbGxvdyB1c2VycyB0byBjYXN0IGl0IGJhc2VkIG9uIFRpbWV6b25lXHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRpbWVzdGFtcHR6OiAvLyBUbyBhbGxvdyB1c2VycyB0byBjYXN0IGl0IGJhc2VkIG9uIFRpbWV6b25lXHJcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRpbWV0ejogLy8gVG8gYWxsb3cgdXNlcnMgdG8gY2FzdCBpdCBiYXNlZCBvbiBUaW1lem9uZVxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy50c3JhbmdlOlxyXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy50c3R6cmFuZ2U6XHJcbiAgICAgICAgICAgIHJldHVybiBub29wKHZhbHVlKTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHZhbHVlIGZvciByZW1haW5pbmcgdHlwZXNcclxuICAgICAgICAgICAgcmV0dXJuIG5vb3AodmFsdWUpO1xyXG4gICAgfVxyXG59O1xyXG5jb25zdCBub29wID0gKHZhbHVlKSA9PiB7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcbmV4cG9ydCBjb25zdCB0b0Jvb2xlYW4gPSAodmFsdWUpID0+IHtcclxuICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgICBjYXNlICd0JzpcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgY2FzZSAnZic6XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCBjb25zdCB0b051bWJlciA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHBhcnNlZFZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5leHBvcnQgY29uc3QgdG9Kc29uID0gKHZhbHVlKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBKU09OIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG4vKipcclxuICogQ29udmVydHMgYSBQb3N0Z3JlcyBBcnJheSBpbnRvIGEgbmF0aXZlIEpTIGFycmF5XHJcbiAqXHJcbiAqIEBleGFtcGxlIHRvQXJyYXkoJ3t9JywgJ2ludDQnKVxyXG4gKiAvLz0+IFtdXHJcbiAqIEBleGFtcGxlIHRvQXJyYXkoJ3tcIlsyMDIxLTAxLTAxLDIwMjEtMTItMzEpXCIsXCIoMjAyMS0wMS0wMSwyMDIxLTEyLTMyXVwifScsICdkYXRlcmFuZ2UnKVxyXG4gKiAvLz0+IFsnWzIwMjEtMDEtMDEsMjAyMS0xMi0zMSknLCAnKDIwMjEtMDEtMDEsMjAyMS0xMi0zMl0nXVxyXG4gKiBAZXhhbXBsZSB0b0FycmF5KFsxLDIsMyw0XSwgJ2ludDQnKVxyXG4gKiAvLz0+IFsxLDIsMyw0XVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHRvQXJyYXkgPSAodmFsdWUsIHR5cGUpID0+IHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFzdElkeCA9IHZhbHVlLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBjbG9zZUJyYWNlID0gdmFsdWVbbGFzdElkeF07XHJcbiAgICBjb25zdCBvcGVuQnJhY2UgPSB2YWx1ZVswXTtcclxuICAgIC8vIENvbmZpcm0gdmFsdWUgaXMgYSBQb3N0Z3JlcyBhcnJheSBieSBjaGVja2luZyBjdXJseSBicmFja2V0c1xyXG4gICAgaWYgKG9wZW5CcmFjZSA9PT0gJ3snICYmIGNsb3NlQnJhY2UgPT09ICd9Jykge1xyXG4gICAgICAgIGxldCBhcnI7XHJcbiAgICAgICAgY29uc3QgdmFsVHJpbSA9IHZhbHVlLnNsaWNlKDEsIGxhc3RJZHgpO1xyXG4gICAgICAgIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24gdG8gc2VwYXJhdGUgUG9zdGdyZXMgYXJyYXkgZGF0YVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGFyciA9IEpTT04ucGFyc2UoJ1snICsgdmFsVHJpbSArICddJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChfKSB7XHJcbiAgICAgICAgICAgIC8vIFdBUk5JTkc6IHNwbGl0dGluZyBvbiBjb21tYSBkb2VzIG5vdCBjb3ZlciBhbGwgZWRnZSBjYXNlc1xyXG4gICAgICAgICAgICBhcnIgPSB2YWxUcmltID8gdmFsVHJpbS5zcGxpdCgnLCcpIDogW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnIubWFwKCh2YWwpID0+IGNvbnZlcnRDZWxsKHR5cGUsIHZhbCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG4vKipcclxuICogRml4ZXMgdGltZXN0YW1wIHRvIGJlIElTTy04NjAxLiBTd2FwcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgZGF0ZSBhbmQgdGltZSBmb3IgYSAnVCdcclxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9zdXBhYmFzZS9pc3N1ZXMvMThcclxuICpcclxuICogQGV4YW1wbGUgdG9UaW1lc3RhbXBTdHJpbmcoJzIwMTktMDktMTAgMDA6MDA6MDAnKVxyXG4gKiAvLz0+ICcyMDE5LTA5LTEwVDAwOjAwOjAwJ1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHRvVGltZXN0YW1wU3RyaW5nID0gKHZhbHVlKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKCcgJywgJ1QnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufTtcclxuZXhwb3J0IGNvbnN0IGh0dHBFbmRwb2ludFVSTCA9IChzb2NrZXRVcmwpID0+IHtcclxuICAgIGxldCB1cmwgPSBzb2NrZXRVcmw7XHJcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXndzL2ksICdodHRwJyk7XHJcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvKFxcL3NvY2tldFxcL3dlYnNvY2tldHxcXC9zb2NrZXR8XFwvd2Vic29ja2V0KVxcLz8kL2ksICcnKTtcclxuICAgIHJldHVybiB1cmwucmVwbGFjZSgvXFwvKyQvLCAnJyk7XHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYW5zZm9ybWVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/version.js": /*!***********************************************************************!*\ !*** ./node_modules/@supabase/realtime-js/dist/module/lib/version.js ***! \***********************************************************************/ /***/ (function(__unused_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 */ version: function() { return /* binding */ version; }\n/* harmony export */ });\nconst version = '2.11.15';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1AiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9saWIvdmVyc2lvbi5qcz84MmZjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuMTEuMTUnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/version.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/StorageClient.js": /*!************************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/StorageClient.js ***! \************************************************************************/ /***/ (function(__unused_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 */ StorageClient: function() { return /* binding */ StorageClient; }\n/* harmony export */ });\n/* harmony import */ var _packages_StorageFileApi__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./packages/StorageFileApi */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/packages/StorageFileApi.js\");\n/* harmony import */ var _packages_StorageBucketApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./packages/StorageBucketApi */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/packages/StorageBucketApi.js\");\n\r\n\r\nclass StorageClient extends _packages_StorageBucketApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(url, headers = {}, fetch) {\r\n super(url, headers, fetch);\r\n }\r\n /**\r\n * Perform file operation in a bucket.\r\n *\r\n * @param id The bucket id to operate on.\r\n */\r\n from(id) {\r\n return new _packages_StorageFileApi__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.url, this.headers, id, this.fetch);\r\n }\r\n}\r\n//# sourceMappingURL=StorageClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9TdG9yYWdlQ2xpZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1RDtBQUNJO0FBQ3BELDRCQUE0QixrRUFBZ0I7QUFDbkQsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZ0VBQWM7QUFDakM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9TdG9yYWdlQ2xpZW50LmpzPzI2MDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN0b3JhZ2VGaWxlQXBpIGZyb20gJy4vcGFja2FnZXMvU3RvcmFnZUZpbGVBcGknO1xyXG5pbXBvcnQgU3RvcmFnZUJ1Y2tldEFwaSBmcm9tICcuL3BhY2thZ2VzL1N0b3JhZ2VCdWNrZXRBcGknO1xyXG5leHBvcnQgY2xhc3MgU3RvcmFnZUNsaWVudCBleHRlbmRzIFN0b3JhZ2VCdWNrZXRBcGkge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBoZWFkZXJzID0ge30sIGZldGNoKSB7XHJcbiAgICAgICAgc3VwZXIodXJsLCBoZWFkZXJzLCBmZXRjaCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gZmlsZSBvcGVyYXRpb24gaW4gYSBidWNrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIFRoZSBidWNrZXQgaWQgdG8gb3BlcmF0ZSBvbi5cclxuICAgICAqL1xyXG4gICAgZnJvbShpZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUZpbGVBcGkodGhpcy51cmwsIHRoaXMuaGVhZGVycywgaWQsIHRoaXMuZmV0Y2gpO1xyXG4gICAgfVxyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN0b3JhZ2VDbGllbnQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/StorageClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/constants.js": /*!************************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/lib/constants.js ***! \************************************************************************/ /***/ (function(__unused_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 */ DEFAULT_HEADERS: function() { return /* binding */ DEFAULT_HEADERS; }\n/* harmony export */ });\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/version.js\");\n\r\nconst DEFAULT_HEADERS = { 'X-Client-Info': `storage-js/${_version__WEBPACK_IMPORTED_MODULE_0__.version}` };\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW9DO0FBQzdCLDBCQUEwQiwrQkFBK0IsNkNBQU8sQ0FBQztBQUN4RSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tb2R1bGUvbGliL2NvbnN0YW50cy5qcz9mNzJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24nO1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUFERVJTID0geyAnWC1DbGllbnQtSW5mbyc6IGBzdG9yYWdlLWpzLyR7dmVyc2lvbn1gIH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/constants.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/errors.js": /*!*********************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/lib/errors.js ***! \*********************************************************************/ /***/ (function(__unused_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 */ StorageApiError: function() { return /* binding */ StorageApiError; },\n/* harmony export */ StorageError: function() { return /* binding */ StorageError; },\n/* harmony export */ StorageUnknownError: function() { return /* binding */ StorageUnknownError; },\n/* harmony export */ isStorageError: function() { return /* binding */ isStorageError; }\n/* harmony export */ });\nclass StorageError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.__isStorageError = true;\r\n this.name = 'StorageError';\r\n }\r\n}\r\nfunction isStorageError(error) {\r\n return typeof error === 'object' && error !== null && '__isStorageError' in error;\r\n}\r\nclass StorageApiError extends StorageError {\r\n constructor(message, status) {\r\n super(message);\r\n this.name = 'StorageApiError';\r\n this.status = status;\r\n }\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n status: this.status,\r\n };\r\n }\r\n}\r\nclass StorageUnknownError extends StorageError {\r\n constructor(message, originalError) {\r\n super(message);\r\n this.name = 'StorageUnknownError';\r\n this.originalError = originalError;\r\n }\r\n}\r\n//# sourceMappingURL=errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvZXJyb3JzLmpzP2VhNDAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN0b3JhZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9faXNTdG9yYWdlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdTdG9yYWdlRXJyb3InO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N0b3JhZ2VFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgJ19faXNTdG9yYWdlRXJyb3InIGluIGVycm9yO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBTdG9yYWdlQXBpRXJyb3IgZXh0ZW5kcyBTdG9yYWdlRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ1N0b3JhZ2VBcGlFcnJvcic7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgU3RvcmFnZVVua25vd25FcnJvciBleHRlbmRzIFN0b3JhZ2VFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBvcmlnaW5hbEVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ1N0b3JhZ2VVbmtub3duRXJyb3InO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxFcnJvciA9IG9yaWdpbmFsRXJyb3I7XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/errors.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/fetch.js": /*!********************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/lib/fetch.js ***! \********************************************************************/ /***/ (function(__unused_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 */ get: function() { return /* binding */ get; },\n/* harmony export */ head: function() { return /* binding */ head; },\n/* harmony export */ post: function() { return /* binding */ post; },\n/* harmony export */ put: function() { return /* binding */ put; },\n/* harmony export */ remove: function() { return /* binding */ remove; }\n/* harmony export */ });\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/errors.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/helpers.js\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\r\nconst handleError = (error, reject, options) => __awaiter(void 0, void 0, void 0, function* () {\r\n const Res = yield (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.resolveResponse)();\r\n if (error instanceof Res && !(options === null || options === void 0 ? void 0 : options.noResolveJson)) {\r\n error\r\n .json()\r\n .then((err) => {\r\n reject(new _errors__WEBPACK_IMPORTED_MODULE_1__.StorageApiError(_getErrorMessage(err), error.status || 500));\r\n })\r\n .catch((err) => {\r\n reject(new _errors__WEBPACK_IMPORTED_MODULE_1__.StorageUnknownError(_getErrorMessage(err), err));\r\n });\r\n }\r\n else {\r\n reject(new _errors__WEBPACK_IMPORTED_MODULE_1__.StorageUnknownError(_getErrorMessage(error), error));\r\n }\r\n});\r\nconst _getRequestParams = (method, options, parameters, body) => {\r\n const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\r\n if (method === 'GET') {\r\n return params;\r\n }\r\n params.headers = Object.assign({ 'Content-Type': 'application/json' }, options === null || options === void 0 ? void 0 : options.headers);\r\n if (body) {\r\n params.body = JSON.stringify(body);\r\n }\r\n return Object.assign(Object.assign({}, params), parameters);\r\n};\r\nfunction _handleRequest(fetcher, method, url, options, parameters, body) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n fetcher(url, _getRequestParams(method, options, parameters, body))\r\n .then((result) => {\r\n if (!result.ok)\r\n throw result;\r\n if (options === null || options === void 0 ? void 0 : options.noResolveJson)\r\n return result;\r\n return result.json();\r\n })\r\n .then((data) => resolve(data))\r\n .catch((error) => handleError(error, reject, options));\r\n });\r\n });\r\n}\r\nfunction get(fetcher, url, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'GET', url, options, parameters);\r\n });\r\n}\r\nfunction post(fetcher, url, body, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'POST', url, options, parameters, body);\r\n });\r\n}\r\nfunction put(fetcher, url, body, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'PUT', url, options, parameters, body);\r\n });\r\n}\r\nfunction head(fetcher, url, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'HEAD', url, Object.assign(Object.assign({}, options), { noResolveJson: true }), parameters);\r\n });\r\n}\r\nfunction remove(fetcher, url, body, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return _handleRequest(fetcher, 'DELETE', url, options, parameters, body);\r\n });\r\n}\r\n//# sourceMappingURL=fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvZmV0Y2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNnRTtBQUNwQjtBQUM1QztBQUNBO0FBQ0Esc0JBQXNCLHlEQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9EQUFlO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLHVCQUF1Qix3REFBbUI7QUFDMUMsU0FBUztBQUNUO0FBQ0E7QUFDQSxtQkFBbUIsd0RBQW1CO0FBQ3RDO0FBQ0EsQ0FBQztBQUNEO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxvQ0FBb0M7QUFDekU7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0Esa0ZBQWtGLGNBQWMscUJBQXFCO0FBQ3JILEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvZmV0Y2guanM/MTg4NiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmltcG9ydCB7IFN0b3JhZ2VBcGlFcnJvciwgU3RvcmFnZVVua25vd25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcclxuaW1wb3J0IHsgcmVzb2x2ZVJlc3BvbnNlIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuY29uc3QgX2dldEVycm9yTWVzc2FnZSA9IChlcnIpID0+IGVyci5tc2cgfHwgZXJyLm1lc3NhZ2UgfHwgZXJyLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVyci5lcnJvciB8fCBKU09OLnN0cmluZ2lmeShlcnIpO1xyXG5jb25zdCBoYW5kbGVFcnJvciA9IChlcnJvciwgcmVqZWN0LCBvcHRpb25zKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgIGNvbnN0IFJlcyA9IHlpZWxkIHJlc29sdmVSZXNwb25zZSgpO1xyXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmVzICYmICEob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmVzb2x2ZUpzb24pKSB7XHJcbiAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgLmpzb24oKVxyXG4gICAgICAgICAgICAudGhlbigoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgU3RvcmFnZUFwaUVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZXJyKSwgZXJyb3Iuc3RhdHVzIHx8IDUwMCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgU3RvcmFnZVVua25vd25FcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGVyciksIGVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBTdG9yYWdlVW5rbm93bkVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBlcnJvcikpO1xyXG4gICAgfVxyXG59KTtcclxuY29uc3QgX2dldFJlcXVlc3RQYXJhbXMgPSAobWV0aG9kLCBvcHRpb25zLCBwYXJhbWV0ZXJzLCBib2R5KSA9PiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7IG1ldGhvZCwgaGVhZGVyczogKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5oZWFkZXJzKSB8fCB7fSB9O1xyXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcpIHtcclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcGFyYW1zLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaGVhZGVycyk7XHJcbiAgICBpZiAoYm9keSkge1xyXG4gICAgICAgIHBhcmFtcy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCBwYXJhbWV0ZXJzKTtcclxufTtcclxuZnVuY3Rpb24gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgbWV0aG9kLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHkpIHtcclxuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgZmV0Y2hlcih1cmwsIF9nZXRSZXF1ZXN0UGFyYW1zKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSkpXHJcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5vaylcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmVzb2x2ZUpzb24pXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuanNvbigpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHJlc29sdmUoZGF0YSkpXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBoYW5kbGVFcnJvcihlcnJvciwgcmVqZWN0LCBvcHRpb25zKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGZldGNoZXIsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycykge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICByZXR1cm4gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgJ0dFVCcsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycyk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gcG9zdChmZXRjaGVyLCB1cmwsIGJvZHksIG9wdGlvbnMsIHBhcmFtZXRlcnMpIHtcclxuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9oYW5kbGVSZXF1ZXN0KGZldGNoZXIsICdQT1NUJywgdXJsLCBvcHRpb25zLCBwYXJhbWV0ZXJzLCBib2R5KTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBwdXQoZmV0Y2hlciwgdXJsLCBib2R5LCBvcHRpb25zLCBwYXJhbWV0ZXJzKSB7XHJcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgIHJldHVybiBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCAnUFVUJywgdXJsLCBvcHRpb25zLCBwYXJhbWV0ZXJzLCBib2R5KTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBoZWFkKGZldGNoZXIsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycykge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICByZXR1cm4gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgJ0hFQUQnLCB1cmwsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgbm9SZXNvbHZlSnNvbjogdHJ1ZSB9KSwgcGFyYW1ldGVycyk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlKGZldGNoZXIsIHVybCwgYm9keSwgb3B0aW9ucywgcGFyYW1ldGVycykge1xyXG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICByZXR1cm4gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgJ0RFTEVURScsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSk7XHJcbiAgICB9KTtcclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mZXRjaC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/fetch.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/helpers.js": /*!**********************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/lib/helpers.js ***! \**********************************************************************/ /***/ (function(__unused_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 */ recursiveToCamel: function() { return /* binding */ recursiveToCamel; },\n/* harmony export */ resolveFetch: function() { return /* binding */ resolveFetch; },\n/* harmony export */ resolveResponse: function() { return /* binding */ resolveResponse; }\n/* harmony export */ });\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = (...args) => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! @supabase/node-fetch */ \"(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\")).then(({ default: fetch }) => fetch(...args));\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\nconst resolveResponse = () => __awaiter(void 0, void 0, void 0, function* () {\r\n if (typeof Response === 'undefined') {\r\n // @ts-ignore\r\n return (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! @supabase/node-fetch */ \"(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\"))).Response;\r\n }\r\n return Response;\r\n});\r\nconst recursiveToCamel = (item) => {\r\n if (Array.isArray(item)) {\r\n return item.map((el) => recursiveToCamel(el));\r\n }\r\n else if (typeof item === 'function' || item !== Object(item)) {\r\n return item;\r\n }\r\n const result = {};\r\n Object.entries(item).forEach(([key, value]) => {\r\n const newKey = key.replace(/([-_][a-z])/gi, (c) => c.toUpperCase().replace(/[-_]/g, ''));\r\n result[newKey] = recursiveToCamel(value);\r\n });\r\n return result;\r\n};\r\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsc0xBQThCLFNBQVMsZ0JBQWdCO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLHNCQUFzQixzTEFBOEI7QUFDcEQ7QUFDQTtBQUNBLENBQUM7QUFDTTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tb2R1bGUvbGliL2hlbHBlcnMuanM/ZjY5OSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmV4cG9ydCBjb25zdCByZXNvbHZlRmV0Y2ggPSAoY3VzdG9tRmV0Y2gpID0+IHtcclxuICAgIGxldCBfZmV0Y2g7XHJcbiAgICBpZiAoY3VzdG9tRmV0Y2gpIHtcclxuICAgICAgICBfZmV0Y2ggPSBjdXN0b21GZXRjaDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBfZmV0Y2ggPSAoLi4uYXJncykgPT4gaW1wb3J0KCdAc3VwYWJhc2Uvbm9kZS1mZXRjaCcpLnRoZW4oKHsgZGVmYXVsdDogZmV0Y2ggfSkgPT4gZmV0Y2goLi4uYXJncykpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgX2ZldGNoID0gZmV0Y2g7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IF9mZXRjaCguLi5hcmdzKTtcclxufTtcclxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZXNwb25zZSA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgaWYgKHR5cGVvZiBSZXNwb25zZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcmV0dXJuICh5aWVsZCBpbXBvcnQoJ0BzdXBhYmFzZS9ub2RlLWZldGNoJykpLlJlc3BvbnNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlc3BvbnNlO1xyXG59KTtcclxuZXhwb3J0IGNvbnN0IHJlY3Vyc2l2ZVRvQ2FtZWwgPSAoaXRlbSkgPT4ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5tYXAoKGVsKSA9PiByZWN1cnNpdmVUb0NhbWVsKGVsKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ2Z1bmN0aW9uJyB8fCBpdGVtICE9PSBPYmplY3QoaXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgT2JqZWN0LmVudHJpZXMoaXRlbSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3S2V5ID0ga2V5LnJlcGxhY2UoLyhbLV9dW2Etel0pL2dpLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1stX10vZywgJycpKTtcclxuICAgICAgICByZXN1bHRbbmV3S2V5XSA9IHJlY3Vyc2l2ZVRvQ2FtZWwodmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/helpers.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/version.js": /*!**********************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/lib/version.js ***! \**********************************************************************/ /***/ (function(__unused_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 */ version: function() { return /* binding */ version; }\n/* harmony export */ });\n// generated by genversion\r\nconst version = '2.7.1';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvdmVyc2lvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDTztBQUNQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9saWIvdmVyc2lvbi5qcz9mODllIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGdlbmVyYXRlZCBieSBnZW52ZXJzaW9uXHJcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuNy4xJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/version.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/packages/StorageBucketApi.js": /*!************************************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/packages/StorageBucketApi.js ***! \************************************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ StorageBucketApi; }\n/* harmony export */ });\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/constants.js\");\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/errors.js\");\n/* harmony import */ var _lib_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/fetch */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/fetch.js\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/helpers */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/helpers.js\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\nclass StorageBucketApi {\r\n constructor(url, headers = {}, fetch) {\r\n this.url = url;\r\n this.headers = Object.assign(Object.assign({}, _lib_constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_HEADERS), headers);\r\n this.fetch = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.resolveFetch)(fetch);\r\n }\r\n /**\r\n * Retrieves the details of all Storage buckets within an existing project.\r\n */\r\n listBuckets() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.get)(this.fetch, `${this.url}/bucket`, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Retrieves the details of an existing Storage bucket.\r\n *\r\n * @param id The unique identifier of the bucket you would like to retrieve.\r\n */\r\n getBucket(id) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.get)(this.fetch, `${this.url}/bucket/${id}`, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates a new Storage bucket\r\n *\r\n * @param id A unique identifier for the bucket you are creating.\r\n * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations. By default, buckets are private.\r\n * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\r\n * The global file size limit takes precedence over this value.\r\n * The default value is null, which doesn't set a per bucket file size limit.\r\n * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\r\n * The default value is null, which allows files with all mime types to be uploaded.\r\n * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\r\n * @returns newly created bucket id\r\n */\r\n createBucket(id, options = {\r\n public: false,\r\n }) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/bucket`, {\r\n id,\r\n name: id,\r\n public: options.public,\r\n file_size_limit: options.fileSizeLimit,\r\n allowed_mime_types: options.allowedMimeTypes,\r\n }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Updates a Storage bucket\r\n *\r\n * @param id A unique identifier for the bucket you are updating.\r\n * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations.\r\n * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\r\n * The global file size limit takes precedence over this value.\r\n * The default value is null, which doesn't set a per bucket file size limit.\r\n * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\r\n * The default value is null, which allows files with all mime types to be uploaded.\r\n * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\r\n */\r\n updateBucket(id, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.put)(this.fetch, `${this.url}/bucket/${id}`, {\r\n id,\r\n name: id,\r\n public: options.public,\r\n file_size_limit: options.fileSizeLimit,\r\n allowed_mime_types: options.allowedMimeTypes,\r\n }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Removes all objects inside a single bucket.\r\n *\r\n * @param id The unique identifier of the bucket you would like to empty.\r\n */\r\n emptyBucket(id) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/bucket/${id}/empty`, {}, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Deletes an existing bucket. A bucket can't be deleted with existing objects inside it.\r\n * You must first `empty()` the bucket.\r\n *\r\n * @param id The unique identifier of the bucket you would like to delete.\r\n */\r\n deleteBucket(id) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.remove)(this.fetch, `${this.url}/bucket/${id}`, {}, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=StorageBucketApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9wYWNrYWdlcy9TdG9yYWdlQnVja2V0QXBpLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsaUJBQWlCLFNBQUksSUFBSSxTQUFJO0FBQzdCLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ21EO0FBQ0o7QUFDTztBQUNSO0FBQy9CO0FBQ2YsaUNBQWlDO0FBQ2pDO0FBQ0EscURBQXFELEVBQUUsMkRBQWU7QUFDdEUscUJBQXFCLDBEQUFZO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLCtDQUFHLGdCQUFnQixTQUFTLFlBQVksdUJBQXVCO0FBQ2xHLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0Esb0JBQW9CLDJEQUFjO0FBQ2xDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLCtDQUFHLGdCQUFnQixTQUFTLFVBQVUsR0FBRyxLQUFLLHVCQUF1QjtBQUN4Ryx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLG9CQUFvQiwyREFBYztBQUNsQyw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQ0FBbUMsZ0RBQUksZ0JBQWdCLFNBQVM7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixJQUFJLHVCQUF1QjtBQUM1Qyx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLG9CQUFvQiwyREFBYztBQUNsQyw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLCtDQUFHLGdCQUFnQixTQUFTLFVBQVUsR0FBRztBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLElBQUksdUJBQXVCO0FBQzVDLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0Esb0JBQW9CLDJEQUFjO0FBQ2xDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdEQUFJLGdCQUFnQixTQUFTLFVBQVUsR0FBRyxXQUFXLElBQUksdUJBQXVCO0FBQ25ILHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0Esb0JBQW9CLDJEQUFjO0FBQ2xDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsa0RBQU0sZ0JBQWdCLFNBQVMsVUFBVSxHQUFHLEtBQUssSUFBSSx1QkFBdUI7QUFDL0cseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSxvQkFBb0IsMkRBQWM7QUFDbEMsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdG9yYWdlLWpzL2Rpc3QvbW9kdWxlL3BhY2thZ2VzL1N0b3JhZ2VCdWNrZXRBcGkuanM/YzY4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmltcG9ydCB7IERFRkFVTFRfSEVBREVSUyB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBpc1N0b3JhZ2VFcnJvciB9IGZyb20gJy4uL2xpYi9lcnJvcnMnO1xyXG5pbXBvcnQgeyBnZXQsIHBvc3QsIHB1dCwgcmVtb3ZlIH0gZnJvbSAnLi4vbGliL2ZldGNoJztcclxuaW1wb3J0IHsgcmVzb2x2ZUZldGNoIH0gZnJvbSAnLi4vbGliL2hlbHBlcnMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yYWdlQnVja2V0QXBpIHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCwgaGVhZGVycyA9IHt9LCBmZXRjaCkge1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9IRUFERVJTKSwgaGVhZGVycyk7XHJcbiAgICAgICAgdGhpcy5mZXRjaCA9IHJlc29sdmVGZXRjaChmZXRjaCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgZGV0YWlscyBvZiBhbGwgU3RvcmFnZSBidWNrZXRzIHdpdGhpbiBhbiBleGlzdGluZyBwcm9qZWN0LlxyXG4gICAgICovXHJcbiAgICBsaXN0QnVja2V0cygpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIGdldCh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vYnVja2V0YCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRldGFpbHMgb2YgYW4gZXhpc3RpbmcgU3RvcmFnZSBidWNrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYnVja2V0IHlvdSB3b3VsZCBsaWtlIHRvIHJldHJpZXZlLlxyXG4gICAgICovXHJcbiAgICBnZXRCdWNrZXQoaWQpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIGdldCh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vYnVja2V0LyR7aWR9YCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFN0b3JhZ2UgYnVja2V0XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBidWNrZXQgeW91IGFyZSBjcmVhdGluZy5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnB1YmxpYyBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgYnVja2V0LiBQdWJsaWMgYnVja2V0cyBkb24ndCByZXF1aXJlIGFuIGF1dGhvcml6YXRpb24gdG9rZW4gdG8gZG93bmxvYWQgb2JqZWN0cywgYnV0IHN0aWxsIHJlcXVpcmUgYSB2YWxpZCB0b2tlbiBmb3IgYWxsIG90aGVyIG9wZXJhdGlvbnMuIEJ5IGRlZmF1bHQsIGJ1Y2tldHMgYXJlIHByaXZhdGUuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5maWxlU2l6ZUxpbWl0IHNwZWNpZmllcyB0aGUgbWF4IGZpbGUgc2l6ZSBpbiBieXRlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZCB0byB0aGlzIGJ1Y2tldC5cclxuICAgICAqIFRoZSBnbG9iYWwgZmlsZSBzaXplIGxpbWl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGlzIHZhbHVlLlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgd2hpY2ggZG9lc24ndCBzZXQgYSBwZXIgYnVja2V0IGZpbGUgc2l6ZSBsaW1pdC5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmFsbG93ZWRNaW1lVHlwZXMgc3BlY2lmaWVzIHRoZSBhbGxvd2VkIG1pbWUgdHlwZXMgdGhhdCB0aGlzIGJ1Y2tldCBjYW4gYWNjZXB0IGR1cmluZyB1cGxvYWQuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCB3aGljaCBhbGxvd3MgZmlsZXMgd2l0aCBhbGwgbWltZSB0eXBlcyB0byBiZSB1cGxvYWRlZC5cclxuICAgICAqIEVhY2ggbWltZSB0eXBlIHNwZWNpZmllZCBjYW4gYmUgYSB3aWxkY2FyZCwgZS5nLiBpbWFnZS8qLCBvciBhIHNwZWNpZmljIG1pbWUgdHlwZSwgZS5nLiBpbWFnZS9wbmcuXHJcbiAgICAgKiBAcmV0dXJucyBuZXdseSBjcmVhdGVkIGJ1Y2tldCBpZFxyXG4gICAgICovXHJcbiAgICBjcmVhdGVCdWNrZXQoaWQsIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgcHVibGljOiBmYWxzZSxcclxuICAgIH0pIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHBvc3QodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L2J1Y2tldGAsIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZV9saW1pdDogb3B0aW9ucy5maWxlU2l6ZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfbWltZV90eXBlczogb3B0aW9ucy5hbGxvd2VkTWltZVR5cGVzLFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGEgU3RvcmFnZSBidWNrZXRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGJ1Y2tldCB5b3UgYXJlIHVwZGF0aW5nLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucHVibGljIFRoZSB2aXNpYmlsaXR5IG9mIHRoZSBidWNrZXQuIFB1YmxpYyBidWNrZXRzIGRvbid0IHJlcXVpcmUgYW4gYXV0aG9yaXphdGlvbiB0b2tlbiB0byBkb3dubG9hZCBvYmplY3RzLCBidXQgc3RpbGwgcmVxdWlyZSBhIHZhbGlkIHRva2VuIGZvciBhbGwgb3RoZXIgb3BlcmF0aW9ucy5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmZpbGVTaXplTGltaXQgc3BlY2lmaWVzIHRoZSBtYXggZmlsZSBzaXplIGluIGJ5dGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkIHRvIHRoaXMgYnVja2V0LlxyXG4gICAgICogVGhlIGdsb2JhbCBmaWxlIHNpemUgbGltaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCB3aGljaCBkb2Vzbid0IHNldCBhIHBlciBidWNrZXQgZmlsZSBzaXplIGxpbWl0LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYWxsb3dlZE1pbWVUeXBlcyBzcGVjaWZpZXMgdGhlIGFsbG93ZWQgbWltZSB0eXBlcyB0aGF0IHRoaXMgYnVja2V0IGNhbiBhY2NlcHQgZHVyaW5nIHVwbG9hZC5cclxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG51bGwsIHdoaWNoIGFsbG93cyBmaWxlcyB3aXRoIGFsbCBtaW1lIHR5cGVzIHRvIGJlIHVwbG9hZGVkLlxyXG4gICAgICogRWFjaCBtaW1lIHR5cGUgc3BlY2lmaWVkIGNhbiBiZSBhIHdpbGRjYXJkLCBlLmcuIGltYWdlLyosIG9yIGEgc3BlY2lmaWMgbWltZSB0eXBlLCBlLmcuIGltYWdlL3BuZy5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlQnVja2V0KGlkLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCBwdXQodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L2J1Y2tldC8ke2lkfWAsIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZV9saW1pdDogb3B0aW9ucy5maWxlU2l6ZUxpbWl0LFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfbWltZV90eXBlczogb3B0aW9ucy5hbGxvd2VkTWltZVR5cGVzLFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFsbCBvYmplY3RzIGluc2lkZSBhIHNpbmdsZSBidWNrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYnVja2V0IHlvdSB3b3VsZCBsaWtlIHRvIGVtcHR5LlxyXG4gICAgICovXHJcbiAgICBlbXB0eUJ1Y2tldChpZCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcG9zdCh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vYnVja2V0LyR7aWR9L2VtcHR5YCwge30sIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlcyBhbiBleGlzdGluZyBidWNrZXQuIEEgYnVja2V0IGNhbid0IGJlIGRlbGV0ZWQgd2l0aCBleGlzdGluZyBvYmplY3RzIGluc2lkZSBpdC5cclxuICAgICAqIFlvdSBtdXN0IGZpcnN0IGBlbXB0eSgpYCB0aGUgYnVja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGJ1Y2tldCB5b3Ugd291bGQgbGlrZSB0byBkZWxldGUuXHJcbiAgICAgKi9cclxuICAgIGRlbGV0ZUJ1Y2tldChpZCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcmVtb3ZlKHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9idWNrZXQvJHtpZH1gLCB7fSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN0b3JhZ2VCdWNrZXRBcGkuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/packages/StorageBucketApi.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/packages/StorageFileApi.js": /*!**********************************************************************************!*\ !*** ./node_modules/@supabase/storage-js/dist/module/packages/StorageFileApi.js ***! \**********************************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ StorageFileApi; }\n/* harmony export */ });\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/errors.js\");\n/* harmony import */ var _lib_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/fetch */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/fetch.js\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/helpers */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/lib/helpers.js\");\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js\")[\"Buffer\"];\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\nconst DEFAULT_SEARCH_OPTIONS = {\r\n limit: 100,\r\n offset: 0,\r\n sortBy: {\r\n column: 'name',\r\n order: 'asc',\r\n },\r\n};\r\nconst DEFAULT_FILE_OPTIONS = {\r\n cacheControl: '3600',\r\n contentType: 'text/plain;charset=UTF-8',\r\n upsert: false,\r\n};\r\nclass StorageFileApi {\r\n constructor(url, headers = {}, bucketId, fetch) {\r\n this.url = url;\r\n this.headers = headers;\r\n this.bucketId = bucketId;\r\n this.fetch = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_0__.resolveFetch)(fetch);\r\n }\r\n /**\r\n * Uploads a file to an existing bucket or replaces an existing file at the specified path with a new one.\r\n *\r\n * @param method HTTP method.\r\n * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n uploadOrUpdate(method, path, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n let body;\r\n const options = Object.assign(Object.assign({}, DEFAULT_FILE_OPTIONS), fileOptions);\r\n let headers = Object.assign(Object.assign({}, this.headers), (method === 'POST' && { 'x-upsert': String(options.upsert) }));\r\n const metadata = options.metadata;\r\n if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\r\n body = new FormData();\r\n body.append('cacheControl', options.cacheControl);\r\n if (metadata) {\r\n body.append('metadata', this.encodeMetadata(metadata));\r\n }\r\n body.append('', fileBody);\r\n }\r\n else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\r\n body = fileBody;\r\n body.append('cacheControl', options.cacheControl);\r\n if (metadata) {\r\n body.append('metadata', this.encodeMetadata(metadata));\r\n }\r\n }\r\n else {\r\n body = fileBody;\r\n headers['cache-control'] = `max-age=${options.cacheControl}`;\r\n headers['content-type'] = options.contentType;\r\n if (metadata) {\r\n headers['x-metadata'] = this.toBase64(this.encodeMetadata(metadata));\r\n }\r\n }\r\n if (fileOptions === null || fileOptions === void 0 ? void 0 : fileOptions.headers) {\r\n headers = Object.assign(Object.assign({}, headers), fileOptions.headers);\r\n }\r\n const cleanPath = this._removeEmptyFolders(path);\r\n const _path = this._getFinalPath(cleanPath);\r\n const res = yield this.fetch(`${this.url}/object/${_path}`, Object.assign({ method, body: body, headers }, ((options === null || options === void 0 ? void 0 : options.duplex) ? { duplex: options.duplex } : {})));\r\n const data = yield res.json();\r\n if (res.ok) {\r\n return {\r\n data: { path: cleanPath, id: data.Id, fullPath: data.Key },\r\n error: null,\r\n };\r\n }\r\n else {\r\n const error = data;\r\n return { data: null, error };\r\n }\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Uploads a file to an existing bucket.\r\n *\r\n * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n upload(path, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.uploadOrUpdate('POST', path, fileBody, fileOptions);\r\n });\r\n }\r\n /**\r\n * Upload a file with a token generated from `createSignedUploadUrl`.\r\n * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\r\n * @param token The token generated from `createSignedUploadUrl`\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n uploadToSignedUrl(path, token, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const cleanPath = this._removeEmptyFolders(path);\r\n const _path = this._getFinalPath(cleanPath);\r\n const url = new URL(this.url + `/object/upload/sign/${_path}`);\r\n url.searchParams.set('token', token);\r\n try {\r\n let body;\r\n const options = Object.assign({ upsert: DEFAULT_FILE_OPTIONS.upsert }, fileOptions);\r\n const headers = Object.assign(Object.assign({}, this.headers), { 'x-upsert': String(options.upsert) });\r\n if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\r\n body = new FormData();\r\n body.append('cacheControl', options.cacheControl);\r\n body.append('', fileBody);\r\n }\r\n else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\r\n body = fileBody;\r\n body.append('cacheControl', options.cacheControl);\r\n }\r\n else {\r\n body = fileBody;\r\n headers['cache-control'] = `max-age=${options.cacheControl}`;\r\n headers['content-type'] = options.contentType;\r\n }\r\n const res = yield this.fetch(url.toString(), {\r\n method: 'PUT',\r\n body: body,\r\n headers,\r\n });\r\n const data = yield res.json();\r\n if (res.ok) {\r\n return {\r\n data: { path: cleanPath, fullPath: data.Key },\r\n error: null,\r\n };\r\n }\r\n else {\r\n const error = data;\r\n return { data: null, error };\r\n }\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates a signed upload URL.\r\n * Signed upload URLs can be used to upload files to the bucket without further authentication.\r\n * They are valid for 2 hours.\r\n * @param path The file path, including the current file name. For example `folder/image.png`.\r\n * @param options.upsert If set to true, allows the file to be overwritten if it already exists.\r\n */\r\n createSignedUploadUrl(path, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n let _path = this._getFinalPath(path);\r\n const headers = Object.assign({}, this.headers);\r\n if (options === null || options === void 0 ? void 0 : options.upsert) {\r\n headers['x-upsert'] = 'true';\r\n }\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/object/upload/sign/${_path}`, {}, { headers });\r\n const url = new URL(this.url + data.url);\r\n const token = url.searchParams.get('token');\r\n if (!token) {\r\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_1__.StorageError('No token returned by API');\r\n }\r\n return { data: { signedUrl: url.toString(), path, token }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Replaces an existing file at the specified path with a new one.\r\n *\r\n * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to update.\r\n * @param fileBody The body of the file to be stored in the bucket.\r\n */\r\n update(path, fileBody, fileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.uploadOrUpdate('PUT', path, fileBody, fileOptions);\r\n });\r\n }\r\n /**\r\n * Moves an existing file to a new path in the same bucket.\r\n *\r\n * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\r\n * @param toPath The new file path, including the new file name. For example `folder/image-new.png`.\r\n * @param options The destination options.\r\n */\r\n move(fromPath, toPath, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/object/move`, {\r\n bucketId: this.bucketId,\r\n sourceKey: fromPath,\r\n destinationKey: toPath,\r\n destinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket,\r\n }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Copies an existing file to a new path in the same bucket.\r\n *\r\n * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\r\n * @param toPath The new file path, including the new file name. For example `folder/image-copy.png`.\r\n * @param options The destination options.\r\n */\r\n copy(fromPath, toPath, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/object/copy`, {\r\n bucketId: this.bucketId,\r\n sourceKey: fromPath,\r\n destinationKey: toPath,\r\n destinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket,\r\n }, { headers: this.headers });\r\n return { data: { path: data.Key }, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates a signed URL. Use a signed URL to share a file for a fixed amount of time.\r\n *\r\n * @param path The file path, including the current file name. For example `folder/image.png`.\r\n * @param expiresIn The number of seconds until the signed URL expires. For example, `60` for a URL which is valid for one minute.\r\n * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\r\n * @param options.transform Transform the asset before serving it to the client.\r\n */\r\n createSignedUrl(path, expiresIn, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n let _path = this._getFinalPath(path);\r\n let data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/object/sign/${_path}`, Object.assign({ expiresIn }, ((options === null || options === void 0 ? void 0 : options.transform) ? { transform: options.transform } : {})), { headers: this.headers });\r\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\r\n ? `&download=${options.download === true ? '' : options.download}`\r\n : '';\r\n const signedUrl = encodeURI(`${this.url}${data.signedURL}${downloadQueryParam}`);\r\n data = { signedUrl };\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Creates multiple signed URLs. Use a signed URL to share a file for a fixed amount of time.\r\n *\r\n * @param paths The file paths to be downloaded, including the current file names. For example `['folder/image.png', 'folder2/image2.png']`.\r\n * @param expiresIn The number of seconds until the signed URLs expire. For example, `60` for URLs which are valid for one minute.\r\n * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\r\n */\r\n createSignedUrls(paths, expiresIn, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/object/sign/${this.bucketId}`, { expiresIn, paths }, { headers: this.headers });\r\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\r\n ? `&download=${options.download === true ? '' : options.download}`\r\n : '';\r\n return {\r\n data: data.map((datum) => (Object.assign(Object.assign({}, datum), { signedUrl: datum.signedURL\r\n ? encodeURI(`${this.url}${datum.signedURL}${downloadQueryParam}`)\r\n : null }))),\r\n error: null,\r\n };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead.\r\n *\r\n * @param path The full path and file name of the file to be downloaded. For example `folder/image.png`.\r\n * @param options.transform Transform the asset before serving it to the client.\r\n */\r\n download(path, options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== 'undefined';\r\n const renderPath = wantsTransformation ? 'render/image/authenticated' : 'object';\r\n const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\r\n const queryString = transformationQuery ? `?${transformationQuery}` : '';\r\n try {\r\n const _path = this._getFinalPath(path);\r\n const res = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.get)(this.fetch, `${this.url}/${renderPath}/${_path}${queryString}`, {\r\n headers: this.headers,\r\n noResolveJson: true,\r\n });\r\n const data = yield res.blob();\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Retrieves the details of an existing file.\r\n * @param path\r\n */\r\n info(path) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const _path = this._getFinalPath(path);\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.get)(this.fetch, `${this.url}/object/info/${_path}`, {\r\n headers: this.headers,\r\n });\r\n return { data: (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_0__.recursiveToCamel)(data), error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Checks the existence of a file.\r\n * @param path\r\n */\r\n exists(path) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const _path = this._getFinalPath(path);\r\n try {\r\n yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.head)(this.fetch, `${this.url}/object/${_path}`, {\r\n headers: this.headers,\r\n });\r\n return { data: true, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error) && error instanceof _lib_errors__WEBPACK_IMPORTED_MODULE_1__.StorageUnknownError) {\r\n const originalError = error.originalError;\r\n if ([400, 404].includes(originalError === null || originalError === void 0 ? void 0 : originalError.status)) {\r\n return { data: false, error };\r\n }\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * A simple convenience function to get the URL for an asset in a public bucket. If you do not want to use this function, you can construct the public URL by concatenating the bucket URL with the path to the asset.\r\n * This function does not verify if the bucket is public. If a public URL is created for a bucket which is not public, you will not be able to download the asset.\r\n *\r\n * @param path The path and name of the file to generate the public URL for. For example `folder/image.png`.\r\n * @param options.download Triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\r\n * @param options.transform Transform the asset before serving it to the client.\r\n */\r\n getPublicUrl(path, options) {\r\n const _path = this._getFinalPath(path);\r\n const _queryString = [];\r\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\r\n ? `download=${options.download === true ? '' : options.download}`\r\n : '';\r\n if (downloadQueryParam !== '') {\r\n _queryString.push(downloadQueryParam);\r\n }\r\n const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== 'undefined';\r\n const renderPath = wantsTransformation ? 'render/image' : 'object';\r\n const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\r\n if (transformationQuery !== '') {\r\n _queryString.push(transformationQuery);\r\n }\r\n let queryString = _queryString.join('&');\r\n if (queryString !== '') {\r\n queryString = `?${queryString}`;\r\n }\r\n return {\r\n data: { publicUrl: encodeURI(`${this.url}/${renderPath}/public/${_path}${queryString}`) },\r\n };\r\n }\r\n /**\r\n * Deletes files within the same bucket\r\n *\r\n * @param paths An array of files to delete, including the path and file name. For example [`'folder/image.png'`].\r\n */\r\n remove(paths) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.remove)(this.fetch, `${this.url}/object/${this.bucketId}`, { prefixes: paths }, { headers: this.headers });\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n /**\r\n * Get file metadata\r\n * @param id the file id to retrieve metadata\r\n */\r\n // async getMetadata(\r\n // id: string\r\n // ): Promise<\r\n // | {\r\n // data: Metadata\r\n // error: null\r\n // }\r\n // | {\r\n // data: null\r\n // error: StorageError\r\n // }\r\n // > {\r\n // try {\r\n // const data = await get(this.fetch, `${this.url}/metadata/${id}`, { headers: this.headers })\r\n // return { data, error: null }\r\n // } catch (error) {\r\n // if (isStorageError(error)) {\r\n // return { data: null, error }\r\n // }\r\n // throw error\r\n // }\r\n // }\r\n /**\r\n * Update file metadata\r\n * @param id the file id to update metadata\r\n * @param meta the new file metadata\r\n */\r\n // async updateMetadata(\r\n // id: string,\r\n // meta: Metadata\r\n // ): Promise<\r\n // | {\r\n // data: Metadata\r\n // error: null\r\n // }\r\n // | {\r\n // data: null\r\n // error: StorageError\r\n // }\r\n // > {\r\n // try {\r\n // const data = await post(\r\n // this.fetch,\r\n // `${this.url}/metadata/${id}`,\r\n // { ...meta },\r\n // { headers: this.headers }\r\n // )\r\n // return { data, error: null }\r\n // } catch (error) {\r\n // if (isStorageError(error)) {\r\n // return { data: null, error }\r\n // }\r\n // throw error\r\n // }\r\n // }\r\n /**\r\n * Lists all the files within a bucket.\r\n * @param path The folder path.\r\n */\r\n list(path, options, parameters) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const body = Object.assign(Object.assign(Object.assign({}, DEFAULT_SEARCH_OPTIONS), options), { prefix: path || '' });\r\n const data = yield (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_2__.post)(this.fetch, `${this.url}/object/list/${this.bucketId}`, body, { headers: this.headers }, parameters);\r\n return { data, error: null };\r\n }\r\n catch (error) {\r\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_1__.isStorageError)(error)) {\r\n return { data: null, error };\r\n }\r\n throw error;\r\n }\r\n });\r\n }\r\n encodeMetadata(metadata) {\r\n return JSON.stringify(metadata);\r\n }\r\n toBase64(data) {\r\n if (typeof Buffer !== 'undefined') {\r\n return Buffer.from(data).toString('base64');\r\n }\r\n return btoa(data);\r\n }\r\n _getFinalPath(path) {\r\n return `${this.bucketId}/${path}`;\r\n }\r\n _removeEmptyFolders(path) {\r\n return path.replace(/^\\/|\\/$/g, '').replace(/\\/+/g, '/');\r\n }\r\n transformOptsToQueryString(transform) {\r\n const params = [];\r\n if (transform.width) {\r\n params.push(`width=${transform.width}`);\r\n }\r\n if (transform.height) {\r\n params.push(`height=${transform.height}`);\r\n }\r\n if (transform.resize) {\r\n params.push(`resize=${transform.resize}`);\r\n }\r\n if (transform.format) {\r\n params.push(`format=${transform.format}`);\r\n }\r\n if (transform.quality) {\r\n params.push(`quality=${transform.quality}`);\r\n }\r\n return params.join('&');\r\n }\r\n}\r\n//# sourceMappingURL=StorageFileApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L21vZHVsZS9wYWNrYWdlcy9TdG9yYWdlRmlsZUFwaS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNrRjtBQUMzQjtBQUNTO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNlO0FBQ2YsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwREFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQsNERBQTRELHlDQUF5QyxvQ0FBb0M7QUFDekk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELHFCQUFxQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFNBQVMsVUFBVSxNQUFNLG1CQUFtQiw2QkFBNkIsMEVBQTBFLHlCQUF5QixJQUFJO0FBQ2hPO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxrREFBa0Q7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMkRBQWM7QUFDbEMsNkJBQTZCO0FBQzdCO0FBQ0E7QUFD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O0FBQ0E7QUFDQSxtQkFBbUIsTUFBTTtBQUN6QixtQkFBbUIsTUFBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixjQUFjLEdBQUcsS0FBSztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxnQkFBZ0I7QUFDakQ7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBLG1DQUFtQyxrQkFBa0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9tb2R1bGUvcGFja2FnZXMvU3RvcmFnZUZpbGVBcGkuanM/YTQ1NyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmltcG9ydCB7IGlzU3RvcmFnZUVycm9yLCBTdG9yYWdlRXJyb3IsIFN0b3JhZ2VVbmtub3duRXJyb3IgfSBmcm9tICcuLi9saWIvZXJyb3JzJztcclxuaW1wb3J0IHsgZ2V0LCBoZWFkLCBwb3N0LCByZW1vdmUgfSBmcm9tICcuLi9saWIvZmV0Y2gnO1xyXG5pbXBvcnQgeyByZWN1cnNpdmVUb0NhbWVsLCByZXNvbHZlRmV0Y2ggfSBmcm9tICcuLi9saWIvaGVscGVycyc7XHJcbmNvbnN0IERFRkFVTFRfU0VBUkNIX09QVElPTlMgPSB7XHJcbiAgICBsaW1pdDogMTAwLFxyXG4gICAgb2Zmc2V0OiAwLFxyXG4gICAgc29ydEJ5OiB7XHJcbiAgICAgICAgY29sdW1uOiAnbmFtZScsXHJcbiAgICAgICAgb3JkZXI6ICdhc2MnLFxyXG4gICAgfSxcclxufTtcclxuY29uc3QgREVGQVVMVF9GSUxFX09QVElPTlMgPSB7XHJcbiAgICBjYWNoZUNvbnRyb2w6ICczNjAwJyxcclxuICAgIGNvbnRlbnRUeXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JyxcclxuICAgIHVwc2VydDogZmFsc2UsXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3JhZ2VGaWxlQXBpIHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCwgaGVhZGVycyA9IHt9LCBidWNrZXRJZCwgZmV0Y2gpIHtcclxuICAgICAgICB0aGlzLnVybCA9IHVybDtcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICAgIHRoaXMuYnVja2V0SWQgPSBidWNrZXRJZDtcclxuICAgICAgICB0aGlzLmZldGNoID0gcmVzb2x2ZUZldGNoKGZldGNoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXBsb2FkcyBhIGZpbGUgdG8gYW4gZXhpc3RpbmcgYnVja2V0IG9yIHJlcGxhY2VzIGFuIGV4aXN0aW5nIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoIHdpdGggYSBuZXcgb25lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBtZXRob2QgSFRUUCBtZXRob2QuXHJcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgcmVsYXRpdmUgZmlsZSBwYXRoLiBTaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBgZm9sZGVyL3N1YmZvbGRlci9maWxlbmFtZS5wbmdgLiBUaGUgYnVja2V0IG11c3QgYWxyZWFkeSBleGlzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGxvYWQuXHJcbiAgICAgKiBAcGFyYW0gZmlsZUJvZHkgVGhlIGJvZHkgb2YgdGhlIGZpbGUgdG8gYmUgc3RvcmVkIGluIHRoZSBidWNrZXQuXHJcbiAgICAgKi9cclxuICAgIHVwbG9hZE9yVXBkYXRlKG1ldGhvZCwgcGF0aCwgZmlsZUJvZHksIGZpbGVPcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9GSUxFX09QVElPTlMpLCBmaWxlT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5oZWFkZXJzKSwgKG1ldGhvZCA9PT0gJ1BPU1QnICYmIHsgJ3gtdXBzZXJ0JzogU3RyaW5nKG9wdGlvbnMudXBzZXJ0KSB9KSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG9wdGlvbnMubWV0YWRhdGE7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZCgnY2FjaGVDb250cm9sJywgb3B0aW9ucy5jYWNoZUNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZCgnbWV0YWRhdGEnLCB0aGlzLmVuY29kZU1ldGFkYXRhKG1ldGFkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKCcnLCBmaWxlQm9keSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ID0gZmlsZUJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoJ2NhY2hlQ29udHJvbCcsIG9wdGlvbnMuY2FjaGVDb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoJ21ldGFkYXRhJywgdGhpcy5lbmNvZGVNZXRhZGF0YShtZXRhZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmaWxlQm9keTtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWydjYWNoZS1jb250cm9sJ10gPSBgbWF4LWFnZT0ke29wdGlvbnMuY2FjaGVDb250cm9sfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBvcHRpb25zLmNvbnRlbnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyd4LW1ldGFkYXRhJ10gPSB0aGlzLnRvQmFzZTY0KHRoaXMuZW5jb2RlTWV0YWRhdGEobWV0YWRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZU9wdGlvbnMgPT09IG51bGwgfHwgZmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpbGVPcHRpb25zLmhlYWRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBoZWFkZXJzKSwgZmlsZU9wdGlvbnMuaGVhZGVycyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhblBhdGggPSB0aGlzLl9yZW1vdmVFbXB0eUZvbGRlcnMocGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfcGF0aCA9IHRoaXMuX2dldEZpbmFsUGF0aChjbGVhblBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5mZXRjaChgJHt0aGlzLnVybH0vb2JqZWN0LyR7X3BhdGh9YCwgT2JqZWN0LmFzc2lnbih7IG1ldGhvZCwgYm9keTogYm9keSwgaGVhZGVycyB9LCAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kdXBsZXgpID8geyBkdXBsZXg6IG9wdGlvbnMuZHVwbGV4IH0gOiB7fSkpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXMuanNvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgcGF0aDogY2xlYW5QYXRoLCBpZDogZGF0YS5JZCwgZnVsbFBhdGg6IGRhdGEuS2V5IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXBsb2FkcyBhIGZpbGUgdG8gYW4gZXhpc3RpbmcgYnVja2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBmaWxlIHBhdGgsIGluY2x1ZGluZyB0aGUgZmlsZSBuYW1lLiBTaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBgZm9sZGVyL3N1YmZvbGRlci9maWxlbmFtZS5wbmdgLiBUaGUgYnVja2V0IG11c3QgYWxyZWFkeSBleGlzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGxvYWQuXHJcbiAgICAgKiBAcGFyYW0gZmlsZUJvZHkgVGhlIGJvZHkgb2YgdGhlIGZpbGUgdG8gYmUgc3RvcmVkIGluIHRoZSBidWNrZXQuXHJcbiAgICAgKi9cclxuICAgIHVwbG9hZChwYXRoLCBmaWxlQm9keSwgZmlsZU9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRPclVwZGF0ZSgnUE9TVCcsIHBhdGgsIGZpbGVCb2R5LCBmaWxlT3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwbG9hZCBhIGZpbGUgd2l0aCBhIHRva2VuIGdlbmVyYXRlZCBmcm9tIGBjcmVhdGVTaWduZWRVcGxvYWRVcmxgLlxyXG4gICAgICogQHBhcmFtIHBhdGggVGhlIGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBmaWxlIG5hbWUuIFNob3VsZCBiZSBvZiB0aGUgZm9ybWF0IGBmb2xkZXIvc3ViZm9sZGVyL2ZpbGVuYW1lLnBuZ2AuIFRoZSBidWNrZXQgbXVzdCBhbHJlYWR5IGV4aXN0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVwbG9hZC5cclxuICAgICAqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gZ2VuZXJhdGVkIGZyb20gYGNyZWF0ZVNpZ25lZFVwbG9hZFVybGBcclxuICAgICAqIEBwYXJhbSBmaWxlQm9keSBUaGUgYm9keSBvZiB0aGUgZmlsZSB0byBiZSBzdG9yZWQgaW4gdGhlIGJ1Y2tldC5cclxuICAgICAqL1xyXG4gICAgdXBsb2FkVG9TaWduZWRVcmwocGF0aCwgdG9rZW4sIGZpbGVCb2R5LCBmaWxlT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuUGF0aCA9IHRoaXMuX3JlbW92ZUVtcHR5Rm9sZGVycyhwYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgX3BhdGggPSB0aGlzLl9nZXRGaW5hbFBhdGgoY2xlYW5QYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLnVybCArIGAvb2JqZWN0L3VwbG9hZC9zaWduLyR7X3BhdGh9YCk7XHJcbiAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd0b2tlbicsIHRva2VuKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyB1cHNlcnQ6IERFRkFVTFRfRklMRV9PUFRJT05TLnVwc2VydCB9LCBmaWxlT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpLCB7ICd4LXVwc2VydCc6IFN0cmluZyhvcHRpb25zLnVwc2VydCkgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZCgnY2FjaGVDb250cm9sJywgb3B0aW9ucy5jYWNoZUNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKCcnLCBmaWxlQm9keSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ID0gZmlsZUJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoJ2NhY2hlQ29udHJvbCcsIG9wdGlvbnMuY2FjaGVDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmaWxlQm9keTtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWydjYWNoZS1jb250cm9sJ10gPSBgbWF4LWFnZT0ke29wdGlvbnMuY2FjaGVDb250cm9sfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBvcHRpb25zLmNvbnRlbnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5mZXRjaCh1cmwudG9TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcmVzLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMub2spIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHBhdGg6IGNsZWFuUGF0aCwgZnVsbFBhdGg6IGRhdGEuS2V5IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIHNpZ25lZCB1cGxvYWQgVVJMLlxyXG4gICAgICogU2lnbmVkIHVwbG9hZCBVUkxzIGNhbiBiZSB1c2VkIHRvIHVwbG9hZCBmaWxlcyB0byB0aGUgYnVja2V0IHdpdGhvdXQgZnVydGhlciBhdXRoZW50aWNhdGlvbi5cclxuICAgICAqIFRoZXkgYXJlIHZhbGlkIGZvciAyIGhvdXJzLlxyXG4gICAgICogQHBhcmFtIHBhdGggVGhlIGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS5wbmdgLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMudXBzZXJ0IElmIHNldCB0byB0cnVlLCBhbGxvd3MgdGhlIGZpbGUgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNpZ25lZFVwbG9hZFVybChwYXRoLCBvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCBfcGF0aCA9IHRoaXMuX2dldEZpbmFsUGF0aChwYXRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy51cHNlcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyd4LXVwc2VydCddID0gJ3RydWUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHBvc3QodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC91cGxvYWQvc2lnbi8ke19wYXRofWAsIHt9LCB7IGhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMudXJsICsgZGF0YS51cmwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgndG9rZW4nKTtcclxuICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKCdObyB0b2tlbiByZXR1cm5lZCBieSBBUEknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2lnbmVkVXJsOiB1cmwudG9TdHJpbmcoKSwgcGF0aCwgdG9rZW4gfSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgYW4gZXhpc3RpbmcgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIHBhdGggd2l0aCBhIG5ldyBvbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhdGggVGhlIHJlbGF0aXZlIGZpbGUgcGF0aC4gU2hvdWxkIGJlIG9mIHRoZSBmb3JtYXQgYGZvbGRlci9zdWJmb2xkZXIvZmlsZW5hbWUucG5nYC4gVGhlIGJ1Y2tldCBtdXN0IGFscmVhZHkgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIGZpbGVCb2R5IFRoZSBib2R5IG9mIHRoZSBmaWxlIHRvIGJlIHN0b3JlZCBpbiB0aGUgYnVja2V0LlxyXG4gICAgICovXHJcbiAgICB1cGRhdGUocGF0aCwgZmlsZUJvZHksIGZpbGVPcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkT3JVcGRhdGUoJ1BVVCcsIHBhdGgsIGZpbGVCb2R5LCBmaWxlT3B0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGFuIGV4aXN0aW5nIGZpbGUgdG8gYSBuZXcgcGF0aCBpbiB0aGUgc2FtZSBidWNrZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZyb21QYXRoIFRoZSBvcmlnaW5hbCBmaWxlIHBhdGgsIGluY2x1ZGluZyB0aGUgY3VycmVudCBmaWxlIG5hbWUuIEZvciBleGFtcGxlIGBmb2xkZXIvaW1hZ2UucG5nYC5cclxuICAgICAqIEBwYXJhbSB0b1BhdGggVGhlIG5ldyBmaWxlIHBhdGgsIGluY2x1ZGluZyB0aGUgbmV3IGZpbGUgbmFtZS4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS1uZXcucG5nYC5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBkZXN0aW5hdGlvbiBvcHRpb25zLlxyXG4gICAgICovXHJcbiAgICBtb3ZlKGZyb21QYXRoLCB0b1BhdGgsIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHBvc3QodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9tb3ZlYCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldElkOiB0aGlzLmJ1Y2tldElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUtleTogZnJvbVBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25LZXk6IHRvUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRlc3RpbmF0aW9uQnVja2V0LFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgYW4gZXhpc3RpbmcgZmlsZSB0byBhIG5ldyBwYXRoIGluIHRoZSBzYW1lIGJ1Y2tldC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZnJvbVBhdGggVGhlIG9yaWdpbmFsIGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS5wbmdgLlxyXG4gICAgICogQHBhcmFtIHRvUGF0aCBUaGUgbmV3IGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBuZXcgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLWNvcHkucG5nYC5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBkZXN0aW5hdGlvbiBvcHRpb25zLlxyXG4gICAgICovXHJcbiAgICBjb3B5KGZyb21QYXRoLCB0b1BhdGgsIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHBvc3QodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9jb3B5YCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldElkOiB0aGlzLmJ1Y2tldElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUtleTogZnJvbVBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25LZXk6IHRvUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRlc3RpbmF0aW9uQnVja2V0LFxyXG4gICAgICAgICAgICAgICAgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHBhdGg6IGRhdGEuS2V5IH0sIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBzaWduZWQgVVJMLiBVc2UgYSBzaWduZWQgVVJMIHRvIHNoYXJlIGEgZmlsZSBmb3IgYSBmaXhlZCBhbW91bnQgb2YgdGltZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXHJcbiAgICAgKiBAcGFyYW0gZXhwaXJlc0luIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgc2lnbmVkIFVSTCBleHBpcmVzLiBGb3IgZXhhbXBsZSwgYDYwYCBmb3IgYSBVUkwgd2hpY2ggaXMgdmFsaWQgZm9yIG9uZSBtaW51dGUuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5kb3dubG9hZCB0cmlnZ2VycyB0aGUgZmlsZSBhcyBhIGRvd25sb2FkIGlmIHNldCB0byB0cnVlLiBTZXQgdGhpcyBwYXJhbWV0ZXIgYXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaWYgeW91IHdhbnQgdG8gdHJpZ2dlciB0aGUgZG93bmxvYWQgd2l0aCBhIGRpZmZlcmVudCBmaWxlbmFtZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLnRyYW5zZm9ybSBUcmFuc2Zvcm0gdGhlIGFzc2V0IGJlZm9yZSBzZXJ2aW5nIGl0IHRvIHRoZSBjbGllbnQuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNpZ25lZFVybChwYXRoLCBleHBpcmVzSW4sIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB5aWVsZCBwb3N0KHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9vYmplY3Qvc2lnbi8ke19wYXRofWAsIE9iamVjdC5hc3NpZ24oeyBleHBpcmVzSW4gfSwgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudHJhbnNmb3JtKSA/IHsgdHJhbnNmb3JtOiBvcHRpb25zLnRyYW5zZm9ybSB9IDoge30pKSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFF1ZXJ5UGFyYW0gPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRvd25sb2FkKVxyXG4gICAgICAgICAgICAgICAgICAgID8gYCZkb3dubG9hZD0ke29wdGlvbnMuZG93bmxvYWQgPT09IHRydWUgPyAnJyA6IG9wdGlvbnMuZG93bmxvYWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduZWRVcmwgPSBlbmNvZGVVUkkoYCR7dGhpcy51cmx9JHtkYXRhLnNpZ25lZFVSTH0ke2Rvd25sb2FkUXVlcnlQYXJhbX1gKTtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSB7IHNpZ25lZFVybCB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBtdWx0aXBsZSBzaWduZWQgVVJMcy4gVXNlIGEgc2lnbmVkIFVSTCB0byBzaGFyZSBhIGZpbGUgZm9yIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhdGhzIFRoZSBmaWxlIHBhdGhzIHRvIGJlIGRvd25sb2FkZWQsIGluY2x1ZGluZyB0aGUgY3VycmVudCBmaWxlIG5hbWVzLiBGb3IgZXhhbXBsZSBgWydmb2xkZXIvaW1hZ2UucG5nJywgJ2ZvbGRlcjIvaW1hZ2UyLnBuZyddYC5cclxuICAgICAqIEBwYXJhbSBleHBpcmVzSW4gVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBzaWduZWQgVVJMcyBleHBpcmUuIEZvciBleGFtcGxlLCBgNjBgIGZvciBVUkxzIHdoaWNoIGFyZSB2YWxpZCBmb3Igb25lIG1pbnV0ZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmRvd25sb2FkIHRyaWdnZXJzIHRoZSBmaWxlIGFzIGEgZG93bmxvYWQgaWYgc2V0IHRvIHRydWUuIFNldCB0aGlzIHBhcmFtZXRlciBhcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpZiB5b3Ugd2FudCB0byB0cmlnZ2VyIHRoZSBkb3dubG9hZCB3aXRoIGEgZGlmZmVyZW50IGZpbGVuYW1lLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVTaWduZWRVcmxzKHBhdGhzLCBleHBpcmVzSW4sIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHBvc3QodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9zaWduLyR7dGhpcy5idWNrZXRJZH1gLCB7IGV4cGlyZXNJbiwgcGF0aHMgfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFF1ZXJ5UGFyYW0gPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRvd25sb2FkKVxyXG4gICAgICAgICAgICAgICAgICAgID8gYCZkb3dubG9hZD0ke29wdGlvbnMuZG93bmxvYWQgPT09IHRydWUgPyAnJyA6IG9wdGlvbnMuZG93bmxvYWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEubWFwKChkYXR1bSkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGF0dW0pLCB7IHNpZ25lZFVybDogZGF0dW0uc2lnbmVkVVJMXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVuY29kZVVSSShgJHt0aGlzLnVybH0ke2RhdHVtLnNpZ25lZFVSTH0ke2Rvd25sb2FkUXVlcnlQYXJhbX1gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsIH0pKSksXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEb3dubG9hZHMgYSBmaWxlIGZyb20gYSBwcml2YXRlIGJ1Y2tldC4gRm9yIHB1YmxpYyBidWNrZXRzLCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVVJMIHJldHVybmVkIGZyb20gYGdldFB1YmxpY1VybGAgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgZnVsbCBwYXRoIGFuZCBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZC4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS5wbmdgLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMudHJhbnNmb3JtIFRyYW5zZm9ybSB0aGUgYXNzZXQgYmVmb3JlIHNlcnZpbmcgaXQgdG8gdGhlIGNsaWVudC5cclxuICAgICAqL1xyXG4gICAgZG93bmxvYWQocGF0aCwgb3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhbnRzVHJhbnNmb3JtYXRpb24gPSB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50cmFuc2Zvcm0pICE9PSAndW5kZWZpbmVkJztcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyUGF0aCA9IHdhbnRzVHJhbnNmb3JtYXRpb24gPyAncmVuZGVyL2ltYWdlL2F1dGhlbnRpY2F0ZWQnIDogJ29iamVjdCc7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWF0aW9uUXVlcnkgPSB0aGlzLnRyYW5zZm9ybU9wdHNUb1F1ZXJ5U3RyaW5nKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudHJhbnNmb3JtKSB8fCB7fSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdHJhbnNmb3JtYXRpb25RdWVyeSA/IGA/JHt0cmFuc2Zvcm1hdGlvblF1ZXJ5fWAgOiAnJztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgZ2V0KHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS8ke3JlbmRlclBhdGh9LyR7X3BhdGh9JHtxdWVyeVN0cmluZ31gLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vUmVzb2x2ZUpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXMuYmxvYigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBkZXRhaWxzIG9mIGFuIGV4aXN0aW5nIGZpbGUuXHJcbiAgICAgKiBAcGFyYW0gcGF0aFxyXG4gICAgICovXHJcbiAgICBpbmZvKHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBjb25zdCBfcGF0aCA9IHRoaXMuX2dldEZpbmFsUGF0aChwYXRoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCBnZXQodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC9pbmZvLyR7X3BhdGh9YCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogcmVjdXJzaXZlVG9DYW1lbChkYXRhKSwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWxlLlxyXG4gICAgICogQHBhcmFtIHBhdGhcclxuICAgICAqL1xyXG4gICAgZXhpc3RzKHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBjb25zdCBfcGF0aCA9IHRoaXMuX2dldEZpbmFsUGF0aChwYXRoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHlpZWxkIGhlYWQodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9L29iamVjdC8ke19wYXRofWAsIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHRydWUsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpICYmIGVycm9yIGluc3RhbmNlb2YgU3RvcmFnZVVua25vd25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3IgPSBlcnJvci5vcmlnaW5hbEVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChbNDAwLCA0MDRdLmluY2x1ZGVzKG9yaWdpbmFsRXJyb3IgPT09IG51bGwgfHwgb3JpZ2luYWxFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3JpZ2luYWxFcnJvci5zdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IGZhbHNlLCBlcnJvciB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEEgc2ltcGxlIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCB0aGUgVVJMIGZvciBhbiBhc3NldCBpbiBhIHB1YmxpYyBidWNrZXQuIElmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiwgeW91IGNhbiBjb25zdHJ1Y3QgdGhlIHB1YmxpYyBVUkwgYnkgY29uY2F0ZW5hdGluZyB0aGUgYnVja2V0IFVSTCB3aXRoIHRoZSBwYXRoIHRvIHRoZSBhc3NldC5cclxuICAgICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdmVyaWZ5IGlmIHRoZSBidWNrZXQgaXMgcHVibGljLiBJZiBhIHB1YmxpYyBVUkwgaXMgY3JlYXRlZCBmb3IgYSBidWNrZXQgd2hpY2ggaXMgbm90IHB1YmxpYywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gZG93bmxvYWQgdGhlIGFzc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBmaWxlIHRvIGdlbmVyYXRlIHRoZSBwdWJsaWMgVVJMIGZvci4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS5wbmdgLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZG93bmxvYWQgVHJpZ2dlcnMgdGhlIGZpbGUgYXMgYSBkb3dubG9hZCBpZiBzZXQgdG8gdHJ1ZS4gU2V0IHRoaXMgcGFyYW1ldGVyIGFzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGlmIHlvdSB3YW50IHRvIHRyaWdnZXIgdGhlIGRvd25sb2FkIHdpdGggYSBkaWZmZXJlbnQgZmlsZW5hbWUuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy50cmFuc2Zvcm0gVHJhbnNmb3JtIHRoZSBhc3NldCBiZWZvcmUgc2VydmluZyBpdCB0byB0aGUgY2xpZW50LlxyXG4gICAgICovXHJcbiAgICBnZXRQdWJsaWNVcmwocGF0aCwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xyXG4gICAgICAgIGNvbnN0IF9xdWVyeVN0cmluZyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGRvd25sb2FkUXVlcnlQYXJhbSA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZG93bmxvYWQpXHJcbiAgICAgICAgICAgID8gYGRvd25sb2FkPSR7b3B0aW9ucy5kb3dubG9hZCA9PT0gdHJ1ZSA/ICcnIDogb3B0aW9ucy5kb3dubG9hZH1gXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgaWYgKGRvd25sb2FkUXVlcnlQYXJhbSAhPT0gJycpIHtcclxuICAgICAgICAgICAgX3F1ZXJ5U3RyaW5nLnB1c2goZG93bmxvYWRRdWVyeVBhcmFtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd2FudHNUcmFuc2Zvcm1hdGlvbiA9IHR5cGVvZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRyYW5zZm9ybSkgIT09ICd1bmRlZmluZWQnO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlclBhdGggPSB3YW50c1RyYW5zZm9ybWF0aW9uID8gJ3JlbmRlci9pbWFnZScgOiAnb2JqZWN0JztcclxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1hdGlvblF1ZXJ5ID0gdGhpcy50cmFuc2Zvcm1PcHRzVG9RdWVyeVN0cmluZygob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRyYW5zZm9ybSkgfHwge30pO1xyXG4gICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvblF1ZXJ5ICE9PSAnJykge1xyXG4gICAgICAgICAgICBfcXVlcnlTdHJpbmcucHVzaCh0cmFuc2Zvcm1hdGlvblF1ZXJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gX3F1ZXJ5U3RyaW5nLmpvaW4oJyYnKTtcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gYD8ke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IHsgcHVibGljVXJsOiBlbmNvZGVVUkkoYCR7dGhpcy51cmx9LyR7cmVuZGVyUGF0aH0vcHVibGljLyR7X3BhdGh9JHtxdWVyeVN0cmluZ31gKSB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIERlbGV0ZXMgZmlsZXMgd2l0aGluIHRoZSBzYW1lIGJ1Y2tldFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwYXRocyBBbiBhcnJheSBvZiBmaWxlcyB0byBkZWxldGUsIGluY2x1ZGluZyB0aGUgcGF0aCBhbmQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBbYCdmb2xkZXIvaW1hZ2UucG5nJ2BdLlxyXG4gICAgICovXHJcbiAgICByZW1vdmUocGF0aHMpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJlbW92ZSh0aGlzLmZldGNoLCBgJHt0aGlzLnVybH0vb2JqZWN0LyR7dGhpcy5idWNrZXRJZH1gLCB7IHByZWZpeGVzOiBwYXRocyB9LCB7IGhlYWRlcnM6IHRoaXMuaGVhZGVycyB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaWxlIG1ldGFkYXRhXHJcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGZpbGUgaWQgdG8gcmV0cmlldmUgbWV0YWRhdGFcclxuICAgICAqL1xyXG4gICAgLy8gYXN5bmMgZ2V0TWV0YWRhdGEoXHJcbiAgICAvLyAgIGlkOiBzdHJpbmdcclxuICAgIC8vICk6IFByb21pc2U8XHJcbiAgICAvLyAgIHwge1xyXG4gICAgLy8gICAgICAgZGF0YTogTWV0YWRhdGFcclxuICAgIC8vICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB8IHtcclxuICAgIC8vICAgICAgIGRhdGE6IG51bGxcclxuICAgIC8vICAgICAgIGVycm9yOiBTdG9yYWdlRXJyb3JcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyA+IHtcclxuICAgIC8vICAgdHJ5IHtcclxuICAgIC8vICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0KHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9tZXRhZGF0YS8ke2lkfWAsIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pXHJcbiAgICAvLyAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfVxyXG4gICAgLy8gICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8gICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgIC8vICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhyb3cgZXJyb3JcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgZmlsZSBtZXRhZGF0YVxyXG4gICAgICogQHBhcmFtIGlkIHRoZSBmaWxlIGlkIHRvIHVwZGF0ZSBtZXRhZGF0YVxyXG4gICAgICogQHBhcmFtIG1ldGEgdGhlIG5ldyBmaWxlIG1ldGFkYXRhXHJcbiAgICAgKi9cclxuICAgIC8vIGFzeW5jIHVwZGF0ZU1ldGFkYXRhKFxyXG4gICAgLy8gICBpZDogc3RyaW5nLFxyXG4gICAgLy8gICBtZXRhOiBNZXRhZGF0YVxyXG4gICAgLy8gKTogUHJvbWlzZTxcclxuICAgIC8vICAgfCB7XHJcbiAgICAvLyAgICAgICBkYXRhOiBNZXRhZGF0YVxyXG4gICAgLy8gICAgICAgZXJyb3I6IG51bGxcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIHwge1xyXG4gICAgLy8gICAgICAgZGF0YTogbnVsbFxyXG4gICAgLy8gICAgICAgZXJyb3I6IFN0b3JhZ2VFcnJvclxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vID4ge1xyXG4gICAgLy8gICB0cnkge1xyXG4gICAgLy8gICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwb3N0KFxyXG4gICAgLy8gICAgICAgdGhpcy5mZXRjaCxcclxuICAgIC8vICAgICAgIGAke3RoaXMudXJsfS9tZXRhZGF0YS8ke2lkfWAsXHJcbiAgICAvLyAgICAgICB7IC4uLm1ldGEgfSxcclxuICAgIC8vICAgICAgIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH1cclxuICAgIC8vICAgICApXHJcbiAgICAvLyAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfVxyXG4gICAgLy8gICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8gICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcclxuICAgIC8vICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhyb3cgZXJyb3JcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0cyBhbGwgdGhlIGZpbGVzIHdpdGhpbiBhIGJ1Y2tldC5cclxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBmb2xkZXIgcGF0aC5cclxuICAgICAqL1xyXG4gICAgbGlzdChwYXRoLCBvcHRpb25zLCBwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRUFSQ0hfT1BUSU9OUyksIG9wdGlvbnMpLCB7IHByZWZpeDogcGF0aCB8fCAnJyB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCBwb3N0KHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9vYmplY3QvbGlzdC8ke3RoaXMuYnVja2V0SWR9YCwgYm9keSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZW5jb2RlTWV0YWRhdGEobWV0YWRhdGEpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpO1xyXG4gICAgfVxyXG4gICAgdG9CYXNlNjQoZGF0YSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnRvYShkYXRhKTtcclxuICAgIH1cclxuICAgIF9nZXRGaW5hbFBhdGgocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmJ1Y2tldElkfS8ke3BhdGh9YDtcclxuICAgIH1cclxuICAgIF9yZW1vdmVFbXB0eUZvbGRlcnMocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCAnJykucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xyXG4gICAgfVxyXG4gICAgdHJhbnNmb3JtT3B0c1RvUXVlcnlTdHJpbmcodHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gW107XHJcbiAgICAgICAgaWYgKHRyYW5zZm9ybS53aWR0aCkge1xyXG4gICAgICAgICAgICBwYXJhbXMucHVzaChgd2lkdGg9JHt0cmFuc2Zvcm0ud2lkdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0cmFuc2Zvcm0uaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGBoZWlnaHQ9JHt0cmFuc2Zvcm0uaGVpZ2h0fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHJhbnNmb3JtLnJlc2l6ZSkge1xyXG4gICAgICAgICAgICBwYXJhbXMucHVzaChgcmVzaXplPSR7dHJhbnNmb3JtLnJlc2l6ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRyYW5zZm9ybS5mb3JtYXQpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnB1c2goYGZvcm1hdD0ke3RyYW5zZm9ybS5mb3JtYXR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0cmFuc2Zvcm0ucXVhbGl0eSkge1xyXG4gICAgICAgICAgICBwYXJhbXMucHVzaChgcXVhbGl0eT0ke3RyYW5zZm9ybS5xdWFsaXR5fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1zLmpvaW4oJyYnKTtcclxuICAgIH1cclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdG9yYWdlRmlsZUFwaS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/packages/StorageFileApi.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/SupabaseClient.js": /*!**************************************************************************!*\ !*** ./node_modules/@supabase/supabase-js/dist/module/SupabaseClient.js ***! \**************************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ SupabaseClient; }\n/* harmony export */ });\n/* harmony import */ var _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @supabase/functions-js */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js\");\n/* harmony import */ var _supabase_postgrest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/postgrest-js */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/esm/wrapper.mjs\");\n/* harmony import */ var _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @supabase/realtime-js */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/index.js\");\n/* harmony import */ var _supabase_storage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @supabase/storage-js */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/module/StorageClient.js\");\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/constants.js\");\n/* harmony import */ var _lib_fetch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/fetch */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/fetch.js\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/helpers */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _lib_SupabaseAuthClient__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/SupabaseAuthClient */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/SupabaseAuthClient.js\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Supabase Client.\r\n *\r\n * An isomorphic Javascript client for interacting with Postgres.\r\n */\r\nclass SupabaseClient {\r\n /**\r\n * Create a new client for use in the browser.\r\n * @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard.\r\n * @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard.\r\n * @param options.db.schema You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase.\r\n * @param options.auth.autoRefreshToken Set to \"true\" if you want to automatically refresh the token before expiring.\r\n * @param options.auth.persistSession Set to \"true\" if you want to automatically save the user session into local storage.\r\n * @param options.auth.detectSessionInUrl Set to \"true\" if you want to automatically detects OAuth grants in the URL and signs in the user.\r\n * @param options.realtime Options passed along to realtime-js constructor.\r\n * @param options.global.fetch A custom fetch implementation.\r\n * @param options.global.headers Any additional headers to send with each network request.\r\n */\r\n constructor(supabaseUrl, supabaseKey, options) {\r\n var _a, _b, _c;\r\n this.supabaseUrl = supabaseUrl;\r\n this.supabaseKey = supabaseKey;\r\n if (!supabaseUrl)\r\n throw new Error('supabaseUrl is required.');\r\n if (!supabaseKey)\r\n throw new Error('supabaseKey is required.');\r\n const _supabaseUrl = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_2__.ensureTrailingSlash)(supabaseUrl);\r\n const baseUrl = new URL(_supabaseUrl);\r\n this.realtimeUrl = new URL('realtime/v1', baseUrl);\r\n this.realtimeUrl.protocol = this.realtimeUrl.protocol.replace('http', 'ws');\r\n this.authUrl = new URL('auth/v1', baseUrl);\r\n this.storageUrl = new URL('storage/v1', baseUrl);\r\n this.functionsUrl = new URL('functions/v1', baseUrl);\r\n // default storage key uses the supabase project ref as a namespace\r\n const defaultStorageKey = `sb-${baseUrl.hostname.split('.')[0]}-auth-token`;\r\n const DEFAULTS = {\r\n db: _lib_constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_DB_OPTIONS,\r\n realtime: _lib_constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_REALTIME_OPTIONS,\r\n auth: Object.assign(Object.assign({}, _lib_constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_AUTH_OPTIONS), { storageKey: defaultStorageKey }),\r\n global: _lib_constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GLOBAL_OPTIONS,\r\n };\r\n const settings = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_2__.applySettingDefaults)(options !== null && options !== void 0 ? options : {}, DEFAULTS);\r\n this.storageKey = (_a = settings.auth.storageKey) !== null && _a !== void 0 ? _a : '';\r\n this.headers = (_b = settings.global.headers) !== null && _b !== void 0 ? _b : {};\r\n if (!settings.accessToken) {\r\n this.auth = this._initSupabaseAuthClient((_c = settings.auth) !== null && _c !== void 0 ? _c : {}, this.headers, settings.global.fetch);\r\n }\r\n else {\r\n this.accessToken = settings.accessToken;\r\n this.auth = new Proxy({}, {\r\n get: (_, prop) => {\r\n throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(prop)} is not possible`);\r\n },\r\n });\r\n }\r\n this.fetch = (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_4__.fetchWithAuth)(supabaseKey, this._getAccessToken.bind(this), settings.global.fetch);\r\n this.realtime = this._initRealtimeClient(Object.assign({ headers: this.headers, accessToken: this._getAccessToken.bind(this) }, settings.realtime));\r\n this.rest = new _supabase_postgrest_js__WEBPACK_IMPORTED_MODULE_0__.PostgrestClient(new URL('rest/v1', baseUrl).href, {\r\n headers: this.headers,\r\n schema: settings.db.schema,\r\n fetch: this.fetch,\r\n });\r\n if (!settings.accessToken) {\r\n this._listenForAuthEvents();\r\n }\r\n }\r\n /**\r\n * Supabase Functions allows you to deploy and invoke edge functions.\r\n */\r\n get functions() {\r\n return new _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__.FunctionsClient(this.functionsUrl.href, {\r\n headers: this.headers,\r\n customFetch: this.fetch,\r\n });\r\n }\r\n /**\r\n * Supabase Storage allows you to manage user-generated content, such as photos or videos.\r\n */\r\n get storage() {\r\n return new _supabase_storage_js__WEBPACK_IMPORTED_MODULE_6__.StorageClient(this.storageUrl.href, this.headers, this.fetch);\r\n }\r\n /**\r\n * Perform a query on a table or a view.\r\n *\r\n * @param relation - The table or view name to query\r\n */\r\n from(relation) {\r\n return this.rest.from(relation);\r\n }\r\n // NOTE: signatures must be kept in sync with PostgrestClient.schema\r\n /**\r\n * Select a schema to query or perform an function (rpc) call.\r\n *\r\n * The schema needs to be on the list of exposed schemas inside Supabase.\r\n *\r\n * @param schema - The schema to query\r\n */\r\n schema(schema) {\r\n return this.rest.schema(schema);\r\n }\r\n // NOTE: signatures must be kept in sync with PostgrestClient.rpc\r\n /**\r\n * Perform a function call.\r\n *\r\n * @param fn - The function name to call\r\n * @param args - The arguments to pass to the function call\r\n * @param options - Named parameters\r\n * @param options.head - When set to `true`, `data` will not be returned.\r\n * Useful if you only need the count.\r\n * @param options.get - When set to `true`, the function will be called with\r\n * read-only access mode.\r\n * @param options.count - Count algorithm to use to count rows returned by the\r\n * function. Only applicable for [set-returning\r\n * functions](https://www.postgresql.org/docs/current/functions-srf.html).\r\n *\r\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\r\n * hood.\r\n *\r\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\r\n * statistics under the hood.\r\n *\r\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\r\n * numbers.\r\n */\r\n rpc(fn, args = {}, options = {}) {\r\n return this.rest.rpc(fn, args, options);\r\n }\r\n /**\r\n * Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.\r\n *\r\n * @param {string} name - The name of the Realtime channel.\r\n * @param {Object} opts - The options to pass to the Realtime channel.\r\n *\r\n */\r\n channel(name, opts = { config: {} }) {\r\n return this.realtime.channel(name, opts);\r\n }\r\n /**\r\n * Returns all Realtime channels.\r\n */\r\n getChannels() {\r\n return this.realtime.getChannels();\r\n }\r\n /**\r\n * Unsubscribes and removes Realtime channel from Realtime client.\r\n *\r\n * @param {RealtimeChannel} channel - The name of the Realtime channel.\r\n *\r\n */\r\n removeChannel(channel) {\r\n return this.realtime.removeChannel(channel);\r\n }\r\n /**\r\n * Unsubscribes and removes all Realtime channels from Realtime client.\r\n */\r\n removeAllChannels() {\r\n return this.realtime.removeAllChannels();\r\n }\r\n _getAccessToken() {\r\n var _a, _b;\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (this.accessToken) {\r\n return yield this.accessToken();\r\n }\r\n const { data } = yield this.auth.getSession();\r\n return (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : null;\r\n });\r\n }\r\n _initSupabaseAuthClient({ autoRefreshToken, persistSession, detectSessionInUrl, storage, storageKey, flowType, lock, debug, }, headers, fetch) {\r\n const authHeaders = {\r\n Authorization: `Bearer ${this.supabaseKey}`,\r\n apikey: `${this.supabaseKey}`,\r\n };\r\n return new _lib_SupabaseAuthClient__WEBPACK_IMPORTED_MODULE_7__.SupabaseAuthClient({\r\n url: this.authUrl.href,\r\n headers: Object.assign(Object.assign({}, authHeaders), headers),\r\n storageKey: storageKey,\r\n autoRefreshToken,\r\n persistSession,\r\n detectSessionInUrl,\r\n storage,\r\n flowType,\r\n lock,\r\n debug,\r\n fetch,\r\n // auth checks if there is a custom authorizaiton header using this flag\r\n // so it knows whether to return an error when getUser is called with no session\r\n hasCustomAuthorizationHeader: 'Authorization' in this.headers,\r\n });\r\n }\r\n _initRealtimeClient(options) {\r\n return new _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.RealtimeClient(this.realtimeUrl.href, Object.assign(Object.assign({}, options), { params: Object.assign({ apikey: this.supabaseKey }, options === null || options === void 0 ? void 0 : options.params) }));\r\n }\r\n _listenForAuthEvents() {\r\n let data = this.auth.onAuthStateChange((event, session) => {\r\n this._handleTokenChanged(event, 'CLIENT', session === null || session === void 0 ? void 0 : session.access_token);\r\n });\r\n return data;\r\n }\r\n _handleTokenChanged(event, source, token) {\r\n if ((event === 'TOKEN_REFRESHED' || event === 'SIGNED_IN') &&\r\n this.changedAccessToken !== token) {\r\n this.changedAccessToken = token;\r\n }\r\n else if (event === 'SIGNED_OUT') {\r\n this.realtime.setAuth();\r\n if (source == 'STORAGE')\r\n this.auth.signOut();\r\n this.changedAccessToken = undefined;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=SupabaseClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tb2R1bGUvU3VwYWJhc2VDbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaUJBQWlCLFNBQUksSUFBSSxTQUFJO0FBQzdCLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ3lEO0FBQ0M7QUFDRjtBQUNzQjtBQUNnRDtBQUNsRjtBQUM4QjtBQUNaO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsaUVBQW1CO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLCtCQUErQjtBQUN2RTtBQUNBLGdCQUFnQiw4REFBa0I7QUFDbEMsc0JBQXNCLG9FQUF3QjtBQUM5QyxnREFBZ0QsRUFBRSxnRUFBb0IsS0FBSywrQkFBK0I7QUFDMUcsb0JBQW9CLGtFQUFzQjtBQUMxQztBQUNBLHlCQUF5QixrRUFBb0Isc0RBQXNEO0FBQ25HO0FBQ0E7QUFDQTtBQUNBLDZHQUE2RztBQUM3RztBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQSxpSkFBaUosY0FBYztBQUMvSixpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0EscUJBQXFCLHlEQUFhO0FBQ2xDLGlFQUFpRSxxRUFBcUU7QUFDdEksd0JBQXdCLG1FQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG1FQUFlO0FBQ2xDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwrREFBcUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixjQUFjO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQSwyQkFBMkIsWUFBWTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0EsU0FBUztBQUNUO0FBQ0EsOEJBQThCLG1HQUFtRztBQUNqSTtBQUNBLHFDQUFxQyxpQkFBaUI7QUFDdEQsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBLG1CQUFtQix1RUFBa0I7QUFDckM7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxtQkFBbUIsaUVBQWMsc0RBQXNELGNBQWMsd0JBQXdCLDBCQUEwQixxRUFBcUU7QUFDNU47QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21vZHVsZS9TdXBhYmFzZUNsaWVudC5qcz8xZDM3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IHsgRnVuY3Rpb25zQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcyc7XHJcbmltcG9ydCB7IFBvc3RncmVzdENsaWVudCwgfSBmcm9tICdAc3VwYWJhc2UvcG9zdGdyZXN0LWpzJztcclxuaW1wb3J0IHsgUmVhbHRpbWVDbGllbnQsIH0gZnJvbSAnQHN1cGFiYXNlL3JlYWx0aW1lLWpzJztcclxuaW1wb3J0IHsgU3RvcmFnZUNsaWVudCBhcyBTdXBhYmFzZVN0b3JhZ2VDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3RvcmFnZS1qcyc7XHJcbmltcG9ydCB7IERFRkFVTFRfR0xPQkFMX09QVElPTlMsIERFRkFVTFRfREJfT1BUSU9OUywgREVGQVVMVF9BVVRIX09QVElPTlMsIERFRkFVTFRfUkVBTFRJTUVfT1BUSU9OUywgfSBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBmZXRjaFdpdGhBdXRoIH0gZnJvbSAnLi9saWIvZmV0Y2gnO1xyXG5pbXBvcnQgeyBlbnN1cmVUcmFpbGluZ1NsYXNoLCBhcHBseVNldHRpbmdEZWZhdWx0cyB9IGZyb20gJy4vbGliL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBTdXBhYmFzZUF1dGhDbGllbnQgfSBmcm9tICcuL2xpYi9TdXBhYmFzZUF1dGhDbGllbnQnO1xyXG4vKipcclxuICogU3VwYWJhc2UgQ2xpZW50LlxyXG4gKlxyXG4gKiBBbiBpc29tb3JwaGljIEphdmFzY3JpcHQgY2xpZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIFBvc3RncmVzLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwYWJhc2VDbGllbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgY2xpZW50IGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuXHJcbiAgICAgKiBAcGFyYW0gc3VwYWJhc2VVcmwgVGhlIHVuaXF1ZSBTdXBhYmFzZSBVUkwgd2hpY2ggaXMgc3VwcGxpZWQgd2hlbiB5b3UgY3JlYXRlIGEgbmV3IHByb2plY3QgaW4geW91ciBwcm9qZWN0IGRhc2hib2FyZC5cclxuICAgICAqIEBwYXJhbSBzdXBhYmFzZUtleSBUaGUgdW5pcXVlIFN1cGFiYXNlIEtleSB3aGljaCBpcyBzdXBwbGllZCB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgcHJvamVjdCBpbiB5b3VyIHByb2plY3QgZGFzaGJvYXJkLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGIuc2NoZW1hIFlvdSBjYW4gc3dpdGNoIGluIGJldHdlZW4gc2NoZW1hcy4gVGhlIHNjaGVtYSBuZWVkcyB0byBiZSBvbiB0aGUgbGlzdCBvZiBleHBvc2VkIHNjaGVtYXMgaW5zaWRlIFN1cGFiYXNlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuYXV0aC5hdXRvUmVmcmVzaFRva2VuIFNldCB0byBcInRydWVcIiBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggdGhlIHRva2VuIGJlZm9yZSBleHBpcmluZy5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmF1dGgucGVyc2lzdFNlc3Npb24gU2V0IHRvIFwidHJ1ZVwiIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgc2F2ZSB0aGUgdXNlciBzZXNzaW9uIGludG8gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmF1dGguZGV0ZWN0U2Vzc2lvbkluVXJsIFNldCB0byBcInRydWVcIiBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IGRldGVjdHMgT0F1dGggZ3JhbnRzIGluIHRoZSBVUkwgYW5kIHNpZ25zIGluIHRoZSB1c2VyLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmVhbHRpbWUgT3B0aW9ucyBwYXNzZWQgYWxvbmcgdG8gcmVhbHRpbWUtanMgY29uc3RydWN0b3IuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5nbG9iYWwuZmV0Y2ggQSBjdXN0b20gZmV0Y2ggaW1wbGVtZW50YXRpb24uXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5nbG9iYWwuaGVhZGVycyBBbnkgYWRkaXRpb25hbCBoZWFkZXJzIHRvIHNlbmQgd2l0aCBlYWNoIG5ldHdvcmsgcmVxdWVzdC5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3Ioc3VwYWJhc2VVcmwsIHN1cGFiYXNlS2V5LCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgdGhpcy5zdXBhYmFzZVVybCA9IHN1cGFiYXNlVXJsO1xyXG4gICAgICAgIHRoaXMuc3VwYWJhc2VLZXkgPSBzdXBhYmFzZUtleTtcclxuICAgICAgICBpZiAoIXN1cGFiYXNlVXJsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N1cGFiYXNlVXJsIGlzIHJlcXVpcmVkLicpO1xyXG4gICAgICAgIGlmICghc3VwYWJhc2VLZXkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3VwYWJhc2VLZXkgaXMgcmVxdWlyZWQuJyk7XHJcbiAgICAgICAgY29uc3QgX3N1cGFiYXNlVXJsID0gZW5zdXJlVHJhaWxpbmdTbGFzaChzdXBhYmFzZVVybCk7XHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IG5ldyBVUkwoX3N1cGFiYXNlVXJsKTtcclxuICAgICAgICB0aGlzLnJlYWx0aW1lVXJsID0gbmV3IFVSTCgncmVhbHRpbWUvdjEnLCBiYXNlVXJsKTtcclxuICAgICAgICB0aGlzLnJlYWx0aW1lVXJsLnByb3RvY29sID0gdGhpcy5yZWFsdGltZVVybC5wcm90b2NvbC5yZXBsYWNlKCdodHRwJywgJ3dzJyk7XHJcbiAgICAgICAgdGhpcy5hdXRoVXJsID0gbmV3IFVSTCgnYXV0aC92MScsIGJhc2VVcmwpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVVybCA9IG5ldyBVUkwoJ3N0b3JhZ2UvdjEnLCBiYXNlVXJsKTtcclxuICAgICAgICB0aGlzLmZ1bmN0aW9uc1VybCA9IG5ldyBVUkwoJ2Z1bmN0aW9ucy92MScsIGJhc2VVcmwpO1xyXG4gICAgICAgIC8vIGRlZmF1bHQgc3RvcmFnZSBrZXkgdXNlcyB0aGUgc3VwYWJhc2UgcHJvamVjdCByZWYgYXMgYSBuYW1lc3BhY2VcclxuICAgICAgICBjb25zdCBkZWZhdWx0U3RvcmFnZUtleSA9IGBzYi0ke2Jhc2VVcmwuaG9zdG5hbWUuc3BsaXQoJy4nKVswXX0tYXV0aC10b2tlbmA7XHJcbiAgICAgICAgY29uc3QgREVGQVVMVFMgPSB7XHJcbiAgICAgICAgICAgIGRiOiBERUZBVUxUX0RCX09QVElPTlMsXHJcbiAgICAgICAgICAgIHJlYWx0aW1lOiBERUZBVUxUX1JFQUxUSU1FX09QVElPTlMsXHJcbiAgICAgICAgICAgIGF1dGg6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BVVRIX09QVElPTlMpLCB7IHN0b3JhZ2VLZXk6IGRlZmF1bHRTdG9yYWdlS2V5IH0pLFxyXG4gICAgICAgICAgICBnbG9iYWw6IERFRkFVTFRfR0xPQkFMX09QVElPTlMsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGFwcGx5U2V0dGluZ0RlZmF1bHRzKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9LCBERUZBVUxUUyk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlS2V5ID0gKF9hID0gc2V0dGluZ3MuYXV0aC5zdG9yYWdlS2V5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSAoX2IgPSBzZXR0aW5ncy5nbG9iYWwuaGVhZGVycykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGggPSB0aGlzLl9pbml0U3VwYWJhc2VBdXRoQ2xpZW50KChfYyA9IHNldHRpbmdzLmF1dGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHt9LCB0aGlzLmhlYWRlcnMsIHNldHRpbmdzLmdsb2JhbC5mZXRjaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gc2V0dGluZ3MuYWNjZXNzVG9rZW47XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aCA9IG5ldyBQcm94eSh7fSwge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiAoXywgcHJvcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL3N1cGFiYXNlLWpzOiBTdXBhYmFzZSBDbGllbnQgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBhY2Nlc3NUb2tlbiBvcHRpb24sIGFjY2Vzc2luZyBzdXBhYmFzZS5hdXRoLiR7U3RyaW5nKHByb3ApfSBpcyBub3QgcG9zc2libGVgKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZldGNoID0gZmV0Y2hXaXRoQXV0aChzdXBhYmFzZUtleSwgdGhpcy5fZ2V0QWNjZXNzVG9rZW4uYmluZCh0aGlzKSwgc2V0dGluZ3MuZ2xvYmFsLmZldGNoKTtcclxuICAgICAgICB0aGlzLnJlYWx0aW1lID0gdGhpcy5faW5pdFJlYWx0aW1lQ2xpZW50KE9iamVjdC5hc3NpZ24oeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsIGFjY2Vzc1Rva2VuOiB0aGlzLl9nZXRBY2Nlc3NUb2tlbi5iaW5kKHRoaXMpIH0sIHNldHRpbmdzLnJlYWx0aW1lKSk7XHJcbiAgICAgICAgdGhpcy5yZXN0ID0gbmV3IFBvc3RncmVzdENsaWVudChuZXcgVVJMKCdyZXN0L3YxJywgYmFzZVVybCkuaHJlZiwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHNjaGVtYTogc2V0dGluZ3MuZGIuc2NoZW1hLFxyXG4gICAgICAgICAgICBmZXRjaDogdGhpcy5mZXRjaCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXNldHRpbmdzLmFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbkZvckF1dGhFdmVudHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN1cGFiYXNlIEZ1bmN0aW9ucyBhbGxvd3MgeW91IHRvIGRlcGxveSBhbmQgaW52b2tlIGVkZ2UgZnVuY3Rpb25zLlxyXG4gICAgICovXHJcbiAgICBnZXQgZnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25zQ2xpZW50KHRoaXMuZnVuY3Rpb25zVXJsLmhyZWYsIHtcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgICAgICBjdXN0b21GZXRjaDogdGhpcy5mZXRjaCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU3VwYWJhc2UgU3RvcmFnZSBhbGxvd3MgeW91IHRvIG1hbmFnZSB1c2VyLWdlbmVyYXRlZCBjb250ZW50LCBzdWNoIGFzIHBob3RvcyBvciB2aWRlb3MuXHJcbiAgICAgKi9cclxuICAgIGdldCBzdG9yYWdlKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3VwYWJhc2VTdG9yYWdlQ2xpZW50KHRoaXMuc3RvcmFnZVVybC5ocmVmLCB0aGlzLmhlYWRlcnMsIHRoaXMuZmV0Y2gpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIGEgcXVlcnkgb24gYSB0YWJsZSBvciBhIHZpZXcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlbGF0aW9uIC0gVGhlIHRhYmxlIG9yIHZpZXcgbmFtZSB0byBxdWVyeVxyXG4gICAgICovXHJcbiAgICBmcm9tKHJlbGF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdC5mcm9tKHJlbGF0aW9uKTtcclxuICAgIH1cclxuICAgIC8vIE5PVEU6IHNpZ25hdHVyZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBQb3N0Z3Jlc3RDbGllbnQuc2NoZW1hXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBhIHNjaGVtYSB0byBxdWVyeSBvciBwZXJmb3JtIGFuIGZ1bmN0aW9uIChycGMpIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHNjaGVtYSBuZWVkcyB0byBiZSBvbiB0aGUgbGlzdCBvZiBleHBvc2VkIHNjaGVtYXMgaW5zaWRlIFN1cGFiYXNlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzY2hlbWEgLSBUaGUgc2NoZW1hIHRvIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIHNjaGVtYShzY2hlbWEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN0LnNjaGVtYShzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgLy8gTk9URTogc2lnbmF0dXJlcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIFBvc3RncmVzdENsaWVudC5ycGNcclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBhIGZ1bmN0aW9uIGNhbGwuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbFxyXG4gICAgICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uIGNhbGxcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaGVhZCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgYGRhdGFgIHdpbGwgbm90IGJlIHJldHVybmVkLlxyXG4gICAgICogVXNlZnVsIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGNvdW50LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZ2V0IC0gV2hlbiBzZXQgdG8gYHRydWVgLCB0aGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aFxyXG4gICAgICogcmVhZC1vbmx5IGFjY2VzcyBtb2RlLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuY291bnQgLSBDb3VudCBhbGdvcml0aG0gdG8gdXNlIHRvIGNvdW50IHJvd3MgcmV0dXJuZWQgYnkgdGhlXHJcbiAgICAgKiBmdW5jdGlvbi4gT25seSBhcHBsaWNhYmxlIGZvciBbc2V0LXJldHVybmluZ1xyXG4gICAgICogZnVuY3Rpb25zXShodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvZnVuY3Rpb25zLXNyZi5odG1sKS5cclxuICAgICAqXHJcbiAgICAgKiBgXCJleGFjdFwiYDogRXhhY3QgYnV0IHNsb3cgY291bnQgYWxnb3JpdGhtLiBQZXJmb3JtcyBhIGBDT1VOVCgqKWAgdW5kZXIgdGhlXHJcbiAgICAgKiBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcInBsYW5uZWRcImA6IEFwcHJveGltYXRlZCBidXQgZmFzdCBjb3VudCBhbGdvcml0aG0uIFVzZXMgdGhlIFBvc3RncmVzXHJcbiAgICAgKiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBob29kLlxyXG4gICAgICpcclxuICAgICAqIGBcImVzdGltYXRlZFwiYDogVXNlcyBleGFjdCBjb3VudCBmb3IgbG93IG51bWJlcnMgYW5kIHBsYW5uZWQgY291bnQgZm9yIGhpZ2hcclxuICAgICAqIG51bWJlcnMuXHJcbiAgICAgKi9cclxuICAgIHJwYyhmbiwgYXJncyA9IHt9LCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN0LnJwYyhmbiwgYXJncywgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBSZWFsdGltZSBjaGFubmVsIHdpdGggQnJvYWRjYXN0LCBQcmVzZW5jZSwgYW5kIFBvc3RncmVzIENoYW5nZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgUmVhbHRpbWUgY2hhbm5lbC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmVhbHRpbWUgY2hhbm5lbC5cclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGNoYW5uZWwobmFtZSwgb3B0cyA9IHsgY29uZmlnOiB7fSB9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhbHRpbWUuY2hhbm5lbChuYW1lLCBvcHRzKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgUmVhbHRpbWUgY2hhbm5lbHMuXHJcbiAgICAgKi9cclxuICAgIGdldENoYW5uZWxzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWx0aW1lLmdldENoYW5uZWxzKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVuc3Vic2NyaWJlcyBhbmQgcmVtb3ZlcyBSZWFsdGltZSBjaGFubmVsIGZyb20gUmVhbHRpbWUgY2xpZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UmVhbHRpbWVDaGFubmVsfSBjaGFubmVsIC0gVGhlIG5hbWUgb2YgdGhlIFJlYWx0aW1lIGNoYW5uZWwuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICByZW1vdmVDaGFubmVsKGNoYW5uZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5yZW1vdmVDaGFubmVsKGNoYW5uZWwpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnN1YnNjcmliZXMgYW5kIHJlbW92ZXMgYWxsIFJlYWx0aW1lIGNoYW5uZWxzIGZyb20gUmVhbHRpbWUgY2xpZW50LlxyXG4gICAgICovXHJcbiAgICByZW1vdmVBbGxDaGFubmVscygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5yZW1vdmVBbGxDaGFubmVscygpO1xyXG4gICAgfVxyXG4gICAgX2dldEFjY2Vzc1Rva2VuKCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCB0aGlzLmFjY2Vzc1Rva2VuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSB5aWVsZCB0aGlzLmF1dGguZ2V0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWNjZXNzX3Rva2VuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX2luaXRTdXBhYmFzZUF1dGhDbGllbnQoeyBhdXRvUmVmcmVzaFRva2VuLCBwZXJzaXN0U2Vzc2lvbiwgZGV0ZWN0U2Vzc2lvbkluVXJsLCBzdG9yYWdlLCBzdG9yYWdlS2V5LCBmbG93VHlwZSwgbG9jaywgZGVidWcsIH0sIGhlYWRlcnMsIGZldGNoKSB7XHJcbiAgICAgICAgY29uc3QgYXV0aEhlYWRlcnMgPSB7XHJcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLnN1cGFiYXNlS2V5fWAsXHJcbiAgICAgICAgICAgIGFwaWtleTogYCR7dGhpcy5zdXBhYmFzZUtleX1gLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdXBhYmFzZUF1dGhDbGllbnQoe1xyXG4gICAgICAgICAgICB1cmw6IHRoaXMuYXV0aFVybC5ocmVmLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGF1dGhIZWFkZXJzKSwgaGVhZGVycyksXHJcbiAgICAgICAgICAgIHN0b3JhZ2VLZXk6IHN0b3JhZ2VLZXksXHJcbiAgICAgICAgICAgIGF1dG9SZWZyZXNoVG9rZW4sXHJcbiAgICAgICAgICAgIHBlcnNpc3RTZXNzaW9uLFxyXG4gICAgICAgICAgICBkZXRlY3RTZXNzaW9uSW5VcmwsXHJcbiAgICAgICAgICAgIHN0b3JhZ2UsXHJcbiAgICAgICAgICAgIGZsb3dUeXBlLFxyXG4gICAgICAgICAgICBsb2NrLFxyXG4gICAgICAgICAgICBkZWJ1ZyxcclxuICAgICAgICAgICAgZmV0Y2gsXHJcbiAgICAgICAgICAgIC8vIGF1dGggY2hlY2tzIGlmIHRoZXJlIGlzIGEgY3VzdG9tIGF1dGhvcml6YWl0b24gaGVhZGVyIHVzaW5nIHRoaXMgZmxhZ1xyXG4gICAgICAgICAgICAvLyBzbyBpdCBrbm93cyB3aGV0aGVyIHRvIHJldHVybiBhbiBlcnJvciB3aGVuIGdldFVzZXIgaXMgY2FsbGVkIHdpdGggbm8gc2Vzc2lvblxyXG4gICAgICAgICAgICBoYXNDdXN0b21BdXRob3JpemF0aW9uSGVhZGVyOiAnQXV0aG9yaXphdGlvbicgaW4gdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX2luaXRSZWFsdGltZUNsaWVudChvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWFsdGltZUNsaWVudCh0aGlzLnJlYWx0aW1lVXJsLmhyZWYsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgcGFyYW1zOiBPYmplY3QuYXNzaWduKHsgYXBpa2V5OiB0aGlzLnN1cGFiYXNlS2V5IH0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXJhbXMpIH0pKTtcclxuICAgIH1cclxuICAgIF9saXN0ZW5Gb3JBdXRoRXZlbnRzKCkge1xyXG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5hdXRoLm9uQXV0aFN0YXRlQ2hhbmdlKChldmVudCwgc2Vzc2lvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVUb2tlbkNoYW5nZWQoZXZlbnQsICdDTElFTlQnLCBzZXNzaW9uID09PSBudWxsIHx8IHNlc3Npb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb24uYWNjZXNzX3Rva2VuKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICAgIF9oYW5kbGVUb2tlbkNoYW5nZWQoZXZlbnQsIHNvdXJjZSwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoKGV2ZW50ID09PSAnVE9LRU5fUkVGUkVTSEVEJyB8fCBldmVudCA9PT0gJ1NJR05FRF9JTicpICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEFjY2Vzc1Rva2VuICE9PSB0b2tlbikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRBY2Nlc3NUb2tlbiA9IHRva2VuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudCA9PT0gJ1NJR05FRF9PVVQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVhbHRpbWUuc2V0QXV0aCgpO1xyXG4gICAgICAgICAgICBpZiAoc291cmNlID09ICdTVE9SQUdFJylcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aC5zaWduT3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEFjY2Vzc1Rva2VuID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdXBhYmFzZUNsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/SupabaseClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/index.js": /*!*****************************************************************!*\ !*** ./node_modules/@supabase/supabase-js/dist/module/index.js ***! \*****************************************************************/ /***/ (function(__unused_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 */ AuthAdminApi: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthAdminApi; },\n/* harmony export */ AuthApiError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthApiError; },\n/* harmony export */ AuthClient: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthClient; },\n/* harmony export */ AuthError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthError; },\n/* harmony export */ AuthImplicitGrantRedirectError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthImplicitGrantRedirectError; },\n/* harmony export */ AuthInvalidCredentialsError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthInvalidCredentialsError; },\n/* harmony export */ AuthInvalidJwtError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthInvalidJwtError; },\n/* harmony export */ AuthInvalidTokenResponseError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthInvalidTokenResponseError; },\n/* harmony export */ AuthPKCEGrantCodeExchangeError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthPKCEGrantCodeExchangeError; },\n/* harmony export */ AuthRetryableFetchError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthRetryableFetchError; },\n/* harmony export */ AuthSessionMissingError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthSessionMissingError; },\n/* harmony export */ AuthUnknownError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthUnknownError; },\n/* harmony export */ AuthWeakPasswordError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthWeakPasswordError; },\n/* harmony export */ CustomAuthError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.CustomAuthError; },\n/* harmony export */ FunctionRegion: function() { return /* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_2__.FunctionRegion; },\n/* harmony export */ FunctionsError: function() { return /* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_2__.FunctionsError; },\n/* harmony export */ FunctionsFetchError: function() { return /* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_2__.FunctionsFetchError; },\n/* harmony export */ FunctionsHttpError: function() { return /* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_2__.FunctionsHttpError; },\n/* harmony export */ FunctionsRelayError: function() { return /* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_2__.FunctionsRelayError; },\n/* harmony export */ GoTrueAdminApi: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.GoTrueAdminApi; },\n/* harmony export */ GoTrueClient: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.GoTrueClient; },\n/* harmony export */ NavigatorLockAcquireTimeoutError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.NavigatorLockAcquireTimeoutError; },\n/* harmony export */ PostgrestError: function() { return /* reexport safe */ _supabase_postgrest_js__WEBPACK_IMPORTED_MODULE_1__.PostgrestError; },\n/* harmony export */ REALTIME_CHANNEL_STATES: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.REALTIME_CHANNEL_STATES; },\n/* harmony export */ REALTIME_LISTEN_TYPES: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.REALTIME_LISTEN_TYPES; },\n/* harmony export */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT; },\n/* harmony export */ REALTIME_PRESENCE_LISTEN_EVENTS: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.REALTIME_PRESENCE_LISTEN_EVENTS; },\n/* harmony export */ REALTIME_SUBSCRIBE_STATES: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.REALTIME_SUBSCRIBE_STATES; },\n/* harmony export */ RealtimeChannel: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.RealtimeChannel; },\n/* harmony export */ RealtimeClient: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.RealtimeClient; },\n/* harmony export */ RealtimePresence: function() { return /* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__.RealtimePresence; },\n/* harmony export */ SIGN_OUT_SCOPES: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.SIGN_OUT_SCOPES; },\n/* harmony export */ SupabaseClient: function() { return /* reexport safe */ _SupabaseClient__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; },\n/* harmony export */ createClient: function() { return /* binding */ createClient; },\n/* harmony export */ isAuthApiError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.isAuthApiError; },\n/* harmony export */ isAuthError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.isAuthError; },\n/* harmony export */ isAuthImplicitGrantRedirectError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.isAuthImplicitGrantRedirectError; },\n/* harmony export */ isAuthRetryableFetchError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.isAuthRetryableFetchError; },\n/* harmony export */ isAuthSessionMissingError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.isAuthSessionMissingError; },\n/* harmony export */ isAuthWeakPasswordError: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.isAuthWeakPasswordError; },\n/* harmony export */ lockInternals: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.lockInternals; },\n/* harmony export */ navigatorLock: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.navigatorLock; },\n/* harmony export */ processLock: function() { return /* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.processLock; }\n/* harmony export */ });\n/* harmony import */ var _SupabaseClient__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SupabaseClient */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/SupabaseClient.js\");\n/* harmony import */ var _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/auth-js */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/index.js\");\n/* harmony import */ var _supabase_postgrest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @supabase/postgrest-js */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/esm/wrapper.mjs\");\n/* harmony import */ var _supabase_functions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @supabase/functions-js */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js\");\n/* harmony import */ var _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @supabase/realtime-js */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/index.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Creates a new Supabase Client.\r\n */\r\nconst createClient = (supabaseUrl, supabaseKey, options) => {\r\n return new _SupabaseClient__WEBPACK_IMPORTED_MODULE_4__[\"default\"](supabaseUrl, supabaseKey, options);\r\n};\r\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tb2R1bGUvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThDO0FBQ1o7QUFDdUI7QUFDOEU7QUFDakc7QUFDdUI7QUFDN0Q7QUFDQTtBQUNBO0FBQ087QUFDUCxlQUFlLHVEQUFjO0FBQzdCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21vZHVsZS9pbmRleC5qcz84NjY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdXBhYmFzZUNsaWVudCBmcm9tICcuL1N1cGFiYXNlQ2xpZW50JztcclxuZXhwb3J0ICogZnJvbSAnQHN1cGFiYXNlL2F1dGgtanMnO1xyXG5leHBvcnQgeyBQb3N0Z3Jlc3RFcnJvciwgfSBmcm9tICdAc3VwYWJhc2UvcG9zdGdyZXN0LWpzJztcclxuZXhwb3J0IHsgRnVuY3Rpb25zSHR0cEVycm9yLCBGdW5jdGlvbnNGZXRjaEVycm9yLCBGdW5jdGlvbnNSZWxheUVycm9yLCBGdW5jdGlvbnNFcnJvciwgRnVuY3Rpb25SZWdpb24sIH0gZnJvbSAnQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcyc7XHJcbmV4cG9ydCAqIGZyb20gJ0BzdXBhYmFzZS9yZWFsdGltZS1qcyc7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3VwYWJhc2VDbGllbnQgfSBmcm9tICcuL1N1cGFiYXNlQ2xpZW50JztcclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgU3VwYWJhc2UgQ2xpZW50LlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNsaWVudCA9IChzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXksIG9wdGlvbnMpID0+IHtcclxuICAgIHJldHVybiBuZXcgU3VwYWJhc2VDbGllbnQoc3VwYWJhc2VVcmwsIHN1cGFiYXNlS2V5LCBvcHRpb25zKTtcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/SupabaseAuthClient.js": /*!**********************************************************************************!*\ !*** ./node_modules/@supabase/supabase-js/dist/module/lib/SupabaseAuthClient.js ***! \**********************************************************************************/ /***/ (function(__unused_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 */ SupabaseAuthClient: function() { return /* binding */ SupabaseAuthClient; }\n/* harmony export */ });\n/* harmony import */ var _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/auth-js */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/index.js\");\n\r\nclass SupabaseAuthClient extends _supabase_auth_js__WEBPACK_IMPORTED_MODULE_0__.AuthClient {\r\n constructor(options) {\r\n super(options);\r\n }\r\n}\r\n//# sourceMappingURL=SupabaseAuthClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tb2R1bGUvbGliL1N1cGFiYXNlQXV0aENsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErQztBQUN4QyxpQ0FBaUMseURBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbW9kdWxlL2xpYi9TdXBhYmFzZUF1dGhDbGllbnQuanM/NzA4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL2F1dGgtanMnO1xyXG5leHBvcnQgY2xhc3MgU3VwYWJhc2VBdXRoQ2xpZW50IGV4dGVuZHMgQXV0aENsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3VwYWJhc2VBdXRoQ2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/SupabaseAuthClient.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/constants.js": /*!*************************************************************************!*\ !*** ./node_modules/@supabase/supabase-js/dist/module/lib/constants.js ***! \*************************************************************************/ /***/ (function(__unused_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 */ DEFAULT_AUTH_OPTIONS: function() { return /* binding */ DEFAULT_AUTH_OPTIONS; },\n/* harmony export */ DEFAULT_DB_OPTIONS: function() { return /* binding */ DEFAULT_DB_OPTIONS; },\n/* harmony export */ DEFAULT_GLOBAL_OPTIONS: function() { return /* binding */ DEFAULT_GLOBAL_OPTIONS; },\n/* harmony export */ DEFAULT_HEADERS: function() { return /* binding */ DEFAULT_HEADERS; },\n/* harmony export */ DEFAULT_REALTIME_OPTIONS: function() { return /* binding */ DEFAULT_REALTIME_OPTIONS; }\n/* harmony export */ });\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/version.js\");\n\r\nlet JS_ENV = '';\r\n// @ts-ignore\r\nif (typeof Deno !== 'undefined') {\r\n JS_ENV = 'deno';\r\n}\r\nelse if (typeof document !== 'undefined') {\r\n JS_ENV = 'web';\r\n}\r\nelse if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\r\n JS_ENV = 'react-native';\r\n}\r\nelse {\r\n JS_ENV = 'node';\r\n}\r\nconst DEFAULT_HEADERS = { 'X-Client-Info': `supabase-js-${JS_ENV}/${_version__WEBPACK_IMPORTED_MODULE_0__.version}` };\r\nconst DEFAULT_GLOBAL_OPTIONS = {\r\n headers: DEFAULT_HEADERS,\r\n};\r\nconst DEFAULT_DB_OPTIONS = {\r\n schema: 'public',\r\n};\r\nconst DEFAULT_AUTH_OPTIONS = {\r\n autoRefreshToken: true,\r\n persistSession: true,\r\n detectSessionInUrl: true,\r\n flowType: 'implicit',\r\n};\r\nconst DEFAULT_REALTIME_OPTIONS = {};\r\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tb2R1bGUvbGliL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLDBCQUEwQixnQ0FBZ0MsT0FBTyxHQUFHLDZDQUFPLENBQUM7QUFDNUU7QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbW9kdWxlL2xpYi9jb25zdGFudHMuanM/MTlmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcclxubGV0IEpTX0VOViA9ICcnO1xyXG4vLyBAdHMtaWdub3JlXHJcbmlmICh0eXBlb2YgRGVubyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIEpTX0VOViA9ICdkZW5vJztcclxufVxyXG5lbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBKU19FTlYgPSAnd2ViJztcclxufVxyXG5lbHNlIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJykge1xyXG4gICAgSlNfRU5WID0gJ3JlYWN0LW5hdGl2ZSc7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBKU19FTlYgPSAnbm9kZSc7XHJcbn1cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVBREVSUyA9IHsgJ1gtQ2xpZW50LUluZm8nOiBgc3VwYWJhc2UtanMtJHtKU19FTlZ9LyR7dmVyc2lvbn1gIH07XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0dMT0JBTF9PUFRJT05TID0ge1xyXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxyXG59O1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9EQl9PUFRJT05TID0ge1xyXG4gICAgc2NoZW1hOiAncHVibGljJyxcclxufTtcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVVUSF9PUFRJT05TID0ge1xyXG4gICAgYXV0b1JlZnJlc2hUb2tlbjogdHJ1ZSxcclxuICAgIHBlcnNpc3RTZXNzaW9uOiB0cnVlLFxyXG4gICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiB0cnVlLFxyXG4gICAgZmxvd1R5cGU6ICdpbXBsaWNpdCcsXHJcbn07XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQUxUSU1FX09QVElPTlMgPSB7fTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/constants.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/fetch.js": /*!*********************************************************************!*\ !*** ./node_modules/@supabase/supabase-js/dist/module/lib/fetch.js ***! \*********************************************************************/ /***/ (function(__unused_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 */ fetchWithAuth: function() { return /* binding */ fetchWithAuth; },\n/* harmony export */ resolveFetch: function() { return /* binding */ resolveFetch; },\n/* harmony export */ resolveHeadersConstructor: function() { return /* binding */ resolveHeadersConstructor; }\n/* harmony export */ });\n/* harmony import */ var _supabase_node_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/node-fetch */ \"(app-pages-browser)/./node_modules/@supabase/node-fetch/browser.js\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n// @ts-ignore\r\n\r\nconst resolveFetch = (customFetch) => {\r\n let _fetch;\r\n if (customFetch) {\r\n _fetch = customFetch;\r\n }\r\n else if (typeof fetch === 'undefined') {\r\n _fetch = _supabase_node_fetch__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\r\n }\r\n else {\r\n _fetch = fetch;\r\n }\r\n return (...args) => _fetch(...args);\r\n};\r\nconst resolveHeadersConstructor = () => {\r\n if (typeof Headers === 'undefined') {\r\n return _supabase_node_fetch__WEBPACK_IMPORTED_MODULE_0__.Headers;\r\n }\r\n return Headers;\r\n};\r\nconst fetchWithAuth = (supabaseKey, getAccessToken, customFetch) => {\r\n const fetch = resolveFetch(customFetch);\r\n const HeadersConstructor = resolveHeadersConstructor();\r\n return (input, init) => __awaiter(void 0, void 0, void 0, function* () {\r\n var _a;\r\n const accessToken = (_a = (yield getAccessToken())) !== null && _a !== void 0 ? _a : supabaseKey;\r\n let headers = new HeadersConstructor(init === null || init === void 0 ? void 0 : init.headers);\r\n if (!headers.has('apikey')) {\r\n headers.set('apikey', supabaseKey);\r\n }\r\n if (!headers.has('Authorization')) {\r\n headers.set('Authorization', `Bearer ${accessToken}`);\r\n }\r\n return fetch(input, Object.assign(Object.assign({}, init), { headers }));\r\n });\r\n};\r\n//# sourceMappingURL=fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tb2R1bGUvbGliL2ZldGNoLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUM4RTtBQUN2RTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNERBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLGVBQWUseURBQWdCO0FBQy9CO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsWUFBWTtBQUMvRDtBQUNBLDBEQUEwRCxXQUFXLFNBQVM7QUFDOUUsS0FBSztBQUNMO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21vZHVsZS9saWIvZmV0Y2guanM/MTgxZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbi8vIEB0cy1pZ25vcmVcclxuaW1wb3J0IG5vZGVGZXRjaCwgeyBIZWFkZXJzIGFzIE5vZGVGZXRjaEhlYWRlcnMgfSBmcm9tICdAc3VwYWJhc2Uvbm9kZS1mZXRjaCc7XHJcbmV4cG9ydCBjb25zdCByZXNvbHZlRmV0Y2ggPSAoY3VzdG9tRmV0Y2gpID0+IHtcclxuICAgIGxldCBfZmV0Y2g7XHJcbiAgICBpZiAoY3VzdG9tRmV0Y2gpIHtcclxuICAgICAgICBfZmV0Y2ggPSBjdXN0b21GZXRjaDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBmZXRjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBfZmV0Y2ggPSBub2RlRmV0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBfZmV0Y2ggPSBmZXRjaDtcclxuICAgIH1cclxuICAgIHJldHVybiAoLi4uYXJncykgPT4gX2ZldGNoKC4uLmFyZ3MpO1xyXG59O1xyXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhlYWRlcnNDb25zdHJ1Y3RvciA9ICgpID0+IHtcclxuICAgIGlmICh0eXBlb2YgSGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gTm9kZUZldGNoSGVhZGVycztcclxuICAgIH1cclxuICAgIHJldHVybiBIZWFkZXJzO1xyXG59O1xyXG5leHBvcnQgY29uc3QgZmV0Y2hXaXRoQXV0aCA9IChzdXBhYmFzZUtleSwgZ2V0QWNjZXNzVG9rZW4sIGN1c3RvbUZldGNoKSA9PiB7XHJcbiAgICBjb25zdCBmZXRjaCA9IHJlc29sdmVGZXRjaChjdXN0b21GZXRjaCk7XHJcbiAgICBjb25zdCBIZWFkZXJzQ29uc3RydWN0b3IgPSByZXNvbHZlSGVhZGVyc0NvbnN0cnVjdG9yKCk7XHJcbiAgICByZXR1cm4gKGlucHV0LCBpbml0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSAoX2EgPSAoeWllbGQgZ2V0QWNjZXNzVG9rZW4oKSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHN1cGFiYXNlS2V5O1xyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEhlYWRlcnNDb25zdHJ1Y3Rvcihpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQuaGVhZGVycyk7XHJcbiAgICAgICAgaWYgKCFoZWFkZXJzLmhhcygnYXBpa2V5JykpIHtcclxuICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2FwaWtleScsIHN1cGFiYXNlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFoZWFkZXJzLmhhcygnQXV0aG9yaXphdGlvbicpKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke2FjY2Vzc1Rva2VufWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmV0Y2goaW5wdXQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaW5pdCksIHsgaGVhZGVycyB9KSk7XHJcbiAgICB9KTtcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmV0Y2guanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/fetch.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/helpers.js": /*!***********************************************************************!*\ !*** ./node_modules/@supabase/supabase-js/dist/module/lib/helpers.js ***! \***********************************************************************/ /***/ (function(__unused_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 */ applySettingDefaults: function() { return /* binding */ applySettingDefaults; },\n/* harmony export */ ensureTrailingSlash: function() { return /* binding */ ensureTrailingSlash; },\n/* harmony export */ isBrowser: function() { return /* binding */ isBrowser; },\n/* harmony export */ uuid: function() { return /* binding */ uuid; }\n/* harmony export */ });\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nfunction uuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\nfunction ensureTrailingSlash(url) {\r\n return url.endsWith('/') ? url : url + '/';\r\n}\r\nconst isBrowser = () => typeof window !== 'undefined';\r\nfunction applySettingDefaults(options, defaults) {\r\n var _a, _b;\r\n const { db: dbOptions, auth: authOptions, realtime: realtimeOptions, global: globalOptions, } = options;\r\n const { db: DEFAULT_DB_OPTIONS, auth: DEFAULT_AUTH_OPTIONS, realtime: DEFAULT_REALTIME_OPTIONS, global: DEFAULT_GLOBAL_OPTIONS, } = defaults;\r\n const result = {\r\n db: Object.assign(Object.assign({}, DEFAULT_DB_OPTIONS), dbOptions),\r\n auth: Object.assign(Object.assign({}, DEFAULT_AUTH_OPTIONS), authOptions),\r\n realtime: Object.assign(Object.assign({}, DEFAULT_REALTIME_OPTIONS), realtimeOptions),\r\n global: Object.assign(Object.assign(Object.assign({}, DEFAULT_GLOBAL_OPTIONS), globalOptions), { headers: Object.assign(Object.assign({}, ((_a = DEFAULT_GLOBAL_OPTIONS === null || DEFAULT_GLOBAL_OPTIONS === void 0 ? void 0 : DEFAULT_GLOBAL_OPTIONS.headers) !== null && _a !== void 0 ? _a : {})), ((_b = globalOptions === null || globalOptions === void 0 ? void 0 : globalOptions.headers) !== null && _b !== void 0 ? _b : {})) }),\r\n accessToken: () => __awaiter(this, void 0, void 0, function* () { return ''; }),\r\n };\r\n if (options.accessToken) {\r\n result.accessToken = options.accessToken;\r\n }\r\n else {\r\n // hack around Required<>\r\n delete result.accessToken;\r\n }\r\n return result;\r\n}\r\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tb2R1bGUvbGliL2hlbHBlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0EsWUFBWSxzRkFBc0Y7QUFDbEcsWUFBWSwwSEFBMEg7QUFDdEk7QUFDQSwwQ0FBMEM7QUFDMUMsNENBQTRDO0FBQzVDLGdEQUFnRDtBQUNoRCw0REFBNEQsNkNBQTZDLHVDQUF1Qyw0SkFBNEosbUlBQW1JLElBQUk7QUFDbmIsMEVBQTBFLFlBQVk7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvbW9kdWxlL2xpYi9oZWxwZXJzLmpzPzdmZjYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgdmFyIHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVRyYWlsaW5nU2xhc2godXJsKSB7XHJcbiAgICByZXR1cm4gdXJsLmVuZHNXaXRoKCcvJykgPyB1cmwgOiB1cmwgKyAnLyc7XHJcbn1cclxuZXhwb3J0IGNvbnN0IGlzQnJvd3NlciA9ICgpID0+IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xyXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTZXR0aW5nRGVmYXVsdHMob3B0aW9ucywgZGVmYXVsdHMpIHtcclxuICAgIHZhciBfYSwgX2I7XHJcbiAgICBjb25zdCB7IGRiOiBkYk9wdGlvbnMsIGF1dGg6IGF1dGhPcHRpb25zLCByZWFsdGltZTogcmVhbHRpbWVPcHRpb25zLCBnbG9iYWw6IGdsb2JhbE9wdGlvbnMsIH0gPSBvcHRpb25zO1xyXG4gICAgY29uc3QgeyBkYjogREVGQVVMVF9EQl9PUFRJT05TLCBhdXRoOiBERUZBVUxUX0FVVEhfT1BUSU9OUywgcmVhbHRpbWU6IERFRkFVTFRfUkVBTFRJTUVfT1BUSU9OUywgZ2xvYmFsOiBERUZBVUxUX0dMT0JBTF9PUFRJT05TLCB9ID0gZGVmYXVsdHM7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7XHJcbiAgICAgICAgZGI6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9EQl9PUFRJT05TKSwgZGJPcHRpb25zKSxcclxuICAgICAgICBhdXRoOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQVVUSF9PUFRJT05TKSwgYXV0aE9wdGlvbnMpLFxyXG4gICAgICAgIHJlYWx0aW1lOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfUkVBTFRJTUVfT1BUSU9OUyksIHJlYWx0aW1lT3B0aW9ucyksXHJcbiAgICAgICAgZ2xvYmFsOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9HTE9CQUxfT1BUSU9OUyksIGdsb2JhbE9wdGlvbnMpLCB7IGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKChfYSA9IERFRkFVTFRfR0xPQkFMX09QVElPTlMgPT09IG51bGwgfHwgREVGQVVMVF9HTE9CQUxfT1BUSU9OUyA9PT0gdm9pZCAwID8gdm9pZCAwIDogREVGQVVMVF9HTE9CQUxfT1BUSU9OUy5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSkpLCAoKF9iID0gZ2xvYmFsT3B0aW9ucyA9PT0gbnVsbCB8fCBnbG9iYWxPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnbG9iYWxPcHRpb25zLmhlYWRlcnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9KSkgfSksXHJcbiAgICAgICAgYWNjZXNzVG9rZW46ICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgcmV0dXJuICcnOyB9KSxcclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgIHJlc3VsdC5hY2Nlc3NUb2tlbiA9IG9wdGlvbnMuYWNjZXNzVG9rZW47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBoYWNrIGFyb3VuZCBSZXF1aXJlZDw+XHJcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5hY2Nlc3NUb2tlbjtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/helpers.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/version.js": /*!***********************************************************************!*\ !*** ./node_modules/@supabase/supabase-js/dist/module/lib/version.js ***! \***********************************************************************/ /***/ (function(__unused_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 */ version: function() { return /* binding */ version; }\n/* harmony export */ });\nconst version = '2.52.0';\r\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9tb2R1bGUvbGliL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1AiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zdXBhYmFzZS1qcy9kaXN0L21vZHVsZS9saWIvdmVyc2lvbi5qcz8wODEwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuNTIuMCc7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/lib/version.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/gsap/CSSPlugin.js": /*!****************************************!*\ !*** ./node_modules/gsap/CSSPlugin.js ***! \****************************************/ /***/ (function(__unused_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 */ CSSPlugin: function() { return /* binding */ CSSPlugin; },\n/* harmony export */ _createElement: function() { return /* binding */ _createElement; },\n/* harmony export */ _getBBox: function() { return /* binding */ _getBBox; },\n/* harmony export */ checkPrefix: function() { return /* binding */ _checkPropPrefix; },\n/* harmony export */ \"default\": function() { return /* binding */ CSSPlugin; }\n/* harmony export */ });\n/* harmony import */ var _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gsap-core.js */ \"(app-pages-browser)/./node_modules/gsap/gsap-core.js\");\n/*!\r\n * CSSPlugin 3.13.0\r\n * https://gsap.com\r\n *\r\n * Copyright 2008-2025, GreenSock. All rights reserved.\r\n * Subject to the terms at https://gsap.com/standard-license\r\n * @author: Jack Doyle, jack@greensock.com\r\n*/\r\n\r\n/* eslint-disable */\r\n\r\n\r\nvar _win,\r\n _doc,\r\n _docElement,\r\n _pluginInitted,\r\n _tempDiv,\r\n _tempDivStyler,\r\n _recentSetterPlugin,\r\n _reverting,\r\n _windowExists = function _windowExists() {\r\n return typeof window !== \"undefined\";\r\n},\r\n _transformProps = {},\r\n _RAD2DEG = 180 / Math.PI,\r\n _DEG2RAD = Math.PI / 180,\r\n _atan2 = Math.atan2,\r\n _bigNum = 1e8,\r\n _capsExp = /([A-Z])/g,\r\n _horizontalExp = /(left|right|width|margin|padding|x)/i,\r\n _complexExp = /[\\s,\\(]\\S/,\r\n _propertyAliases = {\r\n autoAlpha: \"opacity,visibility\",\r\n scale: \"scaleX,scaleY\",\r\n alpha: \"opacity\"\r\n},\r\n _renderCSSProp = function _renderCSSProp(ratio, data) {\r\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\r\n},\r\n _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {\r\n return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\r\n},\r\n _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {\r\n return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);\r\n},\r\n //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0)\r\n_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {\r\n var value = data.s + data.c * ratio;\r\n data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);\r\n},\r\n _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {\r\n return data.set(data.t, data.p, ratio ? data.e : data.b, data);\r\n},\r\n _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {\r\n return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);\r\n},\r\n _setterCSSStyle = function _setterCSSStyle(target, property, value) {\r\n return target.style[property] = value;\r\n},\r\n _setterCSSProp = function _setterCSSProp(target, property, value) {\r\n return target.style.setProperty(property, value);\r\n},\r\n _setterTransform = function _setterTransform(target, property, value) {\r\n return target._gsap[property] = value;\r\n},\r\n _setterScale = function _setterScale(target, property, value) {\r\n return target._gsap.scaleX = target._gsap.scaleY = value;\r\n},\r\n _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {\r\n var cache = target._gsap;\r\n cache.scaleX = cache.scaleY = value;\r\n cache.renderTransform(ratio, cache);\r\n},\r\n _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {\r\n var cache = target._gsap;\r\n cache[property] = value;\r\n cache.renderTransform(ratio, cache);\r\n},\r\n _transformProp = \"transform\",\r\n _transformOriginProp = _transformProp + \"Origin\",\r\n _saveStyle = function _saveStyle(property, isNotCSS) {\r\n var _this = this;\r\n\r\n var target = this.target,\r\n style = target.style,\r\n cache = target._gsap;\r\n\r\n if (property in _transformProps && style) {\r\n this.tfm = this.tfm || {};\r\n\r\n if (property !== \"transform\") {\r\n property = _propertyAliases[property] || property;\r\n ~property.indexOf(\",\") ? property.split(\",\").forEach(function (a) {\r\n return _this.tfm[a] = _get(target, a);\r\n }) : this.tfm[property] = cache.x ? cache[property] : _get(target, property); // note: scale would map to \"scaleX,scaleY\", thus we loop and apply them both.\r\n\r\n property === _transformOriginProp && (this.tfm.zOrigin = cache.zOrigin);\r\n } else {\r\n return _propertyAliases.transform.split(\",\").forEach(function (p) {\r\n return _saveStyle.call(_this, p, isNotCSS);\r\n });\r\n }\r\n\r\n if (this.props.indexOf(_transformProp) >= 0) {\r\n return;\r\n }\r\n\r\n if (cache.svg) {\r\n this.svgo = target.getAttribute(\"data-svg-origin\");\r\n this.props.push(_transformOriginProp, isNotCSS, \"\");\r\n }\r\n\r\n property = _transformProp;\r\n }\r\n\r\n (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);\r\n},\r\n _removeIndependentTransforms = function _removeIndependentTransforms(style) {\r\n if (style.translate) {\r\n style.removeProperty(\"translate\");\r\n style.removeProperty(\"scale\");\r\n style.removeProperty(\"rotate\");\r\n }\r\n},\r\n _revertStyle = function _revertStyle() {\r\n var props = this.props,\r\n target = this.target,\r\n style = target.style,\r\n cache = target._gsap,\r\n i,\r\n p;\r\n\r\n for (i = 0; i < props.length; i += 3) {\r\n // stored like this: property, isNotCSS, value\r\n if (!props[i + 1]) {\r\n props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === \"--\" ? props[i] : props[i].replace(_capsExp, \"-$1\").toLowerCase());\r\n } else if (props[i + 1] === 2) {\r\n // non-CSS value (function-based)\r\n target[props[i]](props[i + 2]);\r\n } else {\r\n // non-CSS value (not function-based)\r\n target[props[i]] = props[i + 2];\r\n }\r\n }\r\n\r\n if (this.tfm) {\r\n for (p in this.tfm) {\r\n cache[p] = this.tfm[p];\r\n }\r\n\r\n if (cache.svg) {\r\n cache.renderTransform();\r\n target.setAttribute(\"data-svg-origin\", this.svgo || \"\");\r\n }\r\n\r\n i = _reverting();\r\n\r\n if ((!i || !i.isStart) && !style[_transformProp]) {\r\n _removeIndependentTransforms(style);\r\n\r\n if (cache.zOrigin && style[_transformOriginProp]) {\r\n style[_transformOriginProp] += \" \" + cache.zOrigin + \"px\"; // since we're uncaching, we must put the zOrigin back into the transformOrigin so that we can pull it out accurately when we parse again. Otherwise, we'd lose the z portion of the origin since we extract it to protect from Safari bugs.\r\n\r\n cache.zOrigin = 0;\r\n cache.renderTransform();\r\n }\r\n\r\n cache.uncache = 1; // if it's a startAt that's being reverted in the _initTween() of the core, we don't need to uncache transforms. This is purely a performance optimization.\r\n }\r\n }\r\n},\r\n _getStyleSaver = function _getStyleSaver(target, properties) {\r\n var saver = {\r\n target: target,\r\n props: [],\r\n revert: _revertStyle,\r\n save: _saveStyle\r\n };\r\n target._gsap || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.getCache(target); // just make sure there's a _gsap cache defined because we read from it in _saveStyle() and it's more efficient to just check it here once.\r\n\r\n properties && target.style && target.nodeType && properties.split(\",\").forEach(function (p) {\r\n return saver.save(p);\r\n }); // make sure it's a DOM node too.\r\n\r\n return saver;\r\n},\r\n _supports3D,\r\n _createElement = function _createElement(type, ns) {\r\n var e = _doc.createElementNS ? _doc.createElementNS((ns || \"http://www.w3.org/1999/xhtml\").replace(/^https/, \"http\"), type) : _doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making \"style\" inaccessible.\r\n\r\n return e && e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://gsap.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\r\n},\r\n _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {\r\n var cs = getComputedStyle(target);\r\n return cs[property] || cs.getPropertyValue(property.replace(_capsExp, \"-$1\").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || \"\"; //css variables may not need caps swapped out for dashes and lowercase.\r\n},\r\n _prefixes = \"O,Moz,ms,Ms,Webkit\".split(\",\"),\r\n _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {\r\n var e = element || _tempDiv,\r\n s = e.style,\r\n i = 5;\r\n\r\n if (property in s && !preferPrefix) {\r\n return property;\r\n }\r\n\r\n property = property.charAt(0).toUpperCase() + property.substr(1);\r\n\r\n while (i-- && !(_prefixes[i] + property in s)) {}\r\n\r\n return i < 0 ? null : (i === 3 ? \"ms\" : i >= 0 ? _prefixes[i] : \"\") + property;\r\n},\r\n _initCore = function _initCore() {\r\n if (_windowExists() && window.document) {\r\n _win = window;\r\n _doc = _win.document;\r\n _docElement = _doc.documentElement;\r\n _tempDiv = _createElement(\"div\") || {\r\n style: {}\r\n };\r\n _tempDivStyler = _createElement(\"div\");\r\n _transformProp = _checkPropPrefix(_transformProp);\r\n _transformOriginProp = _transformProp + \"Origin\";\r\n _tempDiv.style.cssText = \"border-width:0;line-height:0;position:absolute;padding:0\"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets.\r\n\r\n _supports3D = !!_checkPropPrefix(\"perspective\");\r\n _reverting = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.reverting;\r\n _pluginInitted = 1;\r\n }\r\n},\r\n _getReparentedCloneBBox = function _getReparentedCloneBBox(target) {\r\n //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a element and/or . We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\r\n var owner = target.ownerSVGElement,\r\n svg = _createElement(\"svg\", owner && owner.getAttribute(\"xmlns\") || \"http://www.w3.org/2000/svg\"),\r\n clone = target.cloneNode(true),\r\n bbox;\r\n\r\n clone.style.display = \"block\";\r\n svg.appendChild(clone);\r\n\r\n _docElement.appendChild(svg);\r\n\r\n try {\r\n bbox = clone.getBBox();\r\n } catch (e) {}\r\n\r\n svg.removeChild(clone);\r\n\r\n _docElement.removeChild(svg);\r\n\r\n return bbox;\r\n},\r\n _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {\r\n var i = attributesArray.length;\r\n\r\n while (i--) {\r\n if (target.hasAttribute(attributesArray[i])) {\r\n return target.getAttribute(attributesArray[i]);\r\n }\r\n }\r\n},\r\n _getBBox = function _getBBox(target) {\r\n var bounds, cloned;\r\n\r\n try {\r\n bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a or ). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\r\n } catch (error) {\r\n bounds = _getReparentedCloneBBox(target);\r\n cloned = 1;\r\n }\r\n\r\n bounds && (bounds.width || bounds.height) || cloned || (bounds = _getReparentedCloneBBox(target)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\r\n\r\n return bounds && !bounds.width && !bounds.x && !bounds.y ? {\r\n x: +_getAttributeFallbacks(target, [\"x\", \"cx\", \"x1\"]) || 0,\r\n y: +_getAttributeFallbacks(target, [\"y\", \"cy\", \"y1\"]) || 0,\r\n width: 0,\r\n height: 0\r\n } : bounds;\r\n},\r\n _isSVG = function _isSVG(e) {\r\n return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\r\n},\r\n //reports if the element is an SVG on which getBBox() actually works\r\n_removeProperty = function _removeProperty(target, property) {\r\n if (property) {\r\n var style = target.style,\r\n first2Chars;\r\n\r\n if (property in _transformProps && property !== _transformOriginProp) {\r\n property = _transformProp;\r\n }\r\n\r\n if (style.removeProperty) {\r\n first2Chars = property.substr(0, 2);\r\n\r\n if (first2Chars === \"ms\" || property.substr(0, 6) === \"webkit\") {\r\n //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\r\n property = \"-\" + property;\r\n }\r\n\r\n style.removeProperty(first2Chars === \"--\" ? property : property.replace(_capsExp, \"-$1\").toLowerCase());\r\n } else {\r\n //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\r\n style.removeAttribute(property);\r\n }\r\n }\r\n},\r\n _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {\r\n var pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);\r\n plugin._pt = pt;\r\n pt.b = beginning;\r\n pt.e = end;\r\n\r\n plugin._props.push(property);\r\n\r\n return pt;\r\n},\r\n _nonConvertibleUnits = {\r\n deg: 1,\r\n rad: 1,\r\n turn: 1\r\n},\r\n _nonStandardLayouts = {\r\n grid: 1,\r\n flex: 1\r\n},\r\n //takes a single value like 20px and converts it to the unit specified, like \"%\", returning only the numeric amount.\r\n_convertToUnit = function _convertToUnit(target, property, value, unit) {\r\n var curValue = parseFloat(value) || 0,\r\n curUnit = (value + \"\").trim().substr((curValue + \"\").length) || \"px\",\r\n // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim()\r\n style = _tempDiv.style,\r\n horizontal = _horizontalExp.test(property),\r\n isRootSVG = target.tagName.toLowerCase() === \"svg\",\r\n measureProperty = (isRootSVG ? \"client\" : \"offset\") + (horizontal ? \"Width\" : \"Height\"),\r\n amount = 100,\r\n toPixels = unit === \"px\",\r\n toPercent = unit === \"%\",\r\n px,\r\n parent,\r\n cache,\r\n isSVG;\r\n\r\n if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {\r\n return curValue;\r\n }\r\n\r\n curUnit !== \"px\" && !toPixels && (curValue = _convertToUnit(target, property, value, \"px\"));\r\n isSVG = target.getCTM && _isSVG(target);\r\n\r\n if ((toPercent || curUnit === \"%\") && (_transformProps[property] || ~property.indexOf(\"adius\"))) {\r\n px = isSVG ? target.getBBox()[horizontal ? \"width\" : \"height\"] : target[measureProperty];\r\n return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(toPercent ? curValue / px * amount : curValue / 100 * px);\r\n }\r\n\r\n style[horizontal ? \"width\" : \"height\"] = amount + (toPixels ? curUnit : unit);\r\n parent = unit !== \"rem\" && ~property.indexOf(\"adius\") || unit === \"em\" && target.appendChild && !isRootSVG ? target : target.parentNode;\r\n\r\n if (isSVG) {\r\n parent = (target.ownerSVGElement || {}).parentNode;\r\n }\r\n\r\n if (!parent || parent === _doc || !parent.appendChild) {\r\n parent = _doc.body;\r\n }\r\n\r\n cache = parent._gsap;\r\n\r\n if (cache && toPercent && cache.width && horizontal && cache.time === _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._ticker.time && !cache.uncache) {\r\n return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(curValue / cache.width * amount);\r\n } else {\r\n if (toPercent && (property === \"height\" || property === \"width\")) {\r\n // if we're dealing with width/height that's inside a container with padding and/or it's a flexbox/grid container, we must apply it to the target itself rather than the _tempDiv in order to ensure complete accuracy, factoring in the parent's padding.\r\n var v = target.style[property];\r\n target.style[property] = amount + unit;\r\n px = target[measureProperty];\r\n v ? target.style[property] = v : _removeProperty(target, property);\r\n } else {\r\n (toPercent || curUnit === \"%\") && !_nonStandardLayouts[_getComputedProperty(parent, \"display\")] && (style.position = _getComputedProperty(target, \"position\"));\r\n parent === target && (style.position = \"static\"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that.\r\n\r\n parent.appendChild(_tempDiv);\r\n px = _tempDiv[measureProperty];\r\n parent.removeChild(_tempDiv);\r\n style.position = \"absolute\";\r\n }\r\n\r\n if (horizontal && toPercent) {\r\n cache = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getCache)(parent);\r\n cache.time = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._ticker.time;\r\n cache.width = parent[measureProperty];\r\n }\r\n }\r\n\r\n return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);\r\n},\r\n _get = function _get(target, property, unit, uncache) {\r\n var value;\r\n _pluginInitted || _initCore();\r\n\r\n if (property in _propertyAliases && property !== \"transform\") {\r\n property = _propertyAliases[property];\r\n\r\n if (~property.indexOf(\",\")) {\r\n property = property.split(\",\")[0];\r\n }\r\n }\r\n\r\n if (_transformProps[property] && property !== \"transform\") {\r\n value = _parseTransform(target, uncache);\r\n value = property !== \"transformOrigin\" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + \" \" + value.zOrigin + \"px\";\r\n } else {\r\n value = target.style[property];\r\n\r\n if (!value || value === \"auto\" || uncache || ~(value + \"\").indexOf(\"calc(\")) {\r\n value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getProperty)(target, property) || (property === \"opacity\" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like borderTopLeftRadius\r\n }\r\n }\r\n\r\n return unit && !~(value + \"\").trim().indexOf(\" \") ? _convertToUnit(target, property, value, unit) + unit : value;\r\n},\r\n _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {\r\n // note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\r\n if (!start || start === \"none\") {\r\n // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style (\"clipPath\" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as \"none\" whereas WebkitClipPath reports accurately like \"ellipse(100% 0% at 50% 0%)\", so in this case we must SWITCH to using the prefixed property instead. See https://gsap.com/forums/topic/18310-clippath-doesnt-work-on-ios/\r\n var p = _checkPropPrefix(prop, target, 1),\r\n s = p && _getComputedProperty(target, p, 1);\r\n\r\n if (s && s !== start) {\r\n prop = p;\r\n start = s;\r\n } else if (prop === \"borderColor\") {\r\n start = _getComputedProperty(target, \"borderTopColor\"); // Firefox bug: always reports \"borderColor\" as \"\", so we must fall back to borderTopColor. See https://gsap.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/\r\n }\r\n }\r\n\r\n var pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, target.style, prop, 0, 1, _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._renderComplexString),\r\n index = 0,\r\n matchIndex = 0,\r\n a,\r\n result,\r\n startValues,\r\n startNum,\r\n color,\r\n startValue,\r\n endValue,\r\n endNum,\r\n chunk,\r\n endUnit,\r\n startUnit,\r\n endValues;\r\n pt.b = start;\r\n pt.e = end;\r\n start += \"\"; // ensure values are strings\r\n\r\n end += \"\";\r\n\r\n if (end.substring(0, 6) === \"var(--\") {\r\n end = _getComputedProperty(target, end.substring(4, end.indexOf(\")\")));\r\n }\r\n\r\n if (end === \"auto\") {\r\n startValue = target.style[prop];\r\n target.style[prop] = end;\r\n end = _getComputedProperty(target, prop) || end;\r\n startValue ? target.style[prop] = startValue : _removeProperty(target, prop);\r\n }\r\n\r\n a = [start, end];\r\n\r\n (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorStringFilter)(a); // pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow().\r\n\r\n\r\n start = a[0];\r\n end = a[1];\r\n startValues = start.match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp) || [];\r\n endValues = end.match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp) || [];\r\n\r\n if (endValues.length) {\r\n while (result = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp.exec(end)) {\r\n endValue = result[0];\r\n chunk = end.substring(index, result.index);\r\n\r\n if (color) {\r\n color = (color + 1) % 5;\r\n } else if (chunk.substr(-5) === \"rgba(\" || chunk.substr(-5) === \"hsla(\") {\r\n color = 1;\r\n }\r\n\r\n if (endValue !== (startValue = startValues[matchIndex++] || \"\")) {\r\n startNum = parseFloat(startValue) || 0;\r\n startUnit = startValue.substr((startNum + \"\").length);\r\n endValue.charAt(1) === \"=\" && (endValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, endValue) + startUnit);\r\n endNum = parseFloat(endValue);\r\n endUnit = endValue.substr((endNum + \"\").length);\r\n index = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp.lastIndex - endUnit.length;\r\n\r\n if (!endUnit) {\r\n //if something like \"perspective:300\" is passed in and we must add a unit to the end\r\n endUnit = endUnit || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[prop] || startUnit;\r\n\r\n if (index === end.length) {\r\n end += endUnit;\r\n pt.e += endUnit;\r\n }\r\n }\r\n\r\n if (startUnit !== endUnit) {\r\n startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;\r\n } // these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\r\n\r\n\r\n pt._pt = {\r\n _next: pt._pt,\r\n p: chunk || matchIndex === 1 ? chunk : \",\",\r\n //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\r\n s: startNum,\r\n c: endNum - startNum,\r\n m: color && color < 4 || prop === \"zIndex\" ? Math.round : 0\r\n };\r\n }\r\n }\r\n\r\n pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\r\n } else {\r\n pt.r = prop === \"display\" && end === \"none\" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;\r\n }\r\n\r\n _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\r\n\r\n this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus \"this\" would refer to the plugin.\r\n\r\n return pt;\r\n},\r\n _keywordToPercent = {\r\n top: \"0%\",\r\n bottom: \"100%\",\r\n left: \"0%\",\r\n right: \"100%\",\r\n center: \"50%\"\r\n},\r\n _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {\r\n var split = value.split(\" \"),\r\n x = split[0],\r\n y = split[1] || \"50%\";\r\n\r\n if (x === \"top\" || x === \"bottom\" || y === \"left\" || y === \"right\") {\r\n //the user provided them in the wrong order, so flip them\r\n value = x;\r\n x = y;\r\n y = value;\r\n }\r\n\r\n split[0] = _keywordToPercent[x] || x;\r\n split[1] = _keywordToPercent[y] || y;\r\n return split.join(\" \");\r\n},\r\n _renderClearProps = function _renderClearProps(ratio, data) {\r\n if (data.tween && data.tween._time === data.tween._dur) {\r\n var target = data.t,\r\n style = target.style,\r\n props = data.u,\r\n cache = target._gsap,\r\n prop,\r\n clearTransforms,\r\n i;\r\n\r\n if (props === \"all\" || props === true) {\r\n style.cssText = \"\";\r\n clearTransforms = 1;\r\n } else {\r\n props = props.split(\",\");\r\n i = props.length;\r\n\r\n while (--i > -1) {\r\n prop = props[i];\r\n\r\n if (_transformProps[prop]) {\r\n clearTransforms = 1;\r\n prop = prop === \"transformOrigin\" ? _transformOriginProp : _transformProp;\r\n }\r\n\r\n _removeProperty(target, prop);\r\n }\r\n }\r\n\r\n if (clearTransforms) {\r\n _removeProperty(target, _transformProp);\r\n\r\n if (cache) {\r\n cache.svg && target.removeAttribute(\"transform\");\r\n style.scale = style.rotate = style.translate = \"none\";\r\n\r\n _parseTransform(target, 1); // force all the cached values back to \"normal\"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values.\r\n\r\n\r\n cache.uncache = 1;\r\n\r\n _removeIndependentTransforms(style);\r\n }\r\n }\r\n }\r\n},\r\n // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list.\r\n_specialProps = {\r\n clearProps: function clearProps(plugin, target, property, endValue, tween) {\r\n if (tween.data !== \"isFromStart\") {\r\n var pt = plugin._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);\r\n pt.u = endValue;\r\n pt.pr = -10;\r\n pt.tween = tween;\r\n\r\n plugin._props.push(property);\r\n\r\n return 1;\r\n }\r\n }\r\n /* className feature (about 0.4kb gzipped).\r\n , className(plugin, target, property, endValue, tween) {\r\n \tlet _renderClassName = (ratio, data) => {\r\n \t\t\tdata.css.render(ratio, data.css);\r\n \t\t\tif (!ratio || ratio === 1) {\r\n \t\t\t\tlet inline = data.rmv,\r\n \t\t\t\t\ttarget = data.t,\r\n \t\t\t\t\tp;\r\n \t\t\t\ttarget.setAttribute(\"class\", ratio ? data.e : data.b);\r\n \t\t\t\tfor (p in inline) {\r\n \t\t\t\t\t_removeProperty(target, p);\r\n \t\t\t\t}\r\n \t\t\t}\r\n \t\t},\r\n \t\t_getAllStyles = (target) => {\r\n \t\t\tlet styles = {},\r\n \t\t\t\tcomputed = getComputedStyle(target),\r\n \t\t\t\tp;\r\n \t\t\tfor (p in computed) {\r\n \t\t\t\tif (isNaN(p) && p !== \"cssText\" && p !== \"length\") {\r\n \t\t\t\t\tstyles[p] = computed[p];\r\n \t\t\t\t}\r\n \t\t\t}\r\n \t\t\t_setDefaults(styles, _parseTransform(target, 1));\r\n \t\t\treturn styles;\r\n \t\t},\r\n \t\tstartClassList = target.getAttribute(\"class\"),\r\n \t\tstyle = target.style,\r\n \t\tcssText = style.cssText,\r\n \t\tcache = target._gsap,\r\n \t\tclassPT = cache.classPT,\r\n \t\tinlineToRemoveAtEnd = {},\r\n \t\tdata = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== \"=\") ? endValue : startClassList.replace(new RegExp(\"(?:\\\\s|^)\" + endValue.substr(2) + \"(?![\\\\w-])\"), \"\") + ((endValue.charAt(0) === \"+\") ? \" \" + endValue.substr(2) : \"\")},\r\n \t\tchangingVars = {},\r\n \t\tstartVars = _getAllStyles(target),\r\n \t\ttransformRelated = /(transform|perspective)/i,\r\n \t\tendVars, p;\r\n \tif (classPT) {\r\n \t\tclassPT.r(1, classPT.d);\r\n \t\t_removeLinkedListItem(classPT.d.plugin, classPT, \"_pt\");\r\n \t}\r\n \ttarget.setAttribute(\"class\", data.e);\r\n \tendVars = _getAllStyles(target, true);\r\n \ttarget.setAttribute(\"class\", startClassList);\r\n \tfor (p in endVars) {\r\n \t\tif (endVars[p] !== startVars[p] && !transformRelated.test(p)) {\r\n \t\t\tchangingVars[p] = endVars[p];\r\n \t\t\tif (!style[p] && style[p] !== \"0\") {\r\n \t\t\t\tinlineToRemoveAtEnd[p] = 1;\r\n \t\t\t}\r\n \t\t}\r\n \t}\r\n \tcache.classPT = plugin._pt = new PropTween(plugin._pt, target, \"className\", 0, 0, _renderClassName, data, 0, -11);\r\n \tif (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://gsap.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\r\n \t\tstyle.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\r\n \t}\r\n \t_parseTransform(target, true); //to clear the caching of transforms\r\n \tdata.css = new gsap.plugins.css();\r\n \tdata.css.init(target, changingVars, tween);\r\n \tplugin._props.push(...data.css._props);\r\n \treturn 1;\r\n }\r\n */\r\n\r\n},\r\n\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * TRANSFORMS\r\n * --------------------------------------------------------------------------------------\r\n */\r\n_identity2DMatrix = [1, 0, 0, 1, 0, 0],\r\n _rotationalProperties = {},\r\n _isNullTransform = function _isNullTransform(value) {\r\n return value === \"matrix(1, 0, 0, 1, 0, 0)\" || value === \"none\" || !value;\r\n},\r\n _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {\r\n var matrixString = _getComputedProperty(target, _transformProp);\r\n\r\n return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numExp).map(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round);\r\n},\r\n _getMatrix = function _getMatrix(target, force2D) {\r\n var cache = target._gsap || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getCache)(target),\r\n style = target.style,\r\n matrix = _getComputedTransformMatrixAsArray(target),\r\n parent,\r\n nextSibling,\r\n temp,\r\n addedToDOM;\r\n\r\n if (cache.svg && target.getAttribute(\"transform\")) {\r\n temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like \"translate(50,60) rotate(135,0,0)\" are parsed because it mashes it into a matrix.\r\n\r\n matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];\r\n return matrix.join(\",\") === \"1,0,0,1,0,0\" ? _identity2DMatrix : matrix;\r\n } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {\r\n //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\r\n //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\r\n temp = style.display;\r\n style.display = \"block\";\r\n parent = target.parentNode;\r\n\r\n if (!parent || !target.offsetParent && !target.getBoundingClientRect().width) {\r\n // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375. Note: position: fixed elements report a null offsetParent but they could also be invisible because they're in an ancestor with display: none, so we check getBoundingClientRect(). We only want to alter the DOM if we absolutely have to because it can cause iframe content to reload, like a Vimeo video.\r\n addedToDOM = 1; //flag\r\n\r\n nextSibling = target.nextElementSibling;\r\n\r\n _docElement.appendChild(target); //we must add it to the DOM in order to get values properly\r\n\r\n }\r\n\r\n matrix = _getComputedTransformMatrixAsArray(target);\r\n temp ? style.display = temp : _removeProperty(target, \"display\");\r\n\r\n if (addedToDOM) {\r\n nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);\r\n }\r\n }\r\n\r\n return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;\r\n},\r\n _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {\r\n var cache = target._gsap,\r\n matrix = matrixArray || _getMatrix(target, true),\r\n xOriginOld = cache.xOrigin || 0,\r\n yOriginOld = cache.yOrigin || 0,\r\n xOffsetOld = cache.xOffset || 0,\r\n yOffsetOld = cache.yOffset || 0,\r\n a = matrix[0],\r\n b = matrix[1],\r\n c = matrix[2],\r\n d = matrix[3],\r\n tx = matrix[4],\r\n ty = matrix[5],\r\n originSplit = origin.split(\" \"),\r\n xOrigin = parseFloat(originSplit[0]) || 0,\r\n yOrigin = parseFloat(originSplit[1]) || 0,\r\n bounds,\r\n determinant,\r\n x,\r\n y;\r\n\r\n if (!originIsAbsolute) {\r\n bounds = _getBBox(target);\r\n xOrigin = bounds.x + (~originSplit[0].indexOf(\"%\") ? xOrigin / 100 * bounds.width : xOrigin);\r\n yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf(\"%\") ? yOrigin / 100 * bounds.height : yOrigin); // if (!(\"xOrigin\" in cache) && (xOrigin || yOrigin)) { // added in 3.12.3, reverted in 3.12.4; requires more exploration\r\n // \txOrigin -= bounds.x;\r\n // \tyOrigin -= bounds.y;\r\n // }\r\n } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {\r\n //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\r\n x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;\r\n y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;\r\n xOrigin = x;\r\n yOrigin = y; // theory: we only had to do this for smoothing and it assumes that the previous one was not originIsAbsolute.\r\n }\r\n\r\n if (smooth || smooth !== false && cache.smooth) {\r\n tx = xOrigin - xOriginOld;\r\n ty = yOrigin - yOriginOld;\r\n cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;\r\n cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;\r\n } else {\r\n cache.xOffset = cache.yOffset = 0;\r\n }\r\n\r\n cache.xOrigin = xOrigin;\r\n cache.yOrigin = yOrigin;\r\n cache.smooth = !!smooth;\r\n cache.origin = origin;\r\n cache.originIsAbsolute = !!originIsAbsolute;\r\n target.style[_transformOriginProp] = \"0px 0px\"; //otherwise, if someone sets an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value).\r\n\r\n if (pluginToAddPropTweensTo) {\r\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOrigin\", xOriginOld, xOrigin);\r\n\r\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOrigin\", yOriginOld, yOrigin);\r\n\r\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOffset\", xOffsetOld, cache.xOffset);\r\n\r\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOffset\", yOffsetOld, cache.yOffset);\r\n }\r\n\r\n target.setAttribute(\"data-svg-origin\", xOrigin + \" \" + yOrigin);\r\n},\r\n _parseTransform = function _parseTransform(target, uncache) {\r\n var cache = target._gsap || new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.GSCache(target);\r\n\r\n if (\"x\" in cache && !uncache && !cache.uncache) {\r\n return cache;\r\n }\r\n\r\n var style = target.style,\r\n invertedScaleX = cache.scaleX < 0,\r\n px = \"px\",\r\n deg = \"deg\",\r\n cs = getComputedStyle(target),\r\n origin = _getComputedProperty(target, _transformOriginProp) || \"0\",\r\n x,\r\n y,\r\n z,\r\n scaleX,\r\n scaleY,\r\n rotation,\r\n rotationX,\r\n rotationY,\r\n skewX,\r\n skewY,\r\n perspective,\r\n xOrigin,\r\n yOrigin,\r\n matrix,\r\n angle,\r\n cos,\r\n sin,\r\n a,\r\n b,\r\n c,\r\n d,\r\n a12,\r\n a22,\r\n t1,\r\n t2,\r\n t3,\r\n a13,\r\n a23,\r\n a33,\r\n a42,\r\n a43,\r\n a32;\r\n x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;\r\n scaleX = scaleY = 1;\r\n cache.svg = !!(target.getCTM && _isSVG(target));\r\n\r\n if (cs.translate) {\r\n // accommodate independent transforms by combining them into normal ones.\r\n if (cs.translate !== \"none\" || cs.scale !== \"none\" || cs.rotate !== \"none\") {\r\n style[_transformProp] = (cs.translate !== \"none\" ? \"translate3d(\" + (cs.translate + \" 0 0\").split(\" \").slice(0, 3).join(\", \") + \") \" : \"\") + (cs.rotate !== \"none\" ? \"rotate(\" + cs.rotate + \") \" : \"\") + (cs.scale !== \"none\" ? \"scale(\" + cs.scale.split(\" \").join(\",\") + \") \" : \"\") + (cs[_transformProp] !== \"none\" ? cs[_transformProp] : \"\");\r\n }\r\n\r\n style.scale = style.rotate = style.translate = \"none\";\r\n }\r\n\r\n matrix = _getMatrix(target, cache.svg);\r\n\r\n if (cache.svg) {\r\n if (cache.uncache) {\r\n // if cache.uncache is true (and maybe if origin is 0,0), we need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + \"px \" + (cache.yOrigin - bbox.y) + \"px\". Previously we let the data-svg-origin stay instead, but when introducing revert(), it complicated things.\r\n t2 = target.getBBox();\r\n origin = cache.xOrigin - t2.x + \"px \" + (cache.yOrigin - t2.y) + \"px\";\r\n t1 = \"\";\r\n } else {\r\n t1 = !uncache && target.getAttribute(\"data-svg-origin\"); // Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly.\r\n }\r\n\r\n _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);\r\n }\r\n\r\n xOrigin = cache.xOrigin || 0;\r\n yOrigin = cache.yOrigin || 0;\r\n\r\n if (matrix !== _identity2DMatrix) {\r\n a = matrix[0]; //a11\r\n\r\n b = matrix[1]; //a21\r\n\r\n c = matrix[2]; //a31\r\n\r\n d = matrix[3]; //a41\r\n\r\n x = a12 = matrix[4];\r\n y = a22 = matrix[5]; //2D matrix\r\n\r\n if (matrix.length === 6) {\r\n scaleX = Math.sqrt(a * a + b * b);\r\n scaleY = Math.sqrt(d * d + c * c);\r\n rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\r\n\r\n skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;\r\n skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));\r\n\r\n if (cache.svg) {\r\n x -= xOrigin - (xOrigin * a + yOrigin * c);\r\n y -= yOrigin - (xOrigin * b + yOrigin * d);\r\n } //3D matrix\r\n\r\n } else {\r\n a32 = matrix[6];\r\n a42 = matrix[7];\r\n a13 = matrix[8];\r\n a23 = matrix[9];\r\n a33 = matrix[10];\r\n a43 = matrix[11];\r\n x = matrix[12];\r\n y = matrix[13];\r\n z = matrix[14];\r\n angle = _atan2(a32, a33);\r\n rotationX = angle * _RAD2DEG; //rotationX\r\n\r\n if (angle) {\r\n cos = Math.cos(-angle);\r\n sin = Math.sin(-angle);\r\n t1 = a12 * cos + a13 * sin;\r\n t2 = a22 * cos + a23 * sin;\r\n t3 = a32 * cos + a33 * sin;\r\n a13 = a12 * -sin + a13 * cos;\r\n a23 = a22 * -sin + a23 * cos;\r\n a33 = a32 * -sin + a33 * cos;\r\n a43 = a42 * -sin + a43 * cos;\r\n a12 = t1;\r\n a22 = t2;\r\n a32 = t3;\r\n } //rotationY\r\n\r\n\r\n angle = _atan2(-c, a33);\r\n rotationY = angle * _RAD2DEG;\r\n\r\n if (angle) {\r\n cos = Math.cos(-angle);\r\n sin = Math.sin(-angle);\r\n t1 = a * cos - a13 * sin;\r\n t2 = b * cos - a23 * sin;\r\n t3 = c * cos - a33 * sin;\r\n a43 = d * sin + a43 * cos;\r\n a = t1;\r\n b = t2;\r\n c = t3;\r\n } //rotationZ\r\n\r\n\r\n angle = _atan2(b, a);\r\n rotation = angle * _RAD2DEG;\r\n\r\n if (angle) {\r\n cos = Math.cos(angle);\r\n sin = Math.sin(angle);\r\n t1 = a * cos + b * sin;\r\n t2 = a12 * cos + a22 * sin;\r\n b = b * cos - a * sin;\r\n a22 = a22 * cos - a12 * sin;\r\n a = t1;\r\n a12 = t2;\r\n }\r\n\r\n if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {\r\n //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\r\n rotationX = rotation = 0;\r\n rotationY = 180 - rotationY;\r\n }\r\n\r\n scaleX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(Math.sqrt(a * a + b * b + c * c));\r\n scaleY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(Math.sqrt(a22 * a22 + a32 * a32));\r\n angle = _atan2(a12, a22);\r\n skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;\r\n perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;\r\n }\r\n\r\n if (cache.svg) {\r\n //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline).\r\n t1 = target.getAttribute(\"transform\");\r\n cache.forceCSS = target.setAttribute(\"transform\", \"\") || !_isNullTransform(_getComputedProperty(target, _transformProp));\r\n t1 && target.setAttribute(\"transform\", t1);\r\n }\r\n }\r\n\r\n if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\r\n if (invertedScaleX) {\r\n scaleX *= -1;\r\n skewX += rotation <= 0 ? 180 : -180;\r\n rotation += rotation <= 0 ? 180 : -180;\r\n } else {\r\n scaleY *= -1;\r\n skewX += skewX <= 0 ? 180 : -180;\r\n }\r\n }\r\n\r\n uncache = uncache || cache.uncache;\r\n cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;\r\n cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;\r\n cache.z = z + px;\r\n cache.scaleX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(scaleX);\r\n cache.scaleY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(scaleY);\r\n cache.rotation = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotation) + deg;\r\n cache.rotationX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotationX) + deg;\r\n cache.rotationY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotationY) + deg;\r\n cache.skewX = skewX + deg;\r\n cache.skewY = skewY + deg;\r\n cache.transformPerspective = perspective + px;\r\n\r\n if (cache.zOrigin = parseFloat(origin.split(\" \")[2]) || !uncache && cache.zOrigin || 0) {\r\n style[_transformOriginProp] = _firstTwoOnly(origin);\r\n }\r\n\r\n cache.xOffset = cache.yOffset = 0;\r\n cache.force3D = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.force3D;\r\n cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;\r\n cache.uncache = 0;\r\n return cache;\r\n},\r\n _firstTwoOnly = function _firstTwoOnly(value) {\r\n return (value = value.split(\" \"))[0] + \" \" + value[1];\r\n},\r\n //for handling transformOrigin values, stripping out the 3rd dimension\r\n_addPxTranslate = function _addPxTranslate(target, start, value) {\r\n var unit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(start);\r\n return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(parseFloat(start) + parseFloat(_convertToUnit(target, \"x\", value + \"px\", unit))) + unit;\r\n},\r\n _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {\r\n cache.z = \"0px\";\r\n cache.rotationY = cache.rotationX = \"0deg\";\r\n cache.force3D = 0;\r\n\r\n _renderCSSTransforms(ratio, cache);\r\n},\r\n _zeroDeg = \"0deg\",\r\n _zeroPx = \"0px\",\r\n _endParenthesis = \") \",\r\n _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {\r\n var _ref = cache || this,\r\n xPercent = _ref.xPercent,\r\n yPercent = _ref.yPercent,\r\n x = _ref.x,\r\n y = _ref.y,\r\n z = _ref.z,\r\n rotation = _ref.rotation,\r\n rotationY = _ref.rotationY,\r\n rotationX = _ref.rotationX,\r\n skewX = _ref.skewX,\r\n skewY = _ref.skewY,\r\n scaleX = _ref.scaleX,\r\n scaleY = _ref.scaleY,\r\n transformPerspective = _ref.transformPerspective,\r\n force3D = _ref.force3D,\r\n target = _ref.target,\r\n zOrigin = _ref.zOrigin,\r\n transforms = \"\",\r\n use3D = force3D === \"auto\" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually)\r\n\r\n\r\n if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {\r\n var angle = parseFloat(rotationY) * _DEG2RAD,\r\n a13 = Math.sin(angle),\r\n a33 = Math.cos(angle),\r\n cos;\r\n\r\n angle = parseFloat(rotationX) * _DEG2RAD;\r\n cos = Math.cos(angle);\r\n x = _addPxTranslate(target, x, a13 * cos * -zOrigin);\r\n y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);\r\n z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);\r\n }\r\n\r\n if (transformPerspective !== _zeroPx) {\r\n transforms += \"perspective(\" + transformPerspective + _endParenthesis;\r\n }\r\n\r\n if (xPercent || yPercent) {\r\n transforms += \"translate(\" + xPercent + \"%, \" + yPercent + \"%) \";\r\n }\r\n\r\n if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {\r\n transforms += z !== _zeroPx || use3D ? \"translate3d(\" + x + \", \" + y + \", \" + z + \") \" : \"translate(\" + x + \", \" + y + _endParenthesis;\r\n }\r\n\r\n if (rotation !== _zeroDeg) {\r\n transforms += \"rotate(\" + rotation + _endParenthesis;\r\n }\r\n\r\n if (rotationY !== _zeroDeg) {\r\n transforms += \"rotateY(\" + rotationY + _endParenthesis;\r\n }\r\n\r\n if (rotationX !== _zeroDeg) {\r\n transforms += \"rotateX(\" + rotationX + _endParenthesis;\r\n }\r\n\r\n if (skewX !== _zeroDeg || skewY !== _zeroDeg) {\r\n transforms += \"skew(\" + skewX + \", \" + skewY + _endParenthesis;\r\n }\r\n\r\n if (scaleX !== 1 || scaleY !== 1) {\r\n transforms += \"scale(\" + scaleX + \", \" + scaleY + _endParenthesis;\r\n }\r\n\r\n target.style[_transformProp] = transforms || \"translate(0, 0)\";\r\n},\r\n _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {\r\n var _ref2 = cache || this,\r\n xPercent = _ref2.xPercent,\r\n yPercent = _ref2.yPercent,\r\n x = _ref2.x,\r\n y = _ref2.y,\r\n rotation = _ref2.rotation,\r\n skewX = _ref2.skewX,\r\n skewY = _ref2.skewY,\r\n scaleX = _ref2.scaleX,\r\n scaleY = _ref2.scaleY,\r\n target = _ref2.target,\r\n xOrigin = _ref2.xOrigin,\r\n yOrigin = _ref2.yOrigin,\r\n xOffset = _ref2.xOffset,\r\n yOffset = _ref2.yOffset,\r\n forceCSS = _ref2.forceCSS,\r\n tx = parseFloat(x),\r\n ty = parseFloat(y),\r\n a11,\r\n a21,\r\n a12,\r\n a22,\r\n temp;\r\n\r\n rotation = parseFloat(rotation);\r\n skewX = parseFloat(skewX);\r\n skewY = parseFloat(skewY);\r\n\r\n if (skewY) {\r\n //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\r\n skewY = parseFloat(skewY);\r\n skewX += skewY;\r\n rotation += skewY;\r\n }\r\n\r\n if (rotation || skewX) {\r\n rotation *= _DEG2RAD;\r\n skewX *= _DEG2RAD;\r\n a11 = Math.cos(rotation) * scaleX;\r\n a21 = Math.sin(rotation) * scaleX;\r\n a12 = Math.sin(rotation - skewX) * -scaleY;\r\n a22 = Math.cos(rotation - skewX) * scaleY;\r\n\r\n if (skewX) {\r\n skewY *= _DEG2RAD;\r\n temp = Math.tan(skewX - skewY);\r\n temp = Math.sqrt(1 + temp * temp);\r\n a12 *= temp;\r\n a22 *= temp;\r\n\r\n if (skewY) {\r\n temp = Math.tan(skewY);\r\n temp = Math.sqrt(1 + temp * temp);\r\n a11 *= temp;\r\n a21 *= temp;\r\n }\r\n }\r\n\r\n a11 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a11);\r\n a21 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a21);\r\n a12 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a12);\r\n a22 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a22);\r\n } else {\r\n a11 = scaleX;\r\n a22 = scaleY;\r\n a21 = a12 = 0;\r\n }\r\n\r\n if (tx && !~(x + \"\").indexOf(\"px\") || ty && !~(y + \"\").indexOf(\"px\")) {\r\n tx = _convertToUnit(target, \"x\", x, \"px\");\r\n ty = _convertToUnit(target, \"y\", y, \"px\");\r\n }\r\n\r\n if (xOrigin || yOrigin || xOffset || yOffset) {\r\n tx = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);\r\n ty = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);\r\n }\r\n\r\n if (xPercent || yPercent) {\r\n //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the translation to simulate it.\r\n temp = target.getBBox();\r\n tx = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(tx + xPercent / 100 * temp.width);\r\n ty = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(ty + yPercent / 100 * temp.height);\r\n }\r\n\r\n temp = \"matrix(\" + a11 + \",\" + a21 + \",\" + a12 + \",\" + a22 + \",\" + tx + \",\" + ty + \")\";\r\n target.setAttribute(\"transform\", temp);\r\n forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!)\r\n},\r\n _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) {\r\n var cap = 360,\r\n isString = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isString)(endValue),\r\n endNum = parseFloat(endValue) * (isString && ~endValue.indexOf(\"rad\") ? _RAD2DEG : 1),\r\n change = endNum - startNum,\r\n finalValue = startNum + change + \"deg\",\r\n direction,\r\n pt;\r\n\r\n if (isString) {\r\n direction = endValue.split(\"_\")[1];\r\n\r\n if (direction === \"short\") {\r\n change %= cap;\r\n\r\n if (change !== change % (cap / 2)) {\r\n change += change < 0 ? cap : -cap;\r\n }\r\n }\r\n\r\n if (direction === \"cw\" && change < 0) {\r\n change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap;\r\n } else if (direction === \"ccw\" && change > 0) {\r\n change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap;\r\n }\r\n }\r\n\r\n plugin._pt = pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);\r\n pt.e = finalValue;\r\n pt.u = \"deg\";\r\n\r\n plugin._props.push(property);\r\n\r\n return pt;\r\n},\r\n _assign = function _assign(target, source) {\r\n // Internet Explorer doesn't have Object.assign(), so we recreate it here.\r\n for (var p in source) {\r\n target[p] = source[p];\r\n }\r\n\r\n return target;\r\n},\r\n _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {\r\n //for handling cases where someone passes in a whole transform string, like transform: \"scale(2, 3) rotate(20deg) translateY(30em)\"\r\n var startCache = _assign({}, target._gsap),\r\n exclude = \"perspective,force3D,transformOrigin,svgOrigin\",\r\n style = target.style,\r\n endCache,\r\n p,\r\n startValue,\r\n endValue,\r\n startNum,\r\n endNum,\r\n startUnit,\r\n endUnit;\r\n\r\n if (startCache.svg) {\r\n startValue = target.getAttribute(\"transform\");\r\n target.setAttribute(\"transform\", \"\");\r\n style[_transformProp] = transforms;\r\n endCache = _parseTransform(target, 1);\r\n\r\n _removeProperty(target, _transformProp);\r\n\r\n target.setAttribute(\"transform\", startValue);\r\n } else {\r\n startValue = getComputedStyle(target)[_transformProp];\r\n style[_transformProp] = transforms;\r\n endCache = _parseTransform(target, 1);\r\n style[_transformProp] = startValue;\r\n }\r\n\r\n for (p in _transformProps) {\r\n startValue = startCache[p];\r\n endValue = endCache[p];\r\n\r\n if (startValue !== endValue && exclude.indexOf(p) < 0) {\r\n //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\r\n startUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue);\r\n endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue);\r\n startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);\r\n endNum = parseFloat(endValue);\r\n plugin._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);\r\n plugin._pt.u = endUnit || 0;\r\n\r\n plugin._props.push(p);\r\n }\r\n }\r\n\r\n _assign(endCache, startCache);\r\n}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc.\r\n\r\n\r\n(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(\"padding,margin,Width,Radius\", function (name, index) {\r\n var t = \"Top\",\r\n r = \"Right\",\r\n b = \"Bottom\",\r\n l = \"Left\",\r\n props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {\r\n return index < 2 ? name + side : \"border\" + side + name;\r\n });\r\n\r\n _specialProps[index > 1 ? \"border\" + name : name] = function (plugin, target, property, endValue, tween) {\r\n var a, vars;\r\n\r\n if (arguments.length < 4) {\r\n // getter, passed target, property, and unit (from _get())\r\n a = props.map(function (prop) {\r\n return _get(plugin, prop, property);\r\n });\r\n vars = a.join(\" \");\r\n return vars.split(a[0]).length === 5 ? a[0] : vars;\r\n }\r\n\r\n a = (endValue + \"\").split(\" \");\r\n vars = {};\r\n props.forEach(function (prop, i) {\r\n return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];\r\n });\r\n plugin.init(target, vars, tween);\r\n };\r\n});\r\n\r\nvar CSSPlugin = {\r\n name: \"css\",\r\n register: _initCore,\r\n targetTest: function targetTest(target) {\r\n return target.style && target.nodeType;\r\n },\r\n init: function init(target, vars, tween, index, targets) {\r\n var props = this._props,\r\n style = target.style,\r\n startAt = tween.vars.startAt,\r\n startValue,\r\n endValue,\r\n endNum,\r\n startNum,\r\n type,\r\n specialProp,\r\n p,\r\n startUnit,\r\n endUnit,\r\n relative,\r\n isTransformRelated,\r\n transformPropTween,\r\n cache,\r\n smooth,\r\n hasPriority,\r\n inlineProps;\r\n _pluginInitted || _initCore(); // we may call init() multiple times on the same plugin instance, like when adding special properties, so make sure we don't overwrite the revert data or inlineProps\r\n\r\n this.styles = this.styles || _getStyleSaver(target);\r\n inlineProps = this.styles.props;\r\n this.tween = tween;\r\n\r\n for (p in vars) {\r\n if (p === \"autoRound\") {\r\n continue;\r\n }\r\n\r\n endValue = vars[p];\r\n\r\n if (_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._plugins[p] && (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._checkPlugin)(p, vars, tween, index, target, targets)) {\r\n // plugins\r\n continue;\r\n }\r\n\r\n type = typeof endValue;\r\n specialProp = _specialProps[p];\r\n\r\n if (type === \"function\") {\r\n endValue = endValue.call(tween, index, target, targets);\r\n type = typeof endValue;\r\n }\r\n\r\n if (type === \"string\" && ~endValue.indexOf(\"random(\")) {\r\n endValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._replaceRandom)(endValue);\r\n }\r\n\r\n if (specialProp) {\r\n specialProp(this, target, p, endValue, tween) && (hasPriority = 1);\r\n } else if (p.substr(0, 2) === \"--\") {\r\n //CSS variable\r\n startValue = (getComputedStyle(target).getPropertyValue(p) + \"\").trim();\r\n endValue += \"\";\r\n _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorExp.lastIndex = 0;\r\n\r\n if (!_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorExp.test(startValue)) {\r\n // colors don't have units\r\n startUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue);\r\n endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue);\r\n }\r\n\r\n endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);\r\n this.add(style, \"setProperty\", startValue, endValue, index, targets, 0, 0, p);\r\n props.push(p);\r\n inlineProps.push(p, 0, style[p]);\r\n } else if (type !== \"undefined\") {\r\n if (startAt && p in startAt) {\r\n // in case someone hard-codes a complex value as the start, like top: \"calc(2vh / 2)\". Without this, it'd use the computed value (always in px)\r\n startValue = typeof startAt[p] === \"function\" ? startAt[p].call(tween, index, target, targets) : startAt[p];\r\n (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isString)(startValue) && ~startValue.indexOf(\"random(\") && (startValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._replaceRandom)(startValue));\r\n (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue + \"\") || startValue === \"auto\" || (startValue += _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[p] || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(_get(target, p)) || \"\"); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work.\r\n\r\n (startValue + \"\").charAt(1) === \"=\" && (startValue = _get(target, p)); // can't work with relative values\r\n } else {\r\n startValue = _get(target, p);\r\n }\r\n\r\n startNum = parseFloat(startValue);\r\n relative = type === \"string\" && endValue.charAt(1) === \"=\" && endValue.substr(0, 2);\r\n relative && (endValue = endValue.substr(2));\r\n endNum = parseFloat(endValue);\r\n\r\n if (p in _propertyAliases) {\r\n if (p === \"autoAlpha\") {\r\n //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened.\r\n if (startNum === 1 && _get(target, \"visibility\") === \"hidden\" && endNum) {\r\n //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\r\n startNum = 0;\r\n }\r\n\r\n inlineProps.push(\"visibility\", 0, style.visibility);\r\n\r\n _addNonTweeningPT(this, style, \"visibility\", startNum ? \"inherit\" : \"hidden\", endNum ? \"inherit\" : \"hidden\", !endNum);\r\n }\r\n\r\n if (p !== \"scale\" && p !== \"transform\") {\r\n p = _propertyAliases[p];\r\n ~p.indexOf(\",\") && (p = p.split(\",\")[0]);\r\n }\r\n }\r\n\r\n isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED ---\r\n\r\n if (isTransformRelated) {\r\n this.styles.save(p);\r\n\r\n if (type === \"string\" && endValue.substring(0, 6) === \"var(--\") {\r\n endValue = _getComputedProperty(target, endValue.substring(4, endValue.indexOf(\")\")));\r\n endNum = parseFloat(endValue);\r\n }\r\n\r\n if (!transformPropTween) {\r\n cache = target._gsap;\r\n cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:\"translateX(50vw)\"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here.\r\n\r\n smooth = vars.smoothOrigin !== false && cache.smooth;\r\n transformPropTween = this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning)\r\n\r\n transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween.\r\n }\r\n\r\n if (p === \"scale\") {\r\n this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, cache, \"scaleY\", cache.scaleY, (relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);\r\n this._pt.u = 0;\r\n props.push(\"scaleY\", p);\r\n p += \"X\";\r\n } else if (p === \"transformOrigin\") {\r\n inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);\r\n endValue = _convertKeywordsToPercentages(endValue); //in case something like \"left top\" or \"bottom right\" is passed in. Convert to percentages.\r\n\r\n if (cache.svg) {\r\n _applySVGOrigin(target, endValue, 0, smooth, 0, this);\r\n } else {\r\n endUnit = parseFloat(endValue.split(\" \")[2]) || 0; //handle the zOrigin separately!\r\n\r\n endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, \"zOrigin\", cache.zOrigin, endUnit);\r\n\r\n _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));\r\n }\r\n\r\n continue;\r\n } else if (p === \"svgOrigin\") {\r\n _applySVGOrigin(target, endValue, 1, smooth, 0, this);\r\n\r\n continue;\r\n } else if (p in _rotationalProperties) {\r\n _addRotationalPropTween(this, cache, p, startNum, relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, relative + endValue) : endValue);\r\n\r\n continue;\r\n } else if (p === \"smoothOrigin\") {\r\n _addNonTweeningPT(this, cache, \"smooth\", cache.smooth, endValue);\r\n\r\n continue;\r\n } else if (p === \"force3D\") {\r\n cache[p] = endValue;\r\n continue;\r\n } else if (p === \"transform\") {\r\n _addRawTransformPTs(this, endValue, target);\r\n\r\n continue;\r\n }\r\n } else if (!(p in style)) {\r\n p = _checkPropPrefix(p) || p;\r\n }\r\n\r\n if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {\r\n startUnit = (startValue + \"\").substr((startNum + \"\").length);\r\n endNum || (endNum = 0); // protect against NaN\r\n\r\n endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue) || (p in _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units ? _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[p] : startUnit);\r\n startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));\r\n this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === \"px\" || p === \"zIndex\") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);\r\n this._pt.u = endUnit || 0;\r\n\r\n if (startUnit !== endUnit && endUnit !== \"%\") {\r\n //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a \"b\" (beginning) property and point to a render method that handles that. (performance optimization)\r\n this._pt.b = startValue;\r\n this._pt.r = _renderCSSPropWithBeginning;\r\n }\r\n } else if (!(p in style)) {\r\n if (p in target) {\r\n //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that.\r\n this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);\r\n } else if (p !== \"parseTransform\") {\r\n (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._missingPlugin)(p, endValue);\r\n\r\n continue;\r\n }\r\n } else {\r\n _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);\r\n }\r\n\r\n isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : typeof target[p] === \"function\" ? inlineProps.push(p, 2, target[p]()) : inlineProps.push(p, 1, startValue || target[p]));\r\n props.push(p);\r\n }\r\n }\r\n\r\n hasPriority && (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._sortPropTweensByPriority)(this);\r\n },\r\n render: function render(ratio, data) {\r\n if (data.tween._time || !_reverting()) {\r\n var pt = data._pt;\r\n\r\n while (pt) {\r\n pt.r(ratio, pt.d);\r\n pt = pt._next;\r\n }\r\n } else {\r\n data.styles.revert();\r\n }\r\n },\r\n get: _get,\r\n aliases: _propertyAliases,\r\n getSetter: function getSetter(target, property, plugin) {\r\n //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like \"x\" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer.\r\n var p = _propertyAliases[property];\r\n p && p.indexOf(\",\") < 0 && (property = p);\r\n return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, \"x\")) ? plugin && _recentSetterPlugin === plugin ? property === \"scale\" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === \"scale\" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isUndefined)(target.style[property]) ? _setterCSSStyle : ~property.indexOf(\"-\") ? _setterCSSProp : (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getSetter)(target, property);\r\n },\r\n core: {\r\n _removeProperty: _removeProperty,\r\n _getMatrix: _getMatrix\r\n }\r\n};\r\n_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.utils.checkPrefix = _checkPropPrefix;\r\n_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.getStyleSaver = _getStyleSaver;\r\n\r\n(function (positionAndScale, rotation, others, aliases) {\r\n var all = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(positionAndScale + \",\" + rotation + \",\" + others, function (name) {\r\n _transformProps[name] = 1;\r\n });\r\n\r\n (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(rotation, function (name) {\r\n _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[name] = \"deg\";\r\n _rotationalProperties[name] = 1;\r\n });\r\n\r\n _propertyAliases[all[13]] = positionAndScale + \",\" + rotation;\r\n\r\n (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(aliases, function (name) {\r\n var split = name.split(\":\");\r\n _propertyAliases[split[1]] = all[split[0]];\r\n });\r\n})(\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\", \"rotation,rotationX,rotationY,skewX,skewY\", \"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\", \"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\");\r\n\r\n(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\", function (name) {\r\n _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[name] = \"px\";\r\n});\r\n\r\n_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.registerPlugin(CSSPlugin);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9nc2FwL0NTU1BsdWdpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUV3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyw2RUFBNkU7QUFDcEY7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsa0JBQWtCO0FBQ2hDO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrREFBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsYUFBYSxzREFBTztBQUNwQixTQUFTLHFEQUFNO0FBQ2YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUscURBQU07QUFDaEIsVUFBVSxxREFBTTtBQUNoQixVQUFV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Q0EsWUFBWSwyREFBWTtBQUN4QjtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsMkRBQVk7QUFDZCxJQUFJLGtEQUFPO0FBQ1g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRSwyREFBWTtBQUNkO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsMkRBQVk7QUFDWixFQUFFLGtEQUFPO0FBQ1QsQ0FBQztBQUNEO0FBQ0EsK0NBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2dzYXAvQ1NTUGx1Z2luLmpzPzgxZWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXHJcbiAqIENTU1BsdWdpbiAzLjEzLjBcclxuICogaHR0cHM6Ly9nc2FwLmNvbVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgMjAwOC0yMDI1LCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3NhcC5jb20vc3RhbmRhcmQtbGljZW5zZVxyXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cclxuKi9cclxuXHJcbi8qIGVzbGludC1kaXNhYmxlICovXHJcbmltcG9ydCB7IGdzYXAsIF9nZXRQcm9wZXJ0eSwgX251bUV4cCwgX251bVdpdGhVbml0RXhwLCBnZXRVbml0LCBfaXNTdHJpbmcsIF9pc1VuZGVmaW5lZCwgX3JlbmRlckNvbXBsZXhTdHJpbmcsIF9yZWxFeHAsIF9mb3JFYWNoTmFtZSwgX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSwgX2NvbG9yU3RyaW5nRmlsdGVyLCBfY2hlY2tQbHVnaW4sIF9yZXBsYWNlUmFuZG9tLCBfcGx1Z2lucywgR1NDYWNoZSwgUHJvcFR3ZWVuLCBfY29uZmlnLCBfdGlja2VyLCBfcm91bmQsIF9taXNzaW5nUGx1Z2luLCBfZ2V0U2V0dGVyLCBfZ2V0Q2FjaGUsIF9jb2xvckV4cCwgX3BhcnNlUmVsYXRpdmUsIF9zZXREZWZhdWx0cywgX3JlbW92ZUxpbmtlZExpc3RJdGVtIC8vZm9yIHRoZSBjb21tZW50ZWQtb3V0IGNsYXNzTmFtZSBmZWF0dXJlLlxyXG59IGZyb20gXCIuL2dzYXAtY29yZS5qc1wiO1xyXG5cclxudmFyIF93aW4sXHJcbiAgICBfZG9jLFxyXG4gICAgX2RvY0VsZW1lbnQsXHJcbiAgICBfcGx1Z2luSW5pdHRlZCxcclxuICAgIF90ZW1wRGl2LFxyXG4gICAgX3RlbXBEaXZTdHlsZXIsXHJcbiAgICBfcmVjZW50U2V0dGVyUGx1Z2luLFxyXG4gICAgX3JldmVydGluZyxcclxuICAgIF93aW5kb3dFeGlzdHMgPSBmdW5jdGlvbiBfd2luZG93RXhpc3RzKCkge1xyXG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiO1xyXG59LFxyXG4gICAgX3RyYW5zZm9ybVByb3BzID0ge30sXHJcbiAgICBfUkFEMkRFRyA9IDE4MCAvIE1hdGguUEksXHJcbiAgICBfREVHMlJBRCA9IE1hdGguUEkgLyAxODAsXHJcbiAgICBfYXRhbjIgPSBNYXRoLmF0YW4yLFxyXG4gICAgX2JpZ051bSA9IDFlOCxcclxuICAgIF9jYXBzRXhwID0gLyhbQS1aXSkvZyxcclxuICAgIF9ob3Jpem9udGFsRXhwID0gLyhsZWZ0fHJpZ2h0fHdpZHRofG1hcmdpbnxwYWRkaW5nfHgpL2ksXHJcbiAgICBfY29tcGxleEV4cCA9IC9bXFxzLFxcKF1cXFMvLFxyXG4gICAgX3Byb3BlcnR5QWxpYXNlcyA9IHtcclxuICBhdXRvQWxwaGE6IFwib3BhY2l0eSx2aXNpYmlsaXR5XCIsXHJcbiAgc2NhbGU6IFwic2NhbGVYLHNjYWxlWVwiLFxyXG4gIGFscGhhOiBcIm9wYWNpdHlcIlxyXG59LFxyXG4gICAgX3JlbmRlckNTU1Byb3AgPSBmdW5jdGlvbiBfcmVuZGVyQ1NTUHJvcChyYXRpbywgZGF0YSkge1xyXG4gIHJldHVybiBkYXRhLnNldChkYXRhLnQsIGRhdGEucCwgTWF0aC5yb3VuZCgoZGF0YS5zICsgZGF0YS5jICogcmF0aW8pICogMTAwMDApIC8gMTAwMDAgKyBkYXRhLnUsIGRhdGEpO1xyXG59LFxyXG4gICAgX3JlbmRlclByb3BXaXRoRW5kID0gZnVuY3Rpb24gX3JlbmRlclByb3BXaXRoRW5kKHJhdGlvLCBkYXRhKSB7XHJcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCByYXRpbyA9PT0gMSA/IGRhdGEuZSA6IE1hdGgucm91bmQoKGRhdGEucyArIGRhdGEuYyAqIHJhdGlvKSAqIDEwMDAwKSAvIDEwMDAwICsgZGF0YS51LCBkYXRhKTtcclxufSxcclxuICAgIF9yZW5kZXJDU1NQcm9wV2l0aEJlZ2lubmluZyA9IGZ1bmN0aW9uIF9yZW5kZXJDU1NQcm9wV2l0aEJlZ2lubmluZyhyYXRpbywgZGF0YSkge1xyXG4gIHJldHVybiBkYXRhLnNldChkYXRhLnQsIGRhdGEucCwgcmF0aW8gPyBNYXRoLnJvdW5kKChkYXRhLnMgKyBkYXRhLmMgKiByYXRpbykgKiAxMDAwMCkgLyAxMDAwMCArIGRhdGEudSA6IGRhdGEuYiwgZGF0YSk7XHJcbn0sXHJcbiAgICAvL2lmIHVuaXRzIGNoYW5nZSwgd2UgbmVlZCBhIHdheSB0byByZW5kZXIgdGhlIG9yaWdpbmFsIHVuaXQvdmFsdWUgd2hlbiB0aGUgdHdlZW4gZ29lcyBhbGwgdGhlIHdheSBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgKHJhdGlvOjApXHJcbl9yZW5kZXJSb3VuZGVkQ1NTUHJvcCA9IGZ1bmN0aW9uIF9yZW5kZXJSb3VuZGVkQ1NTUHJvcChyYXRpbywgZGF0YSkge1xyXG4gIHZhciB2YWx1ZSA9IGRhdGEucyArIGRhdGEuYyAqIHJhdGlvO1xyXG4gIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCB+fih2YWx1ZSArICh2YWx1ZSA8IDAgPyAtLjUgOiAuNSkpICsgZGF0YS51LCBkYXRhKTtcclxufSxcclxuICAgIF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlID0gZnVuY3Rpb24gX3JlbmRlck5vblR3ZWVuaW5nVmFsdWUocmF0aW8sIGRhdGEpIHtcclxuICByZXR1cm4gZGF0YS5zZXQoZGF0YS50LCBkYXRhLnAsIHJhdGlvID8gZGF0YS5lIDogZGF0YS5iLCBkYXRhKTtcclxufSxcclxuICAgIF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlT25seUF0RW5kID0gZnVuY3Rpb24gX3JlbmRlck5vblR3ZWVuaW5nVmFsdWVPbmx5QXRFbmQocmF0aW8sIGRhdGEpIHtcclxuICByZXR1cm4gZGF0YS5zZXQoZGF0YS50LCBkYXRhLnAsIHJhdGlvICE9PSAxID8gZGF0YS5iIDogZGF0YS5lLCBkYXRhKTtcclxufSxcclxuICAgIF9zZXR0ZXJDU1NTdHlsZSA9IGZ1bmN0aW9uIF9zZXR0ZXJDU1NTdHlsZSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xyXG4gIHJldHVybiB0YXJnZXQuc3R5bGVbcHJvcGVydHldID0gdmFsdWU7XHJcbn0sXHJcbiAgICBfc2V0dGVyQ1NTUHJvcCA9IGZ1bmN0aW9uIF9zZXR0ZXJDU1NQcm9wKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XHJcbiAgcmV0dXJuIHRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xyXG59LFxyXG4gICAgX3NldHRlclRyYW5zZm9ybSA9IGZ1bmN0aW9uIF9zZXR0ZXJUcmFuc2Zvcm0odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcclxuICByZXR1cm4gdGFyZ2V0Ll9nc2FwW3Byb3BlcnR5XSA9IHZhbHVlO1xyXG59LFxyXG4gICAgX3NldHRlclNjYWxlID0gZnVuY3Rpb24gX3NldHRlclNjYWxlKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XHJcbiAgcmV0dXJuIHRhcmdldC5fZ3NhcC5zY2FsZVggPSB0YXJnZXQuX2dzYXAuc2NhbGVZID0gdmFsdWU7XHJcbn0sXHJcbiAgICBfc2V0dGVyU2NhbGVXaXRoUmVuZGVyID0gZnVuY3Rpb24gX3NldHRlclNjYWxlV2l0aFJlbmRlcih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgZGF0YSwgcmF0aW8pIHtcclxuICB2YXIgY2FjaGUgPSB0YXJnZXQuX2dzYXA7XHJcbiAgY2FjaGUuc2NhbGVYID0gY2FjaGUuc2NhbGVZID0gdmFsdWU7XHJcbiAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKHJhdGlvLCBjYWNoZSk7XHJcbn0sXHJcbiAgICBfc2V0dGVyVHJhbnNmb3JtV2l0aFJlbmRlciA9IGZ1bmN0aW9uIF9zZXR0ZXJUcmFuc2Zvcm1XaXRoUmVuZGVyKHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCBkYXRhLCByYXRpbykge1xyXG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcDtcclxuICBjYWNoZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0ocmF0aW8sIGNhY2hlKTtcclxufSxcclxuICAgIF90cmFuc2Zvcm1Qcm9wID0gXCJ0cmFuc2Zvcm1cIixcclxuICAgIF90cmFuc2Zvcm1PcmlnaW5Qcm9wID0gX3RyYW5zZm9ybVByb3AgKyBcIk9yaWdpblwiLFxyXG4gICAgX3NhdmVTdHlsZSA9IGZ1bmN0aW9uIF9zYXZlU3R5bGUocHJvcGVydHksIGlzTm90Q1NTKSB7XHJcbiAgdmFyIF90aGlzID0gdGhpcztcclxuXHJcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0LFxyXG4gICAgICBzdHlsZSA9IHRhcmdldC5zdHlsZSxcclxuICAgICAgY2FjaGUgPSB0YXJnZXQuX2dzYXA7XHJcblxyXG4gIGlmIChwcm9wZXJ0eSBpbiBfdHJhbnNmb3JtUHJvcHMgJiYgc3R5bGUpIHtcclxuICAgIHRoaXMudGZtID0gdGhpcy50Zm0gfHwge307XHJcblxyXG4gICAgaWYgKHByb3BlcnR5ICE9PSBcInRyYW5zZm9ybVwiKSB7XHJcbiAgICAgIHByb3BlcnR5ID0gX3Byb3BlcnR5QWxpYXNlc1twcm9wZXJ0eV0gfHwgcHJvcGVydHk7XHJcbiAgICAgIH5wcm9wZXJ0eS5pbmRleE9mKFwiLFwiKSA/IHByb3BlcnR5LnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzLnRmbVthXSA9IF9nZXQodGFyZ2V0LCBhKTtcclxuICAgICAgfSkgOiB0aGlzLnRmbVtwcm9wZXJ0eV0gPSBjYWNoZS54ID8gY2FjaGVbcHJvcGVydHldIDogX2dldCh0YXJnZXQsIHByb3BlcnR5KTsgLy8gbm90ZTogc2NhbGUgd291bGQgbWFwIHRvIFwic2NhbGVYLHNjYWxlWVwiLCB0aHVzIHdlIGxvb3AgYW5kIGFwcGx5IHRoZW0gYm90aC5cclxuXHJcbiAgICAgIHByb3BlcnR5ID09PSBfdHJhbnNmb3JtT3JpZ2luUHJvcCAmJiAodGhpcy50Zm0uek9yaWdpbiA9IGNhY2hlLnpPcmlnaW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIF9wcm9wZXJ0eUFsaWFzZXMudHJhbnNmb3JtLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XHJcbiAgICAgICAgcmV0dXJuIF9zYXZlU3R5bGUuY2FsbChfdGhpcywgcCwgaXNOb3RDU1MpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wcm9wcy5pbmRleE9mKF90cmFuc2Zvcm1Qcm9wKSA+PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2FjaGUuc3ZnKSB7XHJcbiAgICAgIHRoaXMuc3ZnbyA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXN2Zy1vcmlnaW5cIik7XHJcbiAgICAgIHRoaXMucHJvcHMucHVzaChfdHJhbnNmb3JtT3JpZ2luUHJvcCwgaXNOb3RDU1MsIFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3BlcnR5ID0gX3RyYW5zZm9ybVByb3A7XHJcbiAgfVxyXG5cclxuICAoc3R5bGUgfHwgaXNOb3RDU1MpICYmIHRoaXMucHJvcHMucHVzaChwcm9wZXJ0eSwgaXNOb3RDU1MsIHN0eWxlW3Byb3BlcnR5XSk7XHJcbn0sXHJcbiAgICBfcmVtb3ZlSW5kZXBlbmRlbnRUcmFuc2Zvcm1zID0gZnVuY3Rpb24gX3JlbW92ZUluZGVwZW5kZW50VHJhbnNmb3JtcyhzdHlsZSkge1xyXG4gIGlmIChzdHlsZS50cmFuc2xhdGUpIHtcclxuICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KFwidHJhbnNsYXRlXCIpO1xyXG4gICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJzY2FsZVwiKTtcclxuICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KFwicm90YXRlXCIpO1xyXG4gIH1cclxufSxcclxuICAgIF9yZXZlcnRTdHlsZSA9IGZ1bmN0aW9uIF9yZXZlcnRTdHlsZSgpIHtcclxuICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzLFxyXG4gICAgICB0YXJnZXQgPSB0aGlzLnRhcmdldCxcclxuICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXHJcbiAgICAgIGNhY2hlID0gdGFyZ2V0Ll9nc2FwLFxyXG4gICAgICBpLFxyXG4gICAgICBwO1xyXG5cclxuICBmb3IgKGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgIC8vIHN0b3JlZCBsaWtlIHRoaXM6IHByb3BlcnR5LCBpc05vdENTUywgdmFsdWVcclxuICAgIGlmICghcHJvcHNbaSArIDFdKSB7XHJcbiAgICAgIHByb3BzW2kgKyAyXSA/IHN0eWxlW3Byb3BzW2ldXSA9IHByb3BzW2kgKyAyXSA6IHN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BzW2ldLnN1YnN0cigwLCAyKSA9PT0gXCItLVwiID8gcHJvcHNbaV0gOiBwcm9wc1tpXS5yZXBsYWNlKF9jYXBzRXhwLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH0gZWxzZSBpZiAocHJvcHNbaSArIDFdID09PSAyKSB7XHJcbiAgICAgIC8vIG5vbi1DU1MgdmFsdWUgKGZ1bmN0aW9uLWJhc2VkKVxyXG4gICAgICB0YXJnZXRbcHJvcHNbaV1dKHByb3BzW2kgKyAyXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBub24tQ1NTIHZhbHVlIChub3QgZnVuY3Rpb24tYmFzZWQpXHJcbiAgICAgIHRhcmdldFtwcm9wc1tpXV0gPSBwcm9wc1tpICsgMl07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy50Zm0pIHtcclxuICAgIGZvciAocCBpbiB0aGlzLnRmbSkge1xyXG4gICAgICBjYWNoZVtwXSA9IHRoaXMudGZtW3BdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjYWNoZS5zdmcpIHtcclxuICAgICAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKCk7XHJcbiAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN2Zy1vcmlnaW5cIiwgdGhpcy5zdmdvIHx8IFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGkgPSBfcmV2ZXJ0aW5nKCk7XHJcblxyXG4gICAgaWYgKCghaSB8fCAhaS5pc1N0YXJ0KSAmJiAhc3R5bGVbX3RyYW5zZm9ybVByb3BdKSB7XHJcbiAgICAgIF9yZW1vdmVJbmRlcGVuZGVudFRyYW5zZm9ybXMoc3R5bGUpO1xyXG5cclxuICAgICAgaWYgKGNhY2hlLnpPcmlnaW4gJiYgc3R5bGVbX3RyYW5zZm9ybU9yaWdpblByb3BdKSB7XHJcbiAgICAgICAgc3R5bGVbX3RyYW5zZm9ybU9yaWdpblByb3BdICs9IFwiIFwiICsgY2FjaGUuek9yaWdpbiArIFwicHhcIjsgLy8gc2luY2Ugd2UncmUgdW5jYWNoaW5nLCB3ZSBtdXN0IHB1dCB0aGUgek9yaWdpbiBiYWNrIGludG8gdGhlIHRyYW5zZm9ybU9yaWdpbiBzbyB0aGF0IHdlIGNhbiBwdWxsIGl0IG91dCBhY2N1cmF0ZWx5IHdoZW4gd2UgcGFyc2UgYWdhaW4uIE90aGVyd2lzZSwgd2UnZCBsb3NlIHRoZSB6IHBvcnRpb24gb2YgdGhlIG9yaWdpbiBzaW5jZSB3ZSBleHRyYWN0IGl0IHRvIHByb3RlY3QgZnJvbSBTYWZhcmkgYnVncy5cclxuXHJcbiAgICAgICAgY2FjaGUuek9yaWdpbiA9IDA7XHJcbiAgICAgICAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhY2hlLnVuY2FjaGUgPSAxOyAvLyBpZiBpdCdzIGEgc3RhcnRBdCB0aGF0J3MgYmVpbmcgcmV2ZXJ0ZWQgaW4gdGhlIF9pbml0VHdlZW4oKSBvZiB0aGUgY29yZSwgd2UgZG9uJ3QgbmVlZCB0byB1bmNhY2hlIHRyYW5zZm9ybXMuIFRoaXMgaXMgcHVyZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxyXG4gICAgfVxyXG4gIH1cclxufSxcclxuICAgIF9nZXRTdHlsZVNhdmVyID0gZnVuY3Rpb24gX2dldFN0eWxlU2F2ZXIodGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XHJcbiAgdmFyIHNhdmVyID0ge1xyXG4gICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICBwcm9wczogW10sXHJcbiAgICByZXZlcnQ6IF9yZXZlcnRTdHlsZSxcclxuICAgIHNhdmU6IF9zYXZlU3R5bGVcclxuICB9O1xyXG4gIHRhcmdldC5fZ3NhcCB8fCBnc2FwLmNvcmUuZ2V0Q2FjaGUodGFyZ2V0KTsgLy8ganVzdCBtYWtlIHN1cmUgdGhlcmUncyBhIF9nc2FwIGNhY2hlIGRlZmluZWQgYmVjYXVzZSB3ZSByZWFkIGZyb20gaXQgaW4gX3NhdmVTdHlsZSgpIGFuZCBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3QgY2hlY2sgaXQgaGVyZSBvbmNlLlxyXG5cclxuICBwcm9wZXJ0aWVzICYmIHRhcmdldC5zdHlsZSAmJiB0YXJnZXQubm9kZVR5cGUgJiYgcHJvcGVydGllcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAocCkge1xyXG4gICAgcmV0dXJuIHNhdmVyLnNhdmUocCk7XHJcbiAgfSk7IC8vIG1ha2Ugc3VyZSBpdCdzIGEgRE9NIG5vZGUgdG9vLlxyXG5cclxuICByZXR1cm4gc2F2ZXI7XHJcbn0sXHJcbiAgICBfc3VwcG9ydHMzRCxcclxuICAgIF9jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQodHlwZSwgbnMpIHtcclxuICB2YXIgZSA9IF9kb2MuY3JlYXRlRWxlbWVudE5TID8gX2RvYy5jcmVhdGVFbGVtZW50TlMoKG5zIHx8IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKS5yZXBsYWNlKC9eaHR0cHMvLCBcImh0dHBcIiksIHR5cGUpIDogX2RvYy5jcmVhdGVFbGVtZW50KHR5cGUpOyAvL3NvbWUgc2VydmVycyBzd2FwIGluIGh0dHBzIGZvciBodHRwIGluIHRoZSBuYW1lc3BhY2Ugd2hpY2ggY2FuIGJyZWFrIHRoaW5ncywgbWFraW5nIFwic3R5bGVcIiBpbmFjY2Vzc2libGUuXHJcblxyXG4gIHJldHVybiBlICYmIGUuc3R5bGUgPyBlIDogX2RvYy5jcmVhdGVFbGVtZW50KHR5cGUpOyAvL3NvbWUgZW52aXJvbm1lbnRzIHdvbid0IGFsbG93IGFjY2VzcyB0byB0aGUgZWxlbWVudCdzIHN0eWxlIHdoZW4gY3JlYXRlZCB3aXRoIGEgbmFtZXNwYWNlIGluIHdoaWNoIGNhc2Ugd2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgY3JlYXRlRWxlbWVudCgpIHRvIHdvcmsgYXJvdW5kIHRoZSBpc3N1ZS4gQWxzbyBub3RlIHRoYXQgd2hlbiBHU0FQIGlzIGVtYmVkZGVkIGRpcmVjdGx5IGluc2lkZSBhbiBTVkcgZmlsZSwgY3JlYXRlRWxlbWVudCgpIHdvbid0IGFsbG93IGFjY2VzcyB0byB0aGUgc3R5bGUgb2JqZWN0IGluIEZpcmVmb3ggKHNlZSBodHRwczovL2dzYXAuY29tL2ZvcnVtcy90b3BpYy8yMDIxNS1wcm9ibGVtLXVzaW5nLXR3ZWVubWF4LWluLXN0YW5kYWxvbmUtc2VsZi1jb250YWluaW5nLXN2Zy1maWxlLWVyci1jYW5ub3Qtc2V0LXByb3BlcnR5LWNzc3RleHQtb2YtdW5kZWZpbmVkLykuXHJcbn0sXHJcbiAgICBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHNraXBQcmVmaXhGYWxsYmFjaykge1xyXG4gIHZhciBjcyA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcclxuICByZXR1cm4gY3NbcHJvcGVydHldIHx8IGNzLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSkgfHwgY3MuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSkgfHwgIXNraXBQcmVmaXhGYWxsYmFjayAmJiBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIF9jaGVja1Byb3BQcmVmaXgocHJvcGVydHkpIHx8IHByb3BlcnR5LCAxKSB8fCBcIlwiOyAvL2NzcyB2YXJpYWJsZXMgbWF5IG5vdCBuZWVkIGNhcHMgc3dhcHBlZCBvdXQgZm9yIGRhc2hlcyBhbmQgbG93ZXJjYXNlLlxyXG59LFxyXG4gICAgX3ByZWZpeGVzID0gXCJPLE1veixtcyxNcyxXZWJraXRcIi5zcGxpdChcIixcIiksXHJcbiAgICBfY2hlY2tQcm9wUHJlZml4ID0gZnVuY3Rpb24gX2NoZWNrUHJvcFByZWZpeChwcm9wZXJ0eSwgZWxlbWVudCwgcHJlZmVyUHJlZml4KSB7XHJcbiAgdmFyIGUgPSBlbGVtZW50IHx8IF90ZW1wRGl2LFxyXG4gICAgICBzID0gZS5zdHlsZSxcclxuICAgICAgaSA9IDU7XHJcblxyXG4gIGlmIChwcm9wZXJ0eSBpbiBzICYmICFwcmVmZXJQcmVmaXgpIHtcclxuICAgIHJldHVybiBwcm9wZXJ0eTtcclxuICB9XHJcblxyXG4gIHByb3BlcnR5ID0gcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zdWJzdHIoMSk7XHJcblxyXG4gIHdoaWxlIChpLS0gJiYgIShfcHJlZml4ZXNbaV0gKyBwcm9wZXJ0eSBpbiBzKSkge31cclxuXHJcbiAgcmV0dXJuIGkgPCAwID8gbnVsbCA6IChpID09PSAzID8gXCJtc1wiIDogaSA+PSAwID8gX3ByZWZpeGVzW2ldIDogXCJcIikgKyBwcm9wZXJ0eTtcclxufSxcclxuICAgIF9pbml0Q29yZSA9IGZ1bmN0aW9uIF9pbml0Q29yZSgpIHtcclxuICBpZiAoX3dpbmRvd0V4aXN0cygpICYmIHdpbmRvdy5kb2N1bWVudCkge1xyXG4gICAgX3dpbiA9IHdpbmRvdztcclxuICAgIF9kb2MgPSBfd2luLmRvY3VtZW50O1xyXG4gICAgX2RvY0VsZW1lbnQgPSBfZG9jLmRvY3VtZW50RWxlbWVudDtcclxuICAgIF90ZW1wRGl2ID0gX2NyZWF0ZUVsZW1lbnQoXCJkaXZcIikgfHwge1xyXG4gICAgICBzdHlsZToge31cclxuICAgIH07XHJcbiAgICBfdGVtcERpdlN0eWxlciA9IF9jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgX3RyYW5zZm9ybVByb3AgPSBfY2hlY2tQcm9wUHJlZml4KF90cmFuc2Zvcm1Qcm9wKTtcclxuICAgIF90cmFuc2Zvcm1PcmlnaW5Qcm9wID0gX3RyYW5zZm9ybVByb3AgKyBcIk9yaWdpblwiO1xyXG4gICAgX3RlbXBEaXYuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyLXdpZHRoOjA7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjBcIjsgLy9tYWtlIHN1cmUgdG8gb3ZlcnJpZGUgY2VydGFpbiBwcm9wZXJ0aWVzIHRoYXQgbWF5IGNvbnRhbWluYXRlIG1lYXN1cmVtZW50cywgaW4gY2FzZSB0aGUgdXNlciBoYXMgb3ZlcnJlYWNoaW5nIHN0eWxlIHNoZWV0cy5cclxuXHJcbiAgICBfc3VwcG9ydHMzRCA9ICEhX2NoZWNrUHJvcFByZWZpeChcInBlcnNwZWN0aXZlXCIpO1xyXG4gICAgX3JldmVydGluZyA9IGdzYXAuY29yZS5yZXZlcnRpbmc7XHJcbiAgICBfcGx1Z2luSW5pdHRlZCA9IDE7XHJcbiAgfVxyXG59LFxyXG4gICAgX2dldFJlcGFyZW50ZWRDbG9uZUJCb3ggPSBmdW5jdGlvbiBfZ2V0UmVwYXJlbnRlZENsb25lQkJveCh0YXJnZXQpIHtcclxuICAvL3dvcmtzIGFyb3VuZCBpc3N1ZXMgaW4gc29tZSBicm93c2VycyAobGlrZSBGaXJlZm94KSB0aGF0IGRvbid0IGNvcnJlY3RseSByZXBvcnQgZ2V0QkJveCgpIG9uIFNWRyBlbGVtZW50cyBpbnNpZGUgYSA8ZGVmcz4gZWxlbWVudCBhbmQvb3IgPG1hc2s+LiBXZSB0cnkgY3JlYXRpbmcgYW4gU1ZHLCBhZGRpbmcgaXQgdG8gdGhlIGRvY3VtZW50RWxlbWVudCBhbmQgdG9zcyB0aGUgZWxlbWVudCBpbiB0aGVyZSBzbyB0aGF0IGl0J3MgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSByZW5kZXJpbmcgdHJlZSwgdGhlbiBncmFiIHRoZSBiYm94IGFuZCBpZiBpdCB3b3Jrcywgd2UgYWN0dWFsbHkgc3dhcCBvdXQgdGhlIG9yaWdpbmFsIGdldEJCb3goKSBtZXRob2QgZm9yIG91ciBvd24gdGhhdCBkb2VzIHRoZXNlIGV4dHJhIHN0ZXBzIHdoZW5ldmVyIGdldEJCb3ggaXMgbmVlZGVkLiBUaGlzIGhlbHBzIGVuc3VyZSB0aGF0IHBlcmZvcm1hbmNlIGlzIG9wdGltYWwgKG9ubHkgZG8gYWxsIHRoZXNlIGV4dHJhIHN0ZXBzIHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuLi5tb3N0IGVsZW1lbnRzIGRvbid0IG5lZWQgaXQpLlxyXG4gIHZhciBvd25lciA9IHRhcmdldC5vd25lclNWR0VsZW1lbnQsXHJcbiAgICAgIHN2ZyA9IF9jcmVhdGVFbGVtZW50KFwic3ZnXCIsIG93bmVyICYmIG93bmVyLmdldEF0dHJpYnV0ZShcInhtbG5zXCIpIHx8IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiksXHJcbiAgICAgIGNsb25lID0gdGFyZ2V0LmNsb25lTm9kZSh0cnVlKSxcclxuICAgICAgYmJveDtcclxuXHJcbiAgY2xvbmUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICBzdmcuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG5cclxuICBfZG9jRWxlbWVudC5hcHBlbmRDaGlsZChzdmcpO1xyXG5cclxuICB0cnkge1xyXG4gICAgYmJveCA9IGNsb25lLmdldEJCb3goKTtcclxuICB9IGNhdGNoIChlKSB7fVxyXG5cclxuICBzdmcucmVtb3ZlQ2hpbGQoY2xvbmUpO1xyXG5cclxuICBfZG9jRWxlbWVudC5yZW1vdmVDaGlsZChzdmcpO1xyXG5cclxuICByZXR1cm4gYmJveDtcclxufSxcclxuICAgIF9nZXRBdHRyaWJ1dGVGYWxsYmFja3MgPSBmdW5jdGlvbiBfZ2V0QXR0cmlidXRlRmFsbGJhY2tzKHRhcmdldCwgYXR0cmlidXRlc0FycmF5KSB7XHJcbiAgdmFyIGkgPSBhdHRyaWJ1dGVzQXJyYXkubGVuZ3RoO1xyXG5cclxuICB3aGlsZSAoaS0tKSB7XHJcbiAgICBpZiAodGFyZ2V0Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVzQXJyYXlbaV0pKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZXNBcnJheVtpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG59LFxyXG4gICAgX2dldEJCb3ggPSBmdW5jdGlvbiBfZ2V0QkJveCh0YXJnZXQpIHtcclxuICB2YXIgYm91bmRzLCBjbG9uZWQ7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBib3VuZHMgPSB0YXJnZXQuZ2V0QkJveCgpOyAvL0ZpcmVmb3ggdGhyb3dzIGVycm9ycyBpZiB5b3UgdHJ5IGNhbGxpbmcgZ2V0QkJveCgpIG9uIGFuIFNWRyBlbGVtZW50IHRoYXQncyBub3QgcmVuZGVyZWQgKGxpa2UgaW4gYSA8c3ltYm9sPiBvciA8ZGVmcz4pLiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIxMThcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgYm91bmRzID0gX2dldFJlcGFyZW50ZWRDbG9uZUJCb3godGFyZ2V0KTtcclxuICAgIGNsb25lZCA9IDE7XHJcbiAgfVxyXG5cclxuICBib3VuZHMgJiYgKGJvdW5kcy53aWR0aCB8fCBib3VuZHMuaGVpZ2h0KSB8fCBjbG9uZWQgfHwgKGJvdW5kcyA9IF9nZXRSZXBhcmVudGVkQ2xvbmVCQm94KHRhcmdldCkpOyAvL3NvbWUgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgbWlzcmVwb3J0IHRoZSBib3VuZHMgaWYgdGhlIGVsZW1lbnQgaGFzIHplcm8gd2lkdGggYW5kIGhlaWdodCAoaXQganVzdCBhc3N1bWVzIGl0J3MgYXQgeDowLCB5OjApLCB0aHVzIHdlIG5lZWQgdG8gbWFudWFsbHkgZ3JhYiB0aGUgcG9zaXRpb24gaW4gdGhhdCBjYXNlLlxyXG5cclxuICByZXR1cm4gYm91bmRzICYmICFib3VuZHMud2lkdGggJiYgIWJvdW5kcy54ICYmICFib3VuZHMueSA/IHtcclxuICAgIHg6ICtfZ2V0QXR0cmlidXRlRmFsbGJhY2tzKHRhcmdldCwgW1wieFwiLCBcImN4XCIsIFwieDFcIl0pIHx8IDAsXHJcbiAgICB5OiArX2dldEF0dHJpYnV0ZUZhbGxiYWNrcyh0YXJnZXQsIFtcInlcIiwgXCJjeVwiLCBcInkxXCJdKSB8fCAwLFxyXG4gICAgd2lkdGg6IDAsXHJcbiAgICBoZWlnaHQ6IDBcclxuICB9IDogYm91bmRzO1xyXG59LFxyXG4gICAgX2lzU1ZHID0gZnVuY3Rpb24gX2lzU1ZHKGUpIHtcclxuICByZXR1cm4gISEoZS5nZXRDVE0gJiYgKCFlLnBhcmVudE5vZGUgfHwgZS5vd25lclNWR0VsZW1lbnQpICYmIF9nZXRCQm94KGUpKTtcclxufSxcclxuICAgIC8vcmVwb3J0cyBpZiB0aGUgZWxlbWVudCBpcyBhbiBTVkcgb24gd2hpY2ggZ2V0QkJveCgpIGFjdHVhbGx5IHdvcmtzXHJcbl9yZW1vdmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5KSB7XHJcbiAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICB2YXIgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXHJcbiAgICAgICAgZmlyc3QyQ2hhcnM7XHJcblxyXG4gICAgaWYgKHByb3BlcnR5IGluIF90cmFuc2Zvcm1Qcm9wcyAmJiBwcm9wZXJ0eSAhPT0gX3RyYW5zZm9ybU9yaWdpblByb3ApIHtcclxuICAgICAgcHJvcGVydHkgPSBfdHJhbnNmb3JtUHJvcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3R5bGUucmVtb3ZlUHJvcGVydHkpIHtcclxuICAgICAgZmlyc3QyQ2hhcnMgPSBwcm9wZXJ0eS5zdWJzdHIoMCwgMik7XHJcblxyXG4gICAgICBpZiAoZmlyc3QyQ2hhcnMgPT09IFwibXNcIiB8fCBwcm9wZXJ0eS5zdWJzdHIoMCwgNikgPT09IFwid2Via2l0XCIpIHtcclxuICAgICAgICAvL01pY3Jvc29mdCBhbmQgc29tZSBXZWJraXQgYnJvd3NlcnMgZG9uJ3QgY29uZm9ybSB0byB0aGUgc3RhbmRhcmQgb2YgY2FwaXRhbGl6aW5nIHRoZSBmaXJzdCBwcmVmaXggY2hhcmFjdGVyLCBzbyB3ZSBhZGp1c3Qgc28gdGhhdCB3aGVuIHdlIHByZWZpeCB0aGUgY2FwcyB3aXRoIGEgZGFzaCwgaXQncyBjb3JyZWN0IChvdGhlcndpc2UgaXQnZCBiZSBcIm1zLXRyYW5zZm9ybVwiIGluc3RlYWQgb2YgXCItbXMtdHJhbnNmb3JtXCIgZm9yIElFOSwgZm9yIGV4YW1wbGUpXHJcbiAgICAgICAgcHJvcGVydHkgPSBcIi1cIiArIHByb3BlcnR5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShmaXJzdDJDaGFycyA9PT0gXCItLVwiID8gcHJvcGVydHkgOiBwcm9wZXJ0eS5yZXBsYWNlKF9jYXBzRXhwLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vbm90ZTogb2xkIHZlcnNpb25zIG9mIElFIHVzZSBcInJlbW92ZUF0dHJpYnV0ZSgpXCIgaW5zdGVhZCBvZiBcInJlbW92ZVByb3BlcnR5KClcIlxyXG4gICAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkpO1xyXG4gICAgfVxyXG4gIH1cclxufSxcclxuICAgIF9hZGROb25Ud2VlbmluZ1BUID0gZnVuY3Rpb24gX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCBiZWdpbm5pbmcsIGVuZCwgb25seVNldEF0RW5kKSB7XHJcbiAgdmFyIHB0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCB0YXJnZXQsIHByb3BlcnR5LCAwLCAxLCBvbmx5U2V0QXRFbmQgPyBfcmVuZGVyTm9uVHdlZW5pbmdWYWx1ZU9ubHlBdEVuZCA6IF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlKTtcclxuICBwbHVnaW4uX3B0ID0gcHQ7XHJcbiAgcHQuYiA9IGJlZ2lubmluZztcclxuICBwdC5lID0gZW5kO1xyXG5cclxuICBwbHVnaW4uX3Byb3BzLnB1c2gocHJvcGVydHkpO1xyXG5cclxuICByZXR1cm4gcHQ7XHJcbn0sXHJcbiAgICBfbm9uQ29udmVydGlibGVVbml0cyA9IHtcclxuICBkZWc6IDEsXHJcbiAgcmFkOiAxLFxyXG4gIHR1cm46IDFcclxufSxcclxuICAgIF9ub25TdGFuZGFyZExheW91dHMgPSB7XHJcbiAgZ3JpZDogMSxcclxuICBmbGV4OiAxXHJcbn0sXHJcbiAgICAvL3Rha2VzIGEgc2luZ2xlIHZhbHVlIGxpa2UgMjBweCBhbmQgY29udmVydHMgaXQgdG8gdGhlIHVuaXQgc3BlY2lmaWVkLCBsaWtlIFwiJVwiLCByZXR1cm5pbmcgb25seSB0aGUgbnVtZXJpYyBhbW91bnQuXHJcbl9jb252ZXJ0VG9Vbml0ID0gZnVuY3Rpb24gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHVuaXQpIHtcclxuICB2YXIgY3VyVmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwLFxyXG4gICAgICBjdXJVbml0ID0gKHZhbHVlICsgXCJcIikudHJpbSgpLnN1YnN0cigoY3VyVmFsdWUgKyBcIlwiKS5sZW5ndGgpIHx8IFwicHhcIixcclxuICAgICAgLy8gc29tZSBicm93c2VycyBsZWF2ZSBleHRyYSB3aGl0ZXNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgQ1NTIHZhcmlhYmxlcywgaGVuY2UgdGhlIG5lZWQgdG8gdHJpbSgpXHJcbiAgc3R5bGUgPSBfdGVtcERpdi5zdHlsZSxcclxuICAgICAgaG9yaXpvbnRhbCA9IF9ob3Jpem9udGFsRXhwLnRlc3QocHJvcGVydHkpLFxyXG4gICAgICBpc1Jvb3RTVkcgPSB0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInN2Z1wiLFxyXG4gICAgICBtZWFzdXJlUHJvcGVydHkgPSAoaXNSb290U1ZHID8gXCJjbGllbnRcIiA6IFwib2Zmc2V0XCIpICsgKGhvcml6b250YWwgPyBcIldpZHRoXCIgOiBcIkhlaWdodFwiKSxcclxuICAgICAgYW1vdW50ID0gMTAwLFxyXG4gICAgICB0b1BpeGVscyA9IHVuaXQgPT09IFwicHhcIixcclxuICAgICAgdG9QZXJjZW50ID0gdW5pdCA9PT0gXCIlXCIsXHJcbiAgICAgIHB4LFxyXG4gICAgICBwYXJlbnQsXHJcbiAgICAgIGNhY2hlLFxyXG4gICAgICBpc1NWRztcclxuXHJcbiAgaWYgKHVuaXQgPT09IGN1clVuaXQgfHwgIWN1clZhbHVlIHx8IF9ub25Db252ZXJ0aWJsZVVuaXRzW3VuaXRdIHx8IF9ub25Db252ZXJ0aWJsZVVuaXRzW2N1clVuaXRdKSB7XHJcbiAgICByZXR1cm4gY3VyVmFsdWU7XHJcbiAgfVxyXG5cclxuICBjdXJVbml0ICE9PSBcInB4XCIgJiYgIXRvUGl4ZWxzICYmIChjdXJWYWx1ZSA9IF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCBcInB4XCIpKTtcclxuICBpc1NWRyA9IHRhcmdldC5nZXRDVE0gJiYgX2lzU1ZHKHRhcmdldCk7XHJcblxyXG4gIGlmICgodG9QZXJjZW50IHx8IGN1clVuaXQgPT09IFwiJVwiKSAmJiAoX3RyYW5zZm9ybVByb3BzW3Byb3BlcnR5XSB8fCB+cHJvcGVydHkuaW5kZXhPZihcImFkaXVzXCIpKSkge1xyXG4gICAgcHggPSBpc1NWRyA/IHRhcmdldC5nZXRCQm94KClbaG9yaXpvbnRhbCA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJdIDogdGFyZ2V0W21lYXN1cmVQcm9wZXJ0eV07XHJcbiAgICByZXR1cm4gX3JvdW5kKHRvUGVyY2VudCA/IGN1clZhbHVlIC8gcHggKiBhbW91bnQgOiBjdXJWYWx1ZSAvIDEwMCAqIHB4KTtcclxuICB9XHJcblxyXG4gIHN0eWxlW2hvcml6b250YWwgPyBcIndpZHRoXCIgOiBcImhlaWdodFwiXSA9IGFtb3VudCArICh0b1BpeGVscyA/IGN1clVuaXQgOiB1bml0KTtcclxuICBwYXJlbnQgPSB1bml0ICE9PSBcInJlbVwiICYmIH5wcm9wZXJ0eS5pbmRleE9mKFwiYWRpdXNcIikgfHwgdW5pdCA9PT0gXCJlbVwiICYmIHRhcmdldC5hcHBlbmRDaGlsZCAmJiAhaXNSb290U1ZHID8gdGFyZ2V0IDogdGFyZ2V0LnBhcmVudE5vZGU7XHJcblxyXG4gIGlmIChpc1NWRykge1xyXG4gICAgcGFyZW50ID0gKHRhcmdldC5vd25lclNWR0VsZW1lbnQgfHwge30pLnBhcmVudE5vZGU7XHJcbiAgfVxyXG5cclxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQgPT09IF9kb2MgfHwgIXBhcmVudC5hcHBlbmRDaGlsZCkge1xyXG4gICAgcGFyZW50ID0gX2RvYy5ib2R5O1xyXG4gIH1cclxuXHJcbiAgY2FjaGUgPSBwYXJlbnQuX2dzYXA7XHJcblxyXG4gIGlmIChjYWNoZSAmJiB0b1BlcmNlbnQgJiYgY2FjaGUud2lkdGggJiYgaG9yaXpvbnRhbCAmJiBjYWNoZS50aW1lID09PSBfdGlja2VyLnRpbWUgJiYgIWNhY2hlLnVuY2FjaGUpIHtcclxuICAgIHJldHVybiBfcm91bmQoY3VyVmFsdWUgLyBjYWNoZS53aWR0aCAqIGFtb3VudCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0b1BlcmNlbnQgJiYgKHByb3BlcnR5ID09PSBcImhlaWdodFwiIHx8IHByb3BlcnR5ID09PSBcIndpZHRoXCIpKSB7XHJcbiAgICAgIC8vIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB3aWR0aC9oZWlnaHQgdGhhdCdzIGluc2lkZSBhIGNvbnRhaW5lciB3aXRoIHBhZGRpbmcgYW5kL29yIGl0J3MgYSBmbGV4Ym94L2dyaWQgY29udGFpbmVyLCB3ZSBtdXN0IGFwcGx5IGl0IHRvIHRoZSB0YXJnZXQgaXRzZWxmIHJhdGhlciB0aGFuIHRoZSBfdGVtcERpdiBpbiBvcmRlciB0byBlbnN1cmUgY29tcGxldGUgYWNjdXJhY3ksIGZhY3RvcmluZyBpbiB0aGUgcGFyZW50J3MgcGFkZGluZy5cclxuICAgICAgdmFyIHYgPSB0YXJnZXQuc3R5bGVbcHJvcGVydHldO1xyXG4gICAgICB0YXJnZXQuc3R5bGVbcHJvcGVydHldID0gYW1vdW50ICsgdW5pdDtcclxuICAgICAgcHggPSB0YXJnZXRbbWVhc3VyZVByb3BlcnR5XTtcclxuICAgICAgdiA/IHRhcmdldC5zdHlsZVtwcm9wZXJ0eV0gPSB2IDogX3JlbW92ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgKHRvUGVyY2VudCB8fCBjdXJVbml0ID09PSBcIiVcIikgJiYgIV9ub25TdGFuZGFyZExheW91dHNbX2dldENvbXB1dGVkUHJvcGVydHkocGFyZW50LCBcImRpc3BsYXlcIildICYmIChzdHlsZS5wb3NpdGlvbiA9IF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgXCJwb3NpdGlvblwiKSk7XHJcbiAgICAgIHBhcmVudCA9PT0gdGFyZ2V0ICYmIChzdHlsZS5wb3NpdGlvbiA9IFwic3RhdGljXCIpOyAvLyBsaWtlIGZvciBib3JkZXJSYWRpdXMsIGlmIGl0J3MgYSAlIHdlIG11c3QgaGF2ZSBpdCByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IGl0c2VsZiBidXQgdGhhdCBtYXkgbm90IGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIG9yIHBvc2l0aW9uOiBhYnNvbHV0ZSBpbiB3aGljaCBjYXNlIGl0J2QgZ28gdXAgdGhlIGNoYWluIHVudGlsIGl0IGZpbmRzIGl0cyBvZmZzZXRQYXJlbnQgKGJhZCkuIHBvc2l0aW9uOiBzdGF0aWMgcHJvdGVjdHMgYWdhaW5zdCB0aGF0LlxyXG5cclxuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKF90ZW1wRGl2KTtcclxuICAgICAgcHggPSBfdGVtcERpdlttZWFzdXJlUHJvcGVydHldO1xyXG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoX3RlbXBEaXYpO1xyXG4gICAgICBzdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaG9yaXpvbnRhbCAmJiB0b1BlcmNlbnQpIHtcclxuICAgICAgY2FjaGUgPSBfZ2V0Q2FjaGUocGFyZW50KTtcclxuICAgICAgY2FjaGUudGltZSA9IF90aWNrZXIudGltZTtcclxuICAgICAgY2FjaGUud2lkdGggPSBwYXJlbnRbbWVhc3VyZVByb3BlcnR5XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBfcm91bmQodG9QaXhlbHMgPyBweCAqIGN1clZhbHVlIC8gYW1vdW50IDogcHggJiYgY3VyVmFsdWUgPyBhbW91bnQgLyBweCAqIGN1clZhbHVlIDogMCk7XHJcbn0sXHJcbiAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCB1bml0LCB1bmNhY2hlKSB7XHJcbiAgdmFyIHZhbHVlO1xyXG4gIF9wbHVnaW5Jbml0dGVkIHx8IF9pbml0Q29yZSgpO1xyXG5cclxuICBpZiAocHJvcGVydHkgaW4gX3Byb3BlcnR5QWxpYXNlcyAmJiBwcm9wZXJ0eSAhPT0gXCJ0cmFuc2Zvcm1cIikge1xyXG4gICAgcHJvcGVydHkgPSBfcHJvcGVydHlBbGlhc2VzW3Byb3BlcnR5XTtcclxuXHJcbiAgICBpZiAofnByb3BlcnR5LmluZGV4T2YoXCIsXCIpKSB7XHJcbiAgICAgIHByb3BlcnR5ID0gcHJvcGVydHkuc3BsaXQoXCIsXCIpWzBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKF90cmFuc2Zvcm1Qcm9wc1twcm9wZXJ0eV0gJiYgcHJvcGVydHkgIT09IFwidHJhbnNmb3JtXCIpIHtcclxuICAgIHZhbHVlID0gX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgdW5jYWNoZSk7XHJcbiAgICB2YWx1ZSA9IHByb3BlcnR5ICE9PSBcInRyYW5zZm9ybU9yaWdpblwiID8gdmFsdWVbcHJvcGVydHldIDogdmFsdWUuc3ZnID8gdmFsdWUub3JpZ2luIDogX2ZpcnN0VHdvT25seShfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIF90cmFuc2Zvcm1PcmlnaW5Qcm9wKSkgKyBcIiBcIiArIHZhbHVlLnpPcmlnaW4gKyBcInB4XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHZhbHVlID0gdGFyZ2V0LnN0eWxlW3Byb3BlcnR5XTtcclxuXHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSBcImF1dG9cIiB8fCB1bmNhY2hlIHx8IH4odmFsdWUgKyBcIlwiKS5pbmRleE9mKFwiY2FsYyhcIikpIHtcclxuICAgICAgdmFsdWUgPSBfc3BlY2lhbFByb3BzW3Byb3BlcnR5XSAmJiBfc3BlY2lhbFByb3BzW3Byb3BlcnR5XSh0YXJnZXQsIHByb3BlcnR5LCB1bml0KSB8fCBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5KSB8fCBfZ2V0UHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSkgfHwgKHByb3BlcnR5ID09PSBcIm9wYWNpdHlcIiA/IDEgOiAwKTsgLy8gbm90ZTogc29tZSBicm93c2VycywgbGlrZSBGaXJlZm94LCBkb24ndCByZXBvcnQgYm9yZGVyUmFkaXVzIGNvcnJlY3RseSEgSW5zdGVhZCwgaXQgb25seSByZXBvcnRzIGV2ZXJ5IGNvcm5lciBsaWtlICBib3JkZXJUb3BMZWZ0UmFkaXVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdW5pdCAmJiAhfih2YWx1ZSArIFwiXCIpLnRyaW0oKS5pbmRleE9mKFwiIFwiKSA/IF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCB1bml0KSArIHVuaXQgOiB2YWx1ZTtcclxufSxcclxuICAgIF90d2VlbkNvbXBsZXhDU1NTdHJpbmcgPSBmdW5jdGlvbiBfdHdlZW5Db21wbGV4Q1NTU3RyaW5nKHRhcmdldCwgcHJvcCwgc3RhcnQsIGVuZCkge1xyXG4gIC8vIG5vdGU6IHdlIGNhbGwgX3R3ZWVuQ29tcGxleENTU1N0cmluZy5jYWxsKHBsdWdpbkluc3RhbmNlLi4uKSB0byBlbnN1cmUgdGhhdCBpdCdzIHNjb3BlZCBwcm9wZXJseS4gV2UgbWF5IGNhbGwgaXQgZnJvbSB3aXRoaW4gYSBwbHVnaW4gdG9vLCB0aHVzIFwidGhpc1wiIHdvdWxkIHJlZmVyIHRvIHRoZSBwbHVnaW4uXHJcbiAgaWYgKCFzdGFydCB8fCBzdGFydCA9PT0gXCJub25lXCIpIHtcclxuICAgIC8vIHNvbWUgYnJvd3NlcnMgbGlrZSBTYWZhcmkgYWN0dWFsbHkgUFJFRkVSIHRoZSBwcmVmaXhlZCBwcm9wZXJ0eSBhbmQgbWlzLXJlcG9ydCB0aGUgdW5wcmVmaXhlZCB2YWx1ZSBsaWtlIGNsaXBQYXRoIChCVUcpLiBJbiBvdGhlciB3b3JkcywgZXZlbiB0aG91Z2ggY2xpcFBhdGggZXhpc3RzIGluIHRoZSBzdHlsZSAoXCJjbGlwUGF0aFwiIGluIHRhcmdldC5zdHlsZSkgYW5kIGl0J3Mgc2V0IGluIHRoZSBDU1MgcHJvcGVybHkgKGFsb25nIHdpdGggLXdlYmtpdC1jbGlwLXBhdGgpLCBTYWZhcmkgcmVwb3J0cyBjbGlwUGF0aCBhcyBcIm5vbmVcIiB3aGVyZWFzIFdlYmtpdENsaXBQYXRoIHJlcG9ydHMgYWNjdXJhdGVseSBsaWtlIFwiZWxsaXBzZSgxMDAlIDAlIGF0IDUwJSAwJSlcIiwgc28gaW4gdGhpcyBjYXNlIHdlIG11c3QgU1dJVENIIHRvIHVzaW5nIHRoZSBwcmVmaXhlZCBwcm9wZXJ0eSBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9nc2FwLmNvbS9mb3J1bXMvdG9waWMvMTgzMTAtY2xpcHBhdGgtZG9lc250LXdvcmstb24taW9zL1xyXG4gICAgdmFyIHAgPSBfY2hlY2tQcm9wUHJlZml4KHByb3AsIHRhcmdldCwgMSksXHJcbiAgICAgICAgcyA9IHAgJiYgX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBwLCAxKTtcclxuXHJcbiAgICBpZiAocyAmJiBzICE9PSBzdGFydCkge1xyXG4gICAgICBwcm9wID0gcDtcclxuICAgICAgc3RhcnQgPSBzO1xyXG4gICAgfSBlbHNlIGlmIChwcm9wID09PSBcImJvcmRlckNvbG9yXCIpIHtcclxuICAgICAgc3RhcnQgPSBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIFwiYm9yZGVyVG9wQ29sb3JcIik7IC8vIEZpcmVmb3ggYnVnOiBhbHdheXMgcmVwb3J0cyBcImJvcmRlckNvbG9yXCIgYXMgXCJcIiwgc28gd2UgbXVzdCBmYWxsIGJhY2sgdG8gYm9yZGVyVG9wQ29sb3IuIFNlZSBodHRwczovL2dzYXAuY29tL2ZvcnVtcy90b3BpYy8yNDU4My1ob3ctdG8tcmV0dXJuLWNvbG9ycy10aGF0LWktaGFkLWFmdGVyLXJldmVyc2UvXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgcHQgPSBuZXcgUHJvcFR3ZWVuKHRoaXMuX3B0LCB0YXJnZXQuc3R5bGUsIHByb3AsIDAsIDEsIF9yZW5kZXJDb21wbGV4U3RyaW5nKSxcclxuICAgICAgaW5kZXggPSAwLFxyXG4gICAgICBtYXRjaEluZGV4ID0gMCxcclxuICAgICAgYSxcclxuICAgICAgcmVzdWx0LFxyXG4gICAgICBzdGFydFZhbHVlcyxcclxuICAgICAgc3RhcnROdW0sXHJcbiAgICAgIGNvbG9yLFxyXG4gICAgICBzdGFydFZhbHVlLFxyXG4gICAgICBlbmRWYWx1ZSxcclxuICAgICAgZW5kTnVtLFxyXG4gICAgICBjaHVuayxcclxuICAgICAgZW5kVW5pdCxcclxuICAgICAgc3RhcnRVbml0LFxyXG4gICAgICBlbmRWYWx1ZXM7XHJcbiAgcHQuYiA9IHN0YXJ0O1xyXG4gIHB0LmUgPSBlbmQ7XHJcbiAgc3RhcnQgKz0gXCJcIjsgLy8gZW5zdXJlIHZhbHVlcyBhcmUgc3RyaW5nc1xyXG5cclxuICBlbmQgKz0gXCJcIjtcclxuXHJcbiAgaWYgKGVuZC5zdWJzdHJpbmcoMCwgNikgPT09IFwidmFyKC0tXCIpIHtcclxuICAgIGVuZCA9IF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgZW5kLnN1YnN0cmluZyg0LCBlbmQuaW5kZXhPZihcIilcIikpKTtcclxuICB9XHJcblxyXG4gIGlmIChlbmQgPT09IFwiYXV0b1wiKSB7XHJcbiAgICBzdGFydFZhbHVlID0gdGFyZ2V0LnN0eWxlW3Byb3BdO1xyXG4gICAgdGFyZ2V0LnN0eWxlW3Byb3BdID0gZW5kO1xyXG4gICAgZW5kID0gX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBwcm9wKSB8fCBlbmQ7XHJcbiAgICBzdGFydFZhbHVlID8gdGFyZ2V0LnN0eWxlW3Byb3BdID0gc3RhcnRWYWx1ZSA6IF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xyXG4gIH1cclxuXHJcbiAgYSA9IFtzdGFydCwgZW5kXTtcclxuXHJcbiAgX2NvbG9yU3RyaW5nRmlsdGVyKGEpOyAvLyBwYXNzIGFuIGFycmF5IHdpdGggdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgdmFsdWVzIGFuZCBsZXQgdGhlIGZpbHRlciBkbyB3aGF0ZXZlciBpdCBuZWVkcyB0byB0aGUgdmFsdWVzLiBJZiBjb2xvcnMgYXJlIGZvdW5kLCBpdCByZXR1cm5zIHRydWUgYW5kIHRoZW4gd2UgbXVzdCBtYXRjaCB3aGVyZSB0aGUgY29sb3Igc2hvd3MgdXAgb3JkZXItd2lzZSBiZWNhdXNlIGZvciB0aGluZ3MgbGlrZSBib3hTaGFkb3csIHNvbWV0aW1lcyB0aGUgYnJvd3NlciBwcm92aWRlcyB0aGUgY29tcHV0ZWQgdmFsdWVzIHdpdGggdGhlIGNvbG9yIEZJUlNULCBidXQgdGhlIHVzZXIgcHJvdmlkZXMgaXQgd2l0aCB0aGUgY29sb3IgTEFTVCwgc28gZmxpcCB0aGVtIGlmIG5lY2Vzc2FyeS4gU2FtZSBmb3IgZHJvcC1zaGFkb3coKS5cclxuXHJcblxyXG4gIHN0YXJ0ID0gYVswXTtcclxuICBlbmQgPSBhWzFdO1xyXG4gIHN0YXJ0VmFsdWVzID0gc3RhcnQubWF0Y2goX251bVdpdGhVbml0RXhwKSB8fCBbXTtcclxuICBlbmRWYWx1ZXMgPSBlbmQubWF0Y2goX251bVdpdGhVbml0RXhwKSB8fCBbXTtcclxuXHJcbiAgaWYgKGVuZFZhbHVlcy5sZW5ndGgpIHtcclxuICAgIHdoaWxlIChyZXN1bHQgPSBfbnVtV2l0aFVuaXRFeHAuZXhlYyhlbmQpKSB7XHJcbiAgICAgIGVuZFZhbHVlID0gcmVzdWx0WzBdO1xyXG4gICAgICBjaHVuayA9IGVuZC5zdWJzdHJpbmcoaW5kZXgsIHJlc3VsdC5pbmRleCk7XHJcblxyXG4gICAgICBpZiAoY29sb3IpIHtcclxuICAgICAgICBjb2xvciA9IChjb2xvciArIDEpICUgNTtcclxuICAgICAgfSBlbHNlIGlmIChjaHVuay5zdWJzdHIoLTUpID09PSBcInJnYmEoXCIgfHwgY2h1bmsuc3Vic3RyKC01KSA9PT0gXCJoc2xhKFwiKSB7XHJcbiAgICAgICAgY29sb3IgPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZW5kVmFsdWUgIT09IChzdGFydFZhbHVlID0gc3RhcnRWYWx1ZXNbbWF0Y2hJbmRleCsrXSB8fCBcIlwiKSkge1xyXG4gICAgICAgIHN0YXJ0TnVtID0gcGFyc2VGbG9hdChzdGFydFZhbHVlKSB8fCAwO1xyXG4gICAgICAgIHN0YXJ0VW5pdCA9IHN0YXJ0VmFsdWUuc3Vic3RyKChzdGFydE51bSArIFwiXCIpLmxlbmd0aCk7XHJcbiAgICAgICAgZW5kVmFsdWUuY2hhckF0KDEpID09PSBcIj1cIiAmJiAoZW5kVmFsdWUgPSBfcGFyc2VSZWxhdGl2ZShzdGFydE51bSwgZW5kVmFsdWUpICsgc3RhcnRVbml0KTtcclxuICAgICAgICBlbmROdW0gPSBwYXJzZUZsb2F0KGVuZFZhbHVlKTtcclxuICAgICAgICBlbmRVbml0ID0gZW5kVmFsdWUuc3Vic3RyKChlbmROdW0gKyBcIlwiKS5sZW5ndGgpO1xyXG4gICAgICAgIGluZGV4ID0gX251bVdpdGhVbml0RXhwLmxhc3RJbmRleCAtIGVuZFVuaXQubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIWVuZFVuaXQpIHtcclxuICAgICAgICAgIC8vaWYgc29tZXRoaW5nIGxpa2UgXCJwZXJzcGVjdGl2ZTozMDBcIiBpcyBwYXNzZWQgaW4gYW5kIHdlIG11c3QgYWRkIGEgdW5pdCB0byB0aGUgZW5kXHJcbiAgICAgICAgICBlbmRVbml0ID0gZW5kVW5pdCB8fCBfY29uZmlnLnVuaXRzW3Byb3BdIHx8IHN0YXJ0VW5pdDtcclxuXHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGVuZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZW5kICs9IGVuZFVuaXQ7XHJcbiAgICAgICAgICAgIHB0LmUgKz0gZW5kVW5pdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGFydFVuaXQgIT09IGVuZFVuaXQpIHtcclxuICAgICAgICAgIHN0YXJ0TnVtID0gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwcm9wLCBzdGFydFZhbHVlLCBlbmRVbml0KSB8fCAwO1xyXG4gICAgICAgIH0gLy8gdGhlc2UgbmVzdGVkIFByb3BUd2VlbnMgYXJlIGhhbmRsZWQgaW4gYSBzcGVjaWFsIHdheSAtIHdlJ2xsIG5ldmVyIGFjdHVhbGx5IGNhbGwgYSByZW5kZXIgb3Igc2V0dGVyIG1ldGhvZCBvbiB0aGVtLiBXZSdsbCBqdXN0IGxvb3AgdGhyb3VnaCB0aGVtIGluIHRoZSBwYXJlbnQgY29tcGxleCBzdHJpbmcgUHJvcFR3ZWVuJ3MgcmVuZGVyIG1ldGhvZC5cclxuXHJcblxyXG4gICAgICAgIHB0Ll9wdCA9IHtcclxuICAgICAgICAgIF9uZXh0OiBwdC5fcHQsXHJcbiAgICAgICAgICBwOiBjaHVuayB8fCBtYXRjaEluZGV4ID09PSAxID8gY2h1bmsgOiBcIixcIixcclxuICAgICAgICAgIC8vbm90ZTogU1ZHIHNwZWMgYWxsb3dzIG9taXNzaW9uIG9mIGNvbW1hL3NwYWNlIHdoZW4gYSBuZWdhdGl2ZSBzaWduIGlzIHdlZGdlZCBiZXR3ZWVuIHR3byBudW1iZXJzLCBsaWtlIDIuNS01LjMgaW5zdGVhZCBvZiAyLjUsLTUuMyBidXQgd2hlbiB0d2VlbmluZywgdGhlIG5lZ2F0aXZlIHZhbHVlIG1heSBzd2l0Y2ggdG8gcG9zaXRpdmUsIHNvIHdlIGluc2VydCB0aGUgY29tbWEganVzdCBpbiBjYXNlLlxyXG4gICAgICAgICAgczogc3RhcnROdW0sXHJcbiAgICAgICAgICBjOiBlbmROdW0gLSBzdGFydE51bSxcclxuICAgICAgICAgIG06IGNvbG9yICYmIGNvbG9yIDwgNCB8fCBwcm9wID09PSBcInpJbmRleFwiID8gTWF0aC5yb3VuZCA6IDBcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHQuYyA9IGluZGV4IDwgZW5kLmxlbmd0aCA/IGVuZC5zdWJzdHJpbmcoaW5kZXgsIGVuZC5sZW5ndGgpIDogXCJcIjsgLy93ZSB1c2UgdGhlIFwiY1wiIG9mIHRoZSBQcm9wVHdlZW4gdG8gc3RvcmUgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIHN0cmluZyAoYWZ0ZXIgdGhlIGxhc3QgbnVtYmVyKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBwdC5yID0gcHJvcCA9PT0gXCJkaXNwbGF5XCIgJiYgZW5kID09PSBcIm5vbmVcIiA/IF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlT25seUF0RW5kIDogX3JlbmRlck5vblR3ZWVuaW5nVmFsdWU7XHJcbiAgfVxyXG5cclxuICBfcmVsRXhwLnRlc3QoZW5kKSAmJiAocHQuZSA9IDApOyAvL2lmIHRoZSBlbmQgc3RyaW5nIGNvbnRhaW5zIHJlbGF0aXZlIHZhbHVlcyBvciBkeW5hbWljIHJhbmRvbSguLi4pIHZhbHVlcywgZGVsZXRlIHRoZSBlbmQgaXQgc28gdGhhdCBvbiB0aGUgZmluYWwgcmVuZGVyIHdlIGRvbid0IGFjdHVhbGx5IHNldCBpdCB0byB0aGUgc3RyaW5nIHdpdGggKz0gb3IgLT0gY2hhcmFjdGVycyAoZm9yY2VzIGl0IHRvIHVzZSB0aGUgY2FsY3VsYXRlZCB2YWx1ZSkuXHJcblxyXG4gIHRoaXMuX3B0ID0gcHQ7IC8vc3RhcnQgdGhlIGxpbmtlZCBsaXN0IHdpdGggdGhpcyBuZXcgUHJvcFR3ZWVuLiBSZW1lbWJlciwgd2UgY2FsbCBfdHdlZW5Db21wbGV4Q1NTU3RyaW5nLmNhbGwocGx1Z2luSW5zdGFuY2UuLi4pIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2NvcGVkIHByb3Blcmx5LiBXZSBtYXkgY2FsbCBpdCBmcm9tIHdpdGhpbiBhbm90aGVyIHBsdWdpbiB0b28sIHRodXMgXCJ0aGlzXCIgd291bGQgcmVmZXIgdG8gdGhlIHBsdWdpbi5cclxuXHJcbiAgcmV0dXJuIHB0O1xyXG59LFxyXG4gICAgX2tleXdvcmRUb1BlcmNlbnQgPSB7XHJcbiAgdG9wOiBcIjAlXCIsXHJcbiAgYm90dG9tOiBcIjEwMCVcIixcclxuICBsZWZ0OiBcIjAlXCIsXHJcbiAgcmlnaHQ6IFwiMTAwJVwiLFxyXG4gIGNlbnRlcjogXCI1MCVcIlxyXG59LFxyXG4gICAgX2NvbnZlcnRLZXl3b3Jkc1RvUGVyY2VudGFnZXMgPSBmdW5jdGlvbiBfY29udmVydEtleXdvcmRzVG9QZXJjZW50YWdlcyh2YWx1ZSkge1xyXG4gIHZhciBzcGxpdCA9IHZhbHVlLnNwbGl0KFwiIFwiKSxcclxuICAgICAgeCA9IHNwbGl0WzBdLFxyXG4gICAgICB5ID0gc3BsaXRbMV0gfHwgXCI1MCVcIjtcclxuXHJcbiAgaWYgKHggPT09IFwidG9wXCIgfHwgeCA9PT0gXCJib3R0b21cIiB8fCB5ID09PSBcImxlZnRcIiB8fCB5ID09PSBcInJpZ2h0XCIpIHtcclxuICAgIC8vdGhlIHVzZXIgcHJvdmlkZWQgdGhlbSBpbiB0aGUgd3Jvbmcgb3JkZXIsIHNvIGZsaXAgdGhlbVxyXG4gICAgdmFsdWUgPSB4O1xyXG4gICAgeCA9IHk7XHJcbiAgICB5ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzcGxpdFswXSA9IF9rZXl3b3JkVG9QZXJjZW50W3hdIHx8IHg7XHJcbiAgc3BsaXRbMV0gPSBfa2V5d29yZFRvUGVyY2VudFt5XSB8fCB5O1xyXG4gIHJldHVybiBzcGxpdC5qb2luKFwiIFwiKTtcclxufSxcclxuICAgIF9yZW5kZXJDbGVhclByb3BzID0gZnVuY3Rpb24gX3JlbmRlckNsZWFyUHJvcHMocmF0aW8sIGRhdGEpIHtcclxuICBpZiAoZGF0YS50d2VlbiAmJiBkYXRhLnR3ZWVuLl90aW1lID09PSBkYXRhLnR3ZWVuLl9kdXIpIHtcclxuICAgIHZhciB0YXJnZXQgPSBkYXRhLnQsXHJcbiAgICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXHJcbiAgICAgICAgcHJvcHMgPSBkYXRhLnUsXHJcbiAgICAgICAgY2FjaGUgPSB0YXJnZXQuX2dzYXAsXHJcbiAgICAgICAgcHJvcCxcclxuICAgICAgICBjbGVhclRyYW5zZm9ybXMsXHJcbiAgICAgICAgaTtcclxuXHJcbiAgICBpZiAocHJvcHMgPT09IFwiYWxsXCIgfHwgcHJvcHMgPT09IHRydWUpIHtcclxuICAgICAgc3R5bGUuY3NzVGV4dCA9IFwiXCI7XHJcbiAgICAgIGNsZWFyVHJhbnNmb3JtcyA9IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wcyA9IHByb3BzLnNwbGl0KFwiLFwiKTtcclxuICAgICAgaSA9IHByb3BzLmxlbmd0aDtcclxuXHJcbiAgICAgIHdoaWxlICgtLWkgPiAtMSkge1xyXG4gICAgICAgIHByb3AgPSBwcm9wc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKF90cmFuc2Zvcm1Qcm9wc1twcm9wXSkge1xyXG4gICAgICAgICAgY2xlYXJUcmFuc2Zvcm1zID0gMTtcclxuICAgICAgICAgIHByb3AgPSBwcm9wID09PSBcInRyYW5zZm9ybU9yaWdpblwiID8gX3RyYW5zZm9ybU9yaWdpblByb3AgOiBfdHJhbnNmb3JtUHJvcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNsZWFyVHJhbnNmb3Jtcykge1xyXG4gICAgICBfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtUHJvcCk7XHJcblxyXG4gICAgICBpZiAoY2FjaGUpIHtcclxuICAgICAgICBjYWNoZS5zdmcgJiYgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTtcclxuICAgICAgICBzdHlsZS5zY2FsZSA9IHN0eWxlLnJvdGF0ZSA9IHN0eWxlLnRyYW5zbGF0ZSA9IFwibm9uZVwiO1xyXG5cclxuICAgICAgICBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCAxKTsgLy8gZm9yY2UgYWxsIHRoZSBjYWNoZWQgdmFsdWVzIGJhY2sgdG8gXCJub3JtYWxcIi9pZGVudGl0eSwgb3RoZXJ3aXNlIGlmIHRoZXJlJ3MgYW5vdGhlciB0d2VlbiB0aGF0J3MgYWxyZWFkeSBzZXQgdG8gcmVuZGVyIHRyYW5zZm9ybXMgb24gdGhpcyBlbGVtZW50LCBpdCBjb3VsZCBkaXNwbGF5IHRoZSB3cm9uZyB2YWx1ZXMuXHJcblxyXG5cclxuICAgICAgICBjYWNoZS51bmNhY2hlID0gMTtcclxuXHJcbiAgICAgICAgX3JlbW92ZUluZGVwZW5kZW50VHJhbnNmb3JtcyhzdHlsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0sXHJcbiAgICAvLyBub3RlOiBzcGVjaWFsUHJvcHMgc2hvdWxkIHJldHVybiAxIGlmIChhbmQgb25seSBpZikgdGhleSBoYXZlIGEgbm9uLXplcm8gcHJpb3JpdHkuIEl0IGluZGljYXRlcyB3ZSBuZWVkIHRvIHNvcnQgdGhlIGxpbmtlZCBsaXN0LlxyXG5fc3BlY2lhbFByb3BzID0ge1xyXG4gIGNsZWFyUHJvcHM6IGZ1bmN0aW9uIGNsZWFyUHJvcHMocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCBlbmRWYWx1ZSwgdHdlZW4pIHtcclxuICAgIGlmICh0d2Vlbi5kYXRhICE9PSBcImlzRnJvbVN0YXJ0XCIpIHtcclxuICAgICAgdmFyIHB0ID0gcGx1Z2luLl9wdCA9IG5ldyBQcm9wVHdlZW4ocGx1Z2luLl9wdCwgdGFyZ2V0LCBwcm9wZXJ0eSwgMCwgMCwgX3JlbmRlckNsZWFyUHJvcHMpO1xyXG4gICAgICBwdC51ID0gZW5kVmFsdWU7XHJcbiAgICAgIHB0LnByID0gLTEwO1xyXG4gICAgICBwdC50d2VlbiA9IHR3ZWVuO1xyXG5cclxuICAgICAgcGx1Z2luLl9wcm9wcy5wdXNoKHByb3BlcnR5KTtcclxuXHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKiBjbGFzc05hbWUgZmVhdHVyZSAoYWJvdXQgMC40a2IgZ3ppcHBlZCkuXHJcbiAgLCBjbGFzc05hbWUocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCBlbmRWYWx1ZSwgdHdlZW4pIHtcclxuICBcdGxldCBfcmVuZGVyQ2xhc3NOYW1lID0gKHJhdGlvLCBkYXRhKSA9PiB7XHJcbiAgXHRcdFx0ZGF0YS5jc3MucmVuZGVyKHJhdGlvLCBkYXRhLmNzcyk7XHJcbiAgXHRcdFx0aWYgKCFyYXRpbyB8fCByYXRpbyA9PT0gMSkge1xyXG4gIFx0XHRcdFx0bGV0IGlubGluZSA9IGRhdGEucm12LFxyXG4gIFx0XHRcdFx0XHR0YXJnZXQgPSBkYXRhLnQsXHJcbiAgXHRcdFx0XHRcdHA7XHJcbiAgXHRcdFx0XHR0YXJnZXQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgcmF0aW8gPyBkYXRhLmUgOiBkYXRhLmIpO1xyXG4gIFx0XHRcdFx0Zm9yIChwIGluIGlubGluZSkge1xyXG4gIFx0XHRcdFx0XHRfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBwKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcbiAgXHRcdF9nZXRBbGxTdHlsZXMgPSAodGFyZ2V0KSA9PiB7XHJcbiAgXHRcdFx0bGV0IHN0eWxlcyA9IHt9LFxyXG4gIFx0XHRcdFx0Y29tcHV0ZWQgPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCksXHJcbiAgXHRcdFx0XHRwO1xyXG4gIFx0XHRcdGZvciAocCBpbiBjb21wdXRlZCkge1xyXG4gIFx0XHRcdFx0aWYgKGlzTmFOKHApICYmIHAgIT09IFwiY3NzVGV4dFwiICYmIHAgIT09IFwibGVuZ3RoXCIpIHtcclxuICBcdFx0XHRcdFx0c3R5bGVzW3BdID0gY29tcHV0ZWRbcF07XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdF9zZXREZWZhdWx0cyhzdHlsZXMsIF9wYXJzZVRyYW5zZm9ybSh0YXJnZXQsIDEpKTtcclxuICBcdFx0XHRyZXR1cm4gc3R5bGVzO1xyXG4gIFx0XHR9LFxyXG4gIFx0XHRzdGFydENsYXNzTGlzdCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSxcclxuICBcdFx0c3R5bGUgPSB0YXJnZXQuc3R5bGUsXHJcbiAgXHRcdGNzc1RleHQgPSBzdHlsZS5jc3NUZXh0LFxyXG4gIFx0XHRjYWNoZSA9IHRhcmdldC5fZ3NhcCxcclxuICBcdFx0Y2xhc3NQVCA9IGNhY2hlLmNsYXNzUFQsXHJcbiAgXHRcdGlubGluZVRvUmVtb3ZlQXRFbmQgPSB7fSxcclxuICBcdFx0ZGF0YSA9IHt0OnRhcmdldCwgcGx1Z2luOnBsdWdpbiwgcm12OmlubGluZVRvUmVtb3ZlQXRFbmQsIGI6c3RhcnRDbGFzc0xpc3QsIGU6KGVuZFZhbHVlLmNoYXJBdCgxKSAhPT0gXCI9XCIpID8gZW5kVmFsdWUgOiBzdGFydENsYXNzTGlzdC5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoPzpcXFxcc3xeKVwiICsgZW5kVmFsdWUuc3Vic3RyKDIpICsgXCIoPyFbXFxcXHctXSlcIiksIFwiXCIpICsgKChlbmRWYWx1ZS5jaGFyQXQoMCkgPT09IFwiK1wiKSA/IFwiIFwiICsgZW5kVmFsdWUuc3Vic3RyKDIpIDogXCJcIil9LFxyXG4gIFx0XHRjaGFuZ2luZ1ZhcnMgPSB7fSxcclxuICBcdFx0c3RhcnRWYXJzID0gX2dldEFsbFN0eWxlcyh0YXJnZXQpLFxyXG4gIFx0XHR0cmFuc2Zvcm1SZWxhdGVkID0gLyh0cmFuc2Zvcm18cGVyc3BlY3RpdmUpL2ksXHJcbiAgXHRcdGVuZFZhcnMsIHA7XHJcbiAgXHRpZiAoY2xhc3NQVCkge1xyXG4gIFx0XHRjbGFzc1BULnIoMSwgY2xhc3NQVC5kKTtcclxuICBcdFx0X3JlbW92ZUxpbmtlZExpc3RJdGVtKGNsYXNzUFQuZC5wbHVnaW4sIGNsYXNzUFQsIFwiX3B0XCIpO1xyXG4gIFx0fVxyXG4gIFx0dGFyZ2V0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIGRhdGEuZSk7XHJcbiAgXHRlbmRWYXJzID0gX2dldEFsbFN0eWxlcyh0YXJnZXQsIHRydWUpO1xyXG4gIFx0dGFyZ2V0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHN0YXJ0Q2xhc3NMaXN0KTtcclxuICBcdGZvciAocCBpbiBlbmRWYXJzKSB7XHJcbiAgXHRcdGlmIChlbmRWYXJzW3BdICE9PSBzdGFydFZhcnNbcF0gJiYgIXRyYW5zZm9ybVJlbGF0ZWQudGVzdChwKSkge1xyXG4gIFx0XHRcdGNoYW5naW5nVmFyc1twXSA9IGVuZFZhcnNbcF07XHJcbiAgXHRcdFx0aWYgKCFzdHlsZVtwXSAmJiBzdHlsZVtwXSAhPT0gXCIwXCIpIHtcclxuICBcdFx0XHRcdGlubGluZVRvUmVtb3ZlQXRFbmRbcF0gPSAxO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIFx0Y2FjaGUuY2xhc3NQVCA9IHBsdWdpbi5fcHQgPSBuZXcgUHJvcFR3ZWVuKHBsdWdpbi5fcHQsIHRhcmdldCwgXCJjbGFzc05hbWVcIiwgMCwgMCwgX3JlbmRlckNsYXNzTmFtZSwgZGF0YSwgMCwgLTExKTtcclxuICBcdGlmIChzdHlsZS5jc3NUZXh0ICE9PSBjc3NUZXh0KSB7IC8vb25seSBhcHBseSBpZiB0aGluZ3MgY2hhbmdlLiBPdGhlcndpc2UsIGluIGNhc2VzIGxpa2UgYSBiYWNrZ3JvdW5kLWltYWdlIHRoYXQncyBwdWxsZWQgZHluYW1pY2FsbHksIGl0IGNvdWxkIGNhdXNlIGEgcmVmcmVzaC4gU2VlIGh0dHBzOi8vZ3NhcC5jb20vZm9ydW1zL3RvcGljLzIwMzY4LXBvc3NpYmxlLWdzYXAtYnVnLXN3aXRjaGluZy1jbGFzc25hbWVzLWluLWNocm9tZS8uXHJcbiAgXHRcdHN0eWxlLmNzc1RleHQgPSBjc3NUZXh0OyAvL3dlIHJlY29yZGVkIGNzc1RleHQgYmVmb3JlIHdlIHN3YXBwZWQgY2xhc3NlcyBhbmQgcmFuIF9nZXRBbGxTdHlsZXMoKSBiZWNhdXNlIGluIGNhc2VzIHdoZW4gYSBjbGFzc05hbWUgdHdlZW4gaXMgb3ZlcndyaXR0ZW4sIHdlIHJlbW92ZSBhbGwgdGhlIHJlbGF0ZWQgdHdlZW5pbmcgcHJvcGVydGllcyBmcm9tIHRoYXQgY2xhc3MgY2hhbmdlIChvdGhlcndpc2UgY2xhc3Mtc3BlY2lmaWMgc3R1ZmYgY2FuJ3Qgb3ZlcnJpZGUgcHJvcGVydGllcyB3ZSd2ZSBkaXJlY3RseSBzZXQgb24gdGhlIHRhcmdldCdzIHN0eWxlIG9iamVjdCBkdWUgdG8gc3BlY2lmaWNpdHkpLlxyXG4gIFx0fVxyXG4gIFx0X3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgdHJ1ZSk7IC8vdG8gY2xlYXIgdGhlIGNhY2hpbmcgb2YgdHJhbnNmb3Jtc1xyXG4gIFx0ZGF0YS5jc3MgPSBuZXcgZ3NhcC5wbHVnaW5zLmNzcygpO1xyXG4gIFx0ZGF0YS5jc3MuaW5pdCh0YXJnZXQsIGNoYW5naW5nVmFycywgdHdlZW4pO1xyXG4gIFx0cGx1Z2luLl9wcm9wcy5wdXNoKC4uLmRhdGEuY3NzLl9wcm9wcyk7XHJcbiAgXHRyZXR1cm4gMTtcclxuICB9XHJcbiAgKi9cclxuXHJcbn0sXHJcblxyXG4vKlxyXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKiBUUkFOU0ZPUk1TXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAqL1xyXG5faWRlbnRpdHkyRE1hdHJpeCA9IFsxLCAwLCAwLCAxLCAwLCAwXSxcclxuICAgIF9yb3RhdGlvbmFsUHJvcGVydGllcyA9IHt9LFxyXG4gICAgX2lzTnVsbFRyYW5zZm9ybSA9IGZ1bmN0aW9uIF9pc051bGxUcmFuc2Zvcm0odmFsdWUpIHtcclxuICByZXR1cm4gdmFsdWUgPT09IFwibWF0cml4KDEsIDAsIDAsIDEsIDAsIDApXCIgfHwgdmFsdWUgPT09IFwibm9uZVwiIHx8ICF2YWx1ZTtcclxufSxcclxuICAgIF9nZXRDb21wdXRlZFRyYW5zZm9ybU1hdHJpeEFzQXJyYXkgPSBmdW5jdGlvbiBfZ2V0Q29tcHV0ZWRUcmFuc2Zvcm1NYXRyaXhBc0FycmF5KHRhcmdldCkge1xyXG4gIHZhciBtYXRyaXhTdHJpbmcgPSBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIF90cmFuc2Zvcm1Qcm9wKTtcclxuXHJcbiAgcmV0dXJuIF9pc051bGxUcmFuc2Zvcm0obWF0cml4U3RyaW5nKSA/IF9pZGVudGl0eTJETWF0cml4IDogbWF0cml4U3RyaW5nLnN1YnN0cig3KS5tYXRjaChfbnVtRXhwKS5tYXAoX3JvdW5kKTtcclxufSxcclxuICAgIF9nZXRNYXRyaXggPSBmdW5jdGlvbiBfZ2V0TWF0cml4KHRhcmdldCwgZm9yY2UyRCkge1xyXG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcCB8fCBfZ2V0Q2FjaGUodGFyZ2V0KSxcclxuICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXHJcbiAgICAgIG1hdHJpeCA9IF9nZXRDb21wdXRlZFRyYW5zZm9ybU1hdHJpeEFzQXJyYXkodGFyZ2V0KSxcclxuICAgICAgcGFyZW50LFxyXG4gICAgICBuZXh0U2libGluZyxcclxuICAgICAgdGVtcCxcclxuICAgICAgYWRkZWRUb0RPTTtcclxuXHJcbiAgaWYgKGNhY2hlLnN2ZyAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpKSB7XHJcbiAgICB0ZW1wID0gdGFyZ2V0LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkubWF0cml4OyAvL2Vuc3VyZXMgdGhhdCBldmVuIGNvbXBsZXggdmFsdWVzIGxpa2UgXCJ0cmFuc2xhdGUoNTAsNjApIHJvdGF0ZSgxMzUsMCwwKVwiIGFyZSBwYXJzZWQgYmVjYXVzZSBpdCBtYXNoZXMgaXQgaW50byBhIG1hdHJpeC5cclxuXHJcbiAgICBtYXRyaXggPSBbdGVtcC5hLCB0ZW1wLmIsIHRlbXAuYywgdGVtcC5kLCB0ZW1wLmUsIHRlbXAuZl07XHJcbiAgICByZXR1cm4gbWF0cml4LmpvaW4oXCIsXCIpID09PSBcIjEsMCwwLDEsMCwwXCIgPyBfaWRlbnRpdHkyRE1hdHJpeCA6IG1hdHJpeDtcclxuICB9IGVsc2UgaWYgKG1hdHJpeCA9PT0gX2lkZW50aXR5MkRNYXRyaXggJiYgIXRhcmdldC5vZmZzZXRQYXJlbnQgJiYgdGFyZ2V0ICE9PSBfZG9jRWxlbWVudCAmJiAhY2FjaGUuc3ZnKSB7XHJcbiAgICAvL25vdGU6IGlmIG9mZnNldFBhcmVudCBpcyBudWxsLCB0aGF0IG1lYW5zIHRoZSBlbGVtZW50IGlzbid0IGluIHRoZSBub3JtYWwgZG9jdW1lbnQgZmxvdywgbGlrZSBpZiBpdCBoYXMgZGlzcGxheTpub25lIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyBkaXNwbGF5Om5vbmUpLiBGaXJlZm94IHJldHVybnMgbnVsbCBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSgpIGlmIHRoZSBlbGVtZW50IGlzIGluIGFuIGlmcmFtZSB0aGF0IGhhcyBkaXNwbGF5Om5vbmUuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU0ODM5N1xyXG4gICAgLy9icm93c2VycyBkb24ndCByZXBvcnQgdHJhbnNmb3JtcyBhY2N1cmF0ZWx5IHVubGVzcyB0aGUgZWxlbWVudCBpcyBpbiB0aGUgRE9NIGFuZCBoYXMgYSBkaXNwbGF5IHZhbHVlIHRoYXQncyBub3QgXCJub25lXCIuIEZpcmVmb3ggYW5kIE1pY3Jvc29mdCBicm93c2VycyBoYXZlIGEgcGFydGlhbCBidWcgd2hlcmUgdGhleSdsbCByZXBvcnQgdHJhbnNmb3JtcyBldmVuIGlmIGRpc3BsYXk6bm9uZSBCVVQgbm90IGFueSBwZXJjZW50YWdlLWJhc2VkIHZhbHVlcyBsaWtlIHRyYW5zbGF0ZSgtNTAlLCA4cHgpIHdpbGwgYmUgcmVwb3J0ZWQgYXMgaWYgaXQncyB0cmFuc2xhdGUoMCwgOHB4KS5cclxuICAgIHRlbXAgPSBzdHlsZS5kaXNwbGF5O1xyXG4gICAgc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgIHBhcmVudCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG5cclxuICAgIGlmICghcGFyZW50IHx8ICF0YXJnZXQub2Zmc2V0UGFyZW50ICYmICF0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpIHtcclxuICAgICAgLy8gbm90ZTogaW4gMy4zLjAgd2Ugc3dpdGNoZWQgdGFyZ2V0Lm9mZnNldFBhcmVudCB0byBfZG9jLmJvZHkuY29udGFpbnModGFyZ2V0KSB0byBhdm9pZCBbc29tZXRpbWVzIHVubmVjZXNzYXJ5XSBNdXRhdGlvbk9ic2VydmVyIGNhbGxzIGJ1dCB0aGF0IHdhc24ndCBhZGVxdWF0ZSBiZWNhdXNlIHRoZXJlIGFyZSBlZGdlIGNhc2VzIHdoZXJlIG5lc3RlZCBwb3NpdGlvbjogZml4ZWQgZWxlbWVudHMgbmVlZCB0byBnZXQgcmVwYXJlbnRlZCB0byBhY2N1cmF0ZWx5IHNlbnNlIHRyYW5zZm9ybXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3JlZW5zb2NrL0dTQVAvaXNzdWVzLzM4OCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2dyZWVuc29jay9HU0FQL2lzc3Vlcy8zNzUuIE5vdGU6IHBvc2l0aW9uOiBmaXhlZCBlbGVtZW50cyByZXBvcnQgYSBudWxsIG9mZnNldFBhcmVudCBidXQgdGhleSBjb3VsZCBhbHNvIGJlIGludmlzaWJsZSBiZWNhdXNlIHRoZXkncmUgaW4gYW4gYW5jZXN0b3Igd2l0aCBkaXNwbGF5OiBub25lLCBzbyB3ZSBjaGVjayBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS4gV2Ugb25seSB3YW50IHRvIGFsdGVyIHRoZSBET00gaWYgd2UgYWJzb2x1dGVseSBoYXZlIHRvIGJlY2F1c2UgaXQgY2FuIGNhdXNlIGlmcmFtZSBjb250ZW50IHRvIHJlbG9hZCwgbGlrZSBhIFZpbWVvIHZpZGVvLlxyXG4gICAgICBhZGRlZFRvRE9NID0gMTsgLy9mbGFnXHJcblxyXG4gICAgICBuZXh0U2libGluZyA9IHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcblxyXG4gICAgICBfZG9jRWxlbWVudC5hcHBlbmRDaGlsZCh0YXJnZXQpOyAvL3dlIG11c3QgYWRkIGl0IHRvIHRoZSBET00gaW4gb3JkZXIgdG8gZ2V0IHZhbHVlcyBwcm9wZXJseVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtYXRyaXggPSBfZ2V0Q29tcHV0ZWRUcmFuc2Zvcm1NYXRyaXhBc0FycmF5KHRhcmdldCk7XHJcbiAgICB0ZW1wID8gc3R5bGUuZGlzcGxheSA9IHRlbXAgOiBfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBcImRpc3BsYXlcIik7XHJcblxyXG4gICAgaWYgKGFkZGVkVG9ET00pIHtcclxuICAgICAgbmV4dFNpYmxpbmcgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKHRhcmdldCwgbmV4dFNpYmxpbmcpIDogcGFyZW50ID8gcGFyZW50LmFwcGVuZENoaWxkKHRhcmdldCkgOiBfZG9jRWxlbWVudC5yZW1vdmVDaGlsZCh0YXJnZXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZvcmNlMkQgJiYgbWF0cml4Lmxlbmd0aCA+IDYgPyBbbWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBtYXRyaXhbMTJdLCBtYXRyaXhbMTNdXSA6IG1hdHJpeDtcclxufSxcclxuICAgIF9hcHBseVNWR09yaWdpbiA9IGZ1bmN0aW9uIF9hcHBseVNWR09yaWdpbih0YXJnZXQsIG9yaWdpbiwgb3JpZ2luSXNBYnNvbHV0ZSwgc21vb3RoLCBtYXRyaXhBcnJheSwgcGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8pIHtcclxuICB2YXIgY2FjaGUgPSB0YXJnZXQuX2dzYXAsXHJcbiAgICAgIG1hdHJpeCA9IG1hdHJpeEFycmF5IHx8IF9nZXRNYXRyaXgodGFyZ2V0LCB0cnVlKSxcclxuICAgICAgeE9yaWdpbk9sZCA9IGNhY2hlLnhPcmlnaW4gfHwgMCxcclxuICAgICAgeU9yaWdpbk9sZCA9IGNhY2hlLnlPcmlnaW4gfHwgMCxcclxuICAgICAgeE9mZnNldE9sZCA9IGNhY2hlLnhPZmZzZXQgfHwgMCxcclxuICAgICAgeU9mZnNldE9sZCA9IGNhY2hlLnlPZmZzZXQgfHwgMCxcclxuICAgICAgYSA9IG1hdHJpeFswXSxcclxuICAgICAgYiA9IG1hdHJpeFsxXSxcclxuICAgICAgYyA9IG1hdHJpeFsyXSxcclxuICAgICAgZCA9IG1hdHJpeFszXSxcclxuICAgICAgdHggPSBtYXRyaXhbNF0sXHJcbiAgICAgIHR5ID0gbWF0cml4WzVdLFxyXG4gICAgICBvcmlnaW5TcGxpdCA9IG9yaWdpbi5zcGxpdChcIiBcIiksXHJcbiAgICAgIHhPcmlnaW4gPSBwYXJzZUZsb2F0KG9yaWdpblNwbGl0WzBdKSB8fCAwLFxyXG4gICAgICB5T3JpZ2luID0gcGFyc2VGbG9hdChvcmlnaW5TcGxpdFsxXSkgfHwgMCxcclxuICAgICAgYm91bmRzLFxyXG4gICAgICBkZXRlcm1pbmFudCxcclxuICAgICAgeCxcclxuICAgICAgeTtcclxuXHJcbiAgaWYgKCFvcmlnaW5Jc0Fic29sdXRlKSB7XHJcbiAgICBib3VuZHMgPSBfZ2V0QkJveCh0YXJnZXQpO1xyXG4gICAgeE9yaWdpbiA9IGJvdW5kcy54ICsgKH5vcmlnaW5TcGxpdFswXS5pbmRleE9mKFwiJVwiKSA/IHhPcmlnaW4gLyAxMDAgKiBib3VuZHMud2lkdGggOiB4T3JpZ2luKTtcclxuICAgIHlPcmlnaW4gPSBib3VuZHMueSArICh+KG9yaWdpblNwbGl0WzFdIHx8IG9yaWdpblNwbGl0WzBdKS5pbmRleE9mKFwiJVwiKSA/IHlPcmlnaW4gLyAxMDAgKiBib3VuZHMuaGVpZ2h0IDogeU9yaWdpbik7IC8vIGlmICghKFwieE9yaWdpblwiIGluIGNhY2hlKSAmJiAoeE9yaWdpbiB8fCB5T3JpZ2luKSkgeyAvLyBhZGRlZCBpbiAzLjEyLjMsIHJldmVydGVkIGluIDMuMTIuNDsgcmVxdWlyZXMgbW9yZSBleHBsb3JhdGlvblxyXG4gICAgLy8gXHR4T3JpZ2luIC09IGJvdW5kcy54O1xyXG4gICAgLy8gXHR5T3JpZ2luIC09IGJvdW5kcy55O1xyXG4gICAgLy8gfVxyXG4gIH0gZWxzZSBpZiAobWF0cml4ICE9PSBfaWRlbnRpdHkyRE1hdHJpeCAmJiAoZGV0ZXJtaW5hbnQgPSBhICogZCAtIGIgKiBjKSkge1xyXG4gICAgLy9pZiBpdCdzIHplcm8gKGxpa2UgaWYgc2NhbGVYIGFuZCBzY2FsZVkgYXJlIHplcm8pLCBza2lwIGl0IHRvIGF2b2lkIGVycm9ycyB3aXRoIGRpdmlkaW5nIGJ5IHplcm8uXHJcbiAgICB4ID0geE9yaWdpbiAqIChkIC8gZGV0ZXJtaW5hbnQpICsgeU9yaWdpbiAqICgtYyAvIGRldGVybWluYW50KSArIChjICogdHkgLSBkICogdHgpIC8gZGV0ZXJtaW5hbnQ7XHJcbiAgICB5ID0geE9yaWdpbiAqICgtYiAvIGRldGVybWluYW50KSArIHlPcmlnaW4gKiAoYSAvIGRldGVybWluYW50KSAtIChhICogdHkgLSBiICogdHgpIC8gZGV0ZXJtaW5hbnQ7XHJcbiAgICB4T3JpZ2luID0geDtcclxuICAgIHlPcmlnaW4gPSB5OyAvLyB0aGVvcnk6IHdlIG9ubHkgaGFkIHRvIGRvIHRoaXMgZm9yIHNtb290aGluZyBhbmQgaXQgYXNzdW1lcyB0aGF0IHRoZSBwcmV2aW91cyBvbmUgd2FzIG5vdCBvcmlnaW5Jc0Fic29sdXRlLlxyXG4gIH1cclxuXHJcbiAgaWYgKHNtb290aCB8fCBzbW9vdGggIT09IGZhbHNlICYmIGNhY2hlLnNtb290aCkge1xyXG4gICAgdHggPSB4T3JpZ2luIC0geE9yaWdpbk9sZDtcclxuICAgIHR5ID0geU9yaWdpbiAtIHlPcmlnaW5PbGQ7XHJcbiAgICBjYWNoZS54T2Zmc2V0ID0geE9mZnNldE9sZCArICh0eCAqIGEgKyB0eSAqIGMpIC0gdHg7XHJcbiAgICBjYWNoZS55T2Zmc2V0ID0geU9mZnNldE9sZCArICh0eCAqIGIgKyB0eSAqIGQpIC0gdHk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNhY2hlLnhPZmZzZXQgPSBjYWNoZS55T2Zmc2V0ID0gMDtcclxuICB9XHJcblxyXG4gIGNhY2hlLnhPcmlnaW4gPSB4T3JpZ2luO1xyXG4gIGNhY2hlLnlPcmlnaW4gPSB5T3JpZ2luO1xyXG4gIGNhY2hlLnNtb290aCA9ICEhc21vb3RoO1xyXG4gIGNhY2hlLm9yaWdpbiA9IG9yaWdpbjtcclxuICBjYWNoZS5vcmlnaW5Jc0Fic29sdXRlID0gISFvcmlnaW5Jc0Fic29sdXRlO1xyXG4gIHRhcmdldC5zdHlsZVtfdHJhbnNmb3JtT3JpZ2luUHJvcF0gPSBcIjBweCAwcHhcIjsgLy9vdGhlcndpc2UsIGlmIHNvbWVvbmUgc2V0cyAgYW4gb3JpZ2luIHZpYSBDU1MsIGl0IHdpbGwgbGlrZWx5IGludGVyZmVyZSB3aXRoIHRoZSBTVkcgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbmVzIChiZWNhdXNlIHJlbWVtYmVyLCB3ZSdyZSBiYWtpbmcgdGhlIG9yaWdpbiBpbnRvIHRoZSBtYXRyaXgoKSB2YWx1ZSkuXHJcblxyXG4gIGlmIChwbHVnaW5Ub0FkZFByb3BUd2VlbnNUbykge1xyXG4gICAgX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8sIGNhY2hlLCBcInhPcmlnaW5cIiwgeE9yaWdpbk9sZCwgeE9yaWdpbik7XHJcblxyXG4gICAgX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8sIGNhY2hlLCBcInlPcmlnaW5cIiwgeU9yaWdpbk9sZCwgeU9yaWdpbik7XHJcblxyXG4gICAgX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8sIGNhY2hlLCBcInhPZmZzZXRcIiwgeE9mZnNldE9sZCwgY2FjaGUueE9mZnNldCk7XHJcblxyXG4gICAgX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8sIGNhY2hlLCBcInlPZmZzZXRcIiwgeU9mZnNldE9sZCwgY2FjaGUueU9mZnNldCk7XHJcbiAgfVxyXG5cclxuICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS1zdmctb3JpZ2luXCIsIHhPcmlnaW4gKyBcIiBcIiArIHlPcmlnaW4pO1xyXG59LFxyXG4gICAgX3BhcnNlVHJhbnNmb3JtID0gZnVuY3Rpb24gX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgdW5jYWNoZSkge1xyXG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcCB8fCBuZXcgR1NDYWNoZSh0YXJnZXQpO1xyXG5cclxuICBpZiAoXCJ4XCIgaW4gY2FjaGUgJiYgIXVuY2FjaGUgJiYgIWNhY2hlLnVuY2FjaGUpIHtcclxuICAgIHJldHVybiBjYWNoZTtcclxuICB9XHJcblxyXG4gIHZhciBzdHlsZSA9IHRhcmdldC5zdHlsZSxcclxuICAgICAgaW52ZXJ0ZWRTY2FsZVggPSBjYWNoZS5zY2FsZVggPCAwLFxyXG4gICAgICBweCA9IFwicHhcIixcclxuICAgICAgZGVnID0gXCJkZWdcIixcclxuICAgICAgY3MgPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCksXHJcbiAgICAgIG9yaWdpbiA9IF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgX3RyYW5zZm9ybU9yaWdpblByb3ApIHx8IFwiMFwiLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgICB6LFxyXG4gICAgICBzY2FsZVgsXHJcbiAgICAgIHNjYWxlWSxcclxuICAgICAgcm90YXRpb24sXHJcbiAgICAgIHJvdGF0aW9uWCxcclxuICAgICAgcm90YXRpb25ZLFxyXG4gICAgICBza2V3WCxcclxuICAgICAgc2tld1ksXHJcbiAgICAgIHBlcnNwZWN0aXZlLFxyXG4gICAgICB4T3JpZ2luLFxyXG4gICAgICB5T3JpZ2luLFxyXG4gICAgICBtYXRyaXgsXHJcbiAgICAgIGFuZ2xlLFxyXG4gICAgICBjb3MsXHJcbiAgICAgIHNpbixcclxuICAgICAgYSxcclxuICAgICAgYixcclxuICAgICAgYyxcclxuICAgICAgZCxcclxuICAgICAgYTEyLFxyXG4gICAgICBhMjIsXHJcbiAgICAgIHQxLFxyXG4gICAgICB0MixcclxuICAgICAgdDMsXHJcbiAgICAgIGExMyxcclxuICAgICAgYTIzLFxyXG4gICAgICBhMzMsXHJcbiAgICAgIGE0MixcclxuICAgICAgYTQzLFxyXG4gICAgICBhMzI7XHJcbiAgeCA9IHkgPSB6ID0gcm90YXRpb24gPSByb3RhdGlvblggPSByb3RhdGlvblkgPSBza2V3WCA9IHNrZXdZID0gcGVyc3BlY3RpdmUgPSAwO1xyXG4gIHNjYWxlWCA9IHNjYWxlWSA9IDE7XHJcbiAgY2FjaGUuc3ZnID0gISEodGFyZ2V0LmdldENUTSAmJiBfaXNTVkcodGFyZ2V0KSk7XHJcblxyXG4gIGlmIChjcy50cmFuc2xhdGUpIHtcclxuICAgIC8vIGFjY29tbW9kYXRlIGluZGVwZW5kZW50IHRyYW5zZm9ybXMgYnkgY29tYmluaW5nIHRoZW0gaW50byBub3JtYWwgb25lcy5cclxuICAgIGlmIChjcy50cmFuc2xhdGUgIT09IFwibm9uZVwiIHx8IGNzLnNjYWxlICE9PSBcIm5vbmVcIiB8fCBjcy5yb3RhdGUgIT09IFwibm9uZVwiKSB7XHJcbiAgICAgIHN0eWxlW190cmFuc2Zvcm1Qcm9wXSA9IChjcy50cmFuc2xhdGUgIT09IFwibm9uZVwiID8gXCJ0cmFuc2xhdGUzZChcIiArIChjcy50cmFuc2xhdGUgKyBcIiAwIDBcIikuc3BsaXQoXCIgXCIpLnNsaWNlKDAsIDMpLmpvaW4oXCIsIFwiKSArIFwiKSBcIiA6IFwiXCIpICsgKGNzLnJvdGF0ZSAhPT0gXCJub25lXCIgPyBcInJvdGF0ZShcIiArIGNzLnJvdGF0ZSArIFwiKSBcIiA6IFwiXCIpICsgKGNzLnNjYWxlICE9PSBcIm5vbmVcIiA/IFwic2NhbGUoXCIgKyBjcy5zY2FsZS5zcGxpdChcIiBcIikuam9pbihcIixcIikgKyBcIikgXCIgOiBcIlwiKSArIChjc1tfdHJhbnNmb3JtUHJvcF0gIT09IFwibm9uZVwiID8gY3NbX3RyYW5zZm9ybVByb3BdIDogXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3R5bGUuc2NhbGUgPSBzdHlsZS5yb3RhdGUgPSBzdHlsZS50cmFuc2xhdGUgPSBcIm5vbmVcIjtcclxuICB9XHJcblxyXG4gIG1hdHJpeCA9IF9nZXRNYXRyaXgodGFyZ2V0LCBjYWNoZS5zdmcpO1xyXG5cclxuICBpZiAoY2FjaGUuc3ZnKSB7XHJcbiAgICBpZiAoY2FjaGUudW5jYWNoZSkge1xyXG4gICAgICAvLyBpZiBjYWNoZS51bmNhY2hlIGlzIHRydWUgKGFuZCBtYXliZSBpZiBvcmlnaW4gaXMgMCwwKSwgd2UgbmVlZCB0byBzZXQgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAoY2FjaGUueE9yaWdpbiAtIGJib3gueCkgKyBcInB4IFwiICsgKGNhY2hlLnlPcmlnaW4gLSBiYm94LnkpICsgXCJweFwiLiBQcmV2aW91c2x5IHdlIGxldCB0aGUgZGF0YS1zdmctb3JpZ2luIHN0YXkgaW5zdGVhZCwgYnV0IHdoZW4gaW50cm9kdWNpbmcgcmV2ZXJ0KCksIGl0IGNvbXBsaWNhdGVkIHRoaW5ncy5cclxuICAgICAgdDIgPSB0YXJnZXQuZ2V0QkJveCgpO1xyXG4gICAgICBvcmlnaW4gPSBjYWNoZS54T3JpZ2luIC0gdDIueCArIFwicHggXCIgKyAoY2FjaGUueU9yaWdpbiAtIHQyLnkpICsgXCJweFwiO1xyXG4gICAgICB0MSA9IFwiXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0MSA9ICF1bmNhY2hlICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXN2Zy1vcmlnaW5cIik7IC8vICBSZW1lbWJlciwgdG8gd29yayBhcm91bmQgYnJvd3NlciBpbmNvbnNpc3RlbmNpZXMgd2UgYWx3YXlzIGZvcmNlIFNWRyBlbGVtZW50cycgdHJhbnNmb3JtT3JpZ2luIHRvIDAsMCBhbmQgb2Zmc2V0IHRoZSB0cmFuc2xhdGlvbiBhY2NvcmRpbmdseS5cclxuICAgIH1cclxuXHJcbiAgICBfYXBwbHlTVkdPcmlnaW4odGFyZ2V0LCB0MSB8fCBvcmlnaW4sICEhdDEgfHwgY2FjaGUub3JpZ2luSXNBYnNvbHV0ZSwgY2FjaGUuc21vb3RoICE9PSBmYWxzZSwgbWF0cml4KTtcclxuICB9XHJcblxyXG4gIHhPcmlnaW4gPSBjYWNoZS54T3JpZ2luIHx8IDA7XHJcbiAgeU9yaWdpbiA9IGNhY2hlLnlPcmlnaW4gfHwgMDtcclxuXHJcbiAgaWYgKG1hdHJpeCAhPT0gX2lkZW50aXR5MkRNYXRyaXgpIHtcclxuICAgIGEgPSBtYXRyaXhbMF07IC8vYTExXHJcblxyXG4gICAgYiA9IG1hdHJpeFsxXTsgLy9hMjFcclxuXHJcbiAgICBjID0gbWF0cml4WzJdOyAvL2EzMVxyXG5cclxuICAgIGQgPSBtYXRyaXhbM107IC8vYTQxXHJcblxyXG4gICAgeCA9IGExMiA9IG1hdHJpeFs0XTtcclxuICAgIHkgPSBhMjIgPSBtYXRyaXhbNV07IC8vMkQgbWF0cml4XHJcblxyXG4gICAgaWYgKG1hdHJpeC5sZW5ndGggPT09IDYpIHtcclxuICAgICAgc2NhbGVYID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xyXG4gICAgICBzY2FsZVkgPSBNYXRoLnNxcnQoZCAqIGQgKyBjICogYyk7XHJcbiAgICAgIHJvdGF0aW9uID0gYSB8fCBiID8gX2F0YW4yKGIsIGEpICogX1JBRDJERUcgOiAwOyAvL25vdGU6IGlmIHNjYWxlWCBpcyAwLCB3ZSBjYW5ub3QgYWNjdXJhdGVseSBtZWFzdXJlIHJvdGF0aW9uLiBTYW1lIGZvciBza2V3WCB3aXRoIGEgc2NhbGVZIG9mIDAuIFRoZXJlZm9yZSwgd2UgZGVmYXVsdCB0byB0aGUgcHJldmlvdXNseSByZWNvcmRlZCB2YWx1ZSAob3IgemVybyBpZiB0aGF0IGRvZXNuJ3QgZXhpc3QpLlxyXG5cclxuICAgICAgc2tld1ggPSBjIHx8IGQgPyBfYXRhbjIoYywgZCkgKiBfUkFEMkRFRyArIHJvdGF0aW9uIDogMDtcclxuICAgICAgc2tld1ggJiYgKHNjYWxlWSAqPSBNYXRoLmFicyhNYXRoLmNvcyhza2V3WCAqIF9ERUcyUkFEKSkpO1xyXG5cclxuICAgICAgaWYgKGNhY2hlLnN2Zykge1xyXG4gICAgICAgIHggLT0geE9yaWdpbiAtICh4T3JpZ2luICogYSArIHlPcmlnaW4gKiBjKTtcclxuICAgICAgICB5IC09IHlPcmlnaW4gLSAoeE9yaWdpbiAqIGIgKyB5T3JpZ2luICogZCk7XHJcbiAgICAgIH0gLy8zRCBtYXRyaXhcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhMzIgPSBtYXRyaXhbNl07XHJcbiAgICAgIGE0MiA9IG1hdHJpeFs3XTtcclxuICAgICAgYTEzID0gbWF0cml4WzhdO1xyXG4gICAgICBhMjMgPSBtYXRyaXhbOV07XHJcbiAgICAgIGEzMyA9IG1hdHJpeFsxMF07XHJcbiAgICAgIGE0MyA9IG1hdHJpeFsxMV07XHJcbiAgICAgIHggPSBtYXRyaXhbMTJdO1xyXG4gICAgICB5ID0gbWF0cml4WzEzXTtcclxuICAgICAgeiA9IG1hdHJpeFsxNF07XHJcbiAgICAgIGFuZ2xlID0gX2F0YW4yKGEzMiwgYTMzKTtcclxuICAgICAgcm90YXRpb25YID0gYW5nbGUgKiBfUkFEMkRFRzsgLy9yb3RhdGlvblhcclxuXHJcbiAgICAgIGlmIChhbmdsZSkge1xyXG4gICAgICAgIGNvcyA9IE1hdGguY29zKC1hbmdsZSk7XHJcbiAgICAgICAgc2luID0gTWF0aC5zaW4oLWFuZ2xlKTtcclxuICAgICAgICB0MSA9IGExMiAqIGNvcyArIGExMyAqIHNpbjtcclxuICAgICAgICB0MiA9IGEyMiAqIGNvcyArIGEyMyAqIHNpbjtcclxuICAgICAgICB0MyA9IGEzMiAqIGNvcyArIGEzMyAqIHNpbjtcclxuICAgICAgICBhMTMgPSBhMTIgKiAtc2luICsgYTEzICogY29zO1xyXG4gICAgICAgIGEyMyA9IGEyMiAqIC1zaW4gKyBhMjMgKiBjb3M7XHJcbiAgICAgICAgYTMzID0gYTMyICogLXNpbiArIGEzMyAqIGNvcztcclxuICAgICAgICBhNDMgPSBhNDIgKiAtc2luICsgYTQzICogY29zO1xyXG4gICAgICAgIGExMiA9IHQxO1xyXG4gICAgICAgIGEyMiA9IHQyO1xyXG4gICAgICAgIGEzMiA9IHQzO1xyXG4gICAgICB9IC8vcm90YXRpb25ZXHJcblxyXG5cclxuICAgICAgYW5nbGUgPSBfYXRhbjIoLWMsIGEzMyk7XHJcbiAgICAgIHJvdGF0aW9uWSA9IGFuZ2xlICogX1JBRDJERUc7XHJcblxyXG4gICAgICBpZiAoYW5nbGUpIHtcclxuICAgICAgICBjb3MgPSBNYXRoLmNvcygtYW5nbGUpO1xyXG4gICAgICAgIHNpbiA9IE1hdGguc2luKC1hbmdsZSk7XHJcbiAgICAgICAgdDEgPSBhICogY29zIC0gYTEzICogc2luO1xyXG4gICAgICAgIHQyID0gYiAqIGNvcyAtIGEyMyAqIHNpbjtcclxuICAgICAgICB0MyA9IGMgKiBjb3MgLSBhMzMgKiBzaW47XHJcbiAgICAgICAgYTQzID0gZCAqIHNpbiArIGE0MyAqIGNvcztcclxuICAgICAgICBhID0gdDE7XHJcbiAgICAgICAgYiA9IHQyO1xyXG4gICAgICAgIGMgPSB0MztcclxuICAgICAgfSAvL3JvdGF0aW9uWlxyXG5cclxuXHJcbiAgICAgIGFuZ2xlID0gX2F0YW4yKGIsIGEpO1xyXG4gICAgICByb3RhdGlvbiA9IGFuZ2xlICogX1JBRDJERUc7XHJcblxyXG4gICAgICBpZiAoYW5nbGUpIHtcclxuICAgICAgICBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIHQxID0gYSAqIGNvcyArIGIgKiBzaW47XHJcbiAgICAgICAgdDIgPSBhMTIgKiBjb3MgKyBhMjIgKiBzaW47XHJcbiAgICAgICAgYiA9IGIgKiBjb3MgLSBhICogc2luO1xyXG4gICAgICAgIGEyMiA9IGEyMiAqIGNvcyAtIGExMiAqIHNpbjtcclxuICAgICAgICBhID0gdDE7XHJcbiAgICAgICAgYTEyID0gdDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyb3RhdGlvblggJiYgTWF0aC5hYnMocm90YXRpb25YKSArIE1hdGguYWJzKHJvdGF0aW9uKSA+IDM1OS45KSB7XHJcbiAgICAgICAgLy93aGVuIHJvdGF0aW9uWSBpcyBzZXQsIGl0IHdpbGwgb2Z0ZW4gYmUgcGFyc2VkIGFzIDE4MCBkZWdyZWVzIGRpZmZlcmVudCB0aGFuIGl0IHNob3VsZCBiZSwgYW5kIHJvdGF0aW9uWCBhbmQgcm90YXRpb24gYm90aCBiZWluZyAxODAgKGl0IGxvb2tzIHRoZSBzYW1lKSwgc28gd2UgYWRqdXN0IGZvciB0aGF0IGhlcmUuXHJcbiAgICAgICAgcm90YXRpb25YID0gcm90YXRpb24gPSAwO1xyXG4gICAgICAgIHJvdGF0aW9uWSA9IDE4MCAtIHJvdGF0aW9uWTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2NhbGVYID0gX3JvdW5kKE1hdGguc3FydChhICogYSArIGIgKiBiICsgYyAqIGMpKTtcclxuICAgICAgc2NhbGVZID0gX3JvdW5kKE1hdGguc3FydChhMjIgKiBhMjIgKyBhMzIgKiBhMzIpKTtcclxuICAgICAgYW5nbGUgPSBfYXRhbjIoYTEyLCBhMjIpO1xyXG4gICAgICBza2V3WCA9IE1hdGguYWJzKGFuZ2xlKSA+IDAuMDAwMiA/IGFuZ2xlICogX1JBRDJERUcgOiAwO1xyXG4gICAgICBwZXJzcGVjdGl2ZSA9IGE0MyA/IDEgLyAoYTQzIDwgMCA/IC1hNDMgOiBhNDMpIDogMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2FjaGUuc3ZnKSB7XHJcbiAgICAgIC8vc2Vuc2UgaWYgdGhlcmUgYXJlIENTUyB0cmFuc2Zvcm1zIGFwcGxpZWQgb24gYW4gU1ZHIGVsZW1lbnQgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IG92ZXJ3cml0ZSB0aGVtIHdoZW4gcmVuZGVyaW5nLiBUaGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBpcyBtb3JlIHJlbGlhYmxlIGNyb3NzLWJyb3dzZXIsIGJ1dCB3ZSBjYW4ndCBqdXN0IHJlbW92ZSB0aGUgQ1NTIG9uZXMgYmVjYXVzZSB0aGV5IG1heSBiZSBhcHBsaWVkIGluIGEgQ1NTIHJ1bGUgc29tZXdoZXJlIChub3QganVzdCBpbmxpbmUpLlxyXG4gICAgICB0MSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7XHJcbiAgICAgIGNhY2hlLmZvcmNlQ1NTID0gdGFyZ2V0LnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBcIlwiKSB8fCAhX2lzTnVsbFRyYW5zZm9ybShfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIF90cmFuc2Zvcm1Qcm9wKSk7XHJcbiAgICAgIHQxICYmIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKE1hdGguYWJzKHNrZXdYKSA+IDkwICYmIE1hdGguYWJzKHNrZXdYKSA8IDI3MCkge1xyXG4gICAgaWYgKGludmVydGVkU2NhbGVYKSB7XHJcbiAgICAgIHNjYWxlWCAqPSAtMTtcclxuICAgICAgc2tld1ggKz0gcm90YXRpb24gPD0gMCA/IDE4MCA6IC0xODA7XHJcbiAgICAgIHJvdGF0aW9uICs9IHJvdGF0aW9uIDw9IDAgPyAxODAgOiAtMTgwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2NhbGVZICo9IC0xO1xyXG4gICAgICBza2V3WCArPSBza2V3WCA8PSAwID8gMTgwIDogLTE4MDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVuY2FjaGUgPSB1bmNhY2hlIHx8IGNhY2hlLnVuY2FjaGU7XHJcbiAgY2FjaGUueCA9IHggLSAoKGNhY2hlLnhQZXJjZW50ID0geCAmJiAoIXVuY2FjaGUgJiYgY2FjaGUueFBlcmNlbnQgfHwgKE1hdGgucm91bmQodGFyZ2V0Lm9mZnNldFdpZHRoIC8gMikgPT09IE1hdGgucm91bmQoLXgpID8gLTUwIDogMCkpKSA/IHRhcmdldC5vZmZzZXRXaWR0aCAqIGNhY2hlLnhQZXJjZW50IC8gMTAwIDogMCkgKyBweDtcclxuICBjYWNoZS55ID0geSAtICgoY2FjaGUueVBlcmNlbnQgPSB5ICYmICghdW5jYWNoZSAmJiBjYWNoZS55UGVyY2VudCB8fCAoTWF0aC5yb3VuZCh0YXJnZXQub2Zmc2V0SGVpZ2h0IC8gMikgPT09IE1hdGgucm91bmQoLXkpID8gLTUwIDogMCkpKSA/IHRhcmdldC5vZmZzZXRIZWlnaHQgKiBjYWNoZS55UGVyY2VudCAvIDEwMCA6IDApICsgcHg7XHJcbiAgY2FjaGUueiA9IHogKyBweDtcclxuICBjYWNoZS5zY2FsZVggPSBfcm91bmQoc2NhbGVYKTtcclxuICBjYWNoZS5zY2FsZVkgPSBfcm91bmQoc2NhbGVZKTtcclxuICBjYWNoZS5yb3RhdGlvbiA9IF9yb3VuZChyb3RhdGlvbikgKyBkZWc7XHJcbiAgY2FjaGUucm90YXRpb25YID0gX3JvdW5kKHJvdGF0aW9uWCkgKyBkZWc7XHJcbiAgY2FjaGUucm90YXRpb25ZID0gX3JvdW5kKHJvdGF0aW9uWSkgKyBkZWc7XHJcbiAgY2FjaGUuc2tld1ggPSBza2V3WCArIGRlZztcclxuICBjYWNoZS5za2V3WSA9IHNrZXdZICsgZGVnO1xyXG4gIGNhY2hlLnRyYW5zZm9ybVBlcnNwZWN0aXZlID0gcGVyc3BlY3RpdmUgKyBweDtcclxuXHJcbiAgaWYgKGNhY2hlLnpPcmlnaW4gPSBwYXJzZUZsb2F0KG9yaWdpbi5zcGxpdChcIiBcIilbMl0pIHx8ICF1bmNhY2hlICYmIGNhY2hlLnpPcmlnaW4gfHwgMCkge1xyXG4gICAgc3R5bGVbX3RyYW5zZm9ybU9yaWdpblByb3BdID0gX2ZpcnN0VHdvT25seShvcmlnaW4pO1xyXG4gIH1cclxuXHJcbiAgY2FjaGUueE9mZnNldCA9IGNhY2hlLnlPZmZzZXQgPSAwO1xyXG4gIGNhY2hlLmZvcmNlM0QgPSBfY29uZmlnLmZvcmNlM0Q7XHJcbiAgY2FjaGUucmVuZGVyVHJhbnNmb3JtID0gY2FjaGUuc3ZnID8gX3JlbmRlclNWR1RyYW5zZm9ybXMgOiBfc3VwcG9ydHMzRCA/IF9yZW5kZXJDU1NUcmFuc2Zvcm1zIDogX3JlbmRlck5vbjNEVHJhbnNmb3JtcztcclxuICBjYWNoZS51bmNhY2hlID0gMDtcclxuICByZXR1cm4gY2FjaGU7XHJcbn0sXHJcbiAgICBfZmlyc3RUd29Pbmx5ID0gZnVuY3Rpb24gX2ZpcnN0VHdvT25seSh2YWx1ZSkge1xyXG4gIHJldHVybiAodmFsdWUgPSB2YWx1ZS5zcGxpdChcIiBcIikpWzBdICsgXCIgXCIgKyB2YWx1ZVsxXTtcclxufSxcclxuICAgIC8vZm9yIGhhbmRsaW5nIHRyYW5zZm9ybU9yaWdpbiB2YWx1ZXMsIHN0cmlwcGluZyBvdXQgdGhlIDNyZCBkaW1lbnNpb25cclxuX2FkZFB4VHJhbnNsYXRlID0gZnVuY3Rpb24gX2FkZFB4VHJhbnNsYXRlKHRhcmdldCwgc3RhcnQsIHZhbHVlKSB7XHJcbiAgdmFyIHVuaXQgPSBnZXRVbml0KHN0YXJ0KTtcclxuICByZXR1cm4gX3JvdW5kKHBhcnNlRmxvYXQoc3RhcnQpICsgcGFyc2VGbG9hdChfY29udmVydFRvVW5pdCh0YXJnZXQsIFwieFwiLCB2YWx1ZSArIFwicHhcIiwgdW5pdCkpKSArIHVuaXQ7XHJcbn0sXHJcbiAgICBfcmVuZGVyTm9uM0RUcmFuc2Zvcm1zID0gZnVuY3Rpb24gX3JlbmRlck5vbjNEVHJhbnNmb3JtcyhyYXRpbywgY2FjaGUpIHtcclxuICBjYWNoZS56ID0gXCIwcHhcIjtcclxuICBjYWNoZS5yb3RhdGlvblkgPSBjYWNoZS5yb3RhdGlvblggPSBcIjBkZWdcIjtcclxuICBjYWNoZS5mb3JjZTNEID0gMDtcclxuXHJcbiAgX3JlbmRlckNTU1RyYW5zZm9ybXMocmF0aW8sIGNhY2hlKTtcclxufSxcclxuICAgIF96ZXJvRGVnID0gXCIwZGVnXCIsXHJcbiAgICBfemVyb1B4ID0gXCIwcHhcIixcclxuICAgIF9lbmRQYXJlbnRoZXNpcyA9IFwiKSBcIixcclxuICAgIF9yZW5kZXJDU1NUcmFuc2Zvcm1zID0gZnVuY3Rpb24gX3JlbmRlckNTU1RyYW5zZm9ybXMocmF0aW8sIGNhY2hlKSB7XHJcbiAgdmFyIF9yZWYgPSBjYWNoZSB8fCB0aGlzLFxyXG4gICAgICB4UGVyY2VudCA9IF9yZWYueFBlcmNlbnQsXHJcbiAgICAgIHlQZXJjZW50ID0gX3JlZi55UGVyY2VudCxcclxuICAgICAgeCA9IF9yZWYueCxcclxuICAgICAgeSA9IF9yZWYueSxcclxuICAgICAgeiA9IF9yZWYueixcclxuICAgICAgcm90YXRpb24gPSBfcmVmLnJvdGF0aW9uLFxyXG4gICAgICByb3RhdGlvblkgPSBfcmVmLnJvdGF0aW9uWSxcclxuICAgICAgcm90YXRpb25YID0gX3JlZi5yb3RhdGlvblgsXHJcbiAgICAgIHNrZXdYID0gX3JlZi5za2V3WCxcclxuICAgICAgc2tld1kgPSBfcmVmLnNrZXdZLFxyXG4gICAgICBzY2FsZVggPSBfcmVmLnNjYWxlWCxcclxuICAgICAgc2NhbGVZID0gX3JlZi5zY2FsZVksXHJcbiAgICAgIHRyYW5zZm9ybVBlcnNwZWN0aXZlID0gX3JlZi50cmFuc2Zvcm1QZXJzcGVjdGl2ZSxcclxuICAgICAgZm9yY2UzRCA9IF9yZWYuZm9yY2UzRCxcclxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXHJcbiAgICAgIHpPcmlnaW4gPSBfcmVmLnpPcmlnaW4sXHJcbiAgICAgIHRyYW5zZm9ybXMgPSBcIlwiLFxyXG4gICAgICB1c2UzRCA9IGZvcmNlM0QgPT09IFwiYXV0b1wiICYmIHJhdGlvICYmIHJhdGlvICE9PSAxIHx8IGZvcmNlM0QgPT09IHRydWU7IC8vIFNhZmFyaSBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgbm90IHRvIHJlbmRlciAzRCB0cmFuc2Zvcm0tb3JpZ2luIHZhbHVlcyBwcm9wZXJseSwgc28gd2UgZm9yY2UgdGhlIHogb3JpZ2luIHRvIDAsIHJlY29yZCBpdCBpbiB0aGUgY2FjaGUsIGFuZCB0aGVuIGRvIHRoZSBtYXRoIGhlcmUgdG8gb2Zmc2V0IHRoZSB0cmFuc2xhdGUgdmFsdWVzIGFjY29yZGluZ2x5IChiYXNpY2FsbHkgZG8gdGhlIDNEIHRyYW5zZm9ybS1vcmlnaW4gcGFydCBtYW51YWxseSlcclxuXHJcblxyXG4gIGlmICh6T3JpZ2luICYmIChyb3RhdGlvblggIT09IF96ZXJvRGVnIHx8IHJvdGF0aW9uWSAhPT0gX3plcm9EZWcpKSB7XHJcbiAgICB2YXIgYW5nbGUgPSBwYXJzZUZsb2F0KHJvdGF0aW9uWSkgKiBfREVHMlJBRCxcclxuICAgICAgICBhMTMgPSBNYXRoLnNpbihhbmdsZSksXHJcbiAgICAgICAgYTMzID0gTWF0aC5jb3MoYW5nbGUpLFxyXG4gICAgICAgIGNvcztcclxuXHJcbiAgICBhbmdsZSA9IHBhcnNlRmxvYXQocm90YXRpb25YKSAqIF9ERUcyUkFEO1xyXG4gICAgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgeCA9IF9hZGRQeFRyYW5zbGF0ZSh0YXJnZXQsIHgsIGExMyAqIGNvcyAqIC16T3JpZ2luKTtcclxuICAgIHkgPSBfYWRkUHhUcmFuc2xhdGUodGFyZ2V0LCB5LCAtTWF0aC5zaW4oYW5nbGUpICogLXpPcmlnaW4pO1xyXG4gICAgeiA9IF9hZGRQeFRyYW5zbGF0ZSh0YXJnZXQsIHosIGEzMyAqIGNvcyAqIC16T3JpZ2luICsgek9yaWdpbik7XHJcbiAgfVxyXG5cclxuICBpZiAodHJhbnNmb3JtUGVyc3BlY3RpdmUgIT09IF96ZXJvUHgpIHtcclxuICAgIHRyYW5zZm9ybXMgKz0gXCJwZXJzcGVjdGl2ZShcIiArIHRyYW5zZm9ybVBlcnNwZWN0aXZlICsgX2VuZFBhcmVudGhlc2lzO1xyXG4gIH1cclxuXHJcbiAgaWYgKHhQZXJjZW50IHx8IHlQZXJjZW50KSB7XHJcbiAgICB0cmFuc2Zvcm1zICs9IFwidHJhbnNsYXRlKFwiICsgeFBlcmNlbnQgKyBcIiUsIFwiICsgeVBlcmNlbnQgKyBcIiUpIFwiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVzZTNEIHx8IHggIT09IF96ZXJvUHggfHwgeSAhPT0gX3plcm9QeCB8fCB6ICE9PSBfemVyb1B4KSB7XHJcbiAgICB0cmFuc2Zvcm1zICs9IHogIT09IF96ZXJvUHggfHwgdXNlM0QgPyBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwiLCBcIiArIHkgKyBcIiwgXCIgKyB6ICsgXCIpIFwiIDogXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCIsIFwiICsgeSArIF9lbmRQYXJlbnRoZXNpcztcclxuICB9XHJcblxyXG4gIGlmIChyb3RhdGlvbiAhPT0gX3plcm9EZWcpIHtcclxuICAgIHRyYW5zZm9ybXMgKz0gXCJyb3RhdGUoXCIgKyByb3RhdGlvbiArIF9lbmRQYXJlbnRoZXNpcztcclxuICB9XHJcblxyXG4gIGlmIChyb3RhdGlvblkgIT09IF96ZXJvRGVnKSB7XHJcbiAgICB0cmFuc2Zvcm1zICs9IFwicm90YXRlWShcIiArIHJvdGF0aW9uWSArIF9lbmRQYXJlbnRoZXNpcztcclxuICB9XHJcblxyXG4gIGlmIChyb3RhdGlvblggIT09IF96ZXJvRGVnKSB7XHJcbiAgICB0cmFuc2Zvcm1zICs9IFwicm90YXRlWChcIiArIHJvdGF0aW9uWCArIF9lbmRQYXJlbnRoZXNpcztcclxuICB9XHJcblxyXG4gIGlmIChza2V3WCAhPT0gX3plcm9EZWcgfHwgc2tld1kgIT09IF96ZXJvRGVnKSB7XHJcbiAgICB0cmFuc2Zvcm1zICs9IFwic2tldyhcIiArIHNrZXdYICsgXCIsIFwiICsgc2tld1kgKyBfZW5kUGFyZW50aGVzaXM7XHJcbiAgfVxyXG5cclxuICBpZiAoc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMSkge1xyXG4gICAgdHJhbnNmb3JtcyArPSBcInNjYWxlKFwiICsgc2NhbGVYICsgXCIsIFwiICsgc2NhbGVZICsgX2VuZFBhcmVudGhlc2lzO1xyXG4gIH1cclxuXHJcbiAgdGFyZ2V0LnN0eWxlW190cmFuc2Zvcm1Qcm9wXSA9IHRyYW5zZm9ybXMgfHwgXCJ0cmFuc2xhdGUoMCwgMClcIjtcclxufSxcclxuICAgIF9yZW5kZXJTVkdUcmFuc2Zvcm1zID0gZnVuY3Rpb24gX3JlbmRlclNWR1RyYW5zZm9ybXMocmF0aW8sIGNhY2hlKSB7XHJcbiAgdmFyIF9yZWYyID0gY2FjaGUgfHwgdGhpcyxcclxuICAgICAgeFBlcmNlbnQgPSBfcmVmMi54UGVyY2VudCxcclxuICAgICAgeVBlcmNlbnQgPSBfcmVmMi55UGVyY2VudCxcclxuICAgICAgeCA9IF9yZWYyLngsXHJcbiAgICAgIHkgPSBfcmVmMi55LFxyXG4gICAgICByb3RhdGlvbiA9IF9yZWYyLnJvdGF0aW9uLFxyXG4gICAgICBza2V3WCA9IF9yZWYyLnNrZXdYLFxyXG4gICAgICBza2V3WSA9IF9yZWYyLnNrZXdZLFxyXG4gICAgICBzY2FsZVggPSBfcmVmMi5zY2FsZVgsXHJcbiAgICAgIHNjYWxlWSA9IF9yZWYyLnNjYWxlWSxcclxuICAgICAgdGFyZ2V0ID0gX3JlZjIudGFyZ2V0LFxyXG4gICAgICB4T3JpZ2luID0gX3JlZjIueE9yaWdpbixcclxuICAgICAgeU9yaWdpbiA9IF9yZWYyLnlPcmlnaW4sXHJcbiAgICAgIHhPZmZzZXQgPSBfcmVmMi54T2Zmc2V0LFxyXG4gICAgICB5T2Zmc2V0ID0gX3JlZjIueU9mZnNldCxcclxuICAgICAgZm9yY2VDU1MgPSBfcmVmMi5mb3JjZUNTUyxcclxuICAgICAgdHggPSBwYXJzZUZsb2F0KHgpLFxyXG4gICAgICB0eSA9IHBhcnNlRmxvYXQoeSksXHJcbiAgICAgIGExMSxcclxuICAgICAgYTIxLFxyXG4gICAgICBhMTIsXHJcbiAgICAgIGEyMixcclxuICAgICAgdGVtcDtcclxuXHJcbiAgcm90YXRpb24gPSBwYXJzZUZsb2F0KHJvdGF0aW9uKTtcclxuICBza2V3WCA9IHBhcnNlRmxvYXQoc2tld1gpO1xyXG4gIHNrZXdZID0gcGFyc2VGbG9hdChza2V3WSk7XHJcblxyXG4gIGlmIChza2V3WSkge1xyXG4gICAgLy9mb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UgY29tYmluZSBhbGwgc2tld2luZyBpbnRvIHRoZSBza2V3WCBhbmQgcm90YXRpb24gdmFsdWVzLiBSZW1lbWJlciwgYSBza2V3WSBvZiAxMCBkZWdyZWVzIGxvb2tzIHRoZSBzYW1lIGFzIGEgcm90YXRpb24gb2YgMTAgZGVncmVlcyBwbHVzIGEgc2tld1ggb2YgMTAgZGVncmVlcy5cclxuICAgIHNrZXdZID0gcGFyc2VGbG9hdChza2V3WSk7XHJcbiAgICBza2V3WCArPSBza2V3WTtcclxuICAgIHJvdGF0aW9uICs9IHNrZXdZO1xyXG4gIH1cclxuXHJcbiAgaWYgKHJvdGF0aW9uIHx8IHNrZXdYKSB7XHJcbiAgICByb3RhdGlvbiAqPSBfREVHMlJBRDtcclxuICAgIHNrZXdYICo9IF9ERUcyUkFEO1xyXG4gICAgYTExID0gTWF0aC5jb3Mocm90YXRpb24pICogc2NhbGVYO1xyXG4gICAgYTIxID0gTWF0aC5zaW4ocm90YXRpb24pICogc2NhbGVYO1xyXG4gICAgYTEyID0gTWF0aC5zaW4ocm90YXRpb24gLSBza2V3WCkgKiAtc2NhbGVZO1xyXG4gICAgYTIyID0gTWF0aC5jb3Mocm90YXRpb24gLSBza2V3WCkgKiBzY2FsZVk7XHJcblxyXG4gICAgaWYgKHNrZXdYKSB7XHJcbiAgICAgIHNrZXdZICo9IF9ERUcyUkFEO1xyXG4gICAgICB0ZW1wID0gTWF0aC50YW4oc2tld1ggLSBza2V3WSk7XHJcbiAgICAgIHRlbXAgPSBNYXRoLnNxcnQoMSArIHRlbXAgKiB0ZW1wKTtcclxuICAgICAgYTEyICo9IHRlbXA7XHJcbiAgICAgIGEyMiAqPSB0ZW1wO1xyXG5cclxuICAgICAgaWYgKHNrZXdZKSB7XHJcbiAgICAgICAgdGVtcCA9IE1hdGgudGFuKHNrZXdZKTtcclxuICAgICAgICB0ZW1wID0gTWF0aC5zcXJ0KDEgKyB0ZW1wICogdGVtcCk7XHJcbiAgICAgICAgYTExICo9IHRlbXA7XHJcbiAgICAgICAgYTIxICo9IHRlbXA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhMTEgPSBfcm91bmQoYTExKTtcclxuICAgIGEyMSA9IF9yb3VuZChhMjEpO1xyXG4gICAgYTEyID0gX3JvdW5kKGExMik7XHJcbiAgICBhMjIgPSBfcm91bmQoYTIyKTtcclxuICB9IGVsc2Uge1xyXG4gICAgYTExID0gc2NhbGVYO1xyXG4gICAgYTIyID0gc2NhbGVZO1xyXG4gICAgYTIxID0gYTEyID0gMDtcclxuICB9XHJcblxyXG4gIGlmICh0eCAmJiAhfih4ICsgXCJcIikuaW5kZXhPZihcInB4XCIpIHx8IHR5ICYmICF+KHkgKyBcIlwiKS5pbmRleE9mKFwicHhcIikpIHtcclxuICAgIHR4ID0gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBcInhcIiwgeCwgXCJweFwiKTtcclxuICAgIHR5ID0gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBcInlcIiwgeSwgXCJweFwiKTtcclxuICB9XHJcblxyXG4gIGlmICh4T3JpZ2luIHx8IHlPcmlnaW4gfHwgeE9mZnNldCB8fCB5T2Zmc2V0KSB7XHJcbiAgICB0eCA9IF9yb3VuZCh0eCArIHhPcmlnaW4gLSAoeE9yaWdpbiAqIGExMSArIHlPcmlnaW4gKiBhMTIpICsgeE9mZnNldCk7XHJcbiAgICB0eSA9IF9yb3VuZCh0eSArIHlPcmlnaW4gLSAoeE9yaWdpbiAqIGEyMSArIHlPcmlnaW4gKiBhMjIpICsgeU9mZnNldCk7XHJcbiAgfVxyXG5cclxuICBpZiAoeFBlcmNlbnQgfHwgeVBlcmNlbnQpIHtcclxuICAgIC8vVGhlIFNWRyBzcGVjIGRvZXNuJ3Qgc3VwcG9ydCBwZXJjZW50YWdlLWJhc2VkIHRyYW5zbGF0aW9uIGluIHRoZSBcInRyYW5zZm9ybVwiIGF0dHJpYnV0ZSwgc28gd2UgbWVyZ2UgaXQgaW50byB0aGUgdHJhbnNsYXRpb24gdG8gc2ltdWxhdGUgaXQuXHJcbiAgICB0ZW1wID0gdGFyZ2V0LmdldEJCb3goKTtcclxuICAgIHR4ID0gX3JvdW5kKHR4ICsgeFBlcmNlbnQgLyAxMDAgKiB0ZW1wLndpZHRoKTtcclxuICAgIHR5ID0gX3JvdW5kKHR5ICsgeVBlcmNlbnQgLyAxMDAgKiB0ZW1wLmhlaWdodCk7XHJcbiAgfVxyXG5cclxuICB0ZW1wID0gXCJtYXRyaXgoXCIgKyBhMTEgKyBcIixcIiArIGEyMSArIFwiLFwiICsgYTEyICsgXCIsXCIgKyBhMjIgKyBcIixcIiArIHR4ICsgXCIsXCIgKyB0eSArIFwiKVwiO1xyXG4gIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdGVtcCk7XHJcbiAgZm9yY2VDU1MgJiYgKHRhcmdldC5zdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSB0ZW1wKTsgLy9zb21lIGJyb3dzZXJzIHByaW9yaXRpemUgQ1NTIHRyYW5zZm9ybXMgb3ZlciB0aGUgdHJhbnNmb3JtIGF0dHJpYnV0ZS4gV2hlbiB3ZSBzZW5zZSB0aGF0IHRoZSB1c2VyIGhhcyBDU1MgdHJhbnNmb3JtcyBhcHBsaWVkLCB3ZSBtdXN0IG92ZXJ3cml0ZSB0aGVtIHRoaXMgd2F5IChvdGhlcndpc2Ugc29tZSBicm93c2VyIHNpbXBseSB3b24ndCByZW5kZXIgdGhlIHRyYW5zZm9ybSBhdHRyaWJ1dGUgY2hhbmdlcyEpXHJcbn0sXHJcbiAgICBfYWRkUm90YXRpb25hbFByb3BUd2VlbiA9IGZ1bmN0aW9uIF9hZGRSb3RhdGlvbmFsUHJvcFR3ZWVuKHBsdWdpbiwgdGFyZ2V0LCBwcm9wZXJ0eSwgc3RhcnROdW0sIGVuZFZhbHVlKSB7XHJcbiAgdmFyIGNhcCA9IDM2MCxcclxuICAgICAgaXNTdHJpbmcgPSBfaXNTdHJpbmcoZW5kVmFsdWUpLFxyXG4gICAgICBlbmROdW0gPSBwYXJzZUZsb2F0KGVuZFZhbHVlKSAqIChpc1N0cmluZyAmJiB+ZW5kVmFsdWUuaW5kZXhPZihcInJhZFwiKSA/IF9SQUQyREVHIDogMSksXHJcbiAgICAgIGNoYW5nZSA9IGVuZE51bSAtIHN0YXJ0TnVtLFxyXG4gICAgICBmaW5hbFZhbHVlID0gc3RhcnROdW0gKyBjaGFuZ2UgKyBcImRlZ1wiLFxyXG4gICAgICBkaXJlY3Rpb24sXHJcbiAgICAgIHB0O1xyXG5cclxuICBpZiAoaXNTdHJpbmcpIHtcclxuICAgIGRpcmVjdGlvbiA9IGVuZFZhbHVlLnNwbGl0KFwiX1wiKVsxXTtcclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcInNob3J0XCIpIHtcclxuICAgICAgY2hhbmdlICU9IGNhcDtcclxuXHJcbiAgICAgIGlmIChjaGFuZ2UgIT09IGNoYW5nZSAlIChjYXAgLyAyKSkge1xyXG4gICAgICAgIGNoYW5nZSArPSBjaGFuZ2UgPCAwID8gY2FwIDogLWNhcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkaXJlY3Rpb24gPT09IFwiY3dcIiAmJiBjaGFuZ2UgPCAwKSB7XHJcbiAgICAgIGNoYW5nZSA9IChjaGFuZ2UgKyBjYXAgKiBfYmlnTnVtKSAlIGNhcCAtIH5+KGNoYW5nZSAvIGNhcCkgKiBjYXA7XHJcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gXCJjY3dcIiAmJiBjaGFuZ2UgPiAwKSB7XHJcbiAgICAgIGNoYW5nZSA9IChjaGFuZ2UgLSBjYXAgKiBfYmlnTnVtKSAlIGNhcCAtIH5+KGNoYW5nZSAvIGNhcCkgKiBjYXA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwbHVnaW4uX3B0ID0gcHQgPSBuZXcgUHJvcFR3ZWVuKHBsdWdpbi5fcHQsIHRhcmdldCwgcHJvcGVydHksIHN0YXJ0TnVtLCBjaGFuZ2UsIF9yZW5kZXJQcm9wV2l0aEVuZCk7XHJcbiAgcHQuZSA9IGZpbmFsVmFsdWU7XHJcbiAgcHQudSA9IFwiZGVnXCI7XHJcblxyXG4gIHBsdWdpbi5fcHJvcHMucHVzaChwcm9wZXJ0eSk7XHJcblxyXG4gIHJldHVybiBwdDtcclxufSxcclxuICAgIF9hc3NpZ24gPSBmdW5jdGlvbiBfYXNzaWduKHRhcmdldCwgc291cmNlKSB7XHJcbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgZG9lc24ndCBoYXZlIE9iamVjdC5hc3NpZ24oKSwgc28gd2UgcmVjcmVhdGUgaXQgaGVyZS5cclxuICBmb3IgKHZhciBwIGluIHNvdXJjZSkge1xyXG4gICAgdGFyZ2V0W3BdID0gc291cmNlW3BdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRhcmdldDtcclxufSxcclxuICAgIF9hZGRSYXdUcmFuc2Zvcm1QVHMgPSBmdW5jdGlvbiBfYWRkUmF3VHJhbnNmb3JtUFRzKHBsdWdpbiwgdHJhbnNmb3JtcywgdGFyZ2V0KSB7XHJcbiAgLy9mb3IgaGFuZGxpbmcgY2FzZXMgd2hlcmUgc29tZW9uZSBwYXNzZXMgaW4gYSB3aG9sZSB0cmFuc2Zvcm0gc3RyaW5nLCBsaWtlIHRyYW5zZm9ybTogXCJzY2FsZSgyLCAzKSByb3RhdGUoMjBkZWcpIHRyYW5zbGF0ZVkoMzBlbSlcIlxyXG4gIHZhciBzdGFydENhY2hlID0gX2Fzc2lnbih7fSwgdGFyZ2V0Ll9nc2FwKSxcclxuICAgICAgZXhjbHVkZSA9IFwicGVyc3BlY3RpdmUsZm9yY2UzRCx0cmFuc2Zvcm1PcmlnaW4sc3ZnT3JpZ2luXCIsXHJcbiAgICAgIHN0eWxlID0gdGFyZ2V0LnN0eWxlLFxyXG4gICAgICBlbmRDYWNoZSxcclxuICAgICAgcCxcclxuICAgICAgc3RhcnRWYWx1ZSxcclxuICAgICAgZW5kVmFsdWUsXHJcbiAgICAgIHN0YXJ0TnVtLFxyXG4gICAgICBlbmROdW0sXHJcbiAgICAgIHN0YXJ0VW5pdCxcclxuICAgICAgZW5kVW5pdDtcclxuXHJcbiAgaWYgKHN0YXJ0Q2FjaGUuc3ZnKSB7XHJcbiAgICBzdGFydFZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTtcclxuICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJcIik7XHJcbiAgICBzdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm1zO1xyXG4gICAgZW5kQ2FjaGUgPSBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCAxKTtcclxuXHJcbiAgICBfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtUHJvcCk7XHJcblxyXG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBzdGFydFZhbHVlKTtcclxuICB9IGVsc2Uge1xyXG4gICAgc3RhcnRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KVtfdHJhbnNmb3JtUHJvcF07XHJcbiAgICBzdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm1zO1xyXG4gICAgZW5kQ2FjaGUgPSBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCAxKTtcclxuICAgIHN0eWxlW190cmFuc2Zvcm1Qcm9wXSA9IHN0YXJ0VmFsdWU7XHJcbiAgfVxyXG5cclxuICBmb3IgKHAgaW4gX3RyYW5zZm9ybVByb3BzKSB7XHJcbiAgICBzdGFydFZhbHVlID0gc3RhcnRDYWNoZVtwXTtcclxuICAgIGVuZFZhbHVlID0gZW5kQ2FjaGVbcF07XHJcblxyXG4gICAgaWYgKHN0YXJ0VmFsdWUgIT09IGVuZFZhbHVlICYmIGV4Y2x1ZGUuaW5kZXhPZihwKSA8IDApIHtcclxuICAgICAgLy90d2VlbmluZyB0byBubyBwZXJzcGVjdGl2ZSBnaXZlcyB2ZXJ5IHVuaW50dWl0aXZlIHJlc3VsdHMgLSBqdXN0IGtlZXAgdGhlIHNhbWUgcGVyc3BlY3RpdmUgaW4gdGhhdCBjYXNlLlxyXG4gICAgICBzdGFydFVuaXQgPSBnZXRVbml0KHN0YXJ0VmFsdWUpO1xyXG4gICAgICBlbmRVbml0ID0gZ2V0VW5pdChlbmRWYWx1ZSk7XHJcbiAgICAgIHN0YXJ0TnVtID0gc3RhcnRVbml0ICE9PSBlbmRVbml0ID8gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwLCBzdGFydFZhbHVlLCBlbmRVbml0KSA6IHBhcnNlRmxvYXQoc3RhcnRWYWx1ZSk7XHJcbiAgICAgIGVuZE51bSA9IHBhcnNlRmxvYXQoZW5kVmFsdWUpO1xyXG4gICAgICBwbHVnaW4uX3B0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCBlbmRDYWNoZSwgcCwgc3RhcnROdW0sIGVuZE51bSAtIHN0YXJ0TnVtLCBfcmVuZGVyQ1NTUHJvcCk7XHJcbiAgICAgIHBsdWdpbi5fcHQudSA9IGVuZFVuaXQgfHwgMDtcclxuXHJcbiAgICAgIHBsdWdpbi5fcHJvcHMucHVzaChwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9hc3NpZ24oZW5kQ2FjaGUsIHN0YXJ0Q2FjaGUpO1xyXG59OyAvLyBoYW5kbGUgc3BsaXR0aW5nIGFwYXJ0IHBhZGRpbmcsIG1hcmdpbiwgYm9yZGVyV2lkdGgsIGFuZCBib3JkZXJSYWRpdXMgaW50byB0aGVpciA0IGNvbXBvbmVudHMuIEZpcmVmb3gsIGZvciBleGFtcGxlLCB3b24ndCByZXBvcnQgYm9yZGVyUmFkaXVzIGNvcnJlY3RseSAtIGl0IHdpbGwgb25seSBkbyBib3JkZXJUb3BMZWZ0UmFkaXVzIGFuZCB0aGUgb3RoZXIgY29ybmVycy4gV2UgYWxzbyB3YW50IHRvIGhhbmRsZSBwYWRkaW5nVG9wLCBtYXJnaW5MZWZ0LCBib3JkZXJSaWdodFdpZHRoLCBldGMuXHJcblxyXG5cclxuX2ZvckVhY2hOYW1lKFwicGFkZGluZyxtYXJnaW4sV2lkdGgsUmFkaXVzXCIsIGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xyXG4gIHZhciB0ID0gXCJUb3BcIixcclxuICAgICAgciA9IFwiUmlnaHRcIixcclxuICAgICAgYiA9IFwiQm90dG9tXCIsXHJcbiAgICAgIGwgPSBcIkxlZnRcIixcclxuICAgICAgcHJvcHMgPSAoaW5kZXggPCAzID8gW3QsIHIsIGIsIGxdIDogW3QgKyBsLCB0ICsgciwgYiArIHIsIGIgKyBsXSkubWFwKGZ1bmN0aW9uIChzaWRlKSB7XHJcbiAgICByZXR1cm4gaW5kZXggPCAyID8gbmFtZSArIHNpZGUgOiBcImJvcmRlclwiICsgc2lkZSArIG5hbWU7XHJcbiAgfSk7XHJcblxyXG4gIF9zcGVjaWFsUHJvcHNbaW5kZXggPiAxID8gXCJib3JkZXJcIiArIG5hbWUgOiBuYW1lXSA9IGZ1bmN0aW9uIChwbHVnaW4sIHRhcmdldCwgcHJvcGVydHksIGVuZFZhbHVlLCB0d2Vlbikge1xyXG4gICAgdmFyIGEsIHZhcnM7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCA0KSB7XHJcbiAgICAgIC8vIGdldHRlciwgcGFzc2VkIHRhcmdldCwgcHJvcGVydHksIGFuZCB1bml0IChmcm9tIF9nZXQoKSlcclxuICAgICAgYSA9IHByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xyXG4gICAgICAgIHJldHVybiBfZ2V0KHBsdWdpbiwgcHJvcCwgcHJvcGVydHkpO1xyXG4gICAgICB9KTtcclxuICAgICAgdmFycyA9IGEuam9pbihcIiBcIik7XHJcbiAgICAgIHJldHVybiB2YXJzLnNwbGl0KGFbMF0pLmxlbmd0aCA9PT0gNSA/IGFbMF0gOiB2YXJzO1xyXG4gICAgfVxyXG5cclxuICAgIGEgPSAoZW5kVmFsdWUgKyBcIlwiKS5zcGxpdChcIiBcIik7XHJcbiAgICB2YXJzID0ge307XHJcbiAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wLCBpKSB7XHJcbiAgICAgIHJldHVybiB2YXJzW3Byb3BdID0gYVtpXSA9IGFbaV0gfHwgYVsoaSAtIDEpIC8gMiB8IDBdO1xyXG4gICAgfSk7XHJcbiAgICBwbHVnaW4uaW5pdCh0YXJnZXQsIHZhcnMsIHR3ZWVuKTtcclxuICB9O1xyXG59KTtcclxuXHJcbmV4cG9ydCB2YXIgQ1NTUGx1Z2luID0ge1xyXG4gIG5hbWU6IFwiY3NzXCIsXHJcbiAgcmVnaXN0ZXI6IF9pbml0Q29yZSxcclxuICB0YXJnZXRUZXN0OiBmdW5jdGlvbiB0YXJnZXRUZXN0KHRhcmdldCkge1xyXG4gICAgcmV0dXJuIHRhcmdldC5zdHlsZSAmJiB0YXJnZXQubm9kZVR5cGU7XHJcbiAgfSxcclxuICBpbml0OiBmdW5jdGlvbiBpbml0KHRhcmdldCwgdmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXRzKSB7XHJcbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9wcm9wcyxcclxuICAgICAgICBzdHlsZSA9IHRhcmdldC5zdHlsZSxcclxuICAgICAgICBzdGFydEF0ID0gdHdlZW4udmFycy5zdGFydEF0LFxyXG4gICAgICAgIHN0YXJ0VmFsdWUsXHJcbiAgICAgICAgZW5kVmFsdWUsXHJcbiAgICAgICAgZW5kTnVtLFxyXG4gICAgICAgIHN0YXJ0TnVtLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgc3BlY2lhbFByb3AsXHJcbiAgICAgICAgcCxcclxuICAgICAgICBzdGFydFVuaXQsXHJcbiAgICAgICAgZW5kVW5pdCxcclxuICAgICAgICByZWxhdGl2ZSxcclxuICAgICAgICBpc1RyYW5zZm9ybVJlbGF0ZWQsXHJcbiAgICAgICAgdHJhbnNmb3JtUHJvcFR3ZWVuLFxyXG4gICAgICAgIGNhY2hlLFxyXG4gICAgICAgIHNtb290aCxcclxuICAgICAgICBoYXNQcmlvcml0eSxcclxuICAgICAgICBpbmxpbmVQcm9wcztcclxuICAgIF9wbHVnaW5Jbml0dGVkIHx8IF9pbml0Q29yZSgpOyAvLyB3ZSBtYXkgY2FsbCBpbml0KCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgcGx1Z2luIGluc3RhbmNlLCBsaWtlIHdoZW4gYWRkaW5nIHNwZWNpYWwgcHJvcGVydGllcywgc28gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGUgcmV2ZXJ0IGRhdGEgb3IgaW5saW5lUHJvcHNcclxuXHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuc3R5bGVzIHx8IF9nZXRTdHlsZVNhdmVyKHRhcmdldCk7XHJcbiAgICBpbmxpbmVQcm9wcyA9IHRoaXMuc3R5bGVzLnByb3BzO1xyXG4gICAgdGhpcy50d2VlbiA9IHR3ZWVuO1xyXG5cclxuICAgIGZvciAocCBpbiB2YXJzKSB7XHJcbiAgICAgIGlmIChwID09PSBcImF1dG9Sb3VuZFwiKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGVuZFZhbHVlID0gdmFyc1twXTtcclxuXHJcbiAgICAgIGlmIChfcGx1Z2luc1twXSAmJiBfY2hlY2tQbHVnaW4ocCwgdmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpKSB7XHJcbiAgICAgICAgLy8gcGx1Z2luc1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0eXBlID0gdHlwZW9mIGVuZFZhbHVlO1xyXG4gICAgICBzcGVjaWFsUHJvcCA9IF9zcGVjaWFsUHJvcHNbcF07XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgZW5kVmFsdWUgPSBlbmRWYWx1ZS5jYWxsKHR3ZWVuLCBpbmRleCwgdGFyZ2V0LCB0YXJnZXRzKTtcclxuICAgICAgICB0eXBlID0gdHlwZW9mIGVuZFZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIiAmJiB+ZW5kVmFsdWUuaW5kZXhPZihcInJhbmRvbShcIikpIHtcclxuICAgICAgICBlbmRWYWx1ZSA9IF9yZXBsYWNlUmFuZG9tKGVuZFZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNwZWNpYWxQcm9wKSB7XHJcbiAgICAgICAgc3BlY2lhbFByb3AodGhpcywgdGFyZ2V0LCBwLCBlbmRWYWx1ZSwgdHdlZW4pICYmIChoYXNQcmlvcml0eSA9IDEpO1xyXG4gICAgICB9IGVsc2UgaWYgKHAuc3Vic3RyKDAsIDIpID09PSBcIi0tXCIpIHtcclxuICAgICAgICAvL0NTUyB2YXJpYWJsZVxyXG4gICAgICAgIHN0YXJ0VmFsdWUgPSAoZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmdldFByb3BlcnR5VmFsdWUocCkgKyBcIlwiKS50cmltKCk7XHJcbiAgICAgICAgZW5kVmFsdWUgKz0gXCJcIjtcclxuICAgICAgICBfY29sb3JFeHAubGFzdEluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgaWYgKCFfY29sb3JFeHAudGVzdChzdGFydFZhbHVlKSkge1xyXG4gICAgICAgICAgLy8gY29sb3JzIGRvbid0IGhhdmUgdW5pdHNcclxuICAgICAgICAgIHN0YXJ0VW5pdCA9IGdldFVuaXQoc3RhcnRWYWx1ZSk7XHJcbiAgICAgICAgICBlbmRVbml0ID0gZ2V0VW5pdChlbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbmRVbml0ID8gc3RhcnRVbml0ICE9PSBlbmRVbml0ICYmIChzdGFydFZhbHVlID0gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwLCBzdGFydFZhbHVlLCBlbmRVbml0KSArIGVuZFVuaXQpIDogc3RhcnRVbml0ICYmIChlbmRWYWx1ZSArPSBzdGFydFVuaXQpO1xyXG4gICAgICAgIHRoaXMuYWRkKHN0eWxlLCBcInNldFByb3BlcnR5XCIsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBpbmRleCwgdGFyZ2V0cywgMCwgMCwgcCk7XHJcbiAgICAgICAgcHJvcHMucHVzaChwKTtcclxuICAgICAgICBpbmxpbmVQcm9wcy5wdXNoKHAsIDAsIHN0eWxlW3BdKTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgaWYgKHN0YXJ0QXQgJiYgcCBpbiBzdGFydEF0KSB7XHJcbiAgICAgICAgICAvLyBpbiBjYXNlIHNvbWVvbmUgaGFyZC1jb2RlcyBhIGNvbXBsZXggdmFsdWUgYXMgdGhlIHN0YXJ0LCBsaWtlIHRvcDogXCJjYWxjKDJ2aCAvIDIpXCIuIFdpdGhvdXQgdGhpcywgaXQnZCB1c2UgdGhlIGNvbXB1dGVkIHZhbHVlIChhbHdheXMgaW4gcHgpXHJcbiAgICAgICAgICBzdGFydFZhbHVlID0gdHlwZW9mIHN0YXJ0QXRbcF0gPT09IFwiZnVuY3Rpb25cIiA/IHN0YXJ0QXRbcF0uY2FsbCh0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cykgOiBzdGFydEF0W3BdO1xyXG4gICAgICAgICAgX2lzU3RyaW5nKHN0YXJ0VmFsdWUpICYmIH5zdGFydFZhbHVlLmluZGV4T2YoXCJyYW5kb20oXCIpICYmIChzdGFydFZhbHVlID0gX3JlcGxhY2VSYW5kb20oc3RhcnRWYWx1ZSkpO1xyXG4gICAgICAgICAgZ2V0VW5pdChzdGFydFZhbHVlICsgXCJcIikgfHwgc3RhcnRWYWx1ZSA9PT0gXCJhdXRvXCIgfHwgKHN0YXJ0VmFsdWUgKz0gX2NvbmZpZy51bml0c1twXSB8fCBnZXRVbml0KF9nZXQodGFyZ2V0LCBwKSkgfHwgXCJcIik7IC8vIGZvciBjYXNlcyB3aGVuIHNvbWVvbmUgcGFzc2VzIGluIGEgdW5pdGxlc3MgdmFsdWUgbGlrZSB7eDogMTAwfTsgaWYgd2UgdHJ5IHNldHRpbmcgdHJhbnNsYXRlKDEwMCwgMHB4KSBpdCB3b24ndCB3b3JrLlxyXG5cclxuICAgICAgICAgIChzdGFydFZhbHVlICsgXCJcIikuY2hhckF0KDEpID09PSBcIj1cIiAmJiAoc3RhcnRWYWx1ZSA9IF9nZXQodGFyZ2V0LCBwKSk7IC8vIGNhbid0IHdvcmsgd2l0aCByZWxhdGl2ZSB2YWx1ZXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RhcnRWYWx1ZSA9IF9nZXQodGFyZ2V0LCBwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXJ0TnVtID0gcGFyc2VGbG9hdChzdGFydFZhbHVlKTtcclxuICAgICAgICByZWxhdGl2ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgJiYgZW5kVmFsdWUuY2hhckF0KDEpID09PSBcIj1cIiAmJiBlbmRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgcmVsYXRpdmUgJiYgKGVuZFZhbHVlID0gZW5kVmFsdWUuc3Vic3RyKDIpKTtcclxuICAgICAgICBlbmROdW0gPSBwYXJzZUZsb2F0KGVuZFZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKHAgaW4gX3Byb3BlcnR5QWxpYXNlcykge1xyXG4gICAgICAgICAgaWYgKHAgPT09IFwiYXV0b0FscGhhXCIpIHtcclxuICAgICAgICAgICAgLy9zcGVjaWFsIGNhc2Ugd2hlcmUgd2UgY29udHJvbCB0aGUgdmlzaWJpbGl0eSBhbG9uZyB3aXRoIG9wYWNpdHkuIFdlIHN0aWxsIGFsbG93IHRoZSBvcGFjaXR5IHZhbHVlIHRvIHBhc3MgdGhyb3VnaCBhbmQgZ2V0IHR3ZWVuZWQuXHJcbiAgICAgICAgICAgIGlmIChzdGFydE51bSA9PT0gMSAmJiBfZ2V0KHRhcmdldCwgXCJ2aXNpYmlsaXR5XCIpID09PSBcImhpZGRlblwiICYmIGVuZE51bSkge1xyXG4gICAgICAgICAgICAgIC8vaWYgdmlzaWJpbGl0eSBpcyBpbml0aWFsbHkgc2V0IHRvIFwiaGlkZGVuXCIsIHdlIHNob3VsZCBpbnRlcnByZXQgdGhhdCBhcyBpbnRlbnQgdG8gbWFrZSBvcGFjaXR5IDAgKGEgY29udmVuaWVuY2UpXHJcbiAgICAgICAgICAgICAgc3RhcnROdW0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpbmxpbmVQcm9wcy5wdXNoKFwidmlzaWJpbGl0eVwiLCAwLCBzdHlsZS52aXNpYmlsaXR5KTtcclxuXHJcbiAgICAgICAgICAgIF9hZGROb25Ud2VlbmluZ1BUKHRoaXMsIHN0eWxlLCBcInZpc2liaWxpdHlcIiwgc3RhcnROdW0gPyBcImluaGVyaXRcIiA6IFwiaGlkZGVuXCIsIGVuZE51bSA/IFwiaW5oZXJpdFwiIDogXCJoaWRkZW5cIiwgIWVuZE51bSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHAgIT09IFwic2NhbGVcIiAmJiBwICE9PSBcInRyYW5zZm9ybVwiKSB7XHJcbiAgICAgICAgICAgIHAgPSBfcHJvcGVydHlBbGlhc2VzW3BdO1xyXG4gICAgICAgICAgICB+cC5pbmRleE9mKFwiLFwiKSAmJiAocCA9IHAuc3BsaXQoXCIsXCIpWzBdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlzVHJhbnNmb3JtUmVsYXRlZCA9IHAgaW4gX3RyYW5zZm9ybVByb3BzOyAvLy0tLSBUUkFOU0ZPUk0tUkVMQVRFRCAtLS1cclxuXHJcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtUmVsYXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdHlsZXMuc2F2ZShwKTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBlbmRWYWx1ZS5zdWJzdHJpbmcoMCwgNikgPT09IFwidmFyKC0tXCIpIHtcclxuICAgICAgICAgICAgZW5kVmFsdWUgPSBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIGVuZFZhbHVlLnN1YnN0cmluZyg0LCBlbmRWYWx1ZS5pbmRleE9mKFwiKVwiKSkpO1xyXG4gICAgICAgICAgICBlbmROdW0gPSBwYXJzZUZsb2F0KGVuZFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRyYW5zZm9ybVByb3BUd2Vlbikge1xyXG4gICAgICAgICAgICBjYWNoZSA9IHRhcmdldC5fZ3NhcDtcclxuICAgICAgICAgICAgY2FjaGUucmVuZGVyVHJhbnNmb3JtICYmICF2YXJzLnBhcnNlVHJhbnNmb3JtIHx8IF9wYXJzZVRyYW5zZm9ybSh0YXJnZXQsIHZhcnMucGFyc2VUcmFuc2Zvcm0pOyAvLyBpZiwgZm9yIGV4YW1wbGUsIGdzYXAuc2V0KC4uLiB7dHJhbnNmb3JtOlwidHJhbnNsYXRlWCg1MHZ3KVwifSksIHRoZSBfZ2V0KCkgY2FsbCBkb2Vzbid0IHBhcnNlIHRoZSB0cmFuc2Zvcm0sIHRodXMgY2FjaGUucmVuZGVyVHJhbnNmb3JtIHdvbid0IGJlIHNldCB5ZXQgc28gZm9yY2UgdGhlIHBhcnNpbmcgb2YgdGhlIHRyYW5zZm9ybSBoZXJlLlxyXG5cclxuICAgICAgICAgICAgc21vb3RoID0gdmFycy5zbW9vdGhPcmlnaW4gIT09IGZhbHNlICYmIGNhY2hlLnNtb290aDtcclxuICAgICAgICAgICAgdHJhbnNmb3JtUHJvcFR3ZWVuID0gdGhpcy5fcHQgPSBuZXcgUHJvcFR3ZWVuKHRoaXMuX3B0LCBzdHlsZSwgX3RyYW5zZm9ybVByb3AsIDAsIDEsIGNhY2hlLnJlbmRlclRyYW5zZm9ybSwgY2FjaGUsIDAsIC0xKTsgLy90aGUgZmlyc3QgdGltZSB0aHJvdWdoLCBjcmVhdGUgdGhlIHJlbmRlcmluZyBQcm9wVHdlZW4gc28gdGhhdCBpdCBydW5zIExBU1QgKGluIHRoZSBsaW5rZWQgbGlzdCwgd2Uga2VlcCBhZGRpbmcgdG8gdGhlIGJlZ2lubmluZylcclxuXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybVByb3BUd2Vlbi5kZXAgPSAxOyAvL2ZsYWcgaXQgYXMgZGVwZW5kZW50IHNvIHRoYXQgaWYgdGhpbmdzIGdldCBraWxsZWQvb3ZlcndyaXR0ZW4gYW5kIHRoaXMgaXMgdGhlIG9ubHkgUHJvcFR3ZWVuIGxlZnQsIHdlIGNhbiBzYWZlbHkga2lsbCB0aGUgd2hvbGUgdHdlZW4uXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHAgPT09IFwic2NhbGVcIikge1xyXG4gICAgICAgICAgICB0aGlzLl9wdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIGNhY2hlLCBcInNjYWxlWVwiLCBjYWNoZS5zY2FsZVksIChyZWxhdGl2ZSA/IF9wYXJzZVJlbGF0aXZlKGNhY2hlLnNjYWxlWSwgcmVsYXRpdmUgKyBlbmROdW0pIDogZW5kTnVtKSAtIGNhY2hlLnNjYWxlWSB8fCAwLCBfcmVuZGVyQ1NTUHJvcCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3B0LnUgPSAwO1xyXG4gICAgICAgICAgICBwcm9wcy5wdXNoKFwic2NhbGVZXCIsIHApO1xyXG4gICAgICAgICAgICBwICs9IFwiWFwiO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChwID09PSBcInRyYW5zZm9ybU9yaWdpblwiKSB7XHJcbiAgICAgICAgICAgIGlubGluZVByb3BzLnB1c2goX3RyYW5zZm9ybU9yaWdpblByb3AsIDAsIHN0eWxlW190cmFuc2Zvcm1PcmlnaW5Qcm9wXSk7XHJcbiAgICAgICAgICAgIGVuZFZhbHVlID0gX2NvbnZlcnRLZXl3b3Jkc1RvUGVyY2VudGFnZXMoZW5kVmFsdWUpOyAvL2luIGNhc2Ugc29tZXRoaW5nIGxpa2UgXCJsZWZ0IHRvcFwiIG9yIFwiYm90dG9tIHJpZ2h0XCIgaXMgcGFzc2VkIGluLiBDb252ZXJ0IHRvIHBlcmNlbnRhZ2VzLlxyXG5cclxuICAgICAgICAgICAgaWYgKGNhY2hlLnN2Zykge1xyXG4gICAgICAgICAgICAgIF9hcHBseVNWR09yaWdpbih0YXJnZXQsIGVuZFZhbHVlLCAwLCBzbW9vdGgsIDAsIHRoaXMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVuZFVuaXQgPSBwYXJzZUZsb2F0KGVuZFZhbHVlLnNwbGl0KFwiIFwiKVsyXSkgfHwgMDsgLy9oYW5kbGUgdGhlIHpPcmlnaW4gc2VwYXJhdGVseSFcclxuXHJcbiAgICAgICAgICAgICAgZW5kVW5pdCAhPT0gY2FjaGUuek9yaWdpbiAmJiBfYWRkTm9uVHdlZW5pbmdQVCh0aGlzLCBjYWNoZSwgXCJ6T3JpZ2luXCIsIGNhY2hlLnpPcmlnaW4sIGVuZFVuaXQpO1xyXG5cclxuICAgICAgICAgICAgICBfYWRkTm9uVHdlZW5pbmdQVCh0aGlzLCBzdHlsZSwgcCwgX2ZpcnN0VHdvT25seShzdGFydFZhbHVlKSwgX2ZpcnN0VHdvT25seShlbmRWYWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocCA9PT0gXCJzdmdPcmlnaW5cIikge1xyXG4gICAgICAgICAgICBfYXBwbHlTVkdPcmlnaW4odGFyZ2V0LCBlbmRWYWx1ZSwgMSwgc21vb3RoLCAwLCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChwIGluIF9yb3RhdGlvbmFsUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBfYWRkUm90YXRpb25hbFByb3BUd2Vlbih0aGlzLCBjYWNoZSwgcCwgc3RhcnROdW0sIHJlbGF0aXZlID8gX3BhcnNlUmVsYXRpdmUoc3RhcnROdW0sIHJlbGF0aXZlICsgZW5kVmFsdWUpIDogZW5kVmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHAgPT09IFwic21vb3RoT3JpZ2luXCIpIHtcclxuICAgICAgICAgICAgX2FkZE5vblR3ZWVuaW5nUFQodGhpcywgY2FjaGUsIFwic21vb3RoXCIsIGNhY2hlLnNtb290aCwgZW5kVmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHAgPT09IFwiZm9yY2UzRFwiKSB7XHJcbiAgICAgICAgICAgIGNhY2hlW3BdID0gZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChwID09PSBcInRyYW5zZm9ybVwiKSB7XHJcbiAgICAgICAgICAgIF9hZGRSYXdUcmFuc2Zvcm1QVHModGhpcywgZW5kVmFsdWUsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCEocCBpbiBzdHlsZSkpIHtcclxuICAgICAgICAgIHAgPSBfY2hlY2tQcm9wUHJlZml4KHApIHx8IHA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1SZWxhdGVkIHx8IChlbmROdW0gfHwgZW5kTnVtID09PSAwKSAmJiAoc3RhcnROdW0gfHwgc3RhcnROdW0gPT09IDApICYmICFfY29tcGxleEV4cC50ZXN0KGVuZFZhbHVlKSAmJiBwIGluIHN0eWxlKSB7XHJcbiAgICAgICAgICBzdGFydFVuaXQgPSAoc3RhcnRWYWx1ZSArIFwiXCIpLnN1YnN0cigoc3RhcnROdW0gKyBcIlwiKS5sZW5ndGgpO1xyXG4gICAgICAgICAgZW5kTnVtIHx8IChlbmROdW0gPSAwKTsgLy8gcHJvdGVjdCBhZ2FpbnN0IE5hTlxyXG5cclxuICAgICAgICAgIGVuZFVuaXQgPSBnZXRVbml0KGVuZFZhbHVlKSB8fCAocCBpbiBfY29uZmlnLnVuaXRzID8gX2NvbmZpZy51bml0c1twXSA6IHN0YXJ0VW5pdCk7XHJcbiAgICAgICAgICBzdGFydFVuaXQgIT09IGVuZFVuaXQgJiYgKHN0YXJ0TnVtID0gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwLCBzdGFydFZhbHVlLCBlbmRVbml0KSk7XHJcbiAgICAgICAgICB0aGlzLl9wdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIGlzVHJhbnNmb3JtUmVsYXRlZCA/IGNhY2hlIDogc3R5bGUsIHAsIHN0YXJ0TnVtLCAocmVsYXRpdmUgPyBfcGFyc2VSZWxhdGl2ZShzdGFydE51bSwgcmVsYXRpdmUgKyBlbmROdW0pIDogZW5kTnVtKSAtIHN0YXJ0TnVtLCAhaXNUcmFuc2Zvcm1SZWxhdGVkICYmIChlbmRVbml0ID09PSBcInB4XCIgfHwgcCA9PT0gXCJ6SW5kZXhcIikgJiYgdmFycy5hdXRvUm91bmQgIT09IGZhbHNlID8gX3JlbmRlclJvdW5kZWRDU1NQcm9wIDogX3JlbmRlckNTU1Byb3ApO1xyXG4gICAgICAgICAgdGhpcy5fcHQudSA9IGVuZFVuaXQgfHwgMDtcclxuXHJcbiAgICAgICAgICBpZiAoc3RhcnRVbml0ICE9PSBlbmRVbml0ICYmIGVuZFVuaXQgIT09IFwiJVwiKSB7XHJcbiAgICAgICAgICAgIC8vd2hlbiB0aGUgdHdlZW4gZ29lcyBhbGwgdGhlIHdheSBiYWNrIHRvIHRoZSBiZWdpbm5pbmcsIHdlIG5lZWQgdG8gcmV2ZXJ0IGl0IHRvIHRoZSBPTEQvT1JJR0lOQUwgdmFsdWUgKHdpdGggdGhvc2UgdW5pdHMpLiBXZSByZWNvcmQgdGhhdCBhcyBhIFwiYlwiIChiZWdpbm5pbmcpIHByb3BlcnR5IGFuZCBwb2ludCB0byBhIHJlbmRlciBtZXRob2QgdGhhdCBoYW5kbGVzIHRoYXQuIChwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuX3B0LmIgPSBzdGFydFZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9wdC5yID0gX3JlbmRlckNTU1Byb3BXaXRoQmVnaW5uaW5nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoIShwIGluIHN0eWxlKSkge1xyXG4gICAgICAgICAgaWYgKHAgaW4gdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIC8vbWF5YmUgaXQncyBub3QgYSBzdHlsZSAtIGl0IGNvdWxkIGJlIGEgcHJvcGVydHkgYWRkZWQgZGlyZWN0bHkgdG8gYW4gZWxlbWVudCBpbiB3aGljaCBjYXNlIHdlJ2xsIHRyeSB0byBhbmltYXRlIHRoYXQuXHJcbiAgICAgICAgICAgIHRoaXMuYWRkKHRhcmdldCwgcCwgc3RhcnRWYWx1ZSB8fCB0YXJnZXRbcF0sIHJlbGF0aXZlID8gcmVsYXRpdmUgKyBlbmRWYWx1ZSA6IGVuZFZhbHVlLCBpbmRleCwgdGFyZ2V0cyk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHAgIT09IFwicGFyc2VUcmFuc2Zvcm1cIikge1xyXG4gICAgICAgICAgICBfbWlzc2luZ1BsdWdpbihwLCBlbmRWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgX3R3ZWVuQ29tcGxleENTU1N0cmluZy5jYWxsKHRoaXMsIHRhcmdldCwgcCwgc3RhcnRWYWx1ZSwgcmVsYXRpdmUgPyByZWxhdGl2ZSArIGVuZFZhbHVlIDogZW5kVmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaXNUcmFuc2Zvcm1SZWxhdGVkIHx8IChwIGluIHN0eWxlID8gaW5saW5lUHJvcHMucHVzaChwLCAwLCBzdHlsZVtwXSkgOiB0eXBlb2YgdGFyZ2V0W3BdID09PSBcImZ1bmN0aW9uXCIgPyBpbmxpbmVQcm9wcy5wdXNoKHAsIDIsIHRhcmdldFtwXSgpKSA6IGlubGluZVByb3BzLnB1c2gocCwgMSwgc3RhcnRWYWx1ZSB8fCB0YXJnZXRbcF0pKTtcclxuICAgICAgICBwcm9wcy5wdXNoKHApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFzUHJpb3JpdHkgJiYgX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSh0aGlzKTtcclxuICB9LFxyXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHJhdGlvLCBkYXRhKSB7XHJcbiAgICBpZiAoZGF0YS50d2Vlbi5fdGltZSB8fCAhX3JldmVydGluZygpKSB7XHJcbiAgICAgIHZhciBwdCA9IGRhdGEuX3B0O1xyXG5cclxuICAgICAgd2hpbGUgKHB0KSB7XHJcbiAgICAgICAgcHQucihyYXRpbywgcHQuZCk7XHJcbiAgICAgICAgcHQgPSBwdC5fbmV4dDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YS5zdHlsZXMucmV2ZXJ0KCk7XHJcbiAgICB9XHJcbiAgfSxcclxuICBnZXQ6IF9nZXQsXHJcbiAgYWxpYXNlczogX3Byb3BlcnR5QWxpYXNlcyxcclxuICBnZXRTZXR0ZXI6IGZ1bmN0aW9uIGdldFNldHRlcih0YXJnZXQsIHByb3BlcnR5LCBwbHVnaW4pIHtcclxuICAgIC8vcmV0dXJucyBhIHNldHRlciBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUgYW5kIGFwcGxpZXMgaXQgYWNjb3JkaW5nbHkuIFJlbWVtYmVyLCBwcm9wZXJ0aWVzIGxpa2UgXCJ4XCIgYXJlbid0IGFzIHNpbXBsZSBhcyB0YXJnZXQuc3R5bGUucHJvcGVydHkgPSB2YWx1ZSBiZWNhdXNlIHRoZXkndmUgZ290IHRvIGJlIGFwcGxpZWQgdG8gYSBwcm94eSBvYmplY3QgYW5kIHRoZW4gbWVyZ2VkIGludG8gYSB0cmFuc2Zvcm0gc3RyaW5nIGluIGEgcmVuZGVyZXIuXHJcbiAgICB2YXIgcCA9IF9wcm9wZXJ0eUFsaWFzZXNbcHJvcGVydHldO1xyXG4gICAgcCAmJiBwLmluZGV4T2YoXCIsXCIpIDwgMCAmJiAocHJvcGVydHkgPSBwKTtcclxuICAgIHJldHVybiBwcm9wZXJ0eSBpbiBfdHJhbnNmb3JtUHJvcHMgJiYgcHJvcGVydHkgIT09IF90cmFuc2Zvcm1PcmlnaW5Qcm9wICYmICh0YXJnZXQuX2dzYXAueCB8fCBfZ2V0KHRhcmdldCwgXCJ4XCIpKSA/IHBsdWdpbiAmJiBfcmVjZW50U2V0dGVyUGx1Z2luID09PSBwbHVnaW4gPyBwcm9wZXJ0eSA9PT0gXCJzY2FsZVwiID8gX3NldHRlclNjYWxlIDogX3NldHRlclRyYW5zZm9ybSA6IChfcmVjZW50U2V0dGVyUGx1Z2luID0gcGx1Z2luIHx8IHt9KSAmJiAocHJvcGVydHkgPT09IFwic2NhbGVcIiA/IF9zZXR0ZXJTY2FsZVdpdGhSZW5kZXIgOiBfc2V0dGVyVHJhbnNmb3JtV2l0aFJlbmRlcikgOiB0YXJnZXQuc3R5bGUgJiYgIV9pc1VuZGVmaW5lZCh0YXJnZXQuc3R5bGVbcHJvcGVydHldKSA/IF9zZXR0ZXJDU1NTdHlsZSA6IH5wcm9wZXJ0eS5pbmRleE9mKFwiLVwiKSA/IF9zZXR0ZXJDU1NQcm9wIDogX2dldFNldHRlcih0YXJnZXQsIHByb3BlcnR5KTtcclxuICB9LFxyXG4gIGNvcmU6IHtcclxuICAgIF9yZW1vdmVQcm9wZXJ0eTogX3JlbW92ZVByb3BlcnR5LFxyXG4gICAgX2dldE1hdHJpeDogX2dldE1hdHJpeFxyXG4gIH1cclxufTtcclxuZ3NhcC51dGlscy5jaGVja1ByZWZpeCA9IF9jaGVja1Byb3BQcmVmaXg7XHJcbmdzYXAuY29yZS5nZXRTdHlsZVNhdmVyID0gX2dldFN0eWxlU2F2ZXI7XHJcblxyXG4oZnVuY3Rpb24gKHBvc2l0aW9uQW5kU2NhbGUsIHJvdGF0aW9uLCBvdGhlcnMsIGFsaWFzZXMpIHtcclxuICB2YXIgYWxsID0gX2ZvckVhY2hOYW1lKHBvc2l0aW9uQW5kU2NhbGUgKyBcIixcIiArIHJvdGF0aW9uICsgXCIsXCIgKyBvdGhlcnMsIGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBfdHJhbnNmb3JtUHJvcHNbbmFtZV0gPSAxO1xyXG4gIH0pO1xyXG5cclxuICBfZm9yRWFjaE5hbWUocm90YXRpb24sIGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBfY29uZmlnLnVuaXRzW25hbWVdID0gXCJkZWdcIjtcclxuICAgIF9yb3RhdGlvbmFsUHJvcGVydGllc1tuYW1lXSA9IDE7XHJcbiAgfSk7XHJcblxyXG4gIF9wcm9wZXJ0eUFsaWFzZXNbYWxsWzEzXV0gPSBwb3NpdGlvbkFuZFNjYWxlICsgXCIsXCIgKyByb3RhdGlvbjtcclxuXHJcbiAgX2ZvckVhY2hOYW1lKGFsaWFzZXMsIGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICB2YXIgc3BsaXQgPSBuYW1lLnNwbGl0KFwiOlwiKTtcclxuICAgIF9wcm9wZXJ0eUFsaWFzZXNbc3BsaXRbMV1dID0gYWxsW3NwbGl0WzBdXTtcclxuICB9KTtcclxufSkoXCJ4LHkseixzY2FsZSxzY2FsZVgsc2NhbGVZLHhQZXJjZW50LHlQZXJjZW50XCIsIFwicm90YXRpb24scm90YXRpb25YLHJvdGF0aW9uWSxza2V3WCxza2V3WVwiLCBcInRyYW5zZm9ybSx0cmFuc2Zvcm1PcmlnaW4sc3ZnT3JpZ2luLGZvcmNlM0Qsc21vb3RoT3JpZ2luLHRyYW5zZm9ybVBlcnNwZWN0aXZlXCIsIFwiMDp0cmFuc2xhdGVYLDE6dHJhbnNsYXRlWSwyOnRyYW5zbGF0ZVosODpyb3RhdGUsODpyb3RhdGlvblosODpyb3RhdGVaLDk6cm90YXRlWCwxMDpyb3RhdGVZXCIpO1xyXG5cclxuX2ZvckVhY2hOYW1lKFwieCx5LHosdG9wLHJpZ2h0LGJvdHRvbSxsZWZ0LHdpZHRoLGhlaWdodCxmb250U2l6ZSxwYWRkaW5nLG1hcmdpbixwZXJzcGVjdGl2ZVwiLCBmdW5jdGlvbiAobmFtZSkge1xyXG4gIF9jb25maWcudW5pdHNbbmFtZV0gPSBcInB4XCI7XHJcbn0pO1xyXG5cclxuZ3NhcC5yZWdpc3RlclBsdWdpbihDU1NQbHVnaW4pO1xyXG5leHBvcnQgeyBDU1NQbHVnaW4gYXMgZGVmYXVsdCwgX2dldEJCb3gsIF9jcmVhdGVFbGVtZW50LCBfY2hlY2tQcm9wUHJlZml4IGFzIGNoZWNrUHJlZml4IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/gsap/CSSPlugin.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/gsap/gsap-core.js": /*!****************************************!*\ !*** ./node_modules/gsap/gsap-core.js ***! \****************************************/ /***/ (function(__unused_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 */ Animation: function() { return /* binding */ Animation; },\n/* harmony export */ Back: function() { return /* binding */ Back; },\n/* harmony export */ Bounce: function() { return /* binding */ Bounce; },\n/* harmony export */ Circ: function() { return /* binding */ Circ; },\n/* harmony export */ Cubic: function() { return /* binding */ Cubic; },\n/* harmony export */ Elastic: function() { return /* binding */ Elastic; },\n/* harmony export */ Expo: function() { return /* binding */ Expo; },\n/* harmony export */ GSCache: function() { return /* binding */ GSCache; },\n/* harmony export */ Linear: function() { return /* binding */ Linear; },\n/* harmony export */ Power0: function() { return /* binding */ Power0; },\n/* harmony export */ Power1: function() { return /* binding */ Power1; },\n/* harmony export */ Power2: function() { return /* binding */ Power2; },\n/* harmony export */ Power3: function() { return /* binding */ Power3; },\n/* harmony export */ Power4: function() { return /* binding */ Power4; },\n/* harmony export */ PropTween: function() { return /* binding */ PropTween; },\n/* harmony export */ Quad: function() { return /* binding */ Quad; },\n/* harmony export */ Quart: function() { return /* binding */ Quart; },\n/* harmony export */ Quint: function() { return /* binding */ Quint; },\n/* harmony export */ Sine: function() { return /* binding */ Sine; },\n/* harmony export */ SteppedEase: function() { return /* binding */ SteppedEase; },\n/* harmony export */ Strong: function() { return /* binding */ Strong; },\n/* harmony export */ Timeline: function() { return /* binding */ Timeline; },\n/* harmony export */ TimelineLite: function() { return /* binding */ Timeline; },\n/* harmony export */ TimelineMax: function() { return /* binding */ Timeline; },\n/* harmony export */ Tween: function() { return /* binding */ Tween; },\n/* harmony export */ TweenLite: function() { return /* binding */ Tween; },\n/* harmony export */ TweenMax: function() { return /* binding */ Tween; },\n/* harmony export */ _checkPlugin: function() { return /* binding */ _checkPlugin; },\n/* harmony export */ _colorExp: function() { return /* binding */ _colorExp; },\n/* harmony export */ _colorStringFilter: function() { return /* binding */ _colorStringFilter; },\n/* harmony export */ _config: function() { return /* binding */ _config; },\n/* harmony export */ _forEachName: function() { return /* binding */ _forEachName; },\n/* harmony export */ _getCache: function() { return /* binding */ _getCache; },\n/* harmony export */ _getProperty: function() { return /* binding */ _getProperty; },\n/* harmony export */ _getSetter: function() { return /* binding */ _getSetter; },\n/* harmony export */ _isString: function() { return /* binding */ _isString; },\n/* harmony export */ _isUndefined: function() { return /* binding */ _isUndefined; },\n/* harmony export */ _missingPlugin: function() { return /* binding */ _missingPlugin; },\n/* harmony export */ _numExp: function() { return /* binding */ _numExp; },\n/* harmony export */ _numWithUnitExp: function() { return /* binding */ _numWithUnitExp; },\n/* harmony export */ _parseRelative: function() { return /* binding */ _parseRelative; },\n/* harmony export */ _plugins: function() { return /* binding */ _plugins; },\n/* harmony export */ _relExp: function() { return /* binding */ _relExp; },\n/* harmony export */ _removeLinkedListItem: function() { return /* binding */ _removeLinkedListItem; },\n/* harmony export */ _renderComplexString: function() { return /* binding */ _renderComplexString; },\n/* harmony export */ _replaceRandom: function() { return /* binding */ _replaceRandom; },\n/* harmony export */ _round: function() { return /* binding */ _round; },\n/* harmony export */ _roundModifier: function() { return /* binding */ _roundModifier; },\n/* harmony export */ _setDefaults: function() { return /* binding */ _setDefaults; },\n/* harmony export */ _sortPropTweensByPriority: function() { return /* binding */ _sortPropTweensByPriority; },\n/* harmony export */ _ticker: function() { return /* binding */ _ticker; },\n/* harmony export */ clamp: function() { return /* binding */ clamp; },\n/* harmony export */ \"default\": function() { return /* binding */ gsap; },\n/* harmony export */ distribute: function() { return /* binding */ distribute; },\n/* harmony export */ getUnit: function() { return /* binding */ getUnit; },\n/* harmony export */ gsap: function() { return /* binding */ gsap; },\n/* harmony export */ interpolate: function() { return /* binding */ interpolate; },\n/* harmony export */ mapRange: function() { return /* binding */ mapRange; },\n/* harmony export */ normalize: function() { return /* binding */ normalize; },\n/* harmony export */ pipe: function() { return /* binding */ pipe; },\n/* harmony export */ random: function() { return /* binding */ random; },\n/* harmony export */ selector: function() { return /* binding */ selector; },\n/* harmony export */ shuffle: function() { return /* binding */ shuffle; },\n/* harmony export */ snap: function() { return /* binding */ snap; },\n/* harmony export */ splitColor: function() { return /* binding */ splitColor; },\n/* harmony export */ toArray: function() { return /* binding */ toArray; },\n/* harmony export */ unitize: function() { return /* binding */ unitize; },\n/* harmony export */ wrap: function() { return /* binding */ wrap; },\n/* harmony export */ wrapYoyo: function() { return /* binding */ wrapYoyo; }\n/* harmony export */ });\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\r\n\r\n/*!\r\n * GSAP 3.13.0\r\n * https://gsap.com\r\n *\r\n * @license Copyright 2008-2025, GreenSock. All rights reserved.\r\n * Subject to the terms at https://gsap.com/standard-license\r\n * @author: Jack Doyle, jack@greensock.com\r\n*/\r\n\r\n/* eslint-disable */\r\nvar _config = {\r\n autoSleep: 120,\r\n force3D: \"auto\",\r\n nullTargetWarn: 1,\r\n units: {\r\n lineHeight: \"\"\r\n }\r\n},\r\n _defaults = {\r\n duration: .5,\r\n overwrite: false,\r\n delay: 0\r\n},\r\n _suppressOverwrites,\r\n _reverting,\r\n _context,\r\n _bigNum = 1e8,\r\n _tinyNum = 1 / _bigNum,\r\n _2PI = Math.PI * 2,\r\n _HALF_PI = _2PI / 4,\r\n _gsID = 0,\r\n _sqrt = Math.sqrt,\r\n _cos = Math.cos,\r\n _sin = Math.sin,\r\n _isString = function _isString(value) {\r\n return typeof value === \"string\";\r\n},\r\n _isFunction = function _isFunction(value) {\r\n return typeof value === \"function\";\r\n},\r\n _isNumber = function _isNumber(value) {\r\n return typeof value === \"number\";\r\n},\r\n _isUndefined = function _isUndefined(value) {\r\n return typeof value === \"undefined\";\r\n},\r\n _isObject = function _isObject(value) {\r\n return typeof value === \"object\";\r\n},\r\n _isNotFalse = function _isNotFalse(value) {\r\n return value !== false;\r\n},\r\n _windowExists = function _windowExists() {\r\n return typeof window !== \"undefined\";\r\n},\r\n _isFuncOrString = function _isFuncOrString(value) {\r\n return _isFunction(value) || _isString(value);\r\n},\r\n _isTypedArray = typeof ArrayBuffer === \"function\" && ArrayBuffer.isView || function () {},\r\n // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().\r\n_isArray = Array.isArray,\r\n _strictNumExp = /(?:-?\\.?\\d|\\.)+/gi,\r\n //only numbers (including negatives and decimals) but NOT relative values.\r\n_numExp = /[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g,\r\n //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\r\n_numWithUnitExp = /[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,\r\n _complexStringNumExp = /[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi,\r\n //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.\r\n_relExp = /[+-]=-?[.\\d]+/,\r\n _delimitedValueExp = /[^,'\"\\[\\]\\s]+/gi,\r\n // previously /[#\\-+.]*\\b[a-z\\d\\-=+%.]+/gi but didn't catch special characters.\r\n_unitExp = /^[+\\-=e\\s\\d]*\\d+[.\\d]*([a-z]*|%)\\s*$/i,\r\n _globalTimeline,\r\n _win,\r\n _coreInitted,\r\n _doc,\r\n _globals = {},\r\n _installScope = {},\r\n _coreReady,\r\n _install = function _install(scope) {\r\n return (_installScope = _merge(scope, _globals)) && gsap;\r\n},\r\n _missingPlugin = function _missingPlugin(property, value) {\r\n return console.warn(\"Invalid property\", property, \"set to\", value, \"Missing plugin? gsap.registerPlugin()\");\r\n},\r\n _warn = function _warn(message, suppress) {\r\n return !suppress && console.warn(message);\r\n},\r\n _addGlobal = function _addGlobal(name, obj) {\r\n return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;\r\n},\r\n _emptyFunc = function _emptyFunc() {\r\n return 0;\r\n},\r\n _startAtRevertConfig = {\r\n suppressEvents: true,\r\n isStart: true,\r\n kill: false\r\n},\r\n _revertConfigNoKill = {\r\n suppressEvents: true,\r\n kill: false\r\n},\r\n _revertConfig = {\r\n suppressEvents: true\r\n},\r\n _reservedProps = {},\r\n _lazyTweens = [],\r\n _lazyLookup = {},\r\n _lastRenderedFrame,\r\n _plugins = {},\r\n _effects = {},\r\n _nextGCFrame = 30,\r\n _harnessPlugins = [],\r\n _callbackNames = \"\",\r\n _harness = function _harness(targets) {\r\n var target = targets[0],\r\n harnessPlugin,\r\n i;\r\n _isObject(target) || _isFunction(target) || (targets = [targets]);\r\n\r\n if (!(harnessPlugin = (target._gsap || {}).harness)) {\r\n // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization)\r\n i = _harnessPlugins.length;\r\n\r\n while (i-- && !_harnessPlugins[i].targetTest(target)) {}\r\n\r\n harnessPlugin = _harnessPlugins[i];\r\n }\r\n\r\n i = targets.length;\r\n\r\n while (i--) {\r\n targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);\r\n }\r\n\r\n return targets;\r\n},\r\n _getCache = function _getCache(target) {\r\n return target._gsap || _harness(toArray(target))[0]._gsap;\r\n},\r\n _getProperty = function _getProperty(target, property, v) {\r\n return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;\r\n},\r\n _forEachName = function _forEachName(names, func) {\r\n return (names = names.split(\",\")).forEach(func) || names;\r\n},\r\n //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code).\r\n_round = function _round(value) {\r\n return Math.round(value * 100000) / 100000 || 0;\r\n},\r\n _roundPrecise = function _roundPrecise(value) {\r\n return Math.round(value * 10000000) / 10000000 || 0;\r\n},\r\n // increased precision mostly for timing values.\r\n_parseRelative = function _parseRelative(start, value) {\r\n var operator = value.charAt(0),\r\n end = parseFloat(value.substr(2));\r\n start = parseFloat(start);\r\n return operator === \"+\" ? start + end : operator === \"-\" ? start - end : operator === \"*\" ? start * end : start / end;\r\n},\r\n _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {\r\n //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search.\r\n var l = toFind.length,\r\n i = 0;\r\n\r\n for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}\r\n\r\n return i < l;\r\n},\r\n _lazyRender = function _lazyRender() {\r\n var l = _lazyTweens.length,\r\n a = _lazyTweens.slice(0),\r\n i,\r\n tween;\r\n\r\n _lazyLookup = {};\r\n _lazyTweens.length = 0;\r\n\r\n for (i = 0; i < l; i++) {\r\n tween = a[i];\r\n tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);\r\n }\r\n},\r\n _isRevertWorthy = function _isRevertWorthy(animation) {\r\n return !!(animation._initted || animation._startAt || animation.add);\r\n},\r\n _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {\r\n _lazyTweens.length && !_reverting && _lazyRender();\r\n animation.render(time, suppressEvents, force || !!(_reverting && time < 0 && _isRevertWorthy(animation)));\r\n _lazyTweens.length && !_reverting && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\r\n},\r\n _numericIfPossible = function _numericIfPossible(value) {\r\n var n = parseFloat(value);\r\n return (n || n === 0) && (value + \"\").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;\r\n},\r\n _passThrough = function _passThrough(p) {\r\n return p;\r\n},\r\n _setDefaults = function _setDefaults(obj, defaults) {\r\n for (var p in defaults) {\r\n p in obj || (obj[p] = defaults[p]);\r\n }\r\n\r\n return obj;\r\n},\r\n _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {\r\n return function (obj, defaults) {\r\n for (var p in defaults) {\r\n p in obj || p === \"duration\" && excludeDuration || p === \"ease\" || (obj[p] = defaults[p]);\r\n }\r\n };\r\n},\r\n _merge = function _merge(base, toMerge) {\r\n for (var p in toMerge) {\r\n base[p] = toMerge[p];\r\n }\r\n\r\n return base;\r\n},\r\n _mergeDeep = function _mergeDeep(base, toMerge) {\r\n for (var p in toMerge) {\r\n p !== \"__proto__\" && p !== \"constructor\" && p !== \"prototype\" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);\r\n }\r\n\r\n return base;\r\n},\r\n _copyExcluding = function _copyExcluding(obj, excluding) {\r\n var copy = {},\r\n p;\r\n\r\n for (p in obj) {\r\n p in excluding || (copy[p] = obj[p]);\r\n }\r\n\r\n return copy;\r\n},\r\n _inheritDefaults = function _inheritDefaults(vars) {\r\n var parent = vars.parent || _globalTimeline,\r\n func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;\r\n\r\n if (_isNotFalse(vars.inherit)) {\r\n while (parent) {\r\n func(vars, parent.vars.defaults);\r\n parent = parent.parent || parent._dp;\r\n }\r\n }\r\n\r\n return vars;\r\n},\r\n _arraysMatch = function _arraysMatch(a1, a2) {\r\n var i = a1.length,\r\n match = i === a2.length;\r\n\r\n while (match && i-- && a1[i] === a2[i]) {}\r\n\r\n return i < 0;\r\n},\r\n _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {\r\n if (firstProp === void 0) {\r\n firstProp = \"_first\";\r\n }\r\n\r\n if (lastProp === void 0) {\r\n lastProp = \"_last\";\r\n }\r\n\r\n var prev = parent[lastProp],\r\n t;\r\n\r\n if (sortBy) {\r\n t = child[sortBy];\r\n\r\n while (prev && prev[sortBy] > t) {\r\n prev = prev._prev;\r\n }\r\n }\r\n\r\n if (prev) {\r\n child._next = prev._next;\r\n prev._next = child;\r\n } else {\r\n child._next = parent[firstProp];\r\n parent[firstProp] = child;\r\n }\r\n\r\n if (child._next) {\r\n child._next._prev = child;\r\n } else {\r\n parent[lastProp] = child;\r\n }\r\n\r\n child._prev = prev;\r\n child.parent = child._dp = parent;\r\n return child;\r\n},\r\n _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {\r\n if (firstProp === void 0) {\r\n firstProp = \"_first\";\r\n }\r\n\r\n if (lastProp === void 0) {\r\n lastProp = \"_last\";\r\n }\r\n\r\n var prev = child._prev,\r\n next = child._next;\r\n\r\n if (prev) {\r\n prev._next = next;\r\n } else if (parent[firstProp] === child) {\r\n parent[firstProp] = next;\r\n }\r\n\r\n if (next) {\r\n next._prev = prev;\r\n } else if (parent[lastProp] === child) {\r\n parent[lastProp] = prev;\r\n }\r\n\r\n child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list.\r\n},\r\n _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {\r\n child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child);\r\n child._act = 0;\r\n},\r\n _uncache = function _uncache(animation, child) {\r\n if (animation && (!child || child._end > animation._dur || child._start < 0)) {\r\n // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end)\r\n var a = animation;\r\n\r\n while (a) {\r\n a._dirty = 1;\r\n a = a.parent;\r\n }\r\n }\r\n\r\n return animation;\r\n},\r\n _recacheAncestors = function _recacheAncestors(animation) {\r\n var parent = animation.parent;\r\n\r\n while (parent && parent.parent) {\r\n //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\r\n parent._dirty = 1;\r\n parent.totalDuration();\r\n parent = parent.parent;\r\n }\r\n\r\n return animation;\r\n},\r\n _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) {\r\n return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));\r\n},\r\n _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {\r\n return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);\r\n},\r\n _elapsedCycleDuration = function _elapsedCycleDuration(animation) {\r\n return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;\r\n},\r\n // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle.\r\n_animationCycle = function _animationCycle(tTime, cycleDuration) {\r\n var whole = Math.floor(tTime = _roundPrecise(tTime / cycleDuration));\r\n return tTime && whole === tTime ? whole - 1 : whole;\r\n},\r\n _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {\r\n return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);\r\n},\r\n _setEnd = function _setEnd(animation) {\r\n return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));\r\n},\r\n _alignPlayhead = function _alignPlayhead(animation, totalTime) {\r\n // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for.\r\n var parent = animation._dp;\r\n\r\n if (parent && parent.smoothChildTiming && animation._ts) {\r\n animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));\r\n\r\n _setEnd(animation);\r\n\r\n parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\r\n }\r\n\r\n return animation;\r\n},\r\n\r\n/*\r\n_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => {\r\n\tlet cycleDuration = duration + repeatDelay,\r\n\t\ttime = _round(clampedTotalTime % cycleDuration);\r\n\tif (time > duration) {\r\n\t\ttime = duration;\r\n\t}\r\n\treturn (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time;\r\n},\r\n*/\r\n_postAddChecks = function _postAddChecks(timeline, child) {\r\n var t;\r\n\r\n if (child._time || !child._dur && child._initted || child._start < timeline._time && (child._dur || !child.add)) {\r\n // in case, for example, the _start is moved on a tween that has already rendered, or if it's being inserted into a timeline BEFORE where the playhead is currently. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning. Special case: if it's a timeline (has .add() method) and no duration, we can skip rendering because the user may be populating it AFTER adding it to a parent timeline (unconventional, but possible, and we wouldn't want it to get removed if the parent's autoRemoveChildren is true).\r\n t = _parentToChildTotalTime(timeline.rawTime(), child);\r\n\r\n if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {\r\n child.render(t, true);\r\n }\r\n } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\r\n\r\n\r\n if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {\r\n //in case any of the ancestors had completed but should now be enabled...\r\n if (timeline._dur < timeline.duration()) {\r\n t = timeline;\r\n\r\n while (t._dp) {\r\n t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead.\r\n\r\n t = t._dp;\r\n }\r\n }\r\n\r\n timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order.\r\n }\r\n},\r\n _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {\r\n child.parent && _removeFromParent(child);\r\n child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);\r\n child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));\r\n\r\n _addLinkedListItem(timeline, child, \"_first\", \"_last\", timeline._sort ? \"_start\" : 0);\r\n\r\n _isFromOrFromStart(child) || (timeline._recent = child);\r\n skipChecks || _postAddChecks(timeline, child);\r\n timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime); // if the timeline is reversed and the new child makes it longer, we may need to adjust the parent's _start (push it back)\r\n\r\n return timeline;\r\n},\r\n _scrollTrigger = function _scrollTrigger(animation, trigger) {\r\n return (_globals.ScrollTrigger || _missingPlugin(\"scrollTrigger\", trigger)) && _globals.ScrollTrigger.create(trigger, animation);\r\n},\r\n _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) {\r\n _initTween(tween, time, tTime);\r\n\r\n if (!tween._initted) {\r\n return 1;\r\n }\r\n\r\n if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {\r\n _lazyTweens.push(tween);\r\n\r\n tween._lazy = [tTime, suppressEvents];\r\n return 1;\r\n }\r\n},\r\n _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {\r\n var parent = _ref.parent;\r\n return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));\r\n},\r\n // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0\r\n_isFromOrFromStart = function _isFromOrFromStart(_ref2) {\r\n var data = _ref2.data;\r\n return data === \"isFromStart\" || data === \"isStart\";\r\n},\r\n _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {\r\n var prevRatio = tween.ratio,\r\n ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,\r\n // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the \"startAt\" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any \"from\" and \"fromTo\" startAt tweens are rendered the first time at a ratio of 1.\r\n repeatDelay = tween._rDelay,\r\n tTime = 0,\r\n pt,\r\n iteration,\r\n prevIteration;\r\n\r\n if (repeatDelay && tween._repeat) {\r\n // in case there's a zero-duration tween that has a repeat with a repeatDelay\r\n tTime = _clamp(0, tween._tDur, totalTime);\r\n iteration = _animationCycle(tTime, repeatDelay);\r\n tween._yoyo && iteration & 1 && (ratio = 1 - ratio);\r\n\r\n if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {\r\n // if iteration changed\r\n prevRatio = 1 - ratio;\r\n tween.vars.repeatRefresh && tween._initted && tween.invalidate();\r\n }\r\n }\r\n\r\n if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {\r\n if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {\r\n // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\r\n return;\r\n }\r\n\r\n prevIteration = tween._zTime;\r\n tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\r\n\r\n suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates.\r\n\r\n tween.ratio = ratio;\r\n tween._from && (ratio = 1 - ratio);\r\n tween._time = 0;\r\n tween._tTime = tTime;\r\n pt = tween._pt;\r\n\r\n while (pt) {\r\n pt.r(ratio, pt.d);\r\n pt = pt._next;\r\n }\r\n\r\n totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);\r\n tween._onUpdate && !suppressEvents && _callback(tween, \"onUpdate\");\r\n tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, \"onRepeat\");\r\n\r\n if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {\r\n ratio && _removeFromParent(tween, 1);\r\n\r\n if (!suppressEvents && !_reverting) {\r\n _callback(tween, ratio ? \"onComplete\" : \"onReverseComplete\", true);\r\n\r\n tween._prom && tween._prom();\r\n }\r\n }\r\n } else if (!tween._zTime) {\r\n tween._zTime = totalTime;\r\n }\r\n},\r\n _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {\r\n var child;\r\n\r\n if (time > prevTime) {\r\n child = animation._first;\r\n\r\n while (child && child._start <= time) {\r\n if (child.data === \"isPause\" && child._start > prevTime) {\r\n return child;\r\n }\r\n\r\n child = child._next;\r\n }\r\n } else {\r\n child = animation._last;\r\n\r\n while (child && child._start >= time) {\r\n if (child.data === \"isPause\" && child._start < prevTime) {\r\n return child;\r\n }\r\n\r\n child = child._prev;\r\n }\r\n }\r\n},\r\n _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {\r\n var repeat = animation._repeat,\r\n dur = _roundPrecise(duration) || 0,\r\n totalProgress = animation._tTime / animation._tDur;\r\n totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);\r\n animation._dur = dur;\r\n animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);\r\n totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);\r\n animation.parent && _setEnd(animation);\r\n skipUncache || _uncache(animation.parent, animation);\r\n return animation;\r\n},\r\n _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {\r\n return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);\r\n},\r\n _zeroPosition = {\r\n _start: 0,\r\n endTime: _emptyFunc,\r\n totalDuration: _emptyFunc\r\n},\r\n _parsePosition = function _parsePosition(animation, position, percentAnimation) {\r\n var labels = animation.labels,\r\n recent = animation._recent || _zeroPosition,\r\n clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,\r\n //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\r\n i,\r\n offset,\r\n isPercent;\r\n\r\n if (_isString(position) && (isNaN(position) || position in labels)) {\r\n //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\r\n offset = position.charAt(0);\r\n isPercent = position.substr(-1) === \"%\";\r\n i = position.indexOf(\"=\");\r\n\r\n if (offset === \"<\" || offset === \">\") {\r\n i >= 0 && (position = position.replace(/=/, \"\"));\r\n return (offset === \"<\" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);\r\n }\r\n\r\n if (i < 0) {\r\n position in labels || (labels[position] = clippedDuration);\r\n return labels[position];\r\n }\r\n\r\n offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));\r\n\r\n if (isPercent && percentAnimation) {\r\n offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();\r\n }\r\n\r\n return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;\r\n }\r\n\r\n return position == null ? clippedDuration : +position;\r\n},\r\n _createTweenType = function _createTweenType(type, params, timeline) {\r\n var isLegacy = _isNumber(params[1]),\r\n varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),\r\n vars = params[varsIndex],\r\n irVars,\r\n parent;\r\n\r\n isLegacy && (vars.duration = params[1]);\r\n vars.parent = timeline;\r\n\r\n if (type) {\r\n irVars = vars;\r\n parent = timeline;\r\n\r\n while (parent && !(\"immediateRender\" in irVars)) {\r\n // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed.\r\n irVars = parent.vars.defaults || {};\r\n parent = _isNotFalse(parent.vars.inherit) && parent.parent;\r\n }\r\n\r\n vars.immediateRender = _isNotFalse(irVars.immediateRender);\r\n type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // \"from\" vars\r\n }\r\n\r\n return new Tween(params[0], vars, params[varsIndex + 1]);\r\n},\r\n _conditionalReturn = function _conditionalReturn(value, func) {\r\n return value || value === 0 ? func(value) : func;\r\n},\r\n _clamp = function _clamp(min, max, value) {\r\n return value < min ? min : value > max ? max : value;\r\n},\r\n getUnit = function getUnit(value, v) {\r\n return !_isString(value) || !(v = _unitExp.exec(value)) ? \"\" : v[1];\r\n},\r\n // note: protect against padded numbers as strings, like \"100.100\". That shouldn't return \"00\" as the unit. If it's numeric, return no unit.\r\nclamp = function clamp(min, max, value) {\r\n return _conditionalReturn(value, function (v) {\r\n return _clamp(min, max, v);\r\n });\r\n},\r\n _slice = [].slice,\r\n _isArrayLike = function _isArrayLike(value, nonEmpty) {\r\n return value && _isObject(value) && \"length\" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;\r\n},\r\n _flatten = function _flatten(ar, leaveStrings, accumulator) {\r\n if (accumulator === void 0) {\r\n accumulator = [];\r\n }\r\n\r\n return ar.forEach(function (value) {\r\n var _accumulator;\r\n\r\n return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);\r\n }) || accumulator;\r\n},\r\n //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects.\r\ntoArray = function toArray(value, scope, leaveStrings) {\r\n return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];\r\n},\r\n selector = function selector(value) {\r\n value = toArray(value)[0] || _warn(\"Invalid scope\") || {};\r\n return function (v) {\r\n var el = value.current || value.nativeElement || value;\r\n return toArray(v, el.querySelectorAll ? el : el === value ? _warn(\"Invalid scope\") || _doc.createElement(\"div\") : value);\r\n };\r\n},\r\n shuffle = function shuffle(a) {\r\n return a.sort(function () {\r\n return .5 - Math.random();\r\n });\r\n},\r\n // alternative that's a bit faster and more reliably diverse but bigger: for (let j, v, i = a.length; i; j = (Math.random() * i) | 0, v = a[--i], a[i] = a[j], a[j] = v); return a;\r\n//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\r\ndistribute = function distribute(v) {\r\n if (_isFunction(v)) {\r\n return v;\r\n }\r\n\r\n var vars = _isObject(v) ? v : {\r\n each: v\r\n },\r\n //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \"amount\" that's chunked out among them all.\r\n ease = _parseEase(vars.ease),\r\n from = vars.from || 0,\r\n base = parseFloat(vars.base) || 0,\r\n cache = {},\r\n isDecimal = from > 0 && from < 1,\r\n ratios = isNaN(from) || isDecimal,\r\n axis = vars.axis,\r\n ratioX = from,\r\n ratioY = from;\r\n\r\n if (_isString(from)) {\r\n ratioX = ratioY = {\r\n center: .5,\r\n edges: .5,\r\n end: 1\r\n }[from] || 0;\r\n } else if (!isDecimal && ratios) {\r\n ratioX = from[0];\r\n ratioY = from[1];\r\n }\r\n\r\n return function (i, target, a) {\r\n var l = (a || vars).length,\r\n distances = cache[l],\r\n originX,\r\n originY,\r\n x,\r\n y,\r\n d,\r\n j,\r\n max,\r\n min,\r\n wrapAt;\r\n\r\n if (!distances) {\r\n wrapAt = vars.grid === \"auto\" ? 0 : (vars.grid || [1, _bigNum])[1];\r\n\r\n if (!wrapAt) {\r\n max = -_bigNum;\r\n\r\n while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}\r\n\r\n wrapAt < l && wrapAt--;\r\n }\r\n\r\n distances = cache[l] = [];\r\n originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;\r\n originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;\r\n max = 0;\r\n min = _bigNum;\r\n\r\n for (j = 0; j < l; j++) {\r\n x = j % wrapAt - originX;\r\n y = originY - (j / wrapAt | 0);\r\n distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === \"y\" ? y : x);\r\n d > max && (max = d);\r\n d < min && (min = d);\r\n }\r\n\r\n from === \"random\" && shuffle(distances);\r\n distances.max = max - min;\r\n distances.min = min;\r\n distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === \"y\" ? l / wrapAt : wrapAt) || 0) * (from === \"edges\" ? -1 : 1);\r\n distances.b = l < 0 ? base - l : base;\r\n distances.u = getUnit(vars.amount || vars.each) || 0; //unit\r\n\r\n ease = ease && l < 0 ? _invertEase(ease) : ease;\r\n }\r\n\r\n l = (distances[i] - distances.min) / distances.max || 0;\r\n return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors\r\n };\r\n},\r\n _roundModifier = function _roundModifier(v) {\r\n //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\r\n var p = Math.pow(10, ((v + \"\").split(\".\")[1] || \"\").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed())\r\n\r\n return function (raw) {\r\n var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);\r\n\r\n return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151!\r\n };\r\n},\r\n snap = function snap(snapTo, value) {\r\n var isArray = _isArray(snapTo),\r\n radius,\r\n is2D;\r\n\r\n if (!isArray && _isObject(snapTo)) {\r\n radius = isArray = snapTo.radius || _bigNum;\r\n\r\n if (snapTo.values) {\r\n snapTo = toArray(snapTo.values);\r\n\r\n if (is2D = !_isNumber(snapTo[0])) {\r\n radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop.\r\n }\r\n } else {\r\n snapTo = _roundModifier(snapTo.increment);\r\n }\r\n }\r\n\r\n return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {\r\n is2D = snapTo(raw);\r\n return Math.abs(is2D - raw) <= radius ? is2D : raw;\r\n } : function (raw) {\r\n var x = parseFloat(is2D ? raw.x : raw),\r\n y = parseFloat(is2D ? raw.y : 0),\r\n min = _bigNum,\r\n closest = 0,\r\n i = snapTo.length,\r\n dx,\r\n dy;\r\n\r\n while (i--) {\r\n if (is2D) {\r\n dx = snapTo[i].x - x;\r\n dy = snapTo[i].y - y;\r\n dx = dx * dx + dy * dy;\r\n } else {\r\n dx = Math.abs(snapTo[i] - x);\r\n }\r\n\r\n if (dx < min) {\r\n min = dx;\r\n closest = i;\r\n }\r\n }\r\n\r\n closest = !radius || min <= radius ? snapTo[closest] : raw;\r\n return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);\r\n });\r\n},\r\n random = function random(min, max, roundingIncrement, returnFunction) {\r\n return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {\r\n return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + \"\").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;\r\n });\r\n},\r\n pipe = function pipe() {\r\n for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {\r\n functions[_key] = arguments[_key];\r\n }\r\n\r\n return function (value) {\r\n return functions.reduce(function (v, f) {\r\n return f(v);\r\n }, value);\r\n };\r\n},\r\n unitize = function unitize(func, unit) {\r\n return function (value) {\r\n return func(parseFloat(value)) + (unit || getUnit(value));\r\n };\r\n},\r\n normalize = function normalize(min, max, value) {\r\n return mapRange(min, max, 0, 1, value);\r\n},\r\n _wrapArray = function _wrapArray(a, wrapper, value) {\r\n return _conditionalReturn(value, function (index) {\r\n return a[~~wrapper(index)];\r\n });\r\n},\r\n wrap = function wrap(min, max, value) {\r\n // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP).\r\n var range = max - min;\r\n return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {\r\n return (range + (value - min) % range) % range + min;\r\n });\r\n},\r\n wrapYoyo = function wrapYoyo(min, max, value) {\r\n var range = max - min,\r\n total = range * 2;\r\n return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {\r\n value = (total + (value - min) % total) % total || 0;\r\n return min + (value > range ? total - value : value);\r\n });\r\n},\r\n _replaceRandom = function _replaceRandom(value) {\r\n //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500])\r\n var prev = 0,\r\n s = \"\",\r\n i,\r\n nums,\r\n end,\r\n isArray;\r\n\r\n while (~(i = value.indexOf(\"random(\", prev))) {\r\n end = value.indexOf(\")\", i);\r\n isArray = value.charAt(i + 7) === \"[\";\r\n nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);\r\n s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);\r\n prev = end + 1;\r\n }\r\n\r\n return s + value.substr(prev, value.length - prev);\r\n},\r\n mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {\r\n var inRange = inMax - inMin,\r\n outRange = outMax - outMin;\r\n return _conditionalReturn(value, function (value) {\r\n return outMin + ((value - inMin) / inRange * outRange || 0);\r\n });\r\n},\r\n interpolate = function interpolate(start, end, progress, mutate) {\r\n var func = isNaN(start + end) ? 0 : function (p) {\r\n return (1 - p) * start + p * end;\r\n };\r\n\r\n if (!func) {\r\n var isString = _isString(start),\r\n master = {},\r\n p,\r\n i,\r\n interpolators,\r\n l,\r\n il;\r\n\r\n progress === true && (mutate = 1) && (progress = null);\r\n\r\n if (isString) {\r\n start = {\r\n p: start\r\n };\r\n end = {\r\n p: end\r\n };\r\n } else if (_isArray(start) && !_isArray(end)) {\r\n interpolators = [];\r\n l = start.length;\r\n il = l - 2;\r\n\r\n for (i = 1; i < l; i++) {\r\n interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them.\r\n }\r\n\r\n l--;\r\n\r\n func = function func(p) {\r\n p *= l;\r\n var i = Math.min(il, ~~p);\r\n return interpolators[i](p - i);\r\n };\r\n\r\n progress = end;\r\n } else if (!mutate) {\r\n start = _merge(_isArray(start) ? [] : {}, start);\r\n }\r\n\r\n if (!interpolators) {\r\n for (p in end) {\r\n _addPropTween.call(master, start, p, \"get\", end[p]);\r\n }\r\n\r\n func = function func(p) {\r\n return _renderPropTweens(p, master) || (isString ? start.p : start);\r\n };\r\n }\r\n }\r\n\r\n return _conditionalReturn(progress, func);\r\n},\r\n _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {\r\n //used for nextLabel() and previousLabel()\r\n var labels = timeline.labels,\r\n min = _bigNum,\r\n p,\r\n distance,\r\n label;\r\n\r\n for (p in labels) {\r\n distance = labels[p] - fromTime;\r\n\r\n if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {\r\n label = p;\r\n min = distance;\r\n }\r\n }\r\n\r\n return label;\r\n},\r\n _callback = function _callback(animation, type, executeLazyFirst) {\r\n var v = animation.vars,\r\n callback = v[type],\r\n prevContext = _context,\r\n context = animation._ctx,\r\n params,\r\n scope,\r\n result;\r\n\r\n if (!callback) {\r\n return;\r\n }\r\n\r\n params = v[type + \"Params\"];\r\n scope = v.callbackScope || animation;\r\n executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\r\n\r\n context && (_context = context);\r\n result = params ? callback.apply(scope, params) : callback.call(scope);\r\n _context = prevContext;\r\n return result;\r\n},\r\n _interrupt = function _interrupt(animation) {\r\n _removeFromParent(animation);\r\n\r\n animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting);\r\n animation.progress() < 1 && _callback(animation, \"onInterrupt\");\r\n return animation;\r\n},\r\n _quickTween,\r\n _registerPluginQueue = [],\r\n _createPlugin = function _createPlugin(config) {\r\n if (!config) return;\r\n config = !config.name && config[\"default\"] || config; // UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}.\r\n\r\n if (_windowExists() || config.headless) {\r\n // edge case: some build tools may pass in a null/undefined value\r\n var name = config.name,\r\n isFunc = _isFunction(config),\r\n Plugin = name && !isFunc && config.init ? function () {\r\n this._props = [];\r\n } : config,\r\n //in case someone passes in an object that's not a plugin, like CustomEase\r\n instanceDefaults = {\r\n init: _emptyFunc,\r\n render: _renderPropTweens,\r\n add: _addPropTween,\r\n kill: _killPropTweensOf,\r\n modifier: _addPluginModifier,\r\n rawVars: 0\r\n },\r\n statics = {\r\n targetTest: 0,\r\n get: 0,\r\n getSetter: _getSetter,\r\n aliases: {},\r\n register: 0\r\n };\r\n\r\n _wake();\r\n\r\n if (config !== Plugin) {\r\n if (_plugins[name]) {\r\n return;\r\n }\r\n\r\n _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods\r\n\r\n\r\n _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods\r\n\r\n\r\n _plugins[Plugin.prop = name] = Plugin;\r\n\r\n if (config.targetTest) {\r\n _harnessPlugins.push(Plugin);\r\n\r\n _reservedProps[name] = 1;\r\n }\r\n\r\n name = (name === \"css\" ? \"CSS\" : name.charAt(0).toUpperCase() + name.substr(1)) + \"Plugin\"; //for the global name. \"motionPath\" should become MotionPathPlugin\r\n }\r\n\r\n _addGlobal(name, Plugin);\r\n\r\n config.register && config.register(gsap, Plugin, PropTween);\r\n } else {\r\n _registerPluginQueue.push(config);\r\n }\r\n},\r\n\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * COLORS\r\n * --------------------------------------------------------------------------------------\r\n */\r\n_255 = 255,\r\n _colorLookup = {\r\n aqua: [0, _255, _255],\r\n lime: [0, _255, 0],\r\n silver: [192, 192, 192],\r\n black: [0, 0, 0],\r\n maroon: [128, 0, 0],\r\n teal: [0, 128, 128],\r\n blue: [0, 0, _255],\r\n navy: [0, 0, 128],\r\n white: [_255, _255, _255],\r\n olive: [128, 128, 0],\r\n yellow: [_255, _255, 0],\r\n orange: [_255, 165, 0],\r\n gray: [128, 128, 128],\r\n purple: [128, 0, 128],\r\n green: [0, 128, 0],\r\n red: [_255, 0, 0],\r\n pink: [_255, 192, 203],\r\n cyan: [0, _255, _255],\r\n transparent: [_255, _255, _255, 0]\r\n},\r\n // possible future idea to replace the hard-coded color name values - put this in the ticker.wake() where we set the _doc:\r\n// let ctx = _doc.createElement(\"canvas\").getContext(\"2d\");\r\n// _forEachName(\"aqua,lime,silver,black,maroon,teal,blue,navy,white,olive,yellow,orange,gray,purple,green,red,pink,cyan\", color => {ctx.fillStyle = color; _colorLookup[color] = splitColor(ctx.fillStyle)});\r\n_hue = function _hue(h, m1, m2) {\r\n h += h < 0 ? 1 : h > 1 ? -1 : 0;\r\n return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;\r\n},\r\n splitColor = function splitColor(v, toHSL, forceAlpha) {\r\n var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,\r\n r,\r\n g,\r\n b,\r\n h,\r\n s,\r\n l,\r\n max,\r\n min,\r\n d,\r\n wasHSL;\r\n\r\n if (!a) {\r\n if (v.substr(-1) === \",\") {\r\n //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\r\n v = v.substr(0, v.length - 1);\r\n }\r\n\r\n if (_colorLookup[v]) {\r\n a = _colorLookup[v];\r\n } else if (v.charAt(0) === \"#\") {\r\n if (v.length < 6) {\r\n //for shorthand like #9F0 or #9F0F (could have alpha)\r\n r = v.charAt(1);\r\n g = v.charAt(2);\r\n b = v.charAt(3);\r\n v = \"#\" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : \"\");\r\n }\r\n\r\n if (v.length === 9) {\r\n // hex with alpha, like #fd5e53ff\r\n a = parseInt(v.substr(1, 6), 16);\r\n return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];\r\n }\r\n\r\n v = parseInt(v.substr(1), 16);\r\n a = [v >> 16, v >> 8 & _255, v & _255];\r\n } else if (v.substr(0, 3) === \"hsl\") {\r\n a = wasHSL = v.match(_strictNumExp);\r\n\r\n if (!toHSL) {\r\n h = +a[0] % 360 / 360;\r\n s = +a[1] / 100;\r\n l = +a[2] / 100;\r\n g = l <= .5 ? l * (s + 1) : l + s - l * s;\r\n r = l * 2 - g;\r\n a.length > 3 && (a[3] *= 1); //cast as number\r\n\r\n a[0] = _hue(h + 1 / 3, r, g);\r\n a[1] = _hue(h, r, g);\r\n a[2] = _hue(h - 1 / 3, r, g);\r\n } else if (~v.indexOf(\"=\")) {\r\n //if relative values are found, just return the raw strings with the relative prefixes in place.\r\n a = v.match(_numExp);\r\n forceAlpha && a.length < 4 && (a[3] = 1);\r\n return a;\r\n }\r\n } else {\r\n a = v.match(_strictNumExp) || _colorLookup.transparent;\r\n }\r\n\r\n a = a.map(Number);\r\n }\r\n\r\n if (toHSL && !wasHSL) {\r\n r = a[0] / _255;\r\n g = a[1] / _255;\r\n b = a[2] / _255;\r\n max = Math.max(r, g, b);\r\n min = Math.min(r, g, b);\r\n l = (max + min) / 2;\r\n\r\n if (max === min) {\r\n h = s = 0;\r\n } else {\r\n d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\r\n h *= 60;\r\n }\r\n\r\n a[0] = ~~(h + .5);\r\n a[1] = ~~(s * 100 + .5);\r\n a[2] = ~~(l * 100 + .5);\r\n }\r\n\r\n forceAlpha && a.length < 4 && (a[3] = 1);\r\n return a;\r\n},\r\n _colorOrderData = function _colorOrderData(v) {\r\n // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a \"c\" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors()\r\n var values = [],\r\n c = [],\r\n i = -1;\r\n v.split(_colorExp).forEach(function (v) {\r\n var a = v.match(_numWithUnitExp) || [];\r\n values.push.apply(values, a);\r\n c.push(i += a.length + 1);\r\n });\r\n values.c = c;\r\n return values;\r\n},\r\n _formatColors = function _formatColors(s, toHSL, orderMatchData) {\r\n var result = \"\",\r\n colors = (s + result).match(_colorExp),\r\n type = toHSL ? \"hsla(\" : \"rgba(\",\r\n i = 0,\r\n c,\r\n shell,\r\n d,\r\n l;\r\n\r\n if (!colors) {\r\n return s;\r\n }\r\n\r\n colors = colors.map(function (color) {\r\n return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : color.join(\",\")) + \")\";\r\n });\r\n\r\n if (orderMatchData) {\r\n d = _colorOrderData(s);\r\n c = orderMatchData.c;\r\n\r\n if (c.join(result) !== d.c.join(result)) {\r\n shell = s.replace(_colorExp, \"1\").split(_numWithUnitExp);\r\n l = shell.length - 1;\r\n\r\n for (; i < l; i++) {\r\n result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + \"0,0,0,0)\" : (d.length ? d : colors.length ? colors : orderMatchData).shift());\r\n }\r\n }\r\n }\r\n\r\n if (!shell) {\r\n shell = s.split(_colorExp);\r\n l = shell.length - 1;\r\n\r\n for (; i < l; i++) {\r\n result += shell[i] + colors[i];\r\n }\r\n }\r\n\r\n return result + shell[l];\r\n},\r\n _colorExp = function () {\r\n var s = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\b\",\r\n //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.,\r\n p;\r\n\r\n for (p in _colorLookup) {\r\n s += \"|\" + p + \"\\\\b\";\r\n }\r\n\r\n return new RegExp(s + \")\", \"gi\");\r\n}(),\r\n _hslExp = /hsl[a]?\\(/,\r\n _colorStringFilter = function _colorStringFilter(a) {\r\n var combined = a.join(\" \"),\r\n toHSL;\r\n _colorExp.lastIndex = 0;\r\n\r\n if (_colorExp.test(combined)) {\r\n toHSL = _hslExp.test(combined);\r\n a[1] = _formatColors(a[1], toHSL);\r\n a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value.\r\n\r\n return true;\r\n }\r\n},\r\n\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * TICKER\r\n * --------------------------------------------------------------------------------------\r\n */\r\n_tickerActive,\r\n _ticker = function () {\r\n var _getTime = Date.now,\r\n _lagThreshold = 500,\r\n _adjustedLag = 33,\r\n _startTime = _getTime(),\r\n _lastUpdate = _startTime,\r\n _gap = 1000 / 240,\r\n _nextTime = _gap,\r\n _listeners = [],\r\n _id,\r\n _req,\r\n _raf,\r\n _self,\r\n _delta,\r\n _i,\r\n _tick = function _tick(v) {\r\n var elapsed = _getTime() - _lastUpdate,\r\n manual = v === true,\r\n overlap,\r\n dispatch,\r\n time,\r\n frame;\r\n\r\n (elapsed > _lagThreshold || elapsed < 0) && (_startTime += elapsed - _adjustedLag);\r\n _lastUpdate += elapsed;\r\n time = _lastUpdate - _startTime;\r\n overlap = time - _nextTime;\r\n\r\n if (overlap > 0 || manual) {\r\n frame = ++_self.frame;\r\n _delta = time - _self.time * 1000;\r\n _self.time = time = time / 1000;\r\n _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);\r\n dispatch = 1;\r\n }\r\n\r\n manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\r\n\r\n if (dispatch) {\r\n for (_i = 0; _i < _listeners.length; _i++) {\r\n // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop.\r\n _listeners[_i](time, _delta, frame, v);\r\n }\r\n }\r\n };\r\n\r\n _self = {\r\n time: 0,\r\n frame: 0,\r\n tick: function tick() {\r\n _tick(true);\r\n },\r\n deltaRatio: function deltaRatio(fps) {\r\n return _delta / (1000 / (fps || 60));\r\n },\r\n wake: function wake() {\r\n if (_coreReady) {\r\n if (!_coreInitted && _windowExists()) {\r\n _win = _coreInitted = window;\r\n _doc = _win.document || {};\r\n _globals.gsap = gsap;\r\n (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);\r\n\r\n _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});\r\n\r\n _registerPluginQueue.forEach(_createPlugin);\r\n }\r\n\r\n _raf = typeof requestAnimationFrame !== \"undefined\" && requestAnimationFrame;\r\n _id && _self.sleep();\r\n\r\n _req = _raf || function (f) {\r\n return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);\r\n };\r\n\r\n _tickerActive = 1;\r\n\r\n _tick(2);\r\n }\r\n },\r\n sleep: function sleep() {\r\n (_raf ? cancelAnimationFrame : clearTimeout)(_id);\r\n _tickerActive = 0;\r\n _req = _emptyFunc;\r\n },\r\n lagSmoothing: function lagSmoothing(threshold, adjustedLag) {\r\n _lagThreshold = threshold || Infinity; // zero should be interpreted as basically unlimited\r\n\r\n _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);\r\n },\r\n fps: function fps(_fps) {\r\n _gap = 1000 / (_fps || 240);\r\n _nextTime = _self.time * 1000 + _gap;\r\n },\r\n add: function add(callback, once, prioritize) {\r\n var func = once ? function (t, d, f, v) {\r\n callback(t, d, f, v);\r\n\r\n _self.remove(func);\r\n } : callback;\r\n\r\n _self.remove(callback);\r\n\r\n _listeners[prioritize ? \"unshift\" : \"push\"](func);\r\n\r\n _wake();\r\n\r\n return func;\r\n },\r\n remove: function remove(callback, i) {\r\n ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;\r\n },\r\n _listeners: _listeners\r\n };\r\n return _self;\r\n}(),\r\n _wake = function _wake() {\r\n return !_tickerActive && _ticker.wake();\r\n},\r\n //also ensures the core classes are initialized.\r\n\r\n/*\r\n* -------------------------------------------------\r\n* EASING\r\n* -------------------------------------------------\r\n*/\r\n_easeMap = {},\r\n _customEaseExp = /^[\\d.\\-M][\\d.\\-,\\s]/,\r\n _quotesExp = /[\"']/g,\r\n _parseObjectInString = function _parseObjectInString(value) {\r\n //takes a string like \"{wiggles:10, type:anticipate})\" and turns it into a real object. Notice it ends in \")\" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability.\r\n var obj = {},\r\n split = value.substr(1, value.length - 3).split(\":\"),\r\n key = split[0],\r\n i = 1,\r\n l = split.length,\r\n index,\r\n val,\r\n parsedVal;\r\n\r\n for (; i < l; i++) {\r\n val = split[i];\r\n index = i !== l - 1 ? val.lastIndexOf(\",\") : val.length;\r\n parsedVal = val.substr(0, index);\r\n obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, \"\").trim() : +parsedVal;\r\n key = val.substr(index + 1).trim();\r\n }\r\n\r\n return obj;\r\n},\r\n _valueInParentheses = function _valueInParentheses(value) {\r\n var open = value.indexOf(\"(\") + 1,\r\n close = value.indexOf(\")\"),\r\n nested = value.indexOf(\"(\", open);\r\n return value.substring(open, ~nested && nested < close ? value.indexOf(\")\", close + 1) : close);\r\n},\r\n _configEaseFromString = function _configEaseFromString(name) {\r\n //name can be a string like \"elastic.out(1,0.5)\", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE).\r\n var split = (name + \"\").split(\"(\"),\r\n ease = _easeMap[split[0]];\r\n return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf(\"{\") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(\",\").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE(\"\", name) : ease;\r\n},\r\n _invertEase = function _invertEase(ease) {\r\n return function (p) {\r\n return 1 - ease(1 - p);\r\n };\r\n},\r\n // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos.\r\n_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {\r\n var child = timeline._first,\r\n ease;\r\n\r\n while (child) {\r\n if (child instanceof Timeline) {\r\n _propagateYoyoEase(child, isYoyo);\r\n } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {\r\n if (child.timeline) {\r\n _propagateYoyoEase(child.timeline, isYoyo);\r\n } else {\r\n ease = child._ease;\r\n child._ease = child._yEase;\r\n child._yEase = ease;\r\n child._yoyo = isYoyo;\r\n }\r\n }\r\n\r\n child = child._next;\r\n }\r\n},\r\n _parseEase = function _parseEase(ease, defaultEase) {\r\n return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;\r\n},\r\n _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {\r\n if (easeOut === void 0) {\r\n easeOut = function easeOut(p) {\r\n return 1 - easeIn(1 - p);\r\n };\r\n }\r\n\r\n if (easeInOut === void 0) {\r\n easeInOut = function easeInOut(p) {\r\n return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;\r\n };\r\n }\r\n\r\n var ease = {\r\n easeIn: easeIn,\r\n easeOut: easeOut,\r\n easeInOut: easeInOut\r\n },\r\n lowercaseName;\r\n\r\n _forEachName(names, function (name) {\r\n _easeMap[name] = _globals[name] = ease;\r\n _easeMap[lowercaseName = name.toLowerCase()] = easeOut;\r\n\r\n for (var p in ease) {\r\n _easeMap[lowercaseName + (p === \"easeIn\" ? \".in\" : p === \"easeOut\" ? \".out\" : \".inOut\")] = _easeMap[name + \".\" + p] = ease[p];\r\n }\r\n });\r\n\r\n return ease;\r\n},\r\n _easeInOutFromOut = function _easeInOutFromOut(easeOut) {\r\n return function (p) {\r\n return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;\r\n };\r\n},\r\n _configElastic = function _configElastic(type, amplitude, period) {\r\n var p1 = amplitude >= 1 ? amplitude : 1,\r\n //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\r\n p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),\r\n p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),\r\n easeOut = function easeOut(p) {\r\n return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;\r\n },\r\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\r\n return 1 - easeOut(1 - p);\r\n } : _easeInOutFromOut(easeOut);\r\n\r\n p2 = _2PI / p2; //precalculate to optimize\r\n\r\n ease.config = function (amplitude, period) {\r\n return _configElastic(type, amplitude, period);\r\n };\r\n\r\n return ease;\r\n},\r\n _configBack = function _configBack(type, overshoot) {\r\n if (overshoot === void 0) {\r\n overshoot = 1.70158;\r\n }\r\n\r\n var easeOut = function easeOut(p) {\r\n return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;\r\n },\r\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\r\n return 1 - easeOut(1 - p);\r\n } : _easeInOutFromOut(easeOut);\r\n\r\n ease.config = function (overshoot) {\r\n return _configBack(type, overshoot);\r\n };\r\n\r\n return ease;\r\n}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\r\n// _weightedEase = ratio => {\r\n// \tlet y = 0.5 + ratio / 2;\r\n// \treturn p => (2 * (1 - p) * p * y + p * p);\r\n// },\r\n// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\r\n// _weightedEaseStrong = ratio => {\r\n// \tratio = .5 + ratio / 2;\r\n// \tlet o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio),\r\n// \t\tb = ratio - o,\r\n// \t\tc = ratio + o;\r\n// \treturn p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p;\r\n// };\r\n\r\n\r\n_forEachName(\"Linear,Quad,Cubic,Quart,Quint,Strong\", function (name, i) {\r\n var power = i < 5 ? i + 1 : i;\r\n\r\n _insertEase(name + \",Power\" + (power - 1), i ? function (p) {\r\n return Math.pow(p, power);\r\n } : function (p) {\r\n return p;\r\n }, function (p) {\r\n return 1 - Math.pow(1 - p, power);\r\n }, function (p) {\r\n return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;\r\n });\r\n});\r\n\r\n_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;\r\n\r\n_insertEase(\"Elastic\", _configElastic(\"in\"), _configElastic(\"out\"), _configElastic());\r\n\r\n(function (n, c) {\r\n var n1 = 1 / c,\r\n n2 = 2 * n1,\r\n n3 = 2.5 * n1,\r\n easeOut = function easeOut(p) {\r\n return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;\r\n };\r\n\r\n _insertEase(\"Bounce\", function (p) {\r\n return 1 - easeOut(1 - p);\r\n }, easeOut);\r\n})(7.5625, 2.75);\r\n\r\n_insertEase(\"Expo\", function (p) {\r\n return Math.pow(2, 10 * (p - 1)) * p + p * p * p * p * p * p * (1 - p);\r\n}); // previously 2 ** (10 * (p - 1)) but that doesn't end up with the value quite at the right spot so we do a blended ease to ensure it lands where it should perfectly.\r\n\r\n\r\n_insertEase(\"Circ\", function (p) {\r\n return -(_sqrt(1 - p * p) - 1);\r\n});\r\n\r\n_insertEase(\"Sine\", function (p) {\r\n return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;\r\n});\r\n\r\n_insertEase(\"Back\", _configBack(\"in\"), _configBack(\"out\"), _configBack());\r\n\r\n_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {\r\n config: function config(steps, immediateStart) {\r\n if (steps === void 0) {\r\n steps = 1;\r\n }\r\n\r\n var p1 = 1 / steps,\r\n p2 = steps + (immediateStart ? 0 : 1),\r\n p3 = immediateStart ? 1 : 0,\r\n max = 1 - _tinyNum;\r\n return function (p) {\r\n return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;\r\n };\r\n }\r\n};\r\n_defaults.ease = _easeMap[\"quad.out\"];\r\n\r\n_forEachName(\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\", function (name) {\r\n return _callbackNames += name + \",\" + name + \"Params,\";\r\n});\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * CACHE\r\n * --------------------------------------------------------------------------------------\r\n */\r\n\r\n\r\nvar GSCache = function GSCache(target, harness) {\r\n this.id = _gsID++;\r\n target._gsap = this;\r\n this.target = target;\r\n this.harness = harness;\r\n this.get = harness ? harness.get : _getProperty;\r\n this.set = harness ? harness.getSetter : _getSetter;\r\n};\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * ANIMATION\r\n * --------------------------------------------------------------------------------------\r\n */\r\n\r\nvar Animation = /*#__PURE__*/function () {\r\n function Animation(vars) {\r\n this.vars = vars;\r\n this._delay = +vars.delay || 0;\r\n\r\n if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {\r\n // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start.\r\n this._rDelay = vars.repeatDelay || 0;\r\n this._yoyo = !!vars.yoyo || !!vars.yoyoEase;\r\n }\r\n\r\n this._ts = 1;\r\n\r\n _setDuration(this, +vars.duration, 1, 1);\r\n\r\n this.data = vars.data;\r\n\r\n if (_context) {\r\n this._ctx = _context;\r\n\r\n _context.data.push(this);\r\n }\r\n\r\n _tickerActive || _ticker.wake();\r\n }\r\n\r\n var _proto = Animation.prototype;\r\n\r\n _proto.delay = function delay(value) {\r\n if (value || value === 0) {\r\n this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);\r\n this._delay = value;\r\n return this;\r\n }\r\n\r\n return this._delay;\r\n };\r\n\r\n _proto.duration = function duration(value) {\r\n return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;\r\n };\r\n\r\n _proto.totalDuration = function totalDuration(value) {\r\n if (!arguments.length) {\r\n return this._tDur;\r\n }\r\n\r\n this._dirty = 0;\r\n return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));\r\n };\r\n\r\n _proto.totalTime = function totalTime(_totalTime, suppressEvents) {\r\n _wake();\r\n\r\n if (!arguments.length) {\r\n return this._tTime;\r\n }\r\n\r\n var parent = this._dp;\r\n\r\n if (parent && parent.smoothChildTiming && this._ts) {\r\n _alignPlayhead(this, _totalTime);\r\n\r\n !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent.\r\n //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed.\r\n\r\n while (parent && parent.parent) {\r\n if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {\r\n parent.totalTime(parent._tTime, true);\r\n }\r\n\r\n parent = parent.parent;\r\n }\r\n\r\n if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {\r\n //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in.\r\n _addToTimeline(this._dp, this, this._start - this._delay);\r\n }\r\n }\r\n\r\n if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {\r\n // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional)\r\n this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause\r\n //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit)\r\n // this._lock = 1;\r\n\r\n _lazySafeRender(this, _totalTime, suppressEvents); // this._lock = 0;\r\n //}\r\n\r\n }\r\n\r\n return this;\r\n };\r\n\r\n _proto.time = function time(value, suppressEvents) {\r\n return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START!\r\n };\r\n\r\n _proto.totalProgress = function totalProgress(value, suppressEvents) {\r\n return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.rawTime() >= 0 && this._initted ? 1 : 0;\r\n };\r\n\r\n _proto.progress = function progress(value, suppressEvents) {\r\n return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.rawTime() > 0 ? 1 : 0;\r\n };\r\n\r\n _proto.iteration = function iteration(value, suppressEvents) {\r\n var cycleDuration = this.duration() + this._rDelay;\r\n\r\n return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;\r\n } // potential future addition:\r\n // isPlayingBackwards() {\r\n // \tlet animation = this,\r\n // \t\torientation = 1; // 1 = forward, -1 = backward\r\n // \twhile (animation) {\r\n // \t\torientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1;\r\n // \t\tanimation = animation.parent;\r\n // \t}\r\n // \treturn orientation < 0;\r\n // }\r\n ;\r\n\r\n _proto.timeScale = function timeScale(value, suppressEvents) {\r\n if (!arguments.length) {\r\n return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed.\r\n }\r\n\r\n if (this._rts === value) {\r\n return this;\r\n }\r\n\r\n var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation.\r\n // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called.\r\n //(+value < 0 && this._rts >= 0) && _callback(this, \"onReverse\", true);\r\n // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes.\r\n\r\n this._rts = +value || 0;\r\n this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused.\r\n\r\n this.totalTime(_clamp(-Math.abs(this._delay), this.totalDuration(), tTime), suppressEvents !== false);\r\n\r\n _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here.\r\n\r\n\r\n return _recacheAncestors(this);\r\n };\r\n\r\n _proto.paused = function paused(value) {\r\n if (!arguments.length) {\r\n return this._ps;\r\n } // possible future addition - if an animation is removed from its parent and then .restart() or .play() or .resume() is called, perhaps we should force it back into the globalTimeline but be careful because what if it's already at its end? We don't want it to just persist forever and not get released for GC.\r\n // !this.parent && !value && this._tTime < this._tDur && this !== _globalTimeline && _globalTimeline.add(this);\r\n\r\n\r\n if (this._ps !== value) {\r\n this._ps = value;\r\n\r\n if (value) {\r\n this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming.\r\n\r\n this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the \"real\" timeScale as _rts (recorded time scale)\r\n } else {\r\n _wake();\r\n\r\n this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated.\r\n\r\n this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise.\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n _proto.startTime = function startTime(value) {\r\n if (arguments.length) {\r\n this._start = value;\r\n var parent = this.parent || this._dp;\r\n parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);\r\n return this;\r\n }\r\n\r\n return this._start;\r\n };\r\n\r\n _proto.endTime = function endTime(includeRepeats) {\r\n return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);\r\n };\r\n\r\n _proto.rawTime = function rawTime(wrapRepeats) {\r\n var parent = this.parent || this._dp; // _dp = detached parent\r\n\r\n return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);\r\n };\r\n\r\n _proto.revert = function revert(config) {\r\n if (config === void 0) {\r\n config = _revertConfig;\r\n }\r\n\r\n var prevIsReverting = _reverting;\r\n _reverting = config;\r\n\r\n if (_isRevertWorthy(this)) {\r\n this.timeline && this.timeline.revert(config);\r\n this.totalTime(-0.01, config.suppressEvents);\r\n }\r\n\r\n this.data !== \"nested\" && config.kill !== false && this.kill();\r\n _reverting = prevIsReverting;\r\n return this;\r\n };\r\n\r\n _proto.globalTime = function globalTime(rawTime) {\r\n var animation = this,\r\n time = arguments.length ? rawTime : animation.rawTime();\r\n\r\n while (animation) {\r\n time = animation._start + time / (Math.abs(animation._ts) || 1);\r\n animation = animation._dp;\r\n }\r\n\r\n return !this.parent && this._sat ? this._sat.globalTime(rawTime) : time; // the _startAt tweens for .fromTo() and .from() that have immediateRender should always be FIRST in the timeline (important for context.revert()). \"_sat\" stands for _startAtTween, referring to the parent tween that created the _startAt. We must discern if that tween had immediateRender so that we can know whether or not to prioritize it in revert().\r\n };\r\n\r\n _proto.repeat = function repeat(value) {\r\n if (arguments.length) {\r\n this._repeat = value === Infinity ? -2 : value;\r\n return _onUpdateTotalDuration(this);\r\n }\r\n\r\n return this._repeat === -2 ? Infinity : this._repeat;\r\n };\r\n\r\n _proto.repeatDelay = function repeatDelay(value) {\r\n if (arguments.length) {\r\n var time = this._time;\r\n this._rDelay = value;\r\n\r\n _onUpdateTotalDuration(this);\r\n\r\n return time ? this.time(time) : this;\r\n }\r\n\r\n return this._rDelay;\r\n };\r\n\r\n _proto.yoyo = function yoyo(value) {\r\n if (arguments.length) {\r\n this._yoyo = value;\r\n return this;\r\n }\r\n\r\n return this._yoyo;\r\n };\r\n\r\n _proto.seek = function seek(position, suppressEvents) {\r\n return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));\r\n };\r\n\r\n _proto.restart = function restart(includeDelay, suppressEvents) {\r\n this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));\r\n this._dur || (this._zTime = -_tinyNum); // ensures onComplete fires on a zero-duration animation that gets restarted.\r\n\r\n return this;\r\n };\r\n\r\n _proto.play = function play(from, suppressEvents) {\r\n from != null && this.seek(from, suppressEvents);\r\n return this.reversed(false).paused(false);\r\n };\r\n\r\n _proto.reverse = function reverse(from, suppressEvents) {\r\n from != null && this.seek(from || this.totalDuration(), suppressEvents);\r\n return this.reversed(true).paused(false);\r\n };\r\n\r\n _proto.pause = function pause(atTime, suppressEvents) {\r\n atTime != null && this.seek(atTime, suppressEvents);\r\n return this.paused(true);\r\n };\r\n\r\n _proto.resume = function resume() {\r\n return this.paused(false);\r\n };\r\n\r\n _proto.reversed = function reversed(value) {\r\n if (arguments.length) {\r\n !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum.\r\n\r\n return this;\r\n }\r\n\r\n return this._rts < 0;\r\n };\r\n\r\n _proto.invalidate = function invalidate() {\r\n this._initted = this._act = 0;\r\n this._zTime = -_tinyNum;\r\n return this;\r\n };\r\n\r\n _proto.isActive = function isActive() {\r\n var parent = this.parent || this._dp,\r\n start = this._start,\r\n rawTime;\r\n return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);\r\n };\r\n\r\n _proto.eventCallback = function eventCallback(type, callback, params) {\r\n var vars = this.vars;\r\n\r\n if (arguments.length > 1) {\r\n if (!callback) {\r\n delete vars[type];\r\n } else {\r\n vars[type] = callback;\r\n params && (vars[type + \"Params\"] = params);\r\n type === \"onUpdate\" && (this._onUpdate = callback);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n return vars[type];\r\n };\r\n\r\n _proto.then = function then(onFulfilled) {\r\n var self = this;\r\n return new Promise(function (resolve) {\r\n var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,\r\n _resolve = function _resolve() {\r\n var _then = self.then;\r\n self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322)\r\n\r\n _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);\r\n resolve(f);\r\n self.then = _then;\r\n };\r\n\r\n if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {\r\n _resolve();\r\n } else {\r\n self._prom = _resolve;\r\n }\r\n });\r\n };\r\n\r\n _proto.kill = function kill() {\r\n _interrupt(this);\r\n };\r\n\r\n return Animation;\r\n}();\r\n\r\n_setDefaults(Animation.prototype, {\r\n _time: 0,\r\n _start: 0,\r\n _end: 0,\r\n _tTime: 0,\r\n _tDur: 0,\r\n _dirty: 0,\r\n _repeat: 0,\r\n _yoyo: false,\r\n parent: null,\r\n _initted: false,\r\n _rDelay: 0,\r\n _ts: 1,\r\n _dp: 0,\r\n ratio: 0,\r\n _zTime: -_tinyNum,\r\n _prom: 0,\r\n _ps: false,\r\n _rts: 1\r\n});\r\n/*\r\n * -------------------------------------------------\r\n * TIMELINE\r\n * -------------------------------------------------\r\n */\r\n\r\n\r\nvar Timeline = /*#__PURE__*/function (_Animation) {\r\n _inheritsLoose(Timeline, _Animation);\r\n\r\n function Timeline(vars, position) {\r\n var _this;\r\n\r\n if (vars === void 0) {\r\n vars = {};\r\n }\r\n\r\n _this = _Animation.call(this, vars) || this;\r\n _this.labels = {};\r\n _this.smoothChildTiming = !!vars.smoothChildTiming;\r\n _this.autoRemoveChildren = !!vars.autoRemoveChildren;\r\n _this._sort = _isNotFalse(vars.sortChildren);\r\n _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);\r\n vars.reversed && _this.reverse();\r\n vars.paused && _this.paused(true);\r\n vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);\r\n return _this;\r\n }\r\n\r\n var _proto2 = Timeline.prototype;\r\n\r\n _proto2.to = function to(targets, vars, position) {\r\n _createTweenType(0, arguments, this);\r\n\r\n return this;\r\n };\r\n\r\n _proto2.from = function from(targets, vars, position) {\r\n _createTweenType(1, arguments, this);\r\n\r\n return this;\r\n };\r\n\r\n _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {\r\n _createTweenType(2, arguments, this);\r\n\r\n return this;\r\n };\r\n\r\n _proto2.set = function set(targets, vars, position) {\r\n vars.duration = 0;\r\n vars.parent = this;\r\n _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);\r\n vars.immediateRender = !!vars.immediateRender;\r\n new Tween(targets, vars, _parsePosition(this, position), 1);\r\n return this;\r\n };\r\n\r\n _proto2.call = function call(callback, params, position) {\r\n return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);\r\n } //ONLY for backward compatibility! Maybe delete?\r\n ;\r\n\r\n _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\r\n vars.duration = duration;\r\n vars.stagger = vars.stagger || stagger;\r\n vars.onComplete = onCompleteAll;\r\n vars.onCompleteParams = onCompleteAllParams;\r\n vars.parent = this;\r\n new Tween(targets, vars, _parsePosition(this, position));\r\n return this;\r\n };\r\n\r\n _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\r\n vars.runBackwards = 1;\r\n _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);\r\n return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);\r\n };\r\n\r\n _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {\r\n toVars.startAt = fromVars;\r\n _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);\r\n return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);\r\n };\r\n\r\n _proto2.render = function render(totalTime, suppressEvents, force) {\r\n var prevTime = this._time,\r\n tDur = this._dirty ? this.totalDuration() : this._tDur,\r\n dur = this._dur,\r\n tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),\r\n // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example.\r\n crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),\r\n time,\r\n child,\r\n next,\r\n iteration,\r\n cycleDuration,\r\n prevPaused,\r\n pauseTween,\r\n timeScale,\r\n prevStart,\r\n prevIteration,\r\n yoyo,\r\n isYoyo;\r\n this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);\r\n\r\n if (tTime !== this._tTime || force || crossingStart) {\r\n if (prevTime !== this._time && dur) {\r\n //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\r\n tTime += this._time - prevTime;\r\n totalTime += this._time - prevTime;\r\n }\r\n\r\n time = tTime;\r\n prevStart = this._start;\r\n timeScale = this._ts;\r\n prevPaused = !timeScale;\r\n\r\n if (crossingStart) {\r\n dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\r\n\r\n (totalTime || !suppressEvents) && (this._zTime = totalTime);\r\n }\r\n\r\n if (this._repeat) {\r\n //adjust the time for repeats and yoyos\r\n yoyo = this._yoyo;\r\n cycleDuration = dur + this._rDelay;\r\n\r\n if (this._repeat < -1 && totalTime < 0) {\r\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\r\n }\r\n\r\n time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\r\n\r\n if (tTime === tDur) {\r\n // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\r\n iteration = this._repeat;\r\n time = dur;\r\n } else {\r\n prevIteration = _roundPrecise(tTime / cycleDuration); // full decimal version of iterations, not the previous iteration (we're reusing prevIteration variable for efficiency)\r\n\r\n iteration = ~~prevIteration;\r\n\r\n if (iteration && iteration === prevIteration) {\r\n time = dur;\r\n iteration--;\r\n }\r\n\r\n time > dur && (time = dur);\r\n }\r\n\r\n prevIteration = _animationCycle(this._tTime, cycleDuration);\r\n !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://gsap.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005 also, this._tTime - prevIteration * cycleDuration - this._dur <= 0 just checks to make sure it wasn't previously in the \"repeatDelay\" portion\r\n\r\n if (yoyo && iteration & 1) {\r\n time = dur - time;\r\n isYoyo = 1;\r\n }\r\n /*\r\n make sure children at the end/beginning of the timeline are rendered properly. If, for example,\r\n a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\r\n would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\r\n could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\r\n we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\r\n ensure that zero-duration tweens at the very beginning or end of the Timeline work.\r\n */\r\n\r\n\r\n if (iteration !== prevIteration && !this._lock) {\r\n var rewinding = yoyo && prevIteration & 1,\r\n doesWrap = rewinding === (yoyo && iteration & 1);\r\n iteration < prevIteration && (rewinding = !rewinding);\r\n prevTime = rewinding ? 0 : tTime % dur ? dur : tTime; // if the playhead is landing exactly at the end of an iteration, use that totalTime rather than only the duration, otherwise it'll skip the 2nd render since it's effectively at the same time.\r\n\r\n this._lock = 1;\r\n this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;\r\n this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate.\r\n\r\n !suppressEvents && this.parent && _callback(this, \"onRepeat\");\r\n this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);\r\n\r\n if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {\r\n // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well.\r\n return this;\r\n }\r\n\r\n dur = this._dur; // in case the duration changed in the onRepeat\r\n\r\n tDur = this._tDur;\r\n\r\n if (doesWrap) {\r\n this._lock = 2;\r\n prevTime = rewinding ? dur : -0.0001;\r\n this.render(prevTime, true);\r\n this.vars.repeatRefresh && !isYoyo && this.invalidate();\r\n }\r\n\r\n this._lock = 0;\r\n\r\n if (!this._ts && !prevPaused) {\r\n return this;\r\n } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween.\r\n\r\n\r\n _propagateYoyoEase(this, isYoyo);\r\n }\r\n }\r\n\r\n if (this._hasPause && !this._forcing && this._lock < 2) {\r\n pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));\r\n\r\n if (pauseTween) {\r\n tTime -= time - (time = pauseTween._start);\r\n }\r\n }\r\n\r\n this._tTime = tTime;\r\n this._time = time;\r\n this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\r\n\r\n if (!this._initted) {\r\n this._onUpdate = this.vars.onUpdate;\r\n this._initted = 1;\r\n this._zTime = totalTime;\r\n prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}).\r\n }\r\n\r\n if (!prevTime && tTime && !suppressEvents && !prevIteration) {\r\n _callback(this, \"onStart\");\r\n\r\n if (this._tTime !== tTime) {\r\n // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\r\n return this;\r\n }\r\n }\r\n\r\n if (time >= prevTime && totalTime >= 0) {\r\n child = this._first;\r\n\r\n while (child) {\r\n next = child._next;\r\n\r\n if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {\r\n if (child.parent !== this) {\r\n // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\r\n return this.render(totalTime, suppressEvents, force);\r\n }\r\n\r\n child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);\r\n\r\n if (time !== this._time || !this._ts && !prevPaused) {\r\n //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\r\n pauseTween = 0;\r\n next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that the next time render() is called it'll be forced (to render any remaining children)\r\n\r\n break;\r\n }\r\n }\r\n\r\n child = next;\r\n }\r\n } else {\r\n child = this._last;\r\n var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values.\r\n\r\n while (child) {\r\n next = child._prev;\r\n\r\n if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {\r\n if (child.parent !== this) {\r\n // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\r\n return this.render(totalTime, suppressEvents, force);\r\n }\r\n\r\n child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && _isRevertWorthy(child)); // if reverting, we should always force renders of initted tweens (but remember that .fromTo() or .from() may have a _startAt but not _initted yet). If, for example, a .fromTo() tween with a stagger (which creates an internal timeline) gets reverted BEFORE some of its child tweens render for the first time, it may not properly trigger them to revert.\r\n\r\n if (time !== this._time || !this._ts && !prevPaused) {\r\n //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\r\n pauseTween = 0;\r\n next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children)\r\n\r\n break;\r\n }\r\n }\r\n\r\n child = next;\r\n }\r\n }\r\n\r\n if (pauseTween && !suppressEvents) {\r\n this.pause();\r\n pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;\r\n\r\n if (this._ts) {\r\n //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened).\r\n this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift.\r\n\r\n _setEnd(this);\r\n\r\n return this.render(totalTime, suppressEvents, force);\r\n }\r\n }\r\n\r\n this._onUpdate && !suppressEvents && _callback(this, \"onUpdate\", true);\r\n if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {\r\n // remember, a child's callback may alter this timeline's playhead or timeScale which is why we need to add some of these checks.\r\n (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\r\n\r\n if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {\r\n _callback(this, tTime === tDur && totalTime >= 0 ? \"onComplete\" : \"onReverseComplete\", true);\r\n\r\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n _proto2.add = function add(child, position) {\r\n var _this2 = this;\r\n\r\n _isNumber(position) || (position = _parsePosition(this, position, child));\r\n\r\n if (!(child instanceof Animation)) {\r\n if (_isArray(child)) {\r\n child.forEach(function (obj) {\r\n return _this2.add(obj, position);\r\n });\r\n return this;\r\n }\r\n\r\n if (_isString(child)) {\r\n return this.addLabel(child, position);\r\n }\r\n\r\n if (_isFunction(child)) {\r\n child = Tween.delayedCall(0, child);\r\n } else {\r\n return this;\r\n }\r\n }\r\n\r\n return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child!\r\n };\r\n\r\n _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {\r\n if (nested === void 0) {\r\n nested = true;\r\n }\r\n\r\n if (tweens === void 0) {\r\n tweens = true;\r\n }\r\n\r\n if (timelines === void 0) {\r\n timelines = true;\r\n }\r\n\r\n if (ignoreBeforeTime === void 0) {\r\n ignoreBeforeTime = -_bigNum;\r\n }\r\n\r\n var a = [],\r\n child = this._first;\r\n\r\n while (child) {\r\n if (child._start >= ignoreBeforeTime) {\r\n if (child instanceof Tween) {\r\n tweens && a.push(child);\r\n } else {\r\n timelines && a.push(child);\r\n nested && a.push.apply(a, child.getChildren(true, tweens, timelines));\r\n }\r\n }\r\n\r\n child = child._next;\r\n }\r\n\r\n return a;\r\n };\r\n\r\n _proto2.getById = function getById(id) {\r\n var animations = this.getChildren(1, 1, 1),\r\n i = animations.length;\r\n\r\n while (i--) {\r\n if (animations[i].vars.id === id) {\r\n return animations[i];\r\n }\r\n }\r\n };\r\n\r\n _proto2.remove = function remove(child) {\r\n if (_isString(child)) {\r\n return this.removeLabel(child);\r\n }\r\n\r\n if (_isFunction(child)) {\r\n return this.killTweensOf(child);\r\n }\r\n\r\n child.parent === this && _removeLinkedListItem(this, child);\r\n\r\n if (child === this._recent) {\r\n this._recent = this._last;\r\n }\r\n\r\n return _uncache(this);\r\n };\r\n\r\n _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {\r\n if (!arguments.length) {\r\n return this._tTime;\r\n }\r\n\r\n this._forcing = 1;\r\n\r\n if (!this._dp && this._ts) {\r\n //special case for the global timeline (or any other that has no parent or detached parent).\r\n this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));\r\n }\r\n\r\n _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);\r\n\r\n this._forcing = 0;\r\n return this;\r\n };\r\n\r\n _proto2.addLabel = function addLabel(label, position) {\r\n this.labels[label] = _parsePosition(this, position);\r\n return this;\r\n };\r\n\r\n _proto2.removeLabel = function removeLabel(label) {\r\n delete this.labels[label];\r\n return this;\r\n };\r\n\r\n _proto2.addPause = function addPause(position, callback, params) {\r\n var t = Tween.delayedCall(0, callback || _emptyFunc, params);\r\n t.data = \"isPause\";\r\n this._hasPause = 1;\r\n return _addToTimeline(this, t, _parsePosition(this, position));\r\n };\r\n\r\n _proto2.removePause = function removePause(position) {\r\n var child = this._first;\r\n position = _parsePosition(this, position);\r\n\r\n while (child) {\r\n if (child._start === position && child.data === \"isPause\") {\r\n _removeFromParent(child);\r\n }\r\n\r\n child = child._next;\r\n }\r\n };\r\n\r\n _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {\r\n var tweens = this.getTweensOf(targets, onlyActive),\r\n i = tweens.length;\r\n\r\n while (i--) {\r\n _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {\r\n var a = [],\r\n parsedTargets = toArray(targets),\r\n child = this._first,\r\n isGlobalTime = _isNumber(onlyActive),\r\n // a number is interpreted as a global time. If the animation spans\r\n children;\r\n\r\n while (child) {\r\n if (child instanceof Tween) {\r\n if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {\r\n // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted.\r\n a.push(child);\r\n }\r\n } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {\r\n a.push.apply(a, children);\r\n }\r\n\r\n child = child._next;\r\n }\r\n\r\n return a;\r\n } // potential future feature - targets() on timelines\r\n // targets() {\r\n // \tlet result = [];\r\n // \tthis.getChildren(true, true, false).forEach(t => result.push(...t.targets()));\r\n // \treturn result.filter((v, i) => result.indexOf(v) === i);\r\n // }\r\n ;\r\n\r\n _proto2.tweenTo = function tweenTo(position, vars) {\r\n vars = vars || {};\r\n\r\n var tl = this,\r\n endTime = _parsePosition(tl, position),\r\n _vars = vars,\r\n startAt = _vars.startAt,\r\n _onStart = _vars.onStart,\r\n onStartParams = _vars.onStartParams,\r\n immediateRender = _vars.immediateRender,\r\n initted,\r\n tween = Tween.to(tl, _setDefaults({\r\n ease: vars.ease || \"none\",\r\n lazy: false,\r\n immediateRender: false,\r\n time: endTime,\r\n overwrite: \"auto\",\r\n duration: vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,\r\n onStart: function onStart() {\r\n tl.pause();\r\n\r\n if (!initted) {\r\n var duration = vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale());\r\n tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);\r\n initted = 1;\r\n }\r\n\r\n _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it.\r\n }\r\n }, vars));\r\n\r\n return immediateRender ? tween.render(0) : tween;\r\n };\r\n\r\n _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {\r\n return this.tweenTo(toPosition, _setDefaults({\r\n startAt: {\r\n time: _parsePosition(this, fromPosition)\r\n }\r\n }, vars));\r\n };\r\n\r\n _proto2.recent = function recent() {\r\n return this._recent;\r\n };\r\n\r\n _proto2.nextLabel = function nextLabel(afterTime) {\r\n if (afterTime === void 0) {\r\n afterTime = this._time;\r\n }\r\n\r\n return _getLabelInDirection(this, _parsePosition(this, afterTime));\r\n };\r\n\r\n _proto2.previousLabel = function previousLabel(beforeTime) {\r\n if (beforeTime === void 0) {\r\n beforeTime = this._time;\r\n }\r\n\r\n return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);\r\n };\r\n\r\n _proto2.currentLabel = function currentLabel(value) {\r\n return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);\r\n };\r\n\r\n _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {\r\n if (ignoreBeforeTime === void 0) {\r\n ignoreBeforeTime = 0;\r\n }\r\n\r\n var child = this._first,\r\n labels = this.labels,\r\n p;\r\n\r\n while (child) {\r\n if (child._start >= ignoreBeforeTime) {\r\n child._start += amount;\r\n child._end += amount;\r\n }\r\n\r\n child = child._next;\r\n }\r\n\r\n if (adjustLabels) {\r\n for (p in labels) {\r\n if (labels[p] >= ignoreBeforeTime) {\r\n labels[p] += amount;\r\n }\r\n }\r\n }\r\n\r\n return _uncache(this);\r\n };\r\n\r\n _proto2.invalidate = function invalidate(soft) {\r\n var child = this._first;\r\n this._lock = 0;\r\n\r\n while (child) {\r\n child.invalidate(soft);\r\n child = child._next;\r\n }\r\n\r\n return _Animation.prototype.invalidate.call(this, soft);\r\n };\r\n\r\n _proto2.clear = function clear(includeLabels) {\r\n if (includeLabels === void 0) {\r\n includeLabels = true;\r\n }\r\n\r\n var child = this._first,\r\n next;\r\n\r\n while (child) {\r\n next = child._next;\r\n this.remove(child);\r\n child = next;\r\n }\r\n\r\n this._dp && (this._time = this._tTime = this._pTime = 0);\r\n includeLabels && (this.labels = {});\r\n return _uncache(this);\r\n };\r\n\r\n _proto2.totalDuration = function totalDuration(value) {\r\n var max = 0,\r\n self = this,\r\n child = self._last,\r\n prevStart = _bigNum,\r\n prev,\r\n start,\r\n parent;\r\n\r\n if (arguments.length) {\r\n return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));\r\n }\r\n\r\n if (self._dirty) {\r\n parent = self.parent;\r\n\r\n while (child) {\r\n prev = child._prev; //record it here in case the tween changes position in the sequence...\r\n\r\n child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it.\r\n\r\n start = child._start;\r\n\r\n if (start > prevStart && self._sort && child._ts && !self._lock) {\r\n //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\r\n self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add().\r\n\r\n _addToTimeline(self, child, start - child._delay, 1)._lock = 0;\r\n } else {\r\n prevStart = start;\r\n }\r\n\r\n if (start < 0 && child._ts) {\r\n //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\r\n max -= start;\r\n\r\n if (!parent && !self._dp || parent && parent.smoothChildTiming) {\r\n self._start += start / self._ts;\r\n self._time -= start;\r\n self._tTime -= start;\r\n }\r\n\r\n self.shiftChildren(-start, false, -1e999);\r\n prevStart = 0;\r\n }\r\n\r\n child._end > max && child._ts && (max = child._end);\r\n child = prev;\r\n }\r\n\r\n _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);\r\n\r\n self._dirty = 0;\r\n }\r\n\r\n return self._tDur;\r\n };\r\n\r\n Timeline.updateRoot = function updateRoot(time) {\r\n if (_globalTimeline._ts) {\r\n _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));\r\n\r\n _lastRenderedFrame = _ticker.frame;\r\n }\r\n\r\n if (_ticker.frame >= _nextGCFrame) {\r\n _nextGCFrame += _config.autoSleep || 120;\r\n var child = _globalTimeline._first;\r\n if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {\r\n while (child && !child._ts) {\r\n child = child._next;\r\n }\r\n\r\n child || _ticker.sleep();\r\n }\r\n }\r\n };\r\n\r\n return Timeline;\r\n}(Animation);\r\n\r\n_setDefaults(Timeline.prototype, {\r\n _lock: 0,\r\n _hasPause: 0,\r\n _forcing: 0\r\n});\r\n\r\nvar _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {\r\n //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\r\n var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),\r\n index = 0,\r\n matchIndex = 0,\r\n result,\r\n startNums,\r\n color,\r\n endNum,\r\n chunk,\r\n startNum,\r\n hasRandom,\r\n a;\r\n pt.b = start;\r\n pt.e = end;\r\n start += \"\"; //ensure values are strings\r\n\r\n end += \"\";\r\n\r\n if (hasRandom = ~end.indexOf(\"random(\")) {\r\n end = _replaceRandom(end);\r\n }\r\n\r\n if (stringFilter) {\r\n a = [start, end];\r\n stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\r\n\r\n start = a[0];\r\n end = a[1];\r\n }\r\n\r\n startNums = start.match(_complexStringNumExp) || [];\r\n\r\n while (result = _complexStringNumExp.exec(end)) {\r\n endNum = result[0];\r\n chunk = end.substring(index, result.index);\r\n\r\n if (color) {\r\n color = (color + 1) % 5;\r\n } else if (chunk.substr(-5) === \"rgba(\") {\r\n color = 1;\r\n }\r\n\r\n if (endNum !== startNums[matchIndex++]) {\r\n startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\r\n\r\n pt._pt = {\r\n _next: pt._pt,\r\n p: chunk || matchIndex === 1 ? chunk : \",\",\r\n //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\r\n s: startNum,\r\n c: endNum.charAt(1) === \"=\" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,\r\n m: color && color < 4 ? Math.round : 0\r\n };\r\n index = _complexStringNumExp.lastIndex;\r\n }\r\n }\r\n\r\n pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\r\n\r\n pt.fp = funcParam;\r\n\r\n if (_relExp.test(end) || hasRandom) {\r\n pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\r\n }\r\n\r\n this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\r\n\r\n return pt;\r\n},\r\n _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {\r\n _isFunction(end) && (end = end(index || 0, target, targets));\r\n var currentValue = target[prop],\r\n parsedStart = start !== \"get\" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf(\"set\") || !_isFunction(target[\"get\" + prop.substr(3)]) ? prop : \"get\" + prop.substr(3)](funcParam) : target[prop](),\r\n setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,\r\n pt;\r\n\r\n if (_isString(end)) {\r\n if (~end.indexOf(\"random(\")) {\r\n end = _replaceRandom(end);\r\n }\r\n\r\n if (end.charAt(1) === \"=\") {\r\n pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);\r\n\r\n if (pt || pt === 0) {\r\n // to avoid isNaN, like if someone passes in a value like \"!= whatever\"\r\n end = pt;\r\n }\r\n }\r\n }\r\n\r\n if (!optional || parsedStart !== end || _forceAllPropTweens) {\r\n if (!isNaN(parsedStart * end) && end !== \"\") {\r\n // fun fact: any number multiplied by \"\" is evaluated as the number 0!\r\n pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === \"boolean\" ? _renderBoolean : _renderPlain, 0, setter);\r\n funcParam && (pt.fp = funcParam);\r\n modifier && pt.modifier(modifier, this, target);\r\n return this._pt = pt;\r\n }\r\n\r\n !currentValue && !(prop in target) && _missingPlugin(prop, end);\r\n return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);\r\n }\r\n},\r\n //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with \"random()\" in them. It does NOT process relative values.\r\n_processVars = function _processVars(vars, index, target, targets, tween) {\r\n _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));\r\n\r\n if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {\r\n return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;\r\n }\r\n\r\n var copy = {},\r\n p;\r\n\r\n for (p in vars) {\r\n copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);\r\n }\r\n\r\n return copy;\r\n},\r\n _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {\r\n var plugin, pt, ptLookup, i;\r\n\r\n if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {\r\n tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);\r\n\r\n if (tween !== _quickTween) {\r\n ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger.\r\n\r\n i = plugin._props.length;\r\n\r\n while (i--) {\r\n ptLookup[plugin._props[i]] = pt;\r\n }\r\n }\r\n }\r\n\r\n return plugin;\r\n},\r\n _overwritingTween,\r\n //store a reference temporarily so we can avoid overwriting itself.\r\n_forceAllPropTweens,\r\n _initTween = function _initTween(tween, time, tTime) {\r\n var vars = tween.vars,\r\n ease = vars.ease,\r\n startAt = vars.startAt,\r\n immediateRender = vars.immediateRender,\r\n lazy = vars.lazy,\r\n onUpdate = vars.onUpdate,\r\n runBackwards = vars.runBackwards,\r\n yoyoEase = vars.yoyoEase,\r\n keyframes = vars.keyframes,\r\n autoRevert = vars.autoRevert,\r\n dur = tween._dur,\r\n prevStartAt = tween._startAt,\r\n targets = tween._targets,\r\n parent = tween.parent,\r\n fullTargets = parent && parent.data === \"nested\" ? parent.vars.targets : targets,\r\n autoOverwrite = tween._overwrite === \"auto\" && !_suppressOverwrites,\r\n tl = tween.timeline,\r\n cleanVars,\r\n i,\r\n p,\r\n pt,\r\n target,\r\n hasPriority,\r\n gsData,\r\n harness,\r\n plugin,\r\n ptLookup,\r\n index,\r\n harnessVars,\r\n overwritten;\r\n tl && (!keyframes || !ease) && (ease = \"none\");\r\n tween._ease = _parseEase(ease, _defaults.ease);\r\n tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;\r\n\r\n if (yoyoEase && tween._yoyo && !tween._repeat) {\r\n //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases.\r\n yoyoEase = tween._yEase;\r\n tween._yEase = tween._ease;\r\n tween._ease = yoyoEase;\r\n }\r\n\r\n tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens.\r\n\r\n if (!tl || keyframes && !vars.stagger) {\r\n //if there's an internal timeline, skip all the parsing because we passed that task down the chain.\r\n harness = targets[0] ? _getCache(targets[0]).harness : 0;\r\n harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an \"x\" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example.\r\n\r\n cleanVars = _copyExcluding(vars, _reservedProps);\r\n\r\n if (prevStartAt) {\r\n prevStartAt._zTime < 0 && prevStartAt.progress(1); // in case it's a lazy startAt that hasn't rendered yet.\r\n\r\n time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig); // if it's a \"startAt\" (not \"from()\" or runBackwards: true), we only need to do a shallow revert (keep transforms cached in CSSPlugin)\r\n // don't just _removeFromParent(prevStartAt.render(-1, true)) because that'll leave inline styles. We're creating a new _startAt for \"startAt\" tweens that re-capture things to ensure that if the pre-tween values changed since the tween was created, they're recorded.\r\n\r\n prevStartAt._lazy = 0;\r\n }\r\n\r\n if (startAt) {\r\n _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({\r\n data: \"isStart\",\r\n overwrite: false,\r\n parent: parent,\r\n immediateRender: true,\r\n lazy: !prevStartAt && _isNotFalse(lazy),\r\n startAt: null,\r\n delay: 0,\r\n onUpdate: onUpdate && function () {\r\n return _callback(tween, \"onUpdate\");\r\n },\r\n stagger: 0\r\n }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from);\r\n\r\n\r\n tween._startAt._dp = 0; // don't allow it to get put back into root timeline! Like when revert() is called and totalTime() gets set.\r\n\r\n tween._startAt._sat = tween; // used in globalTime(). _sat stands for _startAtTween\r\n\r\n time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill); // rare edge case, like if a render is forced in the negative direction of a non-initted tween.\r\n\r\n if (immediateRender) {\r\n if (dur && time <= 0 && tTime <= 0) {\r\n // check tTime here because in the case of a yoyo tween whose playhead gets pushed to the end like tween.progress(1), we should allow it through so that the onComplete gets fired properly.\r\n time && (tween._zTime = time);\r\n return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\r\n }\r\n }\r\n } else if (runBackwards && dur) {\r\n //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\r\n if (!prevStartAt) {\r\n time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\r\n\r\n p = _setDefaults({\r\n overwrite: false,\r\n data: \"isFromStart\",\r\n //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\r\n lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),\r\n immediateRender: immediateRender,\r\n //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\r\n stagger: 0,\r\n parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(\".class\", {y: gsap.utils.wrap([-100,100]), stagger: 0.5})\r\n\r\n }, cleanVars);\r\n harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}})\r\n\r\n _removeFromParent(tween._startAt = Tween.set(targets, p));\r\n\r\n tween._startAt._dp = 0; // don't allow it to get put back into root timeline!\r\n\r\n tween._startAt._sat = tween; // used in globalTime()\r\n\r\n time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));\r\n tween._zTime = time;\r\n\r\n if (!immediateRender) {\r\n _initTween(tween._startAt, _tinyNum, _tinyNum); //ensures that the initial values are recorded\r\n\r\n } else if (!time) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n tween._pt = tween._ptCache = 0;\r\n lazy = dur && _isNotFalse(lazy) || lazy && !dur;\r\n\r\n for (i = 0; i < targets.length; i++) {\r\n target = targets[i];\r\n gsData = target._gsap || _harness(targets)[i]._gsap;\r\n tween._ptLookup[i] = ptLookup = {};\r\n _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\r\n\r\n index = fullTargets === targets ? i : fullTargets.indexOf(target);\r\n\r\n if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {\r\n tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);\r\n\r\n plugin._props.forEach(function (name) {\r\n ptLookup[name] = pt;\r\n });\r\n\r\n plugin.priority && (hasPriority = 1);\r\n }\r\n\r\n if (!harness || harnessVars) {\r\n for (p in cleanVars) {\r\n if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {\r\n plugin.priority && (hasPriority = 1);\r\n } else {\r\n ptLookup[p] = pt = _addPropTween.call(tween, target, p, \"get\", cleanVars[p], index, fullTargets, 0, vars.stringFilter);\r\n }\r\n }\r\n }\r\n\r\n tween._op && tween._op[i] && tween.kill(target, tween._op[i]);\r\n\r\n if (autoOverwrite && tween._pt) {\r\n _overwritingTween = tween;\r\n\r\n _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!!\r\n\r\n\r\n overwritten = !tween.parent;\r\n _overwritingTween = 0;\r\n }\r\n\r\n tween._pt && lazy && (_lazyLookup[gsData.id] = 1);\r\n }\r\n\r\n hasPriority && _sortPropTweensByPriority(tween);\r\n tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down.\r\n }\r\n\r\n tween._onUpdate = onUpdate;\r\n tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick.\r\n\r\n keyframes && time <= 0 && tl.render(_bigNum, true, true); // if there's a 0% keyframe, it'll render in the \"before\" state for any staggered/delayed animations thus when the following tween initializes, it'll use the \"before\" state instead of the \"after\" state as the initial values.\r\n},\r\n _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time, skipRecursion) {\r\n var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property],\r\n pt,\r\n rootPT,\r\n lookup,\r\n i;\r\n\r\n if (!ptCache) {\r\n ptCache = tween._ptCache[property] = [];\r\n lookup = tween._ptLookup;\r\n i = tween._targets.length;\r\n\r\n while (i--) {\r\n pt = lookup[i][property];\r\n\r\n if (pt && pt.d && pt.d._pt) {\r\n // it's a plugin, so find the nested PropTween\r\n pt = pt.d._pt;\r\n\r\n while (pt && pt.p !== property && pt.fp !== property) {\r\n // \"fp\" is functionParam for things like setting CSS variables which require .setProperty(\"--var-name\", value)\r\n pt = pt._next;\r\n }\r\n }\r\n\r\n if (!pt) {\r\n // there is no PropTween associated with that property, so we must FORCE one to be created and ditch out of this\r\n // if the tween has other properties that already rendered at new positions, we'd normally have to rewind to put them back like tween.render(0, true) before forcing an _initTween(), but that can create another edge case like tweening a timeline's progress would trigger onUpdates to fire which could move other things around. It's better to just inform users that .resetTo() should ONLY be used for tweens that already have that property. For example, you can't gsap.to(...{ y: 0 }) and then tween.restTo(\"x\", 200) for example.\r\n _forceAllPropTweens = 1; // otherwise, when we _addPropTween() and it finds no change between the start and end values, it skips creating a PropTween (for efficiency...why tween when there's no difference?) but in this case we NEED that PropTween created so we can edit it.\r\n\r\n tween.vars[property] = \"+=0\";\r\n\r\n _initTween(tween, time);\r\n\r\n _forceAllPropTweens = 0;\r\n return skipRecursion ? _warn(property + \" not eligible for reset\") : 1; // if someone tries to do a quickTo() on a special property like borderRadius which must get split into 4 different properties, that's not eligible for .resetTo().\r\n }\r\n\r\n ptCache.push(pt);\r\n }\r\n }\r\n\r\n i = ptCache.length;\r\n\r\n while (i--) {\r\n rootPT = ptCache[i];\r\n pt = rootPT._pt || rootPT; // complex values may have nested PropTweens. We only accommodate the FIRST value.\r\n\r\n pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;\r\n pt.c = value - pt.s;\r\n rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e)); // mainly for CSSPlugin (end value)\r\n\r\n rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b)); // (beginning value)\r\n }\r\n},\r\n _addAliasesToVars = function _addAliasesToVars(targets, vars) {\r\n var harness = targets[0] ? _getCache(targets[0]).harness : 0,\r\n propertyAliases = harness && harness.aliases,\r\n copy,\r\n p,\r\n i,\r\n aliases;\r\n\r\n if (!propertyAliases) {\r\n return vars;\r\n }\r\n\r\n copy = _merge({}, vars);\r\n\r\n for (p in propertyAliases) {\r\n if (p in copy) {\r\n aliases = propertyAliases[p].split(\",\");\r\n i = aliases.length;\r\n\r\n while (i--) {\r\n copy[aliases[i]] = copy[p];\r\n }\r\n }\r\n }\r\n\r\n return copy;\r\n},\r\n // parses multiple formats, like {\"0%\": {x: 100}, {\"50%\": {x: -20}} and { x: {\"0%\": 100, \"50%\": -20} }, and an \"ease\" can be set on any object. We populate an \"allProps\" object with an Array for each property, like {x: [{}, {}], y:[{}, {}]} with data for each property tween. The objects have a \"t\" (time), \"v\", (value), and \"e\" (ease) property. This allows us to piece together a timeline later.\r\n_parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {\r\n var ease = obj.ease || easeEach || \"power1.inOut\",\r\n p,\r\n a;\r\n\r\n if (_isArray(obj)) {\r\n a = allProps[prop] || (allProps[prop] = []); // t = time (out of 100), v = value, e = ease\r\n\r\n obj.forEach(function (value, i) {\r\n return a.push({\r\n t: i / (obj.length - 1) * 100,\r\n v: value,\r\n e: ease\r\n });\r\n });\r\n } else {\r\n for (p in obj) {\r\n a = allProps[p] || (allProps[p] = []);\r\n p === \"ease\" || a.push({\r\n t: parseFloat(prop),\r\n v: obj[p],\r\n e: ease\r\n });\r\n }\r\n }\r\n},\r\n _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {\r\n return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf(\"random(\") ? _replaceRandom(value) : value;\r\n},\r\n _staggerTweenProps = _callbackNames + \"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert\",\r\n _staggerPropsToSkip = {};\r\n\r\n_forEachName(_staggerTweenProps + \",id,stagger,delay,duration,paused,scrollTrigger\", function (name) {\r\n return _staggerPropsToSkip[name] = 1;\r\n});\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * TWEEN\r\n * --------------------------------------------------------------------------------------\r\n */\r\n\r\n\r\nvar Tween = /*#__PURE__*/function (_Animation2) {\r\n _inheritsLoose(Tween, _Animation2);\r\n\r\n function Tween(targets, vars, position, skipInherit) {\r\n var _this3;\r\n\r\n if (typeof vars === \"number\") {\r\n position.duration = vars;\r\n vars = position;\r\n position = null;\r\n }\r\n\r\n _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;\r\n var _this3$vars = _this3.vars,\r\n duration = _this3$vars.duration,\r\n delay = _this3$vars.delay,\r\n immediateRender = _this3$vars.immediateRender,\r\n stagger = _this3$vars.stagger,\r\n overwrite = _this3$vars.overwrite,\r\n keyframes = _this3$vars.keyframes,\r\n defaults = _this3$vars.defaults,\r\n scrollTrigger = _this3$vars.scrollTrigger,\r\n yoyoEase = _this3$vars.yoyoEase,\r\n parent = vars.parent || _globalTimeline,\r\n parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : \"length\" in vars) ? [targets] : toArray(targets),\r\n tl,\r\n i,\r\n copy,\r\n l,\r\n p,\r\n curTarget,\r\n staggerFunc,\r\n staggerVarsToMerge;\r\n _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn(\"GSAP target \" + targets + \" not found. https://gsap.com\", !_config.nullTargetWarn) || [];\r\n _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property\r\n\r\n _this3._overwrite = overwrite;\r\n\r\n if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\r\n vars = _this3.vars;\r\n tl = _this3.timeline = new Timeline({\r\n data: \"nested\",\r\n defaults: defaults || {},\r\n targets: parent && parent.data === \"nested\" ? parent.vars.targets : parsedTargets\r\n }); // we need to store the targets because for staggers and keyframes, we end up creating an individual tween for each but function-based values need to know the index and the whole Array of targets.\r\n\r\n tl.kill();\r\n tl.parent = tl._dp = _assertThisInitialized(_this3);\r\n tl._start = 0;\r\n\r\n if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\r\n l = parsedTargets.length;\r\n staggerFunc = stagger && distribute(stagger);\r\n\r\n if (_isObject(stagger)) {\r\n //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween.\r\n for (p in stagger) {\r\n if (~_staggerTweenProps.indexOf(p)) {\r\n staggerVarsToMerge || (staggerVarsToMerge = {});\r\n staggerVarsToMerge[p] = stagger[p];\r\n }\r\n }\r\n }\r\n\r\n for (i = 0; i < l; i++) {\r\n copy = _copyExcluding(vars, _staggerPropsToSkip);\r\n copy.stagger = 0;\r\n yoyoEase && (copy.yoyoEase = yoyoEase);\r\n staggerVarsToMerge && _merge(copy, staggerVarsToMerge);\r\n curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0.\r\n\r\n copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);\r\n copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;\r\n\r\n if (!stagger && l === 1 && copy.delay) {\r\n // if someone does delay:\"random(1, 5)\", repeat:-1, for example, the delay shouldn't be inside the repeat.\r\n _this3._delay = delay = copy.delay;\r\n _this3._start += delay;\r\n copy.delay = 0;\r\n }\r\n\r\n tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);\r\n tl._ease = _easeMap.none;\r\n }\r\n\r\n tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally!\r\n } else if (keyframes) {\r\n _inheritDefaults(_setDefaults(tl.vars.defaults, {\r\n ease: \"none\"\r\n }));\r\n\r\n tl._ease = _parseEase(keyframes.ease || vars.ease || \"none\");\r\n var time = 0,\r\n a,\r\n kf,\r\n v;\r\n\r\n if (_isArray(keyframes)) {\r\n keyframes.forEach(function (frame) {\r\n return tl.to(parsedTargets, frame, \">\");\r\n });\r\n tl.duration(); // to ensure tl._dur is cached because we tap into it for performance purposes in the render() method.\r\n } else {\r\n copy = {};\r\n\r\n for (p in keyframes) {\r\n p === \"ease\" || p === \"easeEach\" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);\r\n }\r\n\r\n for (p in copy) {\r\n a = copy[p].sort(function (a, b) {\r\n return a.t - b.t;\r\n });\r\n time = 0;\r\n\r\n for (i = 0; i < a.length; i++) {\r\n kf = a[i];\r\n v = {\r\n ease: kf.e,\r\n duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration\r\n };\r\n v[p] = kf.v;\r\n tl.to(parsedTargets, v, time);\r\n time += v.duration;\r\n }\r\n }\r\n\r\n tl.duration() < duration && tl.to({}, {\r\n duration: duration - tl.duration()\r\n }); // in case keyframes didn't go to 100%\r\n }\r\n }\r\n\r\n duration || _this3.duration(duration = tl.duration());\r\n } else {\r\n _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain)\r\n }\r\n\r\n if (overwrite === true && !_suppressOverwrites) {\r\n _overwritingTween = _assertThisInitialized(_this3);\r\n\r\n _globalTimeline.killTweensOf(parsedTargets);\r\n\r\n _overwritingTween = 0;\r\n }\r\n\r\n _addToTimeline(parent, _assertThisInitialized(_this3), position);\r\n\r\n vars.reversed && _this3.reverse();\r\n vars.paused && _this3.paused(true);\r\n\r\n if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== \"nested\") {\r\n _this3._tTime = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\r\n\r\n _this3.render(Math.max(0, -delay) || 0); //in case delay is negative\r\n\r\n }\r\n\r\n scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);\r\n return _this3;\r\n }\r\n\r\n var _proto3 = Tween.prototype;\r\n\r\n _proto3.render = function render(totalTime, suppressEvents, force) {\r\n var prevTime = this._time,\r\n tDur = this._tDur,\r\n dur = this._dur,\r\n isNegative = totalTime < 0,\r\n tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime,\r\n time,\r\n pt,\r\n iteration,\r\n cycleDuration,\r\n prevIteration,\r\n isYoyo,\r\n ratio,\r\n timeline,\r\n yoyoEase;\r\n\r\n if (!dur) {\r\n _renderZeroDurationTween(this, totalTime, suppressEvents, force);\r\n } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative || this._lazy) {\r\n // this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0)\r\n time = tTime;\r\n timeline = this.timeline;\r\n\r\n if (this._repeat) {\r\n //adjust the time for repeats and yoyos\r\n cycleDuration = dur + this._rDelay;\r\n\r\n if (this._repeat < -1 && isNegative) {\r\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\r\n }\r\n\r\n time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\r\n\r\n if (tTime === tDur) {\r\n // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\r\n iteration = this._repeat;\r\n time = dur;\r\n } else {\r\n prevIteration = _roundPrecise(tTime / cycleDuration); // full decimal version of iterations, not the previous iteration (we're reusing prevIteration variable for efficiency)\r\n\r\n iteration = ~~prevIteration;\r\n\r\n if (iteration && iteration === prevIteration) {\r\n time = dur;\r\n iteration--;\r\n } else if (time > dur) {\r\n time = dur;\r\n }\r\n }\r\n\r\n isYoyo = this._yoyo && iteration & 1;\r\n\r\n if (isYoyo) {\r\n yoyoEase = this._yEase;\r\n time = dur - time;\r\n }\r\n\r\n prevIteration = _animationCycle(this._tTime, cycleDuration);\r\n\r\n if (time === prevTime && !force && this._initted && iteration === prevIteration) {\r\n //could be during the repeatDelay part. No need to render and fire callbacks.\r\n this._tTime = tTime;\r\n return this;\r\n }\r\n\r\n if (iteration !== prevIteration) {\r\n timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality\r\n\r\n if (this.vars.repeatRefresh && !isYoyo && !this._lock && time !== cycleDuration && this._initted) {\r\n // this._time will === cycleDuration when we render at EXACTLY the end of an iteration. Without this condition, it'd often do the repeatRefresh render TWICE (again on the very next tick).\r\n this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick.\r\n\r\n this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;\r\n }\r\n }\r\n }\r\n\r\n if (!this._initted) {\r\n if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {\r\n this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number.\r\n\r\n return this;\r\n }\r\n\r\n if (prevTime !== this._time && !(force && this.vars.repeatRefresh && iteration !== prevIteration)) {\r\n // rare edge case - during initialization, an onUpdate in the _startAt (.fromTo()) might force this tween to render at a different spot in which case we should ditch this render() call so that it doesn't revert the values. But we also don't want to dump if we're doing a repeatRefresh render!\r\n return this;\r\n }\r\n\r\n if (dur !== this._dur) {\r\n // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should.\r\n return this.render(totalTime, suppressEvents, force);\r\n }\r\n }\r\n\r\n this._tTime = tTime;\r\n this._time = time;\r\n\r\n if (!this._act && this._ts) {\r\n this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\r\n\r\n this._lazy = 0;\r\n }\r\n\r\n this.ratio = ratio = (yoyoEase || this._ease)(time / dur);\r\n\r\n if (this._from) {\r\n this.ratio = ratio = 1 - ratio;\r\n }\r\n\r\n if (!prevTime && tTime && !suppressEvents && !prevIteration) {\r\n _callback(this, \"onStart\");\r\n\r\n if (this._tTime !== tTime) {\r\n // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\r\n return this;\r\n }\r\n }\r\n\r\n pt = this._pt;\r\n\r\n while (pt) {\r\n pt.r(ratio, pt.d);\r\n pt = pt._next;\r\n }\r\n\r\n timeline && timeline.render(totalTime < 0 ? totalTime : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);\r\n\r\n if (this._onUpdate && !suppressEvents) {\r\n isNegative && _rewindStartAt(this, totalTime, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\r\n\r\n _callback(this, \"onUpdate\");\r\n }\r\n\r\n this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, \"onRepeat\");\r\n\r\n if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {\r\n isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);\r\n (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\r\n\r\n if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {\r\n // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play();\r\n _callback(this, tTime === tDur ? \"onComplete\" : \"onReverseComplete\", true);\r\n\r\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n _proto3.targets = function targets() {\r\n return this._targets;\r\n };\r\n\r\n _proto3.invalidate = function invalidate(soft) {\r\n // \"soft\" gives us a way to clear out everything EXCEPT the recorded pre-\"from\" portion of from() tweens. Otherwise, for example, if you tween.progress(1).render(0, true true).invalidate(), the \"from\" values would persist and then on the next render, the from() tweens would initialize and the current value would match the \"from\" values, thus animate from the same value to the same value (no animation). We tap into this in ScrollTrigger's refresh() where we must push a tween to completion and then back again but honor its init state in case the tween is dependent on another tween further up on the page.\r\n (!soft || !this.vars.runBackwards) && (this._startAt = 0);\r\n this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;\r\n this._ptLookup = [];\r\n this.timeline && this.timeline.invalidate(soft);\r\n return _Animation2.prototype.invalidate.call(this, soft);\r\n };\r\n\r\n _proto3.resetTo = function resetTo(property, value, start, startIsRelative, skipRecursion) {\r\n _tickerActive || _ticker.wake();\r\n this._ts || this.play();\r\n var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts),\r\n ratio;\r\n this._initted || _initTween(this, time);\r\n ratio = this._ease(time / this._dur); // don't just get tween.ratio because it may not have rendered yet.\r\n // possible future addition to allow an object with multiple values to update, like tween.resetTo({x: 100, y: 200}); At this point, it doesn't seem worth the added kb given the fact that most users will likely opt for the convenient gsap.quickTo() way of interacting with this method.\r\n // if (_isObject(property)) { // performance optimization\r\n // \tfor (p in property) {\r\n // \t\tif (_updatePropTweens(this, p, property[p], value ? value[p] : null, start, ratio, time)) {\r\n // \t\t\treturn this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\r\n // \t\t}\r\n // \t}\r\n // } else {\r\n\r\n if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time, skipRecursion)) {\r\n return this.resetTo(property, value, start, startIsRelative, 1); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\r\n } //}\r\n\r\n\r\n _alignPlayhead(this, 0);\r\n\r\n this.parent || _addLinkedListItem(this._dp, this, \"_first\", \"_last\", this._dp._sort ? \"_start\" : 0);\r\n return this.render(0);\r\n };\r\n\r\n _proto3.kill = function kill(targets, vars) {\r\n if (vars === void 0) {\r\n vars = \"all\";\r\n }\r\n\r\n if (!targets && (!vars || vars === \"all\")) {\r\n this._lazy = this._pt = 0;\r\n this.parent ? _interrupt(this) : this.scrollTrigger && this.scrollTrigger.kill(!!_reverting);\r\n return this;\r\n }\r\n\r\n if (this.timeline) {\r\n var tDur = this.timeline.totalDuration();\r\n this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt.\r\n\r\n this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to.\r\n\r\n return this;\r\n }\r\n\r\n var parsedTargets = this._targets,\r\n killingTargets = targets ? toArray(targets) : parsedTargets,\r\n propTweenLookup = this._ptLookup,\r\n firstPT = this._pt,\r\n overwrittenProps,\r\n curLookup,\r\n curOverwriteProps,\r\n props,\r\n p,\r\n pt,\r\n i;\r\n\r\n if ((!vars || vars === \"all\") && _arraysMatch(parsedTargets, killingTargets)) {\r\n vars === \"all\" && (this._pt = 0);\r\n return _interrupt(this);\r\n }\r\n\r\n overwrittenProps = this._op = this._op || [];\r\n\r\n if (vars !== \"all\") {\r\n //so people can pass in a comma-delimited list of property names\r\n if (_isString(vars)) {\r\n p = {};\r\n\r\n _forEachName(vars, function (name) {\r\n return p[name] = 1;\r\n });\r\n\r\n vars = p;\r\n }\r\n\r\n vars = _addAliasesToVars(parsedTargets, vars);\r\n }\r\n\r\n i = parsedTargets.length;\r\n\r\n while (i--) {\r\n if (~killingTargets.indexOf(parsedTargets[i])) {\r\n curLookup = propTweenLookup[i];\r\n\r\n if (vars === \"all\") {\r\n overwrittenProps[i] = vars;\r\n props = curLookup;\r\n curOverwriteProps = {};\r\n } else {\r\n curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};\r\n props = vars;\r\n }\r\n\r\n for (p in props) {\r\n pt = curLookup && curLookup[p];\r\n\r\n if (pt) {\r\n if (!(\"kill\" in pt.d) || pt.d.kill(p) === true) {\r\n _removeLinkedListItem(this, pt, \"_pt\");\r\n }\r\n\r\n delete curLookup[p];\r\n }\r\n\r\n if (curOverwriteProps !== \"all\") {\r\n curOverwriteProps[p] = 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\r\n\r\n return this;\r\n };\r\n\r\n Tween.to = function to(targets, vars) {\r\n return new Tween(targets, vars, arguments[2]);\r\n };\r\n\r\n Tween.from = function from(targets, vars) {\r\n return _createTweenType(1, arguments);\r\n };\r\n\r\n Tween.delayedCall = function delayedCall(delay, callback, params, scope) {\r\n return new Tween(callback, 0, {\r\n immediateRender: false,\r\n lazy: false,\r\n overwrite: false,\r\n delay: delay,\r\n onComplete: callback,\r\n onReverseComplete: callback,\r\n onCompleteParams: params,\r\n onReverseCompleteParams: params,\r\n callbackScope: scope\r\n }); // we must use onReverseComplete too for things like timeline.add(() => {...}) which should be triggered in BOTH directions (forward and reverse)\r\n };\r\n\r\n Tween.fromTo = function fromTo(targets, fromVars, toVars) {\r\n return _createTweenType(2, arguments);\r\n };\r\n\r\n Tween.set = function set(targets, vars) {\r\n vars.duration = 0;\r\n vars.repeatDelay || (vars.repeat = 0);\r\n return new Tween(targets, vars);\r\n };\r\n\r\n Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {\r\n return _globalTimeline.killTweensOf(targets, props, onlyActive);\r\n };\r\n\r\n return Tween;\r\n}(Animation);\r\n\r\n_setDefaults(Tween.prototype, {\r\n _targets: [],\r\n _lazy: 0,\r\n _startAt: 0,\r\n _op: 0,\r\n _onInit: 0\r\n}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners)\r\n// _forEachName(\"to,from,fromTo,set,call,add,addLabel,addPause\", name => {\r\n// \tTween.prototype[name] = function() {\r\n// \t\tlet tl = new Timeline();\r\n// \t\treturn _addToTimeline(tl, this)[name].apply(tl, toArray(arguments));\r\n// \t}\r\n// });\r\n//for backward compatibility. Leverage the timeline calls.\r\n\r\n\r\n_forEachName(\"staggerTo,staggerFrom,staggerFromTo\", function (name) {\r\n Tween[name] = function () {\r\n var tl = new Timeline(),\r\n params = _slice.call(arguments, 0);\r\n\r\n params.splice(name === \"staggerFromTo\" ? 5 : 4, 0, 0);\r\n return tl[name].apply(tl, params);\r\n };\r\n});\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * PROPTWEEN\r\n * --------------------------------------------------------------------------------------\r\n */\r\n\r\n\r\nvar _setterPlain = function _setterPlain(target, property, value) {\r\n return target[property] = value;\r\n},\r\n _setterFunc = function _setterFunc(target, property, value) {\r\n return target[property](value);\r\n},\r\n _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {\r\n return target[property](data.fp, value);\r\n},\r\n _setterAttribute = function _setterAttribute(target, property, value) {\r\n return target.setAttribute(property, value);\r\n},\r\n _getSetter = function _getSetter(target, property) {\r\n return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;\r\n},\r\n _renderPlain = function _renderPlain(ratio, data) {\r\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);\r\n},\r\n _renderBoolean = function _renderBoolean(ratio, data) {\r\n return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);\r\n},\r\n _renderComplexString = function _renderComplexString(ratio, data) {\r\n var pt = data._pt,\r\n s = \"\";\r\n\r\n if (!ratio && data.b) {\r\n //b = beginning string\r\n s = data.b;\r\n } else if (ratio === 1 && data.e) {\r\n //e = ending string\r\n s = data.e;\r\n } else {\r\n while (pt) {\r\n s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the \"p\" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors.\r\n\r\n pt = pt._next;\r\n }\r\n\r\n s += data.c; //we use the \"c\" of the PropTween to store the final chunk of non-numeric text.\r\n }\r\n\r\n data.set(data.t, data.p, s, data);\r\n},\r\n _renderPropTweens = function _renderPropTweens(ratio, data) {\r\n var pt = data._pt;\r\n\r\n while (pt) {\r\n pt.r(ratio, pt.d);\r\n pt = pt._next;\r\n }\r\n},\r\n _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {\r\n var pt = this._pt,\r\n next;\r\n\r\n while (pt) {\r\n next = pt._next;\r\n pt.p === property && pt.modifier(modifier, tween, target);\r\n pt = next;\r\n }\r\n},\r\n _killPropTweensOf = function _killPropTweensOf(property) {\r\n var pt = this._pt,\r\n hasNonDependentRemaining,\r\n next;\r\n\r\n while (pt) {\r\n next = pt._next;\r\n\r\n if (pt.p === property && !pt.op || pt.op === property) {\r\n _removeLinkedListItem(this, pt, \"_pt\");\r\n } else if (!pt.dep) {\r\n hasNonDependentRemaining = 1;\r\n }\r\n\r\n pt = next;\r\n }\r\n\r\n return !hasNonDependentRemaining;\r\n},\r\n _setterWithModifier = function _setterWithModifier(target, property, value, data) {\r\n data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);\r\n},\r\n _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {\r\n var pt = parent._pt,\r\n next,\r\n pt2,\r\n first,\r\n last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin)\r\n\r\n while (pt) {\r\n next = pt._next;\r\n pt2 = first;\r\n\r\n while (pt2 && pt2.pr > pt.pr) {\r\n pt2 = pt2._next;\r\n }\r\n\r\n if (pt._prev = pt2 ? pt2._prev : last) {\r\n pt._prev._next = pt;\r\n } else {\r\n first = pt;\r\n }\r\n\r\n if (pt._next = pt2) {\r\n pt2._prev = pt;\r\n } else {\r\n last = pt;\r\n }\r\n\r\n pt = next;\r\n }\r\n\r\n parent._pt = first;\r\n}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added)\r\n\r\n\r\nvar PropTween = /*#__PURE__*/function () {\r\n function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {\r\n this.t = target;\r\n this.s = start;\r\n this.c = change;\r\n this.p = prop;\r\n this.r = renderer || _renderPlain;\r\n this.d = data || this;\r\n this.set = setter || _setterPlain;\r\n this.pr = priority || 0;\r\n this._next = next;\r\n\r\n if (next) {\r\n next._prev = this;\r\n }\r\n }\r\n\r\n var _proto4 = PropTween.prototype;\r\n\r\n _proto4.modifier = function modifier(func, tween, target) {\r\n this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier)\r\n\r\n this.set = _setterWithModifier;\r\n this.m = func;\r\n this.mt = target; //modifier target\r\n\r\n this.tween = tween;\r\n };\r\n\r\n return PropTween;\r\n}(); //Initialization tasks\r\n\r\n_forEachName(_callbackNames + \"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\", function (name) {\r\n return _reservedProps[name] = 1;\r\n});\r\n\r\n_globals.TweenMax = _globals.TweenLite = Tween;\r\n_globals.TimelineLite = _globals.TimelineMax = Timeline;\r\n_globalTimeline = new Timeline({\r\n sortChildren: false,\r\n defaults: _defaults,\r\n autoRemoveChildren: true,\r\n id: \"root\",\r\n smoothChildTiming: true\r\n});\r\n_config.stringFilter = _colorStringFilter;\r\n\r\nvar _media = [],\r\n _listeners = {},\r\n _emptyArray = [],\r\n _lastMediaTime = 0,\r\n _contextID = 0,\r\n _dispatch = function _dispatch(type) {\r\n return (_listeners[type] || _emptyArray).map(function (f) {\r\n return f();\r\n });\r\n},\r\n _onMediaChange = function _onMediaChange() {\r\n var time = Date.now(),\r\n matches = [];\r\n\r\n if (time - _lastMediaTime > 2) {\r\n _dispatch(\"matchMediaInit\");\r\n\r\n _media.forEach(function (c) {\r\n var queries = c.queries,\r\n conditions = c.conditions,\r\n match,\r\n p,\r\n anyMatch,\r\n toggled;\r\n\r\n for (p in queries) {\r\n match = _win.matchMedia(queries[p]).matches; // Firefox doesn't update the \"matches\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\r\n\r\n match && (anyMatch = 1);\r\n\r\n if (match !== conditions[p]) {\r\n conditions[p] = match;\r\n toggled = 1;\r\n }\r\n }\r\n\r\n if (toggled) {\r\n c.revert();\r\n anyMatch && matches.push(c);\r\n }\r\n });\r\n\r\n _dispatch(\"matchMediaRevert\");\r\n\r\n matches.forEach(function (c) {\r\n return c.onMatch(c, function (func) {\r\n return c.add(null, func);\r\n });\r\n });\r\n _lastMediaTime = time;\r\n\r\n _dispatch(\"matchMedia\");\r\n }\r\n};\r\n\r\nvar Context = /*#__PURE__*/function () {\r\n function Context(func, scope) {\r\n this.selector = scope && selector(scope);\r\n this.data = [];\r\n this._r = []; // returned/cleanup functions\r\n\r\n this.isReverted = false;\r\n this.id = _contextID++; // to work around issues that frameworks like Vue cause by making things into Proxies which make it impossible to do something like _media.indexOf(this) because \"this\" would no longer refer to the Context instance itself - it'd refer to a Proxy! We needed a way to identify the context uniquely\r\n\r\n func && this.add(func);\r\n }\r\n\r\n var _proto5 = Context.prototype;\r\n\r\n _proto5.add = function add(name, func, scope) {\r\n // possible future addition if we need the ability to add() an animation to a context and for whatever reason cannot create that animation inside of a context.add(() => {...}) function.\r\n // if (name && _isFunction(name.revert)) {\r\n // \tthis.data.push(name);\r\n // \treturn (name._ctx = this);\r\n // }\r\n if (_isFunction(name)) {\r\n scope = func;\r\n func = name;\r\n name = _isFunction;\r\n }\r\n\r\n var self = this,\r\n f = function f() {\r\n var prev = _context,\r\n prevSelector = self.selector,\r\n result;\r\n prev && prev !== self && prev.data.push(self);\r\n scope && (self.selector = selector(scope));\r\n _context = self;\r\n result = func.apply(self, arguments);\r\n _isFunction(result) && self._r.push(result);\r\n _context = prev;\r\n self.selector = prevSelector;\r\n self.isReverted = false;\r\n return result;\r\n };\r\n\r\n self.last = f;\r\n return name === _isFunction ? f(self, function (func) {\r\n return self.add(null, func);\r\n }) : name ? self[name] = f : f;\r\n };\r\n\r\n _proto5.ignore = function ignore(func) {\r\n var prev = _context;\r\n _context = null;\r\n func(this);\r\n _context = prev;\r\n };\r\n\r\n _proto5.getTweens = function getTweens() {\r\n var a = [];\r\n this.data.forEach(function (e) {\r\n return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === \"nested\") && a.push(e);\r\n });\r\n return a;\r\n };\r\n\r\n _proto5.clear = function clear() {\r\n this._r.length = this.data.length = 0;\r\n };\r\n\r\n _proto5.kill = function kill(revert, matchMedia) {\r\n var _this4 = this;\r\n\r\n if (revert) {\r\n (function () {\r\n var tweens = _this4.getTweens(),\r\n i = _this4.data.length,\r\n t;\r\n\r\n while (i--) {\r\n // Flip plugin tweens are very different in that they should actually be pushed to their end. The plugin replaces the timeline's .revert() method to do exactly that. But we also need to remove any of those nested tweens inside the flip timeline so that they don't get individually reverted.\r\n t = _this4.data[i];\r\n\r\n if (t.data === \"isFlip\") {\r\n t.revert();\r\n t.getChildren(true, true, false).forEach(function (tween) {\r\n return tweens.splice(tweens.indexOf(tween), 1);\r\n });\r\n }\r\n } // save as an object so that we can cache the globalTime for each tween to optimize performance during the sort\r\n\r\n\r\n tweens.map(function (t) {\r\n return {\r\n g: t._dur || t._delay || t._sat && !t._sat.vars.immediateRender ? t.globalTime(0) : -Infinity,\r\n t: t\r\n };\r\n }).sort(function (a, b) {\r\n return b.g - a.g || -Infinity;\r\n }).forEach(function (o) {\r\n return o.t.revert(revert);\r\n }); // note: all of the _startAt tweens should be reverted in reverse order that they were created, and they'll all have the same globalTime (-1) so the \" || -1\" in the sort keeps the order properly.\r\n\r\n i = _this4.data.length;\r\n\r\n while (i--) {\r\n // make sure we loop backwards so that, for example, SplitTexts that were created later on the same element get reverted first\r\n t = _this4.data[i];\r\n\r\n if (t instanceof Timeline) {\r\n if (t.data !== \"nested\") {\r\n t.scrollTrigger && t.scrollTrigger.revert();\r\n t.kill(); // don't revert() the timeline because that's duplicating efforts since we already reverted all the tweens\r\n }\r\n } else {\r\n !(t instanceof Tween) && t.revert && t.revert(revert);\r\n }\r\n }\r\n\r\n _this4._r.forEach(function (f) {\r\n return f(revert, _this4);\r\n });\r\n\r\n _this4.isReverted = true;\r\n })();\r\n } else {\r\n this.data.forEach(function (e) {\r\n return e.kill && e.kill();\r\n });\r\n }\r\n\r\n this.clear();\r\n\r\n if (matchMedia) {\r\n var i = _media.length;\r\n\r\n while (i--) {\r\n // previously, we checked _media.indexOf(this), but some frameworks like Vue enforce Proxy objects that make it impossible to get the proper result that way, so we must use a unique ID number instead.\r\n _media[i].id === this.id && _media.splice(i, 1);\r\n }\r\n }\r\n } // killWithCleanup() {\r\n // \tthis.kill();\r\n // \tthis._r.forEach(f => f(false, this));\r\n // }\r\n ;\r\n\r\n _proto5.revert = function revert(config) {\r\n this.kill(config || {});\r\n };\r\n\r\n return Context;\r\n}();\r\n\r\nvar MatchMedia = /*#__PURE__*/function () {\r\n function MatchMedia(scope) {\r\n this.contexts = [];\r\n this.scope = scope;\r\n _context && _context.data.push(this);\r\n }\r\n\r\n var _proto6 = MatchMedia.prototype;\r\n\r\n _proto6.add = function add(conditions, func, scope) {\r\n _isObject(conditions) || (conditions = {\r\n matches: conditions\r\n });\r\n var context = new Context(0, scope || this.scope),\r\n cond = context.conditions = {},\r\n mq,\r\n p,\r\n active;\r\n _context && !context.selector && (context.selector = _context.selector); // in case a context is created inside a context. Like a gsap.matchMedia() that's inside a scoped gsap.context()\r\n\r\n this.contexts.push(context);\r\n func = context.add(\"onMatch\", func);\r\n context.queries = conditions;\r\n\r\n for (p in conditions) {\r\n if (p === \"all\") {\r\n active = 1;\r\n } else {\r\n mq = _win.matchMedia(conditions[p]);\r\n\r\n if (mq) {\r\n _media.indexOf(context) < 0 && _media.push(context);\r\n (cond[p] = mq.matches) && (active = 1);\r\n mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\"change\", _onMediaChange);\r\n }\r\n }\r\n }\r\n\r\n active && func(context, function (f) {\r\n return context.add(null, f);\r\n });\r\n return this;\r\n } // refresh() {\r\n // \tlet time = _lastMediaTime,\r\n // \t\tmedia = _media;\r\n // \t_lastMediaTime = -1;\r\n // \t_media = this.contexts;\r\n // \t_onMediaChange();\r\n // \t_lastMediaTime = time;\r\n // \t_media = media;\r\n // }\r\n ;\r\n\r\n _proto6.revert = function revert(config) {\r\n this.kill(config || {});\r\n };\r\n\r\n _proto6.kill = function kill(revert) {\r\n this.contexts.forEach(function (c) {\r\n return c.kill(revert, true);\r\n });\r\n };\r\n\r\n return MatchMedia;\r\n}();\r\n/*\r\n * --------------------------------------------------------------------------------------\r\n * GSAP\r\n * --------------------------------------------------------------------------------------\r\n */\r\n\r\n\r\nvar _gsap = {\r\n registerPlugin: function registerPlugin() {\r\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\r\n args[_key2] = arguments[_key2];\r\n }\r\n\r\n args.forEach(function (config) {\r\n return _createPlugin(config);\r\n });\r\n },\r\n timeline: function timeline(vars) {\r\n return new Timeline(vars);\r\n },\r\n getTweensOf: function getTweensOf(targets, onlyActive) {\r\n return _globalTimeline.getTweensOf(targets, onlyActive);\r\n },\r\n getProperty: function getProperty(target, property, unit, uncache) {\r\n _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in\r\n\r\n var getter = _getCache(target || {}).get,\r\n format = unit ? _passThrough : _numericIfPossible;\r\n\r\n unit === \"native\" && (unit = \"\");\r\n return !target ? target : !property ? function (property, unit, uncache) {\r\n return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\r\n } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\r\n },\r\n quickSetter: function quickSetter(target, property, unit) {\r\n target = toArray(target);\r\n\r\n if (target.length > 1) {\r\n var setters = target.map(function (t) {\r\n return gsap.quickSetter(t, property, unit);\r\n }),\r\n l = setters.length;\r\n return function (value) {\r\n var i = l;\r\n\r\n while (i--) {\r\n setters[i](value);\r\n }\r\n };\r\n }\r\n\r\n target = target[0] || {};\r\n\r\n var Plugin = _plugins[property],\r\n cache = _getCache(target),\r\n p = cache.harness && (cache.harness.aliases || {})[property] || property,\r\n // in case it's an alias, like \"rotate\" for \"rotation\".\r\n setter = Plugin ? function (value) {\r\n var p = new Plugin();\r\n _quickTween._pt = 0;\r\n p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);\r\n p.render(1, p);\r\n _quickTween._pt && _renderPropTweens(1, _quickTween);\r\n } : cache.set(target, p);\r\n\r\n return Plugin ? setter : function (value) {\r\n return setter(target, p, unit ? value + unit : value, cache, 1);\r\n };\r\n },\r\n quickTo: function quickTo(target, property, vars) {\r\n var _setDefaults2;\r\n\r\n var tween = gsap.to(target, _setDefaults((_setDefaults2 = {}, _setDefaults2[property] = \"+=0.1\", _setDefaults2.paused = true, _setDefaults2.stagger = 0, _setDefaults2), vars || {})),\r\n func = function func(value, start, startIsRelative) {\r\n return tween.resetTo(property, value, start, startIsRelative);\r\n };\r\n\r\n func.tween = tween;\r\n return func;\r\n },\r\n isTweening: function isTweening(targets) {\r\n return _globalTimeline.getTweensOf(targets, true).length > 0;\r\n },\r\n defaults: function defaults(value) {\r\n value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));\r\n return _mergeDeep(_defaults, value || {});\r\n },\r\n config: function config(value) {\r\n return _mergeDeep(_config, value || {});\r\n },\r\n registerEffect: function registerEffect(_ref3) {\r\n var name = _ref3.name,\r\n effect = _ref3.effect,\r\n plugins = _ref3.plugins,\r\n defaults = _ref3.defaults,\r\n extendTimeline = _ref3.extendTimeline;\r\n (plugins || \"\").split(\",\").forEach(function (pluginName) {\r\n return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + \" effect requires \" + pluginName + \" plugin.\");\r\n });\r\n\r\n _effects[name] = function (targets, vars, tl) {\r\n return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);\r\n };\r\n\r\n if (extendTimeline) {\r\n Timeline.prototype[name] = function (targets, vars, position) {\r\n return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);\r\n };\r\n }\r\n },\r\n registerEase: function registerEase(name, ease) {\r\n _easeMap[name] = _parseEase(ease);\r\n },\r\n parseEase: function parseEase(ease, defaultEase) {\r\n return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;\r\n },\r\n getById: function getById(id) {\r\n return _globalTimeline.getById(id);\r\n },\r\n exportRoot: function exportRoot(vars, includeDelayedCalls) {\r\n if (vars === void 0) {\r\n vars = {};\r\n }\r\n\r\n var tl = new Timeline(vars),\r\n child,\r\n next;\r\n tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);\r\n\r\n _globalTimeline.remove(tl);\r\n\r\n tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself).\r\n\r\n tl._time = tl._tTime = _globalTimeline._time;\r\n child = _globalTimeline._first;\r\n\r\n while (child) {\r\n next = child._next;\r\n\r\n if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {\r\n _addToTimeline(tl, child, child._start - child._delay);\r\n }\r\n\r\n child = next;\r\n }\r\n\r\n _addToTimeline(_globalTimeline, tl, 0);\r\n\r\n return tl;\r\n },\r\n context: function context(func, scope) {\r\n return func ? new Context(func, scope) : _context;\r\n },\r\n matchMedia: function matchMedia(scope) {\r\n return new MatchMedia(scope);\r\n },\r\n matchMediaRefresh: function matchMediaRefresh() {\r\n return _media.forEach(function (c) {\r\n var cond = c.conditions,\r\n found,\r\n p;\r\n\r\n for (p in cond) {\r\n if (cond[p]) {\r\n cond[p] = false;\r\n found = 1;\r\n }\r\n }\r\n\r\n found && c.revert();\r\n }) || _onMediaChange();\r\n },\r\n addEventListener: function addEventListener(type, callback) {\r\n var a = _listeners[type] || (_listeners[type] = []);\r\n ~a.indexOf(callback) || a.push(callback);\r\n },\r\n removeEventListener: function removeEventListener(type, callback) {\r\n var a = _listeners[type],\r\n i = a && a.indexOf(callback);\r\n i >= 0 && a.splice(i, 1);\r\n },\r\n utils: {\r\n wrap: wrap,\r\n wrapYoyo: wrapYoyo,\r\n distribute: distribute,\r\n random: random,\r\n snap: snap,\r\n normalize: normalize,\r\n getUnit: getUnit,\r\n clamp: clamp,\r\n splitColor: splitColor,\r\n toArray: toArray,\r\n selector: selector,\r\n mapRange: mapRange,\r\n pipe: pipe,\r\n unitize: unitize,\r\n interpolate: interpolate,\r\n shuffle: shuffle\r\n },\r\n install: _install,\r\n effects: _effects,\r\n ticker: _ticker,\r\n updateRoot: Timeline.updateRoot,\r\n plugins: _plugins,\r\n globalTimeline: _globalTimeline,\r\n core: {\r\n PropTween: PropTween,\r\n globals: _addGlobal,\r\n Tween: Tween,\r\n Timeline: Timeline,\r\n Animation: Animation,\r\n getCache: _getCache,\r\n _removeLinkedListItem: _removeLinkedListItem,\r\n reverting: function reverting() {\r\n return _reverting;\r\n },\r\n context: function context(toAdd) {\r\n if (toAdd && _context) {\r\n _context.data.push(toAdd);\r\n\r\n toAdd._ctx = _context;\r\n }\r\n\r\n return _context;\r\n },\r\n suppressOverwrites: function suppressOverwrites(value) {\r\n return _suppressOverwrites = value;\r\n }\r\n }\r\n};\r\n\r\n_forEachName(\"to,from,fromTo,delayedCall,set,killTweensOf\", function (name) {\r\n return _gsap[name] = Tween[name];\r\n});\r\n\r\n_ticker.add(Timeline.updateRoot);\r\n\r\n_quickTween = _gsap.to({}, {\r\n duration: 0\r\n}); // ---- EXTRA PLUGINS --------------------------------------------------------\r\n\r\nvar _getPluginPropTween = function _getPluginPropTween(plugin, prop) {\r\n var pt = plugin._pt;\r\n\r\n while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {\r\n pt = pt._next;\r\n }\r\n\r\n return pt;\r\n},\r\n _addModifiers = function _addModifiers(tween, modifiers) {\r\n var targets = tween._targets,\r\n p,\r\n i,\r\n pt;\r\n\r\n for (p in modifiers) {\r\n i = targets.length;\r\n\r\n while (i--) {\r\n pt = tween._ptLookup[i][p];\r\n\r\n if (pt && (pt = pt.d)) {\r\n if (pt._pt) {\r\n // is a plugin\r\n pt = _getPluginPropTween(pt, p);\r\n }\r\n\r\n pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);\r\n }\r\n }\r\n }\r\n},\r\n _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {\r\n return {\r\n name: name,\r\n headless: 1,\r\n rawVars: 1,\r\n //don't pre-process function-based values or \"random()\" strings.\r\n init: function init(target, vars, tween) {\r\n tween._onInit = function (tween) {\r\n var temp, p;\r\n\r\n if (_isString(vars)) {\r\n temp = {};\r\n\r\n _forEachName(vars, function (name) {\r\n return temp[name] = 1;\r\n }); //if the user passes in a comma-delimited list of property names to roundProps, like \"x,y\", we round to whole numbers.\r\n\r\n\r\n vars = temp;\r\n }\r\n\r\n if (modifier) {\r\n temp = {};\r\n\r\n for (p in vars) {\r\n temp[p] = modifier(vars[p]);\r\n }\r\n\r\n vars = temp;\r\n }\r\n\r\n _addModifiers(tween, vars);\r\n };\r\n }\r\n };\r\n}; //register core plugins\r\n\r\n\r\nvar gsap = _gsap.registerPlugin({\r\n name: \"attr\",\r\n init: function init(target, vars, tween, index, targets) {\r\n var p, pt, v;\r\n this.tween = tween;\r\n\r\n for (p in vars) {\r\n v = target.getAttribute(p) || \"\";\r\n pt = this.add(target, \"setAttribute\", (v || 0) + \"\", vars[p], index, targets, 0, 0, p);\r\n pt.op = p;\r\n pt.b = v; // record the beginning value so we can revert()\r\n\r\n this._props.push(p);\r\n }\r\n },\r\n render: function render(ratio, data) {\r\n var pt = data._pt;\r\n\r\n while (pt) {\r\n _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d); // if reverting, go back to the original (pt.b)\r\n\r\n pt = pt._next;\r\n }\r\n }\r\n}, {\r\n name: \"endArray\",\r\n headless: 1,\r\n init: function init(target, value) {\r\n var i = value.length;\r\n\r\n while (i--) {\r\n this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);\r\n }\r\n }\r\n}, _buildModifierPlugin(\"roundProps\", _roundModifier), _buildModifierPlugin(\"modifiers\"), _buildModifierPlugin(\"snap\", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way.\r\n\r\nTween.version = Timeline.version = gsap.version = \"3.13.0\";\r\n_coreReady = 1;\r\n_windowExists() && _wake();\r\nvar Power0 = _easeMap.Power0,\r\n Power1 = _easeMap.Power1,\r\n Power2 = _easeMap.Power2,\r\n Power3 = _easeMap.Power3,\r\n Power4 = _easeMap.Power4,\r\n Linear = _easeMap.Linear,\r\n Quad = _easeMap.Quad,\r\n Cubic = _easeMap.Cubic,\r\n Quart = _easeMap.Quart,\r\n Quint = _easeMap.Quint,\r\n Strong = _easeMap.Strong,\r\n Elastic = _easeMap.Elastic,\r\n Back = _easeMap.Back,\r\n SteppedEase = _easeMap.SteppedEase,\r\n Bounce = _easeMap.Bounce,\r\n Sine = _easeMap.Sine,\r\n Expo = _easeMap.Expo,\r\n Circ = _easeMap.Circ;\r\n\r\n //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it.\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9nc2FwL2dzYXAtY29yZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBd0MsdUJBQXVCLHlGQUF5RjtBQUN4SjtBQUNBLGdEQUFnRCwwREFBMEQsMkNBQTJDO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNELDZGQUE2RjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRCx1QkFBdUI7QUFDdkI7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxpQkFBaUI7QUFDakIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsK0pBQStKO0FBQy9KO0FBQ0E7QUFDQTtBQUNBLFNBQVMsMkNBQTJDO0FBQ3BEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLDJJQUEySTtBQUMzSTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25ELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsNEJBQTRCLDhFQUE4RTtBQUNwSSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkY7QUFDM0YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUMsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdNQUF3TTtBQUN4TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEdBQTBHO0FBQzFHLHNHQUFzRztBQUN0RztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBLGtDQUFrQztBQUNsQyxRQUFRO0FBQ1I7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLCtNQUErTTtBQUMvTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEY7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnS0FBZ0s7QUFDaEs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IscURBQXFELDZOQUE2TixPQUFPLFdBQVcsS0FBSztBQUMvVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVQQUF1UDtBQUN2UDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRjtBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5SEFBeUg7QUFDekg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNElBQTRJO0FBQzVJO0FBQ0EsaUlBQWlJO0FBQ2pJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUcseUVBQXlFLElBQUk7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRztBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENB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QTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx1SUFBdUk7QUFDeEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDbUo7QUFDcUgsQ0FBQztBQUN6USIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZ3NhcC9nc2FwLWNvcmUuanM/NDY2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cclxuXHJcbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxyXG5cclxuLyohXHJcbiAqIEdTQVAgMy4xMy4wXHJcbiAqIGh0dHBzOi8vZ3NhcC5jb21cclxuICpcclxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IDIwMDgtMjAyNSwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dzYXAuY29tL3N0YW5kYXJkLWxpY2Vuc2VcclxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXHJcbiovXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG52YXIgX2NvbmZpZyA9IHtcclxuICBhdXRvU2xlZXA6IDEyMCxcclxuICBmb3JjZTNEOiBcImF1dG9cIixcclxuICBudWxsVGFyZ2V0V2FybjogMSxcclxuICB1bml0czoge1xyXG4gICAgbGluZUhlaWdodDogXCJcIlxyXG4gIH1cclxufSxcclxuICAgIF9kZWZhdWx0cyA9IHtcclxuICBkdXJhdGlvbjogLjUsXHJcbiAgb3ZlcndyaXRlOiBmYWxzZSxcclxuICBkZWxheTogMFxyXG59LFxyXG4gICAgX3N1cHByZXNzT3ZlcndyaXRlcyxcclxuICAgIF9yZXZlcnRpbmcsXHJcbiAgICBfY29udGV4dCxcclxuICAgIF9iaWdOdW0gPSAxZTgsXHJcbiAgICBfdGlueU51bSA9IDEgLyBfYmlnTnVtLFxyXG4gICAgXzJQSSA9IE1hdGguUEkgKiAyLFxyXG4gICAgX0hBTEZfUEkgPSBfMlBJIC8gNCxcclxuICAgIF9nc0lEID0gMCxcclxuICAgIF9zcXJ0ID0gTWF0aC5zcXJ0LFxyXG4gICAgX2NvcyA9IE1hdGguY29zLFxyXG4gICAgX3NpbiA9IE1hdGguc2luLFxyXG4gICAgX2lzU3RyaW5nID0gZnVuY3Rpb24gX2lzU3RyaW5nKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufSxcclxuICAgIF9pc0Z1bmN0aW9uID0gZnVuY3Rpb24gX2lzRnVuY3Rpb24odmFsdWUpIHtcclxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XHJcbn0sXHJcbiAgICBfaXNOdW1iZXIgPSBmdW5jdGlvbiBfaXNOdW1iZXIodmFsdWUpIHtcclxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59LFxyXG4gICAgX2lzVW5kZWZpbmVkID0gZnVuY3Rpb24gX2lzVW5kZWZpbmVkKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcclxufSxcclxuICAgIF9pc09iamVjdCA9IGZ1bmN0aW9uIF9pc09iamVjdCh2YWx1ZSkge1xyXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCI7XHJcbn0sXHJcbiAgICBfaXNOb3RGYWxzZSA9IGZ1bmN0aW9uIF9pc05vdEZhbHNlKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHZhbHVlICE9PSBmYWxzZTtcclxufSxcclxuICAgIF93aW5kb3dFeGlzdHMgPSBmdW5jdGlvbiBfd2luZG93RXhpc3RzKCkge1xyXG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiO1xyXG59LFxyXG4gICAgX2lzRnVuY09yU3RyaW5nID0gZnVuY3Rpb24gX2lzRnVuY09yU3RyaW5nKHZhbHVlKSB7XHJcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHZhbHVlKSB8fCBfaXNTdHJpbmcodmFsdWUpO1xyXG59LFxyXG4gICAgX2lzVHlwZWRBcnJheSA9IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiICYmIEFycmF5QnVmZmVyLmlzVmlldyB8fCBmdW5jdGlvbiAoKSB7fSxcclxuICAgIC8vIG5vdGU6IElFMTAgaGFzIEFycmF5QnVmZmVyLCBidXQgTk9UIEFycmF5QnVmZmVyLmlzVmlldygpLlxyXG5faXNBcnJheSA9IEFycmF5LmlzQXJyYXksXHJcbiAgICBfc3RyaWN0TnVtRXhwID0gLyg/Oi0/XFwuP1xcZHxcXC4pKy9naSxcclxuICAgIC8vb25seSBudW1iZXJzIChpbmNsdWRpbmcgbmVnYXRpdmVzIGFuZCBkZWNpbWFscykgYnV0IE5PVCByZWxhdGl2ZSB2YWx1ZXMuXHJcbl9udW1FeHAgPSAvWy0rPS5dKlxcZCtbLmVcXC0rXSpcXGQqW2VcXC0rXSpcXGQqL2csXHJcbiAgICAvL2ZpbmRzIGFueSBudW1iZXJzLCBpbmNsdWRpbmcgb25lcyB0aGF0IHN0YXJ0IHdpdGggKz0gb3IgLT0sIG5lZ2F0aXZlIG51bWJlcnMsIGFuZCBvbmVzIGluIHNjaWVudGlmaWMgbm90YXRpb24gbGlrZSAxZS04LlxyXG5fbnVtV2l0aFVuaXRFeHAgPSAvWy0rPS5dKlxcZCtbLmUtXSpcXGQqW2EteiVdKi9nLFxyXG4gICAgX2NvbXBsZXhTdHJpbmdOdW1FeHAgPSAvWy0rPS5dKlxcZCtcXC4/XFxkKig/OmUtfGVcXCspP1xcZCovZ2ksXHJcbiAgICAvL2R1cGxpY2F0ZSBzbyB0aGF0IHdoaWxlIHdlJ3JlIGxvb3BpbmcgdGhyb3VnaCBtYXRjaGVzIGZyb20gZXhlYygpLCBpdCBkb2Vzbid0IGNvbnRhbWluYXRlIHRoZSBsYXN0SW5kZXggb2YgX251bUV4cCB3aGljaCB3ZSB1c2UgdG8gc2VhcmNoIGZvciBjb2xvcnMgdG9vLlxyXG5fcmVsRXhwID0gL1srLV09LT9bLlxcZF0rLyxcclxuICAgIF9kZWxpbWl0ZWRWYWx1ZUV4cCA9IC9bXiwnXCJcXFtcXF1cXHNdKy9naSxcclxuICAgIC8vIHByZXZpb3VzbHkgL1sjXFwtKy5dKlxcYlthLXpcXGRcXC09KyUuXSsvZ2kgYnV0IGRpZG4ndCBjYXRjaCBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbl91bml0RXhwID0gL15bK1xcLT1lXFxzXFxkXSpcXGQrWy5cXGRdKihbYS16XSp8JSlcXHMqJC9pLFxyXG4gICAgX2dsb2JhbFRpbWVsaW5lLFxyXG4gICAgX3dpbixcclxuICAgIF9jb3JlSW5pdHRlZCxcclxuICAgIF9kb2MsXHJcbiAgICBfZ2xvYmFscyA9IHt9LFxyXG4gICAgX2luc3RhbGxTY29wZSA9IHt9LFxyXG4gICAgX2NvcmVSZWFkeSxcclxuICAgIF9pbnN0YWxsID0gZnVuY3Rpb24gX2luc3RhbGwoc2NvcGUpIHtcclxuICByZXR1cm4gKF9pbnN0YWxsU2NvcGUgPSBfbWVyZ2Uoc2NvcGUsIF9nbG9iYWxzKSkgJiYgZ3NhcDtcclxufSxcclxuICAgIF9taXNzaW5nUGx1Z2luID0gZnVuY3Rpb24gX21pc3NpbmdQbHVnaW4ocHJvcGVydHksIHZhbHVlKSB7XHJcbiAgcmV0dXJuIGNvbnNvbGUud2FybihcIkludmFsaWQgcHJvcGVydHlcIiwgcHJvcGVydHksIFwic2V0IHRvXCIsIHZhbHVlLCBcIk1pc3NpbmcgcGx1Z2luPyBnc2FwLnJlZ2lzdGVyUGx1Z2luKClcIik7XHJcbn0sXHJcbiAgICBfd2FybiA9IGZ1bmN0aW9uIF93YXJuKG1lc3NhZ2UsIHN1cHByZXNzKSB7XHJcbiAgcmV0dXJuICFzdXBwcmVzcyAmJiBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbn0sXHJcbiAgICBfYWRkR2xvYmFsID0gZnVuY3Rpb24gX2FkZEdsb2JhbChuYW1lLCBvYmopIHtcclxuICByZXR1cm4gbmFtZSAmJiAoX2dsb2JhbHNbbmFtZV0gPSBvYmopICYmIF9pbnN0YWxsU2NvcGUgJiYgKF9pbnN0YWxsU2NvcGVbbmFtZV0gPSBvYmopIHx8IF9nbG9iYWxzO1xyXG59LFxyXG4gICAgX2VtcHR5RnVuYyA9IGZ1bmN0aW9uIF9lbXB0eUZ1bmMoKSB7XHJcbiAgcmV0dXJuIDA7XHJcbn0sXHJcbiAgICBfc3RhcnRBdFJldmVydENvbmZpZyA9IHtcclxuICBzdXBwcmVzc0V2ZW50czogdHJ1ZSxcclxuICBpc1N0YXJ0OiB0cnVlLFxyXG4gIGtpbGw6IGZhbHNlXHJcbn0sXHJcbiAgICBfcmV2ZXJ0Q29uZmlnTm9LaWxsID0ge1xyXG4gIHN1cHByZXNzRXZlbnRzOiB0cnVlLFxyXG4gIGtpbGw6IGZhbHNlXHJcbn0sXHJcbiAgICBfcmV2ZXJ0Q29uZmlnID0ge1xyXG4gIHN1cHByZXNzRXZlbnRzOiB0cnVlXHJcbn0sXHJcbiAgICBfcmVzZXJ2ZWRQcm9wcyA9IHt9LFxyXG4gICAgX2xhenlUd2VlbnMgPSBbXSxcclxuICAgIF9sYXp5TG9va3VwID0ge30sXHJcbiAgICBfbGFzdFJlbmRlcmVkRnJhbWUsXHJcbiAgICBfcGx1Z2lucyA9IHt9LFxyXG4gICAgX2VmZmVjdHMgPSB7fSxcclxuICAgIF9uZXh0R0NGcmFtZSA9IDMwLFxyXG4gICAgX2hhcm5lc3NQbHVnaW5zID0gW10sXHJcbiAgICBfY2FsbGJhY2tOYW1lcyA9IFwiXCIsXHJcbiAgICBfaGFybmVzcyA9IGZ1bmN0aW9uIF9oYXJuZXNzKHRhcmdldHMpIHtcclxuICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1swXSxcclxuICAgICAgaGFybmVzc1BsdWdpbixcclxuICAgICAgaTtcclxuICBfaXNPYmplY3QodGFyZ2V0KSB8fCBfaXNGdW5jdGlvbih0YXJnZXQpIHx8ICh0YXJnZXRzID0gW3RhcmdldHNdKTtcclxuXHJcbiAgaWYgKCEoaGFybmVzc1BsdWdpbiA9ICh0YXJnZXQuX2dzYXAgfHwge30pLmhhcm5lc3MpKSB7XHJcbiAgICAvLyBmaW5kIHRoZSBmaXJzdCB0YXJnZXQgd2l0aCBhIGhhcm5lc3MuIFdlIGFzc3VtZSB0YXJnZXRzIHBhc3NlZCBpbnRvIGFuIGFuaW1hdGlvbiB3aWxsIGJlIG9mIHNpbWlsYXIgdHlwZSwgbWVhbmluZyB0aGUgc2FtZSBraW5kIG9mIGhhcm5lc3MgY2FuIGJlIHVzZWQgZm9yIHRoZW0gYWxsIChwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24pXHJcbiAgICBpID0gX2hhcm5lc3NQbHVnaW5zLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tICYmICFfaGFybmVzc1BsdWdpbnNbaV0udGFyZ2V0VGVzdCh0YXJnZXQpKSB7fVxyXG5cclxuICAgIGhhcm5lc3NQbHVnaW4gPSBfaGFybmVzc1BsdWdpbnNbaV07XHJcbiAgfVxyXG5cclxuICBpID0gdGFyZ2V0cy5sZW5ndGg7XHJcblxyXG4gIHdoaWxlIChpLS0pIHtcclxuICAgIHRhcmdldHNbaV0gJiYgKHRhcmdldHNbaV0uX2dzYXAgfHwgKHRhcmdldHNbaV0uX2dzYXAgPSBuZXcgR1NDYWNoZSh0YXJnZXRzW2ldLCBoYXJuZXNzUGx1Z2luKSkpIHx8IHRhcmdldHMuc3BsaWNlKGksIDEpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRhcmdldHM7XHJcbn0sXHJcbiAgICBfZ2V0Q2FjaGUgPSBmdW5jdGlvbiBfZ2V0Q2FjaGUodGFyZ2V0KSB7XHJcbiAgcmV0dXJuIHRhcmdldC5fZ3NhcCB8fCBfaGFybmVzcyh0b0FycmF5KHRhcmdldCkpWzBdLl9nc2FwO1xyXG59LFxyXG4gICAgX2dldFByb3BlcnR5ID0gZnVuY3Rpb24gX2dldFByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHYpIHtcclxuICByZXR1cm4gKHYgPSB0YXJnZXRbcHJvcGVydHldKSAmJiBfaXNGdW5jdGlvbih2KSA/IHRhcmdldFtwcm9wZXJ0eV0oKSA6IF9pc1VuZGVmaW5lZCh2KSAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUocHJvcGVydHkpIHx8IHY7XHJcbn0sXHJcbiAgICBfZm9yRWFjaE5hbWUgPSBmdW5jdGlvbiBfZm9yRWFjaE5hbWUobmFtZXMsIGZ1bmMpIHtcclxuICByZXR1cm4gKG5hbWVzID0gbmFtZXMuc3BsaXQoXCIsXCIpKS5mb3JFYWNoKGZ1bmMpIHx8IG5hbWVzO1xyXG59LFxyXG4gICAgLy9zcGxpdCBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIG5hbWVzIGludG8gYW4gYXJyYXksIHRoZW4gcnVuIGEgZm9yRWFjaCgpIGZ1bmN0aW9uIGFuZCByZXR1cm4gdGhlIHNwbGl0IGFycmF5ICh0aGlzIGlzIGp1c3QgYSB3YXkgdG8gY29uc29saWRhdGUvc2hvcnRlbiBzb21lIGNvZGUpLlxyXG5fcm91bmQgPSBmdW5jdGlvbiBfcm91bmQodmFsdWUpIHtcclxuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMDAwMCkgLyAxMDAwMDAgfHwgMDtcclxufSxcclxuICAgIF9yb3VuZFByZWNpc2UgPSBmdW5jdGlvbiBfcm91bmRQcmVjaXNlKHZhbHVlKSB7XHJcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxMDAwMDAwMCkgLyAxMDAwMDAwMCB8fCAwO1xyXG59LFxyXG4gICAgLy8gaW5jcmVhc2VkIHByZWNpc2lvbiBtb3N0bHkgZm9yIHRpbWluZyB2YWx1ZXMuXHJcbl9wYXJzZVJlbGF0aXZlID0gZnVuY3Rpb24gX3BhcnNlUmVsYXRpdmUoc3RhcnQsIHZhbHVlKSB7XHJcbiAgdmFyIG9wZXJhdG9yID0gdmFsdWUuY2hhckF0KDApLFxyXG4gICAgICBlbmQgPSBwYXJzZUZsb2F0KHZhbHVlLnN1YnN0cigyKSk7XHJcbiAgc3RhcnQgPSBwYXJzZUZsb2F0KHN0YXJ0KTtcclxuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiK1wiID8gc3RhcnQgKyBlbmQgOiBvcGVyYXRvciA9PT0gXCItXCIgPyBzdGFydCAtIGVuZCA6IG9wZXJhdG9yID09PSBcIipcIiA/IHN0YXJ0ICogZW5kIDogc3RhcnQgLyBlbmQ7XHJcbn0sXHJcbiAgICBfYXJyYXlDb250YWluc0FueSA9IGZ1bmN0aW9uIF9hcnJheUNvbnRhaW5zQW55KHRvU2VhcmNoLCB0b0ZpbmQpIHtcclxuICAvL3NlYXJjaGVzIG9uZSBhcnJheSB0byBmaW5kIG1hdGNoZXMgZm9yIGFueSBvZiB0aGUgaXRlbXMgaW4gdGhlIHRvRmluZCBhcnJheS4gQXMgc29vbiBhcyBvbmUgaXMgZm91bmQsIGl0IHJldHVybnMgdHJ1ZS4gSXQgZG9lcyBOT1QgcmV0dXJuIGFsbCB0aGUgbWF0Y2hlczsgaXQncyBzaW1wbHkgYSBib29sZWFuIHNlYXJjaC5cclxuICB2YXIgbCA9IHRvRmluZC5sZW5ndGgsXHJcbiAgICAgIGkgPSAwO1xyXG5cclxuICBmb3IgKDsgdG9TZWFyY2guaW5kZXhPZih0b0ZpbmRbaV0pIDwgMCAmJiArK2kgPCBsOykge31cclxuXHJcbiAgcmV0dXJuIGkgPCBsO1xyXG59LFxyXG4gICAgX2xhenlSZW5kZXIgPSBmdW5jdGlvbiBfbGF6eVJlbmRlcigpIHtcclxuICB2YXIgbCA9IF9sYXp5VHdlZW5zLmxlbmd0aCxcclxuICAgICAgYSA9IF9sYXp5VHdlZW5zLnNsaWNlKDApLFxyXG4gICAgICBpLFxyXG4gICAgICB0d2VlbjtcclxuXHJcbiAgX2xhenlMb29rdXAgPSB7fTtcclxuICBfbGF6eVR3ZWVucy5sZW5ndGggPSAwO1xyXG5cclxuICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICB0d2VlbiA9IGFbaV07XHJcbiAgICB0d2VlbiAmJiB0d2Vlbi5fbGF6eSAmJiAodHdlZW4ucmVuZGVyKHR3ZWVuLl9sYXp5WzBdLCB0d2Vlbi5fbGF6eVsxXSwgdHJ1ZSkuX2xhenkgPSAwKTtcclxuICB9XHJcbn0sXHJcbiAgICBfaXNSZXZlcnRXb3J0aHkgPSBmdW5jdGlvbiBfaXNSZXZlcnRXb3J0aHkoYW5pbWF0aW9uKSB7XHJcbiAgcmV0dXJuICEhKGFuaW1hdGlvbi5faW5pdHRlZCB8fCBhbmltYXRpb24uX3N0YXJ0QXQgfHwgYW5pbWF0aW9uLmFkZCk7XHJcbn0sXHJcbiAgICBfbGF6eVNhZmVSZW5kZXIgPSBmdW5jdGlvbiBfbGF6eVNhZmVSZW5kZXIoYW5pbWF0aW9uLCB0aW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpIHtcclxuICBfbGF6eVR3ZWVucy5sZW5ndGggJiYgIV9yZXZlcnRpbmcgJiYgX2xhenlSZW5kZXIoKTtcclxuICBhbmltYXRpb24ucmVuZGVyKHRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSB8fCAhIShfcmV2ZXJ0aW5nICYmIHRpbWUgPCAwICYmIF9pc1JldmVydFdvcnRoeShhbmltYXRpb24pKSk7XHJcbiAgX2xhenlUd2VlbnMubGVuZ3RoICYmICFfcmV2ZXJ0aW5nICYmIF9sYXp5UmVuZGVyKCk7IC8vaW4gY2FzZSByZW5kZXJpbmcgY2F1c2VkIGFueSB0d2VlbnMgdG8gbGF6eS1pbml0LCB3ZSBzaG91bGQgcmVuZGVyIHRoZW0gYmVjYXVzZSB0eXBpY2FsbHkgd2hlbiBzb21lb25lIGNhbGxzIHNlZWsoKSBvciB0aW1lKCkgb3IgcHJvZ3Jlc3MoKSwgdGhleSBleHBlY3QgYW4gaW1tZWRpYXRlIHJlbmRlci5cclxufSxcclxuICAgIF9udW1lcmljSWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9udW1lcmljSWZQb3NzaWJsZSh2YWx1ZSkge1xyXG4gIHZhciBuID0gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgcmV0dXJuIChuIHx8IG4gPT09IDApICYmICh2YWx1ZSArIFwiXCIpLm1hdGNoKF9kZWxpbWl0ZWRWYWx1ZUV4cCkubGVuZ3RoIDwgMiA/IG4gOiBfaXNTdHJpbmcodmFsdWUpID8gdmFsdWUudHJpbSgpIDogdmFsdWU7XHJcbn0sXHJcbiAgICBfcGFzc1Rocm91Z2ggPSBmdW5jdGlvbiBfcGFzc1Rocm91Z2gocCkge1xyXG4gIHJldHVybiBwO1xyXG59LFxyXG4gICAgX3NldERlZmF1bHRzID0gZnVuY3Rpb24gX3NldERlZmF1bHRzKG9iaiwgZGVmYXVsdHMpIHtcclxuICBmb3IgKHZhciBwIGluIGRlZmF1bHRzKSB7XHJcbiAgICBwIGluIG9iaiB8fCAob2JqW3BdID0gZGVmYXVsdHNbcF0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG9iajtcclxufSxcclxuICAgIF9zZXRLZXlmcmFtZURlZmF1bHRzID0gZnVuY3Rpb24gX3NldEtleWZyYW1lRGVmYXVsdHMoZXhjbHVkZUR1cmF0aW9uKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGRlZmF1bHRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIGRlZmF1bHRzKSB7XHJcbiAgICAgIHAgaW4gb2JqIHx8IHAgPT09IFwiZHVyYXRpb25cIiAmJiBleGNsdWRlRHVyYXRpb24gfHwgcCA9PT0gXCJlYXNlXCIgfHwgKG9ialtwXSA9IGRlZmF1bHRzW3BdKTtcclxuICAgIH1cclxuICB9O1xyXG59LFxyXG4gICAgX21lcmdlID0gZnVuY3Rpb24gX21lcmdlKGJhc2UsIHRvTWVyZ2UpIHtcclxuICBmb3IgKHZhciBwIGluIHRvTWVyZ2UpIHtcclxuICAgIGJhc2VbcF0gPSB0b01lcmdlW3BdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJhc2U7XHJcbn0sXHJcbiAgICBfbWVyZ2VEZWVwID0gZnVuY3Rpb24gX21lcmdlRGVlcChiYXNlLCB0b01lcmdlKSB7XHJcbiAgZm9yICh2YXIgcCBpbiB0b01lcmdlKSB7XHJcbiAgICBwICE9PSBcIl9fcHJvdG9fX1wiICYmIHAgIT09IFwiY29uc3RydWN0b3JcIiAmJiBwICE9PSBcInByb3RvdHlwZVwiICYmIChiYXNlW3BdID0gX2lzT2JqZWN0KHRvTWVyZ2VbcF0pID8gX21lcmdlRGVlcChiYXNlW3BdIHx8IChiYXNlW3BdID0ge30pLCB0b01lcmdlW3BdKSA6IHRvTWVyZ2VbcF0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJhc2U7XHJcbn0sXHJcbiAgICBfY29weUV4Y2x1ZGluZyA9IGZ1bmN0aW9uIF9jb3B5RXhjbHVkaW5nKG9iaiwgZXhjbHVkaW5nKSB7XHJcbiAgdmFyIGNvcHkgPSB7fSxcclxuICAgICAgcDtcclxuXHJcbiAgZm9yIChwIGluIG9iaikge1xyXG4gICAgcCBpbiBleGNsdWRpbmcgfHwgKGNvcHlbcF0gPSBvYmpbcF0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvcHk7XHJcbn0sXHJcbiAgICBfaW5oZXJpdERlZmF1bHRzID0gZnVuY3Rpb24gX2luaGVyaXREZWZhdWx0cyh2YXJzKSB7XHJcbiAgdmFyIHBhcmVudCA9IHZhcnMucGFyZW50IHx8IF9nbG9iYWxUaW1lbGluZSxcclxuICAgICAgZnVuYyA9IHZhcnMua2V5ZnJhbWVzID8gX3NldEtleWZyYW1lRGVmYXVsdHMoX2lzQXJyYXkodmFycy5rZXlmcmFtZXMpKSA6IF9zZXREZWZhdWx0cztcclxuXHJcbiAgaWYgKF9pc05vdEZhbHNlKHZhcnMuaW5oZXJpdCkpIHtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgZnVuYyh2YXJzLCBwYXJlbnQudmFycy5kZWZhdWx0cyk7XHJcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQgfHwgcGFyZW50Ll9kcDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB2YXJzO1xyXG59LFxyXG4gICAgX2FycmF5c01hdGNoID0gZnVuY3Rpb24gX2FycmF5c01hdGNoKGExLCBhMikge1xyXG4gIHZhciBpID0gYTEubGVuZ3RoLFxyXG4gICAgICBtYXRjaCA9IGkgPT09IGEyLmxlbmd0aDtcclxuXHJcbiAgd2hpbGUgKG1hdGNoICYmIGktLSAmJiBhMVtpXSA9PT0gYTJbaV0pIHt9XHJcblxyXG4gIHJldHVybiBpIDwgMDtcclxufSxcclxuICAgIF9hZGRMaW5rZWRMaXN0SXRlbSA9IGZ1bmN0aW9uIF9hZGRMaW5rZWRMaXN0SXRlbShwYXJlbnQsIGNoaWxkLCBmaXJzdFByb3AsIGxhc3RQcm9wLCBzb3J0QnkpIHtcclxuICBpZiAoZmlyc3RQcm9wID09PSB2b2lkIDApIHtcclxuICAgIGZpcnN0UHJvcCA9IFwiX2ZpcnN0XCI7XHJcbiAgfVxyXG5cclxuICBpZiAobGFzdFByb3AgPT09IHZvaWQgMCkge1xyXG4gICAgbGFzdFByb3AgPSBcIl9sYXN0XCI7XHJcbiAgfVxyXG5cclxuICB2YXIgcHJldiA9IHBhcmVudFtsYXN0UHJvcF0sXHJcbiAgICAgIHQ7XHJcblxyXG4gIGlmIChzb3J0QnkpIHtcclxuICAgIHQgPSBjaGlsZFtzb3J0QnldO1xyXG5cclxuICAgIHdoaWxlIChwcmV2ICYmIHByZXZbc29ydEJ5XSA+IHQpIHtcclxuICAgICAgcHJldiA9IHByZXYuX3ByZXY7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocHJldikge1xyXG4gICAgY2hpbGQuX25leHQgPSBwcmV2Ll9uZXh0O1xyXG4gICAgcHJldi5fbmV4dCA9IGNoaWxkO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjaGlsZC5fbmV4dCA9IHBhcmVudFtmaXJzdFByb3BdO1xyXG4gICAgcGFyZW50W2ZpcnN0UHJvcF0gPSBjaGlsZDtcclxuICB9XHJcblxyXG4gIGlmIChjaGlsZC5fbmV4dCkge1xyXG4gICAgY2hpbGQuX25leHQuX3ByZXYgPSBjaGlsZDtcclxuICB9IGVsc2Uge1xyXG4gICAgcGFyZW50W2xhc3RQcm9wXSA9IGNoaWxkO1xyXG4gIH1cclxuXHJcbiAgY2hpbGQuX3ByZXYgPSBwcmV2O1xyXG4gIGNoaWxkLnBhcmVudCA9IGNoaWxkLl9kcCA9IHBhcmVudDtcclxuICByZXR1cm4gY2hpbGQ7XHJcbn0sXHJcbiAgICBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0gPSBmdW5jdGlvbiBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0ocGFyZW50LCBjaGlsZCwgZmlyc3RQcm9wLCBsYXN0UHJvcCkge1xyXG4gIGlmIChmaXJzdFByb3AgPT09IHZvaWQgMCkge1xyXG4gICAgZmlyc3RQcm9wID0gXCJfZmlyc3RcIjtcclxuICB9XHJcblxyXG4gIGlmIChsYXN0UHJvcCA9PT0gdm9pZCAwKSB7XHJcbiAgICBsYXN0UHJvcCA9IFwiX2xhc3RcIjtcclxuICB9XHJcblxyXG4gIHZhciBwcmV2ID0gY2hpbGQuX3ByZXYsXHJcbiAgICAgIG5leHQgPSBjaGlsZC5fbmV4dDtcclxuXHJcbiAgaWYgKHByZXYpIHtcclxuICAgIHByZXYuX25leHQgPSBuZXh0O1xyXG4gIH0gZWxzZSBpZiAocGFyZW50W2ZpcnN0UHJvcF0gPT09IGNoaWxkKSB7XHJcbiAgICBwYXJlbnRbZmlyc3RQcm9wXSA9IG5leHQ7XHJcbiAgfVxyXG5cclxuICBpZiAobmV4dCkge1xyXG4gICAgbmV4dC5fcHJldiA9IHByZXY7XHJcbiAgfSBlbHNlIGlmIChwYXJlbnRbbGFzdFByb3BdID09PSBjaGlsZCkge1xyXG4gICAgcGFyZW50W2xhc3RQcm9wXSA9IHByZXY7XHJcbiAgfVxyXG5cclxuICBjaGlsZC5fbmV4dCA9IGNoaWxkLl9wcmV2ID0gY2hpbGQucGFyZW50ID0gbnVsbDsgLy8gZG9uJ3QgZGVsZXRlIHRoZSBfZHAganVzdCBzbyB3ZSBjYW4gcmV2ZXJ0IGlmIG5lY2Vzc2FyeS4gQnV0IHBhcmVudCBzaG91bGQgYmUgbnVsbCB0byBpbmRpY2F0ZSB0aGUgaXRlbSBpc24ndCBpbiBhIGxpbmtlZCBsaXN0LlxyXG59LFxyXG4gICAgX3JlbW92ZUZyb21QYXJlbnQgPSBmdW5jdGlvbiBfcmVtb3ZlRnJvbVBhcmVudChjaGlsZCwgb25seUlmUGFyZW50SGFzQXV0b1JlbW92ZSkge1xyXG4gIGNoaWxkLnBhcmVudCAmJiAoIW9ubHlJZlBhcmVudEhhc0F1dG9SZW1vdmUgfHwgY2hpbGQucGFyZW50LmF1dG9SZW1vdmVDaGlsZHJlbikgJiYgY2hpbGQucGFyZW50LnJlbW92ZSAmJiBjaGlsZC5wYXJlbnQucmVtb3ZlKGNoaWxkKTtcclxuICBjaGlsZC5fYWN0ID0gMDtcclxufSxcclxuICAgIF91bmNhY2hlID0gZnVuY3Rpb24gX3VuY2FjaGUoYW5pbWF0aW9uLCBjaGlsZCkge1xyXG4gIGlmIChhbmltYXRpb24gJiYgKCFjaGlsZCB8fCBjaGlsZC5fZW5kID4gYW5pbWF0aW9uLl9kdXIgfHwgY2hpbGQuX3N0YXJ0IDwgMCkpIHtcclxuICAgIC8vIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogaWYgYSBjaGlsZCBhbmltYXRpb24gaXMgcGFzc2VkIGluIHdlIHNob3VsZCBvbmx5IHVuY2FjaGUgaWYgdGhhdCBjaGlsZCBFWFRFTkRTIHRoZSBhbmltYXRpb24gKGl0cyBlbmQgdGltZSBpcyBiZXlvbmQgdGhlIGVuZClcclxuICAgIHZhciBhID0gYW5pbWF0aW9uO1xyXG5cclxuICAgIHdoaWxlIChhKSB7XHJcbiAgICAgIGEuX2RpcnR5ID0gMTtcclxuICAgICAgYSA9IGEucGFyZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFuaW1hdGlvbjtcclxufSxcclxuICAgIF9yZWNhY2hlQW5jZXN0b3JzID0gZnVuY3Rpb24gX3JlY2FjaGVBbmNlc3RvcnMoYW5pbWF0aW9uKSB7XHJcbiAgdmFyIHBhcmVudCA9IGFuaW1hdGlvbi5wYXJlbnQ7XHJcblxyXG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkge1xyXG4gICAgLy9zb21ldGltZXMgd2UgbXVzdCBmb3JjZSBhIHJlLXNvcnQgb2YgYWxsIGNoaWxkcmVuIGFuZCB1cGRhdGUgdGhlIGR1cmF0aW9uL3RvdGFsRHVyYXRpb24gb2YgYWxsIGFuY2VzdG9yIHRpbWVsaW5lcyBpbW1lZGlhdGVseSBpbiBjYXNlLCBmb3IgZXhhbXBsZSwgaW4gdGhlIG1pZGRsZSBvZiBhIHJlbmRlciBsb29wLCBvbmUgdHdlZW4gYWx0ZXJzIGFub3RoZXIgdHdlZW4ncyB0aW1lU2NhbGUgd2hpY2ggc2hvdmVzIGl0cyBzdGFydFRpbWUgYmVmb3JlIDAsIGZvcmNpbmcgdGhlIHBhcmVudCB0aW1lbGluZSB0byBzaGlmdCBhcm91bmQgYW5kIHNoaWZ0Q2hpbGRyZW4oKSB3aGljaCBjb3VsZCBhZmZlY3QgdGhhdCBuZXh0IHR3ZWVuJ3MgcmVuZGVyIChzdGFydFRpbWUpLiBEb2Vzbid0IG1hdHRlciBmb3IgdGhlIHJvb3QgdGltZWxpbmUgdGhvdWdoLlxyXG4gICAgcGFyZW50Ll9kaXJ0eSA9IDE7XHJcbiAgICBwYXJlbnQudG90YWxEdXJhdGlvbigpO1xyXG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICB9XHJcblxyXG4gIHJldHVybiBhbmltYXRpb247XHJcbn0sXHJcbiAgICBfcmV3aW5kU3RhcnRBdCA9IGZ1bmN0aW9uIF9yZXdpbmRTdGFydEF0KHR3ZWVuLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xyXG4gIHJldHVybiB0d2Vlbi5fc3RhcnRBdCAmJiAoX3JldmVydGluZyA/IHR3ZWVuLl9zdGFydEF0LnJldmVydChfcmV2ZXJ0Q29uZmlnTm9LaWxsKSA6IHR3ZWVuLnZhcnMuaW1tZWRpYXRlUmVuZGVyICYmICF0d2Vlbi52YXJzLmF1dG9SZXZlcnQgfHwgdHdlZW4uX3N0YXJ0QXQucmVuZGVyKHRvdGFsVGltZSwgdHJ1ZSwgZm9yY2UpKTtcclxufSxcclxuICAgIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyA9IGZ1bmN0aW9uIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyhhbmltYXRpb24pIHtcclxuICByZXR1cm4gIWFuaW1hdGlvbiB8fCBhbmltYXRpb24uX3RzICYmIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyhhbmltYXRpb24ucGFyZW50KTtcclxufSxcclxuICAgIF9lbGFwc2VkQ3ljbGVEdXJhdGlvbiA9IGZ1bmN0aW9uIF9lbGFwc2VkQ3ljbGVEdXJhdGlvbihhbmltYXRpb24pIHtcclxuICByZXR1cm4gYW5pbWF0aW9uLl9yZXBlYXQgPyBfYW5pbWF0aW9uQ3ljbGUoYW5pbWF0aW9uLl90VGltZSwgYW5pbWF0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgKyBhbmltYXRpb24uX3JEZWxheSkgKiBhbmltYXRpb24gOiAwO1xyXG59LFxyXG4gICAgLy8gZmVlZCBpbiB0aGUgdG90YWxUaW1lIGFuZCBjeWNsZUR1cmF0aW9uIGFuZCBpdCdsbCByZXR1cm4gdGhlIGN5Y2xlIChpdGVyYXRpb24gbWludXMgMSkgYW5kIGlmIHRoZSBwbGF5aGVhZCBpcyBleGFjdGx5IGF0IHRoZSB2ZXJ5IEVORCwgaXQgd2lsbCBOT1QgYnVtcCB1cCB0byB0aGUgbmV4dCBjeWNsZS5cclxuX2FuaW1hdGlvbkN5Y2xlID0gZnVuY3Rpb24gX2FuaW1hdGlvbkN5Y2xlKHRUaW1lLCBjeWNsZUR1cmF0aW9uKSB7XHJcbiAgdmFyIHdob2xlID0gTWF0aC5mbG9vcih0VGltZSA9IF9yb3VuZFByZWNpc2UodFRpbWUgLyBjeWNsZUR1cmF0aW9uKSk7XHJcbiAgcmV0dXJuIHRUaW1lICYmIHdob2xlID09PSB0VGltZSA/IHdob2xlIC0gMSA6IHdob2xlO1xyXG59LFxyXG4gICAgX3BhcmVudFRvQ2hpbGRUb3RhbFRpbWUgPSBmdW5jdGlvbiBfcGFyZW50VG9DaGlsZFRvdGFsVGltZShwYXJlbnRUaW1lLCBjaGlsZCkge1xyXG4gIHJldHVybiAocGFyZW50VGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMgKyAoY2hpbGQuX3RzID49IDAgPyAwIDogY2hpbGQuX2RpcnR5ID8gY2hpbGQudG90YWxEdXJhdGlvbigpIDogY2hpbGQuX3REdXIpO1xyXG59LFxyXG4gICAgX3NldEVuZCA9IGZ1bmN0aW9uIF9zZXRFbmQoYW5pbWF0aW9uKSB7XHJcbiAgcmV0dXJuIGFuaW1hdGlvbi5fZW5kID0gX3JvdW5kUHJlY2lzZShhbmltYXRpb24uX3N0YXJ0ICsgKGFuaW1hdGlvbi5fdER1ciAvIE1hdGguYWJzKGFuaW1hdGlvbi5fdHMgfHwgYW5pbWF0aW9uLl9ydHMgfHwgX3RpbnlOdW0pIHx8IDApKTtcclxufSxcclxuICAgIF9hbGlnblBsYXloZWFkID0gZnVuY3Rpb24gX2FsaWduUGxheWhlYWQoYW5pbWF0aW9uLCB0b3RhbFRpbWUpIHtcclxuICAvLyBhZGp1c3RzIHRoZSBhbmltYXRpb24ncyBfc3RhcnQgYW5kIF9lbmQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCB0b3RhbFRpbWUgKG9ubHkgaWYgdGhlIHBhcmVudCdzIHNtb290aENoaWxkVGltaW5nIGlzIHRydWUgYW5kIHRoZSBhbmltYXRpb24gaXNuJ3QgcGF1c2VkKS4gSXQgZG9lc24ndCBkbyBhbnkgcmVuZGVyaW5nIG9yIGZvcmNpbmcgdGhpbmdzIGJhY2sgaW50byBwYXJlbnQgdGltZWxpbmVzLCBldGMuIC0gdGhhdCdzIHdoYXQgdG90YWxUaW1lKCkgaXMgZm9yLlxyXG4gIHZhciBwYXJlbnQgPSBhbmltYXRpb24uX2RwO1xyXG5cclxuICBpZiAocGFyZW50ICYmIHBhcmVudC5zbW9vdGhDaGlsZFRpbWluZyAmJiBhbmltYXRpb24uX3RzKSB7XHJcbiAgICBhbmltYXRpb24uX3N0YXJ0ID0gX3JvdW5kUHJlY2lzZShwYXJlbnQuX3RpbWUgLSAoYW5pbWF0aW9uLl90cyA+IDAgPyB0b3RhbFRpbWUgLyBhbmltYXRpb24uX3RzIDogKChhbmltYXRpb24uX2RpcnR5ID8gYW5pbWF0aW9uLnRvdGFsRHVyYXRpb24oKSA6IGFuaW1hdGlvbi5fdER1cikgLSB0b3RhbFRpbWUpIC8gLWFuaW1hdGlvbi5fdHMpKTtcclxuXHJcbiAgICBfc2V0RW5kKGFuaW1hdGlvbik7XHJcblxyXG4gICAgcGFyZW50Ll9kaXJ0eSB8fCBfdW5jYWNoZShwYXJlbnQsIGFuaW1hdGlvbik7IC8vZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBJZiB0aGUgcGFyZW50J3MgY2FjaGUgaXMgYWxyZWFkeSBkaXJ0eSwgaXQgYWxyZWFkeSB0b29rIGNhcmUgb2YgbWFya2luZyB0aGUgYW5jZXN0b3JzIGFzIGRpcnR5IHRvbywgc28gc2tpcCB0aGUgZnVuY3Rpb24gY2FsbCBoZXJlLlxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFuaW1hdGlvbjtcclxufSxcclxuXHJcbi8qXHJcbl90b3RhbFRpbWVUb1RpbWUgPSAoY2xhbXBlZFRvdGFsVGltZSwgZHVyYXRpb24sIHJlcGVhdCwgcmVwZWF0RGVsYXksIHlveW8pID0+IHtcclxuXHRsZXQgY3ljbGVEdXJhdGlvbiA9IGR1cmF0aW9uICsgcmVwZWF0RGVsYXksXHJcblx0XHR0aW1lID0gX3JvdW5kKGNsYW1wZWRUb3RhbFRpbWUgJSBjeWNsZUR1cmF0aW9uKTtcclxuXHRpZiAodGltZSA+IGR1cmF0aW9uKSB7XHJcblx0XHR0aW1lID0gZHVyYXRpb247XHJcblx0fVxyXG5cdHJldHVybiAoeW95byAmJiAofn4oY2xhbXBlZFRvdGFsVGltZSAvIGN5Y2xlRHVyYXRpb24pICYgMSkpID8gZHVyYXRpb24gLSB0aW1lIDogdGltZTtcclxufSxcclxuKi9cclxuX3Bvc3RBZGRDaGVja3MgPSBmdW5jdGlvbiBfcG9zdEFkZENoZWNrcyh0aW1lbGluZSwgY2hpbGQpIHtcclxuICB2YXIgdDtcclxuXHJcbiAgaWYgKGNoaWxkLl90aW1lIHx8ICFjaGlsZC5fZHVyICYmIGNoaWxkLl9pbml0dGVkIHx8IGNoaWxkLl9zdGFydCA8IHRpbWVsaW5lLl90aW1lICYmIChjaGlsZC5fZHVyIHx8ICFjaGlsZC5hZGQpKSB7XHJcbiAgICAvLyBpbiBjYXNlLCBmb3IgZXhhbXBsZSwgdGhlIF9zdGFydCBpcyBtb3ZlZCBvbiBhIHR3ZWVuIHRoYXQgaGFzIGFscmVhZHkgcmVuZGVyZWQsIG9yIGlmIGl0J3MgYmVpbmcgaW5zZXJ0ZWQgaW50byBhIHRpbWVsaW5lIEJFRk9SRSB3aGVyZSB0aGUgcGxheWhlYWQgaXMgY3VycmVudGx5LiBJbWFnaW5lIGl0J3MgYXQgaXRzIGVuZCBzdGF0ZSwgdGhlbiB0aGUgc3RhcnRUaW1lIGlzIG1vdmVkIFdBWSBsYXRlciAoYWZ0ZXIgdGhlIGVuZCBvZiB0aGlzIHRpbWVsaW5lKSwgaXQgc2hvdWxkIHJlbmRlciBhdCBpdHMgYmVnaW5uaW5nLiBTcGVjaWFsIGNhc2U6IGlmIGl0J3MgYSB0aW1lbGluZSAoaGFzIC5hZGQoKSBtZXRob2QpIGFuZCBubyBkdXJhdGlvbiwgd2UgY2FuIHNraXAgcmVuZGVyaW5nIGJlY2F1c2UgdGhlIHVzZXIgbWF5IGJlIHBvcHVsYXRpbmcgaXQgQUZURVIgYWRkaW5nIGl0IHRvIGEgcGFyZW50IHRpbWVsaW5lICh1bmNvbnZlbnRpb25hbCwgYnV0IHBvc3NpYmxlLCBhbmQgd2Ugd291bGRuJ3Qgd2FudCBpdCB0byBnZXQgcmVtb3ZlZCBpZiB0aGUgcGFyZW50J3MgYXV0b1JlbW92ZUNoaWxkcmVuIGlzIHRydWUpLlxyXG4gICAgdCA9IF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHRpbWVsaW5lLnJhd1RpbWUoKSwgY2hpbGQpO1xyXG5cclxuICAgIGlmICghY2hpbGQuX2R1ciB8fCBfY2xhbXAoMCwgY2hpbGQudG90YWxEdXJhdGlvbigpLCB0KSAtIGNoaWxkLl90VGltZSA+IF90aW55TnVtKSB7XHJcbiAgICAgIGNoaWxkLnJlbmRlcih0LCB0cnVlKTtcclxuICAgIH1cclxuICB9IC8vaWYgdGhlIHRpbWVsaW5lIGhhcyBhbHJlYWR5IGVuZGVkIGJ1dCB0aGUgaW5zZXJ0ZWQgdHdlZW4vdGltZWxpbmUgZXh0ZW5kcyB0aGUgZHVyYXRpb24sIHdlIHNob3VsZCBlbmFibGUgdGhpcyB0aW1lbGluZSBhZ2FpbiBzbyB0aGF0IGl0IHJlbmRlcnMgcHJvcGVybHkuIFdlIHNob3VsZCBhbHNvIGFsaWduIHRoZSBwbGF5aGVhZCB3aXRoIHRoZSBwYXJlbnQgdGltZWxpbmUncyB3aGVuIGFwcHJvcHJpYXRlLlxyXG5cclxuXHJcbiAgaWYgKF91bmNhY2hlKHRpbWVsaW5lLCBjaGlsZCkuX2RwICYmIHRpbWVsaW5lLl9pbml0dGVkICYmIHRpbWVsaW5lLl90aW1lID49IHRpbWVsaW5lLl9kdXIgJiYgdGltZWxpbmUuX3RzKSB7XHJcbiAgICAvL2luIGNhc2UgYW55IG9mIHRoZSBhbmNlc3RvcnMgaGFkIGNvbXBsZXRlZCBidXQgc2hvdWxkIG5vdyBiZSBlbmFibGVkLi4uXHJcbiAgICBpZiAodGltZWxpbmUuX2R1ciA8IHRpbWVsaW5lLmR1cmF0aW9uKCkpIHtcclxuICAgICAgdCA9IHRpbWVsaW5lO1xyXG5cclxuICAgICAgd2hpbGUgKHQuX2RwKSB7XHJcbiAgICAgICAgdC5yYXdUaW1lKCkgPj0gMCAmJiB0LnRvdGFsVGltZSh0Ll90VGltZSk7IC8vbW92ZXMgdGhlIHRpbWVsaW5lIChzaGlmdHMgaXRzIHN0YXJ0VGltZSkgaWYgbmVjZXNzYXJ5LCBhbmQgYWxzbyBlbmFibGVzIGl0LiBJZiBpdCdzIGN1cnJlbnRseSB6ZXJvLCB0aG91Z2gsIGl0IG1heSBub3QgYmUgc2NoZWR1bGVkIHRvIHJlbmRlciB1bnRpbCBsYXRlciBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgaXQgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVudCBwbGF5aGVhZCBwb3NpdGlvbi4gT25seSBtb3ZlIHRvIGNhdGNoIHVwIHdpdGggdGhlIHBsYXloZWFkLlxyXG5cclxuICAgICAgICB0ID0gdC5fZHA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aW1lbGluZS5felRpbWUgPSAtX3RpbnlOdW07IC8vIGhlbHBzIGVuc3VyZSB0aGF0IHRoZSBuZXh0IHJlbmRlcigpIHdpbGwgYmUgZm9yY2VkIChjcm9zc2luZ1N0YXJ0ID0gdHJ1ZSBpbiByZW5kZXIoKSksIGV2ZW4gaWYgdGhlIGR1cmF0aW9uIGhhc24ndCBjaGFuZ2VkICh3ZSdyZSBhZGRpbmcgYSBjaGlsZCB3aGljaCB3b3VsZCBuZWVkIHRvIGdldCByZW5kZXJlZCkuIERlZmluaXRlbHkgYW4gZWRnZSBjYXNlLiBOb3RlOiB3ZSBNVVNUIGRvIHRoaXMgQUZURVIgdGhlIGxvb3AgYWJvdmUgd2hlcmUgdGhlIHRvdGFsVGltZSgpIG1pZ2h0IHRyaWdnZXIgYSByZW5kZXIoKSBiZWNhdXNlIHRoaXMgX2FkZFRvVGltZWxpbmUoKSBtZXRob2QgZ2V0cyBjYWxsZWQgZnJvbSB0aGUgQW5pbWF0aW9uIGNvbnN0cnVjdG9yLCBCRUZPUkUgdHdlZW5zIGV2ZW4gcmVjb3JkIHRoZWlyIHRhcmdldHMsIGV0Yy4gc28gd2Ugd291bGRuJ3Qgd2FudCB0aGluZ3MgdG8gZ2V0IHRyaWdnZXJlZCBpbiB0aGUgd3Jvbmcgb3JkZXIuXHJcbiAgfVxyXG59LFxyXG4gICAgX2FkZFRvVGltZWxpbmUgPSBmdW5jdGlvbiBfYWRkVG9UaW1lbGluZSh0aW1lbGluZSwgY2hpbGQsIHBvc2l0aW9uLCBza2lwQ2hlY2tzKSB7XHJcbiAgY2hpbGQucGFyZW50ICYmIF9yZW1vdmVGcm9tUGFyZW50KGNoaWxkKTtcclxuICBjaGlsZC5fc3RhcnQgPSBfcm91bmRQcmVjaXNlKChfaXNOdW1iZXIocG9zaXRpb24pID8gcG9zaXRpb24gOiBwb3NpdGlvbiB8fCB0aW1lbGluZSAhPT0gX2dsb2JhbFRpbWVsaW5lID8gX3BhcnNlUG9zaXRpb24odGltZWxpbmUsIHBvc2l0aW9uLCBjaGlsZCkgOiB0aW1lbGluZS5fdGltZSkgKyBjaGlsZC5fZGVsYXkpO1xyXG4gIGNoaWxkLl9lbmQgPSBfcm91bmRQcmVjaXNlKGNoaWxkLl9zdGFydCArIChjaGlsZC50b3RhbER1cmF0aW9uKCkgLyBNYXRoLmFicyhjaGlsZC50aW1lU2NhbGUoKSkgfHwgMCkpO1xyXG5cclxuICBfYWRkTGlua2VkTGlzdEl0ZW0odGltZWxpbmUsIGNoaWxkLCBcIl9maXJzdFwiLCBcIl9sYXN0XCIsIHRpbWVsaW5lLl9zb3J0ID8gXCJfc3RhcnRcIiA6IDApO1xyXG5cclxuICBfaXNGcm9tT3JGcm9tU3RhcnQoY2hpbGQpIHx8ICh0aW1lbGluZS5fcmVjZW50ID0gY2hpbGQpO1xyXG4gIHNraXBDaGVja3MgfHwgX3Bvc3RBZGRDaGVja3ModGltZWxpbmUsIGNoaWxkKTtcclxuICB0aW1lbGluZS5fdHMgPCAwICYmIF9hbGlnblBsYXloZWFkKHRpbWVsaW5lLCB0aW1lbGluZS5fdFRpbWUpOyAvLyBpZiB0aGUgdGltZWxpbmUgaXMgcmV2ZXJzZWQgYW5kIHRoZSBuZXcgY2hpbGQgbWFrZXMgaXQgbG9uZ2VyLCB3ZSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlIHBhcmVudCdzIF9zdGFydCAocHVzaCBpdCBiYWNrKVxyXG5cclxuICByZXR1cm4gdGltZWxpbmU7XHJcbn0sXHJcbiAgICBfc2Nyb2xsVHJpZ2dlciA9IGZ1bmN0aW9uIF9zY3JvbGxUcmlnZ2VyKGFuaW1hdGlvbiwgdHJpZ2dlcikge1xyXG4gIHJldHVybiAoX2dsb2JhbHMuU2Nyb2xsVHJpZ2dlciB8fCBfbWlzc2luZ1BsdWdpbihcInNjcm9sbFRyaWdnZXJcIiwgdHJpZ2dlcikpICYmIF9nbG9iYWxzLlNjcm9sbFRyaWdnZXIuY3JlYXRlKHRyaWdnZXIsIGFuaW1hdGlvbik7XHJcbn0sXHJcbiAgICBfYXR0ZW1wdEluaXRUd2VlbiA9IGZ1bmN0aW9uIF9hdHRlbXB0SW5pdFR3ZWVuKHR3ZWVuLCB0aW1lLCBmb3JjZSwgc3VwcHJlc3NFdmVudHMsIHRUaW1lKSB7XHJcbiAgX2luaXRUd2Vlbih0d2VlbiwgdGltZSwgdFRpbWUpO1xyXG5cclxuICBpZiAoIXR3ZWVuLl9pbml0dGVkKSB7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIGlmICghZm9yY2UgJiYgdHdlZW4uX3B0ICYmICFfcmV2ZXJ0aW5nICYmICh0d2Vlbi5fZHVyICYmIHR3ZWVuLnZhcnMubGF6eSAhPT0gZmFsc2UgfHwgIXR3ZWVuLl9kdXIgJiYgdHdlZW4udmFycy5sYXp5KSAmJiBfbGFzdFJlbmRlcmVkRnJhbWUgIT09IF90aWNrZXIuZnJhbWUpIHtcclxuICAgIF9sYXp5VHdlZW5zLnB1c2godHdlZW4pO1xyXG5cclxuICAgIHR3ZWVuLl9sYXp5ID0gW3RUaW1lLCBzdXBwcmVzc0V2ZW50c107XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcbn0sXHJcbiAgICBfcGFyZW50UGxheWhlYWRJc0JlZm9yZVN0YXJ0ID0gZnVuY3Rpb24gX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydChfcmVmKSB7XHJcbiAgdmFyIHBhcmVudCA9IF9yZWYucGFyZW50O1xyXG4gIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Ll90cyAmJiBwYXJlbnQuX2luaXR0ZWQgJiYgIXBhcmVudC5fbG9jayAmJiAocGFyZW50LnJhd1RpbWUoKSA8IDAgfHwgX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydChwYXJlbnQpKTtcclxufSxcclxuICAgIC8vIGNoZWNrIHBhcmVudCdzIF9sb2NrIGJlY2F1c2Ugd2hlbiBhIHRpbWVsaW5lIHJlcGVhdHMveW95b3MgYW5kIGRvZXMgaXRzIGFydGlmaWNpYWwgd3JhcHBpbmcsIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgcmF0aW8gYmFjayB0byAwXHJcbl9pc0Zyb21PckZyb21TdGFydCA9IGZ1bmN0aW9uIF9pc0Zyb21PckZyb21TdGFydChfcmVmMikge1xyXG4gIHZhciBkYXRhID0gX3JlZjIuZGF0YTtcclxuICByZXR1cm4gZGF0YSA9PT0gXCJpc0Zyb21TdGFydFwiIHx8IGRhdGEgPT09IFwiaXNTdGFydFwiO1xyXG59LFxyXG4gICAgX3JlbmRlclplcm9EdXJhdGlvblR3ZWVuID0gZnVuY3Rpb24gX3JlbmRlclplcm9EdXJhdGlvblR3ZWVuKHR3ZWVuLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xyXG4gIHZhciBwcmV2UmF0aW8gPSB0d2Vlbi5yYXRpbyxcclxuICAgICAgcmF0aW8gPSB0b3RhbFRpbWUgPCAwIHx8ICF0b3RhbFRpbWUgJiYgKCF0d2Vlbi5fc3RhcnQgJiYgX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydCh0d2VlbikgJiYgISghdHdlZW4uX2luaXR0ZWQgJiYgX2lzRnJvbU9yRnJvbVN0YXJ0KHR3ZWVuKSkgfHwgKHR3ZWVuLl90cyA8IDAgfHwgdHdlZW4uX2RwLl90cyA8IDApICYmICFfaXNGcm9tT3JGcm9tU3RhcnQodHdlZW4pKSA/IDAgOiAxLFxyXG4gICAgICAvLyBpZiB0aGUgdHdlZW4gb3IgaXRzIHBhcmVudCBpcyByZXZlcnNlZCBhbmQgdGhlIHRvdGFsVGltZSBpcyAwLCB3ZSBzaG91bGQgZ28gdG8gYSByYXRpbyBvZiAwLiBFZGdlIGNhc2U6IGlmIGEgZnJvbSgpIG9yIGZyb21UbygpIHN0YWdnZXIgdHdlZW4gaXMgcGxhY2VkIGxhdGVyIGluIGEgdGltZWxpbmUsIHRoZSBcInN0YXJ0QXRcIiB6ZXJvLWR1cmF0aW9uIHR3ZWVuIGNvdWxkIGluaXRpYWxseSByZW5kZXIgYXQgYSB0aW1lIHdoZW4gdGhlIHBhcmVudCB0aW1lbGluZSdzIHBsYXloZWFkIGlzIHRlY2huaWNhbGx5IEJFRk9SRSB3aGVyZSB0aGlzIHR3ZWVuIGlzLCBzbyBtYWtlIHN1cmUgdGhhdCBhbnkgXCJmcm9tXCIgYW5kIFwiZnJvbVRvXCIgc3RhcnRBdCB0d2VlbnMgYXJlIHJlbmRlcmVkIHRoZSBmaXJzdCB0aW1lIGF0IGEgcmF0aW8gb2YgMS5cclxuICByZXBlYXREZWxheSA9IHR3ZWVuLl9yRGVsYXksXHJcbiAgICAgIHRUaW1lID0gMCxcclxuICAgICAgcHQsXHJcbiAgICAgIGl0ZXJhdGlvbixcclxuICAgICAgcHJldkl0ZXJhdGlvbjtcclxuXHJcbiAgaWYgKHJlcGVhdERlbGF5ICYmIHR3ZWVuLl9yZXBlYXQpIHtcclxuICAgIC8vIGluIGNhc2UgdGhlcmUncyBhIHplcm8tZHVyYXRpb24gdHdlZW4gdGhhdCBoYXMgYSByZXBlYXQgd2l0aCBhIHJlcGVhdERlbGF5XHJcbiAgICB0VGltZSA9IF9jbGFtcCgwLCB0d2Vlbi5fdER1ciwgdG90YWxUaW1lKTtcclxuICAgIGl0ZXJhdGlvbiA9IF9hbmltYXRpb25DeWNsZSh0VGltZSwgcmVwZWF0RGVsYXkpO1xyXG4gICAgdHdlZW4uX3lveW8gJiYgaXRlcmF0aW9uICYgMSAmJiAocmF0aW8gPSAxIC0gcmF0aW8pO1xyXG5cclxuICAgIGlmIChpdGVyYXRpb24gIT09IF9hbmltYXRpb25DeWNsZSh0d2Vlbi5fdFRpbWUsIHJlcGVhdERlbGF5KSkge1xyXG4gICAgICAvLyBpZiBpdGVyYXRpb24gY2hhbmdlZFxyXG4gICAgICBwcmV2UmF0aW8gPSAxIC0gcmF0aW87XHJcbiAgICAgIHR3ZWVuLnZhcnMucmVwZWF0UmVmcmVzaCAmJiB0d2Vlbi5faW5pdHRlZCAmJiB0d2Vlbi5pbnZhbGlkYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocmF0aW8gIT09IHByZXZSYXRpbyB8fCBfcmV2ZXJ0aW5nIHx8IGZvcmNlIHx8IHR3ZWVuLl96VGltZSA9PT0gX3RpbnlOdW0gfHwgIXRvdGFsVGltZSAmJiB0d2Vlbi5felRpbWUpIHtcclxuICAgIGlmICghdHdlZW4uX2luaXR0ZWQgJiYgX2F0dGVtcHRJbml0VHdlZW4odHdlZW4sIHRvdGFsVGltZSwgZm9yY2UsIHN1cHByZXNzRXZlbnRzLCB0VGltZSkpIHtcclxuICAgICAgLy8gaWYgd2UgcmVuZGVyIHRoZSB2ZXJ5IGJlZ2lubmluZyAodGltZSA9PSAwKSBvZiBhIGZyb21UbygpLCB3ZSBtdXN0IGZvcmNlIHRoZSByZW5kZXIgKG5vcm1hbCB0d2VlbnMgd291bGRuJ3QgbmVlZCB0byByZW5kZXIgYXQgYSB0aW1lIG9mIDAgd2hlbiB0aGUgcHJldlRpbWUgd2FzIGFsc28gMCkuIFRoaXMgaXMgYWxzbyBtYW5kYXRvcnkgdG8gbWFrZSBzdXJlIG92ZXJ3cml0aW5nIGtpY2tzIGluIGltbWVkaWF0ZWx5LlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcHJldkl0ZXJhdGlvbiA9IHR3ZWVuLl96VGltZTtcclxuICAgIHR3ZWVuLl96VGltZSA9IHRvdGFsVGltZSB8fCAoc3VwcHJlc3NFdmVudHMgPyBfdGlueU51bSA6IDApOyAvLyB3aGVuIHRoZSBwbGF5aGVhZCBhcnJpdmVzIGF0IEVYQUNUTFkgdGltZSAwIChyaWdodCBvbiB0b3ApIG9mIGEgemVyby1kdXJhdGlvbiB0d2Vlbiwgd2UgbmVlZCB0byBkaXNjZXJuIGlmIGV2ZW50cyBhcmUgc3VwcHJlc3NlZCBzbyB0aGF0IHdoZW4gdGhlIHBsYXloZWFkIG1vdmVzIGFnYWluIChuZXh0IHRpbWUpLCBpdCdsbCB0cmlnZ2VyIHRoZSBjYWxsYmFjay4gSWYgZXZlbnRzIGFyZSBOT1Qgc3VwcHJlc3NlZCwgb2J2aW91c2x5IHRoZSBjYWxsYmFjayB3b3VsZCBiZSB0cmlnZ2VyZWQgaW4gdGhpcyByZW5kZXIuIEJhc2ljYWxseSwgdGhlIGNhbGxiYWNrIHNob3VsZCBmaXJlIGVpdGhlciB3aGVuIHRoZSBwbGF5aGVhZCBBUlJJVkVTIG9yIExFQVZFUyB0aGlzIGV4YWN0IHNwb3QsIG5vdCBib3RoLiBJbWFnaW5lIGRvaW5nIGEgdGltZWxpbmUuc2VlaygwKSBhbmQgdGhlcmUncyBhIGNhbGxiYWNrIHRoYXQgc2l0cyBhdCAwLiBTaW5jZSBldmVudHMgYXJlIHN1cHByZXNzZWQgb24gdGhhdCBzZWVrKCkgYnkgZGVmYXVsdCwgbm90aGluZyB3aWxsIGZpcmUsIGJ1dCB3aGVuIHRoZSBwbGF5aGVhZCBtb3ZlcyBvZmYgb2YgdGhhdCBwb3NpdGlvbiwgdGhlIGNhbGxiYWNrIHNob3VsZCBmaXJlLiBUaGlzIGJlaGF2aW9yIGlzIHdoYXQgcGVvcGxlIGludHVpdGl2ZWx5IGV4cGVjdC5cclxuXHJcbiAgICBzdXBwcmVzc0V2ZW50cyB8fCAoc3VwcHJlc3NFdmVudHMgPSB0b3RhbFRpbWUgJiYgIXByZXZJdGVyYXRpb24pOyAvLyBpZiBpdCB3YXMgcmVuZGVyZWQgcHJldmlvdXNseSBhdCBleGFjdGx5IDAgKF96VGltZSkgYW5kIG5vdyB0aGUgcGxheWhlYWQgaXMgbW92aW5nIGF3YXksIERPTidUIGZpcmUgY2FsbGJhY2tzIG90aGVyd2lzZSB0aGV5J2xsIHNlZW0gbGlrZSBkdXBsaWNhdGVzLlxyXG5cclxuICAgIHR3ZWVuLnJhdGlvID0gcmF0aW87XHJcbiAgICB0d2Vlbi5fZnJvbSAmJiAocmF0aW8gPSAxIC0gcmF0aW8pO1xyXG4gICAgdHdlZW4uX3RpbWUgPSAwO1xyXG4gICAgdHdlZW4uX3RUaW1lID0gdFRpbWU7XHJcbiAgICBwdCA9IHR3ZWVuLl9wdDtcclxuXHJcbiAgICB3aGlsZSAocHQpIHtcclxuICAgICAgcHQucihyYXRpbywgcHQuZCk7XHJcbiAgICAgIHB0ID0gcHQuX25leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdG90YWxUaW1lIDwgMCAmJiBfcmV3aW5kU3RhcnRBdCh0d2VlbiwgdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgdHJ1ZSk7XHJcbiAgICB0d2Vlbi5fb25VcGRhdGUgJiYgIXN1cHByZXNzRXZlbnRzICYmIF9jYWxsYmFjayh0d2VlbiwgXCJvblVwZGF0ZVwiKTtcclxuICAgIHRUaW1lICYmIHR3ZWVuLl9yZXBlYXQgJiYgIXN1cHByZXNzRXZlbnRzICYmIHR3ZWVuLnBhcmVudCAmJiBfY2FsbGJhY2sodHdlZW4sIFwib25SZXBlYXRcIik7XHJcblxyXG4gICAgaWYgKCh0b3RhbFRpbWUgPj0gdHdlZW4uX3REdXIgfHwgdG90YWxUaW1lIDwgMCkgJiYgdHdlZW4ucmF0aW8gPT09IHJhdGlvKSB7XHJcbiAgICAgIHJhdGlvICYmIF9yZW1vdmVGcm9tUGFyZW50KHR3ZWVuLCAxKTtcclxuXHJcbiAgICAgIGlmICghc3VwcHJlc3NFdmVudHMgJiYgIV9yZXZlcnRpbmcpIHtcclxuICAgICAgICBfY2FsbGJhY2sodHdlZW4sIHJhdGlvID8gXCJvbkNvbXBsZXRlXCIgOiBcIm9uUmV2ZXJzZUNvbXBsZXRlXCIsIHRydWUpO1xyXG5cclxuICAgICAgICB0d2Vlbi5fcHJvbSAmJiB0d2Vlbi5fcHJvbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdHdlZW4uX3pUaW1lKSB7XHJcbiAgICB0d2Vlbi5felRpbWUgPSB0b3RhbFRpbWU7XHJcbiAgfVxyXG59LFxyXG4gICAgX2ZpbmROZXh0UGF1c2VUd2VlbiA9IGZ1bmN0aW9uIF9maW5kTmV4dFBhdXNlVHdlZW4oYW5pbWF0aW9uLCBwcmV2VGltZSwgdGltZSkge1xyXG4gIHZhciBjaGlsZDtcclxuXHJcbiAgaWYgKHRpbWUgPiBwcmV2VGltZSkge1xyXG4gICAgY2hpbGQgPSBhbmltYXRpb24uX2ZpcnN0O1xyXG5cclxuICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC5fc3RhcnQgPD0gdGltZSkge1xyXG4gICAgICBpZiAoY2hpbGQuZGF0YSA9PT0gXCJpc1BhdXNlXCIgJiYgY2hpbGQuX3N0YXJ0ID4gcHJldlRpbWUpIHtcclxuICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNoaWxkID0gY2hpbGQuX25leHQ7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNoaWxkID0gYW5pbWF0aW9uLl9sYXN0O1xyXG5cclxuICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC5fc3RhcnQgPj0gdGltZSkge1xyXG4gICAgICBpZiAoY2hpbGQuZGF0YSA9PT0gXCJpc1BhdXNlXCIgJiYgY2hpbGQuX3N0YXJ0IDwgcHJldlRpbWUpIHtcclxuICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNoaWxkID0gY2hpbGQuX3ByZXY7XHJcbiAgICB9XHJcbiAgfVxyXG59LFxyXG4gICAgX3NldER1cmF0aW9uID0gZnVuY3Rpb24gX3NldER1cmF0aW9uKGFuaW1hdGlvbiwgZHVyYXRpb24sIHNraXBVbmNhY2hlLCBsZWF2ZVBsYXloZWFkKSB7XHJcbiAgdmFyIHJlcGVhdCA9IGFuaW1hdGlvbi5fcmVwZWF0LFxyXG4gICAgICBkdXIgPSBfcm91bmRQcmVjaXNlKGR1cmF0aW9uKSB8fCAwLFxyXG4gICAgICB0b3RhbFByb2dyZXNzID0gYW5pbWF0aW9uLl90VGltZSAvIGFuaW1hdGlvbi5fdER1cjtcclxuICB0b3RhbFByb2dyZXNzICYmICFsZWF2ZVBsYXloZWFkICYmIChhbmltYXRpb24uX3RpbWUgKj0gZHVyIC8gYW5pbWF0aW9uLl9kdXIpO1xyXG4gIGFuaW1hdGlvbi5fZHVyID0gZHVyO1xyXG4gIGFuaW1hdGlvbi5fdER1ciA9ICFyZXBlYXQgPyBkdXIgOiByZXBlYXQgPCAwID8gMWUxMCA6IF9yb3VuZFByZWNpc2UoZHVyICogKHJlcGVhdCArIDEpICsgYW5pbWF0aW9uLl9yRGVsYXkgKiByZXBlYXQpO1xyXG4gIHRvdGFsUHJvZ3Jlc3MgPiAwICYmICFsZWF2ZVBsYXloZWFkICYmIF9hbGlnblBsYXloZWFkKGFuaW1hdGlvbiwgYW5pbWF0aW9uLl90VGltZSA9IGFuaW1hdGlvbi5fdER1ciAqIHRvdGFsUHJvZ3Jlc3MpO1xyXG4gIGFuaW1hdGlvbi5wYXJlbnQgJiYgX3NldEVuZChhbmltYXRpb24pO1xyXG4gIHNraXBVbmNhY2hlIHx8IF91bmNhY2hlKGFuaW1hdGlvbi5wYXJlbnQsIGFuaW1hdGlvbik7XHJcbiAgcmV0dXJuIGFuaW1hdGlvbjtcclxufSxcclxuICAgIF9vblVwZGF0ZVRvdGFsRHVyYXRpb24gPSBmdW5jdGlvbiBfb25VcGRhdGVUb3RhbER1cmF0aW9uKGFuaW1hdGlvbikge1xyXG4gIHJldHVybiBhbmltYXRpb24gaW5zdGFuY2VvZiBUaW1lbGluZSA/IF91bmNhY2hlKGFuaW1hdGlvbikgOiBfc2V0RHVyYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpb24uX2R1cik7XHJcbn0sXHJcbiAgICBfemVyb1Bvc2l0aW9uID0ge1xyXG4gIF9zdGFydDogMCxcclxuICBlbmRUaW1lOiBfZW1wdHlGdW5jLFxyXG4gIHRvdGFsRHVyYXRpb246IF9lbXB0eUZ1bmNcclxufSxcclxuICAgIF9wYXJzZVBvc2l0aW9uID0gZnVuY3Rpb24gX3BhcnNlUG9zaXRpb24oYW5pbWF0aW9uLCBwb3NpdGlvbiwgcGVyY2VudEFuaW1hdGlvbikge1xyXG4gIHZhciBsYWJlbHMgPSBhbmltYXRpb24ubGFiZWxzLFxyXG4gICAgICByZWNlbnQgPSBhbmltYXRpb24uX3JlY2VudCB8fCBfemVyb1Bvc2l0aW9uLFxyXG4gICAgICBjbGlwcGVkRHVyYXRpb24gPSBhbmltYXRpb24uZHVyYXRpb24oKSA+PSBfYmlnTnVtID8gcmVjZW50LmVuZFRpbWUoZmFsc2UpIDogYW5pbWF0aW9uLl9kdXIsXHJcbiAgICAgIC8vaW4gY2FzZSB0aGVyZSdzIGEgY2hpbGQgdGhhdCBpbmZpbml0ZWx5IHJlcGVhdHMsIHVzZXJzIGFsbW9zdCBuZXZlciBpbnRlbmQgZm9yIHRoZSBpbnNlcnRpb24gcG9pbnQgb2YgYSBuZXcgY2hpbGQgdG8gYmUgYmFzZWQgb24gYSBTVVBFUiBsb25nIHZhbHVlIGxpa2UgdGhhdCBzbyB3ZSBjbGlwIGl0IGFuZCBhc3N1bWUgdGhlIG1vc3QgcmVjZW50bHktYWRkZWQgY2hpbGQncyBlbmRUaW1lIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXHJcbiAgaSxcclxuICAgICAgb2Zmc2V0LFxyXG4gICAgICBpc1BlcmNlbnQ7XHJcblxyXG4gIGlmIChfaXNTdHJpbmcocG9zaXRpb24pICYmIChpc05hTihwb3NpdGlvbikgfHwgcG9zaXRpb24gaW4gbGFiZWxzKSkge1xyXG4gICAgLy9pZiB0aGUgc3RyaW5nIGlzIGEgbnVtYmVyIGxpa2UgXCIxXCIsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGEgbGFiZWwgd2l0aCB0aGF0IG5hbWUsIG90aGVyd2lzZSBpbnRlcnByZXQgaXQgYXMgYSBudW1iZXIgKGFic29sdXRlIHZhbHVlKS5cclxuICAgIG9mZnNldCA9IHBvc2l0aW9uLmNoYXJBdCgwKTtcclxuICAgIGlzUGVyY2VudCA9IHBvc2l0aW9uLnN1YnN0cigtMSkgPT09IFwiJVwiO1xyXG4gICAgaSA9IHBvc2l0aW9uLmluZGV4T2YoXCI9XCIpO1xyXG5cclxuICAgIGlmIChvZmZzZXQgPT09IFwiPFwiIHx8IG9mZnNldCA9PT0gXCI+XCIpIHtcclxuICAgICAgaSA+PSAwICYmIChwb3NpdGlvbiA9IHBvc2l0aW9uLnJlcGxhY2UoLz0vLCBcIlwiKSk7XHJcbiAgICAgIHJldHVybiAob2Zmc2V0ID09PSBcIjxcIiA/IHJlY2VudC5fc3RhcnQgOiByZWNlbnQuZW5kVGltZShyZWNlbnQuX3JlcGVhdCA+PSAwKSkgKyAocGFyc2VGbG9hdChwb3NpdGlvbi5zdWJzdHIoMSkpIHx8IDApICogKGlzUGVyY2VudCA/IChpIDwgMCA/IHJlY2VudCA6IHBlcmNlbnRBbmltYXRpb24pLnRvdGFsRHVyYXRpb24oKSAvIDEwMCA6IDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpIDwgMCkge1xyXG4gICAgICBwb3NpdGlvbiBpbiBsYWJlbHMgfHwgKGxhYmVsc1twb3NpdGlvbl0gPSBjbGlwcGVkRHVyYXRpb24pO1xyXG4gICAgICByZXR1cm4gbGFiZWxzW3Bvc2l0aW9uXTtcclxuICAgIH1cclxuXHJcbiAgICBvZmZzZXQgPSBwYXJzZUZsb2F0KHBvc2l0aW9uLmNoYXJBdChpIC0gMSkgKyBwb3NpdGlvbi5zdWJzdHIoaSArIDEpKTtcclxuXHJcbiAgICBpZiAoaXNQZXJjZW50ICYmIHBlcmNlbnRBbmltYXRpb24pIHtcclxuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IC8gMTAwICogKF9pc0FycmF5KHBlcmNlbnRBbmltYXRpb24pID8gcGVyY2VudEFuaW1hdGlvblswXSA6IHBlcmNlbnRBbmltYXRpb24pLnRvdGFsRHVyYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaSA+IDEgPyBfcGFyc2VQb3NpdGlvbihhbmltYXRpb24sIHBvc2l0aW9uLnN1YnN0cigwLCBpIC0gMSksIHBlcmNlbnRBbmltYXRpb24pICsgb2Zmc2V0IDogY2xpcHBlZER1cmF0aW9uICsgb2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBvc2l0aW9uID09IG51bGwgPyBjbGlwcGVkRHVyYXRpb24gOiArcG9zaXRpb247XHJcbn0sXHJcbiAgICBfY3JlYXRlVHdlZW5UeXBlID0gZnVuY3Rpb24gX2NyZWF0ZVR3ZWVuVHlwZSh0eXBlLCBwYXJhbXMsIHRpbWVsaW5lKSB7XHJcbiAgdmFyIGlzTGVnYWN5ID0gX2lzTnVtYmVyKHBhcmFtc1sxXSksXHJcbiAgICAgIHZhcnNJbmRleCA9IChpc0xlZ2FjeSA/IDIgOiAxKSArICh0eXBlIDwgMiA/IDAgOiAxKSxcclxuICAgICAgdmFycyA9IHBhcmFtc1t2YXJzSW5kZXhdLFxyXG4gICAgICBpclZhcnMsXHJcbiAgICAgIHBhcmVudDtcclxuXHJcbiAgaXNMZWdhY3kgJiYgKHZhcnMuZHVyYXRpb24gPSBwYXJhbXNbMV0pO1xyXG4gIHZhcnMucGFyZW50ID0gdGltZWxpbmU7XHJcblxyXG4gIGlmICh0eXBlKSB7XHJcbiAgICBpclZhcnMgPSB2YXJzO1xyXG4gICAgcGFyZW50ID0gdGltZWxpbmU7XHJcblxyXG4gICAgd2hpbGUgKHBhcmVudCAmJiAhKFwiaW1tZWRpYXRlUmVuZGVyXCIgaW4gaXJWYXJzKSkge1xyXG4gICAgICAvLyBpbmhlcml0YW5jZSBoYXNuJ3QgaGFwcGVuZWQgeWV0LCBidXQgc29tZW9uZSBtYXkgaGF2ZSBzZXQgYSBkZWZhdWx0IGluIGFuIGFuY2VzdG9yIHRpbWVsaW5lLiBXZSBjb3VsZCBkbyB2YXJzLmltbWVkaWF0ZVJlbmRlciA9IF9pc05vdEZhbHNlKF9pbmhlcml0RGVmYXVsdHModmFycykuaW1tZWRpYXRlUmVuZGVyKSBidXQgdGhhdCdkIGV4YWN0IGEgc2xpZ2h0IHBlcmZvcm1hbmNlIHBlbmFsdHkgYmVjYXVzZSBfaW5oZXJpdERlZmF1bHRzKCkgYWxzbyBydW5zIGluIHRoZSBUd2VlbiBjb25zdHJ1Y3Rvci4gV2UncmUgcGF5aW5nIGEgc21hbGwga2IgcHJpY2UgaGVyZSB0byBnYWluIHNwZWVkLlxyXG4gICAgICBpclZhcnMgPSBwYXJlbnQudmFycy5kZWZhdWx0cyB8fCB7fTtcclxuICAgICAgcGFyZW50ID0gX2lzTm90RmFsc2UocGFyZW50LnZhcnMuaW5oZXJpdCkgJiYgcGFyZW50LnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICB2YXJzLmltbWVkaWF0ZVJlbmRlciA9IF9pc05vdEZhbHNlKGlyVmFycy5pbW1lZGlhdGVSZW5kZXIpO1xyXG4gICAgdHlwZSA8IDIgPyB2YXJzLnJ1bkJhY2t3YXJkcyA9IDEgOiB2YXJzLnN0YXJ0QXQgPSBwYXJhbXNbdmFyc0luZGV4IC0gMV07IC8vIFwiZnJvbVwiIHZhcnNcclxuICB9XHJcblxyXG4gIHJldHVybiBuZXcgVHdlZW4ocGFyYW1zWzBdLCB2YXJzLCBwYXJhbXNbdmFyc0luZGV4ICsgMV0pO1xyXG59LFxyXG4gICAgX2NvbmRpdGlvbmFsUmV0dXJuID0gZnVuY3Rpb24gX2NvbmRpdGlvbmFsUmV0dXJuKHZhbHVlLCBmdW5jKSB7XHJcbiAgcmV0dXJuIHZhbHVlIHx8IHZhbHVlID09PSAwID8gZnVuYyh2YWx1ZSkgOiBmdW5jO1xyXG59LFxyXG4gICAgX2NsYW1wID0gZnVuY3Rpb24gX2NsYW1wKG1pbiwgbWF4LCB2YWx1ZSkge1xyXG4gIHJldHVybiB2YWx1ZSA8IG1pbiA/IG1pbiA6IHZhbHVlID4gbWF4ID8gbWF4IDogdmFsdWU7XHJcbn0sXHJcbiAgICBnZXRVbml0ID0gZnVuY3Rpb24gZ2V0VW5pdCh2YWx1ZSwgdikge1xyXG4gIHJldHVybiAhX2lzU3RyaW5nKHZhbHVlKSB8fCAhKHYgPSBfdW5pdEV4cC5leGVjKHZhbHVlKSkgPyBcIlwiIDogdlsxXTtcclxufSxcclxuICAgIC8vIG5vdGU6IHByb3RlY3QgYWdhaW5zdCBwYWRkZWQgbnVtYmVycyBhcyBzdHJpbmdzLCBsaWtlIFwiMTAwLjEwMFwiLiBUaGF0IHNob3VsZG4ndCByZXR1cm4gXCIwMFwiIGFzIHRoZSB1bml0LiBJZiBpdCdzIG51bWVyaWMsIHJldHVybiBubyB1bml0LlxyXG5jbGFtcCA9IGZ1bmN0aW9uIGNsYW1wKG1pbiwgbWF4LCB2YWx1ZSkge1xyXG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmN0aW9uICh2KSB7XHJcbiAgICByZXR1cm4gX2NsYW1wKG1pbiwgbWF4LCB2KTtcclxuICB9KTtcclxufSxcclxuICAgIF9zbGljZSA9IFtdLnNsaWNlLFxyXG4gICAgX2lzQXJyYXlMaWtlID0gZnVuY3Rpb24gX2lzQXJyYXlMaWtlKHZhbHVlLCBub25FbXB0eSkge1xyXG4gIHJldHVybiB2YWx1ZSAmJiBfaXNPYmplY3QodmFsdWUpICYmIFwibGVuZ3RoXCIgaW4gdmFsdWUgJiYgKCFub25FbXB0eSAmJiAhdmFsdWUubGVuZ3RoIHx8IHZhbHVlLmxlbmd0aCAtIDEgaW4gdmFsdWUgJiYgX2lzT2JqZWN0KHZhbHVlWzBdKSkgJiYgIXZhbHVlLm5vZGVUeXBlICYmIHZhbHVlICE9PSBfd2luO1xyXG59LFxyXG4gICAgX2ZsYXR0ZW4gPSBmdW5jdGlvbiBfZmxhdHRlbihhciwgbGVhdmVTdHJpbmdzLCBhY2N1bXVsYXRvcikge1xyXG4gIGlmIChhY2N1bXVsYXRvciA9PT0gdm9pZCAwKSB7XHJcbiAgICBhY2N1bXVsYXRvciA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFyLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICB2YXIgX2FjY3VtdWxhdG9yO1xyXG5cclxuICAgIHJldHVybiBfaXNTdHJpbmcodmFsdWUpICYmICFsZWF2ZVN0cmluZ3MgfHwgX2lzQXJyYXlMaWtlKHZhbHVlLCAxKSA/IChfYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcikucHVzaC5hcHBseShfYWNjdW11bGF0b3IsIHRvQXJyYXkodmFsdWUpKSA6IGFjY3VtdWxhdG9yLnB1c2godmFsdWUpO1xyXG4gIH0pIHx8IGFjY3VtdWxhdG9yO1xyXG59LFxyXG4gICAgLy90YWtlcyBhbnkgdmFsdWUgYW5kIHJldHVybnMgYW4gYXJyYXkuIElmIGl0J3MgYSBzdHJpbmcgKGFuZCBsZWF2ZVN0cmluZ3MgaXNuJ3QgdHJ1ZSksIGl0J2xsIHVzZSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCkgYW5kIGNvbnZlcnQgdGhhdCB0byBhbiBhcnJheS4gSXQnbGwgYWxzbyBhY2NlcHQgaXRlcmFibGVzIGxpa2UgalF1ZXJ5IG9iamVjdHMuXHJcbnRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlLCBzY29wZSwgbGVhdmVTdHJpbmdzKSB7XHJcbiAgcmV0dXJuIF9jb250ZXh0ICYmICFzY29wZSAmJiBfY29udGV4dC5zZWxlY3RvciA/IF9jb250ZXh0LnNlbGVjdG9yKHZhbHVlKSA6IF9pc1N0cmluZyh2YWx1ZSkgJiYgIWxlYXZlU3RyaW5ncyAmJiAoX2NvcmVJbml0dGVkIHx8ICFfd2FrZSgpKSA/IF9zbGljZS5jYWxsKChzY29wZSB8fCBfZG9jKS5xdWVyeVNlbGVjdG9yQWxsKHZhbHVlKSwgMCkgOiBfaXNBcnJheSh2YWx1ZSkgPyBfZmxhdHRlbih2YWx1ZSwgbGVhdmVTdHJpbmdzKSA6IF9pc0FycmF5TGlrZSh2YWx1ZSkgPyBfc2xpY2UuY2FsbCh2YWx1ZSwgMCkgOiB2YWx1ZSA/IFt2YWx1ZV0gOiBbXTtcclxufSxcclxuICAgIHNlbGVjdG9yID0gZnVuY3Rpb24gc2VsZWN0b3IodmFsdWUpIHtcclxuICB2YWx1ZSA9IHRvQXJyYXkodmFsdWUpWzBdIHx8IF93YXJuKFwiSW52YWxpZCBzY29wZVwiKSB8fCB7fTtcclxuICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcclxuICAgIHZhciBlbCA9IHZhbHVlLmN1cnJlbnQgfHwgdmFsdWUubmF0aXZlRWxlbWVudCB8fCB2YWx1ZTtcclxuICAgIHJldHVybiB0b0FycmF5KHYsIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgPyBlbCA6IGVsID09PSB2YWx1ZSA/IF93YXJuKFwiSW52YWxpZCBzY29wZVwiKSB8fCBfZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiB2YWx1ZSk7XHJcbiAgfTtcclxufSxcclxuICAgIHNodWZmbGUgPSBmdW5jdGlvbiBzaHVmZmxlKGEpIHtcclxuICByZXR1cm4gYS5zb3J0KGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAuNSAtIE1hdGgucmFuZG9tKCk7XHJcbiAgfSk7XHJcbn0sXHJcbiAgICAvLyBhbHRlcm5hdGl2ZSB0aGF0J3MgYSBiaXQgZmFzdGVyIGFuZCBtb3JlIHJlbGlhYmx5IGRpdmVyc2UgYnV0IGJpZ2dlcjogICBmb3IgKGxldCBqLCB2LCBpID0gYS5sZW5ndGg7IGk7IGogPSAoTWF0aC5yYW5kb20oKSAqIGkpIHwgMCwgdiA9IGFbLS1pXSwgYVtpXSA9IGFbal0sIGFbal0gPSB2KTsgcmV0dXJuIGE7XHJcbi8vZm9yIGRpc3RyaWJ1dGluZyB2YWx1ZXMgYWNyb3NzIGFuIGFycmF5LiBDYW4gYWNjZXB0IGEgbnVtYmVyLCBhIGZ1bmN0aW9uIG9yIChtb3N0IGNvbW1vbmx5KSBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoge2Jhc2UsIGFtb3VudCwgZnJvbSwgZWFzZSwgZ3JpZCwgYXhpcywgbGVuZ3RoLCBlYWNofS4gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6IGluZGV4LCB0YXJnZXQsIGFycmF5LiBSZWNvZ25pemVzIHRoZSBmb2xsb3dpbmdcclxuZGlzdHJpYnV0ZSA9IGZ1bmN0aW9uIGRpc3RyaWJ1dGUodikge1xyXG4gIGlmIChfaXNGdW5jdGlvbih2KSkge1xyXG4gICAgcmV0dXJuIHY7XHJcbiAgfVxyXG5cclxuICB2YXIgdmFycyA9IF9pc09iamVjdCh2KSA/IHYgOiB7XHJcbiAgICBlYWNoOiB2XHJcbiAgfSxcclxuICAgICAgLy9uOjEgaXMganVzdCB0byBpbmRpY2F0ZSB2IHdhcyBhIG51bWJlcjsgd2UgbGV2ZXJhZ2UgdGhhdCBsYXRlciB0byBzZXQgdiBhY2NvcmRpbmcgdG8gdGhlIGxlbmd0aCB3ZSBnZXQuIElmIGEgbnVtYmVyIGlzIHBhc3NlZCBpbiwgd2UgdHJlYXQgaXQgbGlrZSB0aGUgb2xkIHN0YWdnZXIgdmFsdWUgd2hlcmUgMC4xLCBmb3IgZXhhbXBsZSwgd291bGQgbWVhbiB0aGF0IHRoaW5ncyB3b3VsZCBiZSBkaXN0cmlidXRlZCB3aXRoIDAuMSBiZXR3ZWVuIGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgcmF0aGVyIHRoYW4gYSB0b3RhbCBcImFtb3VudFwiIHRoYXQncyBjaHVua2VkIG91dCBhbW9uZyB0aGVtIGFsbC5cclxuICBlYXNlID0gX3BhcnNlRWFzZSh2YXJzLmVhc2UpLFxyXG4gICAgICBmcm9tID0gdmFycy5mcm9tIHx8IDAsXHJcbiAgICAgIGJhc2UgPSBwYXJzZUZsb2F0KHZhcnMuYmFzZSkgfHwgMCxcclxuICAgICAgY2FjaGUgPSB7fSxcclxuICAgICAgaXNEZWNpbWFsID0gZnJvbSA+IDAgJiYgZnJvbSA8IDEsXHJcbiAgICAgIHJhdGlvcyA9IGlzTmFOKGZyb20pIHx8IGlzRGVjaW1hbCxcclxuICAgICAgYXhpcyA9IHZhcnMuYXhpcyxcclxuICAgICAgcmF0aW9YID0gZnJvbSxcclxuICAgICAgcmF0aW9ZID0gZnJvbTtcclxuXHJcbiAgaWYgKF9pc1N0cmluZyhmcm9tKSkge1xyXG4gICAgcmF0aW9YID0gcmF0aW9ZID0ge1xyXG4gICAgICBjZW50ZXI6IC41LFxyXG4gICAgICBlZGdlczogLjUsXHJcbiAgICAgIGVuZDogMVxyXG4gICAgfVtmcm9tXSB8fCAwO1xyXG4gIH0gZWxzZSBpZiAoIWlzRGVjaW1hbCAmJiByYXRpb3MpIHtcclxuICAgIHJhdGlvWCA9IGZyb21bMF07XHJcbiAgICByYXRpb1kgPSBmcm9tWzFdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIChpLCB0YXJnZXQsIGEpIHtcclxuICAgIHZhciBsID0gKGEgfHwgdmFycykubGVuZ3RoLFxyXG4gICAgICAgIGRpc3RhbmNlcyA9IGNhY2hlW2xdLFxyXG4gICAgICAgIG9yaWdpblgsXHJcbiAgICAgICAgb3JpZ2luWSxcclxuICAgICAgICB4LFxyXG4gICAgICAgIHksXHJcbiAgICAgICAgZCxcclxuICAgICAgICBqLFxyXG4gICAgICAgIG1heCxcclxuICAgICAgICBtaW4sXHJcbiAgICAgICAgd3JhcEF0O1xyXG5cclxuICAgIGlmICghZGlzdGFuY2VzKSB7XHJcbiAgICAgIHdyYXBBdCA9IHZhcnMuZ3JpZCA9PT0gXCJhdXRvXCIgPyAwIDogKHZhcnMuZ3JpZCB8fCBbMSwgX2JpZ051bV0pWzFdO1xyXG5cclxuICAgICAgaWYgKCF3cmFwQXQpIHtcclxuICAgICAgICBtYXggPSAtX2JpZ051bTtcclxuXHJcbiAgICAgICAgd2hpbGUgKG1heCA8IChtYXggPSBhW3dyYXBBdCsrXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSAmJiB3cmFwQXQgPCBsKSB7fVxyXG5cclxuICAgICAgICB3cmFwQXQgPCBsICYmIHdyYXBBdC0tO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXN0YW5jZXMgPSBjYWNoZVtsXSA9IFtdO1xyXG4gICAgICBvcmlnaW5YID0gcmF0aW9zID8gTWF0aC5taW4od3JhcEF0LCBsKSAqIHJhdGlvWCAtIC41IDogZnJvbSAlIHdyYXBBdDtcclxuICAgICAgb3JpZ2luWSA9IHdyYXBBdCA9PT0gX2JpZ051bSA/IDAgOiByYXRpb3MgPyBsICogcmF0aW9ZIC8gd3JhcEF0IC0gLjUgOiBmcm9tIC8gd3JhcEF0IHwgMDtcclxuICAgICAgbWF4ID0gMDtcclxuICAgICAgbWluID0gX2JpZ051bTtcclxuXHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCBsOyBqKyspIHtcclxuICAgICAgICB4ID0gaiAlIHdyYXBBdCAtIG9yaWdpblg7XHJcbiAgICAgICAgeSA9IG9yaWdpblkgLSAoaiAvIHdyYXBBdCB8IDApO1xyXG4gICAgICAgIGRpc3RhbmNlc1tqXSA9IGQgPSAhYXhpcyA/IF9zcXJ0KHggKiB4ICsgeSAqIHkpIDogTWF0aC5hYnMoYXhpcyA9PT0gXCJ5XCIgPyB5IDogeCk7XHJcbiAgICAgICAgZCA+IG1heCAmJiAobWF4ID0gZCk7XHJcbiAgICAgICAgZCA8IG1pbiAmJiAobWluID0gZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZyb20gPT09IFwicmFuZG9tXCIgJiYgc2h1ZmZsZShkaXN0YW5jZXMpO1xyXG4gICAgICBkaXN0YW5jZXMubWF4ID0gbWF4IC0gbWluO1xyXG4gICAgICBkaXN0YW5jZXMubWluID0gbWluO1xyXG4gICAgICBkaXN0YW5jZXMudiA9IGwgPSAocGFyc2VGbG9hdCh2YXJzLmFtb3VudCkgfHwgcGFyc2VGbG9hdCh2YXJzLmVhY2gpICogKHdyYXBBdCA+IGwgPyBsIC0gMSA6ICFheGlzID8gTWF0aC5tYXgod3JhcEF0LCBsIC8gd3JhcEF0KSA6IGF4aXMgPT09IFwieVwiID8gbCAvIHdyYXBBdCA6IHdyYXBBdCkgfHwgMCkgKiAoZnJvbSA9PT0gXCJlZGdlc1wiID8gLTEgOiAxKTtcclxuICAgICAgZGlzdGFuY2VzLmIgPSBsIDwgMCA/IGJhc2UgLSBsIDogYmFzZTtcclxuICAgICAgZGlzdGFuY2VzLnUgPSBnZXRVbml0KHZhcnMuYW1vdW50IHx8IHZhcnMuZWFjaCkgfHwgMDsgLy91bml0XHJcblxyXG4gICAgICBlYXNlID0gZWFzZSAmJiBsIDwgMCA/IF9pbnZlcnRFYXNlKGVhc2UpIDogZWFzZTtcclxuICAgIH1cclxuXHJcbiAgICBsID0gKGRpc3RhbmNlc1tpXSAtIGRpc3RhbmNlcy5taW4pIC8gZGlzdGFuY2VzLm1heCB8fCAwO1xyXG4gICAgcmV0dXJuIF9yb3VuZFByZWNpc2UoZGlzdGFuY2VzLmIgKyAoZWFzZSA/IGVhc2UobCkgOiBsKSAqIGRpc3RhbmNlcy52KSArIGRpc3RhbmNlcy51OyAvL3JvdW5kIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIGZsb2F0aW5nIHBvaW50IGVycm9yc1xyXG4gIH07XHJcbn0sXHJcbiAgICBfcm91bmRNb2RpZmllciA9IGZ1bmN0aW9uIF9yb3VuZE1vZGlmaWVyKHYpIHtcclxuICAvL3Bhc3MgaW4gMC4xIGdldCBhIGZ1bmN0aW9uIHRoYXQnbGwgcm91bmQgdG8gdGhlIG5lYXJlc3QgdGVudGgsIG9yIDUgdG8gcm91bmQgdG8gdGhlIGNsb3Nlc3QgNSwgb3IgMC4wMDEgdG8gdGhlIGNsb3Nlc3QgMTAwMHRoLCBldGMuXHJcbiAgdmFyIHAgPSBNYXRoLnBvdygxMCwgKCh2ICsgXCJcIikuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aCk7IC8vdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGxpa2UgMjQgKiAwLjEgPT0gMi40MDAwMDAwMDAwMDAwMDA0KSwgd2UgY2hvcCBvZmYgYXQgYSBzcGVjaWZpYyBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgKG11Y2ggZmFzdGVyIHRoYW4gdG9GaXhlZCgpKVxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKHJhdykge1xyXG4gICAgdmFyIG4gPSBfcm91bmRQcmVjaXNlKE1hdGgucm91bmQocGFyc2VGbG9hdChyYXcpIC8gdikgKiB2ICogcCk7XHJcblxyXG4gICAgcmV0dXJuIChuIC0gbiAlIDEpIC8gcCArIChfaXNOdW1iZXIocmF3KSA/IDAgOiBnZXRVbml0KHJhdykpOyAvLyBuIC0gbiAlIDEgcmVwbGFjZXMgTWF0aC5mbG9vcigpIGluIG9yZGVyIHRvIGhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMgcHJvcGVybHkuIEZvciBleGFtcGxlLCBNYXRoLmZsb29yKC0xNTAuMDAwMDAwMDAwMDAwMDMpIGlzIDE1MSFcclxuICB9O1xyXG59LFxyXG4gICAgc25hcCA9IGZ1bmN0aW9uIHNuYXAoc25hcFRvLCB2YWx1ZSkge1xyXG4gIHZhciBpc0FycmF5ID0gX2lzQXJyYXkoc25hcFRvKSxcclxuICAgICAgcmFkaXVzLFxyXG4gICAgICBpczJEO1xyXG5cclxuICBpZiAoIWlzQXJyYXkgJiYgX2lzT2JqZWN0KHNuYXBUbykpIHtcclxuICAgIHJhZGl1cyA9IGlzQXJyYXkgPSBzbmFwVG8ucmFkaXVzIHx8IF9iaWdOdW07XHJcblxyXG4gICAgaWYgKHNuYXBUby52YWx1ZXMpIHtcclxuICAgICAgc25hcFRvID0gdG9BcnJheShzbmFwVG8udmFsdWVzKTtcclxuXHJcbiAgICAgIGlmIChpczJEID0gIV9pc051bWJlcihzbmFwVG9bMF0pKSB7XHJcbiAgICAgICAgcmFkaXVzICo9IHJhZGl1czsgLy9wZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gc28gd2UgZG9uJ3QgaGF2ZSB0byBNYXRoLnNxcnQoKSBpbiB0aGUgbG9vcC5cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc25hcFRvID0gX3JvdW5kTW9kaWZpZXIoc25hcFRvLmluY3JlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gX2NvbmRpdGlvbmFsUmV0dXJuKHZhbHVlLCAhaXNBcnJheSA/IF9yb3VuZE1vZGlmaWVyKHNuYXBUbykgOiBfaXNGdW5jdGlvbihzbmFwVG8pID8gZnVuY3Rpb24gKHJhdykge1xyXG4gICAgaXMyRCA9IHNuYXBUbyhyYXcpO1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKGlzMkQgLSByYXcpIDw9IHJhZGl1cyA/IGlzMkQgOiByYXc7XHJcbiAgfSA6IGZ1bmN0aW9uIChyYXcpIHtcclxuICAgIHZhciB4ID0gcGFyc2VGbG9hdChpczJEID8gcmF3LnggOiByYXcpLFxyXG4gICAgICAgIHkgPSBwYXJzZUZsb2F0KGlzMkQgPyByYXcueSA6IDApLFxyXG4gICAgICAgIG1pbiA9IF9iaWdOdW0sXHJcbiAgICAgICAgY2xvc2VzdCA9IDAsXHJcbiAgICAgICAgaSA9IHNuYXBUby5sZW5ndGgsXHJcbiAgICAgICAgZHgsXHJcbiAgICAgICAgZHk7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAoaXMyRCkge1xyXG4gICAgICAgIGR4ID0gc25hcFRvW2ldLnggLSB4O1xyXG4gICAgICAgIGR5ID0gc25hcFRvW2ldLnkgLSB5O1xyXG4gICAgICAgIGR4ID0gZHggKiBkeCArIGR5ICogZHk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZHggPSBNYXRoLmFicyhzbmFwVG9baV0gLSB4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGR4IDwgbWluKSB7XHJcbiAgICAgICAgbWluID0gZHg7XHJcbiAgICAgICAgY2xvc2VzdCA9IGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZXN0ID0gIXJhZGl1cyB8fCBtaW4gPD0gcmFkaXVzID8gc25hcFRvW2Nsb3Nlc3RdIDogcmF3O1xyXG4gICAgcmV0dXJuIGlzMkQgfHwgY2xvc2VzdCA9PT0gcmF3IHx8IF9pc051bWJlcihyYXcpID8gY2xvc2VzdCA6IGNsb3Nlc3QgKyBnZXRVbml0KHJhdyk7XHJcbiAgfSk7XHJcbn0sXHJcbiAgICByYW5kb20gPSBmdW5jdGlvbiByYW5kb20obWluLCBtYXgsIHJvdW5kaW5nSW5jcmVtZW50LCByZXR1cm5GdW5jdGlvbikge1xyXG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4oX2lzQXJyYXkobWluKSA/ICFtYXggOiByb3VuZGluZ0luY3JlbWVudCA9PT0gdHJ1ZSA/ICEhKHJvdW5kaW5nSW5jcmVtZW50ID0gMCkgOiAhcmV0dXJuRnVuY3Rpb24sIGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBfaXNBcnJheShtaW4pID8gbWluW35+KE1hdGgucmFuZG9tKCkgKiBtaW4ubGVuZ3RoKV0gOiAocm91bmRpbmdJbmNyZW1lbnQgPSByb3VuZGluZ0luY3JlbWVudCB8fCAxZS01KSAmJiAocmV0dXJuRnVuY3Rpb24gPSByb3VuZGluZ0luY3JlbWVudCA8IDEgPyBNYXRoLnBvdygxMCwgKHJvdW5kaW5nSW5jcmVtZW50ICsgXCJcIikubGVuZ3RoIC0gMikgOiAxKSAmJiBNYXRoLmZsb29yKE1hdGgucm91bmQoKG1pbiAtIHJvdW5kaW5nSW5jcmVtZW50IC8gMiArIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgcm91bmRpbmdJbmNyZW1lbnQgKiAuOTkpKSAvIHJvdW5kaW5nSW5jcmVtZW50KSAqIHJvdW5kaW5nSW5jcmVtZW50ICogcmV0dXJuRnVuY3Rpb24pIC8gcmV0dXJuRnVuY3Rpb247XHJcbiAgfSk7XHJcbn0sXHJcbiAgICBwaXBlID0gZnVuY3Rpb24gcGlwZSgpIHtcclxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3Rpb25zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xyXG4gICAgZnVuY3Rpb25zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHYsIGYpIHtcclxuICAgICAgcmV0dXJuIGYodik7XHJcbiAgICB9LCB2YWx1ZSk7XHJcbiAgfTtcclxufSxcclxuICAgIHVuaXRpemUgPSBmdW5jdGlvbiB1bml0aXplKGZ1bmMsIHVuaXQpIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuYyhwYXJzZUZsb2F0KHZhbHVlKSkgKyAodW5pdCB8fCBnZXRVbml0KHZhbHVlKSk7XHJcbiAgfTtcclxufSxcclxuICAgIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZShtaW4sIG1heCwgdmFsdWUpIHtcclxuICByZXR1cm4gbWFwUmFuZ2UobWluLCBtYXgsIDAsIDEsIHZhbHVlKTtcclxufSxcclxuICAgIF93cmFwQXJyYXkgPSBmdW5jdGlvbiBfd3JhcEFycmF5KGEsIHdyYXBwZXIsIHZhbHVlKSB7XHJcbiAgcmV0dXJuIF9jb25kaXRpb25hbFJldHVybih2YWx1ZSwgZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICByZXR1cm4gYVt+fndyYXBwZXIoaW5kZXgpXTtcclxuICB9KTtcclxufSxcclxuICAgIHdyYXAgPSBmdW5jdGlvbiB3cmFwKG1pbiwgbWF4LCB2YWx1ZSkge1xyXG4gIC8vIE5PVEU6IHdyYXAoKSBDQU5OT1QgYmUgYW4gYXJyb3cgZnVuY3Rpb24hIEEgdmVyeSBvZGQgY29tcGlsaW5nIGJ1ZyBjYXVzZXMgcHJvYmxlbXMgKHVucmVsYXRlZCB0byBHU0FQKS5cclxuICB2YXIgcmFuZ2UgPSBtYXggLSBtaW47XHJcbiAgcmV0dXJuIF9pc0FycmF5KG1pbikgPyBfd3JhcEFycmF5KG1pbiwgd3JhcCgwLCBtaW4ubGVuZ3RoKSwgbWF4KSA6IF9jb25kaXRpb25hbFJldHVybih2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHJhbmdlICsgKHZhbHVlIC0gbWluKSAlIHJhbmdlKSAlIHJhbmdlICsgbWluO1xyXG4gIH0pO1xyXG59LFxyXG4gICAgd3JhcFlveW8gPSBmdW5jdGlvbiB3cmFwWW95byhtaW4sIG1heCwgdmFsdWUpIHtcclxuICB2YXIgcmFuZ2UgPSBtYXggLSBtaW4sXHJcbiAgICAgIHRvdGFsID0gcmFuZ2UgKiAyO1xyXG4gIHJldHVybiBfaXNBcnJheShtaW4pID8gX3dyYXBBcnJheShtaW4sIHdyYXBZb3lvKDAsIG1pbi5sZW5ndGggLSAxKSwgbWF4KSA6IF9jb25kaXRpb25hbFJldHVybih2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICB2YWx1ZSA9ICh0b3RhbCArICh2YWx1ZSAtIG1pbikgJSB0b3RhbCkgJSB0b3RhbCB8fCAwO1xyXG4gICAgcmV0dXJuIG1pbiArICh2YWx1ZSA+IHJhbmdlID8gdG90YWwgLSB2YWx1ZSA6IHZhbHVlKTtcclxuICB9KTtcclxufSxcclxuICAgIF9yZXBsYWNlUmFuZG9tID0gZnVuY3Rpb24gX3JlcGxhY2VSYW5kb20odmFsdWUpIHtcclxuICAvL3JlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiByYW5kb20oLi4uKSBpbiBhIHN0cmluZyB3aXRoIHRoZSBjYWxjdWxhdGVkIHJhbmRvbSB2YWx1ZS4gY2FuIGJlIGEgcmFuZ2UgbGlrZSByYW5kb20oLTEwMCwgMTAwLCA1KSBvciBhbiBhcnJheSBsaWtlIHJhbmRvbShbMCwgMTAwLCA1MDBdKVxyXG4gIHZhciBwcmV2ID0gMCxcclxuICAgICAgcyA9IFwiXCIsXHJcbiAgICAgIGksXHJcbiAgICAgIG51bXMsXHJcbiAgICAgIGVuZCxcclxuICAgICAgaXNBcnJheTtcclxuXHJcbiAgd2hpbGUgKH4oaSA9IHZhbHVlLmluZGV4T2YoXCJyYW5kb20oXCIsIHByZXYpKSkge1xyXG4gICAgZW5kID0gdmFsdWUuaW5kZXhPZihcIilcIiwgaSk7XHJcbiAgICBpc0FycmF5ID0gdmFsdWUuY2hhckF0KGkgKyA3KSA9PT0gXCJbXCI7XHJcbiAgICBudW1zID0gdmFsdWUuc3Vic3RyKGkgKyA3LCBlbmQgLSBpIC0gNykubWF0Y2goaXNBcnJheSA/IF9kZWxpbWl0ZWRWYWx1ZUV4cCA6IF9zdHJpY3ROdW1FeHApO1xyXG4gICAgcyArPSB2YWx1ZS5zdWJzdHIocHJldiwgaSAtIHByZXYpICsgcmFuZG9tKGlzQXJyYXkgPyBudW1zIDogK251bXNbMF0sIGlzQXJyYXkgPyAwIDogK251bXNbMV0sICtudW1zWzJdIHx8IDFlLTUpO1xyXG4gICAgcHJldiA9IGVuZCArIDE7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcyArIHZhbHVlLnN1YnN0cihwcmV2LCB2YWx1ZS5sZW5ndGggLSBwcmV2KTtcclxufSxcclxuICAgIG1hcFJhbmdlID0gZnVuY3Rpb24gbWFwUmFuZ2UoaW5NaW4sIGluTWF4LCBvdXRNaW4sIG91dE1heCwgdmFsdWUpIHtcclxuICB2YXIgaW5SYW5nZSA9IGluTWF4IC0gaW5NaW4sXHJcbiAgICAgIG91dFJhbmdlID0gb3V0TWF4IC0gb3V0TWluO1xyXG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG91dE1pbiArICgodmFsdWUgLSBpbk1pbikgLyBpblJhbmdlICogb3V0UmFuZ2UgfHwgMCk7XHJcbiAgfSk7XHJcbn0sXHJcbiAgICBpbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIGludGVycG9sYXRlKHN0YXJ0LCBlbmQsIHByb2dyZXNzLCBtdXRhdGUpIHtcclxuICB2YXIgZnVuYyA9IGlzTmFOKHN0YXJ0ICsgZW5kKSA/IDAgOiBmdW5jdGlvbiAocCkge1xyXG4gICAgcmV0dXJuICgxIC0gcCkgKiBzdGFydCArIHAgKiBlbmQ7XHJcbiAgfTtcclxuXHJcbiAgaWYgKCFmdW5jKSB7XHJcbiAgICB2YXIgaXNTdHJpbmcgPSBfaXNTdHJpbmcoc3RhcnQpLFxyXG4gICAgICAgIG1hc3RlciA9IHt9LFxyXG4gICAgICAgIHAsXHJcbiAgICAgICAgaSxcclxuICAgICAgICBpbnRlcnBvbGF0b3JzLFxyXG4gICAgICAgIGwsXHJcbiAgICAgICAgaWw7XHJcblxyXG4gICAgcHJvZ3Jlc3MgPT09IHRydWUgJiYgKG11dGF0ZSA9IDEpICYmIChwcm9ncmVzcyA9IG51bGwpO1xyXG5cclxuICAgIGlmIChpc1N0cmluZykge1xyXG4gICAgICBzdGFydCA9IHtcclxuICAgICAgICBwOiBzdGFydFxyXG4gICAgICB9O1xyXG4gICAgICBlbmQgPSB7XHJcbiAgICAgICAgcDogZW5kXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2UgaWYgKF9pc0FycmF5KHN0YXJ0KSAmJiAhX2lzQXJyYXkoZW5kKSkge1xyXG4gICAgICBpbnRlcnBvbGF0b3JzID0gW107XHJcbiAgICAgIGwgPSBzdGFydC5sZW5ndGg7XHJcbiAgICAgIGlsID0gbCAtIDI7XHJcblxyXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaW50ZXJwb2xhdG9ycy5wdXNoKGludGVycG9sYXRlKHN0YXJ0W2kgLSAxXSwgc3RhcnRbaV0pKTsgLy9idWlsZCB0aGUgaW50ZXJwb2xhdG9ycyB1cCBmcm9udCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBzbyB0aGF0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBtYW55IHRpbWVzLCBpdCBjYW4ganVzdCByZXVzZSB0aGVtLlxyXG4gICAgICB9XHJcblxyXG4gICAgICBsLS07XHJcblxyXG4gICAgICBmdW5jID0gZnVuY3Rpb24gZnVuYyhwKSB7XHJcbiAgICAgICAgcCAqPSBsO1xyXG4gICAgICAgIHZhciBpID0gTWF0aC5taW4oaWwsIH5+cCk7XHJcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRvcnNbaV0ocCAtIGkpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcHJvZ3Jlc3MgPSBlbmQ7XHJcbiAgICB9IGVsc2UgaWYgKCFtdXRhdGUpIHtcclxuICAgICAgc3RhcnQgPSBfbWVyZ2UoX2lzQXJyYXkoc3RhcnQpID8gW10gOiB7fSwgc3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaW50ZXJwb2xhdG9ycykge1xyXG4gICAgICBmb3IgKHAgaW4gZW5kKSB7XHJcbiAgICAgICAgX2FkZFByb3BUd2Vlbi5jYWxsKG1hc3Rlciwgc3RhcnQsIHAsIFwiZ2V0XCIsIGVuZFtwXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKHApIHtcclxuICAgICAgICByZXR1cm4gX3JlbmRlclByb3BUd2VlbnMocCwgbWFzdGVyKSB8fCAoaXNTdHJpbmcgPyBzdGFydC5wIDogc3RhcnQpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIF9jb25kaXRpb25hbFJldHVybihwcm9ncmVzcywgZnVuYyk7XHJcbn0sXHJcbiAgICBfZ2V0TGFiZWxJbkRpcmVjdGlvbiA9IGZ1bmN0aW9uIF9nZXRMYWJlbEluRGlyZWN0aW9uKHRpbWVsaW5lLCBmcm9tVGltZSwgYmFja3dhcmQpIHtcclxuICAvL3VzZWQgZm9yIG5leHRMYWJlbCgpIGFuZCBwcmV2aW91c0xhYmVsKClcclxuICB2YXIgbGFiZWxzID0gdGltZWxpbmUubGFiZWxzLFxyXG4gICAgICBtaW4gPSBfYmlnTnVtLFxyXG4gICAgICBwLFxyXG4gICAgICBkaXN0YW5jZSxcclxuICAgICAgbGFiZWw7XHJcblxyXG4gIGZvciAocCBpbiBsYWJlbHMpIHtcclxuICAgIGRpc3RhbmNlID0gbGFiZWxzW3BdIC0gZnJvbVRpbWU7XHJcblxyXG4gICAgaWYgKGRpc3RhbmNlIDwgMCA9PT0gISFiYWNrd2FyZCAmJiBkaXN0YW5jZSAmJiBtaW4gPiAoZGlzdGFuY2UgPSBNYXRoLmFicyhkaXN0YW5jZSkpKSB7XHJcbiAgICAgIGxhYmVsID0gcDtcclxuICAgICAgbWluID0gZGlzdGFuY2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbGFiZWw7XHJcbn0sXHJcbiAgICBfY2FsbGJhY2sgPSBmdW5jdGlvbiBfY2FsbGJhY2soYW5pbWF0aW9uLCB0eXBlLCBleGVjdXRlTGF6eUZpcnN0KSB7XHJcbiAgdmFyIHYgPSBhbmltYXRpb24udmFycyxcclxuICAgICAgY2FsbGJhY2sgPSB2W3R5cGVdLFxyXG4gICAgICBwcmV2Q29udGV4dCA9IF9jb250ZXh0LFxyXG4gICAgICBjb250ZXh0ID0gYW5pbWF0aW9uLl9jdHgsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgc2NvcGUsXHJcbiAgICAgIHJlc3VsdDtcclxuXHJcbiAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcGFyYW1zID0gdlt0eXBlICsgXCJQYXJhbXNcIl07XHJcbiAgc2NvcGUgPSB2LmNhbGxiYWNrU2NvcGUgfHwgYW5pbWF0aW9uO1xyXG4gIGV4ZWN1dGVMYXp5Rmlyc3QgJiYgX2xhenlUd2VlbnMubGVuZ3RoICYmIF9sYXp5UmVuZGVyKCk7IC8vaW4gY2FzZSByZW5kZXJpbmcgY2F1c2VkIGFueSB0d2VlbnMgdG8gbGF6eS1pbml0LCB3ZSBzaG91bGQgcmVuZGVyIHRoZW0gYmVjYXVzZSB0eXBpY2FsbHkgd2hlbiBhIHRpbWVsaW5lIGZpbmlzaGVzLCB1c2VycyBleHBlY3QgdGhpbmdzIHRvIGhhdmUgcmVuZGVyZWQgZnVsbHkuIEltYWdpbmUgYW4gb25VcGRhdGUgb24gYSB0aW1lbGluZSB0aGF0IHJlcG9ydHMvY2hlY2tzIHR3ZWVuZWQgdmFsdWVzLlxyXG5cclxuICBjb250ZXh0ICYmIChfY29udGV4dCA9IGNvbnRleHQpO1xyXG4gIHJlc3VsdCA9IHBhcmFtcyA/IGNhbGxiYWNrLmFwcGx5KHNjb3BlLCBwYXJhbXMpIDogY2FsbGJhY2suY2FsbChzY29wZSk7XHJcbiAgX2NvbnRleHQgPSBwcmV2Q29udGV4dDtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59LFxyXG4gICAgX2ludGVycnVwdCA9IGZ1bmN0aW9uIF9pbnRlcnJ1cHQoYW5pbWF0aW9uKSB7XHJcbiAgX3JlbW92ZUZyb21QYXJlbnQoYW5pbWF0aW9uKTtcclxuXHJcbiAgYW5pbWF0aW9uLnNjcm9sbFRyaWdnZXIgJiYgYW5pbWF0aW9uLnNjcm9sbFRyaWdnZXIua2lsbCghIV9yZXZlcnRpbmcpO1xyXG4gIGFuaW1hdGlvbi5wcm9ncmVzcygpIDwgMSAmJiBfY2FsbGJhY2soYW5pbWF0aW9uLCBcIm9uSW50ZXJydXB0XCIpO1xyXG4gIHJldHVybiBhbmltYXRpb247XHJcbn0sXHJcbiAgICBfcXVpY2tUd2VlbixcclxuICAgIF9yZWdpc3RlclBsdWdpblF1ZXVlID0gW10sXHJcbiAgICBfY3JlYXRlUGx1Z2luID0gZnVuY3Rpb24gX2NyZWF0ZVBsdWdpbihjb25maWcpIHtcclxuICBpZiAoIWNvbmZpZykgcmV0dXJuO1xyXG4gIGNvbmZpZyA9ICFjb25maWcubmFtZSAmJiBjb25maWdbXCJkZWZhdWx0XCJdIHx8IGNvbmZpZzsgLy8gVU1EIHBhY2thZ2luZyB3cmFwcyB0aGluZ3Mgb2RkbHksIHNvIGZvciBleGFtcGxlIE1vdGlvblBhdGhIZWxwZXIgYmVjb21lcyB7TW90aW9uUGF0aEhlbHBlcjpNb3Rpb25QYXRoSGVscGVyLCBkZWZhdWx0Ok1vdGlvblBhdGhIZWxwZXJ9LlxyXG5cclxuICBpZiAoX3dpbmRvd0V4aXN0cygpIHx8IGNvbmZpZy5oZWFkbGVzcykge1xyXG4gICAgLy8gZWRnZSBjYXNlOiBzb21lIGJ1aWxkIHRvb2xzIG1heSBwYXNzIGluIGEgbnVsbC91bmRlZmluZWQgdmFsdWVcclxuICAgIHZhciBuYW1lID0gY29uZmlnLm5hbWUsXHJcbiAgICAgICAgaXNGdW5jID0gX2lzRnVuY3Rpb24oY29uZmlnKSxcclxuICAgICAgICBQbHVnaW4gPSBuYW1lICYmICFpc0Z1bmMgJiYgY29uZmlnLmluaXQgPyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMuX3Byb3BzID0gW107XHJcbiAgICB9IDogY29uZmlnLFxyXG4gICAgICAgIC8vaW4gY2FzZSBzb21lb25lIHBhc3NlcyBpbiBhbiBvYmplY3QgdGhhdCdzIG5vdCBhIHBsdWdpbiwgbGlrZSBDdXN0b21FYXNlXHJcbiAgICBpbnN0YW5jZURlZmF1bHRzID0ge1xyXG4gICAgICBpbml0OiBfZW1wdHlGdW5jLFxyXG4gICAgICByZW5kZXI6IF9yZW5kZXJQcm9wVHdlZW5zLFxyXG4gICAgICBhZGQ6IF9hZGRQcm9wVHdlZW4sXHJcbiAgICAgIGtpbGw6IF9raWxsUHJvcFR3ZWVuc09mLFxyXG4gICAgICBtb2RpZmllcjogX2FkZFBsdWdpbk1vZGlmaWVyLFxyXG4gICAgICByYXdWYXJzOiAwXHJcbiAgICB9LFxyXG4gICAgICAgIHN0YXRpY3MgPSB7XHJcbiAgICAgIHRhcmdldFRlc3Q6IDAsXHJcbiAgICAgIGdldDogMCxcclxuICAgICAgZ2V0U2V0dGVyOiBfZ2V0U2V0dGVyLFxyXG4gICAgICBhbGlhc2VzOiB7fSxcclxuICAgICAgcmVnaXN0ZXI6IDBcclxuICAgIH07XHJcblxyXG4gICAgX3dha2UoKTtcclxuXHJcbiAgICBpZiAoY29uZmlnICE9PSBQbHVnaW4pIHtcclxuICAgICAgaWYgKF9wbHVnaW5zW25hbWVdKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBfc2V0RGVmYXVsdHMoUGx1Z2luLCBfc2V0RGVmYXVsdHMoX2NvcHlFeGNsdWRpbmcoY29uZmlnLCBpbnN0YW5jZURlZmF1bHRzKSwgc3RhdGljcykpOyAvL3N0YXRpYyBtZXRob2RzXHJcblxyXG5cclxuICAgICAgX21lcmdlKFBsdWdpbi5wcm90b3R5cGUsIF9tZXJnZShpbnN0YW5jZURlZmF1bHRzLCBfY29weUV4Y2x1ZGluZyhjb25maWcsIHN0YXRpY3MpKSk7IC8vaW5zdGFuY2UgbWV0aG9kc1xyXG5cclxuXHJcbiAgICAgIF9wbHVnaW5zW1BsdWdpbi5wcm9wID0gbmFtZV0gPSBQbHVnaW47XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnRhcmdldFRlc3QpIHtcclxuICAgICAgICBfaGFybmVzc1BsdWdpbnMucHVzaChQbHVnaW4pO1xyXG5cclxuICAgICAgICBfcmVzZXJ2ZWRQcm9wc1tuYW1lXSA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5hbWUgPSAobmFtZSA9PT0gXCJjc3NcIiA/IFwiQ1NTXCIgOiBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHIoMSkpICsgXCJQbHVnaW5cIjsgLy9mb3IgdGhlIGdsb2JhbCBuYW1lLiBcIm1vdGlvblBhdGhcIiBzaG91bGQgYmVjb21lIE1vdGlvblBhdGhQbHVnaW5cclxuICAgIH1cclxuXHJcbiAgICBfYWRkR2xvYmFsKG5hbWUsIFBsdWdpbik7XHJcblxyXG4gICAgY29uZmlnLnJlZ2lzdGVyICYmIGNvbmZpZy5yZWdpc3Rlcihnc2FwLCBQbHVnaW4sIFByb3BUd2Vlbik7XHJcbiAgfSBlbHNlIHtcclxuICAgIF9yZWdpc3RlclBsdWdpblF1ZXVlLnB1c2goY29uZmlnKTtcclxuICB9XHJcbn0sXHJcblxyXG4vKlxyXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKiBDT0xPUlNcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICovXHJcbl8yNTUgPSAyNTUsXHJcbiAgICBfY29sb3JMb29rdXAgPSB7XHJcbiAgYXF1YTogWzAsIF8yNTUsIF8yNTVdLFxyXG4gIGxpbWU6IFswLCBfMjU1LCAwXSxcclxuICBzaWx2ZXI6IFsxOTIsIDE5MiwgMTkyXSxcclxuICBibGFjazogWzAsIDAsIDBdLFxyXG4gIG1hcm9vbjogWzEyOCwgMCwgMF0sXHJcbiAgdGVhbDogWzAsIDEyOCwgMTI4XSxcclxuICBibHVlOiBbMCwgMCwgXzI1NV0sXHJcbiAgbmF2eTogWzAsIDAsIDEyOF0sXHJcbiAgd2hpdGU6IFtfMjU1LCBfMjU1LCBfMjU1XSxcclxuICBvbGl2ZTogWzEyOCwgMTI4LCAwXSxcclxuICB5ZWxsb3c6IFtfMjU1LCBfMjU1LCAwXSxcclxuICBvcmFuZ2U6IFtfMjU1LCAxNjUsIDBdLFxyXG4gIGdyYXk6IFsxMjgsIDEyOCwgMTI4XSxcclxuICBwdXJwbGU6IFsxMjgsIDAsIDEyOF0sXHJcbiAgZ3JlZW46IFswLCAxMjgsIDBdLFxyXG4gIHJlZDogW18yNTUsIDAsIDBdLFxyXG4gIHBpbms6IFtfMjU1LCAxOTIsIDIwM10sXHJcbiAgY3lhbjogWzAsIF8yNTUsIF8yNTVdLFxyXG4gIHRyYW5zcGFyZW50OiBbXzI1NSwgXzI1NSwgXzI1NSwgMF1cclxufSxcclxuICAgIC8vIHBvc3NpYmxlIGZ1dHVyZSBpZGVhIHRvIHJlcGxhY2UgdGhlIGhhcmQtY29kZWQgY29sb3IgbmFtZSB2YWx1ZXMgLSBwdXQgdGhpcyBpbiB0aGUgdGlja2VyLndha2UoKSB3aGVyZSB3ZSBzZXQgdGhlIF9kb2M6XHJcbi8vIGxldCBjdHggPSBfZG9jLmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4vLyBfZm9yRWFjaE5hbWUoXCJhcXVhLGxpbWUsc2lsdmVyLGJsYWNrLG1hcm9vbix0ZWFsLGJsdWUsbmF2eSx3aGl0ZSxvbGl2ZSx5ZWxsb3csb3JhbmdlLGdyYXkscHVycGxlLGdyZWVuLHJlZCxwaW5rLGN5YW5cIiwgY29sb3IgPT4ge2N0eC5maWxsU3R5bGUgPSBjb2xvcjsgX2NvbG9yTG9va3VwW2NvbG9yXSA9IHNwbGl0Q29sb3IoY3R4LmZpbGxTdHlsZSl9KTtcclxuX2h1ZSA9IGZ1bmN0aW9uIF9odWUoaCwgbTEsIG0yKSB7XHJcbiAgaCArPSBoIDwgMCA/IDEgOiBoID4gMSA/IC0xIDogMDtcclxuICByZXR1cm4gKGggKiA2IDwgMSA/IG0xICsgKG0yIC0gbTEpICogaCAqIDYgOiBoIDwgLjUgPyBtMiA6IGggKiAzIDwgMiA/IG0xICsgKG0yIC0gbTEpICogKDIgLyAzIC0gaCkgKiA2IDogbTEpICogXzI1NSArIC41IHwgMDtcclxufSxcclxuICAgIHNwbGl0Q29sb3IgPSBmdW5jdGlvbiBzcGxpdENvbG9yKHYsIHRvSFNMLCBmb3JjZUFscGhhKSB7XHJcbiAgdmFyIGEgPSAhdiA/IF9jb2xvckxvb2t1cC5ibGFjayA6IF9pc051bWJlcih2KSA/IFt2ID4+IDE2LCB2ID4+IDggJiBfMjU1LCB2ICYgXzI1NV0gOiAwLFxyXG4gICAgICByLFxyXG4gICAgICBnLFxyXG4gICAgICBiLFxyXG4gICAgICBoLFxyXG4gICAgICBzLFxyXG4gICAgICBsLFxyXG4gICAgICBtYXgsXHJcbiAgICAgIG1pbixcclxuICAgICAgZCxcclxuICAgICAgd2FzSFNMO1xyXG5cclxuICBpZiAoIWEpIHtcclxuICAgIGlmICh2LnN1YnN0cigtMSkgPT09IFwiLFwiKSB7XHJcbiAgICAgIC8vc29tZXRpbWVzIGEgdHJhaWxpbmcgY29tbWEgaXMgaW5jbHVkZWQgYW5kIHdlIHNob3VsZCBjaG9wIGl0IG9mZiAodHlwaWNhbGx5IGZyb20gYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiB2YWx1ZXMgbGlrZSBhIHRleHRTaGFkb3c6XCIycHggMnB4IDJweCBibHVlLCA1cHggNXB4IDVweCByZ2IoMjU1LDAsMClcIiAtIGluIHRoaXMgZXhhbXBsZSBcImJsdWUsXCIgaGFzIGEgdHJhaWxpbmcgY29tbWEuIFdlIGNvdWxkIHN0cmlwIGl0IG91dCBpbnNpZGUgcGFyc2VDb21wbGV4KCkgYnV0IHdlJ2QgbmVlZCB0byBkbyBpdCB0byB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgdmFsdWVzIHBsdXMgaXQgd291bGRuJ3QgcHJvdmlkZSBwcm90ZWN0aW9uIGZyb20gb3RoZXIgcG90ZW50aWFsIHNjZW5hcmlvcyBsaWtlIGlmIHRoZSB1c2VyIHBhc3NlcyBpbiBhIHNpbWlsYXIgdmFsdWUuXHJcbiAgICAgIHYgPSB2LnN1YnN0cigwLCB2Lmxlbmd0aCAtIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChfY29sb3JMb29rdXBbdl0pIHtcclxuICAgICAgYSA9IF9jb2xvckxvb2t1cFt2XTtcclxuICAgIH0gZWxzZSBpZiAodi5jaGFyQXQoMCkgPT09IFwiI1wiKSB7XHJcbiAgICAgIGlmICh2Lmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAvL2ZvciBzaG9ydGhhbmQgbGlrZSAjOUYwIG9yICM5RjBGIChjb3VsZCBoYXZlIGFscGhhKVxyXG4gICAgICAgIHIgPSB2LmNoYXJBdCgxKTtcclxuICAgICAgICBnID0gdi5jaGFyQXQoMik7XHJcbiAgICAgICAgYiA9IHYuY2hhckF0KDMpO1xyXG4gICAgICAgIHYgPSBcIiNcIiArIHIgKyByICsgZyArIGcgKyBiICsgYiArICh2Lmxlbmd0aCA9PT0gNSA/IHYuY2hhckF0KDQpICsgdi5jaGFyQXQoNCkgOiBcIlwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHYubGVuZ3RoID09PSA5KSB7XHJcbiAgICAgICAgLy8gaGV4IHdpdGggYWxwaGEsIGxpa2UgI2ZkNWU1M2ZmXHJcbiAgICAgICAgYSA9IHBhcnNlSW50KHYuc3Vic3RyKDEsIDYpLCAxNik7XHJcbiAgICAgICAgcmV0dXJuIFthID4+IDE2LCBhID4+IDggJiBfMjU1LCBhICYgXzI1NSwgcGFyc2VJbnQodi5zdWJzdHIoNyksIDE2KSAvIDI1NV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHYgPSBwYXJzZUludCh2LnN1YnN0cigxKSwgMTYpO1xyXG4gICAgICBhID0gW3YgPj4gMTYsIHYgPj4gOCAmIF8yNTUsIHYgJiBfMjU1XTtcclxuICAgIH0gZWxzZSBpZiAodi5zdWJzdHIoMCwgMykgPT09IFwiaHNsXCIpIHtcclxuICAgICAgYSA9IHdhc0hTTCA9IHYubWF0Y2goX3N0cmljdE51bUV4cCk7XHJcblxyXG4gICAgICBpZiAoIXRvSFNMKSB7XHJcbiAgICAgICAgaCA9ICthWzBdICUgMzYwIC8gMzYwO1xyXG4gICAgICAgIHMgPSArYVsxXSAvIDEwMDtcclxuICAgICAgICBsID0gK2FbMl0gLyAxMDA7XHJcbiAgICAgICAgZyA9IGwgPD0gLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gbCAqIHM7XHJcbiAgICAgICAgciA9IGwgKiAyIC0gZztcclxuICAgICAgICBhLmxlbmd0aCA+IDMgJiYgKGFbM10gKj0gMSk7IC8vY2FzdCBhcyBudW1iZXJcclxuXHJcbiAgICAgICAgYVswXSA9IF9odWUoaCArIDEgLyAzLCByLCBnKTtcclxuICAgICAgICBhWzFdID0gX2h1ZShoLCByLCBnKTtcclxuICAgICAgICBhWzJdID0gX2h1ZShoIC0gMSAvIDMsIHIsIGcpO1xyXG4gICAgICB9IGVsc2UgaWYgKH52LmluZGV4T2YoXCI9XCIpKSB7XHJcbiAgICAgICAgLy9pZiByZWxhdGl2ZSB2YWx1ZXMgYXJlIGZvdW5kLCBqdXN0IHJldHVybiB0aGUgcmF3IHN0cmluZ3Mgd2l0aCB0aGUgcmVsYXRpdmUgcHJlZml4ZXMgaW4gcGxhY2UuXHJcbiAgICAgICAgYSA9IHYubWF0Y2goX251bUV4cCk7XHJcbiAgICAgICAgZm9yY2VBbHBoYSAmJiBhLmxlbmd0aCA8IDQgJiYgKGFbM10gPSAxKTtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYSA9IHYubWF0Y2goX3N0cmljdE51bUV4cCkgfHwgX2NvbG9yTG9va3VwLnRyYW5zcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGEgPSBhLm1hcChOdW1iZXIpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRvSFNMICYmICF3YXNIU0wpIHtcclxuICAgIHIgPSBhWzBdIC8gXzI1NTtcclxuICAgIGcgPSBhWzFdIC8gXzI1NTtcclxuICAgIGIgPSBhWzJdIC8gXzI1NTtcclxuICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xyXG4gICAgbWluID0gTWF0aC5taW4ociwgZywgYik7XHJcbiAgICBsID0gKG1heCArIG1pbikgLyAyO1xyXG5cclxuICAgIGlmIChtYXggPT09IG1pbikge1xyXG4gICAgICBoID0gcyA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkID0gbWF4IC0gbWluO1xyXG4gICAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XHJcbiAgICAgIGggPSBtYXggPT09IHIgPyAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKSA6IG1heCA9PT0gZyA/IChiIC0gcikgLyBkICsgMiA6IChyIC0gZykgLyBkICsgNDtcclxuICAgICAgaCAqPSA2MDtcclxuICAgIH1cclxuXHJcbiAgICBhWzBdID0gfn4oaCArIC41KTtcclxuICAgIGFbMV0gPSB+fihzICogMTAwICsgLjUpO1xyXG4gICAgYVsyXSA9IH5+KGwgKiAxMDAgKyAuNSk7XHJcbiAgfVxyXG5cclxuICBmb3JjZUFscGhhICYmIGEubGVuZ3RoIDwgNCAmJiAoYVszXSA9IDEpO1xyXG4gIHJldHVybiBhO1xyXG59LFxyXG4gICAgX2NvbG9yT3JkZXJEYXRhID0gZnVuY3Rpb24gX2NvbG9yT3JkZXJEYXRhKHYpIHtcclxuICAvLyBzdHJpcHMgb3V0IHRoZSBjb2xvcnMgZnJvbSB0aGUgc3RyaW5nLCBmaW5kcyBhbGwgdGhlIG51bWVyaWMgc2xvdHMgKHdpdGggdW5pdHMpIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRob3NlLiBUaGUgQXJyYXkgYWxzbyBoYXMgYSBcImNcIiBwcm9wZXJ0eSB3aGljaCBpcyBhbiBBcnJheSBvZiB0aGUgaW5kZXggdmFsdWVzIHdoZXJlIHRoZSBjb2xvcnMgYmVsb25nLiBUaGlzIGlzIHRvIGhlbHAgd29yayBhcm91bmQgaXNzdWVzIHdoZXJlIHRoZXJlJ3MgYSBtaXMtbWF0Y2hlZCBvcmRlciBvZiBjb2xvci9udW1lcmljIGRhdGEgbGlrZSBkcm9wLXNoYWRvdygjZjAwIDBweCAxcHggMnB4KSBhbmQgZHJvcC1zaGFkb3coMHggMXB4IDJweCAjZjAwKS4gVGhpcyBpcyBiYXNpY2FsbHkgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBpbiBfZm9ybWF0Q29sb3JzKClcclxuICB2YXIgdmFsdWVzID0gW10sXHJcbiAgICAgIGMgPSBbXSxcclxuICAgICAgaSA9IC0xO1xyXG4gIHYuc3BsaXQoX2NvbG9yRXhwKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XHJcbiAgICB2YXIgYSA9IHYubWF0Y2goX251bVdpdGhVbml0RXhwKSB8fCBbXTtcclxuICAgIHZhbHVlcy5wdXNoLmFwcGx5KHZhbHVlcywgYSk7XHJcbiAgICBjLnB1c2goaSArPSBhLmxlbmd0aCArIDEpO1xyXG4gIH0pO1xyXG4gIHZhbHVlcy5jID0gYztcclxuICByZXR1cm4gdmFsdWVzO1xyXG59LFxyXG4gICAgX2Zvcm1hdENvbG9ycyA9IGZ1bmN0aW9uIF9mb3JtYXRDb2xvcnMocywgdG9IU0wsIG9yZGVyTWF0Y2hEYXRhKSB7XHJcbiAgdmFyIHJlc3VsdCA9IFwiXCIsXHJcbiAgICAgIGNvbG9ycyA9IChzICsgcmVzdWx0KS5tYXRjaChfY29sb3JFeHApLFxyXG4gICAgICB0eXBlID0gdG9IU0wgPyBcImhzbGEoXCIgOiBcInJnYmEoXCIsXHJcbiAgICAgIGkgPSAwLFxyXG4gICAgICBjLFxyXG4gICAgICBzaGVsbCxcclxuICAgICAgZCxcclxuICAgICAgbDtcclxuXHJcbiAgaWYgKCFjb2xvcnMpIHtcclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxuXHJcbiAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcclxuICAgIHJldHVybiAoY29sb3IgPSBzcGxpdENvbG9yKGNvbG9yLCB0b0hTTCwgMSkpICYmIHR5cGUgKyAodG9IU0wgPyBjb2xvclswXSArIFwiLFwiICsgY29sb3JbMV0gKyBcIiUsXCIgKyBjb2xvclsyXSArIFwiJSxcIiArIGNvbG9yWzNdIDogY29sb3Iuam9pbihcIixcIikpICsgXCIpXCI7XHJcbiAgfSk7XHJcblxyXG4gIGlmIChvcmRlck1hdGNoRGF0YSkge1xyXG4gICAgZCA9IF9jb2xvck9yZGVyRGF0YShzKTtcclxuICAgIGMgPSBvcmRlck1hdGNoRGF0YS5jO1xyXG5cclxuICAgIGlmIChjLmpvaW4ocmVzdWx0KSAhPT0gZC5jLmpvaW4ocmVzdWx0KSkge1xyXG4gICAgICBzaGVsbCA9IHMucmVwbGFjZShfY29sb3JFeHAsIFwiMVwiKS5zcGxpdChfbnVtV2l0aFVuaXRFeHApO1xyXG4gICAgICBsID0gc2hlbGwubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IHNoZWxsW2ldICsgKH5jLmluZGV4T2YoaSkgPyBjb2xvcnMuc2hpZnQoKSB8fCB0eXBlICsgXCIwLDAsMCwwKVwiIDogKGQubGVuZ3RoID8gZCA6IGNvbG9ycy5sZW5ndGggPyBjb2xvcnMgOiBvcmRlck1hdGNoRGF0YSkuc2hpZnQoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICghc2hlbGwpIHtcclxuICAgIHNoZWxsID0gcy5zcGxpdChfY29sb3JFeHApO1xyXG4gICAgbCA9IHNoZWxsLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgcmVzdWx0ICs9IHNoZWxsW2ldICsgY29sb3JzW2ldO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdCArIHNoZWxsW2xdO1xyXG59LFxyXG4gICAgX2NvbG9yRXhwID0gZnVuY3Rpb24gKCkge1xyXG4gIHZhciBzID0gXCIoPzpcXFxcYig/Oig/OnJnYnxyZ2JhfGhzbHxoc2xhKVxcXFwoLis/XFxcXCkpfFxcXFxCIyg/OlswLTlhLWZdezMsNH0pezEsMn1cXFxcYlwiLFxyXG4gICAgICAvL3dlJ2xsIGR5bmFtaWNhbGx5IGJ1aWxkIHRoaXMgUmVndWxhciBFeHByZXNzaW9uIHRvIGNvbnNlcnZlIGZpbGUgc2l6ZS4gQWZ0ZXIgYnVpbGRpbmcgaXQsIGl0IHdpbGwgYmUgYWJsZSB0byBmaW5kIHJnYigpLCByZ2JhKCksICMgKGhleGFkZWNpbWFsKSwgYW5kIG5hbWVkIGNvbG9yIHZhbHVlcyBsaWtlIHJlZCwgYmx1ZSwgcHVycGxlLCBldGMuLFxyXG4gIHA7XHJcblxyXG4gIGZvciAocCBpbiBfY29sb3JMb29rdXApIHtcclxuICAgIHMgKz0gXCJ8XCIgKyBwICsgXCJcXFxcYlwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG5ldyBSZWdFeHAocyArIFwiKVwiLCBcImdpXCIpO1xyXG59KCksXHJcbiAgICBfaHNsRXhwID0gL2hzbFthXT9cXCgvLFxyXG4gICAgX2NvbG9yU3RyaW5nRmlsdGVyID0gZnVuY3Rpb24gX2NvbG9yU3RyaW5nRmlsdGVyKGEpIHtcclxuICB2YXIgY29tYmluZWQgPSBhLmpvaW4oXCIgXCIpLFxyXG4gICAgICB0b0hTTDtcclxuICBfY29sb3JFeHAubGFzdEluZGV4ID0gMDtcclxuXHJcbiAgaWYgKF9jb2xvckV4cC50ZXN0KGNvbWJpbmVkKSkge1xyXG4gICAgdG9IU0wgPSBfaHNsRXhwLnRlc3QoY29tYmluZWQpO1xyXG4gICAgYVsxXSA9IF9mb3JtYXRDb2xvcnMoYVsxXSwgdG9IU0wpO1xyXG4gICAgYVswXSA9IF9mb3JtYXRDb2xvcnMoYVswXSwgdG9IU0wsIF9jb2xvck9yZGVyRGF0YShhWzFdKSk7IC8vIG1ha2Ugc3VyZSB0aGUgb3JkZXIgb2YgbnVtYmVycy9jb2xvcnMgbWF0Y2ggd2l0aCB0aGUgRU5EIHZhbHVlLlxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufSxcclxuXHJcbi8qXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAqIFRJQ0tFUlxyXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKi9cclxuX3RpY2tlckFjdGl2ZSxcclxuICAgIF90aWNrZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgdmFyIF9nZXRUaW1lID0gRGF0ZS5ub3csXHJcbiAgICAgIF9sYWdUaHJlc2hvbGQgPSA1MDAsXHJcbiAgICAgIF9hZGp1c3RlZExhZyA9IDMzLFxyXG4gICAgICBfc3RhcnRUaW1lID0gX2dldFRpbWUoKSxcclxuICAgICAgX2xhc3RVcGRhdGUgPSBfc3RhcnRUaW1lLFxyXG4gICAgICBfZ2FwID0gMTAwMCAvIDI0MCxcclxuICAgICAgX25leHRUaW1lID0gX2dhcCxcclxuICAgICAgX2xpc3RlbmVycyA9IFtdLFxyXG4gICAgICBfaWQsXHJcbiAgICAgIF9yZXEsXHJcbiAgICAgIF9yYWYsXHJcbiAgICAgIF9zZWxmLFxyXG4gICAgICBfZGVsdGEsXHJcbiAgICAgIF9pLFxyXG4gICAgICBfdGljayA9IGZ1bmN0aW9uIF90aWNrKHYpIHtcclxuICAgIHZhciBlbGFwc2VkID0gX2dldFRpbWUoKSAtIF9sYXN0VXBkYXRlLFxyXG4gICAgICAgIG1hbnVhbCA9IHYgPT09IHRydWUsXHJcbiAgICAgICAgb3ZlcmxhcCxcclxuICAgICAgICBkaXNwYXRjaCxcclxuICAgICAgICB0aW1lLFxyXG4gICAgICAgIGZyYW1lO1xyXG5cclxuICAgIChlbGFwc2VkID4gX2xhZ1RocmVzaG9sZCB8fCBlbGFwc2VkIDwgMCkgJiYgKF9zdGFydFRpbWUgKz0gZWxhcHNlZCAtIF9hZGp1c3RlZExhZyk7XHJcbiAgICBfbGFzdFVwZGF0ZSArPSBlbGFwc2VkO1xyXG4gICAgdGltZSA9IF9sYXN0VXBkYXRlIC0gX3N0YXJ0VGltZTtcclxuICAgIG92ZXJsYXAgPSB0aW1lIC0gX25leHRUaW1lO1xyXG5cclxuICAgIGlmIChvdmVybGFwID4gMCB8fCBtYW51YWwpIHtcclxuICAgICAgZnJhbWUgPSArK19zZWxmLmZyYW1lO1xyXG4gICAgICBfZGVsdGEgPSB0aW1lIC0gX3NlbGYudGltZSAqIDEwMDA7XHJcbiAgICAgIF9zZWxmLnRpbWUgPSB0aW1lID0gdGltZSAvIDEwMDA7XHJcbiAgICAgIF9uZXh0VGltZSArPSBvdmVybGFwICsgKG92ZXJsYXAgPj0gX2dhcCA/IDQgOiBfZ2FwIC0gb3ZlcmxhcCk7XHJcbiAgICAgIGRpc3BhdGNoID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBtYW51YWwgfHwgKF9pZCA9IF9yZXEoX3RpY2spKTsgLy9tYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgbWFkZSBiZWZvcmUgd2UgZGlzcGF0Y2ggdGhlIFwidGlja1wiIGV2ZW50IHNvIHRoYXQgdGltaW5nIGlzIG1haW50YWluZWQuIE90aGVyd2lzZSwgaWYgcHJvY2Vzc2luZyB0aGUgXCJ0aWNrXCIgcmVxdWlyZXMgYSBidW5jaCBvZiB0aW1lIChsaWtlIDE1bXMpIGFuZCB3ZSdyZSB1c2luZyBhIHNldFRpbWVvdXQoKSB0aGF0J3MgYmFzZWQgb24gMTYuN21zLCBpdCdkIHRlY2huaWNhbGx5IHRha2UgMzEuN21zIGJldHdlZW4gZnJhbWVzIG90aGVyd2lzZS5cclxuXHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgZm9yIChfaSA9IDA7IF9pIDwgX2xpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAvLyB1c2UgX2kgYW5kIGNoZWNrIF9saXN0ZW5lcnMubGVuZ3RoIGluc3RlYWQgb2YgYSB2YXJpYWJsZSBiZWNhdXNlIGEgbGlzdGVuZXIgY291bGQgZ2V0IHJlbW92ZWQgZHVyaW5nIHRoZSBsb29wLCBhbmQgaWYgdGhhdCBoYXBwZW5zIHRvIGFuIGVsZW1lbnQgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGluZGV4LCBpdCdkIHRocm93IHRoaW5ncyBvZmYgaW4gdGhlIGxvb3AuXHJcbiAgICAgICAgX2xpc3RlbmVyc1tfaV0odGltZSwgX2RlbHRhLCBmcmFtZSwgdik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBfc2VsZiA9IHtcclxuICAgIHRpbWU6IDAsXHJcbiAgICBmcmFtZTogMCxcclxuICAgIHRpY2s6IGZ1bmN0aW9uIHRpY2soKSB7XHJcbiAgICAgIF90aWNrKHRydWUpO1xyXG4gICAgfSxcclxuICAgIGRlbHRhUmF0aW86IGZ1bmN0aW9uIGRlbHRhUmF0aW8oZnBzKSB7XHJcbiAgICAgIHJldHVybiBfZGVsdGEgLyAoMTAwMCAvIChmcHMgfHwgNjApKTtcclxuICAgIH0sXHJcbiAgICB3YWtlOiBmdW5jdGlvbiB3YWtlKCkge1xyXG4gICAgICBpZiAoX2NvcmVSZWFkeSkge1xyXG4gICAgICAgIGlmICghX2NvcmVJbml0dGVkICYmIF93aW5kb3dFeGlzdHMoKSkge1xyXG4gICAgICAgICAgX3dpbiA9IF9jb3JlSW5pdHRlZCA9IHdpbmRvdztcclxuICAgICAgICAgIF9kb2MgPSBfd2luLmRvY3VtZW50IHx8IHt9O1xyXG4gICAgICAgICAgX2dsb2JhbHMuZ3NhcCA9IGdzYXA7XHJcbiAgICAgICAgICAoX3dpbi5nc2FwVmVyc2lvbnMgfHwgKF93aW4uZ3NhcFZlcnNpb25zID0gW10pKS5wdXNoKGdzYXAudmVyc2lvbik7XHJcblxyXG4gICAgICAgICAgX2luc3RhbGwoX2luc3RhbGxTY29wZSB8fCBfd2luLkdyZWVuU29ja0dsb2JhbHMgfHwgIV93aW4uZ3NhcCAmJiBfd2luIHx8IHt9KTtcclxuXHJcbiAgICAgICAgICBfcmVnaXN0ZXJQbHVnaW5RdWV1ZS5mb3JFYWNoKF9jcmVhdGVQbHVnaW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX3JhZiA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG4gICAgICAgIF9pZCAmJiBfc2VsZi5zbGVlcCgpO1xyXG5cclxuICAgICAgICBfcmVxID0gX3JhZiB8fCBmdW5jdGlvbiAoZikge1xyXG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZiwgX25leHRUaW1lIC0gX3NlbGYudGltZSAqIDEwMDAgKyAxIHwgMCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgX3RpY2tlckFjdGl2ZSA9IDE7XHJcblxyXG4gICAgICAgIF90aWNrKDIpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2xlZXA6IGZ1bmN0aW9uIHNsZWVwKCkge1xyXG4gICAgICAoX3JhZiA/IGNhbmNlbEFuaW1hdGlvbkZyYW1lIDogY2xlYXJUaW1lb3V0KShfaWQpO1xyXG4gICAgICBfdGlja2VyQWN0aXZlID0gMDtcclxuICAgICAgX3JlcSA9IF9lbXB0eUZ1bmM7XHJcbiAgICB9LFxyXG4gICAgbGFnU21vb3RoaW5nOiBmdW5jdGlvbiBsYWdTbW9vdGhpbmcodGhyZXNob2xkLCBhZGp1c3RlZExhZykge1xyXG4gICAgICBfbGFnVGhyZXNob2xkID0gdGhyZXNob2xkIHx8IEluZmluaXR5OyAvLyB6ZXJvIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBiYXNpY2FsbHkgdW5saW1pdGVkXHJcblxyXG4gICAgICBfYWRqdXN0ZWRMYWcgPSBNYXRoLm1pbihhZGp1c3RlZExhZyB8fCAzMywgX2xhZ1RocmVzaG9sZCk7XHJcbiAgICB9LFxyXG4gICAgZnBzOiBmdW5jdGlvbiBmcHMoX2Zwcykge1xyXG4gICAgICBfZ2FwID0gMTAwMCAvIChfZnBzIHx8IDI0MCk7XHJcbiAgICAgIF9uZXh0VGltZSA9IF9zZWxmLnRpbWUgKiAxMDAwICsgX2dhcDtcclxuICAgIH0sXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIGFkZChjYWxsYmFjaywgb25jZSwgcHJpb3JpdGl6ZSkge1xyXG4gICAgICB2YXIgZnVuYyA9IG9uY2UgPyBmdW5jdGlvbiAodCwgZCwgZiwgdikge1xyXG4gICAgICAgIGNhbGxiYWNrKHQsIGQsIGYsIHYpO1xyXG5cclxuICAgICAgICBfc2VsZi5yZW1vdmUoZnVuYyk7XHJcbiAgICAgIH0gOiBjYWxsYmFjaztcclxuXHJcbiAgICAgIF9zZWxmLnJlbW92ZShjYWxsYmFjayk7XHJcblxyXG4gICAgICBfbGlzdGVuZXJzW3ByaW9yaXRpemUgPyBcInVuc2hpZnRcIiA6IFwicHVzaFwiXShmdW5jKTtcclxuXHJcbiAgICAgIF93YWtlKCk7XHJcblxyXG4gICAgICByZXR1cm4gZnVuYztcclxuICAgIH0sXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShjYWxsYmFjaywgaSkge1xyXG4gICAgICB+KGkgPSBfbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spKSAmJiBfbGlzdGVuZXJzLnNwbGljZShpLCAxKSAmJiBfaSA+PSBpICYmIF9pLS07XHJcbiAgICB9LFxyXG4gICAgX2xpc3RlbmVyczogX2xpc3RlbmVyc1xyXG4gIH07XHJcbiAgcmV0dXJuIF9zZWxmO1xyXG59KCksXHJcbiAgICBfd2FrZSA9IGZ1bmN0aW9uIF93YWtlKCkge1xyXG4gIHJldHVybiAhX3RpY2tlckFjdGl2ZSAmJiBfdGlja2VyLndha2UoKTtcclxufSxcclxuICAgIC8vYWxzbyBlbnN1cmVzIHRoZSBjb3JlIGNsYXNzZXMgYXJlIGluaXRpYWxpemVkLlxyXG5cclxuLypcclxuKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiogRUFTSU5HXHJcbiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4qL1xyXG5fZWFzZU1hcCA9IHt9LFxyXG4gICAgX2N1c3RvbUVhc2VFeHAgPSAvXltcXGQuXFwtTV1bXFxkLlxcLSxcXHNdLyxcclxuICAgIF9xdW90ZXNFeHAgPSAvW1wiJ10vZyxcclxuICAgIF9wYXJzZU9iamVjdEluU3RyaW5nID0gZnVuY3Rpb24gX3BhcnNlT2JqZWN0SW5TdHJpbmcodmFsdWUpIHtcclxuICAvL3Rha2VzIGEgc3RyaW5nIGxpa2UgXCJ7d2lnZ2xlczoxMCwgdHlwZTphbnRpY2lwYXRlfSlcIiBhbmQgdHVybnMgaXQgaW50byBhIHJlYWwgb2JqZWN0LiBOb3RpY2UgaXQgZW5kcyBpbiBcIilcIiBhbmQgaW5jbHVkZXMgdGhlIHt9IHdyYXBwZXJzLiBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcGFyc2luZyBlYXNlIGNvbmZpZ3MgYW5kIHByaW9yaXRpemVkIG9wdGltaXphdGlvbiByYXRoZXIgdGhhbiByZXVzYWJpbGl0eS5cclxuICB2YXIgb2JqID0ge30sXHJcbiAgICAgIHNwbGl0ID0gdmFsdWUuc3Vic3RyKDEsIHZhbHVlLmxlbmd0aCAtIDMpLnNwbGl0KFwiOlwiKSxcclxuICAgICAga2V5ID0gc3BsaXRbMF0sXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBsID0gc3BsaXQubGVuZ3RoLFxyXG4gICAgICBpbmRleCxcclxuICAgICAgdmFsLFxyXG4gICAgICBwYXJzZWRWYWw7XHJcblxyXG4gIGZvciAoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICB2YWwgPSBzcGxpdFtpXTtcclxuICAgIGluZGV4ID0gaSAhPT0gbCAtIDEgPyB2YWwubGFzdEluZGV4T2YoXCIsXCIpIDogdmFsLmxlbmd0aDtcclxuICAgIHBhcnNlZFZhbCA9IHZhbC5zdWJzdHIoMCwgaW5kZXgpO1xyXG4gICAgb2JqW2tleV0gPSBpc05hTihwYXJzZWRWYWwpID8gcGFyc2VkVmFsLnJlcGxhY2UoX3F1b3Rlc0V4cCwgXCJcIikudHJpbSgpIDogK3BhcnNlZFZhbDtcclxuICAgIGtleSA9IHZhbC5zdWJzdHIoaW5kZXggKyAxKS50cmltKCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb2JqO1xyXG59LFxyXG4gICAgX3ZhbHVlSW5QYXJlbnRoZXNlcyA9IGZ1bmN0aW9uIF92YWx1ZUluUGFyZW50aGVzZXModmFsdWUpIHtcclxuICB2YXIgb3BlbiA9IHZhbHVlLmluZGV4T2YoXCIoXCIpICsgMSxcclxuICAgICAgY2xvc2UgPSB2YWx1ZS5pbmRleE9mKFwiKVwiKSxcclxuICAgICAgbmVzdGVkID0gdmFsdWUuaW5kZXhPZihcIihcIiwgb3Blbik7XHJcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhvcGVuLCB+bmVzdGVkICYmIG5lc3RlZCA8IGNsb3NlID8gdmFsdWUuaW5kZXhPZihcIilcIiwgY2xvc2UgKyAxKSA6IGNsb3NlKTtcclxufSxcclxuICAgIF9jb25maWdFYXNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uIF9jb25maWdFYXNlRnJvbVN0cmluZyhuYW1lKSB7XHJcbiAgLy9uYW1lIGNhbiBiZSBhIHN0cmluZyBsaWtlIFwiZWxhc3RpYy5vdXQoMSwwLjUpXCIsIGFuZCBwYXNzIGluIF9lYXNlTWFwIGFzIG9iaiBhbmQgaXQnbGwgcGFyc2UgaXQgb3V0IGFuZCBjYWxsIHRoZSBhY3R1YWwgZnVuY3Rpb24gbGlrZSBfZWFzZU1hcC5FbGFzdGljLmVhc2VPdXQuY29uZmlnKDEsMC41KS4gSXQgd2lsbCBhbHNvIHBhcnNlIGN1c3RvbSBlYXNlIHN0cmluZ3MgYXMgbG9uZyBhcyBDdXN0b21FYXNlIGlzIGxvYWRlZCBhbmQgcmVnaXN0ZXJlZCAoaW50ZXJuYWxseSBhcyBfZWFzZU1hcC5fQ0UpLlxyXG4gIHZhciBzcGxpdCA9IChuYW1lICsgXCJcIikuc3BsaXQoXCIoXCIpLFxyXG4gICAgICBlYXNlID0gX2Vhc2VNYXBbc3BsaXRbMF1dO1xyXG4gIHJldHVybiBlYXNlICYmIHNwbGl0Lmxlbmd0aCA+IDEgJiYgZWFzZS5jb25maWcgPyBlYXNlLmNvbmZpZy5hcHBseShudWxsLCB+bmFtZS5pbmRleE9mKFwie1wiKSA/IFtfcGFyc2VPYmplY3RJblN0cmluZyhzcGxpdFsxXSldIDogX3ZhbHVlSW5QYXJlbnRoZXNlcyhuYW1lKS5zcGxpdChcIixcIikubWFwKF9udW1lcmljSWZQb3NzaWJsZSkpIDogX2Vhc2VNYXAuX0NFICYmIF9jdXN0b21FYXNlRXhwLnRlc3QobmFtZSkgPyBfZWFzZU1hcC5fQ0UoXCJcIiwgbmFtZSkgOiBlYXNlO1xyXG59LFxyXG4gICAgX2ludmVydEVhc2UgPSBmdW5jdGlvbiBfaW52ZXJ0RWFzZShlYXNlKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XHJcbiAgICByZXR1cm4gMSAtIGVhc2UoMSAtIHApO1xyXG4gIH07XHJcbn0sXHJcbiAgICAvLyBhbGxvdyB5b3lvRWFzZSB0byBiZSBzZXQgaW4gY2hpbGRyZW4gYW5kIGhhdmUgdGhvc2UgYWZmZWN0ZWQgd2hlbiB0aGUgcGFyZW50L2FuY2VzdG9yIHRpbWVsaW5lIHlveW9zLlxyXG5fcHJvcGFnYXRlWW95b0Vhc2UgPSBmdW5jdGlvbiBfcHJvcGFnYXRlWW95b0Vhc2UodGltZWxpbmUsIGlzWW95bykge1xyXG4gIHZhciBjaGlsZCA9IHRpbWVsaW5lLl9maXJzdCxcclxuICAgICAgZWFzZTtcclxuXHJcbiAgd2hpbGUgKGNoaWxkKSB7XHJcbiAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBUaW1lbGluZSkge1xyXG4gICAgICBfcHJvcGFnYXRlWW95b0Vhc2UoY2hpbGQsIGlzWW95byk7XHJcbiAgICB9IGVsc2UgaWYgKGNoaWxkLnZhcnMueW95b0Vhc2UgJiYgKCFjaGlsZC5feW95byB8fCAhY2hpbGQuX3JlcGVhdCkgJiYgY2hpbGQuX3lveW8gIT09IGlzWW95bykge1xyXG4gICAgICBpZiAoY2hpbGQudGltZWxpbmUpIHtcclxuICAgICAgICBfcHJvcGFnYXRlWW95b0Vhc2UoY2hpbGQudGltZWxpbmUsIGlzWW95byk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWFzZSA9IGNoaWxkLl9lYXNlO1xyXG4gICAgICAgIGNoaWxkLl9lYXNlID0gY2hpbGQuX3lFYXNlO1xyXG4gICAgICAgIGNoaWxkLl95RWFzZSA9IGVhc2U7XHJcbiAgICAgICAgY2hpbGQuX3lveW8gPSBpc1lveW87XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xyXG4gIH1cclxufSxcclxuICAgIF9wYXJzZUVhc2UgPSBmdW5jdGlvbiBfcGFyc2VFYXNlKGVhc2UsIGRlZmF1bHRFYXNlKSB7XHJcbiAgcmV0dXJuICFlYXNlID8gZGVmYXVsdEVhc2UgOiAoX2lzRnVuY3Rpb24oZWFzZSkgPyBlYXNlIDogX2Vhc2VNYXBbZWFzZV0gfHwgX2NvbmZpZ0Vhc2VGcm9tU3RyaW5nKGVhc2UpKSB8fCBkZWZhdWx0RWFzZTtcclxufSxcclxuICAgIF9pbnNlcnRFYXNlID0gZnVuY3Rpb24gX2luc2VydEVhc2UobmFtZXMsIGVhc2VJbiwgZWFzZU91dCwgZWFzZUluT3V0KSB7XHJcbiAgaWYgKGVhc2VPdXQgPT09IHZvaWQgMCkge1xyXG4gICAgZWFzZU91dCA9IGZ1bmN0aW9uIGVhc2VPdXQocCkge1xyXG4gICAgICByZXR1cm4gMSAtIGVhc2VJbigxIC0gcCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGVhc2VJbk91dCA9PT0gdm9pZCAwKSB7XHJcbiAgICBlYXNlSW5PdXQgPSBmdW5jdGlvbiBlYXNlSW5PdXQocCkge1xyXG4gICAgICByZXR1cm4gcCA8IC41ID8gZWFzZUluKHAgKiAyKSAvIDIgOiAxIC0gZWFzZUluKCgxIC0gcCkgKiAyKSAvIDI7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdmFyIGVhc2UgPSB7XHJcbiAgICBlYXNlSW46IGVhc2VJbixcclxuICAgIGVhc2VPdXQ6IGVhc2VPdXQsXHJcbiAgICBlYXNlSW5PdXQ6IGVhc2VJbk91dFxyXG4gIH0sXHJcbiAgICAgIGxvd2VyY2FzZU5hbWU7XHJcblxyXG4gIF9mb3JFYWNoTmFtZShuYW1lcywgZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIF9lYXNlTWFwW25hbWVdID0gX2dsb2JhbHNbbmFtZV0gPSBlYXNlO1xyXG4gICAgX2Vhc2VNYXBbbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKV0gPSBlYXNlT3V0O1xyXG5cclxuICAgIGZvciAodmFyIHAgaW4gZWFzZSkge1xyXG4gICAgICBfZWFzZU1hcFtsb3dlcmNhc2VOYW1lICsgKHAgPT09IFwiZWFzZUluXCIgPyBcIi5pblwiIDogcCA9PT0gXCJlYXNlT3V0XCIgPyBcIi5vdXRcIiA6IFwiLmluT3V0XCIpXSA9IF9lYXNlTWFwW25hbWUgKyBcIi5cIiArIHBdID0gZWFzZVtwXTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGVhc2U7XHJcbn0sXHJcbiAgICBfZWFzZUluT3V0RnJvbU91dCA9IGZ1bmN0aW9uIF9lYXNlSW5PdXRGcm9tT3V0KGVhc2VPdXQpIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKHApIHtcclxuICAgIHJldHVybiBwIDwgLjUgPyAoMSAtIGVhc2VPdXQoMSAtIHAgKiAyKSkgLyAyIDogLjUgKyBlYXNlT3V0KChwIC0gLjUpICogMikgLyAyO1xyXG4gIH07XHJcbn0sXHJcbiAgICBfY29uZmlnRWxhc3RpYyA9IGZ1bmN0aW9uIF9jb25maWdFbGFzdGljKHR5cGUsIGFtcGxpdHVkZSwgcGVyaW9kKSB7XHJcbiAgdmFyIHAxID0gYW1wbGl0dWRlID49IDEgPyBhbXBsaXR1ZGUgOiAxLFxyXG4gICAgICAvL25vdGU6IGlmIGFtcGxpdHVkZSBpcyA8IDEsIHdlIHNpbXBseSBhZGp1c3QgdGhlIHBlcmlvZCBmb3IgYSBtb3JlIG5hdHVyYWwgZmVlbC4gT3RoZXJ3aXNlIHRoZSBtYXRoIGRvZXNuJ3Qgd29yayByaWdodCBhbmQgdGhlIGN1cnZlIHN0YXJ0cyBhdCAxLlxyXG4gIHAyID0gKHBlcmlvZCB8fCAodHlwZSA/IC4zIDogLjQ1KSkgLyAoYW1wbGl0dWRlIDwgMSA/IGFtcGxpdHVkZSA6IDEpLFxyXG4gICAgICBwMyA9IHAyIC8gXzJQSSAqIChNYXRoLmFzaW4oMSAvIHAxKSB8fCAwKSxcclxuICAgICAgZWFzZU91dCA9IGZ1bmN0aW9uIGVhc2VPdXQocCkge1xyXG4gICAgcmV0dXJuIHAgPT09IDEgPyAxIDogcDEgKiBNYXRoLnBvdygyLCAtMTAgKiBwKSAqIF9zaW4oKHAgLSBwMykgKiBwMikgKyAxO1xyXG4gIH0sXHJcbiAgICAgIGVhc2UgPSB0eXBlID09PSBcIm91dFwiID8gZWFzZU91dCA6IHR5cGUgPT09IFwiaW5cIiA/IGZ1bmN0aW9uIChwKSB7XHJcbiAgICByZXR1cm4gMSAtIGVhc2VPdXQoMSAtIHApO1xyXG4gIH0gOiBfZWFzZUluT3V0RnJvbU91dChlYXNlT3V0KTtcclxuXHJcbiAgcDIgPSBfMlBJIC8gcDI7IC8vcHJlY2FsY3VsYXRlIHRvIG9wdGltaXplXHJcblxyXG4gIGVhc2UuY29uZmlnID0gZnVuY3Rpb24gKGFtcGxpdHVkZSwgcGVyaW9kKSB7XHJcbiAgICByZXR1cm4gX2NvbmZpZ0VsYXN0aWModHlwZSwgYW1wbGl0dWRlLCBwZXJpb2QpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBlYXNlO1xyXG59LFxyXG4gICAgX2NvbmZpZ0JhY2sgPSBmdW5jdGlvbiBfY29uZmlnQmFjayh0eXBlLCBvdmVyc2hvb3QpIHtcclxuICBpZiAob3ZlcnNob290ID09PSB2b2lkIDApIHtcclxuICAgIG92ZXJzaG9vdCA9IDEuNzAxNTg7XHJcbiAgfVxyXG5cclxuICB2YXIgZWFzZU91dCA9IGZ1bmN0aW9uIGVhc2VPdXQocCkge1xyXG4gICAgcmV0dXJuIHAgPyAtLXAgKiBwICogKChvdmVyc2hvb3QgKyAxKSAqIHAgKyBvdmVyc2hvb3QpICsgMSA6IDA7XHJcbiAgfSxcclxuICAgICAgZWFzZSA9IHR5cGUgPT09IFwib3V0XCIgPyBlYXNlT3V0IDogdHlwZSA9PT0gXCJpblwiID8gZnVuY3Rpb24gKHApIHtcclxuICAgIHJldHVybiAxIC0gZWFzZU91dCgxIC0gcCk7XHJcbiAgfSA6IF9lYXNlSW5PdXRGcm9tT3V0KGVhc2VPdXQpO1xyXG5cclxuICBlYXNlLmNvbmZpZyA9IGZ1bmN0aW9uIChvdmVyc2hvb3QpIHtcclxuICAgIHJldHVybiBfY29uZmlnQmFjayh0eXBlLCBvdmVyc2hvb3QpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBlYXNlO1xyXG59OyAvLyBhIGNoZWFwZXIgKGtiIGFuZCBjcHUpIGJ1dCBtb3JlIG1pbGQgd2F5IHRvIGdldCBhIHBhcmFtZXRlcml6ZWQgd2VpZ2h0ZWQgZWFzZSBieSBmZWVkaW5nIGluIGEgdmFsdWUgYmV0d2VlbiAtMSAoZWFzZUluKSBhbmQgMSAoZWFzZU91dCkgd2hlcmUgMCBpcyBsaW5lYXIuXHJcbi8vIF93ZWlnaHRlZEVhc2UgPSByYXRpbyA9PiB7XHJcbi8vIFx0bGV0IHkgPSAwLjUgKyByYXRpbyAvIDI7XHJcbi8vIFx0cmV0dXJuIHAgPT4gKDIgKiAoMSAtIHApICogcCAqIHkgKyBwICogcCk7XHJcbi8vIH0sXHJcbi8vIGEgc3Ryb25nZXIgKGJ1dCBtb3JlIGV4cGVuc2l2ZSBrYi9jcHUpIHBhcmFtZXRlcml6ZWQgd2VpZ2h0ZWQgZWFzZSB0aGF0IGxldHMgeW91IGZlZWQgaW4gYSB2YWx1ZSBiZXR3ZWVuIC0xIChlYXNlSW4pIGFuZCAxIChlYXNlT3V0KSB3aGVyZSAwIGlzIGxpbmVhci5cclxuLy8gX3dlaWdodGVkRWFzZVN0cm9uZyA9IHJhdGlvID0+IHtcclxuLy8gXHRyYXRpbyA9IC41ICsgcmF0aW8gLyAyO1xyXG4vLyBcdGxldCBvID0gMSAvIDMgKiAocmF0aW8gPCAuNSA/IHJhdGlvIDogMSAtIHJhdGlvKSxcclxuLy8gXHRcdGIgPSByYXRpbyAtIG8sXHJcbi8vIFx0XHRjID0gcmF0aW8gKyBvO1xyXG4vLyBcdHJldHVybiBwID0+IHAgPT09IDEgPyBwIDogMyAqIGIgKiAoMSAtIHApICogKDEgLSBwKSAqIHAgKyAzICogYyAqICgxIC0gcCkgKiBwICogcCArIHAgKiBwICogcDtcclxuLy8gfTtcclxuXHJcblxyXG5fZm9yRWFjaE5hbWUoXCJMaW5lYXIsUXVhZCxDdWJpYyxRdWFydCxRdWludCxTdHJvbmdcIiwgZnVuY3Rpb24gKG5hbWUsIGkpIHtcclxuICB2YXIgcG93ZXIgPSBpIDwgNSA/IGkgKyAxIDogaTtcclxuXHJcbiAgX2luc2VydEVhc2UobmFtZSArIFwiLFBvd2VyXCIgKyAocG93ZXIgLSAxKSwgaSA/IGZ1bmN0aW9uIChwKSB7XHJcbiAgICByZXR1cm4gTWF0aC5wb3cocCwgcG93ZXIpO1xyXG4gIH0gOiBmdW5jdGlvbiAocCkge1xyXG4gICAgcmV0dXJuIHA7XHJcbiAgfSwgZnVuY3Rpb24gKHApIHtcclxuICAgIHJldHVybiAxIC0gTWF0aC5wb3coMSAtIHAsIHBvd2VyKTtcclxuICB9LCBmdW5jdGlvbiAocCkge1xyXG4gICAgcmV0dXJuIHAgPCAuNSA/IE1hdGgucG93KHAgKiAyLCBwb3dlcikgLyAyIDogMSAtIE1hdGgucG93KCgxIC0gcCkgKiAyLCBwb3dlcikgLyAyO1xyXG4gIH0pO1xyXG59KTtcclxuXHJcbl9lYXNlTWFwLkxpbmVhci5lYXNlTm9uZSA9IF9lYXNlTWFwLm5vbmUgPSBfZWFzZU1hcC5MaW5lYXIuZWFzZUluO1xyXG5cclxuX2luc2VydEVhc2UoXCJFbGFzdGljXCIsIF9jb25maWdFbGFzdGljKFwiaW5cIiksIF9jb25maWdFbGFzdGljKFwib3V0XCIpLCBfY29uZmlnRWxhc3RpYygpKTtcclxuXHJcbihmdW5jdGlvbiAobiwgYykge1xyXG4gIHZhciBuMSA9IDEgLyBjLFxyXG4gICAgICBuMiA9IDIgKiBuMSxcclxuICAgICAgbjMgPSAyLjUgKiBuMSxcclxuICAgICAgZWFzZU91dCA9IGZ1bmN0aW9uIGVhc2VPdXQocCkge1xyXG4gICAgcmV0dXJuIHAgPCBuMSA/IG4gKiBwICogcCA6IHAgPCBuMiA/IG4gKiBNYXRoLnBvdyhwIC0gMS41IC8gYywgMikgKyAuNzUgOiBwIDwgbjMgPyBuICogKHAgLT0gMi4yNSAvIGMpICogcCArIC45Mzc1IDogbiAqIE1hdGgucG93KHAgLSAyLjYyNSAvIGMsIDIpICsgLjk4NDM3NTtcclxuICB9O1xyXG5cclxuICBfaW5zZXJ0RWFzZShcIkJvdW5jZVwiLCBmdW5jdGlvbiAocCkge1xyXG4gICAgcmV0dXJuIDEgLSBlYXNlT3V0KDEgLSBwKTtcclxuICB9LCBlYXNlT3V0KTtcclxufSkoNy41NjI1LCAyLjc1KTtcclxuXHJcbl9pbnNlcnRFYXNlKFwiRXhwb1wiLCBmdW5jdGlvbiAocCkge1xyXG4gIHJldHVybiBNYXRoLnBvdygyLCAxMCAqIChwIC0gMSkpICogcCArIHAgKiBwICogcCAqIHAgKiBwICogcCAqICgxIC0gcCk7XHJcbn0pOyAvLyBwcmV2aW91c2x5IDIgKiogKDEwICogKHAgLSAxKSkgYnV0IHRoYXQgZG9lc24ndCBlbmQgdXAgd2l0aCB0aGUgdmFsdWUgcXVpdGUgYXQgdGhlIHJpZ2h0IHNwb3Qgc28gd2UgZG8gYSBibGVuZGVkIGVhc2UgdG8gZW5zdXJlIGl0IGxhbmRzIHdoZXJlIGl0IHNob3VsZCBwZXJmZWN0bHkuXHJcblxyXG5cclxuX2luc2VydEVhc2UoXCJDaXJjXCIsIGZ1bmN0aW9uIChwKSB7XHJcbiAgcmV0dXJuIC0oX3NxcnQoMSAtIHAgKiBwKSAtIDEpO1xyXG59KTtcclxuXHJcbl9pbnNlcnRFYXNlKFwiU2luZVwiLCBmdW5jdGlvbiAocCkge1xyXG4gIHJldHVybiBwID09PSAxID8gMSA6IC1fY29zKHAgKiBfSEFMRl9QSSkgKyAxO1xyXG59KTtcclxuXHJcbl9pbnNlcnRFYXNlKFwiQmFja1wiLCBfY29uZmlnQmFjayhcImluXCIpLCBfY29uZmlnQmFjayhcIm91dFwiKSwgX2NvbmZpZ0JhY2soKSk7XHJcblxyXG5fZWFzZU1hcC5TdGVwcGVkRWFzZSA9IF9lYXNlTWFwLnN0ZXBzID0gX2dsb2JhbHMuU3RlcHBlZEVhc2UgPSB7XHJcbiAgY29uZmlnOiBmdW5jdGlvbiBjb25maWcoc3RlcHMsIGltbWVkaWF0ZVN0YXJ0KSB7XHJcbiAgICBpZiAoc3RlcHMgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdGVwcyA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHAxID0gMSAvIHN0ZXBzLFxyXG4gICAgICAgIHAyID0gc3RlcHMgKyAoaW1tZWRpYXRlU3RhcnQgPyAwIDogMSksXHJcbiAgICAgICAgcDMgPSBpbW1lZGlhdGVTdGFydCA/IDEgOiAwLFxyXG4gICAgICAgIG1heCA9IDEgLSBfdGlueU51bTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocCkge1xyXG4gICAgICByZXR1cm4gKChwMiAqIF9jbGFtcCgwLCBtYXgsIHApIHwgMCkgKyBwMykgKiBwMTtcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5fZGVmYXVsdHMuZWFzZSA9IF9lYXNlTWFwW1wicXVhZC5vdXRcIl07XHJcblxyXG5fZm9yRWFjaE5hbWUoXCJvbkNvbXBsZXRlLG9uVXBkYXRlLG9uU3RhcnQsb25SZXBlYXQsb25SZXZlcnNlQ29tcGxldGUsb25JbnRlcnJ1cHRcIiwgZnVuY3Rpb24gKG5hbWUpIHtcclxuICByZXR1cm4gX2NhbGxiYWNrTmFtZXMgKz0gbmFtZSArIFwiLFwiICsgbmFtZSArIFwiUGFyYW1zLFwiO1xyXG59KTtcclxuLypcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogQ0FDSEVcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICovXHJcblxyXG5cclxuZXhwb3J0IHZhciBHU0NhY2hlID0gZnVuY3Rpb24gR1NDYWNoZSh0YXJnZXQsIGhhcm5lc3MpIHtcclxuICB0aGlzLmlkID0gX2dzSUQrKztcclxuICB0YXJnZXQuX2dzYXAgPSB0aGlzO1xyXG4gIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gIHRoaXMuaGFybmVzcyA9IGhhcm5lc3M7XHJcbiAgdGhpcy5nZXQgPSBoYXJuZXNzID8gaGFybmVzcy5nZXQgOiBfZ2V0UHJvcGVydHk7XHJcbiAgdGhpcy5zZXQgPSBoYXJuZXNzID8gaGFybmVzcy5nZXRTZXR0ZXIgOiBfZ2V0U2V0dGVyO1xyXG59O1xyXG4vKlxyXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKiBBTklNQVRJT05cclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICovXHJcblxyXG5leHBvcnQgdmFyIEFuaW1hdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XHJcbiAgZnVuY3Rpb24gQW5pbWF0aW9uKHZhcnMpIHtcclxuICAgIHRoaXMudmFycyA9IHZhcnM7XHJcbiAgICB0aGlzLl9kZWxheSA9ICt2YXJzLmRlbGF5IHx8IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX3JlcGVhdCA9IHZhcnMucmVwZWF0ID09PSBJbmZpbml0eSA/IC0yIDogdmFycy5yZXBlYXQgfHwgMCkge1xyXG4gICAgICAvLyBUT0RPOiByZXBlYXQ6IEluZmluaXR5IG9uIGEgdGltZWxpbmUncyBjaGlsZHJlbiBtdXN0IGZsYWcgdGhhdCB0aW1lbGluZSBpbnRlcm5hbGx5IGFuZCBhZmZlY3QgaXRzIHRvdGFsRHVyYXRpb24sIG90aGVyd2lzZSBpdCdsbCBzdG9wIGluIHRoZSBuZWdhdGl2ZSBkaXJlY3Rpb24gd2hlbiByZWFjaGluZyB0aGUgc3RhcnQuXHJcbiAgICAgIHRoaXMuX3JEZWxheSA9IHZhcnMucmVwZWF0RGVsYXkgfHwgMDtcclxuICAgICAgdGhpcy5feW95byA9ICEhdmFycy55b3lvIHx8ICEhdmFycy55b3lvRWFzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90cyA9IDE7XHJcblxyXG4gICAgX3NldER1cmF0aW9uKHRoaXMsICt2YXJzLmR1cmF0aW9uLCAxLCAxKTtcclxuXHJcbiAgICB0aGlzLmRhdGEgPSB2YXJzLmRhdGE7XHJcblxyXG4gICAgaWYgKF9jb250ZXh0KSB7XHJcbiAgICAgIHRoaXMuX2N0eCA9IF9jb250ZXh0O1xyXG5cclxuICAgICAgX2NvbnRleHQuZGF0YS5wdXNoKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIF90aWNrZXJBY3RpdmUgfHwgX3RpY2tlci53YWtlKCk7XHJcbiAgfVxyXG5cclxuICB2YXIgX3Byb3RvID0gQW5pbWF0aW9uLnByb3RvdHlwZTtcclxuXHJcbiAgX3Byb3RvLmRlbGF5ID0gZnVuY3Rpb24gZGVsYXkodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5zbW9vdGhDaGlsZFRpbWluZyAmJiB0aGlzLnN0YXJ0VGltZSh0aGlzLl9zdGFydCArIHZhbHVlIC0gdGhpcy5fZGVsYXkpO1xyXG4gICAgICB0aGlzLl9kZWxheSA9IHZhbHVlO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZGVsYXk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLmR1cmF0aW9uID0gZnVuY3Rpb24gZHVyYXRpb24odmFsdWUpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbER1cmF0aW9uKHRoaXMuX3JlcGVhdCA+IDAgPyB2YWx1ZSArICh2YWx1ZSArIHRoaXMuX3JEZWxheSkgKiB0aGlzLl9yZXBlYXQgOiB2YWx1ZSkgOiB0aGlzLnRvdGFsRHVyYXRpb24oKSAmJiB0aGlzLl9kdXI7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnRvdGFsRHVyYXRpb24gPSBmdW5jdGlvbiB0b3RhbER1cmF0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3REdXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZGlydHkgPSAwO1xyXG4gICAgcmV0dXJuIF9zZXREdXJhdGlvbih0aGlzLCB0aGlzLl9yZXBlYXQgPCAwID8gdmFsdWUgOiAodmFsdWUgLSB0aGlzLl9yZXBlYXQgKiB0aGlzLl9yRGVsYXkpIC8gKHRoaXMuX3JlcGVhdCArIDEpKTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8udG90YWxUaW1lID0gZnVuY3Rpb24gdG90YWxUaW1lKF90b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzKSB7XHJcbiAgICBfd2FrZSgpO1xyXG5cclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fdFRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBhcmVudCA9IHRoaXMuX2RwO1xyXG5cclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnNtb290aENoaWxkVGltaW5nICYmIHRoaXMuX3RzKSB7XHJcbiAgICAgIF9hbGlnblBsYXloZWFkKHRoaXMsIF90b3RhbFRpbWUpO1xyXG5cclxuICAgICAgIXBhcmVudC5fZHAgfHwgcGFyZW50LnBhcmVudCB8fCBfcG9zdEFkZENoZWNrcyhwYXJlbnQsIHRoaXMpOyAvLyBlZGdlIGNhc2U6IGlmIHRoaXMgaXMgYSBjaGlsZCBvZiBhIHRpbWVsaW5lIHRoYXQgYWxyZWFkeSBjb21wbGV0ZWQsIGZvciBleGFtcGxlLCB3ZSBtdXN0IHJlLWFjdGl2YXRlIHRoZSBwYXJlbnQuXHJcbiAgICAgIC8vaW4gY2FzZSBhbnkgb2YgdGhlIGFuY2VzdG9yIHRpbWVsaW5lcyBoYWQgY29tcGxldGVkIGJ1dCBzaG91bGQgbm93IGJlIGVuYWJsZWQsIHdlIHNob3VsZCByZXNldCB0aGVpciB0b3RhbFRpbWUoKSB3aGljaCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgdGhleSdyZSBsaW5lZCB1cCBwcm9wZXJseSBhbmQgZW5hYmxlZC4gU2tpcCBmb3IgYW5pbWF0aW9ucyB0aGF0IGFyZSBvbiB0aGUgcm9vdCAod2FzdGVmdWwpLiBFeGFtcGxlOiBhIFRpbWVsaW5lTGl0ZS5leHBvcnRSb290KCkgaXMgcGVyZm9ybWVkIHdoZW4gdGhlcmUncyBhIHBhdXNlZCB0d2VlbiBvbiB0aGUgcm9vdCwgdGhlIGV4cG9ydCB3aWxsIG5vdCBjb21wbGV0ZSB1bnRpbCB0aGF0IHR3ZWVuIGlzIHVucGF1c2VkLCBidXQgaW1hZ2luZSBhIGNoaWxkIGdldHMgcmVzdGFydGVkIGxhdGVyLCBhZnRlciBhbGwgW3VucGF1c2VkXSB0d2VlbnMgaGF2ZSBjb21wbGV0ZWQuIFRoZSBzdGFydCBvZiB0aGF0IGNoaWxkIHdvdWxkIGdldCBwdXNoZWQgb3V0LCBidXQgb25lIG9mIHRoZSBhbmNlc3RvcnMgbWF5IGhhdmUgY29tcGxldGVkLlxyXG5cclxuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50KSB7XHJcbiAgICAgICAgaWYgKHBhcmVudC5wYXJlbnQuX3RpbWUgIT09IHBhcmVudC5fc3RhcnQgKyAocGFyZW50Ll90cyA+PSAwID8gcGFyZW50Ll90VGltZSAvIHBhcmVudC5fdHMgOiAocGFyZW50LnRvdGFsRHVyYXRpb24oKSAtIHBhcmVudC5fdFRpbWUpIC8gLXBhcmVudC5fdHMpKSB7XHJcbiAgICAgICAgICBwYXJlbnQudG90YWxUaW1lKHBhcmVudC5fdFRpbWUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLnBhcmVudCAmJiB0aGlzLl9kcC5hdXRvUmVtb3ZlQ2hpbGRyZW4gJiYgKHRoaXMuX3RzID4gMCAmJiBfdG90YWxUaW1lIDwgdGhpcy5fdER1ciB8fCB0aGlzLl90cyA8IDAgJiYgX3RvdGFsVGltZSA+IDAgfHwgIXRoaXMuX3REdXIgJiYgIV90b3RhbFRpbWUpKSB7XHJcbiAgICAgICAgLy9pZiB0aGUgYW5pbWF0aW9uIGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgcHV0IGl0IGJhY2sgaW50byBpdHMgbGFzdCBwYXJlbnQgKHJlY29yZGVkIGFzIF9kcCBmb3IgZXhhY3RseSBjYXNlcyBsaWtlIHRoaXMpLiBMaW1pdCB0byBwYXJlbnRzIHdpdGggYXV0b1JlbW92ZUNoaWxkcmVuIChsaWtlIGdsb2JhbFRpbWVsaW5lKSBzbyB0aGF0IGlmIHRoZSB1c2VyIG1hbnVhbGx5IHJlbW92ZXMgYW4gYW5pbWF0aW9uIGZyb20gYSB0aW1lbGluZSBhbmQgdGhlbiBhbHRlcnMgaXRzIHBsYXloZWFkLCBpdCBkb2Vzbid0IGdldCBhZGRlZCBiYWNrIGluLlxyXG4gICAgICAgIF9hZGRUb1RpbWVsaW5lKHRoaXMuX2RwLCB0aGlzLCB0aGlzLl9zdGFydCAtIHRoaXMuX2RlbGF5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl90VGltZSAhPT0gX3RvdGFsVGltZSB8fCAhdGhpcy5fZHVyICYmICFzdXBwcmVzc0V2ZW50cyB8fCB0aGlzLl9pbml0dGVkICYmIE1hdGguYWJzKHRoaXMuX3pUaW1lKSA9PT0gX3RpbnlOdW0gfHwgIV90b3RhbFRpbWUgJiYgIXRoaXMuX2luaXR0ZWQgJiYgKHRoaXMuYWRkIHx8IHRoaXMuX3B0TG9va3VwKSkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgX3B0TG9va3VwIG9uIGEgVHdlZW4gaW5zdGFuY2UgdG8gZW5zdXJlIGl0IGhhcyBhY3R1YWxseSBmaW5pc2hlZCBiZWluZyBpbnN0YW50aWF0ZWQsIG90aGVyd2lzZSBpZiB0aGlzLnJldmVyc2UoKSBnZXRzIGNhbGxlZCBpbiB0aGUgQW5pbWF0aW9uIGNvbnN0cnVjdG9yLCBpdCBjb3VsZCB0cmlnZ2VyIGEgcmVuZGVyKCkgaGVyZSBldmVuIHRob3VnaCB0aGUgX3RhcmdldHMgd2VyZW4ndCBwb3B1bGF0ZWQsIHRodXMgd2hlbiBfaW5pdCgpIGlzIGNhbGxlZCB0aGVyZSB3b24ndCBiZSBhbnkgUHJvcFR3ZWVucyAoaXQnbGwgYWN0IGxpa2UgdGhlIHR3ZWVuIGlzIG5vbi1mdW5jdGlvbmFsKVxyXG4gICAgICB0aGlzLl90cyB8fCAodGhpcy5fcFRpbWUgPSBfdG90YWxUaW1lKTsgLy8gb3RoZXJ3aXNlLCBpZiBhbiBhbmltYXRpb24gaXMgcGF1c2VkLCB0aGVuIHRoZSBwbGF5aGVhZCBpcyBtb3ZlZCBiYWNrIHRvIHplcm8sIHRoZW4gcmVzdW1lZCwgaXQnZCByZXZlcnQgYmFjayB0byB0aGUgb3JpZ2luYWwgdGltZSBhdCB0aGUgcGF1c2VcclxuICAgICAgLy9pZiAoIXRoaXMuX2xvY2spIHsgLy8gYXZvaWQgZW5kbGVzcyByZWN1cnNpb24gKG5vdCBzdXJlIHdlIG5lZWQgdGhpcyB5ZXQgb3IgaWYgaXQncyB3b3J0aCB0aGUgcGVyZm9ybWFuY2UgaGl0KVxyXG4gICAgICAvLyAgIHRoaXMuX2xvY2sgPSAxO1xyXG5cclxuICAgICAgX2xhenlTYWZlUmVuZGVyKHRoaXMsIF90b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzKTsgLy8gICB0aGlzLl9sb2NrID0gMDtcclxuICAgICAgLy99XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIF9wcm90by50aW1lID0gZnVuY3Rpb24gdGltZSh2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbFRpbWUoTWF0aC5taW4odGhpcy50b3RhbER1cmF0aW9uKCksIHZhbHVlICsgX2VsYXBzZWRDeWNsZUR1cmF0aW9uKHRoaXMpKSAlICh0aGlzLl9kdXIgKyB0aGlzLl9yRGVsYXkpIHx8ICh2YWx1ZSA/IHRoaXMuX2R1ciA6IDApLCBzdXBwcmVzc0V2ZW50cykgOiB0aGlzLl90aW1lOyAvLyBub3RlOiBpZiB0aGUgbW9kdWx1cyByZXN1bHRzIGluIDAsIHRoZSBwbGF5aGVhZCBjb3VsZCBiZSBleGFjdGx5IGF0IHRoZSBlbmQgb3IgdGhlIGJlZ2lubmluZywgYW5kIHdlIGFsd2F5cyBkZWZlciB0byB0aGUgRU5EIHdpdGggYSBub24temVybyB2YWx1ZSwgb3RoZXJ3aXNlIGlmIHlvdSBzZXQgdGhlIHRpbWUoKSB0byB0aGUgdmVyeSBlbmQgKGR1cmF0aW9uKCkpLCBpdCB3b3VsZCByZW5kZXIgYXQgdGhlIFNUQVJUIVxyXG4gIH07XHJcblxyXG4gIF9wcm90by50b3RhbFByb2dyZXNzID0gZnVuY3Rpb24gdG90YWxQcm9ncmVzcyh2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbFRpbWUodGhpcy50b3RhbER1cmF0aW9uKCkgKiB2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIDogdGhpcy50b3RhbER1cmF0aW9uKCkgPyBNYXRoLm1pbigxLCB0aGlzLl90VGltZSAvIHRoaXMuX3REdXIpIDogdGhpcy5yYXdUaW1lKCkgPj0gMCAmJiB0aGlzLl9pbml0dGVkID8gMSA6IDA7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnByb2dyZXNzID0gZnVuY3Rpb24gcHJvZ3Jlc3ModmFsdWUsIHN1cHByZXNzRXZlbnRzKSB7XHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMudG90YWxUaW1lKHRoaXMuZHVyYXRpb24oKSAqICh0aGlzLl95b3lvICYmICEodGhpcy5pdGVyYXRpb24oKSAmIDEpID8gMSAtIHZhbHVlIDogdmFsdWUpICsgX2VsYXBzZWRDeWNsZUR1cmF0aW9uKHRoaXMpLCBzdXBwcmVzc0V2ZW50cykgOiB0aGlzLmR1cmF0aW9uKCkgPyBNYXRoLm1pbigxLCB0aGlzLl90aW1lIC8gdGhpcy5fZHVyKSA6IHRoaXMucmF3VGltZSgpID4gMCA/IDEgOiAwO1xyXG4gIH07XHJcblxyXG4gIF9wcm90by5pdGVyYXRpb24gPSBmdW5jdGlvbiBpdGVyYXRpb24odmFsdWUsIHN1cHByZXNzRXZlbnRzKSB7XHJcbiAgICB2YXIgY3ljbGVEdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24oKSArIHRoaXMuX3JEZWxheTtcclxuXHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMudG90YWxUaW1lKHRoaXMuX3RpbWUgKyAodmFsdWUgLSAxKSAqIGN5Y2xlRHVyYXRpb24sIHN1cHByZXNzRXZlbnRzKSA6IHRoaXMuX3JlcGVhdCA/IF9hbmltYXRpb25DeWNsZSh0aGlzLl90VGltZSwgY3ljbGVEdXJhdGlvbikgKyAxIDogMTtcclxuICB9IC8vIHBvdGVudGlhbCBmdXR1cmUgYWRkaXRpb246XHJcbiAgLy8gaXNQbGF5aW5nQmFja3dhcmRzKCkge1xyXG4gIC8vIFx0bGV0IGFuaW1hdGlvbiA9IHRoaXMsXHJcbiAgLy8gXHRcdG9yaWVudGF0aW9uID0gMTsgLy8gMSA9IGZvcndhcmQsIC0xID0gYmFja3dhcmRcclxuICAvLyBcdHdoaWxlIChhbmltYXRpb24pIHtcclxuICAvLyBcdFx0b3JpZW50YXRpb24gKj0gYW5pbWF0aW9uLnJldmVyc2VkKCkgfHwgKGFuaW1hdGlvbi5yZXBlYXQoKSAmJiAhKGFuaW1hdGlvbi5pdGVyYXRpb24oKSAmIDEpKSA/IC0xIDogMTtcclxuICAvLyBcdFx0YW5pbWF0aW9uID0gYW5pbWF0aW9uLnBhcmVudDtcclxuICAvLyBcdH1cclxuICAvLyBcdHJldHVybiBvcmllbnRhdGlvbiA8IDA7XHJcbiAgLy8gfVxyXG4gIDtcclxuXHJcbiAgX3Byb3RvLnRpbWVTY2FsZSA9IGZ1bmN0aW9uIHRpbWVTY2FsZSh2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fcnRzID09PSAtX3RpbnlOdW0gPyAwIDogdGhpcy5fcnRzOyAvLyByZWNvcmRlZCB0aW1lU2NhbGUuIFNwZWNpYWwgY2FzZTogaWYgc29tZW9uZSBjYWxscyByZXZlcnNlKCkgb24gYW4gYW5pbWF0aW9uIHdpdGggdGltZVNjYWxlIG9mIDAsIHdlIGFzc2lnbiBpdCAtX3RpbnlOdW0gdG8gcmVtZW1iZXIgaXQncyByZXZlcnNlZC5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcnRzID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdFRpbWUgPSB0aGlzLnBhcmVudCAmJiB0aGlzLl90cyA/IF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHRoaXMucGFyZW50Ll90aW1lLCB0aGlzKSA6IHRoaXMuX3RUaW1lOyAvLyBtYWtlIHN1cmUgdG8gZG8gdGhlIHBhcmVudFRvQ2hpbGRUb3RhbFRpbWUoKSBCRUZPUkUgc2V0dGluZyB0aGUgbmV3IF90cyBiZWNhdXNlIHRoZSBvbGQgb25lIG11c3QgYmUgdXNlZCBpbiB0aGF0IGNhbGN1bGF0aW9uLlxyXG4gICAgLy8gZnV0dXJlIGFkZGl0aW9uPyBVcCBzaWRlOiBmYXN0IGFuZCBtaW5pbWFsIGZpbGUgc2l6ZS4gRG93biBzaWRlOiBvbmx5IHdvcmtzIG9uIHRoaXMgYW5pbWF0aW9uOyBpZiBhIHRpbWVsaW5lIGlzIHJldmVyc2VkLCBmb3IgZXhhbXBsZSwgaXRzIGNoaWxkcmVucycgb25SZXZlcnNlIHdvdWxkbid0IGdldCBjYWxsZWQuXHJcbiAgICAvLygrdmFsdWUgPCAwICYmIHRoaXMuX3J0cyA+PSAwKSAmJiBfY2FsbGJhY2sodGhpcywgXCJvblJldmVyc2VcIiwgdHJ1ZSk7XHJcbiAgICAvLyBwcmlvcml0aXplIHJlbmRlcmluZyB3aGVyZSB0aGUgcGFyZW50J3MgcGxheWhlYWQgbGluZXMgdXAgaW5zdGVhZCBvZiB0aGlzLl90VGltZSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgdHdlZW4gdGhhdCdzIGFuaW1hdGluZyBhbm90aGVyIHR3ZWVuJ3MgdGltZVNjYWxlIGluIHRoZSBzYW1lIHJlbmRlcmluZyBsb29wIChzYW1lIHBhcmVudCksIHRodXMgaWYgdGhlIHRpbWVTY2FsZSB0d2VlbiByZW5kZXJzIGZpcnN0LCBpdCB3b3VsZCBhbHRlciBfc3RhcnQgQkVGT1JFIF90VGltZSB3YXMgc2V0IG9uIHRoYXQgdGljayAoaW4gdGhlIHJlbmRlcmluZyBsb29wKSwgZWZmZWN0aXZlbHkgZnJlZXppbmcgaXQgdW50aWwgdGhlIHRpbWVTY2FsZSB0d2VlbiBmaW5pc2hlcy5cclxuXHJcbiAgICB0aGlzLl9ydHMgPSArdmFsdWUgfHwgMDtcclxuICAgIHRoaXMuX3RzID0gdGhpcy5fcHMgfHwgdmFsdWUgPT09IC1fdGlueU51bSA/IDAgOiB0aGlzLl9ydHM7IC8vIF90cyBpcyB0aGUgZnVuY3Rpb25hbCB0aW1lU2NhbGUgd2hpY2ggd291bGQgYmUgMCBpZiB0aGUgYW5pbWF0aW9uIGlzIHBhdXNlZC5cclxuXHJcbiAgICB0aGlzLnRvdGFsVGltZShfY2xhbXAoLU1hdGguYWJzKHRoaXMuX2RlbGF5KSwgdGhpcy50b3RhbER1cmF0aW9uKCksIHRUaW1lKSwgc3VwcHJlc3NFdmVudHMgIT09IGZhbHNlKTtcclxuXHJcbiAgICBfc2V0RW5kKHRoaXMpOyAvLyBpZiBwYXJlbnQuc21vb3RoQ2hpbGRUaW1pbmcgd2FzIGZhbHNlLCB0aGUgZW5kIHRpbWUgZGlkbid0IGdldCB1cGRhdGVkIGluIHRoZSBfYWxpZ25QbGF5aGVhZCgpIG1ldGhvZCwgc28gZG8gaXQgaGVyZS5cclxuXHJcblxyXG4gICAgcmV0dXJuIF9yZWNhY2hlQW5jZXN0b3JzKHRoaXMpO1xyXG4gIH07XHJcblxyXG4gIF9wcm90by5wYXVzZWQgPSBmdW5jdGlvbiBwYXVzZWQodmFsdWUpIHtcclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fcHM7XHJcbiAgICB9IC8vIHBvc3NpYmxlIGZ1dHVyZSBhZGRpdGlvbiAtIGlmIGFuIGFuaW1hdGlvbiBpcyByZW1vdmVkIGZyb20gaXRzIHBhcmVudCBhbmQgdGhlbiAucmVzdGFydCgpIG9yIC5wbGF5KCkgb3IgLnJlc3VtZSgpIGlzIGNhbGxlZCwgcGVyaGFwcyB3ZSBzaG91bGQgZm9yY2UgaXQgYmFjayBpbnRvIHRoZSBnbG9iYWxUaW1lbGluZSBidXQgYmUgY2FyZWZ1bCBiZWNhdXNlIHdoYXQgaWYgaXQncyBhbHJlYWR5IGF0IGl0cyBlbmQ/IFdlIGRvbid0IHdhbnQgaXQgdG8ganVzdCBwZXJzaXN0IGZvcmV2ZXIgYW5kIG5vdCBnZXQgcmVsZWFzZWQgZm9yIEdDLlxyXG4gICAgLy8gIXRoaXMucGFyZW50ICYmICF2YWx1ZSAmJiB0aGlzLl90VGltZSA8IHRoaXMuX3REdXIgJiYgdGhpcyAhPT0gX2dsb2JhbFRpbWVsaW5lICYmIF9nbG9iYWxUaW1lbGluZS5hZGQodGhpcyk7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLl9wcyAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fcHMgPSB2YWx1ZTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3BUaW1lID0gdGhpcy5fdFRpbWUgfHwgTWF0aC5tYXgoLXRoaXMuX2RlbGF5LCB0aGlzLnJhd1RpbWUoKSk7IC8vIGlmIHRoZSBwYXVzZSBvY2N1cnMgZHVyaW5nIHRoZSBkZWxheSBwaGFzZSwgbWFrZSBzdXJlIHRoYXQncyBmYWN0b3JlZCBpbiB3aGVuIHJlc3VtaW5nLlxyXG5cclxuICAgICAgICB0aGlzLl90cyA9IHRoaXMuX2FjdCA9IDA7IC8vIF90cyBpcyB0aGUgZnVuY3Rpb25hbCB0aW1lU2NhbGUsIHNvIGEgcGF1c2VkIHR3ZWVuIHdvdWxkIGVmZmVjdGl2ZWx5IGhhdmUgYSB0aW1lU2NhbGUgb2YgMC4gV2UgcmVjb3JkIHRoZSBcInJlYWxcIiB0aW1lU2NhbGUgYXMgX3J0cyAocmVjb3JkZWQgdGltZSBzY2FsZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBfd2FrZSgpO1xyXG5cclxuICAgICAgICB0aGlzLl90cyA9IHRoaXMuX3J0czsgLy9vbmx5IGRlZmVyIHRvIF9wVGltZSAocGF1c2VUaW1lKSBpZiB0VGltZSBpcyB6ZXJvLiBSZW1lbWJlciwgc29tZW9uZSBjb3VsZCBwYXVzZSgpIGFuIGFuaW1hdGlvbiwgdGhlbiBzY3J1YiB0aGUgcGxheWhlYWQgYW5kIHJlc3VtZSgpLiBJZiB0aGUgcGFyZW50IGRvZXNuJ3QgaGF2ZSBzbW9vdGhDaGlsZFRpbWluZywgd2UgcmVuZGVyIGF0IHRoZSByYXdUaW1lKCkgYmVjYXVzZSB0aGUgc3RhcnRUaW1lIHdvbid0IGdldCB1cGRhdGVkLlxyXG5cclxuICAgICAgICB0aGlzLnRvdGFsVGltZSh0aGlzLnBhcmVudCAmJiAhdGhpcy5wYXJlbnQuc21vb3RoQ2hpbGRUaW1pbmcgPyB0aGlzLnJhd1RpbWUoKSA6IHRoaXMuX3RUaW1lIHx8IHRoaXMuX3BUaW1lLCB0aGlzLnByb2dyZXNzKCkgPT09IDEgJiYgTWF0aC5hYnModGhpcy5felRpbWUpICE9PSBfdGlueU51bSAmJiAodGhpcy5fdFRpbWUgLT0gX3RpbnlOdW0pKTsgLy8gZWRnZSBjYXNlOiBhbmltYXRpb24ucHJvZ3Jlc3MoMSkucGF1c2UoKS5wbGF5KCkgd291bGRuJ3QgcmVuZGVyIGFnYWluIGJlY2F1c2UgdGhlIHBsYXloZWFkIGlzIGFscmVhZHkgYXQgdGhlIGVuZCwgYnV0IHRoZSBjYWxsIHRvIHRvdGFsVGltZSgpIGJlbG93IHdpbGwgYWRkIGl0IGJhY2sgdG8gaXRzIHBhcmVudC4uLmFuZCBub3QgcmVtb3ZlIGl0IGFnYWluIChzaW5jZSByZW1vdmluZyBvbmx5IGhhcHBlbnMgdXBvbiByZW5kZXJpbmcgYXQgYSBuZXcgdGltZSkuIE9mZnNldHRpbmcgdGhlIF90VGltZSBzbGlnaHRseSBpcyBkb25lIHNpbXBseSB0byBjYXVzZSB0aGUgZmluYWwgcmVuZGVyIGluIHRvdGFsVGltZSgpIHRoYXQnbGwgcG9wIGl0IG9mZiBpdHMgdGltZWxpbmUgKGlmIGF1dG9SZW1vdmVDaGlsZHJlbiBpcyB0cnVlLCBvZiBjb3Vyc2UpLiBDaGVjayB0byBtYWtlIHN1cmUgX3pUaW1lIGlzbid0IC1fdGlueU51bSB0byBhdm9pZCBhbiBlZGdlIGNhc2Ugd2hlcmUgdGhlIHBsYXloZWFkIGlzIHB1c2hlZCB0byB0aGUgZW5kIGJ1dCBJTlNJREUgYSB0d2Vlbi9jYWxsYmFjaywgdGhlIHRpbWVsaW5lIGl0c2VsZiBpcyBwYXVzZWQgdGh1cyBoYWx0aW5nIHJlbmRlcmluZyBhbmQgbGVhdmluZyBhIGZldyB1bnJlbmRlcmVkLiBXaGVuIHJlc3VtaW5nLCBpdCB3b3VsZG4ndCByZW5kZXIgdGhvc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnN0YXJ0VGltZSA9IGZ1bmN0aW9uIHN0YXJ0VGltZSh2YWx1ZSkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5fc3RhcnQgPSB2YWx1ZTtcclxuICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50IHx8IHRoaXMuX2RwO1xyXG4gICAgICBwYXJlbnQgJiYgKHBhcmVudC5fc29ydCB8fCAhdGhpcy5wYXJlbnQpICYmIF9hZGRUb1RpbWVsaW5lKHBhcmVudCwgdGhpcywgdmFsdWUgLSB0aGlzLl9kZWxheSk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9zdGFydDtcclxuICB9O1xyXG5cclxuICBfcHJvdG8uZW5kVGltZSA9IGZ1bmN0aW9uIGVuZFRpbWUoaW5jbHVkZVJlcGVhdHMpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydCArIChfaXNOb3RGYWxzZShpbmNsdWRlUmVwZWF0cykgPyB0aGlzLnRvdGFsRHVyYXRpb24oKSA6IHRoaXMuZHVyYXRpb24oKSkgLyBNYXRoLmFicyh0aGlzLl90cyB8fCAxKTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8ucmF3VGltZSA9IGZ1bmN0aW9uIHJhd1RpbWUod3JhcFJlcGVhdHMpIHtcclxuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCB8fCB0aGlzLl9kcDsgLy8gX2RwID0gZGV0YWNoZWQgcGFyZW50XHJcblxyXG4gICAgcmV0dXJuICFwYXJlbnQgPyB0aGlzLl90VGltZSA6IHdyYXBSZXBlYXRzICYmICghdGhpcy5fdHMgfHwgdGhpcy5fcmVwZWF0ICYmIHRoaXMuX3RpbWUgJiYgdGhpcy50b3RhbFByb2dyZXNzKCkgPCAxKSA/IHRoaXMuX3RUaW1lICUgKHRoaXMuX2R1ciArIHRoaXMuX3JEZWxheSkgOiAhdGhpcy5fdHMgPyB0aGlzLl90VGltZSA6IF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHBhcmVudC5yYXdUaW1lKHdyYXBSZXBlYXRzKSwgdGhpcyk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnJldmVydCA9IGZ1bmN0aW9uIHJldmVydChjb25maWcpIHtcclxuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkge1xyXG4gICAgICBjb25maWcgPSBfcmV2ZXJ0Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwcmV2SXNSZXZlcnRpbmcgPSBfcmV2ZXJ0aW5nO1xyXG4gICAgX3JldmVydGluZyA9IGNvbmZpZztcclxuXHJcbiAgICBpZiAoX2lzUmV2ZXJ0V29ydGh5KHRoaXMpKSB7XHJcbiAgICAgIHRoaXMudGltZWxpbmUgJiYgdGhpcy50aW1lbGluZS5yZXZlcnQoY29uZmlnKTtcclxuICAgICAgdGhpcy50b3RhbFRpbWUoLTAuMDEsIGNvbmZpZy5zdXBwcmVzc0V2ZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhICE9PSBcIm5lc3RlZFwiICYmIGNvbmZpZy5raWxsICE9PSBmYWxzZSAmJiB0aGlzLmtpbGwoKTtcclxuICAgIF9yZXZlcnRpbmcgPSBwcmV2SXNSZXZlcnRpbmc7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8uZ2xvYmFsVGltZSA9IGZ1bmN0aW9uIGdsb2JhbFRpbWUocmF3VGltZSkge1xyXG4gICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMsXHJcbiAgICAgICAgdGltZSA9IGFyZ3VtZW50cy5sZW5ndGggPyByYXdUaW1lIDogYW5pbWF0aW9uLnJhd1RpbWUoKTtcclxuXHJcbiAgICB3aGlsZSAoYW5pbWF0aW9uKSB7XHJcbiAgICAgIHRpbWUgPSBhbmltYXRpb24uX3N0YXJ0ICsgdGltZSAvIChNYXRoLmFicyhhbmltYXRpb24uX3RzKSB8fCAxKTtcclxuICAgICAgYW5pbWF0aW9uID0gYW5pbWF0aW9uLl9kcDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gIXRoaXMucGFyZW50ICYmIHRoaXMuX3NhdCA/IHRoaXMuX3NhdC5nbG9iYWxUaW1lKHJhd1RpbWUpIDogdGltZTsgLy8gdGhlIF9zdGFydEF0IHR3ZWVucyBmb3IgLmZyb21UbygpIGFuZCAuZnJvbSgpIHRoYXQgaGF2ZSBpbW1lZGlhdGVSZW5kZXIgc2hvdWxkIGFsd2F5cyBiZSBGSVJTVCBpbiB0aGUgdGltZWxpbmUgKGltcG9ydGFudCBmb3IgY29udGV4dC5yZXZlcnQoKSkuIFwiX3NhdFwiIHN0YW5kcyBmb3IgX3N0YXJ0QXRUd2VlbiwgcmVmZXJyaW5nIHRvIHRoZSBwYXJlbnQgdHdlZW4gdGhhdCBjcmVhdGVkIHRoZSBfc3RhcnRBdC4gV2UgbXVzdCBkaXNjZXJuIGlmIHRoYXQgdHdlZW4gaGFkIGltbWVkaWF0ZVJlbmRlciBzbyB0aGF0IHdlIGNhbiBrbm93IHdoZXRoZXIgb3Igbm90IHRvIHByaW9yaXRpemUgaXQgaW4gcmV2ZXJ0KCkuXHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnJlcGVhdCA9IGZ1bmN0aW9uIHJlcGVhdCh2YWx1ZSkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5fcmVwZWF0ID0gdmFsdWUgPT09IEluZmluaXR5ID8gLTIgOiB2YWx1ZTtcclxuICAgICAgcmV0dXJuIF9vblVwZGF0ZVRvdGFsRHVyYXRpb24odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3JlcGVhdCA9PT0gLTIgPyBJbmZpbml0eSA6IHRoaXMuX3JlcGVhdDtcclxuICB9O1xyXG5cclxuICBfcHJvdG8ucmVwZWF0RGVsYXkgPSBmdW5jdGlvbiByZXBlYXREZWxheSh2YWx1ZSkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdmFyIHRpbWUgPSB0aGlzLl90aW1lO1xyXG4gICAgICB0aGlzLl9yRGVsYXkgPSB2YWx1ZTtcclxuXHJcbiAgICAgIF9vblVwZGF0ZVRvdGFsRHVyYXRpb24odGhpcyk7XHJcblxyXG4gICAgICByZXR1cm4gdGltZSA/IHRoaXMudGltZSh0aW1lKSA6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3JEZWxheTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8ueW95byA9IGZ1bmN0aW9uIHlveW8odmFsdWUpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX3lveW8gPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3lveW87XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnNlZWsgPSBmdW5jdGlvbiBzZWVrKHBvc2l0aW9uLCBzdXBwcmVzc0V2ZW50cykge1xyXG4gICAgcmV0dXJuIHRoaXMudG90YWxUaW1lKF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSwgX2lzTm90RmFsc2Uoc3VwcHJlc3NFdmVudHMpKTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8ucmVzdGFydCA9IGZ1bmN0aW9uIHJlc3RhcnQoaW5jbHVkZURlbGF5LCBzdXBwcmVzc0V2ZW50cykge1xyXG4gICAgdGhpcy5wbGF5KCkudG90YWxUaW1lKGluY2x1ZGVEZWxheSA/IC10aGlzLl9kZWxheSA6IDAsIF9pc05vdEZhbHNlKHN1cHByZXNzRXZlbnRzKSk7XHJcbiAgICB0aGlzLl9kdXIgfHwgKHRoaXMuX3pUaW1lID0gLV90aW55TnVtKTsgLy8gZW5zdXJlcyBvbkNvbXBsZXRlIGZpcmVzIG9uIGEgemVyby1kdXJhdGlvbiBhbmltYXRpb24gdGhhdCBnZXRzIHJlc3RhcnRlZC5cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8ucGxheSA9IGZ1bmN0aW9uIHBsYXkoZnJvbSwgc3VwcHJlc3NFdmVudHMpIHtcclxuICAgIGZyb20gIT0gbnVsbCAmJiB0aGlzLnNlZWsoZnJvbSwgc3VwcHJlc3NFdmVudHMpO1xyXG4gICAgcmV0dXJuIHRoaXMucmV2ZXJzZWQoZmFsc2UpLnBhdXNlZChmYWxzZSk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnJldmVyc2UgPSBmdW5jdGlvbiByZXZlcnNlKGZyb20sIHN1cHByZXNzRXZlbnRzKSB7XHJcbiAgICBmcm9tICE9IG51bGwgJiYgdGhpcy5zZWVrKGZyb20gfHwgdGhpcy50b3RhbER1cmF0aW9uKCksIHN1cHByZXNzRXZlbnRzKTtcclxuICAgIHJldHVybiB0aGlzLnJldmVyc2VkKHRydWUpLnBhdXNlZChmYWxzZSk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoYXRUaW1lLCBzdXBwcmVzc0V2ZW50cykge1xyXG4gICAgYXRUaW1lICE9IG51bGwgJiYgdGhpcy5zZWVrKGF0VGltZSwgc3VwcHJlc3NFdmVudHMpO1xyXG4gICAgcmV0dXJuIHRoaXMucGF1c2VkKHRydWUpO1xyXG4gIH07XHJcblxyXG4gIF9wcm90by5yZXN1bWUgPSBmdW5jdGlvbiByZXN1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXVzZWQoZmFsc2UpO1xyXG4gIH07XHJcblxyXG4gIF9wcm90by5yZXZlcnNlZCA9IGZ1bmN0aW9uIHJldmVyc2VkKHZhbHVlKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAhIXZhbHVlICE9PSB0aGlzLnJldmVyc2VkKCkgJiYgdGhpcy50aW1lU2NhbGUoLXRoaXMuX3J0cyB8fCAodmFsdWUgPyAtX3RpbnlOdW0gOiAwKSk7IC8vIGluIGNhc2UgdGltZVNjYWxlIGlzIHplcm8sIHJldmVyc2luZyB3b3VsZCBoYXZlIG5vIGVmZmVjdCBzbyB3ZSB1c2UgX3RpbnlOdW0uXHJcblxyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcnRzIDwgMDtcclxuICB9O1xyXG5cclxuICBfcHJvdG8uaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIGludmFsaWRhdGUoKSB7XHJcbiAgICB0aGlzLl9pbml0dGVkID0gdGhpcy5fYWN0ID0gMDtcclxuICAgIHRoaXMuX3pUaW1lID0gLV90aW55TnVtO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLmlzQWN0aXZlID0gZnVuY3Rpb24gaXNBY3RpdmUoKSB7XHJcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQgfHwgdGhpcy5fZHAsXHJcbiAgICAgICAgc3RhcnQgPSB0aGlzLl9zdGFydCxcclxuICAgICAgICByYXdUaW1lO1xyXG4gICAgcmV0dXJuICEhKCFwYXJlbnQgfHwgdGhpcy5fdHMgJiYgdGhpcy5faW5pdHRlZCAmJiBwYXJlbnQuaXNBY3RpdmUoKSAmJiAocmF3VGltZSA9IHBhcmVudC5yYXdUaW1lKHRydWUpKSA+PSBzdGFydCAmJiByYXdUaW1lIDwgdGhpcy5lbmRUaW1lKHRydWUpIC0gX3RpbnlOdW0pO1xyXG4gIH07XHJcblxyXG4gIF9wcm90by5ldmVudENhbGxiYWNrID0gZnVuY3Rpb24gZXZlbnRDYWxsYmFjayh0eXBlLCBjYWxsYmFjaywgcGFyYW1zKSB7XHJcbiAgICB2YXIgdmFycyA9IHRoaXMudmFycztcclxuXHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgIGRlbGV0ZSB2YXJzW3R5cGVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhcnNbdHlwZV0gPSBjYWxsYmFjaztcclxuICAgICAgICBwYXJhbXMgJiYgKHZhcnNbdHlwZSArIFwiUGFyYW1zXCJdID0gcGFyYW1zKTtcclxuICAgICAgICB0eXBlID09PSBcIm9uVXBkYXRlXCIgJiYgKHRoaXMuX29uVXBkYXRlID0gY2FsbGJhY2spO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFyc1t0eXBlXTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8udGhlbiA9IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICB2YXIgZiA9IF9pc0Z1bmN0aW9uKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogX3Bhc3NUaHJvdWdoLFxyXG4gICAgICAgICAgX3Jlc29sdmUgPSBmdW5jdGlvbiBfcmVzb2x2ZSgpIHtcclxuICAgICAgICB2YXIgX3RoZW4gPSBzZWxmLnRoZW47XHJcbiAgICAgICAgc2VsZi50aGVuID0gbnVsbDsgLy8gdGVtcG9yYXJpbHkgbnVsbCB0aGUgdGhlbigpIG1ldGhvZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dyZWVuc29jay9HU0FQL2lzc3Vlcy8zMjIpXHJcblxyXG4gICAgICAgIF9pc0Z1bmN0aW9uKGYpICYmIChmID0gZihzZWxmKSkgJiYgKGYudGhlbiB8fCBmID09PSBzZWxmKSAmJiAoc2VsZi50aGVuID0gX3RoZW4pO1xyXG4gICAgICAgIHJlc29sdmUoZik7XHJcbiAgICAgICAgc2VsZi50aGVuID0gX3RoZW47XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoc2VsZi5faW5pdHRlZCAmJiBzZWxmLnRvdGFsUHJvZ3Jlc3MoKSA9PT0gMSAmJiBzZWxmLl90cyA+PSAwIHx8ICFzZWxmLl90VGltZSAmJiBzZWxmLl90cyA8IDApIHtcclxuICAgICAgICBfcmVzb2x2ZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGYuX3Byb20gPSBfcmVzb2x2ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLmtpbGwgPSBmdW5jdGlvbiBraWxsKCkge1xyXG4gICAgX2ludGVycnVwdCh0aGlzKTtcclxuICB9O1xyXG5cclxuICByZXR1cm4gQW5pbWF0aW9uO1xyXG59KCk7XHJcblxyXG5fc2V0RGVmYXVsdHMoQW5pbWF0aW9uLnByb3RvdHlwZSwge1xyXG4gIF90aW1lOiAwLFxyXG4gIF9zdGFydDogMCxcclxuICBfZW5kOiAwLFxyXG4gIF90VGltZTogMCxcclxuICBfdER1cjogMCxcclxuICBfZGlydHk6IDAsXHJcbiAgX3JlcGVhdDogMCxcclxuICBfeW95bzogZmFsc2UsXHJcbiAgcGFyZW50OiBudWxsLFxyXG4gIF9pbml0dGVkOiBmYWxzZSxcclxuICBfckRlbGF5OiAwLFxyXG4gIF90czogMSxcclxuICBfZHA6IDAsXHJcbiAgcmF0aW86IDAsXHJcbiAgX3pUaW1lOiAtX3RpbnlOdW0sXHJcbiAgX3Byb206IDAsXHJcbiAgX3BzOiBmYWxzZSxcclxuICBfcnRzOiAxXHJcbn0pO1xyXG4vKlxyXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAqIFRJTUVMSU5FXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICovXHJcblxyXG5cclxuZXhwb3J0IHZhciBUaW1lbGluZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0FuaW1hdGlvbikge1xyXG4gIF9pbmhlcml0c0xvb3NlKFRpbWVsaW5lLCBfQW5pbWF0aW9uKTtcclxuXHJcbiAgZnVuY3Rpb24gVGltZWxpbmUodmFycywgcG9zaXRpb24pIHtcclxuICAgIHZhciBfdGhpcztcclxuXHJcbiAgICBpZiAodmFycyA9PT0gdm9pZCAwKSB7XHJcbiAgICAgIHZhcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBfdGhpcyA9IF9BbmltYXRpb24uY2FsbCh0aGlzLCB2YXJzKSB8fCB0aGlzO1xyXG4gICAgX3RoaXMubGFiZWxzID0ge307XHJcbiAgICBfdGhpcy5zbW9vdGhDaGlsZFRpbWluZyA9ICEhdmFycy5zbW9vdGhDaGlsZFRpbWluZztcclxuICAgIF90aGlzLmF1dG9SZW1vdmVDaGlsZHJlbiA9ICEhdmFycy5hdXRvUmVtb3ZlQ2hpbGRyZW47XHJcbiAgICBfdGhpcy5fc29ydCA9IF9pc05vdEZhbHNlKHZhcnMuc29ydENoaWxkcmVuKTtcclxuICAgIF9nbG9iYWxUaW1lbGluZSAmJiBfYWRkVG9UaW1lbGluZSh2YXJzLnBhcmVudCB8fCBfZ2xvYmFsVGltZWxpbmUsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBwb3NpdGlvbik7XHJcbiAgICB2YXJzLnJldmVyc2VkICYmIF90aGlzLnJldmVyc2UoKTtcclxuICAgIHZhcnMucGF1c2VkICYmIF90aGlzLnBhdXNlZCh0cnVlKTtcclxuICAgIHZhcnMuc2Nyb2xsVHJpZ2dlciAmJiBfc2Nyb2xsVHJpZ2dlcihfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgdmFycy5zY3JvbGxUcmlnZ2VyKTtcclxuICAgIHJldHVybiBfdGhpcztcclxuICB9XHJcblxyXG4gIHZhciBfcHJvdG8yID0gVGltZWxpbmUucHJvdG90eXBlO1xyXG5cclxuICBfcHJvdG8yLnRvID0gZnVuY3Rpb24gdG8odGFyZ2V0cywgdmFycywgcG9zaXRpb24pIHtcclxuICAgIF9jcmVhdGVUd2VlblR5cGUoMCwgYXJndW1lbnRzLCB0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmZyb20gPSBmdW5jdGlvbiBmcm9tKHRhcmdldHMsIHZhcnMsIHBvc2l0aW9uKSB7XHJcbiAgICBfY3JlYXRlVHdlZW5UeXBlKDEsIGFyZ3VtZW50cywgdGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMi5mcm9tVG8gPSBmdW5jdGlvbiBmcm9tVG8odGFyZ2V0cywgZnJvbVZhcnMsIHRvVmFycywgcG9zaXRpb24pIHtcclxuICAgIF9jcmVhdGVUd2VlblR5cGUoMiwgYXJndW1lbnRzLCB0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLnNldCA9IGZ1bmN0aW9uIHNldCh0YXJnZXRzLCB2YXJzLCBwb3NpdGlvbikge1xyXG4gICAgdmFycy5kdXJhdGlvbiA9IDA7XHJcbiAgICB2YXJzLnBhcmVudCA9IHRoaXM7XHJcbiAgICBfaW5oZXJpdERlZmF1bHRzKHZhcnMpLnJlcGVhdERlbGF5IHx8ICh2YXJzLnJlcGVhdCA9IDApO1xyXG4gICAgdmFycy5pbW1lZGlhdGVSZW5kZXIgPSAhIXZhcnMuaW1tZWRpYXRlUmVuZGVyO1xyXG4gICAgbmV3IFR3ZWVuKHRhcmdldHMsIHZhcnMsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSwgMSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmNhbGwgPSBmdW5jdGlvbiBjYWxsKGNhbGxiYWNrLCBwYXJhbXMsIHBvc2l0aW9uKSB7XHJcbiAgICByZXR1cm4gX2FkZFRvVGltZWxpbmUodGhpcywgVHdlZW4uZGVsYXllZENhbGwoMCwgY2FsbGJhY2ssIHBhcmFtcyksIHBvc2l0aW9uKTtcclxuICB9IC8vT05MWSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSEgTWF5YmUgZGVsZXRlP1xyXG4gIDtcclxuXHJcbiAgX3Byb3RvMi5zdGFnZ2VyVG8gPSBmdW5jdGlvbiBzdGFnZ2VyVG8odGFyZ2V0cywgZHVyYXRpb24sIHZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKSB7XHJcbiAgICB2YXJzLmR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICB2YXJzLnN0YWdnZXIgPSB2YXJzLnN0YWdnZXIgfHwgc3RhZ2dlcjtcclxuICAgIHZhcnMub25Db21wbGV0ZSA9IG9uQ29tcGxldGVBbGw7XHJcbiAgICB2YXJzLm9uQ29tcGxldGVQYXJhbXMgPSBvbkNvbXBsZXRlQWxsUGFyYW1zO1xyXG4gICAgdmFycy5wYXJlbnQgPSB0aGlzO1xyXG4gICAgbmV3IFR3ZWVuKHRhcmdldHMsIHZhcnMsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLnN0YWdnZXJGcm9tID0gZnVuY3Rpb24gc3RhZ2dlckZyb20odGFyZ2V0cywgZHVyYXRpb24sIHZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKSB7XHJcbiAgICB2YXJzLnJ1bkJhY2t3YXJkcyA9IDE7XHJcbiAgICBfaW5oZXJpdERlZmF1bHRzKHZhcnMpLmltbWVkaWF0ZVJlbmRlciA9IF9pc05vdEZhbHNlKHZhcnMuaW1tZWRpYXRlUmVuZGVyKTtcclxuICAgIHJldHVybiB0aGlzLnN0YWdnZXJUbyh0YXJnZXRzLCBkdXJhdGlvbiwgdmFycywgc3RhZ2dlciwgcG9zaXRpb24sIG9uQ29tcGxldGVBbGwsIG9uQ29tcGxldGVBbGxQYXJhbXMpO1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzIuc3RhZ2dlckZyb21UbyA9IGZ1bmN0aW9uIHN0YWdnZXJGcm9tVG8odGFyZ2V0cywgZHVyYXRpb24sIGZyb21WYXJzLCB0b1ZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKSB7XHJcbiAgICB0b1ZhcnMuc3RhcnRBdCA9IGZyb21WYXJzO1xyXG4gICAgX2luaGVyaXREZWZhdWx0cyh0b1ZhcnMpLmltbWVkaWF0ZVJlbmRlciA9IF9pc05vdEZhbHNlKHRvVmFycy5pbW1lZGlhdGVSZW5kZXIpO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhZ2dlclRvKHRhcmdldHMsIGR1cmF0aW9uLCB0b1ZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xyXG4gICAgdmFyIHByZXZUaW1lID0gdGhpcy5fdGltZSxcclxuICAgICAgICB0RHVyID0gdGhpcy5fZGlydHkgPyB0aGlzLnRvdGFsRHVyYXRpb24oKSA6IHRoaXMuX3REdXIsXHJcbiAgICAgICAgZHVyID0gdGhpcy5fZHVyLFxyXG4gICAgICAgIHRUaW1lID0gdG90YWxUaW1lIDw9IDAgPyAwIDogX3JvdW5kUHJlY2lzZSh0b3RhbFRpbWUpLFxyXG4gICAgICAgIC8vIGlmIGEgcGF1c2VkIHRpbWVsaW5lIGlzIHJlc3VtZWQgKG9yIGl0cyBfc3RhcnQgaXMgdXBkYXRlZCBmb3IgYW5vdGhlciByZWFzb24uLi53aGljaCByb3VuZHMgaXQpLCB0aGF0IGNvdWxkIHJlc3VsdCBpbiB0aGUgcGxheWhlYWQgc2hpZnRpbmcgYSAqKnRpbnkqKiBhbW91bnQgYW5kIGEgemVyby1kdXJhdGlvbiBjaGlsZCBhdCB0aGF0IHNwb3QgbWF5IGdldCByZW5kZXJlZCBhdCBhIGRpZmZlcmVudCByYXRpbywgbGlrZSBpdHMgdG90YWxUaW1lIGluIHJlbmRlcigpIG1heSBiZSAxZS0xNyBpbnN0ZWFkIG9mIDAsIGZvciBleGFtcGxlLlxyXG4gICAgY3Jvc3NpbmdTdGFydCA9IHRoaXMuX3pUaW1lIDwgMCAhPT0gdG90YWxUaW1lIDwgMCAmJiAodGhpcy5faW5pdHRlZCB8fCAhZHVyKSxcclxuICAgICAgICB0aW1lLFxyXG4gICAgICAgIGNoaWxkLFxyXG4gICAgICAgIG5leHQsXHJcbiAgICAgICAgaXRlcmF0aW9uLFxyXG4gICAgICAgIGN5Y2xlRHVyYXRpb24sXHJcbiAgICAgICAgcHJldlBhdXNlZCxcclxuICAgICAgICBwYXVzZVR3ZWVuLFxyXG4gICAgICAgIHRpbWVTY2FsZSxcclxuICAgICAgICBwcmV2U3RhcnQsXHJcbiAgICAgICAgcHJldkl0ZXJhdGlvbixcclxuICAgICAgICB5b3lvLFxyXG4gICAgICAgIGlzWW95bztcclxuICAgIHRoaXMgIT09IF9nbG9iYWxUaW1lbGluZSAmJiB0VGltZSA+IHREdXIgJiYgdG90YWxUaW1lID49IDAgJiYgKHRUaW1lID0gdER1cik7XHJcblxyXG4gICAgaWYgKHRUaW1lICE9PSB0aGlzLl90VGltZSB8fCBmb3JjZSB8fCBjcm9zc2luZ1N0YXJ0KSB7XHJcbiAgICAgIGlmIChwcmV2VGltZSAhPT0gdGhpcy5fdGltZSAmJiBkdXIpIHtcclxuICAgICAgICAvL2lmIHRvdGFsRHVyYXRpb24oKSBmaW5kcyBhIGNoaWxkIHdpdGggYSBuZWdhdGl2ZSBzdGFydFRpbWUgYW5kIHNtb290aENoaWxkVGltaW5nIGlzIHRydWUsIHRoaW5ncyBnZXQgc2hpZnRlZCBhcm91bmQgaW50ZXJuYWxseSBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgdGltZSBhY2NvcmRpbmdseS4gRm9yIGV4YW1wbGUsIGlmIGEgdHdlZW4gc3RhcnRzIGF0IC0zMCB3ZSBtdXN0IHNoaWZ0IEVWRVJZVEhJTkcgZm9yd2FyZCAzMCBzZWNvbmRzIGFuZCBtb3ZlIHRoaXMgdGltZWxpbmUncyBzdGFydFRpbWUgYmFja3dhcmQgYnkgMzAgc2Vjb25kcyBzbyB0aGF0IHRoaW5ncyBhbGlnbiB3aXRoIHRoZSBwbGF5aGVhZCAobm8ganVtcCkuXHJcbiAgICAgICAgdFRpbWUgKz0gdGhpcy5fdGltZSAtIHByZXZUaW1lO1xyXG4gICAgICAgIHRvdGFsVGltZSArPSB0aGlzLl90aW1lIC0gcHJldlRpbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRpbWUgPSB0VGltZTtcclxuICAgICAgcHJldlN0YXJ0ID0gdGhpcy5fc3RhcnQ7XHJcbiAgICAgIHRpbWVTY2FsZSA9IHRoaXMuX3RzO1xyXG4gICAgICBwcmV2UGF1c2VkID0gIXRpbWVTY2FsZTtcclxuXHJcbiAgICAgIGlmIChjcm9zc2luZ1N0YXJ0KSB7XHJcbiAgICAgICAgZHVyIHx8IChwcmV2VGltZSA9IHRoaXMuX3pUaW1lKTsgLy93aGVuIHRoZSBwbGF5aGVhZCBhcnJpdmVzIGF0IEVYQUNUTFkgdGltZSAwIChyaWdodCBvbiB0b3ApIG9mIGEgemVyby1kdXJhdGlvbiB0aW1lbGluZSwgd2UgbmVlZCB0byBkaXNjZXJuIGlmIGV2ZW50cyBhcmUgc3VwcHJlc3NlZCBzbyB0aGF0IHdoZW4gdGhlIHBsYXloZWFkIG1vdmVzIGFnYWluIChuZXh0IHRpbWUpLCBpdCdsbCB0cmlnZ2VyIHRoZSBjYWxsYmFjay4gSWYgZXZlbnRzIGFyZSBOT1Qgc3VwcHJlc3NlZCwgb2J2aW91c2x5IHRoZSBjYWxsYmFjayB3b3VsZCBiZSB0cmlnZ2VyZWQgaW4gdGhpcyByZW5kZXIuIEJhc2ljYWxseSwgdGhlIGNhbGxiYWNrIHNob3VsZCBmaXJlIGVpdGhlciB3aGVuIHRoZSBwbGF5aGVhZCBBUlJJVkVTIG9yIExFQVZFUyB0aGlzIGV4YWN0IHNwb3QsIG5vdCBib3RoLiBJbWFnaW5lIGRvaW5nIGEgdGltZWxpbmUuc2VlaygwKSBhbmQgdGhlcmUncyBhIGNhbGxiYWNrIHRoYXQgc2l0cyBhdCAwLiBTaW5jZSBldmVudHMgYXJlIHN1cHByZXNzZWQgb24gdGhhdCBzZWVrKCkgYnkgZGVmYXVsdCwgbm90aGluZyB3aWxsIGZpcmUsIGJ1dCB3aGVuIHRoZSBwbGF5aGVhZCBtb3ZlcyBvZmYgb2YgdGhhdCBwb3NpdGlvbiwgdGhlIGNhbGxiYWNrIHNob3VsZCBmaXJlLiBUaGlzIGJlaGF2aW9yIGlzIHdoYXQgcGVvcGxlIGludHVpdGl2ZWx5IGV4cGVjdC5cclxuXHJcbiAgICAgICAgKHRvdGFsVGltZSB8fCAhc3VwcHJlc3NFdmVudHMpICYmICh0aGlzLl96VGltZSA9IHRvdGFsVGltZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLl9yZXBlYXQpIHtcclxuICAgICAgICAvL2FkanVzdCB0aGUgdGltZSBmb3IgcmVwZWF0cyBhbmQgeW95b3NcclxuICAgICAgICB5b3lvID0gdGhpcy5feW95bztcclxuICAgICAgICBjeWNsZUR1cmF0aW9uID0gZHVyICsgdGhpcy5fckRlbGF5O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcmVwZWF0IDwgLTEgJiYgdG90YWxUaW1lIDwgMCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxUaW1lKGN5Y2xlRHVyYXRpb24gKiAxMDAgKyB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aW1lID0gX3JvdW5kUHJlY2lzZSh0VGltZSAlIGN5Y2xlRHVyYXRpb24pOyAvL3JvdW5kIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IGVycm9ycy4gKDQgJSAwLjggc2hvdWxkIGJlIDAgYnV0IHNvbWUgYnJvd3NlcnMgcmVwb3J0IGl0IGFzIDAuNzk5OTk5OTkhKVxyXG5cclxuICAgICAgICBpZiAodFRpbWUgPT09IHREdXIpIHtcclxuICAgICAgICAgIC8vIHRoZSB0RHVyID09PSB0VGltZSBpcyBmb3IgZWRnZSBjYXNlcyB3aGVyZSB0aGVyZSdzIGEgbGVuZ3RoeSBkZWNpbWFsIG9uIHRoZSBkdXJhdGlvbiBhbmQgaXQgbWF5IHJlYWNoIHRoZSB2ZXJ5IGVuZCBidXQgdGhlIHRpbWUgaXMgcmVuZGVyZWQgYXMgbm90LXF1aXRlLXRoZXJlIChyZW1lbWJlciwgdER1ciBpcyByb3VuZGVkIHRvIDQgZGVjaW1hbHMgd2hlcmVhcyBkdXIgaXNuJ3QpXHJcbiAgICAgICAgICBpdGVyYXRpb24gPSB0aGlzLl9yZXBlYXQ7XHJcbiAgICAgICAgICB0aW1lID0gZHVyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmV2SXRlcmF0aW9uID0gX3JvdW5kUHJlY2lzZSh0VGltZSAvIGN5Y2xlRHVyYXRpb24pOyAvLyBmdWxsIGRlY2ltYWwgdmVyc2lvbiBvZiBpdGVyYXRpb25zLCBub3QgdGhlIHByZXZpb3VzIGl0ZXJhdGlvbiAod2UncmUgcmV1c2luZyBwcmV2SXRlcmF0aW9uIHZhcmlhYmxlIGZvciBlZmZpY2llbmN5KVxyXG5cclxuICAgICAgICAgIGl0ZXJhdGlvbiA9IH5+cHJldkl0ZXJhdGlvbjtcclxuXHJcbiAgICAgICAgICBpZiAoaXRlcmF0aW9uICYmIGl0ZXJhdGlvbiA9PT0gcHJldkl0ZXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lID0gZHVyO1xyXG4gICAgICAgICAgICBpdGVyYXRpb24tLTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aW1lID4gZHVyICYmICh0aW1lID0gZHVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByZXZJdGVyYXRpb24gPSBfYW5pbWF0aW9uQ3ljbGUodGhpcy5fdFRpbWUsIGN5Y2xlRHVyYXRpb24pO1xyXG4gICAgICAgICFwcmV2VGltZSAmJiB0aGlzLl90VGltZSAmJiBwcmV2SXRlcmF0aW9uICE9PSBpdGVyYXRpb24gJiYgdGhpcy5fdFRpbWUgLSBwcmV2SXRlcmF0aW9uICogY3ljbGVEdXJhdGlvbiAtIHRoaXMuX2R1ciA8PSAwICYmIChwcmV2SXRlcmF0aW9uID0gaXRlcmF0aW9uKTsgLy8gZWRnZSBjYXNlIC0gaWYgc29tZW9uZSBkb2VzIGFkZFBhdXNlKCkgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIGEgcmVwZWF0aW5nIHRpbWVsaW5lLCB0aGF0IHBhdXNlIGlzIHRlY2huaWNhbGx5IGF0IHRoZSBzYW1lIHNwb3QgYXMgdGhlIGVuZCB3aGljaCBjYXVzZXMgdGhpcy5fdGltZSB0byBnZXQgc2V0IHRvIDAgd2hlbiB0aGUgdG90YWxUaW1lIHdvdWxkIG5vcm1hbGx5IHBsYWNlIHRoZSBwbGF5aGVhZCBhdCB0aGUgZW5kLiBTZWUgaHR0cHM6Ly9nc2FwLmNvbS9mb3J1bXMvdG9waWMvMjM4MjMtY2xvc2luZy1uYXYtYW5pbWF0aW9uLW5vdC13b3JraW5nLW9uLWllLWFuZC1pcGhvbmUtNi1tYXliZS1vdGhlci1vbGRlci1icm93c2VyLz90YWI9Y29tbWVudHMjY29tbWVudC0xMTMwMDUgYWxzbywgdGhpcy5fdFRpbWUgLSBwcmV2SXRlcmF0aW9uICogY3ljbGVEdXJhdGlvbiAtIHRoaXMuX2R1ciA8PSAwIGp1c3QgY2hlY2tzIHRvIG1ha2Ugc3VyZSBpdCB3YXNuJ3QgcHJldmlvdXNseSBpbiB0aGUgXCJyZXBlYXREZWxheVwiIHBvcnRpb25cclxuXHJcbiAgICAgICAgaWYgKHlveW8gJiYgaXRlcmF0aW9uICYgMSkge1xyXG4gICAgICAgICAgdGltZSA9IGR1ciAtIHRpbWU7XHJcbiAgICAgICAgICBpc1lveW8gPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKlxyXG4gICAgICAgIG1ha2Ugc3VyZSBjaGlsZHJlbiBhdCB0aGUgZW5kL2JlZ2lubmluZyBvZiB0aGUgdGltZWxpbmUgYXJlIHJlbmRlcmVkIHByb3Blcmx5LiBJZiwgZm9yIGV4YW1wbGUsXHJcbiAgICAgICAgYSAzLXNlY29uZCBsb25nIHRpbWVsaW5lIHJlbmRlcmVkIGF0IDIuOSBzZWNvbmRzIHByZXZpb3VzbHksIGFuZCBub3cgcmVuZGVycyBhdCAzLjIgc2Vjb25kcyAod2hpY2hcclxuICAgICAgICB3b3VsZCBnZXQgdHJhbnNsYXRlZCB0byAyLjggc2Vjb25kcyBpZiB0aGUgdGltZWxpbmUgeW95b3Mgb3IgMC4yIHNlY29uZHMgaWYgaXQganVzdCByZXBlYXRzKSwgdGhlcmVcclxuICAgICAgICBjb3VsZCBiZSBhIGNhbGxiYWNrIG9yIGEgc2hvcnQgdHdlZW4gdGhhdCdzIGF0IDIuOTUgb3IgMyBzZWNvbmRzIGluIHdoaWNoIHdvdWxkbid0IHJlbmRlci4gU29cclxuICAgICAgICB3ZSBuZWVkIHRvIHB1c2ggdGhlIHRpbWVsaW5lIHRvIHRoZSBlbmQgKGFuZC9vciBiZWdpbm5pbmcgZGVwZW5kaW5nIG9uIGl0cyB5b3lvIHZhbHVlKS4gQWxzbyB3ZSBtdXN0XHJcbiAgICAgICAgZW5zdXJlIHRoYXQgemVyby1kdXJhdGlvbiB0d2VlbnMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgVGltZWxpbmUgd29yay5cclxuICAgICAgICAqL1xyXG5cclxuXHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbiAhPT0gcHJldkl0ZXJhdGlvbiAmJiAhdGhpcy5fbG9jaykge1xyXG4gICAgICAgICAgdmFyIHJld2luZGluZyA9IHlveW8gJiYgcHJldkl0ZXJhdGlvbiAmIDEsXHJcbiAgICAgICAgICAgICAgZG9lc1dyYXAgPSByZXdpbmRpbmcgPT09ICh5b3lvICYmIGl0ZXJhdGlvbiAmIDEpO1xyXG4gICAgICAgICAgaXRlcmF0aW9uIDwgcHJldkl0ZXJhdGlvbiAmJiAocmV3aW5kaW5nID0gIXJld2luZGluZyk7XHJcbiAgICAgICAgICBwcmV2VGltZSA9IHJld2luZGluZyA/IDAgOiB0VGltZSAlIGR1ciA/IGR1ciA6IHRUaW1lOyAvLyBpZiB0aGUgcGxheWhlYWQgaXMgbGFuZGluZyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYW4gaXRlcmF0aW9uLCB1c2UgdGhhdCB0b3RhbFRpbWUgcmF0aGVyIHRoYW4gb25seSB0aGUgZHVyYXRpb24sIG90aGVyd2lzZSBpdCdsbCBza2lwIHRoZSAybmQgcmVuZGVyIHNpbmNlIGl0J3MgZWZmZWN0aXZlbHkgYXQgdGhlIHNhbWUgdGltZS5cclxuXHJcbiAgICAgICAgICB0aGlzLl9sb2NrID0gMTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyKHByZXZUaW1lIHx8IChpc1lveW8gPyAwIDogX3JvdW5kUHJlY2lzZShpdGVyYXRpb24gKiBjeWNsZUR1cmF0aW9uKSksIHN1cHByZXNzRXZlbnRzLCAhZHVyKS5fbG9jayA9IDA7XHJcbiAgICAgICAgICB0aGlzLl90VGltZSA9IHRUaW1lOyAvLyBpZiBhIHVzZXIgZ2V0cyB0aGUgaXRlcmF0aW9uKCkgaW5zaWRlIHRoZSBvblJlcGVhdCwgZm9yIGV4YW1wbGUsIGl0IHNob3VsZCBiZSBhY2N1cmF0ZS5cclxuXHJcbiAgICAgICAgICAhc3VwcHJlc3NFdmVudHMgJiYgdGhpcy5wYXJlbnQgJiYgX2NhbGxiYWNrKHRoaXMsIFwib25SZXBlYXRcIik7XHJcbiAgICAgICAgICB0aGlzLnZhcnMucmVwZWF0UmVmcmVzaCAmJiAhaXNZb3lvICYmICh0aGlzLmludmFsaWRhdGUoKS5fbG9jayA9IDEpO1xyXG5cclxuICAgICAgICAgIGlmIChwcmV2VGltZSAmJiBwcmV2VGltZSAhPT0gdGhpcy5fdGltZSB8fCBwcmV2UGF1c2VkICE9PSAhdGhpcy5fdHMgfHwgdGhpcy52YXJzLm9uUmVwZWF0ICYmICF0aGlzLnBhcmVudCAmJiAhdGhpcy5fYWN0KSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHByZXZUaW1lIGlzIDAgYW5kIHdlIHJlbmRlciBhdCB0aGUgdmVyeSBlbmQsIF90aW1lIHdpbGwgYmUgdGhlIGVuZCwgdGh1cyB3b24ndCBtYXRjaC4gU28gaW4gdGhpcyBlZGdlIGNhc2UsIHByZXZUaW1lIHdvbid0IG1hdGNoIF90aW1lIGJ1dCB0aGF0J3Mgb2theS4gSWYgaXQgZ2V0cyBraWxsZWQgaW4gdGhlIG9uUmVwZWF0LCBlamVjdCBhcyB3ZWxsLlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkdXIgPSB0aGlzLl9kdXI7IC8vIGluIGNhc2UgdGhlIGR1cmF0aW9uIGNoYW5nZWQgaW4gdGhlIG9uUmVwZWF0XHJcblxyXG4gICAgICAgICAgdER1ciA9IHRoaXMuX3REdXI7XHJcblxyXG4gICAgICAgICAgaWYgKGRvZXNXcmFwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvY2sgPSAyO1xyXG4gICAgICAgICAgICBwcmV2VGltZSA9IHJld2luZGluZyA/IGR1ciA6IC0wLjAwMDE7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKHByZXZUaW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy52YXJzLnJlcGVhdFJlZnJlc2ggJiYgIWlzWW95byAmJiB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLl9sb2NrID0gMDtcclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3RzICYmICFwcmV2UGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgfSAvL2luIG9yZGVyIGZvciB5b3lvRWFzZSB0byB3b3JrIHByb3Blcmx5IHdoZW4gdGhlcmUncyBhIHN0YWdnZXIsIHdlIG11c3Qgc3dhcCBvdXQgdGhlIGVhc2UgaW4gZWFjaCBzdWItdHdlZW4uXHJcblxyXG5cclxuICAgICAgICAgIF9wcm9wYWdhdGVZb3lvRWFzZSh0aGlzLCBpc1lveW8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuX2hhc1BhdXNlICYmICF0aGlzLl9mb3JjaW5nICYmIHRoaXMuX2xvY2sgPCAyKSB7XHJcbiAgICAgICAgcGF1c2VUd2VlbiA9IF9maW5kTmV4dFBhdXNlVHdlZW4odGhpcywgX3JvdW5kUHJlY2lzZShwcmV2VGltZSksIF9yb3VuZFByZWNpc2UodGltZSkpO1xyXG5cclxuICAgICAgICBpZiAocGF1c2VUd2Vlbikge1xyXG4gICAgICAgICAgdFRpbWUgLT0gdGltZSAtICh0aW1lID0gcGF1c2VUd2Vlbi5fc3RhcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fdFRpbWUgPSB0VGltZTtcclxuICAgICAgdGhpcy5fdGltZSA9IHRpbWU7XHJcbiAgICAgIHRoaXMuX2FjdCA9ICF0aW1lU2NhbGU7IC8vYXMgbG9uZyBhcyBpdCdzIG5vdCBwYXVzZWQsIGZvcmNlIGl0IHRvIGJlIGFjdGl2ZSBzbyB0aGF0IGlmIHRoZSB1c2VyIHJlbmRlcnMgaW5kZXBlbmRlbnQgb2YgdGhlIHBhcmVudCB0aW1lbGluZSwgaXQnbGwgYmUgZm9yY2VkIHRvIHJlLXJlbmRlciBvbiB0aGUgbmV4dCB0aWNrLlxyXG5cclxuICAgICAgaWYgKCF0aGlzLl9pbml0dGVkKSB7XHJcbiAgICAgICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLnZhcnMub25VcGRhdGU7XHJcbiAgICAgICAgdGhpcy5faW5pdHRlZCA9IDE7XHJcbiAgICAgICAgdGhpcy5felRpbWUgPSB0b3RhbFRpbWU7XHJcbiAgICAgICAgcHJldlRpbWUgPSAwOyAvLyB1cG9uIGluaXQsIHRoZSBwbGF5aGVhZCBzaG91bGQgYWx3YXlzIGdvIGZvcndhcmQ7IHNvbWVvbmUgY291bGQgaW52YWxpZGF0ZSgpIGEgY29tcGxldGVkIHRpbWVsaW5lIGFuZCB0aGVuIGlmIHRoZXkgcmVzdGFydCgpLCB0aGF0IHdvdWxkIG1ha2UgY2hpbGQgdHdlZW5zIHJlbmRlciBpbiByZXZlcnNlIG9yZGVyIHdoaWNoIGNvdWxkIGxvY2sgaW4gdGhlIHdyb25nIHN0YXJ0aW5nIHZhbHVlcyBpZiB0aGV5IGJ1aWxkIG9uIGVhY2ggb3RoZXIsIGxpa2UgdGwudG8ob2JqLCB7eDogMTAwfSkudG8ob2JqLCB7eDogMH0pLlxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXByZXZUaW1lICYmIHRUaW1lICYmICFzdXBwcmVzc0V2ZW50cyAmJiAhcHJldkl0ZXJhdGlvbikge1xyXG4gICAgICAgIF9jYWxsYmFjayh0aGlzLCBcIm9uU3RhcnRcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90VGltZSAhPT0gdFRpbWUpIHtcclxuICAgICAgICAgIC8vIGluIGNhc2UgdGhlIG9uU3RhcnQgdHJpZ2dlcmVkIGEgcmVuZGVyIGF0IGEgZGlmZmVyZW50IHNwb3QsIGVqZWN0LiBMaWtlIGlmIHNvbWVvbmUgZGlkIGFuaW1hdGlvbi5wYXVzZSgwLjUpIG9yIHNvbWV0aGluZyBpbnNpZGUgdGhlIG9uU3RhcnQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aW1lID49IHByZXZUaW1lICYmIHRvdGFsVGltZSA+PSAwKSB7XHJcbiAgICAgICAgY2hpbGQgPSB0aGlzLl9maXJzdDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGNoaWxkKSB7XHJcbiAgICAgICAgICBuZXh0ID0gY2hpbGQuX25leHQ7XHJcblxyXG4gICAgICAgICAgaWYgKChjaGlsZC5fYWN0IHx8IHRpbWUgPj0gY2hpbGQuX3N0YXJ0KSAmJiBjaGlsZC5fdHMgJiYgcGF1c2VUd2VlbiAhPT0gY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLnBhcmVudCAhPT0gdGhpcykge1xyXG4gICAgICAgICAgICAgIC8vIGFuIGV4dHJlbWUgZWRnZSBjYXNlIC0gdGhlIGNoaWxkJ3MgcmVuZGVyIGNvdWxkIGRvIHNvbWV0aGluZyBsaWtlIGtpbGwoKSB0aGUgXCJuZXh0XCIgb25lIGluIHRoZSBsaW5rZWQgbGlzdCwgb3IgcmVwYXJlbnQgaXQuIEluIHRoYXQgY2FzZSB3ZSBtdXN0IHJlLWluaXRpYXRlIHRoZSB3aG9sZSByZW5kZXIgdG8gYmUgc2FmZS5cclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXIodG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGlsZC5yZW5kZXIoY2hpbGQuX3RzID4gMCA/ICh0aW1lIC0gY2hpbGQuX3N0YXJ0KSAqIGNoaWxkLl90cyA6IChjaGlsZC5fZGlydHkgPyBjaGlsZC50b3RhbER1cmF0aW9uKCkgOiBjaGlsZC5fdER1cikgKyAodGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGltZSAhPT0gdGhpcy5fdGltZSB8fCAhdGhpcy5fdHMgJiYgIXByZXZQYXVzZWQpIHtcclxuICAgICAgICAgICAgICAvL2luIGNhc2UgYSB0d2VlbiBwYXVzZXMgb3Igc2Vla3MgdGhlIHRpbWVsaW5lIHdoZW4gcmVuZGVyaW5nLCBsaWtlIGluc2lkZSBvZiBhbiBvblVwZGF0ZS9vbkNvbXBsZXRlXHJcbiAgICAgICAgICAgICAgcGF1c2VUd2VlbiA9IDA7XHJcbiAgICAgICAgICAgICAgbmV4dCAmJiAodFRpbWUgKz0gdGhpcy5felRpbWUgPSAtX3RpbnlOdW0pOyAvLyBpdCBkaWRuJ3QgZmluaXNoIHJlbmRlcmluZywgc28gZmxhZyB6VGltZSBhcyBuZWdhdGl2ZSBzbyB0aGF0IHRoZSBuZXh0IHRpbWUgcmVuZGVyKCkgaXMgY2FsbGVkIGl0J2xsIGJlIGZvcmNlZCAodG8gcmVuZGVyIGFueSByZW1haW5pbmcgY2hpbGRyZW4pXHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY2hpbGQgPSBuZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjaGlsZCA9IHRoaXMuX2xhc3Q7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkVGltZSA9IHRvdGFsVGltZSA8IDAgPyB0b3RhbFRpbWUgOiB0aW1lOyAvL3doZW4gdGhlIHBsYXloZWFkIGdvZXMgYmFja3dhcmQgYmV5b25kIHRoZSBzdGFydCBvZiB0aGlzIHRpbWVsaW5lLCB3ZSBtdXN0IHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBkb3duIHRvIHRoZSBjaGlsZCBhbmltYXRpb25zIHNvIHRoYXQgemVyby1kdXJhdGlvbiB0d2VlbnMga25vdyB3aGV0aGVyIHRvIHJlbmRlciB0aGVpciBzdGFydGluZyBvciBlbmRpbmcgdmFsdWVzLlxyXG5cclxuICAgICAgICB3aGlsZSAoY2hpbGQpIHtcclxuICAgICAgICAgIG5leHQgPSBjaGlsZC5fcHJldjtcclxuXHJcbiAgICAgICAgICBpZiAoKGNoaWxkLl9hY3QgfHwgYWRqdXN0ZWRUaW1lIDw9IGNoaWxkLl9lbmQpICYmIGNoaWxkLl90cyAmJiBwYXVzZVR3ZWVuICE9PSBjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQucGFyZW50ICE9PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgLy8gYW4gZXh0cmVtZSBlZGdlIGNhc2UgLSB0aGUgY2hpbGQncyByZW5kZXIgY291bGQgZG8gc29tZXRoaW5nIGxpa2Uga2lsbCgpIHRoZSBcIm5leHRcIiBvbmUgaW4gdGhlIGxpbmtlZCBsaXN0LCBvciByZXBhcmVudCBpdC4gSW4gdGhhdCBjYXNlIHdlIG11c3QgcmUtaW5pdGlhdGUgdGhlIHdob2xlIHJlbmRlciB0byBiZSBzYWZlLlxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoaWxkLnJlbmRlcihjaGlsZC5fdHMgPiAwID8gKGFkanVzdGVkVGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMgOiAoY2hpbGQuX2RpcnR5ID8gY2hpbGQudG90YWxEdXJhdGlvbigpIDogY2hpbGQuX3REdXIpICsgKGFkanVzdGVkVGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSB8fCBfcmV2ZXJ0aW5nICYmIF9pc1JldmVydFdvcnRoeShjaGlsZCkpOyAvLyBpZiByZXZlcnRpbmcsIHdlIHNob3VsZCBhbHdheXMgZm9yY2UgcmVuZGVycyBvZiBpbml0dGVkIHR3ZWVucyAoYnV0IHJlbWVtYmVyIHRoYXQgLmZyb21UbygpIG9yIC5mcm9tKCkgbWF5IGhhdmUgYSBfc3RhcnRBdCBidXQgbm90IF9pbml0dGVkIHlldCkuIElmLCBmb3IgZXhhbXBsZSwgYSAuZnJvbVRvKCkgdHdlZW4gd2l0aCBhIHN0YWdnZXIgKHdoaWNoIGNyZWF0ZXMgYW4gaW50ZXJuYWwgdGltZWxpbmUpIGdldHMgcmV2ZXJ0ZWQgQkVGT1JFIHNvbWUgb2YgaXRzIGNoaWxkIHR3ZWVucyByZW5kZXIgZm9yIHRoZSBmaXJzdCB0aW1lLCBpdCBtYXkgbm90IHByb3Blcmx5IHRyaWdnZXIgdGhlbSB0byByZXZlcnQuXHJcblxyXG4gICAgICAgICAgICBpZiAodGltZSAhPT0gdGhpcy5fdGltZSB8fCAhdGhpcy5fdHMgJiYgIXByZXZQYXVzZWQpIHtcclxuICAgICAgICAgICAgICAvL2luIGNhc2UgYSB0d2VlbiBwYXVzZXMgb3Igc2Vla3MgdGhlIHRpbWVsaW5lIHdoZW4gcmVuZGVyaW5nLCBsaWtlIGluc2lkZSBvZiBhbiBvblVwZGF0ZS9vbkNvbXBsZXRlXHJcbiAgICAgICAgICAgICAgcGF1c2VUd2VlbiA9IDA7XHJcbiAgICAgICAgICAgICAgbmV4dCAmJiAodFRpbWUgKz0gdGhpcy5felRpbWUgPSBhZGp1c3RlZFRpbWUgPyAtX3RpbnlOdW0gOiBfdGlueU51bSk7IC8vIGl0IGRpZG4ndCBmaW5pc2ggcmVuZGVyaW5nLCBzbyBhZGp1c3QgelRpbWUgc28gdGhhdCBzbyB0aGF0IHRoZSBuZXh0IHRpbWUgcmVuZGVyKCkgaXMgY2FsbGVkIGl0J2xsIGJlIGZvcmNlZCAodG8gcmVuZGVyIGFueSByZW1haW5pbmcgY2hpbGRyZW4pXHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY2hpbGQgPSBuZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBhdXNlVHdlZW4gJiYgIXN1cHByZXNzRXZlbnRzKSB7XHJcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xyXG4gICAgICAgIHBhdXNlVHdlZW4ucmVuZGVyKHRpbWUgPj0gcHJldlRpbWUgPyAwIDogLV90aW55TnVtKS5felRpbWUgPSB0aW1lID49IHByZXZUaW1lID8gMSA6IC0xO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdHMpIHtcclxuICAgICAgICAgIC8vdGhlIGNhbGxiYWNrIHJlc3VtZWQgcGxheWJhY2shIFNvIHNpbmNlIHdlIG1heSBoYXZlIGhlbGQgYmFjayB0aGUgcGxheWhlYWQgZHVlIHRvIHdoZXJlIHRoZSBwYXVzZSBpcyBwb3NpdGlvbmVkLCBnbyBhaGVhZCBhbmQganVtcCB0byB3aGVyZSBpdCdzIFNVUFBPU0VEIHRvIGJlIChpZiBubyBwYXVzZSBoYXBwZW5lZCkuXHJcbiAgICAgICAgICB0aGlzLl9zdGFydCA9IHByZXZTdGFydDsgLy9pZiB0aGUgcGF1c2Ugd2FzIGF0IGFuIGVhcmxpZXIgdGltZSBhbmQgdGhlIHVzZXIgcmVzdW1lZCBpbiB0aGUgY2FsbGJhY2ssIGl0IGNvdWxkIHJlcG9zaXRpb24gdGhlIHRpbWVsaW5lIChjaGFuZ2luZyBpdHMgc3RhcnRUaW1lKSwgdGhyb3dpbmcgdGhpbmdzIG9mZiBzbGlnaHRseSwgc28gd2UgbWFrZSBzdXJlIHRoZSBfc3RhcnQgZG9lc24ndCBzaGlmdC5cclxuXHJcbiAgICAgICAgICBfc2V0RW5kKHRoaXMpO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9vblVwZGF0ZSAmJiAhc3VwcHJlc3NFdmVudHMgJiYgX2NhbGxiYWNrKHRoaXMsIFwib25VcGRhdGVcIiwgdHJ1ZSk7XHJcbiAgICAgIGlmICh0VGltZSA9PT0gdER1ciAmJiB0aGlzLl90VGltZSA+PSB0aGlzLnRvdGFsRHVyYXRpb24oKSB8fCAhdFRpbWUgJiYgcHJldlRpbWUpIGlmIChwcmV2U3RhcnQgPT09IHRoaXMuX3N0YXJ0IHx8IE1hdGguYWJzKHRpbWVTY2FsZSkgIT09IE1hdGguYWJzKHRoaXMuX3RzKSkgaWYgKCF0aGlzLl9sb2NrKSB7XHJcbiAgICAgICAgLy8gcmVtZW1iZXIsIGEgY2hpbGQncyBjYWxsYmFjayBtYXkgYWx0ZXIgdGhpcyB0aW1lbGluZSdzIHBsYXloZWFkIG9yIHRpbWVTY2FsZSB3aGljaCBpcyB3aHkgd2UgbmVlZCB0byBhZGQgc29tZSBvZiB0aGVzZSBjaGVja3MuXHJcbiAgICAgICAgKHRvdGFsVGltZSB8fCAhZHVyKSAmJiAodFRpbWUgPT09IHREdXIgJiYgdGhpcy5fdHMgPiAwIHx8ICF0VGltZSAmJiB0aGlzLl90cyA8IDApICYmIF9yZW1vdmVGcm9tUGFyZW50KHRoaXMsIDEpOyAvLyBkb24ndCByZW1vdmUgaWYgdGhlIHRpbWVsaW5lIGlzIHJldmVyc2VkIGFuZCB0aGUgcGxheWhlYWQgaXNuJ3QgYXQgMCwgb3RoZXJ3aXNlIHRsLnByb2dyZXNzKDEpLnJldmVyc2UoKSB3b24ndCB3b3JrLiBPbmx5IHJlbW92ZSBpZiB0aGUgcGxheWhlYWQgaXMgYXQgdGhlIGVuZCBhbmQgdGltZVNjYWxlIGlzIHBvc2l0aXZlLCBvciBpZiB0aGUgcGxheWhlYWQgaXMgYXQgMCBhbmQgdGhlIHRpbWVTY2FsZSBpcyBuZWdhdGl2ZS5cclxuXHJcbiAgICAgICAgaWYgKCFzdXBwcmVzc0V2ZW50cyAmJiAhKHRvdGFsVGltZSA8IDAgJiYgIXByZXZUaW1lKSAmJiAodFRpbWUgfHwgcHJldlRpbWUgfHwgIXREdXIpKSB7XHJcbiAgICAgICAgICBfY2FsbGJhY2sodGhpcywgdFRpbWUgPT09IHREdXIgJiYgdG90YWxUaW1lID49IDAgPyBcIm9uQ29tcGxldGVcIiA6IFwib25SZXZlcnNlQ29tcGxldGVcIiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5fcHJvbSAmJiAhKHRUaW1lIDwgdER1ciAmJiB0aGlzLnRpbWVTY2FsZSgpID4gMCkgJiYgdGhpcy5fcHJvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzIuYWRkID0gZnVuY3Rpb24gYWRkKGNoaWxkLCBwb3NpdGlvbikge1xyXG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XHJcblxyXG4gICAgX2lzTnVtYmVyKHBvc2l0aW9uKSB8fCAocG9zaXRpb24gPSBfcGFyc2VQb3NpdGlvbih0aGlzLCBwb3NpdGlvbiwgY2hpbGQpKTtcclxuXHJcbiAgICBpZiAoIShjaGlsZCBpbnN0YW5jZW9mIEFuaW1hdGlvbikpIHtcclxuICAgICAgaWYgKF9pc0FycmF5KGNoaWxkKSkge1xyXG4gICAgICAgIGNoaWxkLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5hZGQob2JqLCBwb3NpdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChfaXNTdHJpbmcoY2hpbGQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGFiZWwoY2hpbGQsIHBvc2l0aW9uKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKF9pc0Z1bmN0aW9uKGNoaWxkKSkge1xyXG4gICAgICAgIGNoaWxkID0gVHdlZW4uZGVsYXllZENhbGwoMCwgY2hpbGQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMgIT09IGNoaWxkID8gX2FkZFRvVGltZWxpbmUodGhpcywgY2hpbGQsIHBvc2l0aW9uKSA6IHRoaXM7IC8vZG9uJ3QgYWxsb3cgYSB0aW1lbGluZSB0byBiZSBhZGRlZCB0byBpdHNlbGYgYXMgYSBjaGlsZCFcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmdldENoaWxkcmVuID0gZnVuY3Rpb24gZ2V0Q2hpbGRyZW4obmVzdGVkLCB0d2VlbnMsIHRpbWVsaW5lcywgaWdub3JlQmVmb3JlVGltZSkge1xyXG4gICAgaWYgKG5lc3RlZCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgIG5lc3RlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR3ZWVucyA9PT0gdm9pZCAwKSB7XHJcbiAgICAgIHR3ZWVucyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRpbWVsaW5lcyA9PT0gdm9pZCAwKSB7XHJcbiAgICAgIHRpbWVsaW5lcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlnbm9yZUJlZm9yZVRpbWUgPT09IHZvaWQgMCkge1xyXG4gICAgICBpZ25vcmVCZWZvcmVUaW1lID0gLV9iaWdOdW07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGEgPSBbXSxcclxuICAgICAgICBjaGlsZCA9IHRoaXMuX2ZpcnN0O1xyXG5cclxuICAgIHdoaWxlIChjaGlsZCkge1xyXG4gICAgICBpZiAoY2hpbGQuX3N0YXJ0ID49IGlnbm9yZUJlZm9yZVRpbWUpIHtcclxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBUd2Vlbikge1xyXG4gICAgICAgICAgdHdlZW5zICYmIGEucHVzaChjaGlsZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRpbWVsaW5lcyAmJiBhLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgbmVzdGVkICYmIGEucHVzaC5hcHBseShhLCBjaGlsZC5nZXRDaGlsZHJlbih0cnVlLCB0d2VlbnMsIHRpbWVsaW5lcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY2hpbGQgPSBjaGlsZC5fbmV4dDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmdldEJ5SWQgPSBmdW5jdGlvbiBnZXRCeUlkKGlkKSB7XHJcbiAgICB2YXIgYW5pbWF0aW9ucyA9IHRoaXMuZ2V0Q2hpbGRyZW4oMSwgMSwgMSksXHJcbiAgICAgICAgaSA9IGFuaW1hdGlvbnMubGVuZ3RoO1xyXG5cclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgaWYgKGFuaW1hdGlvbnNbaV0udmFycy5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm4gYW5pbWF0aW9uc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIF9wcm90bzIucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGNoaWxkKSB7XHJcbiAgICBpZiAoX2lzU3RyaW5nKGNoaWxkKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVMYWJlbChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF9pc0Z1bmN0aW9uKGNoaWxkKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5raWxsVHdlZW5zT2YoY2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoaWxkLnBhcmVudCA9PT0gdGhpcyAmJiBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0odGhpcywgY2hpbGQpO1xyXG5cclxuICAgIGlmIChjaGlsZCA9PT0gdGhpcy5fcmVjZW50KSB7XHJcbiAgICAgIHRoaXMuX3JlY2VudCA9IHRoaXMuX2xhc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIF91bmNhY2hlKHRoaXMpO1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzIudG90YWxUaW1lID0gZnVuY3Rpb24gdG90YWxUaW1lKF90b3RhbFRpbWUyLCBzdXBwcmVzc0V2ZW50cykge1xyXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90VGltZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mb3JjaW5nID0gMTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2RwICYmIHRoaXMuX3RzKSB7XHJcbiAgICAgIC8vc3BlY2lhbCBjYXNlIGZvciB0aGUgZ2xvYmFsIHRpbWVsaW5lIChvciBhbnkgb3RoZXIgdGhhdCBoYXMgbm8gcGFyZW50IG9yIGRldGFjaGVkIHBhcmVudCkuXHJcbiAgICAgIHRoaXMuX3N0YXJ0ID0gX3JvdW5kUHJlY2lzZShfdGlja2VyLnRpbWUgLSAodGhpcy5fdHMgPiAwID8gX3RvdGFsVGltZTIgLyB0aGlzLl90cyA6ICh0aGlzLnRvdGFsRHVyYXRpb24oKSAtIF90b3RhbFRpbWUyKSAvIC10aGlzLl90cykpO1xyXG4gICAgfVxyXG5cclxuICAgIF9BbmltYXRpb24ucHJvdG90eXBlLnRvdGFsVGltZS5jYWxsKHRoaXMsIF90b3RhbFRpbWUyLCBzdXBwcmVzc0V2ZW50cyk7XHJcblxyXG4gICAgdGhpcy5fZm9yY2luZyA9IDA7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmFkZExhYmVsID0gZnVuY3Rpb24gYWRkTGFiZWwobGFiZWwsIHBvc2l0aW9uKSB7XHJcbiAgICB0aGlzLmxhYmVsc1tsYWJlbF0gPSBfcGFyc2VQb3NpdGlvbih0aGlzLCBwb3NpdGlvbik7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLnJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwobGFiZWwpIHtcclxuICAgIGRlbGV0ZSB0aGlzLmxhYmVsc1tsYWJlbF07XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmFkZFBhdXNlID0gZnVuY3Rpb24gYWRkUGF1c2UocG9zaXRpb24sIGNhbGxiYWNrLCBwYXJhbXMpIHtcclxuICAgIHZhciB0ID0gVHdlZW4uZGVsYXllZENhbGwoMCwgY2FsbGJhY2sgfHwgX2VtcHR5RnVuYywgcGFyYW1zKTtcclxuICAgIHQuZGF0YSA9IFwiaXNQYXVzZVwiO1xyXG4gICAgdGhpcy5faGFzUGF1c2UgPSAxO1xyXG4gICAgcmV0dXJuIF9hZGRUb1RpbWVsaW5lKHRoaXMsIHQsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMi5yZW1vdmVQYXVzZSA9IGZ1bmN0aW9uIHJlbW92ZVBhdXNlKHBvc2l0aW9uKSB7XHJcbiAgICB2YXIgY2hpbGQgPSB0aGlzLl9maXJzdDtcclxuICAgIHBvc2l0aW9uID0gX3BhcnNlUG9zaXRpb24odGhpcywgcG9zaXRpb24pO1xyXG5cclxuICAgIHdoaWxlIChjaGlsZCkge1xyXG4gICAgICBpZiAoY2hpbGQuX3N0YXJ0ID09PSBwb3NpdGlvbiAmJiBjaGlsZC5kYXRhID09PSBcImlzUGF1c2VcIikge1xyXG4gICAgICAgIF9yZW1vdmVGcm9tUGFyZW50KGNoaWxkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2hpbGQgPSBjaGlsZC5fbmV4dDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmtpbGxUd2VlbnNPZiA9IGZ1bmN0aW9uIGtpbGxUd2VlbnNPZih0YXJnZXRzLCBwcm9wcywgb25seUFjdGl2ZSkge1xyXG4gICAgdmFyIHR3ZWVucyA9IHRoaXMuZ2V0VHdlZW5zT2YodGFyZ2V0cywgb25seUFjdGl2ZSksXHJcbiAgICAgICAgaSA9IHR3ZWVucy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBfb3ZlcndyaXRpbmdUd2VlbiAhPT0gdHdlZW5zW2ldICYmIHR3ZWVuc1tpXS5raWxsKHRhcmdldHMsIHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmdldFR3ZWVuc09mID0gZnVuY3Rpb24gZ2V0VHdlZW5zT2YodGFyZ2V0cywgb25seUFjdGl2ZSkge1xyXG4gICAgdmFyIGEgPSBbXSxcclxuICAgICAgICBwYXJzZWRUYXJnZXRzID0gdG9BcnJheSh0YXJnZXRzKSxcclxuICAgICAgICBjaGlsZCA9IHRoaXMuX2ZpcnN0LFxyXG4gICAgICAgIGlzR2xvYmFsVGltZSA9IF9pc051bWJlcihvbmx5QWN0aXZlKSxcclxuICAgICAgICAvLyBhIG51bWJlciBpcyBpbnRlcnByZXRlZCBhcyBhIGdsb2JhbCB0aW1lLiBJZiB0aGUgYW5pbWF0aW9uIHNwYW5zXHJcbiAgICBjaGlsZHJlbjtcclxuXHJcbiAgICB3aGlsZSAoY2hpbGQpIHtcclxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVHdlZW4pIHtcclxuICAgICAgICBpZiAoX2FycmF5Q29udGFpbnNBbnkoY2hpbGQuX3RhcmdldHMsIHBhcnNlZFRhcmdldHMpICYmIChpc0dsb2JhbFRpbWUgPyAoIV9vdmVyd3JpdGluZ1R3ZWVuIHx8IGNoaWxkLl9pbml0dGVkICYmIGNoaWxkLl90cykgJiYgY2hpbGQuZ2xvYmFsVGltZSgwKSA8PSBvbmx5QWN0aXZlICYmIGNoaWxkLmdsb2JhbFRpbWUoY2hpbGQudG90YWxEdXJhdGlvbigpKSA+IG9ubHlBY3RpdmUgOiAhb25seUFjdGl2ZSB8fCBjaGlsZC5pc0FjdGl2ZSgpKSkge1xyXG4gICAgICAgICAgLy8gbm90ZTogaWYgdGhpcyBpcyBmb3Igb3ZlcndyaXRpbmcsIGl0IHNob3VsZCBvbmx5IGJlIGZvciB0d2VlbnMgdGhhdCBhcmVuJ3QgcGF1c2VkIGFuZCBhcmUgaW5pdHRlZC5cclxuICAgICAgICAgIGEucHVzaChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKChjaGlsZHJlbiA9IGNoaWxkLmdldFR3ZWVuc09mKHBhcnNlZFRhcmdldHMsIG9ubHlBY3RpdmUpKS5sZW5ndGgpIHtcclxuICAgICAgICBhLnB1c2guYXBwbHkoYSwgY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhO1xyXG4gIH0gLy8gcG90ZW50aWFsIGZ1dHVyZSBmZWF0dXJlIC0gdGFyZ2V0cygpIG9uIHRpbWVsaW5lc1xyXG4gIC8vIHRhcmdldHMoKSB7XHJcbiAgLy8gXHRsZXQgcmVzdWx0ID0gW107XHJcbiAgLy8gXHR0aGlzLmdldENoaWxkcmVuKHRydWUsIHRydWUsIGZhbHNlKS5mb3JFYWNoKHQgPT4gcmVzdWx0LnB1c2goLi4udC50YXJnZXRzKCkpKTtcclxuICAvLyBcdHJldHVybiByZXN1bHQuZmlsdGVyKCh2LCBpKSA9PiByZXN1bHQuaW5kZXhPZih2KSA9PT0gaSk7XHJcbiAgLy8gfVxyXG4gIDtcclxuXHJcbiAgX3Byb3RvMi50d2VlblRvID0gZnVuY3Rpb24gdHdlZW5Ubyhwb3NpdGlvbiwgdmFycykge1xyXG4gICAgdmFycyA9IHZhcnMgfHwge307XHJcblxyXG4gICAgdmFyIHRsID0gdGhpcyxcclxuICAgICAgICBlbmRUaW1lID0gX3BhcnNlUG9zaXRpb24odGwsIHBvc2l0aW9uKSxcclxuICAgICAgICBfdmFycyA9IHZhcnMsXHJcbiAgICAgICAgc3RhcnRBdCA9IF92YXJzLnN0YXJ0QXQsXHJcbiAgICAgICAgX29uU3RhcnQgPSBfdmFycy5vblN0YXJ0LFxyXG4gICAgICAgIG9uU3RhcnRQYXJhbXMgPSBfdmFycy5vblN0YXJ0UGFyYW1zLFxyXG4gICAgICAgIGltbWVkaWF0ZVJlbmRlciA9IF92YXJzLmltbWVkaWF0ZVJlbmRlcixcclxuICAgICAgICBpbml0dGVkLFxyXG4gICAgICAgIHR3ZWVuID0gVHdlZW4udG8odGwsIF9zZXREZWZhdWx0cyh7XHJcbiAgICAgIGVhc2U6IHZhcnMuZWFzZSB8fCBcIm5vbmVcIixcclxuICAgICAgbGF6eTogZmFsc2UsXHJcbiAgICAgIGltbWVkaWF0ZVJlbmRlcjogZmFsc2UsXHJcbiAgICAgIHRpbWU6IGVuZFRpbWUsXHJcbiAgICAgIG92ZXJ3cml0ZTogXCJhdXRvXCIsXHJcbiAgICAgIGR1cmF0aW9uOiB2YXJzLmR1cmF0aW9uIHx8IE1hdGguYWJzKChlbmRUaW1lIC0gKHN0YXJ0QXQgJiYgXCJ0aW1lXCIgaW4gc3RhcnRBdCA/IHN0YXJ0QXQudGltZSA6IHRsLl90aW1lKSkgLyB0bC50aW1lU2NhbGUoKSkgfHwgX3RpbnlOdW0sXHJcbiAgICAgIG9uU3RhcnQ6IGZ1bmN0aW9uIG9uU3RhcnQoKSB7XHJcbiAgICAgICAgdGwucGF1c2UoKTtcclxuXHJcbiAgICAgICAgaWYgKCFpbml0dGVkKSB7XHJcbiAgICAgICAgICB2YXIgZHVyYXRpb24gPSB2YXJzLmR1cmF0aW9uIHx8IE1hdGguYWJzKChlbmRUaW1lIC0gKHN0YXJ0QXQgJiYgXCJ0aW1lXCIgaW4gc3RhcnRBdCA/IHN0YXJ0QXQudGltZSA6IHRsLl90aW1lKSkgLyB0bC50aW1lU2NhbGUoKSk7XHJcbiAgICAgICAgICB0d2Vlbi5fZHVyICE9PSBkdXJhdGlvbiAmJiBfc2V0RHVyYXRpb24odHdlZW4sIGR1cmF0aW9uLCAwLCAxKS5yZW5kZXIodHdlZW4uX3RpbWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgaW5pdHRlZCA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfb25TdGFydCAmJiBfb25TdGFydC5hcHBseSh0d2Vlbiwgb25TdGFydFBhcmFtcyB8fCBbXSk7IC8vaW4gY2FzZSB0aGUgdXNlciBoYWQgYW4gb25TdGFydCBpbiB0aGUgdmFycyAtIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIGl0LlxyXG4gICAgICB9XHJcbiAgICB9LCB2YXJzKSk7XHJcblxyXG4gICAgcmV0dXJuIGltbWVkaWF0ZVJlbmRlciA/IHR3ZWVuLnJlbmRlcigwKSA6IHR3ZWVuO1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzIudHdlZW5Gcm9tVG8gPSBmdW5jdGlvbiB0d2VlbkZyb21Ubyhmcm9tUG9zaXRpb24sIHRvUG9zaXRpb24sIHZhcnMpIHtcclxuICAgIHJldHVybiB0aGlzLnR3ZWVuVG8odG9Qb3NpdGlvbiwgX3NldERlZmF1bHRzKHtcclxuICAgICAgc3RhcnRBdDoge1xyXG4gICAgICAgIHRpbWU6IF9wYXJzZVBvc2l0aW9uKHRoaXMsIGZyb21Qb3NpdGlvbilcclxuICAgICAgfVxyXG4gICAgfSwgdmFycykpO1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzIucmVjZW50ID0gZnVuY3Rpb24gcmVjZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY2VudDtcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLm5leHRMYWJlbCA9IGZ1bmN0aW9uIG5leHRMYWJlbChhZnRlclRpbWUpIHtcclxuICAgIGlmIChhZnRlclRpbWUgPT09IHZvaWQgMCkge1xyXG4gICAgICBhZnRlclRpbWUgPSB0aGlzLl90aW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBfZ2V0TGFiZWxJbkRpcmVjdGlvbih0aGlzLCBfcGFyc2VQb3NpdGlvbih0aGlzLCBhZnRlclRpbWUpKTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLnByZXZpb3VzTGFiZWwgPSBmdW5jdGlvbiBwcmV2aW91c0xhYmVsKGJlZm9yZVRpbWUpIHtcclxuICAgIGlmIChiZWZvcmVUaW1lID09PSB2b2lkIDApIHtcclxuICAgICAgYmVmb3JlVGltZSA9IHRoaXMuX3RpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIF9nZXRMYWJlbEluRGlyZWN0aW9uKHRoaXMsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIGJlZm9yZVRpbWUpLCAxKTtcclxuICB9O1xyXG5cclxuICBfcHJvdG8yLmN1cnJlbnRMYWJlbCA9IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzLnNlZWsodmFsdWUsIHRydWUpIDogdGhpcy5wcmV2aW91c0xhYmVsKHRoaXMuX3RpbWUgKyBfdGlueU51bSk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMi5zaGlmdENoaWxkcmVuID0gZnVuY3Rpb24gc2hpZnRDaGlsZHJlbihhbW91bnQsIGFkanVzdExhYmVscywgaWdub3JlQmVmb3JlVGltZSkge1xyXG4gICAgaWYgKGlnbm9yZUJlZm9yZVRpbWUgPT09IHZvaWQgMCkge1xyXG4gICAgICBpZ25vcmVCZWZvcmVUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2hpbGQgPSB0aGlzLl9maXJzdCxcclxuICAgICAgICBsYWJlbHMgPSB0aGlzLmxhYmVscyxcclxuICAgICAgICBwO1xyXG5cclxuICAgIHdoaWxlIChjaGlsZCkge1xyXG4gICAgICBpZiAoY2hpbGQuX3N0YXJ0ID49IGlnbm9yZUJlZm9yZVRpbWUpIHtcclxuICAgICAgICBjaGlsZC5fc3RhcnQgKz0gYW1vdW50O1xyXG4gICAgICAgIGNoaWxkLl9lbmQgKz0gYW1vdW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhZGp1c3RMYWJlbHMpIHtcclxuICAgICAgZm9yIChwIGluIGxhYmVscykge1xyXG4gICAgICAgIGlmIChsYWJlbHNbcF0gPj0gaWdub3JlQmVmb3JlVGltZSkge1xyXG4gICAgICAgICAgbGFiZWxzW3BdICs9IGFtb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gX3VuY2FjaGUodGhpcyk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMi5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZShzb2Z0KSB7XHJcbiAgICB2YXIgY2hpbGQgPSB0aGlzLl9maXJzdDtcclxuICAgIHRoaXMuX2xvY2sgPSAwO1xyXG5cclxuICAgIHdoaWxlIChjaGlsZCkge1xyXG4gICAgICBjaGlsZC5pbnZhbGlkYXRlKHNvZnQpO1xyXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBfQW5pbWF0aW9uLnByb3RvdHlwZS5pbnZhbGlkYXRlLmNhbGwodGhpcywgc29mdCk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMi5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKGluY2x1ZGVMYWJlbHMpIHtcclxuICAgIGlmIChpbmNsdWRlTGFiZWxzID09PSB2b2lkIDApIHtcclxuICAgICAgaW5jbHVkZUxhYmVscyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNoaWxkID0gdGhpcy5fZmlyc3QsXHJcbiAgICAgICAgbmV4dDtcclxuXHJcbiAgICB3aGlsZSAoY2hpbGQpIHtcclxuICAgICAgbmV4dCA9IGNoaWxkLl9uZXh0O1xyXG4gICAgICB0aGlzLnJlbW92ZShjaGlsZCk7XHJcbiAgICAgIGNoaWxkID0gbmV4dDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kcCAmJiAodGhpcy5fdGltZSA9IHRoaXMuX3RUaW1lID0gdGhpcy5fcFRpbWUgPSAwKTtcclxuICAgIGluY2x1ZGVMYWJlbHMgJiYgKHRoaXMubGFiZWxzID0ge30pO1xyXG4gICAgcmV0dXJuIF91bmNhY2hlKHRoaXMpO1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzIudG90YWxEdXJhdGlvbiA9IGZ1bmN0aW9uIHRvdGFsRHVyYXRpb24odmFsdWUpIHtcclxuICAgIHZhciBtYXggPSAwLFxyXG4gICAgICAgIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgIGNoaWxkID0gc2VsZi5fbGFzdCxcclxuICAgICAgICBwcmV2U3RhcnQgPSBfYmlnTnVtLFxyXG4gICAgICAgIHByZXYsXHJcbiAgICAgICAgc3RhcnQsXHJcbiAgICAgICAgcGFyZW50O1xyXG5cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBzZWxmLnRpbWVTY2FsZSgoc2VsZi5fcmVwZWF0IDwgMCA/IHNlbGYuZHVyYXRpb24oKSA6IHNlbGYudG90YWxEdXJhdGlvbigpKSAvIChzZWxmLnJldmVyc2VkKCkgPyAtdmFsdWUgOiB2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxmLl9kaXJ0eSkge1xyXG4gICAgICBwYXJlbnQgPSBzZWxmLnBhcmVudDtcclxuXHJcbiAgICAgIHdoaWxlIChjaGlsZCkge1xyXG4gICAgICAgIHByZXYgPSBjaGlsZC5fcHJldjsgLy9yZWNvcmQgaXQgaGVyZSBpbiBjYXNlIHRoZSB0d2VlbiBjaGFuZ2VzIHBvc2l0aW9uIGluIHRoZSBzZXF1ZW5jZS4uLlxyXG5cclxuICAgICAgICBjaGlsZC5fZGlydHkgJiYgY2hpbGQudG90YWxEdXJhdGlvbigpOyAvL2NvdWxkIGNoYW5nZSB0aGUgdHdlZW4uX3N0YXJ0VGltZSwgc28gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24ncyBjYWNoZSBpcyBjbGVhbiBiZWZvcmUgYW5hbHl6aW5nIGl0LlxyXG5cclxuICAgICAgICBzdGFydCA9IGNoaWxkLl9zdGFydDtcclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0ID4gcHJldlN0YXJ0ICYmIHNlbGYuX3NvcnQgJiYgY2hpbGQuX3RzICYmICFzZWxmLl9sb2NrKSB7XHJcbiAgICAgICAgICAvL2luIGNhc2Ugb25lIG9mIHRoZSB0d2VlbnMgc2hpZnRlZCBvdXQgb2Ygb3JkZXIsIGl0IG5lZWRzIHRvIGJlIHJlLWluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlXHJcbiAgICAgICAgICBzZWxmLl9sb2NrID0gMTsgLy9wcmV2ZW50IGVuZGxlc3MgcmVjdXJzaXZlIGNhbGxzIC0gdGhlcmUgYXJlIG1ldGhvZHMgdGhhdCBnZXQgdHJpZ2dlcmVkIHRoYXQgY2hlY2sgZHVyYXRpb24vdG90YWxEdXJhdGlvbiB3aGVuIHdlIGFkZCgpLlxyXG5cclxuICAgICAgICAgIF9hZGRUb1RpbWVsaW5lKHNlbGYsIGNoaWxkLCBzdGFydCAtIGNoaWxkLl9kZWxheSwgMSkuX2xvY2sgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmV2U3RhcnQgPSBzdGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGFydCA8IDAgJiYgY2hpbGQuX3RzKSB7XHJcbiAgICAgICAgICAvL2NoaWxkcmVuIGFyZW4ndCBhbGxvd2VkIHRvIGhhdmUgbmVnYXRpdmUgc3RhcnRUaW1lcyB1bmxlc3Mgc21vb3RoQ2hpbGRUaW1pbmcgaXMgdHJ1ZSwgc28gYWRqdXN0IGhlcmUgaWYgb25lIGlzIGZvdW5kLlxyXG4gICAgICAgICAgbWF4IC09IHN0YXJ0O1xyXG5cclxuICAgICAgICAgIGlmICghcGFyZW50ICYmICFzZWxmLl9kcCB8fCBwYXJlbnQgJiYgcGFyZW50LnNtb290aENoaWxkVGltaW5nKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX3N0YXJ0ICs9IHN0YXJ0IC8gc2VsZi5fdHM7XHJcbiAgICAgICAgICAgIHNlbGYuX3RpbWUgLT0gc3RhcnQ7XHJcbiAgICAgICAgICAgIHNlbGYuX3RUaW1lIC09IHN0YXJ0O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNlbGYuc2hpZnRDaGlsZHJlbigtc3RhcnQsIGZhbHNlLCAtMWU5OTkpO1xyXG4gICAgICAgICAgcHJldlN0YXJ0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkLl9lbmQgPiBtYXggJiYgY2hpbGQuX3RzICYmIChtYXggPSBjaGlsZC5fZW5kKTtcclxuICAgICAgICBjaGlsZCA9IHByZXY7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9zZXREdXJhdGlvbihzZWxmLCBzZWxmID09PSBfZ2xvYmFsVGltZWxpbmUgJiYgc2VsZi5fdGltZSA+IG1heCA/IHNlbGYuX3RpbWUgOiBtYXgsIDEsIDEpO1xyXG5cclxuICAgICAgc2VsZi5fZGlydHkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWxmLl90RHVyO1xyXG4gIH07XHJcblxyXG4gIFRpbWVsaW5lLnVwZGF0ZVJvb3QgPSBmdW5jdGlvbiB1cGRhdGVSb290KHRpbWUpIHtcclxuICAgIGlmIChfZ2xvYmFsVGltZWxpbmUuX3RzKSB7XHJcbiAgICAgIF9sYXp5U2FmZVJlbmRlcihfZ2xvYmFsVGltZWxpbmUsIF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHRpbWUsIF9nbG9iYWxUaW1lbGluZSkpO1xyXG5cclxuICAgICAgX2xhc3RSZW5kZXJlZEZyYW1lID0gX3RpY2tlci5mcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoX3RpY2tlci5mcmFtZSA+PSBfbmV4dEdDRnJhbWUpIHtcclxuICAgICAgX25leHRHQ0ZyYW1lICs9IF9jb25maWcuYXV0b1NsZWVwIHx8IDEyMDtcclxuICAgICAgdmFyIGNoaWxkID0gX2dsb2JhbFRpbWVsaW5lLl9maXJzdDtcclxuICAgICAgaWYgKCFjaGlsZCB8fCAhY2hpbGQuX3RzKSBpZiAoX2NvbmZpZy5hdXRvU2xlZXAgJiYgX3RpY2tlci5fbGlzdGVuZXJzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICB3aGlsZSAoY2hpbGQgJiYgIWNoaWxkLl90cykge1xyXG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5fbmV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkIHx8IF90aWNrZXIuc2xlZXAoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHJldHVybiBUaW1lbGluZTtcclxufShBbmltYXRpb24pO1xyXG5cclxuX3NldERlZmF1bHRzKFRpbWVsaW5lLnByb3RvdHlwZSwge1xyXG4gIF9sb2NrOiAwLFxyXG4gIF9oYXNQYXVzZTogMCxcclxuICBfZm9yY2luZzogMFxyXG59KTtcclxuXHJcbnZhciBfYWRkQ29tcGxleFN0cmluZ1Byb3BUd2VlbiA9IGZ1bmN0aW9uIF9hZGRDb21wbGV4U3RyaW5nUHJvcFR3ZWVuKHRhcmdldCwgcHJvcCwgc3RhcnQsIGVuZCwgc2V0dGVyLCBzdHJpbmdGaWx0ZXIsIGZ1bmNQYXJhbSkge1xyXG4gIC8vbm90ZTogd2UgY2FsbCBfYWRkQ29tcGxleFN0cmluZ1Byb3BUd2Vlbi5jYWxsKHR3ZWVuSW5zdGFuY2UuLi4pIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2NvcGVkIHByb3Blcmx5LiBXZSBtYXkgY2FsbCBpdCBmcm9tIHdpdGhpbiBhIHBsdWdpbiB0b28sIHRodXMgXCJ0aGlzXCIgd291bGQgcmVmZXIgdG8gdGhlIHBsdWdpbi5cclxuICB2YXIgcHQgPSBuZXcgUHJvcFR3ZWVuKHRoaXMuX3B0LCB0YXJnZXQsIHByb3AsIDAsIDEsIF9yZW5kZXJDb21wbGV4U3RyaW5nLCBudWxsLCBzZXR0ZXIpLFxyXG4gICAgICBpbmRleCA9IDAsXHJcbiAgICAgIG1hdGNoSW5kZXggPSAwLFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIHN0YXJ0TnVtcyxcclxuICAgICAgY29sb3IsXHJcbiAgICAgIGVuZE51bSxcclxuICAgICAgY2h1bmssXHJcbiAgICAgIHN0YXJ0TnVtLFxyXG4gICAgICBoYXNSYW5kb20sXHJcbiAgICAgIGE7XHJcbiAgcHQuYiA9IHN0YXJ0O1xyXG4gIHB0LmUgPSBlbmQ7XHJcbiAgc3RhcnQgKz0gXCJcIjsgLy9lbnN1cmUgdmFsdWVzIGFyZSBzdHJpbmdzXHJcblxyXG4gIGVuZCArPSBcIlwiO1xyXG5cclxuICBpZiAoaGFzUmFuZG9tID0gfmVuZC5pbmRleE9mKFwicmFuZG9tKFwiKSkge1xyXG4gICAgZW5kID0gX3JlcGxhY2VSYW5kb20oZW5kKTtcclxuICB9XHJcblxyXG4gIGlmIChzdHJpbmdGaWx0ZXIpIHtcclxuICAgIGEgPSBbc3RhcnQsIGVuZF07XHJcbiAgICBzdHJpbmdGaWx0ZXIoYSwgdGFyZ2V0LCBwcm9wKTsgLy9wYXNzIGFuIGFycmF5IHdpdGggdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgdmFsdWVzIGFuZCBsZXQgdGhlIGZpbHRlciBkbyB3aGF0ZXZlciBpdCBuZWVkcyB0byB0aGUgdmFsdWVzLlxyXG5cclxuICAgIHN0YXJ0ID0gYVswXTtcclxuICAgIGVuZCA9IGFbMV07XHJcbiAgfVxyXG5cclxuICBzdGFydE51bXMgPSBzdGFydC5tYXRjaChfY29tcGxleFN0cmluZ051bUV4cCkgfHwgW107XHJcblxyXG4gIHdoaWxlIChyZXN1bHQgPSBfY29tcGxleFN0cmluZ051bUV4cC5leGVjKGVuZCkpIHtcclxuICAgIGVuZE51bSA9IHJlc3VsdFswXTtcclxuICAgIGNodW5rID0gZW5kLnN1YnN0cmluZyhpbmRleCwgcmVzdWx0LmluZGV4KTtcclxuXHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgY29sb3IgPSAoY29sb3IgKyAxKSAlIDU7XHJcbiAgICB9IGVsc2UgaWYgKGNodW5rLnN1YnN0cigtNSkgPT09IFwicmdiYShcIikge1xyXG4gICAgICBjb2xvciA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVuZE51bSAhPT0gc3RhcnROdW1zW21hdGNoSW5kZXgrK10pIHtcclxuICAgICAgc3RhcnROdW0gPSBwYXJzZUZsb2F0KHN0YXJ0TnVtc1ttYXRjaEluZGV4IC0gMV0pIHx8IDA7IC8vdGhlc2UgbmVzdGVkIFByb3BUd2VlbnMgYXJlIGhhbmRsZWQgaW4gYSBzcGVjaWFsIHdheSAtIHdlJ2xsIG5ldmVyIGFjdHVhbGx5IGNhbGwgYSByZW5kZXIgb3Igc2V0dGVyIG1ldGhvZCBvbiB0aGVtLiBXZSdsbCBqdXN0IGxvb3AgdGhyb3VnaCB0aGVtIGluIHRoZSBwYXJlbnQgY29tcGxleCBzdHJpbmcgUHJvcFR3ZWVuJ3MgcmVuZGVyIG1ldGhvZC5cclxuXHJcbiAgICAgIHB0Ll9wdCA9IHtcclxuICAgICAgICBfbmV4dDogcHQuX3B0LFxyXG4gICAgICAgIHA6IGNodW5rIHx8IG1hdGNoSW5kZXggPT09IDEgPyBjaHVuayA6IFwiLFwiLFxyXG4gICAgICAgIC8vbm90ZTogU1ZHIHNwZWMgYWxsb3dzIG9taXNzaW9uIG9mIGNvbW1hL3NwYWNlIHdoZW4gYSBuZWdhdGl2ZSBzaWduIGlzIHdlZGdlZCBiZXR3ZWVuIHR3byBudW1iZXJzLCBsaWtlIDIuNS01LjMgaW5zdGVhZCBvZiAyLjUsLTUuMyBidXQgd2hlbiB0d2VlbmluZywgdGhlIG5lZ2F0aXZlIHZhbHVlIG1heSBzd2l0Y2ggdG8gcG9zaXRpdmUsIHNvIHdlIGluc2VydCB0aGUgY29tbWEganVzdCBpbiBjYXNlLlxyXG4gICAgICAgIHM6IHN0YXJ0TnVtLFxyXG4gICAgICAgIGM6IGVuZE51bS5jaGFyQXQoMSkgPT09IFwiPVwiID8gX3BhcnNlUmVsYXRpdmUoc3RhcnROdW0sIGVuZE51bSkgLSBzdGFydE51bSA6IHBhcnNlRmxvYXQoZW5kTnVtKSAtIHN0YXJ0TnVtLFxyXG4gICAgICAgIG06IGNvbG9yICYmIGNvbG9yIDwgNCA/IE1hdGgucm91bmQgOiAwXHJcbiAgICAgIH07XHJcbiAgICAgIGluZGV4ID0gX2NvbXBsZXhTdHJpbmdOdW1FeHAubGFzdEluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHQuYyA9IGluZGV4IDwgZW5kLmxlbmd0aCA/IGVuZC5zdWJzdHJpbmcoaW5kZXgsIGVuZC5sZW5ndGgpIDogXCJcIjsgLy93ZSB1c2UgdGhlIFwiY1wiIG9mIHRoZSBQcm9wVHdlZW4gdG8gc3RvcmUgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIHN0cmluZyAoYWZ0ZXIgdGhlIGxhc3QgbnVtYmVyKVxyXG5cclxuICBwdC5mcCA9IGZ1bmNQYXJhbTtcclxuXHJcbiAgaWYgKF9yZWxFeHAudGVzdChlbmQpIHx8IGhhc1JhbmRvbSkge1xyXG4gICAgcHQuZSA9IDA7IC8vaWYgdGhlIGVuZCBzdHJpbmcgY29udGFpbnMgcmVsYXRpdmUgdmFsdWVzIG9yIGR5bmFtaWMgcmFuZG9tKC4uLikgdmFsdWVzLCBkZWxldGUgdGhlIGVuZCBpdCBzbyB0aGF0IG9uIHRoZSBmaW5hbCByZW5kZXIgd2UgZG9uJ3QgYWN0dWFsbHkgc2V0IGl0IHRvIHRoZSBzdHJpbmcgd2l0aCArPSBvciAtPSBjaGFyYWN0ZXJzIChmb3JjZXMgaXQgdG8gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlKS5cclxuICB9XHJcblxyXG4gIHRoaXMuX3B0ID0gcHQ7IC8vc3RhcnQgdGhlIGxpbmtlZCBsaXN0IHdpdGggdGhpcyBuZXcgUHJvcFR3ZWVuLiBSZW1lbWJlciwgd2UgY2FsbCBfYWRkQ29tcGxleFN0cmluZ1Byb3BUd2Vlbi5jYWxsKHR3ZWVuSW5zdGFuY2UuLi4pIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2NvcGVkIHByb3Blcmx5LiBXZSBtYXkgY2FsbCBpdCBmcm9tIHdpdGhpbiBhIHBsdWdpbiB0b28sIHRodXMgXCJ0aGlzXCIgd291bGQgcmVmZXIgdG8gdGhlIHBsdWdpbi5cclxuXHJcbiAgcmV0dXJuIHB0O1xyXG59LFxyXG4gICAgX2FkZFByb3BUd2VlbiA9IGZ1bmN0aW9uIF9hZGRQcm9wVHdlZW4odGFyZ2V0LCBwcm9wLCBzdGFydCwgZW5kLCBpbmRleCwgdGFyZ2V0cywgbW9kaWZpZXIsIHN0cmluZ0ZpbHRlciwgZnVuY1BhcmFtLCBvcHRpb25hbCkge1xyXG4gIF9pc0Z1bmN0aW9uKGVuZCkgJiYgKGVuZCA9IGVuZChpbmRleCB8fCAwLCB0YXJnZXQsIHRhcmdldHMpKTtcclxuICB2YXIgY3VycmVudFZhbHVlID0gdGFyZ2V0W3Byb3BdLFxyXG4gICAgICBwYXJzZWRTdGFydCA9IHN0YXJ0ICE9PSBcImdldFwiID8gc3RhcnQgOiAhX2lzRnVuY3Rpb24oY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZSA6IGZ1bmNQYXJhbSA/IHRhcmdldFtwcm9wLmluZGV4T2YoXCJzZXRcIikgfHwgIV9pc0Z1bmN0aW9uKHRhcmdldFtcImdldFwiICsgcHJvcC5zdWJzdHIoMyldKSA/IHByb3AgOiBcImdldFwiICsgcHJvcC5zdWJzdHIoMyldKGZ1bmNQYXJhbSkgOiB0YXJnZXRbcHJvcF0oKSxcclxuICAgICAgc2V0dGVyID0gIV9pc0Z1bmN0aW9uKGN1cnJlbnRWYWx1ZSkgPyBfc2V0dGVyUGxhaW4gOiBmdW5jUGFyYW0gPyBfc2V0dGVyRnVuY1dpdGhQYXJhbSA6IF9zZXR0ZXJGdW5jLFxyXG4gICAgICBwdDtcclxuXHJcbiAgaWYgKF9pc1N0cmluZyhlbmQpKSB7XHJcbiAgICBpZiAofmVuZC5pbmRleE9mKFwicmFuZG9tKFwiKSkge1xyXG4gICAgICBlbmQgPSBfcmVwbGFjZVJhbmRvbShlbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbmQuY2hhckF0KDEpID09PSBcIj1cIikge1xyXG4gICAgICBwdCA9IF9wYXJzZVJlbGF0aXZlKHBhcnNlZFN0YXJ0LCBlbmQpICsgKGdldFVuaXQocGFyc2VkU3RhcnQpIHx8IDApO1xyXG5cclxuICAgICAgaWYgKHB0IHx8IHB0ID09PSAwKSB7XHJcbiAgICAgICAgLy8gdG8gYXZvaWQgaXNOYU4sIGxpa2UgaWYgc29tZW9uZSBwYXNzZXMgaW4gYSB2YWx1ZSBsaWtlIFwiIT0gd2hhdGV2ZXJcIlxyXG4gICAgICAgIGVuZCA9IHB0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoIW9wdGlvbmFsIHx8IHBhcnNlZFN0YXJ0ICE9PSBlbmQgfHwgX2ZvcmNlQWxsUHJvcFR3ZWVucykge1xyXG4gICAgaWYgKCFpc05hTihwYXJzZWRTdGFydCAqIGVuZCkgJiYgZW5kICE9PSBcIlwiKSB7XHJcbiAgICAgIC8vIGZ1biBmYWN0OiBhbnkgbnVtYmVyIG11bHRpcGxpZWQgYnkgXCJcIiBpcyBldmFsdWF0ZWQgYXMgdGhlIG51bWJlciAwIVxyXG4gICAgICBwdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIHRhcmdldCwgcHJvcCwgK3BhcnNlZFN0YXJ0IHx8IDAsIGVuZCAtIChwYXJzZWRTdGFydCB8fCAwKSwgdHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gXCJib29sZWFuXCIgPyBfcmVuZGVyQm9vbGVhbiA6IF9yZW5kZXJQbGFpbiwgMCwgc2V0dGVyKTtcclxuICAgICAgZnVuY1BhcmFtICYmIChwdC5mcCA9IGZ1bmNQYXJhbSk7XHJcbiAgICAgIG1vZGlmaWVyICYmIHB0Lm1vZGlmaWVyKG1vZGlmaWVyLCB0aGlzLCB0YXJnZXQpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fcHQgPSBwdDtcclxuICAgIH1cclxuXHJcbiAgICAhY3VycmVudFZhbHVlICYmICEocHJvcCBpbiB0YXJnZXQpICYmIF9taXNzaW5nUGx1Z2luKHByb3AsIGVuZCk7XHJcbiAgICByZXR1cm4gX2FkZENvbXBsZXhTdHJpbmdQcm9wVHdlZW4uY2FsbCh0aGlzLCB0YXJnZXQsIHByb3AsIHBhcnNlZFN0YXJ0LCBlbmQsIHNldHRlciwgc3RyaW5nRmlsdGVyIHx8IF9jb25maWcuc3RyaW5nRmlsdGVyLCBmdW5jUGFyYW0pO1xyXG4gIH1cclxufSxcclxuICAgIC8vY3JlYXRlcyBhIGNvcHkgb2YgdGhlIHZhcnMgb2JqZWN0IGFuZCBwcm9jZXNzZXMgYW55IGZ1bmN0aW9uLWJhc2VkIHZhbHVlcyAocHV0dGluZyB0aGUgcmVzdWx0aW5nIHZhbHVlcyBkaXJlY3RseSBpbnRvIHRoZSBjb3B5KSBhcyB3ZWxsIGFzIHN0cmluZ3Mgd2l0aCBcInJhbmRvbSgpXCIgaW4gdGhlbS4gSXQgZG9lcyBOT1QgcHJvY2VzcyByZWxhdGl2ZSB2YWx1ZXMuXHJcbl9wcm9jZXNzVmFycyA9IGZ1bmN0aW9uIF9wcm9jZXNzVmFycyh2YXJzLCBpbmRleCwgdGFyZ2V0LCB0YXJnZXRzLCB0d2Vlbikge1xyXG4gIF9pc0Z1bmN0aW9uKHZhcnMpICYmICh2YXJzID0gX3BhcnNlRnVuY09yU3RyaW5nKHZhcnMsIHR3ZWVuLCBpbmRleCwgdGFyZ2V0LCB0YXJnZXRzKSk7XHJcblxyXG4gIGlmICghX2lzT2JqZWN0KHZhcnMpIHx8IHZhcnMuc3R5bGUgJiYgdmFycy5ub2RlVHlwZSB8fCBfaXNBcnJheSh2YXJzKSB8fCBfaXNUeXBlZEFycmF5KHZhcnMpKSB7XHJcbiAgICByZXR1cm4gX2lzU3RyaW5nKHZhcnMpID8gX3BhcnNlRnVuY09yU3RyaW5nKHZhcnMsIHR3ZWVuLCBpbmRleCwgdGFyZ2V0LCB0YXJnZXRzKSA6IHZhcnM7XHJcbiAgfVxyXG5cclxuICB2YXIgY29weSA9IHt9LFxyXG4gICAgICBwO1xyXG5cclxuICBmb3IgKHAgaW4gdmFycykge1xyXG4gICAgY29weVtwXSA9IF9wYXJzZUZ1bmNPclN0cmluZyh2YXJzW3BdLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29weTtcclxufSxcclxuICAgIF9jaGVja1BsdWdpbiA9IGZ1bmN0aW9uIF9jaGVja1BsdWdpbihwcm9wZXJ0eSwgdmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpIHtcclxuICB2YXIgcGx1Z2luLCBwdCwgcHRMb29rdXAsIGk7XHJcblxyXG4gIGlmIChfcGx1Z2luc1twcm9wZXJ0eV0gJiYgKHBsdWdpbiA9IG5ldyBfcGx1Z2luc1twcm9wZXJ0eV0oKSkuaW5pdCh0YXJnZXQsIHBsdWdpbi5yYXdWYXJzID8gdmFyc1twcm9wZXJ0eV0gOiBfcHJvY2Vzc1ZhcnModmFyc1twcm9wZXJ0eV0sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMsIHR3ZWVuKSwgdHdlZW4sIGluZGV4LCB0YXJnZXRzKSAhPT0gZmFsc2UpIHtcclxuICAgIHR3ZWVuLl9wdCA9IHB0ID0gbmV3IFByb3BUd2Vlbih0d2Vlbi5fcHQsIHRhcmdldCwgcHJvcGVydHksIDAsIDEsIHBsdWdpbi5yZW5kZXIsIHBsdWdpbiwgMCwgcGx1Z2luLnByaW9yaXR5KTtcclxuXHJcbiAgICBpZiAodHdlZW4gIT09IF9xdWlja1R3ZWVuKSB7XHJcbiAgICAgIHB0TG9va3VwID0gdHdlZW4uX3B0TG9va3VwW3R3ZWVuLl90YXJnZXRzLmluZGV4T2YodGFyZ2V0KV07IC8vbm90ZTogd2UgY2FuJ3QgdXNlIHR3ZWVuLl9wdExvb2t1cFtpbmRleF0gYmVjYXVzZSBmb3Igc3RhZ2dlcmVkIHR3ZWVucywgdGhlIGluZGV4IGZyb20gdGhlIGZ1bGxUYXJnZXRzIGFycmF5IHdvbid0IG1hdGNoIHdoYXQgaXQgaXMgaW4gZWFjaCBpbmRpdmlkdWFsIHR3ZWVuIHRoYXQgc3Bhd25zIGZyb20gdGhlIHN0YWdnZXIuXHJcblxyXG4gICAgICBpID0gcGx1Z2luLl9wcm9wcy5sZW5ndGg7XHJcblxyXG4gICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgcHRMb29rdXBbcGx1Z2luLl9wcm9wc1tpXV0gPSBwdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBsdWdpbjtcclxufSxcclxuICAgIF9vdmVyd3JpdGluZ1R3ZWVuLFxyXG4gICAgLy9zdG9yZSBhIHJlZmVyZW5jZSB0ZW1wb3JhcmlseSBzbyB3ZSBjYW4gYXZvaWQgb3ZlcndyaXRpbmcgaXRzZWxmLlxyXG5fZm9yY2VBbGxQcm9wVHdlZW5zLFxyXG4gICAgX2luaXRUd2VlbiA9IGZ1bmN0aW9uIF9pbml0VHdlZW4odHdlZW4sIHRpbWUsIHRUaW1lKSB7XHJcbiAgdmFyIHZhcnMgPSB0d2Vlbi52YXJzLFxyXG4gICAgICBlYXNlID0gdmFycy5lYXNlLFxyXG4gICAgICBzdGFydEF0ID0gdmFycy5zdGFydEF0LFxyXG4gICAgICBpbW1lZGlhdGVSZW5kZXIgPSB2YXJzLmltbWVkaWF0ZVJlbmRlcixcclxuICAgICAgbGF6eSA9IHZhcnMubGF6eSxcclxuICAgICAgb25VcGRhdGUgPSB2YXJzLm9uVXBkYXRlLFxyXG4gICAgICBydW5CYWNrd2FyZHMgPSB2YXJzLnJ1bkJhY2t3YXJkcyxcclxuICAgICAgeW95b0Vhc2UgPSB2YXJzLnlveW9FYXNlLFxyXG4gICAgICBrZXlmcmFtZXMgPSB2YXJzLmtleWZyYW1lcyxcclxuICAgICAgYXV0b1JldmVydCA9IHZhcnMuYXV0b1JldmVydCxcclxuICAgICAgZHVyID0gdHdlZW4uX2R1cixcclxuICAgICAgcHJldlN0YXJ0QXQgPSB0d2Vlbi5fc3RhcnRBdCxcclxuICAgICAgdGFyZ2V0cyA9IHR3ZWVuLl90YXJnZXRzLFxyXG4gICAgICBwYXJlbnQgPSB0d2Vlbi5wYXJlbnQsXHJcbiAgICAgIGZ1bGxUYXJnZXRzID0gcGFyZW50ICYmIHBhcmVudC5kYXRhID09PSBcIm5lc3RlZFwiID8gcGFyZW50LnZhcnMudGFyZ2V0cyA6IHRhcmdldHMsXHJcbiAgICAgIGF1dG9PdmVyd3JpdGUgPSB0d2Vlbi5fb3ZlcndyaXRlID09PSBcImF1dG9cIiAmJiAhX3N1cHByZXNzT3ZlcndyaXRlcyxcclxuICAgICAgdGwgPSB0d2Vlbi50aW1lbGluZSxcclxuICAgICAgY2xlYW5WYXJzLFxyXG4gICAgICBpLFxyXG4gICAgICBwLFxyXG4gICAgICBwdCxcclxuICAgICAgdGFyZ2V0LFxyXG4gICAgICBoYXNQcmlvcml0eSxcclxuICAgICAgZ3NEYXRhLFxyXG4gICAgICBoYXJuZXNzLFxyXG4gICAgICBwbHVnaW4sXHJcbiAgICAgIHB0TG9va3VwLFxyXG4gICAgICBpbmRleCxcclxuICAgICAgaGFybmVzc1ZhcnMsXHJcbiAgICAgIG92ZXJ3cml0dGVuO1xyXG4gIHRsICYmICgha2V5ZnJhbWVzIHx8ICFlYXNlKSAmJiAoZWFzZSA9IFwibm9uZVwiKTtcclxuICB0d2Vlbi5fZWFzZSA9IF9wYXJzZUVhc2UoZWFzZSwgX2RlZmF1bHRzLmVhc2UpO1xyXG4gIHR3ZWVuLl95RWFzZSA9IHlveW9FYXNlID8gX2ludmVydEVhc2UoX3BhcnNlRWFzZSh5b3lvRWFzZSA9PT0gdHJ1ZSA/IGVhc2UgOiB5b3lvRWFzZSwgX2RlZmF1bHRzLmVhc2UpKSA6IDA7XHJcblxyXG4gIGlmICh5b3lvRWFzZSAmJiB0d2Vlbi5feW95byAmJiAhdHdlZW4uX3JlcGVhdCkge1xyXG4gICAgLy90aGVyZSBtdXN0IGhhdmUgYmVlbiBhIHBhcmVudCB0aW1lbGluZSB3aXRoIHlveW86dHJ1ZSB0aGF0IGlzIGN1cnJlbnRseSBpbiBpdHMgeW95byBwaGFzZSwgc28gZmxpcCB0aGUgZWFzZXMuXHJcbiAgICB5b3lvRWFzZSA9IHR3ZWVuLl95RWFzZTtcclxuICAgIHR3ZWVuLl95RWFzZSA9IHR3ZWVuLl9lYXNlO1xyXG4gICAgdHdlZW4uX2Vhc2UgPSB5b3lvRWFzZTtcclxuICB9XHJcblxyXG4gIHR3ZWVuLl9mcm9tID0gIXRsICYmICEhdmFycy5ydW5CYWNrd2FyZHM7IC8vbmVzdGVkIHRpbWVsaW5lcyBzaG91bGQgbmV2ZXIgcnVuIGJhY2t3YXJkcyAtIHRoZSBiYWNrd2FyZHMtbmVzcyBpcyBpbiB0aGUgY2hpbGQgdHdlZW5zLlxyXG5cclxuICBpZiAoIXRsIHx8IGtleWZyYW1lcyAmJiAhdmFycy5zdGFnZ2VyKSB7XHJcbiAgICAvL2lmIHRoZXJlJ3MgYW4gaW50ZXJuYWwgdGltZWxpbmUsIHNraXAgYWxsIHRoZSBwYXJzaW5nIGJlY2F1c2Ugd2UgcGFzc2VkIHRoYXQgdGFzayBkb3duIHRoZSBjaGFpbi5cclxuICAgIGhhcm5lc3MgPSB0YXJnZXRzWzBdID8gX2dldENhY2hlKHRhcmdldHNbMF0pLmhhcm5lc3MgOiAwO1xyXG4gICAgaGFybmVzc1ZhcnMgPSBoYXJuZXNzICYmIHZhcnNbaGFybmVzcy5wcm9wXTsgLy9zb21lb25lIG1heSBuZWVkIHRvIHNwZWNpZnkgQ1NTLXNwZWNpZmljIHZhbHVlcyBBTkQgbm9uLUNTUyB2YWx1ZXMsIGxpa2UgaWYgdGhlIGVsZW1lbnQgaGFzIGFuIFwieFwiIHByb3BlcnR5IHBsdXMgaXQncyBhIHN0YW5kYXJkIERPTSBlbGVtZW50LiBXZSBhbGxvdyBwZW9wbGUgdG8gZGlzdGluZ3Vpc2ggYnkgd3JhcHBpbmcgcGx1Z2luLXNwZWNpZmljIHN0dWZmIGluIGEgY3NzOnt9IG9iamVjdCBmb3IgZXhhbXBsZS5cclxuXHJcbiAgICBjbGVhblZhcnMgPSBfY29weUV4Y2x1ZGluZyh2YXJzLCBfcmVzZXJ2ZWRQcm9wcyk7XHJcblxyXG4gICAgaWYgKHByZXZTdGFydEF0KSB7XHJcbiAgICAgIHByZXZTdGFydEF0Ll96VGltZSA8IDAgJiYgcHJldlN0YXJ0QXQucHJvZ3Jlc3MoMSk7IC8vIGluIGNhc2UgaXQncyBhIGxhenkgc3RhcnRBdCB0aGF0IGhhc24ndCByZW5kZXJlZCB5ZXQuXHJcblxyXG4gICAgICB0aW1lIDwgMCAmJiBydW5CYWNrd2FyZHMgJiYgaW1tZWRpYXRlUmVuZGVyICYmICFhdXRvUmV2ZXJ0ID8gcHJldlN0YXJ0QXQucmVuZGVyKC0xLCB0cnVlKSA6IHByZXZTdGFydEF0LnJldmVydChydW5CYWNrd2FyZHMgJiYgZHVyID8gX3JldmVydENvbmZpZ05vS2lsbCA6IF9zdGFydEF0UmV2ZXJ0Q29uZmlnKTsgLy8gaWYgaXQncyBhIFwic3RhcnRBdFwiIChub3QgXCJmcm9tKClcIiBvciBydW5CYWNrd2FyZHM6IHRydWUpLCB3ZSBvbmx5IG5lZWQgdG8gZG8gYSBzaGFsbG93IHJldmVydCAoa2VlcCB0cmFuc2Zvcm1zIGNhY2hlZCBpbiBDU1NQbHVnaW4pXHJcbiAgICAgIC8vIGRvbid0IGp1c3QgX3JlbW92ZUZyb21QYXJlbnQocHJldlN0YXJ0QXQucmVuZGVyKC0xLCB0cnVlKSkgYmVjYXVzZSB0aGF0J2xsIGxlYXZlIGlubGluZSBzdHlsZXMuIFdlJ3JlIGNyZWF0aW5nIGEgbmV3IF9zdGFydEF0IGZvciBcInN0YXJ0QXRcIiB0d2VlbnMgdGhhdCByZS1jYXB0dXJlIHRoaW5ncyB0byBlbnN1cmUgdGhhdCBpZiB0aGUgcHJlLXR3ZWVuIHZhbHVlcyBjaGFuZ2VkIHNpbmNlIHRoZSB0d2VlbiB3YXMgY3JlYXRlZCwgdGhleSdyZSByZWNvcmRlZC5cclxuXHJcbiAgICAgIHByZXZTdGFydEF0Ll9sYXp5ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhcnRBdCkge1xyXG4gICAgICBfcmVtb3ZlRnJvbVBhcmVudCh0d2Vlbi5fc3RhcnRBdCA9IFR3ZWVuLnNldCh0YXJnZXRzLCBfc2V0RGVmYXVsdHMoe1xyXG4gICAgICAgIGRhdGE6IFwiaXNTdGFydFwiLFxyXG4gICAgICAgIG92ZXJ3cml0ZTogZmFsc2UsXHJcbiAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgaW1tZWRpYXRlUmVuZGVyOiB0cnVlLFxyXG4gICAgICAgIGxhenk6ICFwcmV2U3RhcnRBdCAmJiBfaXNOb3RGYWxzZShsYXp5KSxcclxuICAgICAgICBzdGFydEF0OiBudWxsLFxyXG4gICAgICAgIGRlbGF5OiAwLFxyXG4gICAgICAgIG9uVXBkYXRlOiBvblVwZGF0ZSAmJiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gX2NhbGxiYWNrKHR3ZWVuLCBcIm9uVXBkYXRlXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhZ2dlcjogMFxyXG4gICAgICB9LCBzdGFydEF0KSkpOyAvL2NvcHkgdGhlIHByb3BlcnRpZXMvdmFsdWVzIGludG8gYSBuZXcgb2JqZWN0IHRvIGF2b2lkIGNvbGxpc2lvbnMsIGxpa2UgdmFyIHRvID0ge3g6MH0sIGZyb20gPSB7eDo1MDB9OyB0aW1lbGluZS5mcm9tVG8oZSwgZnJvbSwgdG8pLmZyb21UbyhlLCB0bywgZnJvbSk7XHJcblxyXG5cclxuICAgICAgdHdlZW4uX3N0YXJ0QXQuX2RwID0gMDsgLy8gZG9uJ3QgYWxsb3cgaXQgdG8gZ2V0IHB1dCBiYWNrIGludG8gcm9vdCB0aW1lbGluZSEgTGlrZSB3aGVuIHJldmVydCgpIGlzIGNhbGxlZCBhbmQgdG90YWxUaW1lKCkgZ2V0cyBzZXQuXHJcblxyXG4gICAgICB0d2Vlbi5fc3RhcnRBdC5fc2F0ID0gdHdlZW47IC8vIHVzZWQgaW4gZ2xvYmFsVGltZSgpLiBfc2F0IHN0YW5kcyBmb3IgX3N0YXJ0QXRUd2VlblxyXG5cclxuICAgICAgdGltZSA8IDAgJiYgKF9yZXZlcnRpbmcgfHwgIWltbWVkaWF0ZVJlbmRlciAmJiAhYXV0b1JldmVydCkgJiYgdHdlZW4uX3N0YXJ0QXQucmV2ZXJ0KF9yZXZlcnRDb25maWdOb0tpbGwpOyAvLyByYXJlIGVkZ2UgY2FzZSwgbGlrZSBpZiBhIHJlbmRlciBpcyBmb3JjZWQgaW4gdGhlIG5lZ2F0aXZlIGRpcmVjdGlvbiBvZiBhIG5vbi1pbml0dGVkIHR3ZWVuLlxyXG5cclxuICAgICAgaWYgKGltbWVkaWF0ZVJlbmRlcikge1xyXG4gICAgICAgIGlmIChkdXIgJiYgdGltZSA8PSAwICYmIHRUaW1lIDw9IDApIHtcclxuICAgICAgICAgIC8vIGNoZWNrIHRUaW1lIGhlcmUgYmVjYXVzZSBpbiB0aGUgY2FzZSBvZiBhIHlveW8gdHdlZW4gd2hvc2UgcGxheWhlYWQgZ2V0cyBwdXNoZWQgdG8gdGhlIGVuZCBsaWtlIHR3ZWVuLnByb2dyZXNzKDEpLCB3ZSBzaG91bGQgYWxsb3cgaXQgdGhyb3VnaCBzbyB0aGF0IHRoZSBvbkNvbXBsZXRlIGdldHMgZmlyZWQgcHJvcGVybHkuXHJcbiAgICAgICAgICB0aW1lICYmICh0d2Vlbi5felRpbWUgPSB0aW1lKTtcclxuICAgICAgICAgIHJldHVybjsgLy93ZSBza2lwIGluaXRpYWxpemF0aW9uIGhlcmUgc28gdGhhdCBvdmVyd3JpdGluZyBkb2Vzbid0IG9jY3VyIHVudGlsIHRoZSB0d2VlbiBhY3R1YWxseSBiZWdpbnMuIE90aGVyd2lzZSwgaWYgeW91IGNyZWF0ZSBzZXZlcmFsIGltbWVkaWF0ZVJlbmRlcjp0cnVlIHR3ZWVucyBvZiB0aGUgc2FtZSB0YXJnZXQvcHJvcGVydGllcyB0byBkcm9wIGludG8gYSBUaW1lbGluZSwgdGhlIGxhc3Qgb25lIGNyZWF0ZWQgd291bGQgb3ZlcndyaXRlIHRoZSBmaXJzdCBvbmVzIGJlY2F1c2UgdGhleSBkaWRuJ3QgZ2V0IHBsYWNlZCBpbnRvIHRoZSB0aW1lbGluZSB5ZXQgYmVmb3JlIHRoZSBmaXJzdCByZW5kZXIgb2NjdXJzIGFuZCBraWNrcyBpbiBvdmVyd3JpdGluZy5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAocnVuQmFja3dhcmRzICYmIGR1cikge1xyXG4gICAgICAvL2Zyb20oKSB0d2VlbnMgbXVzdCBiZSBoYW5kbGVkIHVuaXF1ZWx5OiB0aGVpciBiZWdpbm5pbmcgdmFsdWVzIG11c3QgYmUgcmVuZGVyZWQgYnV0IHdlIGRvbid0IHdhbnQgb3ZlcndyaXRpbmcgdG8gb2NjdXIgeWV0ICh3aGVuIHRpbWUgaXMgc3RpbGwgMCkuIFdhaXQgdW50aWwgdGhlIHR3ZWVuIGFjdHVhbGx5IGJlZ2lucyBiZWZvcmUgZG9pbmcgYWxsIHRoZSByb3V0aW5lcyBsaWtlIG92ZXJ3cml0aW5nLiBBdCB0aGF0IHRpbWUsIHdlIHNob3VsZCByZW5kZXIgYXQgdGhlIEVORCBvZiB0aGUgdHdlZW4gdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGluaXRpYWxpemUgY29ycmVjdGx5IChyZW1lbWJlciwgZnJvbSgpIHR3ZWVucyBnbyBiYWNrd2FyZHMpXHJcbiAgICAgIGlmICghcHJldlN0YXJ0QXQpIHtcclxuICAgICAgICB0aW1lICYmIChpbW1lZGlhdGVSZW5kZXIgPSBmYWxzZSk7IC8vaW4gcmFyZSBjYXNlcyAobGlrZSBpZiBhIGZyb20oKSB0d2VlbiBydW5zIGFuZCB0aGVuIGlzIGludmFsaWRhdGUoKS1lZCksIGltbWVkaWF0ZVJlbmRlciBjb3VsZCBiZSB0cnVlIGJ1dCB0aGUgaW5pdGlhbCBmb3JjZWQtcmVuZGVyIGdldHMgc2tpcHBlZCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGZvcmNlIHRoZSByZW5kZXIgaW4gdGhpcyBjb250ZXh0IHdoZW4gdGhlIF90aW1lIGlzIGdyZWF0ZXIgdGhhbiAwXHJcblxyXG4gICAgICAgIHAgPSBfc2V0RGVmYXVsdHMoe1xyXG4gICAgICAgICAgb3ZlcndyaXRlOiBmYWxzZSxcclxuICAgICAgICAgIGRhdGE6IFwiaXNGcm9tU3RhcnRcIixcclxuICAgICAgICAgIC8vd2UgdGFnIHRoZSB0d2VlbiB3aXRoIGFzIFwiaXNGcm9tU3RhcnRcIiBzbyB0aGF0IGlmIFtpbnNpZGUgYSBwbHVnaW5dIHdlIG5lZWQgdG8gb25seSBkbyBzb21ldGhpbmcgYXQgdGhlIHZlcnkgRU5EIG9mIGEgdHdlZW4sIHdlIGhhdmUgYSB3YXkgb2YgaWRlbnRpZnlpbmcgdGhpcyB0d2VlbiBhcyBtZXJlbHkgdGhlIG9uZSB0aGF0J3Mgc2V0dGluZyB0aGUgYmVnaW5uaW5nIHZhbHVlcyBmb3IgYSBcImZyb20oKVwiIHR3ZWVuLiBGb3IgZXhhbXBsZSwgY2xlYXJQcm9wcyBpbiBDU1NQbHVnaW4gc2hvdWxkIG9ubHkgZ2V0IGFwcGxpZWQgYXQgdGhlIHZlcnkgRU5EIG9mIGEgdHdlZW4gYW5kIHdpdGhvdXQgdGhpcyB0YWcsIGZyb20oLi4ue2hlaWdodDoxMDAsIGNsZWFyUHJvcHM6XCJoZWlnaHRcIiwgZGVsYXk6MX0pIHdvdWxkIHdpcGUgdGhlIGhlaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0d2VlbiBhbmQgYWZ0ZXIgMSBzZWNvbmQsIGl0J2Qga2ljayBiYWNrIGluLlxyXG4gICAgICAgICAgbGF6eTogaW1tZWRpYXRlUmVuZGVyICYmICFwcmV2U3RhcnRBdCAmJiBfaXNOb3RGYWxzZShsYXp5KSxcclxuICAgICAgICAgIGltbWVkaWF0ZVJlbmRlcjogaW1tZWRpYXRlUmVuZGVyLFxyXG4gICAgICAgICAgLy96ZXJvLWR1cmF0aW9uIHR3ZWVucyByZW5kZXIgaW1tZWRpYXRlbHkgYnkgZGVmYXVsdCwgYnV0IGlmIHdlJ3JlIG5vdCBzcGVjaWZpY2FsbHkgaW5zdHJ1Y3RlZCB0byByZW5kZXIgdGhpcyB0d2VlbiBpbW1lZGlhdGVseSwgd2Ugc2hvdWxkIHNraXAgdGhpcyBhbmQgbWVyZWx5IF9pbml0KCkgdG8gcmVjb3JkIHRoZSBzdGFydGluZyB2YWx1ZXMgKHJlbmRlcmluZyB0aGVtIGltbWVkaWF0ZWx5IHdvdWxkIHB1c2ggdGhlbSB0byBjb21wbGV0aW9uIHdoaWNoIGlzIHdhc3RlZnVsIGluIHRoYXQgY2FzZSAtIHdlJ2QgaGF2ZSB0byByZW5kZXIoLTEpIGltbWVkaWF0ZWx5IGFmdGVyKVxyXG4gICAgICAgICAgc3RhZ2dlcjogMCxcclxuICAgICAgICAgIHBhcmVudDogcGFyZW50IC8vZW5zdXJlcyB0aGF0IG5lc3RlZCB0d2VlbnMgdGhhdCBoYWQgYSBzdGFnZ2VyIGFyZSBoYW5kbGVkIHByb3Blcmx5LCBsaWtlIGdzYXAuZnJvbShcIi5jbGFzc1wiLCB7eTogZ3NhcC51dGlscy53cmFwKFstMTAwLDEwMF0pLCBzdGFnZ2VyOiAwLjV9KVxyXG5cclxuICAgICAgICB9LCBjbGVhblZhcnMpO1xyXG4gICAgICAgIGhhcm5lc3NWYXJzICYmIChwW2hhcm5lc3MucHJvcF0gPSBoYXJuZXNzVmFycyk7IC8vIGluIGNhc2Ugc29tZW9uZSBkb2VzIHNvbWV0aGluZyBsaWtlIC5mcm9tKC4uLiwge2Nzczp7fX0pXHJcblxyXG4gICAgICAgIF9yZW1vdmVGcm9tUGFyZW50KHR3ZWVuLl9zdGFydEF0ID0gVHdlZW4uc2V0KHRhcmdldHMsIHApKTtcclxuXHJcbiAgICAgICAgdHdlZW4uX3N0YXJ0QXQuX2RwID0gMDsgLy8gZG9uJ3QgYWxsb3cgaXQgdG8gZ2V0IHB1dCBiYWNrIGludG8gcm9vdCB0aW1lbGluZSFcclxuXHJcbiAgICAgICAgdHdlZW4uX3N0YXJ0QXQuX3NhdCA9IHR3ZWVuOyAvLyB1c2VkIGluIGdsb2JhbFRpbWUoKVxyXG5cclxuICAgICAgICB0aW1lIDwgMCAmJiAoX3JldmVydGluZyA/IHR3ZWVuLl9zdGFydEF0LnJldmVydChfcmV2ZXJ0Q29uZmlnTm9LaWxsKSA6IHR3ZWVuLl9zdGFydEF0LnJlbmRlcigtMSwgdHJ1ZSkpO1xyXG4gICAgICAgIHR3ZWVuLl96VGltZSA9IHRpbWU7XHJcblxyXG4gICAgICAgIGlmICghaW1tZWRpYXRlUmVuZGVyKSB7XHJcbiAgICAgICAgICBfaW5pdFR3ZWVuKHR3ZWVuLl9zdGFydEF0LCBfdGlueU51bSwgX3RpbnlOdW0pOyAvL2Vuc3VyZXMgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZXMgYXJlIHJlY29yZGVkXHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRpbWUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0d2Vlbi5fcHQgPSB0d2Vlbi5fcHRDYWNoZSA9IDA7XHJcbiAgICBsYXp5ID0gZHVyICYmIF9pc05vdEZhbHNlKGxhenkpIHx8IGxhenkgJiYgIWR1cjtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0YXJnZXQgPSB0YXJnZXRzW2ldO1xyXG4gICAgICBnc0RhdGEgPSB0YXJnZXQuX2dzYXAgfHwgX2hhcm5lc3ModGFyZ2V0cylbaV0uX2dzYXA7XHJcbiAgICAgIHR3ZWVuLl9wdExvb2t1cFtpXSA9IHB0TG9va3VwID0ge307XHJcbiAgICAgIF9sYXp5TG9va3VwW2dzRGF0YS5pZF0gJiYgX2xhenlUd2VlbnMubGVuZ3RoICYmIF9sYXp5UmVuZGVyKCk7IC8vaWYgb3RoZXIgdHdlZW5zIG9mIHRoZSBzYW1lIHRhcmdldCBoYXZlIHJlY2VudGx5IGluaXR0ZWQgYnV0IGhhdmVuJ3QgcmVuZGVyZWQgeWV0LCB3ZSd2ZSBnb3QgdG8gZm9yY2UgdGhlIHJlbmRlciBzbyB0aGF0IHRoZSBzdGFydGluZyB2YWx1ZXMgYXJlIGNvcnJlY3QgKGltYWdpbmUgcG9wdWxhdGluZyBhIHRpbWVsaW5lIHdpdGggYSBidW5jaCBvZiBzZXF1ZW50aWFsIHR3ZWVucyBhbmQgdGhlbiBqdW1waW5nIHRvIHRoZSBlbmQpXHJcblxyXG4gICAgICBpbmRleCA9IGZ1bGxUYXJnZXRzID09PSB0YXJnZXRzID8gaSA6IGZ1bGxUYXJnZXRzLmluZGV4T2YodGFyZ2V0KTtcclxuXHJcbiAgICAgIGlmIChoYXJuZXNzICYmIChwbHVnaW4gPSBuZXcgaGFybmVzcygpKS5pbml0KHRhcmdldCwgaGFybmVzc1ZhcnMgfHwgY2xlYW5WYXJzLCB0d2VlbiwgaW5kZXgsIGZ1bGxUYXJnZXRzKSAhPT0gZmFsc2UpIHtcclxuICAgICAgICB0d2Vlbi5fcHQgPSBwdCA9IG5ldyBQcm9wVHdlZW4odHdlZW4uX3B0LCB0YXJnZXQsIHBsdWdpbi5uYW1lLCAwLCAxLCBwbHVnaW4ucmVuZGVyLCBwbHVnaW4sIDAsIHBsdWdpbi5wcmlvcml0eSk7XHJcblxyXG4gICAgICAgIHBsdWdpbi5fcHJvcHMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgICAgcHRMb29rdXBbbmFtZV0gPSBwdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcGx1Z2luLnByaW9yaXR5ICYmIChoYXNQcmlvcml0eSA9IDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWhhcm5lc3MgfHwgaGFybmVzc1ZhcnMpIHtcclxuICAgICAgICBmb3IgKHAgaW4gY2xlYW5WYXJzKSB7XHJcbiAgICAgICAgICBpZiAoX3BsdWdpbnNbcF0gJiYgKHBsdWdpbiA9IF9jaGVja1BsdWdpbihwLCBjbGVhblZhcnMsIHR3ZWVuLCBpbmRleCwgdGFyZ2V0LCBmdWxsVGFyZ2V0cykpKSB7XHJcbiAgICAgICAgICAgIHBsdWdpbi5wcmlvcml0eSAmJiAoaGFzUHJpb3JpdHkgPSAxKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHB0TG9va3VwW3BdID0gcHQgPSBfYWRkUHJvcFR3ZWVuLmNhbGwodHdlZW4sIHRhcmdldCwgcCwgXCJnZXRcIiwgY2xlYW5WYXJzW3BdLCBpbmRleCwgZnVsbFRhcmdldHMsIDAsIHZhcnMuc3RyaW5nRmlsdGVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHR3ZWVuLl9vcCAmJiB0d2Vlbi5fb3BbaV0gJiYgdHdlZW4ua2lsbCh0YXJnZXQsIHR3ZWVuLl9vcFtpXSk7XHJcblxyXG4gICAgICBpZiAoYXV0b092ZXJ3cml0ZSAmJiB0d2Vlbi5fcHQpIHtcclxuICAgICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IHR3ZWVuO1xyXG5cclxuICAgICAgICBfZ2xvYmFsVGltZWxpbmUua2lsbFR3ZWVuc09mKHRhcmdldCwgcHRMb29rdXAsIHR3ZWVuLmdsb2JhbFRpbWUodGltZSkpOyAvLyBtYWtlIHN1cmUgdGhlIG92ZXJ3cml0aW5nIGRvZXNuJ3Qgb3ZlcndyaXRlIFRISVMgdHdlZW4hISFcclxuXHJcblxyXG4gICAgICAgIG92ZXJ3cml0dGVuID0gIXR3ZWVuLnBhcmVudDtcclxuICAgICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHR3ZWVuLl9wdCAmJiBsYXp5ICYmIChfbGF6eUxvb2t1cFtnc0RhdGEuaWRdID0gMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzUHJpb3JpdHkgJiYgX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSh0d2Vlbik7XHJcbiAgICB0d2Vlbi5fb25Jbml0ICYmIHR3ZWVuLl9vbkluaXQodHdlZW4pOyAvL3BsdWdpbnMgbGlrZSBSb3VuZFByb3BzIG11c3Qgd2FpdCB1bnRpbCBBTEwgb2YgdGhlIFByb3BUd2VlbnMgYXJlIGluc3RhbnRpYXRlZC4gSW4gdGhlIHBsdWdpbidzIGluaXQoKSBmdW5jdGlvbiwgaXQgc2V0cyB0aGUgX29uSW5pdCBvbiB0aGUgdHdlZW4gaW5zdGFuY2UuIE1heSBub3QgYmUgcHJldHR5L2ludHVpdGl2ZSwgYnV0IGl0J3MgZmFzdCBhbmQga2VlcHMgZmlsZSBzaXplIGRvd24uXHJcbiAgfVxyXG5cclxuICB0d2Vlbi5fb25VcGRhdGUgPSBvblVwZGF0ZTtcclxuICB0d2Vlbi5faW5pdHRlZCA9ICghdHdlZW4uX29wIHx8IHR3ZWVuLl9wdCkgJiYgIW92ZXJ3cml0dGVuOyAvLyBpZiBvdmVyd3JpdHRlblByb3BzIHJlc3VsdGVkIGluIHRoZSBlbnRpcmUgdHdlZW4gYmVpbmcga2lsbGVkLCBkbyBOT1QgZmxhZyBpdCBhcyBpbml0dGVkIG9yIGVsc2UgaXQgbWF5IHJlbmRlciBmb3Igb25lIHRpY2suXHJcblxyXG4gIGtleWZyYW1lcyAmJiB0aW1lIDw9IDAgJiYgdGwucmVuZGVyKF9iaWdOdW0sIHRydWUsIHRydWUpOyAvLyBpZiB0aGVyZSdzIGEgMCUga2V5ZnJhbWUsIGl0J2xsIHJlbmRlciBpbiB0aGUgXCJiZWZvcmVcIiBzdGF0ZSBmb3IgYW55IHN0YWdnZXJlZC9kZWxheWVkIGFuaW1hdGlvbnMgdGh1cyB3aGVuIHRoZSBmb2xsb3dpbmcgdHdlZW4gaW5pdGlhbGl6ZXMsIGl0J2xsIHVzZSB0aGUgXCJiZWZvcmVcIiBzdGF0ZSBpbnN0ZWFkIG9mIHRoZSBcImFmdGVyXCIgc3RhdGUgYXMgdGhlIGluaXRpYWwgdmFsdWVzLlxyXG59LFxyXG4gICAgX3VwZGF0ZVByb3BUd2VlbnMgPSBmdW5jdGlvbiBfdXBkYXRlUHJvcFR3ZWVucyh0d2VlbiwgcHJvcGVydHksIHZhbHVlLCBzdGFydCwgc3RhcnRJc1JlbGF0aXZlLCByYXRpbywgdGltZSwgc2tpcFJlY3Vyc2lvbikge1xyXG4gIHZhciBwdENhY2hlID0gKHR3ZWVuLl9wdCAmJiB0d2Vlbi5fcHRDYWNoZSB8fCAodHdlZW4uX3B0Q2FjaGUgPSB7fSkpW3Byb3BlcnR5XSxcclxuICAgICAgcHQsXHJcbiAgICAgIHJvb3RQVCxcclxuICAgICAgbG9va3VwLFxyXG4gICAgICBpO1xyXG5cclxuICBpZiAoIXB0Q2FjaGUpIHtcclxuICAgIHB0Q2FjaGUgPSB0d2Vlbi5fcHRDYWNoZVtwcm9wZXJ0eV0gPSBbXTtcclxuICAgIGxvb2t1cCA9IHR3ZWVuLl9wdExvb2t1cDtcclxuICAgIGkgPSB0d2Vlbi5fdGFyZ2V0cy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBwdCA9IGxvb2t1cFtpXVtwcm9wZXJ0eV07XHJcblxyXG4gICAgICBpZiAocHQgJiYgcHQuZCAmJiBwdC5kLl9wdCkge1xyXG4gICAgICAgIC8vIGl0J3MgYSBwbHVnaW4sIHNvIGZpbmQgdGhlIG5lc3RlZCBQcm9wVHdlZW5cclxuICAgICAgICBwdCA9IHB0LmQuX3B0O1xyXG5cclxuICAgICAgICB3aGlsZSAocHQgJiYgcHQucCAhPT0gcHJvcGVydHkgJiYgcHQuZnAgIT09IHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAvLyBcImZwXCIgaXMgZnVuY3Rpb25QYXJhbSBmb3IgdGhpbmdzIGxpa2Ugc2V0dGluZyBDU1MgdmFyaWFibGVzIHdoaWNoIHJlcXVpcmUgLnNldFByb3BlcnR5KFwiLS12YXItbmFtZVwiLCB2YWx1ZSlcclxuICAgICAgICAgIHB0ID0gcHQuX25leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXB0KSB7XHJcbiAgICAgICAgLy8gdGhlcmUgaXMgbm8gUHJvcFR3ZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHByb3BlcnR5LCBzbyB3ZSBtdXN0IEZPUkNFIG9uZSB0byBiZSBjcmVhdGVkIGFuZCBkaXRjaCBvdXQgb2YgdGhpc1xyXG4gICAgICAgIC8vIGlmIHRoZSB0d2VlbiBoYXMgb3RoZXIgcHJvcGVydGllcyB0aGF0IGFscmVhZHkgcmVuZGVyZWQgYXQgbmV3IHBvc2l0aW9ucywgd2UnZCBub3JtYWxseSBoYXZlIHRvIHJld2luZCB0byBwdXQgdGhlbSBiYWNrIGxpa2UgdHdlZW4ucmVuZGVyKDAsIHRydWUpIGJlZm9yZSBmb3JjaW5nIGFuIF9pbml0VHdlZW4oKSwgYnV0IHRoYXQgY2FuIGNyZWF0ZSBhbm90aGVyIGVkZ2UgY2FzZSBsaWtlIHR3ZWVuaW5nIGEgdGltZWxpbmUncyBwcm9ncmVzcyB3b3VsZCB0cmlnZ2VyIG9uVXBkYXRlcyB0byBmaXJlIHdoaWNoIGNvdWxkIG1vdmUgb3RoZXIgdGhpbmdzIGFyb3VuZC4gSXQncyBiZXR0ZXIgdG8ganVzdCBpbmZvcm0gdXNlcnMgdGhhdCAucmVzZXRUbygpIHNob3VsZCBPTkxZIGJlIHVzZWQgZm9yIHR3ZWVucyB0aGF0IGFscmVhZHkgaGF2ZSB0aGF0IHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgeW91IGNhbid0IGdzYXAudG8oLi4ueyB5OiAwIH0pIGFuZCB0aGVuIHR3ZWVuLnJlc3RUbyhcInhcIiwgMjAwKSBmb3IgZXhhbXBsZS5cclxuICAgICAgICBfZm9yY2VBbGxQcm9wVHdlZW5zID0gMTsgLy8gb3RoZXJ3aXNlLCB3aGVuIHdlIF9hZGRQcm9wVHdlZW4oKSBhbmQgaXQgZmluZHMgbm8gY2hhbmdlIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzLCBpdCBza2lwcyBjcmVhdGluZyBhIFByb3BUd2VlbiAoZm9yIGVmZmljaWVuY3kuLi53aHkgdHdlZW4gd2hlbiB0aGVyZSdzIG5vIGRpZmZlcmVuY2U/KSBidXQgaW4gdGhpcyBjYXNlIHdlIE5FRUQgdGhhdCBQcm9wVHdlZW4gY3JlYXRlZCBzbyB3ZSBjYW4gZWRpdCBpdC5cclxuXHJcbiAgICAgICAgdHdlZW4udmFyc1twcm9wZXJ0eV0gPSBcIis9MFwiO1xyXG5cclxuICAgICAgICBfaW5pdFR3ZWVuKHR3ZWVuLCB0aW1lKTtcclxuXHJcbiAgICAgICAgX2ZvcmNlQWxsUHJvcFR3ZWVucyA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHNraXBSZWN1cnNpb24gPyBfd2Fybihwcm9wZXJ0eSArIFwiIG5vdCBlbGlnaWJsZSBmb3IgcmVzZXRcIikgOiAxOyAvLyBpZiBzb21lb25lIHRyaWVzIHRvIGRvIGEgcXVpY2tUbygpIG9uIGEgc3BlY2lhbCBwcm9wZXJ0eSBsaWtlIGJvcmRlclJhZGl1cyB3aGljaCBtdXN0IGdldCBzcGxpdCBpbnRvIDQgZGlmZmVyZW50IHByb3BlcnRpZXMsIHRoYXQncyBub3QgZWxpZ2libGUgZm9yIC5yZXNldFRvKCkuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHB0Q2FjaGUucHVzaChwdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpID0gcHRDYWNoZS5sZW5ndGg7XHJcblxyXG4gIHdoaWxlIChpLS0pIHtcclxuICAgIHJvb3RQVCA9IHB0Q2FjaGVbaV07XHJcbiAgICBwdCA9IHJvb3RQVC5fcHQgfHwgcm9vdFBUOyAvLyBjb21wbGV4IHZhbHVlcyBtYXkgaGF2ZSBuZXN0ZWQgUHJvcFR3ZWVucy4gV2Ugb25seSBhY2NvbW1vZGF0ZSB0aGUgRklSU1QgdmFsdWUuXHJcblxyXG4gICAgcHQucyA9IChzdGFydCB8fCBzdGFydCA9PT0gMCkgJiYgIXN0YXJ0SXNSZWxhdGl2ZSA/IHN0YXJ0IDogcHQucyArIChzdGFydCB8fCAwKSArIHJhdGlvICogcHQuYztcclxuICAgIHB0LmMgPSB2YWx1ZSAtIHB0LnM7XHJcbiAgICByb290UFQuZSAmJiAocm9vdFBULmUgPSBfcm91bmQodmFsdWUpICsgZ2V0VW5pdChyb290UFQuZSkpOyAvLyBtYWlubHkgZm9yIENTU1BsdWdpbiAoZW5kIHZhbHVlKVxyXG5cclxuICAgIHJvb3RQVC5iICYmIChyb290UFQuYiA9IHB0LnMgKyBnZXRVbml0KHJvb3RQVC5iKSk7IC8vIChiZWdpbm5pbmcgdmFsdWUpXHJcbiAgfVxyXG59LFxyXG4gICAgX2FkZEFsaWFzZXNUb1ZhcnMgPSBmdW5jdGlvbiBfYWRkQWxpYXNlc1RvVmFycyh0YXJnZXRzLCB2YXJzKSB7XHJcbiAgdmFyIGhhcm5lc3MgPSB0YXJnZXRzWzBdID8gX2dldENhY2hlKHRhcmdldHNbMF0pLmhhcm5lc3MgOiAwLFxyXG4gICAgICBwcm9wZXJ0eUFsaWFzZXMgPSBoYXJuZXNzICYmIGhhcm5lc3MuYWxpYXNlcyxcclxuICAgICAgY29weSxcclxuICAgICAgcCxcclxuICAgICAgaSxcclxuICAgICAgYWxpYXNlcztcclxuXHJcbiAgaWYgKCFwcm9wZXJ0eUFsaWFzZXMpIHtcclxuICAgIHJldHVybiB2YXJzO1xyXG4gIH1cclxuXHJcbiAgY29weSA9IF9tZXJnZSh7fSwgdmFycyk7XHJcblxyXG4gIGZvciAocCBpbiBwcm9wZXJ0eUFsaWFzZXMpIHtcclxuICAgIGlmIChwIGluIGNvcHkpIHtcclxuICAgICAgYWxpYXNlcyA9IHByb3BlcnR5QWxpYXNlc1twXS5zcGxpdChcIixcIik7XHJcbiAgICAgIGkgPSBhbGlhc2VzLmxlbmd0aDtcclxuXHJcbiAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBjb3B5W2FsaWFzZXNbaV1dID0gY29weVtwXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvcHk7XHJcbn0sXHJcbiAgICAvLyBwYXJzZXMgbXVsdGlwbGUgZm9ybWF0cywgbGlrZSB7XCIwJVwiOiB7eDogMTAwfSwge1wiNTAlXCI6IHt4OiAtMjB9fSBhbmQgeyB4OiB7XCIwJVwiOiAxMDAsIFwiNTAlXCI6IC0yMH0gfSwgYW5kIGFuIFwiZWFzZVwiIGNhbiBiZSBzZXQgb24gYW55IG9iamVjdC4gV2UgcG9wdWxhdGUgYW4gXCJhbGxQcm9wc1wiIG9iamVjdCB3aXRoIGFuIEFycmF5IGZvciBlYWNoIHByb3BlcnR5LCBsaWtlIHt4OiBbe30sIHt9XSwgeTpbe30sIHt9XX0gd2l0aCBkYXRhIGZvciBlYWNoIHByb3BlcnR5IHR3ZWVuLiBUaGUgb2JqZWN0cyBoYXZlIGEgXCJ0XCIgKHRpbWUpLCBcInZcIiwgKHZhbHVlKSwgYW5kIFwiZVwiIChlYXNlKSBwcm9wZXJ0eS4gVGhpcyBhbGxvd3MgdXMgdG8gcGllY2UgdG9nZXRoZXIgYSB0aW1lbGluZSBsYXRlci5cclxuX3BhcnNlS2V5ZnJhbWUgPSBmdW5jdGlvbiBfcGFyc2VLZXlmcmFtZShwcm9wLCBvYmosIGFsbFByb3BzLCBlYXNlRWFjaCkge1xyXG4gIHZhciBlYXNlID0gb2JqLmVhc2UgfHwgZWFzZUVhY2ggfHwgXCJwb3dlcjEuaW5PdXRcIixcclxuICAgICAgcCxcclxuICAgICAgYTtcclxuXHJcbiAgaWYgKF9pc0FycmF5KG9iaikpIHtcclxuICAgIGEgPSBhbGxQcm9wc1twcm9wXSB8fCAoYWxsUHJvcHNbcHJvcF0gPSBbXSk7IC8vIHQgPSB0aW1lIChvdXQgb2YgMTAwKSwgdiA9IHZhbHVlLCBlID0gZWFzZVxyXG5cclxuICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaSkge1xyXG4gICAgICByZXR1cm4gYS5wdXNoKHtcclxuICAgICAgICB0OiBpIC8gKG9iai5sZW5ndGggLSAxKSAqIDEwMCxcclxuICAgICAgICB2OiB2YWx1ZSxcclxuICAgICAgICBlOiBlYXNlXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAocCBpbiBvYmopIHtcclxuICAgICAgYSA9IGFsbFByb3BzW3BdIHx8IChhbGxQcm9wc1twXSA9IFtdKTtcclxuICAgICAgcCA9PT0gXCJlYXNlXCIgfHwgYS5wdXNoKHtcclxuICAgICAgICB0OiBwYXJzZUZsb2F0KHByb3ApLFxyXG4gICAgICAgIHY6IG9ialtwXSxcclxuICAgICAgICBlOiBlYXNlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufSxcclxuICAgIF9wYXJzZUZ1bmNPclN0cmluZyA9IGZ1bmN0aW9uIF9wYXJzZUZ1bmNPclN0cmluZyh2YWx1ZSwgdHdlZW4sIGksIHRhcmdldCwgdGFyZ2V0cykge1xyXG4gIHJldHVybiBfaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKHR3ZWVuLCBpLCB0YXJnZXQsIHRhcmdldHMpIDogX2lzU3RyaW5nKHZhbHVlKSAmJiB+dmFsdWUuaW5kZXhPZihcInJhbmRvbShcIikgPyBfcmVwbGFjZVJhbmRvbSh2YWx1ZSkgOiB2YWx1ZTtcclxufSxcclxuICAgIF9zdGFnZ2VyVHdlZW5Qcm9wcyA9IF9jYWxsYmFja05hbWVzICsgXCJyZXBlYXQscmVwZWF0RGVsYXkseW95byxyZXBlYXRSZWZyZXNoLHlveW9FYXNlLGF1dG9SZXZlcnRcIixcclxuICAgIF9zdGFnZ2VyUHJvcHNUb1NraXAgPSB7fTtcclxuXHJcbl9mb3JFYWNoTmFtZShfc3RhZ2dlclR3ZWVuUHJvcHMgKyBcIixpZCxzdGFnZ2VyLGRlbGF5LGR1cmF0aW9uLHBhdXNlZCxzY3JvbGxUcmlnZ2VyXCIsIGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgcmV0dXJuIF9zdGFnZ2VyUHJvcHNUb1NraXBbbmFtZV0gPSAxO1xyXG59KTtcclxuLypcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogVFdFRU5cclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICovXHJcblxyXG5cclxuZXhwb3J0IHZhciBUd2VlbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0FuaW1hdGlvbjIpIHtcclxuICBfaW5oZXJpdHNMb29zZShUd2VlbiwgX0FuaW1hdGlvbjIpO1xyXG5cclxuICBmdW5jdGlvbiBUd2Vlbih0YXJnZXRzLCB2YXJzLCBwb3NpdGlvbiwgc2tpcEluaGVyaXQpIHtcclxuICAgIHZhciBfdGhpczM7XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2YXJzID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHBvc2l0aW9uLmR1cmF0aW9uID0gdmFycztcclxuICAgICAgdmFycyA9IHBvc2l0aW9uO1xyXG4gICAgICBwb3NpdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX3RoaXMzID0gX0FuaW1hdGlvbjIuY2FsbCh0aGlzLCBza2lwSW5oZXJpdCA/IHZhcnMgOiBfaW5oZXJpdERlZmF1bHRzKHZhcnMpKSB8fCB0aGlzO1xyXG4gICAgdmFyIF90aGlzMyR2YXJzID0gX3RoaXMzLnZhcnMsXHJcbiAgICAgICAgZHVyYXRpb24gPSBfdGhpczMkdmFycy5kdXJhdGlvbixcclxuICAgICAgICBkZWxheSA9IF90aGlzMyR2YXJzLmRlbGF5LFxyXG4gICAgICAgIGltbWVkaWF0ZVJlbmRlciA9IF90aGlzMyR2YXJzLmltbWVkaWF0ZVJlbmRlcixcclxuICAgICAgICBzdGFnZ2VyID0gX3RoaXMzJHZhcnMuc3RhZ2dlcixcclxuICAgICAgICBvdmVyd3JpdGUgPSBfdGhpczMkdmFycy5vdmVyd3JpdGUsXHJcbiAgICAgICAga2V5ZnJhbWVzID0gX3RoaXMzJHZhcnMua2V5ZnJhbWVzLFxyXG4gICAgICAgIGRlZmF1bHRzID0gX3RoaXMzJHZhcnMuZGVmYXVsdHMsXHJcbiAgICAgICAgc2Nyb2xsVHJpZ2dlciA9IF90aGlzMyR2YXJzLnNjcm9sbFRyaWdnZXIsXHJcbiAgICAgICAgeW95b0Vhc2UgPSBfdGhpczMkdmFycy55b3lvRWFzZSxcclxuICAgICAgICBwYXJlbnQgPSB2YXJzLnBhcmVudCB8fCBfZ2xvYmFsVGltZWxpbmUsXHJcbiAgICAgICAgcGFyc2VkVGFyZ2V0cyA9IChfaXNBcnJheSh0YXJnZXRzKSB8fCBfaXNUeXBlZEFycmF5KHRhcmdldHMpID8gX2lzTnVtYmVyKHRhcmdldHNbMF0pIDogXCJsZW5ndGhcIiBpbiB2YXJzKSA/IFt0YXJnZXRzXSA6IHRvQXJyYXkodGFyZ2V0cyksXHJcbiAgICAgICAgdGwsXHJcbiAgICAgICAgaSxcclxuICAgICAgICBjb3B5LFxyXG4gICAgICAgIGwsXHJcbiAgICAgICAgcCxcclxuICAgICAgICBjdXJUYXJnZXQsXHJcbiAgICAgICAgc3RhZ2dlckZ1bmMsXHJcbiAgICAgICAgc3RhZ2dlclZhcnNUb01lcmdlO1xyXG4gICAgX3RoaXMzLl90YXJnZXRzID0gcGFyc2VkVGFyZ2V0cy5sZW5ndGggPyBfaGFybmVzcyhwYXJzZWRUYXJnZXRzKSA6IF93YXJuKFwiR1NBUCB0YXJnZXQgXCIgKyB0YXJnZXRzICsgXCIgbm90IGZvdW5kLiBodHRwczovL2dzYXAuY29tXCIsICFfY29uZmlnLm51bGxUYXJnZXRXYXJuKSB8fCBbXTtcclxuICAgIF90aGlzMy5fcHRMb29rdXAgPSBbXTsgLy9Qcm9wVHdlZW4gbG9va3VwLiBBbiBhcnJheSBjb250YWluaW5nIGFuIG9iamVjdCBmb3IgZWFjaCB0YXJnZXQsIGhhdmluZyBrZXlzIGZvciBlYWNoIHR3ZWVuaW5nIHByb3BlcnR5XHJcblxyXG4gICAgX3RoaXMzLl9vdmVyd3JpdGUgPSBvdmVyd3JpdGU7XHJcblxyXG4gICAgaWYgKGtleWZyYW1lcyB8fCBzdGFnZ2VyIHx8IF9pc0Z1bmNPclN0cmluZyhkdXJhdGlvbikgfHwgX2lzRnVuY09yU3RyaW5nKGRlbGF5KSkge1xyXG4gICAgICB2YXJzID0gX3RoaXMzLnZhcnM7XHJcbiAgICAgIHRsID0gX3RoaXMzLnRpbWVsaW5lID0gbmV3IFRpbWVsaW5lKHtcclxuICAgICAgICBkYXRhOiBcIm5lc3RlZFwiLFxyXG4gICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cyB8fCB7fSxcclxuICAgICAgICB0YXJnZXRzOiBwYXJlbnQgJiYgcGFyZW50LmRhdGEgPT09IFwibmVzdGVkXCIgPyBwYXJlbnQudmFycy50YXJnZXRzIDogcGFyc2VkVGFyZ2V0c1xyXG4gICAgICB9KTsgLy8gd2UgbmVlZCB0byBzdG9yZSB0aGUgdGFyZ2V0cyBiZWNhdXNlIGZvciBzdGFnZ2VycyBhbmQga2V5ZnJhbWVzLCB3ZSBlbmQgdXAgY3JlYXRpbmcgYW4gaW5kaXZpZHVhbCB0d2VlbiBmb3IgZWFjaCBidXQgZnVuY3Rpb24tYmFzZWQgdmFsdWVzIG5lZWQgdG8ga25vdyB0aGUgaW5kZXggYW5kIHRoZSB3aG9sZSBBcnJheSBvZiB0YXJnZXRzLlxyXG5cclxuICAgICAgdGwua2lsbCgpO1xyXG4gICAgICB0bC5wYXJlbnQgPSB0bC5fZHAgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyk7XHJcbiAgICAgIHRsLl9zdGFydCA9IDA7XHJcblxyXG4gICAgICBpZiAoc3RhZ2dlciB8fCBfaXNGdW5jT3JTdHJpbmcoZHVyYXRpb24pIHx8IF9pc0Z1bmNPclN0cmluZyhkZWxheSkpIHtcclxuICAgICAgICBsID0gcGFyc2VkVGFyZ2V0cy5sZW5ndGg7XHJcbiAgICAgICAgc3RhZ2dlckZ1bmMgPSBzdGFnZ2VyICYmIGRpc3RyaWJ1dGUoc3RhZ2dlcik7XHJcblxyXG4gICAgICAgIGlmIChfaXNPYmplY3Qoc3RhZ2dlcikpIHtcclxuICAgICAgICAgIC8vdXNlcnMgY2FuIHBhc3MgaW4gY2FsbGJhY2tzIGxpa2Ugb25TdGFydC9vbkNvbXBsZXRlIGluIHRoZSBzdGFnZ2VyIG9iamVjdC4gVGhlc2Ugc2hvdWxkIGZpcmUgd2l0aCBlYWNoIGluZGl2aWR1YWwgdHdlZW4uXHJcbiAgICAgICAgICBmb3IgKHAgaW4gc3RhZ2dlcikge1xyXG4gICAgICAgICAgICBpZiAofl9zdGFnZ2VyVHdlZW5Qcm9wcy5pbmRleE9mKHApKSB7XHJcbiAgICAgICAgICAgICAgc3RhZ2dlclZhcnNUb01lcmdlIHx8IChzdGFnZ2VyVmFyc1RvTWVyZ2UgPSB7fSk7XHJcbiAgICAgICAgICAgICAgc3RhZ2dlclZhcnNUb01lcmdlW3BdID0gc3RhZ2dlcltwXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29weSA9IF9jb3B5RXhjbHVkaW5nKHZhcnMsIF9zdGFnZ2VyUHJvcHNUb1NraXApO1xyXG4gICAgICAgICAgY29weS5zdGFnZ2VyID0gMDtcclxuICAgICAgICAgIHlveW9FYXNlICYmIChjb3B5LnlveW9FYXNlID0geW95b0Vhc2UpO1xyXG4gICAgICAgICAgc3RhZ2dlclZhcnNUb01lcmdlICYmIF9tZXJnZShjb3B5LCBzdGFnZ2VyVmFyc1RvTWVyZ2UpO1xyXG4gICAgICAgICAgY3VyVGFyZ2V0ID0gcGFyc2VkVGFyZ2V0c1tpXTsgLy9kb24ndCBqdXN0IGNvcHkgZHVyYXRpb24gb3IgZGVsYXkgYmVjYXVzZSBpZiB0aGV5J3JlIGEgc3RyaW5nIG9yIGZ1bmN0aW9uLCB3ZSdkIGVuZCB1cCBpbiBhbiBpbmZpbml0ZSBsb29wIGJlY2F1c2UgX2lzRnVuY09yU3RyaW5nKCkgd291bGQgZXZhbHVhdGUgYXMgdHJ1ZSBpbiB0aGUgY2hpbGQgdHdlZW5zLCBlbnRlcmluZyB0aGlzIGxvb3AsIGV0Yy4gU28gd2UgcGFyc2UgdGhlIHZhbHVlIHN0cmFpZ2h0IGZyb20gdmFycyBhbmQgZGVmYXVsdCB0byAwLlxyXG5cclxuICAgICAgICAgIGNvcHkuZHVyYXRpb24gPSArX3BhcnNlRnVuY09yU3RyaW5nKGR1cmF0aW9uLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyksIGksIGN1clRhcmdldCwgcGFyc2VkVGFyZ2V0cyk7XHJcbiAgICAgICAgICBjb3B5LmRlbGF5ID0gKCtfcGFyc2VGdW5jT3JTdHJpbmcoZGVsYXksIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMzKSwgaSwgY3VyVGFyZ2V0LCBwYXJzZWRUYXJnZXRzKSB8fCAwKSAtIF90aGlzMy5fZGVsYXk7XHJcblxyXG4gICAgICAgICAgaWYgKCFzdGFnZ2VyICYmIGwgPT09IDEgJiYgY29weS5kZWxheSkge1xyXG4gICAgICAgICAgICAvLyBpZiBzb21lb25lIGRvZXMgZGVsYXk6XCJyYW5kb20oMSwgNSlcIiwgcmVwZWF0Oi0xLCBmb3IgZXhhbXBsZSwgdGhlIGRlbGF5IHNob3VsZG4ndCBiZSBpbnNpZGUgdGhlIHJlcGVhdC5cclxuICAgICAgICAgICAgX3RoaXMzLl9kZWxheSA9IGRlbGF5ID0gY29weS5kZWxheTtcclxuICAgICAgICAgICAgX3RoaXMzLl9zdGFydCArPSBkZWxheTtcclxuICAgICAgICAgICAgY29weS5kZWxheSA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGwudG8oY3VyVGFyZ2V0LCBjb3B5LCBzdGFnZ2VyRnVuYyA/IHN0YWdnZXJGdW5jKGksIGN1clRhcmdldCwgcGFyc2VkVGFyZ2V0cykgOiAwKTtcclxuICAgICAgICAgIHRsLl9lYXNlID0gX2Vhc2VNYXAubm9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRsLmR1cmF0aW9uKCkgPyBkdXJhdGlvbiA9IGRlbGF5ID0gMCA6IF90aGlzMy50aW1lbGluZSA9IDA7IC8vIGlmIHRoZSB0aW1lbGluZSdzIGR1cmF0aW9uIGlzIDAsIHdlIGRvbid0IG5lZWQgYSB0aW1lbGluZSBpbnRlcm5hbGx5IVxyXG4gICAgICB9IGVsc2UgaWYgKGtleWZyYW1lcykge1xyXG4gICAgICAgIF9pbmhlcml0RGVmYXVsdHMoX3NldERlZmF1bHRzKHRsLnZhcnMuZGVmYXVsdHMsIHtcclxuICAgICAgICAgIGVhc2U6IFwibm9uZVwiXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICB0bC5fZWFzZSA9IF9wYXJzZUVhc2Uoa2V5ZnJhbWVzLmVhc2UgfHwgdmFycy5lYXNlIHx8IFwibm9uZVwiKTtcclxuICAgICAgICB2YXIgdGltZSA9IDAsXHJcbiAgICAgICAgICAgIGEsXHJcbiAgICAgICAgICAgIGtmLFxyXG4gICAgICAgICAgICB2O1xyXG5cclxuICAgICAgICBpZiAoX2lzQXJyYXkoa2V5ZnJhbWVzKSkge1xyXG4gICAgICAgICAga2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24gKGZyYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0bC50byhwYXJzZWRUYXJnZXRzLCBmcmFtZSwgXCI+XCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0bC5kdXJhdGlvbigpOyAvLyB0byBlbnN1cmUgdGwuX2R1ciBpcyBjYWNoZWQgYmVjYXVzZSB3ZSB0YXAgaW50byBpdCBmb3IgcGVyZm9ybWFuY2UgcHVycG9zZXMgaW4gdGhlIHJlbmRlcigpIG1ldGhvZC5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29weSA9IHt9O1xyXG5cclxuICAgICAgICAgIGZvciAocCBpbiBrZXlmcmFtZXMpIHtcclxuICAgICAgICAgICAgcCA9PT0gXCJlYXNlXCIgfHwgcCA9PT0gXCJlYXNlRWFjaFwiIHx8IF9wYXJzZUtleWZyYW1lKHAsIGtleWZyYW1lc1twXSwgY29weSwga2V5ZnJhbWVzLmVhc2VFYWNoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKHAgaW4gY29weSkge1xyXG4gICAgICAgICAgICBhID0gY29weVtwXS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGEudCAtIGIudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRpbWUgPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBrZiA9IGFbaV07XHJcbiAgICAgICAgICAgICAgdiA9IHtcclxuICAgICAgICAgICAgICAgIGVhc2U6IGtmLmUsXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogKGtmLnQgLSAoaSA/IGFbaSAtIDFdLnQgOiAwKSkgLyAxMDAgKiBkdXJhdGlvblxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdltwXSA9IGtmLnY7XHJcbiAgICAgICAgICAgICAgdGwudG8ocGFyc2VkVGFyZ2V0cywgdiwgdGltZSk7XHJcbiAgICAgICAgICAgICAgdGltZSArPSB2LmR1cmF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGwuZHVyYXRpb24oKSA8IGR1cmF0aW9uICYmIHRsLnRvKHt9LCB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAtIHRsLmR1cmF0aW9uKClcclxuICAgICAgICAgIH0pOyAvLyBpbiBjYXNlIGtleWZyYW1lcyBkaWRuJ3QgZ28gdG8gMTAwJVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZHVyYXRpb24gfHwgX3RoaXMzLmR1cmF0aW9uKGR1cmF0aW9uID0gdGwuZHVyYXRpb24oKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBfdGhpczMudGltZWxpbmUgPSAwOyAvL3NwZWVkIG9wdGltaXphdGlvbiwgZmFzdGVyIGxvb2t1cHMgKG5vIGdvaW5nIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG92ZXJ3cml0ZSA9PT0gdHJ1ZSAmJiAhX3N1cHByZXNzT3ZlcndyaXRlcykge1xyXG4gICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMzKTtcclxuXHJcbiAgICAgIF9nbG9iYWxUaW1lbGluZS5raWxsVHdlZW5zT2YocGFyc2VkVGFyZ2V0cyk7XHJcblxyXG4gICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgX2FkZFRvVGltZWxpbmUocGFyZW50LCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyksIHBvc2l0aW9uKTtcclxuXHJcbiAgICB2YXJzLnJldmVyc2VkICYmIF90aGlzMy5yZXZlcnNlKCk7XHJcbiAgICB2YXJzLnBhdXNlZCAmJiBfdGhpczMucGF1c2VkKHRydWUpO1xyXG5cclxuICAgIGlmIChpbW1lZGlhdGVSZW5kZXIgfHwgIWR1cmF0aW9uICYmICFrZXlmcmFtZXMgJiYgX3RoaXMzLl9zdGFydCA9PT0gX3JvdW5kUHJlY2lzZShwYXJlbnQuX3RpbWUpICYmIF9pc05vdEZhbHNlKGltbWVkaWF0ZVJlbmRlcikgJiYgX2hhc05vUGF1c2VkQW5jZXN0b3JzKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMzKSkgJiYgcGFyZW50LmRhdGEgIT09IFwibmVzdGVkXCIpIHtcclxuICAgICAgX3RoaXMzLl90VGltZSA9IC1fdGlueU51bTsgLy9mb3JjZXMgYSByZW5kZXIgd2l0aG91dCBoYXZpbmcgdG8gc2V0IHRoZSByZW5kZXIoKSBcImZvcmNlXCIgcGFyYW1ldGVyIHRvIHRydWUgYmVjYXVzZSB3ZSB3YW50IHRvIGFsbG93IGxhenlpbmcgYnkgZGVmYXVsdCAodXNpbmcgdGhlIFwiZm9yY2VcIiBwYXJhbWV0ZXIgYWx3YXlzIGZvcmNlcyBhbiBpbW1lZGlhdGUgZnVsbCByZW5kZXIpXHJcblxyXG4gICAgICBfdGhpczMucmVuZGVyKE1hdGgubWF4KDAsIC1kZWxheSkgfHwgMCk7IC8vaW4gY2FzZSBkZWxheSBpcyBuZWdhdGl2ZVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxUcmlnZ2VyICYmIF9zY3JvbGxUcmlnZ2VyKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMzKSwgc2Nyb2xsVHJpZ2dlcik7XHJcbiAgICByZXR1cm4gX3RoaXMzO1xyXG4gIH1cclxuXHJcbiAgdmFyIF9wcm90bzMgPSBUd2Vlbi5wcm90b3R5cGU7XHJcblxyXG4gIF9wcm90bzMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKSB7XHJcbiAgICB2YXIgcHJldlRpbWUgPSB0aGlzLl90aW1lLFxyXG4gICAgICAgIHREdXIgPSB0aGlzLl90RHVyLFxyXG4gICAgICAgIGR1ciA9IHRoaXMuX2R1cixcclxuICAgICAgICBpc05lZ2F0aXZlID0gdG90YWxUaW1lIDwgMCxcclxuICAgICAgICB0VGltZSA9IHRvdGFsVGltZSA+IHREdXIgLSBfdGlueU51bSAmJiAhaXNOZWdhdGl2ZSA/IHREdXIgOiB0b3RhbFRpbWUgPCBfdGlueU51bSA/IDAgOiB0b3RhbFRpbWUsXHJcbiAgICAgICAgdGltZSxcclxuICAgICAgICBwdCxcclxuICAgICAgICBpdGVyYXRpb24sXHJcbiAgICAgICAgY3ljbGVEdXJhdGlvbixcclxuICAgICAgICBwcmV2SXRlcmF0aW9uLFxyXG4gICAgICAgIGlzWW95byxcclxuICAgICAgICByYXRpbyxcclxuICAgICAgICB0aW1lbGluZSxcclxuICAgICAgICB5b3lvRWFzZTtcclxuXHJcbiAgICBpZiAoIWR1cikge1xyXG4gICAgICBfcmVuZGVyWmVyb0R1cmF0aW9uVHdlZW4odGhpcywgdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xyXG4gICAgfSBlbHNlIGlmICh0VGltZSAhPT0gdGhpcy5fdFRpbWUgfHwgIXRvdGFsVGltZSB8fCBmb3JjZSB8fCAhdGhpcy5faW5pdHRlZCAmJiB0aGlzLl90VGltZSB8fCB0aGlzLl9zdGFydEF0ICYmIHRoaXMuX3pUaW1lIDwgMCAhPT0gaXNOZWdhdGl2ZSB8fCB0aGlzLl9sYXp5KSB7XHJcbiAgICAgIC8vIHRoaXMgc2Vuc2VzIGlmIHdlJ3JlIGNyb3NzaW5nIG92ZXIgdGhlIHN0YXJ0IHRpbWUsIGluIHdoaWNoIGNhc2Ugd2UgbXVzdCByZWNvcmQgX3pUaW1lIGFuZCBmb3JjZSB0aGUgcmVuZGVyLCBidXQgd2UgZG8gaXQgaW4gdGhpcyBsZW5ndGh5IGNvbmRpdGlvbmFsIHdheSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAodXN1YWxseSB3ZSBjYW4gc2tpcCB0aGUgY2FsY3VsYXRpb25zKTogdGhpcy5faW5pdHRlZCAmJiAodGhpcy5felRpbWUgPCAwKSAhPT0gKHRvdGFsVGltZSA8IDApXHJcbiAgICAgIHRpbWUgPSB0VGltZTtcclxuICAgICAgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3JlcGVhdCkge1xyXG4gICAgICAgIC8vYWRqdXN0IHRoZSB0aW1lIGZvciByZXBlYXRzIGFuZCB5b3lvc1xyXG4gICAgICAgIGN5Y2xlRHVyYXRpb24gPSBkdXIgKyB0aGlzLl9yRGVsYXk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yZXBlYXQgPCAtMSAmJiBpc05lZ2F0aXZlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50b3RhbFRpbWUoY3ljbGVEdXJhdGlvbiAqIDEwMCArIHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRpbWUgPSBfcm91bmRQcmVjaXNlKHRUaW1lICUgY3ljbGVEdXJhdGlvbik7IC8vcm91bmQgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgZXJyb3JzLiAoNCAlIDAuOCBzaG91bGQgYmUgMCBidXQgc29tZSBicm93c2VycyByZXBvcnQgaXQgYXMgMC43OTk5OTk5OSEpXHJcblxyXG4gICAgICAgIGlmICh0VGltZSA9PT0gdER1cikge1xyXG4gICAgICAgICAgLy8gdGhlIHREdXIgPT09IHRUaW1lIGlzIGZvciBlZGdlIGNhc2VzIHdoZXJlIHRoZXJlJ3MgYSBsZW5ndGh5IGRlY2ltYWwgb24gdGhlIGR1cmF0aW9uIGFuZCBpdCBtYXkgcmVhY2ggdGhlIHZlcnkgZW5kIGJ1dCB0aGUgdGltZSBpcyByZW5kZXJlZCBhcyBub3QtcXVpdGUtdGhlcmUgKHJlbWVtYmVyLCB0RHVyIGlzIHJvdW5kZWQgdG8gNCBkZWNpbWFscyB3aGVyZWFzIGR1ciBpc24ndClcclxuICAgICAgICAgIGl0ZXJhdGlvbiA9IHRoaXMuX3JlcGVhdDtcclxuICAgICAgICAgIHRpbWUgPSBkdXI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByZXZJdGVyYXRpb24gPSBfcm91bmRQcmVjaXNlKHRUaW1lIC8gY3ljbGVEdXJhdGlvbik7IC8vIGZ1bGwgZGVjaW1hbCB2ZXJzaW9uIG9mIGl0ZXJhdGlvbnMsIG5vdCB0aGUgcHJldmlvdXMgaXRlcmF0aW9uICh3ZSdyZSByZXVzaW5nIHByZXZJdGVyYXRpb24gdmFyaWFibGUgZm9yIGVmZmljaWVuY3kpXHJcblxyXG4gICAgICAgICAgaXRlcmF0aW9uID0gfn5wcmV2SXRlcmF0aW9uO1xyXG5cclxuICAgICAgICAgIGlmIChpdGVyYXRpb24gJiYgaXRlcmF0aW9uID09PSBwcmV2SXRlcmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRpbWUgPSBkdXI7XHJcbiAgICAgICAgICAgIGl0ZXJhdGlvbi0tO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aW1lID4gZHVyKSB7XHJcbiAgICAgICAgICAgIHRpbWUgPSBkdXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpc1lveW8gPSB0aGlzLl95b3lvICYmIGl0ZXJhdGlvbiAmIDE7XHJcblxyXG4gICAgICAgIGlmIChpc1lveW8pIHtcclxuICAgICAgICAgIHlveW9FYXNlID0gdGhpcy5feUVhc2U7XHJcbiAgICAgICAgICB0aW1lID0gZHVyIC0gdGltZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByZXZJdGVyYXRpb24gPSBfYW5pbWF0aW9uQ3ljbGUodGhpcy5fdFRpbWUsIGN5Y2xlRHVyYXRpb24pO1xyXG5cclxuICAgICAgICBpZiAodGltZSA9PT0gcHJldlRpbWUgJiYgIWZvcmNlICYmIHRoaXMuX2luaXR0ZWQgJiYgaXRlcmF0aW9uID09PSBwcmV2SXRlcmF0aW9uKSB7XHJcbiAgICAgICAgICAvL2NvdWxkIGJlIGR1cmluZyB0aGUgcmVwZWF0RGVsYXkgcGFydC4gTm8gbmVlZCB0byByZW5kZXIgYW5kIGZpcmUgY2FsbGJhY2tzLlxyXG4gICAgICAgICAgdGhpcy5fdFRpbWUgPSB0VGltZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbiAhPT0gcHJldkl0ZXJhdGlvbikge1xyXG4gICAgICAgICAgdGltZWxpbmUgJiYgdGhpcy5feUVhc2UgJiYgX3Byb3BhZ2F0ZVlveW9FYXNlKHRpbWVsaW5lLCBpc1lveW8pOyAvL3JlcGVhdFJlZnJlc2ggZnVuY3Rpb25hbGl0eVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnZhcnMucmVwZWF0UmVmcmVzaCAmJiAhaXNZb3lvICYmICF0aGlzLl9sb2NrICYmIHRpbWUgIT09IGN5Y2xlRHVyYXRpb24gJiYgdGhpcy5faW5pdHRlZCkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLl90aW1lIHdpbGwgPT09IGN5Y2xlRHVyYXRpb24gd2hlbiB3ZSByZW5kZXIgYXQgRVhBQ1RMWSB0aGUgZW5kIG9mIGFuIGl0ZXJhdGlvbi4gV2l0aG91dCB0aGlzIGNvbmRpdGlvbiwgaXQnZCBvZnRlbiBkbyB0aGUgcmVwZWF0UmVmcmVzaCByZW5kZXIgVFdJQ0UgKGFnYWluIG9uIHRoZSB2ZXJ5IG5leHQgdGljaykuXHJcbiAgICAgICAgICAgIHRoaXMuX2xvY2sgPSBmb3JjZSA9IDE7IC8vZm9yY2UsIG90aGVyd2lzZSBpZiBsYXp5IGlzIHRydWUsIHRoZSBfYXR0ZW1wdEluaXRUd2VlbigpIHdpbGwgcmV0dXJuIGFuZCB3ZSdsbCBqdW1wIG91dCBhbmQgZ2V0IGNhdWdodCBib3VuY2luZyBvbiBlYWNoIHRpY2suXHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcihfcm91bmRQcmVjaXNlKGN5Y2xlRHVyYXRpb24gKiBpdGVyYXRpb24pLCB0cnVlKS5pbnZhbGlkYXRlKCkuX2xvY2sgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLl9pbml0dGVkKSB7XHJcbiAgICAgICAgaWYgKF9hdHRlbXB0SW5pdFR3ZWVuKHRoaXMsIGlzTmVnYXRpdmUgPyB0b3RhbFRpbWUgOiB0aW1lLCBmb3JjZSwgc3VwcHJlc3NFdmVudHMsIHRUaW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5fdFRpbWUgPSAwOyAvLyBpbiBjb25zdHJ1Y3RvciBpZiBpbW1lZGlhdGVSZW5kZXIgaXMgdHJ1ZSwgd2Ugc2V0IF90VGltZSB0byAtX3RpbnlOdW0gdG8gaGF2ZSB0aGUgcGxheWhlYWQgY3Jvc3MgdGhlIHN0YXJ0aW5nIHBvaW50IGJ1dCB3ZSBjYW4ndCBsZWF2ZSBfdFRpbWUgYXMgYSBuZWdhdGl2ZSBudW1iZXIuXHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJldlRpbWUgIT09IHRoaXMuX3RpbWUgJiYgIShmb3JjZSAmJiB0aGlzLnZhcnMucmVwZWF0UmVmcmVzaCAmJiBpdGVyYXRpb24gIT09IHByZXZJdGVyYXRpb24pKSB7XHJcbiAgICAgICAgICAvLyByYXJlIGVkZ2UgY2FzZSAtIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW4gb25VcGRhdGUgaW4gdGhlIF9zdGFydEF0ICguZnJvbVRvKCkpIG1pZ2h0IGZvcmNlIHRoaXMgdHdlZW4gdG8gcmVuZGVyIGF0IGEgZGlmZmVyZW50IHNwb3QgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgZGl0Y2ggdGhpcyByZW5kZXIoKSBjYWxsIHNvIHRoYXQgaXQgZG9lc24ndCByZXZlcnQgdGhlIHZhbHVlcy4gQnV0IHdlIGFsc28gZG9uJ3Qgd2FudCB0byBkdW1wIGlmIHdlJ3JlIGRvaW5nIGEgcmVwZWF0UmVmcmVzaCByZW5kZXIhXHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkdXIgIT09IHRoaXMuX2R1cikge1xyXG4gICAgICAgICAgLy8gd2hpbGUgaW5pdHRpbmcsIGEgcGx1Z2luIGxpa2UgSW5lcnRpYVBsdWdpbiBtaWdodCBhbHRlciB0aGUgZHVyYXRpb24sIHNvIHJlcnVuIGZyb20gdGhlIHN0YXJ0IHRvIGVuc3VyZSBldmVyeXRoaW5nIHJlbmRlcnMgYXMgaXQgc2hvdWxkLlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3RUaW1lID0gdFRpbWU7XHJcbiAgICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLl9hY3QgJiYgdGhpcy5fdHMpIHtcclxuICAgICAgICB0aGlzLl9hY3QgPSAxOyAvL2FzIGxvbmcgYXMgaXQncyBub3QgcGF1c2VkLCBmb3JjZSBpdCB0byBiZSBhY3RpdmUgc28gdGhhdCBpZiB0aGUgdXNlciByZW5kZXJzIGluZGVwZW5kZW50IG9mIHRoZSBwYXJlbnQgdGltZWxpbmUsIGl0J2xsIGJlIGZvcmNlZCB0byByZS1yZW5kZXIgb24gdGhlIG5leHQgdGljay5cclxuXHJcbiAgICAgICAgdGhpcy5fbGF6eSA9IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmF0aW8gPSByYXRpbyA9ICh5b3lvRWFzZSB8fCB0aGlzLl9lYXNlKSh0aW1lIC8gZHVyKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9mcm9tKSB7XHJcbiAgICAgICAgdGhpcy5yYXRpbyA9IHJhdGlvID0gMSAtIHJhdGlvO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXByZXZUaW1lICYmIHRUaW1lICYmICFzdXBwcmVzc0V2ZW50cyAmJiAhcHJldkl0ZXJhdGlvbikge1xyXG4gICAgICAgIF9jYWxsYmFjayh0aGlzLCBcIm9uU3RhcnRcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90VGltZSAhPT0gdFRpbWUpIHtcclxuICAgICAgICAgIC8vIGluIGNhc2UgdGhlIG9uU3RhcnQgdHJpZ2dlcmVkIGEgcmVuZGVyIGF0IGEgZGlmZmVyZW50IHNwb3QsIGVqZWN0LiBMaWtlIGlmIHNvbWVvbmUgZGlkIGFuaW1hdGlvbi5wYXVzZSgwLjUpIG9yIHNvbWV0aGluZyBpbnNpZGUgdGhlIG9uU3RhcnQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHB0ID0gdGhpcy5fcHQ7XHJcblxyXG4gICAgICB3aGlsZSAocHQpIHtcclxuICAgICAgICBwdC5yKHJhdGlvLCBwdC5kKTtcclxuICAgICAgICBwdCA9IHB0Ll9uZXh0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aW1lbGluZSAmJiB0aW1lbGluZS5yZW5kZXIodG90YWxUaW1lIDwgMCA/IHRvdGFsVGltZSA6IHRpbWVsaW5lLl9kdXIgKiB0aW1lbGluZS5fZWFzZSh0aW1lIC8gdGhpcy5fZHVyKSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKSB8fCB0aGlzLl9zdGFydEF0ICYmICh0aGlzLl96VGltZSA9IHRvdGFsVGltZSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5fb25VcGRhdGUgJiYgIXN1cHByZXNzRXZlbnRzKSB7XHJcbiAgICAgICAgaXNOZWdhdGl2ZSAmJiBfcmV3aW5kU3RhcnRBdCh0aGlzLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7IC8vbm90ZTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIHR1Y2sgdGhpcyBjb25kaXRpb25hbCBsb2dpYyBpbnNpZGUgbGVzcyB0cmF2ZWxlZCBhcmVhcyAobW9zdCB0d2VlbnMgZG9uJ3QgaGF2ZSBhbiBvblVwZGF0ZSkuIFdlJ2QganVzdCBoYXZlIGl0IGF0IHRoZSBlbmQgYmVmb3JlIHRoZSBvbkNvbXBsZXRlLCBidXQgdGhlIHZhbHVlcyBzaG91bGQgYmUgdXBkYXRlZCBiZWZvcmUgYW55IG9uVXBkYXRlIGlzIGNhbGxlZCwgc28gd2UgQUxTTyBwdXQgaXQgaGVyZSBhbmQgdGhlbiBpZiBpdCdzIG5vdCBjYWxsZWQsIHdlIGRvIHNvIGxhdGVyIG5lYXIgdGhlIG9uQ29tcGxldGUuXHJcblxyXG4gICAgICAgIF9jYWxsYmFjayh0aGlzLCBcIm9uVXBkYXRlXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9yZXBlYXQgJiYgaXRlcmF0aW9uICE9PSBwcmV2SXRlcmF0aW9uICYmIHRoaXMudmFycy5vblJlcGVhdCAmJiAhc3VwcHJlc3NFdmVudHMgJiYgdGhpcy5wYXJlbnQgJiYgX2NhbGxiYWNrKHRoaXMsIFwib25SZXBlYXRcIik7XHJcblxyXG4gICAgICBpZiAoKHRUaW1lID09PSB0aGlzLl90RHVyIHx8ICF0VGltZSkgJiYgdGhpcy5fdFRpbWUgPT09IHRUaW1lKSB7XHJcbiAgICAgICAgaXNOZWdhdGl2ZSAmJiAhdGhpcy5fb25VcGRhdGUgJiYgX3Jld2luZFN0YXJ0QXQodGhpcywgdG90YWxUaW1lLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICAodG90YWxUaW1lIHx8ICFkdXIpICYmICh0VGltZSA9PT0gdGhpcy5fdER1ciAmJiB0aGlzLl90cyA+IDAgfHwgIXRUaW1lICYmIHRoaXMuX3RzIDwgMCkgJiYgX3JlbW92ZUZyb21QYXJlbnQodGhpcywgMSk7IC8vIGRvbid0IHJlbW92ZSBpZiB3ZSdyZSByZW5kZXJpbmcgYXQgZXhhY3RseSBhIHRpbWUgb2YgMCwgYXMgdGhlcmUgY291bGQgYmUgYXV0b1JldmVydCB2YWx1ZXMgdGhhdCBzaG91bGQgZ2V0IHNldCBvbiB0aGUgbmV4dCB0aWNrIChpZiB0aGUgcGxheWhlYWQgZ29lcyBiYWNrd2FyZCBiZXlvbmQgdGhlIHN0YXJ0VGltZSwgbmVnYXRpdmUgdG90YWxUaW1lKS4gRG9uJ3QgcmVtb3ZlIGlmIHRoZSB0aW1lbGluZSBpcyByZXZlcnNlZCBhbmQgdGhlIHBsYXloZWFkIGlzbid0IGF0IDAsIG90aGVyd2lzZSB0bC5wcm9ncmVzcygxKS5yZXZlcnNlKCkgd29uJ3Qgd29yay4gT25seSByZW1vdmUgaWYgdGhlIHBsYXloZWFkIGlzIGF0IHRoZSBlbmQgYW5kIHRpbWVTY2FsZSBpcyBwb3NpdGl2ZSwgb3IgaWYgdGhlIHBsYXloZWFkIGlzIGF0IDAgYW5kIHRoZSB0aW1lU2NhbGUgaXMgbmVnYXRpdmUuXHJcblxyXG4gICAgICAgIGlmICghc3VwcHJlc3NFdmVudHMgJiYgIShpc05lZ2F0aXZlICYmICFwcmV2VGltZSkgJiYgKHRUaW1lIHx8IHByZXZUaW1lIHx8IGlzWW95bykpIHtcclxuICAgICAgICAgIC8vIGlmIHByZXZUaW1lIGFuZCB0VGltZSBhcmUgemVybywgd2Ugc2hvdWxkbid0IGZpcmUgdGhlIG9uUmV2ZXJzZUNvbXBsZXRlLiBUaGlzIGNvdWxkIGhhcHBlbiBpZiB5b3UgZ3NhcC50byguLi4ge3BhdXNlZDp0cnVlfSkucGxheSgpO1xyXG4gICAgICAgICAgX2NhbGxiYWNrKHRoaXMsIHRUaW1lID09PSB0RHVyID8gXCJvbkNvbXBsZXRlXCIgOiBcIm9uUmV2ZXJzZUNvbXBsZXRlXCIsIHRydWUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3Byb20gJiYgISh0VGltZSA8IHREdXIgJiYgdGhpcy50aW1lU2NhbGUoKSA+IDApICYmIHRoaXMuX3Byb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBfcHJvdG8zLnRhcmdldHMgPSBmdW5jdGlvbiB0YXJnZXRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldHM7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMy5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZShzb2Z0KSB7XHJcbiAgICAvLyBcInNvZnRcIiBnaXZlcyB1cyBhIHdheSB0byBjbGVhciBvdXQgZXZlcnl0aGluZyBFWENFUFQgdGhlIHJlY29yZGVkIHByZS1cImZyb21cIiBwb3J0aW9uIG9mIGZyb20oKSB0d2VlbnMuIE90aGVyd2lzZSwgZm9yIGV4YW1wbGUsIGlmIHlvdSB0d2Vlbi5wcm9ncmVzcygxKS5yZW5kZXIoMCwgdHJ1ZSB0cnVlKS5pbnZhbGlkYXRlKCksIHRoZSBcImZyb21cIiB2YWx1ZXMgd291bGQgcGVyc2lzdCBhbmQgdGhlbiBvbiB0aGUgbmV4dCByZW5kZXIsIHRoZSBmcm9tKCkgdHdlZW5zIHdvdWxkIGluaXRpYWxpemUgYW5kIHRoZSBjdXJyZW50IHZhbHVlIHdvdWxkIG1hdGNoIHRoZSBcImZyb21cIiB2YWx1ZXMsIHRodXMgYW5pbWF0ZSBmcm9tIHRoZSBzYW1lIHZhbHVlIHRvIHRoZSBzYW1lIHZhbHVlIChubyBhbmltYXRpb24pLiBXZSB0YXAgaW50byB0aGlzIGluIFNjcm9sbFRyaWdnZXIncyByZWZyZXNoKCkgd2hlcmUgd2UgbXVzdCBwdXNoIGEgdHdlZW4gdG8gY29tcGxldGlvbiBhbmQgdGhlbiBiYWNrIGFnYWluIGJ1dCBob25vciBpdHMgaW5pdCBzdGF0ZSBpbiBjYXNlIHRoZSB0d2VlbiBpcyBkZXBlbmRlbnQgb24gYW5vdGhlciB0d2VlbiBmdXJ0aGVyIHVwIG9uIHRoZSBwYWdlLlxyXG4gICAgKCFzb2Z0IHx8ICF0aGlzLnZhcnMucnVuQmFja3dhcmRzKSAmJiAodGhpcy5fc3RhcnRBdCA9IDApO1xyXG4gICAgdGhpcy5fcHQgPSB0aGlzLl9vcCA9IHRoaXMuX29uVXBkYXRlID0gdGhpcy5fbGF6eSA9IHRoaXMucmF0aW8gPSAwO1xyXG4gICAgdGhpcy5fcHRMb29rdXAgPSBbXTtcclxuICAgIHRoaXMudGltZWxpbmUgJiYgdGhpcy50aW1lbGluZS5pbnZhbGlkYXRlKHNvZnQpO1xyXG4gICAgcmV0dXJuIF9BbmltYXRpb24yLnByb3RvdHlwZS5pbnZhbGlkYXRlLmNhbGwodGhpcywgc29mdCk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMy5yZXNldFRvID0gZnVuY3Rpb24gcmVzZXRUbyhwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUsIHNraXBSZWN1cnNpb24pIHtcclxuICAgIF90aWNrZXJBY3RpdmUgfHwgX3RpY2tlci53YWtlKCk7XHJcbiAgICB0aGlzLl90cyB8fCB0aGlzLnBsYXkoKTtcclxuICAgIHZhciB0aW1lID0gTWF0aC5taW4odGhpcy5fZHVyLCAodGhpcy5fZHAuX3RpbWUgLSB0aGlzLl9zdGFydCkgKiB0aGlzLl90cyksXHJcbiAgICAgICAgcmF0aW87XHJcbiAgICB0aGlzLl9pbml0dGVkIHx8IF9pbml0VHdlZW4odGhpcywgdGltZSk7XHJcbiAgICByYXRpbyA9IHRoaXMuX2Vhc2UodGltZSAvIHRoaXMuX2R1cik7IC8vIGRvbid0IGp1c3QgZ2V0IHR3ZWVuLnJhdGlvIGJlY2F1c2UgaXQgbWF5IG5vdCBoYXZlIHJlbmRlcmVkIHlldC5cclxuICAgIC8vIHBvc3NpYmxlIGZ1dHVyZSBhZGRpdGlvbiB0byBhbGxvdyBhbiBvYmplY3Qgd2l0aCBtdWx0aXBsZSB2YWx1ZXMgdG8gdXBkYXRlLCBsaWtlIHR3ZWVuLnJlc2V0VG8oe3g6IDEwMCwgeTogMjAwfSk7IEF0IHRoaXMgcG9pbnQsIGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgYWRkZWQga2IgZ2l2ZW4gdGhlIGZhY3QgdGhhdCBtb3N0IHVzZXJzIHdpbGwgbGlrZWx5IG9wdCBmb3IgdGhlIGNvbnZlbmllbnQgZ3NhcC5xdWlja1RvKCkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggdGhpcyBtZXRob2QuXHJcbiAgICAvLyBpZiAoX2lzT2JqZWN0KHByb3BlcnR5KSkgeyAvLyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cclxuICAgIC8vIFx0Zm9yIChwIGluIHByb3BlcnR5KSB7XHJcbiAgICAvLyBcdFx0aWYgKF91cGRhdGVQcm9wVHdlZW5zKHRoaXMsIHAsIHByb3BlcnR5W3BdLCB2YWx1ZSA/IHZhbHVlW3BdIDogbnVsbCwgc3RhcnQsIHJhdGlvLCB0aW1lKSkge1xyXG4gICAgLy8gXHRcdFx0cmV0dXJuIHRoaXMucmVzZXRUbyhwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUpOyAvLyBpZiBhIFByb3BUd2VlbiB3YXNuJ3QgZm91bmQgZm9yIHRoZSBwcm9wZXJ0eSwgaXQnbGwgZ2V0IGZvcmNlZCB3aXRoIGEgcmUtaW5pdGlhbGl6YXRpb24gc28gd2UgbmVlZCB0byBqdW1wIG91dCBhbmQgc3RhcnQgb3ZlciBhZ2Fpbi5cclxuICAgIC8vIFx0XHR9XHJcbiAgICAvLyBcdH1cclxuICAgIC8vIH0gZWxzZSB7XHJcblxyXG4gICAgaWYgKF91cGRhdGVQcm9wVHdlZW5zKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSwgcmF0aW8sIHRpbWUsIHNraXBSZWN1cnNpb24pKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VG8ocHJvcGVydHksIHZhbHVlLCBzdGFydCwgc3RhcnRJc1JlbGF0aXZlLCAxKTsgLy8gaWYgYSBQcm9wVHdlZW4gd2Fzbid0IGZvdW5kIGZvciB0aGUgcHJvcGVydHksIGl0J2xsIGdldCBmb3JjZWQgd2l0aCBhIHJlLWluaXRpYWxpemF0aW9uIHNvIHdlIG5lZWQgdG8ganVtcCBvdXQgYW5kIHN0YXJ0IG92ZXIgYWdhaW4uXHJcbiAgICB9IC8vfVxyXG5cclxuXHJcbiAgICBfYWxpZ25QbGF5aGVhZCh0aGlzLCAwKTtcclxuXHJcbiAgICB0aGlzLnBhcmVudCB8fCBfYWRkTGlua2VkTGlzdEl0ZW0odGhpcy5fZHAsIHRoaXMsIFwiX2ZpcnN0XCIsIFwiX2xhc3RcIiwgdGhpcy5fZHAuX3NvcnQgPyBcIl9zdGFydFwiIDogMCk7XHJcbiAgICByZXR1cm4gdGhpcy5yZW5kZXIoMCk7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvMy5raWxsID0gZnVuY3Rpb24ga2lsbCh0YXJnZXRzLCB2YXJzKSB7XHJcbiAgICBpZiAodmFycyA9PT0gdm9pZCAwKSB7XHJcbiAgICAgIHZhcnMgPSBcImFsbFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGFyZ2V0cyAmJiAoIXZhcnMgfHwgdmFycyA9PT0gXCJhbGxcIikpIHtcclxuICAgICAgdGhpcy5fbGF6eSA9IHRoaXMuX3B0ID0gMDtcclxuICAgICAgdGhpcy5wYXJlbnQgPyBfaW50ZXJydXB0KHRoaXMpIDogdGhpcy5zY3JvbGxUcmlnZ2VyICYmIHRoaXMuc2Nyb2xsVHJpZ2dlci5raWxsKCEhX3JldmVydGluZyk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgIHZhciB0RHVyID0gdGhpcy50aW1lbGluZS50b3RhbER1cmF0aW9uKCk7XHJcbiAgICAgIHRoaXMudGltZWxpbmUua2lsbFR3ZWVuc09mKHRhcmdldHMsIHZhcnMsIF9vdmVyd3JpdGluZ1R3ZWVuICYmIF9vdmVyd3JpdGluZ1R3ZWVuLnZhcnMub3ZlcndyaXRlICE9PSB0cnVlKS5fZmlyc3QgfHwgX2ludGVycnVwdCh0aGlzKTsgLy8gaWYgbm90aGluZyBpcyBsZWZ0IHR3ZWVuaW5nLCBpbnRlcnJ1cHQuXHJcblxyXG4gICAgICB0aGlzLnBhcmVudCAmJiB0RHVyICE9PSB0aGlzLnRpbWVsaW5lLnRvdGFsRHVyYXRpb24oKSAmJiBfc2V0RHVyYXRpb24odGhpcywgdGhpcy5fZHVyICogdGhpcy50aW1lbGluZS5fdER1ciAvIHREdXIsIDAsIDEpOyAvLyBpZiBhIG5lc3RlZCB0d2VlbiBpcyBraWxsZWQgdGhhdCBjaGFuZ2VzIHRoZSBkdXJhdGlvbiwgaXQgc2hvdWxkIGFmZmVjdCB0aGlzIHR3ZWVuJ3MgZHVyYXRpb24uIFdlIG11c3QgdXNlIHRoZSByYXRpbywgdGhvdWdoLCBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgaW50ZXJuYWwgdGltZWxpbmUgaXMgc3RyZXRjaGVkIGxpa2UgZm9yIGtleWZyYW1lcyB3aGVyZSB0aGV5IGRvbid0IGFsbCBhZGQgdXAgdG8gd2hhdGV2ZXIgdGhlIHBhcmVudCB0d2VlbidzIGR1cmF0aW9uIHdhcyBzZXQgdG8uXHJcblxyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcGFyc2VkVGFyZ2V0cyA9IHRoaXMuX3RhcmdldHMsXHJcbiAgICAgICAga2lsbGluZ1RhcmdldHMgPSB0YXJnZXRzID8gdG9BcnJheSh0YXJnZXRzKSA6IHBhcnNlZFRhcmdldHMsXHJcbiAgICAgICAgcHJvcFR3ZWVuTG9va3VwID0gdGhpcy5fcHRMb29rdXAsXHJcbiAgICAgICAgZmlyc3RQVCA9IHRoaXMuX3B0LFxyXG4gICAgICAgIG92ZXJ3cml0dGVuUHJvcHMsXHJcbiAgICAgICAgY3VyTG9va3VwLFxyXG4gICAgICAgIGN1ck92ZXJ3cml0ZVByb3BzLFxyXG4gICAgICAgIHByb3BzLFxyXG4gICAgICAgIHAsXHJcbiAgICAgICAgcHQsXHJcbiAgICAgICAgaTtcclxuXHJcbiAgICBpZiAoKCF2YXJzIHx8IHZhcnMgPT09IFwiYWxsXCIpICYmIF9hcnJheXNNYXRjaChwYXJzZWRUYXJnZXRzLCBraWxsaW5nVGFyZ2V0cykpIHtcclxuICAgICAgdmFycyA9PT0gXCJhbGxcIiAmJiAodGhpcy5fcHQgPSAwKTtcclxuICAgICAgcmV0dXJuIF9pbnRlcnJ1cHQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcndyaXR0ZW5Qcm9wcyA9IHRoaXMuX29wID0gdGhpcy5fb3AgfHwgW107XHJcblxyXG4gICAgaWYgKHZhcnMgIT09IFwiYWxsXCIpIHtcclxuICAgICAgLy9zbyBwZW9wbGUgY2FuIHBhc3MgaW4gYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lc1xyXG4gICAgICBpZiAoX2lzU3RyaW5nKHZhcnMpKSB7XHJcbiAgICAgICAgcCA9IHt9O1xyXG5cclxuICAgICAgICBfZm9yRWFjaE5hbWUodmFycywgZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiBwW25hbWVdID0gMTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFycyA9IHA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhcnMgPSBfYWRkQWxpYXNlc1RvVmFycyhwYXJzZWRUYXJnZXRzLCB2YXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBpID0gcGFyc2VkVGFyZ2V0cy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBpZiAofmtpbGxpbmdUYXJnZXRzLmluZGV4T2YocGFyc2VkVGFyZ2V0c1tpXSkpIHtcclxuICAgICAgICBjdXJMb29rdXAgPSBwcm9wVHdlZW5Mb29rdXBbaV07XHJcblxyXG4gICAgICAgIGlmICh2YXJzID09PSBcImFsbFwiKSB7XHJcbiAgICAgICAgICBvdmVyd3JpdHRlblByb3BzW2ldID0gdmFycztcclxuICAgICAgICAgIHByb3BzID0gY3VyTG9va3VwO1xyXG4gICAgICAgICAgY3VyT3ZlcndyaXRlUHJvcHMgPSB7fTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3VyT3ZlcndyaXRlUHJvcHMgPSBvdmVyd3JpdHRlblByb3BzW2ldID0gb3ZlcndyaXR0ZW5Qcm9wc1tpXSB8fCB7fTtcclxuICAgICAgICAgIHByb3BzID0gdmFycztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAocCBpbiBwcm9wcykge1xyXG4gICAgICAgICAgcHQgPSBjdXJMb29rdXAgJiYgY3VyTG9va3VwW3BdO1xyXG5cclxuICAgICAgICAgIGlmIChwdCkge1xyXG4gICAgICAgICAgICBpZiAoIShcImtpbGxcIiBpbiBwdC5kKSB8fCBwdC5kLmtpbGwocCkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0odGhpcywgcHQsIFwiX3B0XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWxldGUgY3VyTG9va3VwW3BdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjdXJPdmVyd3JpdGVQcm9wcyAhPT0gXCJhbGxcIikge1xyXG4gICAgICAgICAgICBjdXJPdmVyd3JpdGVQcm9wc1twXSA9IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faW5pdHRlZCAmJiAhdGhpcy5fcHQgJiYgZmlyc3RQVCAmJiBfaW50ZXJydXB0KHRoaXMpOyAvL2lmIGFsbCB0d2VlbmluZyBwcm9wZXJ0aWVzIGFyZSBraWxsZWQsIGtpbGwgdGhlIHR3ZWVuLiBXaXRob3V0IHRoaXMgbGluZSwgaWYgdGhlcmUncyBhIHR3ZWVuIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyBhbmQgdGhlbiB5b3Uga2lsbFR3ZWVuc09mKCkgZWFjaCB0YXJnZXQgaW5kaXZpZHVhbGx5LCB0aGUgdHdlZW4gd291bGQgdGVjaG5pY2FsbHkgc3RpbGwgcmVtYWluIGFjdGl2ZSBhbmQgZmlyZSBpdHMgb25Db21wbGV0ZSBldmVuIHRob3VnaCB0aGVyZSBhcmVuJ3QgYW55IG1vcmUgcHJvcGVydGllcyB0d2VlbmluZy5cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBUd2Vlbi50byA9IGZ1bmN0aW9uIHRvKHRhcmdldHMsIHZhcnMpIHtcclxuICAgIHJldHVybiBuZXcgVHdlZW4odGFyZ2V0cywgdmFycywgYXJndW1lbnRzWzJdKTtcclxuICB9O1xyXG5cclxuICBUd2Vlbi5mcm9tID0gZnVuY3Rpb24gZnJvbSh0YXJnZXRzLCB2YXJzKSB7XHJcbiAgICByZXR1cm4gX2NyZWF0ZVR3ZWVuVHlwZSgxLCBhcmd1bWVudHMpO1xyXG4gIH07XHJcblxyXG4gIFR3ZWVuLmRlbGF5ZWRDYWxsID0gZnVuY3Rpb24gZGVsYXllZENhbGwoZGVsYXksIGNhbGxiYWNrLCBwYXJhbXMsIHNjb3BlKSB7XHJcbiAgICByZXR1cm4gbmV3IFR3ZWVuKGNhbGxiYWNrLCAwLCB7XHJcbiAgICAgIGltbWVkaWF0ZVJlbmRlcjogZmFsc2UsXHJcbiAgICAgIGxhenk6IGZhbHNlLFxyXG4gICAgICBvdmVyd3JpdGU6IGZhbHNlLFxyXG4gICAgICBkZWxheTogZGVsYXksXHJcbiAgICAgIG9uQ29tcGxldGU6IGNhbGxiYWNrLFxyXG4gICAgICBvblJldmVyc2VDb21wbGV0ZTogY2FsbGJhY2ssXHJcbiAgICAgIG9uQ29tcGxldGVQYXJhbXM6IHBhcmFtcyxcclxuICAgICAgb25SZXZlcnNlQ29tcGxldGVQYXJhbXM6IHBhcmFtcyxcclxuICAgICAgY2FsbGJhY2tTY29wZTogc2NvcGVcclxuICAgIH0pOyAvLyB3ZSBtdXN0IHVzZSBvblJldmVyc2VDb21wbGV0ZSB0b28gZm9yIHRoaW5ncyBsaWtlIHRpbWVsaW5lLmFkZCgoKSA9PiB7Li4ufSkgd2hpY2ggc2hvdWxkIGJlIHRyaWdnZXJlZCBpbiBCT1RIIGRpcmVjdGlvbnMgKGZvcndhcmQgYW5kIHJldmVyc2UpXHJcbiAgfTtcclxuXHJcbiAgVHdlZW4uZnJvbVRvID0gZnVuY3Rpb24gZnJvbVRvKHRhcmdldHMsIGZyb21WYXJzLCB0b1ZhcnMpIHtcclxuICAgIHJldHVybiBfY3JlYXRlVHdlZW5UeXBlKDIsIGFyZ3VtZW50cyk7XHJcbiAgfTtcclxuXHJcbiAgVHdlZW4uc2V0ID0gZnVuY3Rpb24gc2V0KHRhcmdldHMsIHZhcnMpIHtcclxuICAgIHZhcnMuZHVyYXRpb24gPSAwO1xyXG4gICAgdmFycy5yZXBlYXREZWxheSB8fCAodmFycy5yZXBlYXQgPSAwKTtcclxuICAgIHJldHVybiBuZXcgVHdlZW4odGFyZ2V0cywgdmFycyk7XHJcbiAgfTtcclxuXHJcbiAgVHdlZW4ua2lsbFR3ZWVuc09mID0gZnVuY3Rpb24ga2lsbFR3ZWVuc09mKHRhcmdldHMsIHByb3BzLCBvbmx5QWN0aXZlKSB7XHJcbiAgICByZXR1cm4gX2dsb2JhbFRpbWVsaW5lLmtpbGxUd2VlbnNPZih0YXJnZXRzLCBwcm9wcywgb25seUFjdGl2ZSk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIFR3ZWVuO1xyXG59KEFuaW1hdGlvbik7XHJcblxyXG5fc2V0RGVmYXVsdHMoVHdlZW4ucHJvdG90eXBlLCB7XHJcbiAgX3RhcmdldHM6IFtdLFxyXG4gIF9sYXp5OiAwLFxyXG4gIF9zdGFydEF0OiAwLFxyXG4gIF9vcDogMCxcclxuICBfb25Jbml0OiAwXHJcbn0pOyAvL2FkZCB0aGUgcGVydGluZW50IHRpbWVsaW5lIG1ldGhvZHMgdG8gVHdlZW4gaW5zdGFuY2VzIHNvIHRoYXQgdXNlcnMgY2FuIGNoYWluIGNvbnZlbmllbnRseSBhbmQgY3JlYXRlIGEgdGltZWxpbmUgYXV0b21hdGljYWxseS4gKHJlbW92ZWQgZHVlIHRvIGNvbmNlcm5zIHRoYXQgaXQnZCB1bHRpbWF0ZWx5IGFkZCB0byBtb3JlIGNvbmZ1c2lvbiBlc3BlY2lhbGx5IGZvciBiZWdpbm5lcnMpXHJcbi8vIF9mb3JFYWNoTmFtZShcInRvLGZyb20sZnJvbVRvLHNldCxjYWxsLGFkZCxhZGRMYWJlbCxhZGRQYXVzZVwiLCBuYW1lID0+IHtcclxuLy8gXHRUd2Vlbi5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcclxuLy8gXHRcdGxldCB0bCA9IG5ldyBUaW1lbGluZSgpO1xyXG4vLyBcdFx0cmV0dXJuIF9hZGRUb1RpbWVsaW5lKHRsLCB0aGlzKVtuYW1lXS5hcHBseSh0bCwgdG9BcnJheShhcmd1bWVudHMpKTtcclxuLy8gXHR9XHJcbi8vIH0pO1xyXG4vL2ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBMZXZlcmFnZSB0aGUgdGltZWxpbmUgY2FsbHMuXHJcblxyXG5cclxuX2ZvckVhY2hOYW1lKFwic3RhZ2dlclRvLHN0YWdnZXJGcm9tLHN0YWdnZXJGcm9tVG9cIiwgZnVuY3Rpb24gKG5hbWUpIHtcclxuICBUd2VlbltuYW1lXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0bCA9IG5ldyBUaW1lbGluZSgpLFxyXG4gICAgICAgIHBhcmFtcyA9IF9zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XHJcblxyXG4gICAgcGFyYW1zLnNwbGljZShuYW1lID09PSBcInN0YWdnZXJGcm9tVG9cIiA/IDUgOiA0LCAwLCAwKTtcclxuICAgIHJldHVybiB0bFtuYW1lXS5hcHBseSh0bCwgcGFyYW1zKTtcclxuICB9O1xyXG59KTtcclxuLypcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogUFJPUFRXRUVOXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAqL1xyXG5cclxuXHJcbnZhciBfc2V0dGVyUGxhaW4gPSBmdW5jdGlvbiBfc2V0dGVyUGxhaW4odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcclxuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XSA9IHZhbHVlO1xyXG59LFxyXG4gICAgX3NldHRlckZ1bmMgPSBmdW5jdGlvbiBfc2V0dGVyRnVuYyh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xyXG4gIHJldHVybiB0YXJnZXRbcHJvcGVydHldKHZhbHVlKTtcclxufSxcclxuICAgIF9zZXR0ZXJGdW5jV2l0aFBhcmFtID0gZnVuY3Rpb24gX3NldHRlckZ1bmNXaXRoUGFyYW0odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIGRhdGEpIHtcclxuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XShkYXRhLmZwLCB2YWx1ZSk7XHJcbn0sXHJcbiAgICBfc2V0dGVyQXR0cmlidXRlID0gZnVuY3Rpb24gX3NldHRlckF0dHJpYnV0ZSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xyXG4gIHJldHVybiB0YXJnZXQuc2V0QXR0cmlidXRlKHByb3BlcnR5LCB2YWx1ZSk7XHJcbn0sXHJcbiAgICBfZ2V0U2V0dGVyID0gZnVuY3Rpb24gX2dldFNldHRlcih0YXJnZXQsIHByb3BlcnR5KSB7XHJcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHRhcmdldFtwcm9wZXJ0eV0pID8gX3NldHRlckZ1bmMgOiBfaXNVbmRlZmluZWQodGFyZ2V0W3Byb3BlcnR5XSkgJiYgdGFyZ2V0LnNldEF0dHJpYnV0ZSA/IF9zZXR0ZXJBdHRyaWJ1dGUgOiBfc2V0dGVyUGxhaW47XHJcbn0sXHJcbiAgICBfcmVuZGVyUGxhaW4gPSBmdW5jdGlvbiBfcmVuZGVyUGxhaW4ocmF0aW8sIGRhdGEpIHtcclxuICByZXR1cm4gZGF0YS5zZXQoZGF0YS50LCBkYXRhLnAsIE1hdGgucm91bmQoKGRhdGEucyArIGRhdGEuYyAqIHJhdGlvKSAqIDEwMDAwMDApIC8gMTAwMDAwMCwgZGF0YSk7XHJcbn0sXHJcbiAgICBfcmVuZGVyQm9vbGVhbiA9IGZ1bmN0aW9uIF9yZW5kZXJCb29sZWFuKHJhdGlvLCBkYXRhKSB7XHJcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCAhIShkYXRhLnMgKyBkYXRhLmMgKiByYXRpbyksIGRhdGEpO1xyXG59LFxyXG4gICAgX3JlbmRlckNvbXBsZXhTdHJpbmcgPSBmdW5jdGlvbiBfcmVuZGVyQ29tcGxleFN0cmluZyhyYXRpbywgZGF0YSkge1xyXG4gIHZhciBwdCA9IGRhdGEuX3B0LFxyXG4gICAgICBzID0gXCJcIjtcclxuXHJcbiAgaWYgKCFyYXRpbyAmJiBkYXRhLmIpIHtcclxuICAgIC8vYiA9IGJlZ2lubmluZyBzdHJpbmdcclxuICAgIHMgPSBkYXRhLmI7XHJcbiAgfSBlbHNlIGlmIChyYXRpbyA9PT0gMSAmJiBkYXRhLmUpIHtcclxuICAgIC8vZSA9IGVuZGluZyBzdHJpbmdcclxuICAgIHMgPSBkYXRhLmU7XHJcbiAgfSBlbHNlIHtcclxuICAgIHdoaWxlIChwdCkge1xyXG4gICAgICBzID0gcHQucCArIChwdC5tID8gcHQubShwdC5zICsgcHQuYyAqIHJhdGlvKSA6IE1hdGgucm91bmQoKHB0LnMgKyBwdC5jICogcmF0aW8pICogMTAwMDApIC8gMTAwMDApICsgczsgLy93ZSB1c2UgdGhlIFwicFwiIHByb3BlcnR5IGZvciB0aGUgdGV4dCBpbmJldHdlZW4gKGxpa2UgYSBzdWZmaXgpLiBBbmQgaW4gdGhlIGNvbnRleHQgb2YgYSBjb21wbGV4IHN0cmluZywgdGhlIG1vZGlmaWVyIChtKSBpcyB0eXBpY2FsbHkganVzdCBNYXRoLnJvdW5kKCksIGxpa2UgZm9yIFJHQiBjb2xvcnMuXHJcblxyXG4gICAgICBwdCA9IHB0Ll9uZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHMgKz0gZGF0YS5jOyAvL3dlIHVzZSB0aGUgXCJjXCIgb2YgdGhlIFByb3BUd2VlbiB0byBzdG9yZSB0aGUgZmluYWwgY2h1bmsgb2Ygbm9uLW51bWVyaWMgdGV4dC5cclxuICB9XHJcblxyXG4gIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCBzLCBkYXRhKTtcclxufSxcclxuICAgIF9yZW5kZXJQcm9wVHdlZW5zID0gZnVuY3Rpb24gX3JlbmRlclByb3BUd2VlbnMocmF0aW8sIGRhdGEpIHtcclxuICB2YXIgcHQgPSBkYXRhLl9wdDtcclxuXHJcbiAgd2hpbGUgKHB0KSB7XHJcbiAgICBwdC5yKHJhdGlvLCBwdC5kKTtcclxuICAgIHB0ID0gcHQuX25leHQ7XHJcbiAgfVxyXG59LFxyXG4gICAgX2FkZFBsdWdpbk1vZGlmaWVyID0gZnVuY3Rpb24gX2FkZFBsdWdpbk1vZGlmaWVyKG1vZGlmaWVyLCB0d2VlbiwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xyXG4gIHZhciBwdCA9IHRoaXMuX3B0LFxyXG4gICAgICBuZXh0O1xyXG5cclxuICB3aGlsZSAocHQpIHtcclxuICAgIG5leHQgPSBwdC5fbmV4dDtcclxuICAgIHB0LnAgPT09IHByb3BlcnR5ICYmIHB0Lm1vZGlmaWVyKG1vZGlmaWVyLCB0d2VlbiwgdGFyZ2V0KTtcclxuICAgIHB0ID0gbmV4dDtcclxuICB9XHJcbn0sXHJcbiAgICBfa2lsbFByb3BUd2VlbnNPZiA9IGZ1bmN0aW9uIF9raWxsUHJvcFR3ZWVuc09mKHByb3BlcnR5KSB7XHJcbiAgdmFyIHB0ID0gdGhpcy5fcHQsXHJcbiAgICAgIGhhc05vbkRlcGVuZGVudFJlbWFpbmluZyxcclxuICAgICAgbmV4dDtcclxuXHJcbiAgd2hpbGUgKHB0KSB7XHJcbiAgICBuZXh0ID0gcHQuX25leHQ7XHJcblxyXG4gICAgaWYgKHB0LnAgPT09IHByb3BlcnR5ICYmICFwdC5vcCB8fCBwdC5vcCA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgX3JlbW92ZUxpbmtlZExpc3RJdGVtKHRoaXMsIHB0LCBcIl9wdFwiKTtcclxuICAgIH0gZWxzZSBpZiAoIXB0LmRlcCkge1xyXG4gICAgICBoYXNOb25EZXBlbmRlbnRSZW1haW5pbmcgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHB0ID0gbmV4dDtcclxuICB9XHJcblxyXG4gIHJldHVybiAhaGFzTm9uRGVwZW5kZW50UmVtYWluaW5nO1xyXG59LFxyXG4gICAgX3NldHRlcldpdGhNb2RpZmllciA9IGZ1bmN0aW9uIF9zZXR0ZXJXaXRoTW9kaWZpZXIodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIGRhdGEpIHtcclxuICBkYXRhLm1TZXQodGFyZ2V0LCBwcm9wZXJ0eSwgZGF0YS5tLmNhbGwoZGF0YS50d2VlbiwgdmFsdWUsIGRhdGEubXQpLCBkYXRhKTtcclxufSxcclxuICAgIF9zb3J0UHJvcFR3ZWVuc0J5UHJpb3JpdHkgPSBmdW5jdGlvbiBfc29ydFByb3BUd2VlbnNCeVByaW9yaXR5KHBhcmVudCkge1xyXG4gIHZhciBwdCA9IHBhcmVudC5fcHQsXHJcbiAgICAgIG5leHQsXHJcbiAgICAgIHB0MixcclxuICAgICAgZmlyc3QsXHJcbiAgICAgIGxhc3Q7IC8vc29ydHMgdGhlIFByb3BUd2VlbiBsaW5rZWQgbGlzdCBpbiBvcmRlciBvZiBwcmlvcml0eSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBuZWVkIHRvIGRvIHRoZWlyIHdvcmsgYWZ0ZXIgQUxMIG9mIHRoZSBQcm9wVHdlZW5zIHdlcmUgY3JlYXRlZCAobGlrZSBSb3VuZFByb3BzUGx1Z2luIGFuZCBNb2RpZmllcnNQbHVnaW4pXHJcblxyXG4gIHdoaWxlIChwdCkge1xyXG4gICAgbmV4dCA9IHB0Ll9uZXh0O1xyXG4gICAgcHQyID0gZmlyc3Q7XHJcblxyXG4gICAgd2hpbGUgKHB0MiAmJiBwdDIucHIgPiBwdC5wcikge1xyXG4gICAgICBwdDIgPSBwdDIuX25leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHB0Ll9wcmV2ID0gcHQyID8gcHQyLl9wcmV2IDogbGFzdCkge1xyXG4gICAgICBwdC5fcHJldi5fbmV4dCA9IHB0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmlyc3QgPSBwdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocHQuX25leHQgPSBwdDIpIHtcclxuICAgICAgcHQyLl9wcmV2ID0gcHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXN0ID0gcHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHQgPSBuZXh0O1xyXG4gIH1cclxuXHJcbiAgcGFyZW50Ll9wdCA9IGZpcnN0O1xyXG59OyAvL1Byb3BUd2VlbiBrZXk6IHQgPSB0YXJnZXQsIHAgPSBwcm9wLCByID0gcmVuZGVyZXIsIGQgPSBkYXRhLCBzID0gc3RhcnQsIGMgPSBjaGFuZ2UsIG9wID0gb3ZlcndyaXRlUHJvcGVydHkgKE9OTFkgcG9wdWxhdGVkIHdoZW4gaXQncyBkaWZmZXJlbnQgdGhhbiBwKSwgcHIgPSBwcmlvcml0eSwgX25leHQvX3ByZXYgZm9yIHRoZSBsaW5rZWQgbGlzdCBzaWJsaW5ncywgc2V0ID0gc2V0dGVyLCBtID0gbW9kaWZpZXIsIG1TZXQgPSBtb2RpZmllclNldHRlciAodGhlIG9yaWdpbmFsIHNldHRlciwgYmVmb3JlIGEgbW9kaWZpZXIgd2FzIGFkZGVkKVxyXG5cclxuXHJcbmV4cG9ydCB2YXIgUHJvcFR3ZWVuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcclxuICBmdW5jdGlvbiBQcm9wVHdlZW4obmV4dCwgdGFyZ2V0LCBwcm9wLCBzdGFydCwgY2hhbmdlLCByZW5kZXJlciwgZGF0YSwgc2V0dGVyLCBwcmlvcml0eSkge1xyXG4gICAgdGhpcy50ID0gdGFyZ2V0O1xyXG4gICAgdGhpcy5zID0gc3RhcnQ7XHJcbiAgICB0aGlzLmMgPSBjaGFuZ2U7XHJcbiAgICB0aGlzLnAgPSBwcm9wO1xyXG4gICAgdGhpcy5yID0gcmVuZGVyZXIgfHwgX3JlbmRlclBsYWluO1xyXG4gICAgdGhpcy5kID0gZGF0YSB8fCB0aGlzO1xyXG4gICAgdGhpcy5zZXQgPSBzZXR0ZXIgfHwgX3NldHRlclBsYWluO1xyXG4gICAgdGhpcy5wciA9IHByaW9yaXR5IHx8IDA7XHJcbiAgICB0aGlzLl9uZXh0ID0gbmV4dDtcclxuXHJcbiAgICBpZiAobmV4dCkge1xyXG4gICAgICBuZXh0Ll9wcmV2ID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBfcHJvdG80ID0gUHJvcFR3ZWVuLnByb3RvdHlwZTtcclxuXHJcbiAgX3Byb3RvNC5tb2RpZmllciA9IGZ1bmN0aW9uIG1vZGlmaWVyKGZ1bmMsIHR3ZWVuLCB0YXJnZXQpIHtcclxuICAgIHRoaXMubVNldCA9IHRoaXMubVNldCB8fCB0aGlzLnNldDsgLy9pbiBjYXNlIGl0IHdhcyBhbHJlYWR5IHNldCAoYSBQcm9wVHdlZW4gY2FuIG9ubHkgaGF2ZSBvbmUgbW9kaWZpZXIpXHJcblxyXG4gICAgdGhpcy5zZXQgPSBfc2V0dGVyV2l0aE1vZGlmaWVyO1xyXG4gICAgdGhpcy5tID0gZnVuYztcclxuICAgIHRoaXMubXQgPSB0YXJnZXQ7IC8vbW9kaWZpZXIgdGFyZ2V0XHJcblxyXG4gICAgdGhpcy50d2VlbiA9IHR3ZWVuO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBQcm9wVHdlZW47XHJcbn0oKTsgLy9Jbml0aWFsaXphdGlvbiB0YXNrc1xyXG5cclxuX2ZvckVhY2hOYW1lKF9jYWxsYmFja05hbWVzICsgXCJwYXJlbnQsZHVyYXRpb24sZWFzZSxkZWxheSxvdmVyd3JpdGUscnVuQmFja3dhcmRzLHN0YXJ0QXQseW95byxpbW1lZGlhdGVSZW5kZXIscmVwZWF0LHJlcGVhdERlbGF5LGRhdGEscGF1c2VkLHJldmVyc2VkLGxhenksY2FsbGJhY2tTY29wZSxzdHJpbmdGaWx0ZXIsaWQseW95b0Vhc2Usc3RhZ2dlcixpbmhlcml0LHJlcGVhdFJlZnJlc2gsa2V5ZnJhbWVzLGF1dG9SZXZlcnQsc2Nyb2xsVHJpZ2dlclwiLCBmdW5jdGlvbiAobmFtZSkge1xyXG4gIHJldHVybiBfcmVzZXJ2ZWRQcm9wc1tuYW1lXSA9IDE7XHJcbn0pO1xyXG5cclxuX2dsb2JhbHMuVHdlZW5NYXggPSBfZ2xvYmFscy5Ud2VlbkxpdGUgPSBUd2VlbjtcclxuX2dsb2JhbHMuVGltZWxpbmVMaXRlID0gX2dsb2JhbHMuVGltZWxpbmVNYXggPSBUaW1lbGluZTtcclxuX2dsb2JhbFRpbWVsaW5lID0gbmV3IFRpbWVsaW5lKHtcclxuICBzb3J0Q2hpbGRyZW46IGZhbHNlLFxyXG4gIGRlZmF1bHRzOiBfZGVmYXVsdHMsXHJcbiAgYXV0b1JlbW92ZUNoaWxkcmVuOiB0cnVlLFxyXG4gIGlkOiBcInJvb3RcIixcclxuICBzbW9vdGhDaGlsZFRpbWluZzogdHJ1ZVxyXG59KTtcclxuX2NvbmZpZy5zdHJpbmdGaWx0ZXIgPSBfY29sb3JTdHJpbmdGaWx0ZXI7XHJcblxyXG52YXIgX21lZGlhID0gW10sXHJcbiAgICBfbGlzdGVuZXJzID0ge30sXHJcbiAgICBfZW1wdHlBcnJheSA9IFtdLFxyXG4gICAgX2xhc3RNZWRpYVRpbWUgPSAwLFxyXG4gICAgX2NvbnRleHRJRCA9IDAsXHJcbiAgICBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBfZGlzcGF0Y2godHlwZSkge1xyXG4gIHJldHVybiAoX2xpc3RlbmVyc1t0eXBlXSB8fCBfZW1wdHlBcnJheSkubWFwKGZ1bmN0aW9uIChmKSB7XHJcbiAgICByZXR1cm4gZigpO1xyXG4gIH0pO1xyXG59LFxyXG4gICAgX29uTWVkaWFDaGFuZ2UgPSBmdW5jdGlvbiBfb25NZWRpYUNoYW5nZSgpIHtcclxuICB2YXIgdGltZSA9IERhdGUubm93KCksXHJcbiAgICAgIG1hdGNoZXMgPSBbXTtcclxuXHJcbiAgaWYgKHRpbWUgLSBfbGFzdE1lZGlhVGltZSA+IDIpIHtcclxuICAgIF9kaXNwYXRjaChcIm1hdGNoTWVkaWFJbml0XCIpO1xyXG5cclxuICAgIF9tZWRpYS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciBxdWVyaWVzID0gYy5xdWVyaWVzLFxyXG4gICAgICAgICAgY29uZGl0aW9ucyA9IGMuY29uZGl0aW9ucyxcclxuICAgICAgICAgIG1hdGNoLFxyXG4gICAgICAgICAgcCxcclxuICAgICAgICAgIGFueU1hdGNoLFxyXG4gICAgICAgICAgdG9nZ2xlZDtcclxuXHJcbiAgICAgIGZvciAocCBpbiBxdWVyaWVzKSB7XHJcbiAgICAgICAgbWF0Y2ggPSBfd2luLm1hdGNoTWVkaWEocXVlcmllc1twXSkubWF0Y2hlczsgLy8gRmlyZWZveCBkb2Vzbid0IHVwZGF0ZSB0aGUgXCJtYXRjaGVzXCIgcHJvcGVydHkgb2YgdGhlIE1lZGlhUXVlcnlMaXN0IG9iamVjdCBjb3JyZWN0bHkgLSBpdCBvbmx5IGRvZXMgc28gYXMgaXQgY2FsbHMgaXRzIGNoYW5nZSBoYW5kbGVyIC0gc28gd2UgbXVzdCByZS1jcmVhdGUgYSBtZWRpYSBxdWVyeSBoZXJlIHRvIGVuc3VyZSBpdCdzIGFjY3VyYXRlLlxyXG5cclxuICAgICAgICBtYXRjaCAmJiAoYW55TWF0Y2ggPSAxKTtcclxuXHJcbiAgICAgICAgaWYgKG1hdGNoICE9PSBjb25kaXRpb25zW3BdKSB7XHJcbiAgICAgICAgICBjb25kaXRpb25zW3BdID0gbWF0Y2g7XHJcbiAgICAgICAgICB0b2dnbGVkID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b2dnbGVkKSB7XHJcbiAgICAgICAgYy5yZXZlcnQoKTtcclxuICAgICAgICBhbnlNYXRjaCAmJiBtYXRjaGVzLnB1c2goYyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIF9kaXNwYXRjaChcIm1hdGNoTWVkaWFSZXZlcnRcIik7XHJcblxyXG4gICAgbWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHJldHVybiBjLm9uTWF0Y2goYywgZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICByZXR1cm4gYy5hZGQobnVsbCwgZnVuYyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBfbGFzdE1lZGlhVGltZSA9IHRpbWU7XHJcblxyXG4gICAgX2Rpc3BhdGNoKFwibWF0Y2hNZWRpYVwiKTtcclxuICB9XHJcbn07XHJcblxyXG52YXIgQ29udGV4dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XHJcbiAgZnVuY3Rpb24gQ29udGV4dChmdW5jLCBzY29wZSkge1xyXG4gICAgdGhpcy5zZWxlY3RvciA9IHNjb3BlICYmIHNlbGVjdG9yKHNjb3BlKTtcclxuICAgIHRoaXMuZGF0YSA9IFtdO1xyXG4gICAgdGhpcy5fciA9IFtdOyAvLyByZXR1cm5lZC9jbGVhbnVwIGZ1bmN0aW9uc1xyXG5cclxuICAgIHRoaXMuaXNSZXZlcnRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pZCA9IF9jb250ZXh0SUQrKzsgLy8gdG8gd29yayBhcm91bmQgaXNzdWVzIHRoYXQgZnJhbWV3b3JrcyBsaWtlIFZ1ZSBjYXVzZSBieSBtYWtpbmcgdGhpbmdzIGludG8gUHJveGllcyB3aGljaCBtYWtlIGl0IGltcG9zc2libGUgdG8gZG8gc29tZXRoaW5nIGxpa2UgX21lZGlhLmluZGV4T2YodGhpcykgYmVjYXVzZSBcInRoaXNcIiB3b3VsZCBubyBsb25nZXIgcmVmZXIgdG8gdGhlIENvbnRleHQgaW5zdGFuY2UgaXRzZWxmIC0gaXQnZCByZWZlciB0byBhIFByb3h5ISBXZSBuZWVkZWQgYSB3YXkgdG8gaWRlbnRpZnkgdGhlIGNvbnRleHQgdW5pcXVlbHlcclxuXHJcbiAgICBmdW5jICYmIHRoaXMuYWRkKGZ1bmMpO1xyXG4gIH1cclxuXHJcbiAgdmFyIF9wcm90bzUgPSBDb250ZXh0LnByb3RvdHlwZTtcclxuXHJcbiAgX3Byb3RvNS5hZGQgPSBmdW5jdGlvbiBhZGQobmFtZSwgZnVuYywgc2NvcGUpIHtcclxuICAgIC8vIHBvc3NpYmxlIGZ1dHVyZSBhZGRpdGlvbiBpZiB3ZSBuZWVkIHRoZSBhYmlsaXR5IHRvIGFkZCgpIGFuIGFuaW1hdGlvbiB0byBhIGNvbnRleHQgYW5kIGZvciB3aGF0ZXZlciByZWFzb24gY2Fubm90IGNyZWF0ZSB0aGF0IGFuaW1hdGlvbiBpbnNpZGUgb2YgYSBjb250ZXh0LmFkZCgoKSA9PiB7Li4ufSkgZnVuY3Rpb24uXHJcbiAgICAvLyBpZiAobmFtZSAmJiBfaXNGdW5jdGlvbihuYW1lLnJldmVydCkpIHtcclxuICAgIC8vIFx0dGhpcy5kYXRhLnB1c2gobmFtZSk7XHJcbiAgICAvLyBcdHJldHVybiAobmFtZS5fY3R4ID0gdGhpcyk7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoX2lzRnVuY3Rpb24obmFtZSkpIHtcclxuICAgICAgc2NvcGUgPSBmdW5jO1xyXG4gICAgICBmdW5jID0gbmFtZTtcclxuICAgICAgbmFtZSA9IF9pc0Z1bmN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcyxcclxuICAgICAgICBmID0gZnVuY3Rpb24gZigpIHtcclxuICAgICAgdmFyIHByZXYgPSBfY29udGV4dCxcclxuICAgICAgICAgIHByZXZTZWxlY3RvciA9IHNlbGYuc2VsZWN0b3IsXHJcbiAgICAgICAgICByZXN1bHQ7XHJcbiAgICAgIHByZXYgJiYgcHJldiAhPT0gc2VsZiAmJiBwcmV2LmRhdGEucHVzaChzZWxmKTtcclxuICAgICAgc2NvcGUgJiYgKHNlbGYuc2VsZWN0b3IgPSBzZWxlY3RvcihzY29wZSkpO1xyXG4gICAgICBfY29udGV4dCA9IHNlbGY7XHJcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoc2VsZiwgYXJndW1lbnRzKTtcclxuICAgICAgX2lzRnVuY3Rpb24ocmVzdWx0KSAmJiBzZWxmLl9yLnB1c2gocmVzdWx0KTtcclxuICAgICAgX2NvbnRleHQgPSBwcmV2O1xyXG4gICAgICBzZWxmLnNlbGVjdG9yID0gcHJldlNlbGVjdG9yO1xyXG4gICAgICBzZWxmLmlzUmV2ZXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgc2VsZi5sYXN0ID0gZjtcclxuICAgIHJldHVybiBuYW1lID09PSBfaXNGdW5jdGlvbiA/IGYoc2VsZiwgZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgcmV0dXJuIHNlbGYuYWRkKG51bGwsIGZ1bmMpO1xyXG4gICAgfSkgOiBuYW1lID8gc2VsZltuYW1lXSA9IGYgOiBmO1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzUuaWdub3JlID0gZnVuY3Rpb24gaWdub3JlKGZ1bmMpIHtcclxuICAgIHZhciBwcmV2ID0gX2NvbnRleHQ7XHJcbiAgICBfY29udGV4dCA9IG51bGw7XHJcbiAgICBmdW5jKHRoaXMpO1xyXG4gICAgX2NvbnRleHQgPSBwcmV2O1xyXG4gIH07XHJcblxyXG4gIF9wcm90bzUuZ2V0VHdlZW5zID0gZnVuY3Rpb24gZ2V0VHdlZW5zKCkge1xyXG4gICAgdmFyIGEgPSBbXTtcclxuICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgQ29udGV4dCA/IGEucHVzaC5hcHBseShhLCBlLmdldFR3ZWVucygpKSA6IGUgaW5zdGFuY2VvZiBUd2VlbiAmJiAhKGUucGFyZW50ICYmIGUucGFyZW50LmRhdGEgPT09IFwibmVzdGVkXCIpICYmIGEucHVzaChlKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGE7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvNS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xyXG4gICAgdGhpcy5fci5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoID0gMDtcclxuICB9O1xyXG5cclxuICBfcHJvdG81LmtpbGwgPSBmdW5jdGlvbiBraWxsKHJldmVydCwgbWF0Y2hNZWRpYSkge1xyXG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XHJcblxyXG4gICAgaWYgKHJldmVydCkge1xyXG4gICAgICAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0d2VlbnMgPSBfdGhpczQuZ2V0VHdlZW5zKCksXHJcbiAgICAgICAgICAgIGkgPSBfdGhpczQuZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHQ7XHJcblxyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgIC8vIEZsaXAgcGx1Z2luIHR3ZWVucyBhcmUgdmVyeSBkaWZmZXJlbnQgaW4gdGhhdCB0aGV5IHNob3VsZCBhY3R1YWxseSBiZSBwdXNoZWQgdG8gdGhlaXIgZW5kLiBUaGUgcGx1Z2luIHJlcGxhY2VzIHRoZSB0aW1lbGluZSdzIC5yZXZlcnQoKSBtZXRob2QgdG8gZG8gZXhhY3RseSB0aGF0LiBCdXQgd2UgYWxzbyBuZWVkIHRvIHJlbW92ZSBhbnkgb2YgdGhvc2UgbmVzdGVkIHR3ZWVucyBpbnNpZGUgdGhlIGZsaXAgdGltZWxpbmUgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmRpdmlkdWFsbHkgcmV2ZXJ0ZWQuXHJcbiAgICAgICAgICB0ID0gX3RoaXM0LmRhdGFbaV07XHJcblxyXG4gICAgICAgICAgaWYgKHQuZGF0YSA9PT0gXCJpc0ZsaXBcIikge1xyXG4gICAgICAgICAgICB0LnJldmVydCgpO1xyXG4gICAgICAgICAgICB0LmdldENoaWxkcmVuKHRydWUsIHRydWUsIGZhbHNlKS5mb3JFYWNoKGZ1bmN0aW9uICh0d2Vlbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0d2VlbnMuc3BsaWNlKHR3ZWVucy5pbmRleE9mKHR3ZWVuKSwgMSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gLy8gc2F2ZSBhcyBhbiBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gY2FjaGUgdGhlIGdsb2JhbFRpbWUgZm9yIGVhY2ggdHdlZW4gdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgZHVyaW5nIHRoZSBzb3J0XHJcblxyXG5cclxuICAgICAgICB0d2VlbnMubWFwKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBnOiB0Ll9kdXIgfHwgdC5fZGVsYXkgfHwgdC5fc2F0ICYmICF0Ll9zYXQudmFycy5pbW1lZGlhdGVSZW5kZXIgPyB0Lmdsb2JhbFRpbWUoMCkgOiAtSW5maW5pdHksXHJcbiAgICAgICAgICAgIHQ6IHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgcmV0dXJuIGIuZyAtIGEuZyB8fCAtSW5maW5pdHk7XHJcbiAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAobykge1xyXG4gICAgICAgICAgcmV0dXJuIG8udC5yZXZlcnQocmV2ZXJ0KTtcclxuICAgICAgICB9KTsgLy8gbm90ZTogYWxsIG9mIHRoZSBfc3RhcnRBdCB0d2VlbnMgc2hvdWxkIGJlIHJldmVydGVkIGluIHJldmVyc2Ugb3JkZXIgdGhhdCB0aGV5IHdlcmUgY3JlYXRlZCwgYW5kIHRoZXknbGwgYWxsIGhhdmUgdGhlIHNhbWUgZ2xvYmFsVGltZSAoLTEpIHNvIHRoZSBcIiB8fCAtMVwiIGluIHRoZSBzb3J0IGtlZXBzIHRoZSBvcmRlciBwcm9wZXJseS5cclxuXHJcbiAgICAgICAgaSA9IF90aGlzNC5kYXRhLmxlbmd0aDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGxvb3AgYmFja3dhcmRzIHNvIHRoYXQsIGZvciBleGFtcGxlLCBTcGxpdFRleHRzIHRoYXQgd2VyZSBjcmVhdGVkIGxhdGVyIG9uIHRoZSBzYW1lIGVsZW1lbnQgZ2V0IHJldmVydGVkIGZpcnN0XHJcbiAgICAgICAgICB0ID0gX3RoaXM0LmRhdGFbaV07XHJcblxyXG4gICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBUaW1lbGluZSkge1xyXG4gICAgICAgICAgICBpZiAodC5kYXRhICE9PSBcIm5lc3RlZFwiKSB7XHJcbiAgICAgICAgICAgICAgdC5zY3JvbGxUcmlnZ2VyICYmIHQuc2Nyb2xsVHJpZ2dlci5yZXZlcnQoKTtcclxuICAgICAgICAgICAgICB0LmtpbGwoKTsgLy8gZG9uJ3QgcmV2ZXJ0KCkgdGhlIHRpbWVsaW5lIGJlY2F1c2UgdGhhdCdzIGR1cGxpY2F0aW5nIGVmZm9ydHMgc2luY2Ugd2UgYWxyZWFkeSByZXZlcnRlZCBhbGwgdGhlIHR3ZWVuc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAhKHQgaW5zdGFuY2VvZiBUd2VlbikgJiYgdC5yZXZlcnQgJiYgdC5yZXZlcnQocmV2ZXJ0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF90aGlzNC5fci5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XHJcbiAgICAgICAgICByZXR1cm4gZihyZXZlcnQsIF90aGlzNCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF90aGlzNC5pc1JldmVydGVkID0gdHJ1ZTtcclxuICAgICAgfSkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgcmV0dXJuIGUua2lsbCAmJiBlLmtpbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGVhcigpO1xyXG5cclxuICAgIGlmIChtYXRjaE1lZGlhKSB7XHJcbiAgICAgIHZhciBpID0gX21lZGlhLmxlbmd0aDtcclxuXHJcbiAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAvLyBwcmV2aW91c2x5LCB3ZSBjaGVja2VkIF9tZWRpYS5pbmRleE9mKHRoaXMpLCBidXQgc29tZSBmcmFtZXdvcmtzIGxpa2UgVnVlIGVuZm9yY2UgUHJveHkgb2JqZWN0cyB0aGF0IG1ha2UgaXQgaW1wb3NzaWJsZSB0byBnZXQgdGhlIHByb3BlciByZXN1bHQgdGhhdCB3YXksIHNvIHdlIG11c3QgdXNlIGEgdW5pcXVlIElEIG51bWJlciBpbnN0ZWFkLlxyXG4gICAgICAgIF9tZWRpYVtpXS5pZCA9PT0gdGhpcy5pZCAmJiBfbWVkaWEuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSAvLyBraWxsV2l0aENsZWFudXAoKSB7XHJcbiAgLy8gXHR0aGlzLmtpbGwoKTtcclxuICAvLyBcdHRoaXMuX3IuZm9yRWFjaChmID0+IGYoZmFsc2UsIHRoaXMpKTtcclxuICAvLyB9XHJcbiAgO1xyXG5cclxuICBfcHJvdG81LnJldmVydCA9IGZ1bmN0aW9uIHJldmVydChjb25maWcpIHtcclxuICAgIHRoaXMua2lsbChjb25maWcgfHwge30pO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBDb250ZXh0O1xyXG59KCk7XHJcblxyXG52YXIgTWF0Y2hNZWRpYSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XHJcbiAgZnVuY3Rpb24gTWF0Y2hNZWRpYShzY29wZSkge1xyXG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xyXG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xyXG4gICAgX2NvbnRleHQgJiYgX2NvbnRleHQuZGF0YS5wdXNoKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgdmFyIF9wcm90bzYgPSBNYXRjaE1lZGlhLnByb3RvdHlwZTtcclxuXHJcbiAgX3Byb3RvNi5hZGQgPSBmdW5jdGlvbiBhZGQoY29uZGl0aW9ucywgZnVuYywgc2NvcGUpIHtcclxuICAgIF9pc09iamVjdChjb25kaXRpb25zKSB8fCAoY29uZGl0aW9ucyA9IHtcclxuICAgICAgbWF0Y2hlczogY29uZGl0aW9uc1xyXG4gICAgfSk7XHJcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KDAsIHNjb3BlIHx8IHRoaXMuc2NvcGUpLFxyXG4gICAgICAgIGNvbmQgPSBjb250ZXh0LmNvbmRpdGlvbnMgPSB7fSxcclxuICAgICAgICBtcSxcclxuICAgICAgICBwLFxyXG4gICAgICAgIGFjdGl2ZTtcclxuICAgIF9jb250ZXh0ICYmICFjb250ZXh0LnNlbGVjdG9yICYmIChjb250ZXh0LnNlbGVjdG9yID0gX2NvbnRleHQuc2VsZWN0b3IpOyAvLyBpbiBjYXNlIGEgY29udGV4dCBpcyBjcmVhdGVkIGluc2lkZSBhIGNvbnRleHQuIExpa2UgYSBnc2FwLm1hdGNoTWVkaWEoKSB0aGF0J3MgaW5zaWRlIGEgc2NvcGVkIGdzYXAuY29udGV4dCgpXHJcblxyXG4gICAgdGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xyXG4gICAgZnVuYyA9IGNvbnRleHQuYWRkKFwib25NYXRjaFwiLCBmdW5jKTtcclxuICAgIGNvbnRleHQucXVlcmllcyA9IGNvbmRpdGlvbnM7XHJcblxyXG4gICAgZm9yIChwIGluIGNvbmRpdGlvbnMpIHtcclxuICAgICAgaWYgKHAgPT09IFwiYWxsXCIpIHtcclxuICAgICAgICBhY3RpdmUgPSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1xID0gX3dpbi5tYXRjaE1lZGlhKGNvbmRpdGlvbnNbcF0pO1xyXG5cclxuICAgICAgICBpZiAobXEpIHtcclxuICAgICAgICAgIF9tZWRpYS5pbmRleE9mKGNvbnRleHQpIDwgMCAmJiBfbWVkaWEucHVzaChjb250ZXh0KTtcclxuICAgICAgICAgIChjb25kW3BdID0gbXEubWF0Y2hlcykgJiYgKGFjdGl2ZSA9IDEpO1xyXG4gICAgICAgICAgbXEuYWRkTGlzdGVuZXIgPyBtcS5hZGRMaXN0ZW5lcihfb25NZWRpYUNoYW5nZSkgOiBtcS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIF9vbk1lZGlhQ2hhbmdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3RpdmUgJiYgZnVuYyhjb250ZXh0LCBmdW5jdGlvbiAoZikge1xyXG4gICAgICByZXR1cm4gY29udGV4dC5hZGQobnVsbCwgZik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH0gLy8gcmVmcmVzaCgpIHtcclxuICAvLyBcdGxldCB0aW1lID0gX2xhc3RNZWRpYVRpbWUsXHJcbiAgLy8gXHRcdG1lZGlhID0gX21lZGlhO1xyXG4gIC8vIFx0X2xhc3RNZWRpYVRpbWUgPSAtMTtcclxuICAvLyBcdF9tZWRpYSA9IHRoaXMuY29udGV4dHM7XHJcbiAgLy8gXHRfb25NZWRpYUNoYW5nZSgpO1xyXG4gIC8vIFx0X2xhc3RNZWRpYVRpbWUgPSB0aW1lO1xyXG4gIC8vIFx0X21lZGlhID0gbWVkaWE7XHJcbiAgLy8gfVxyXG4gIDtcclxuXHJcbiAgX3Byb3RvNi5yZXZlcnQgPSBmdW5jdGlvbiByZXZlcnQoY29uZmlnKSB7XHJcbiAgICB0aGlzLmtpbGwoY29uZmlnIHx8IHt9KTtcclxuICB9O1xyXG5cclxuICBfcHJvdG82LmtpbGwgPSBmdW5jdGlvbiBraWxsKHJldmVydCkge1xyXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHJldHVybiBjLmtpbGwocmV2ZXJ0LCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBNYXRjaE1lZGlhO1xyXG59KCk7XHJcbi8qXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAqIEdTQVBcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICovXHJcblxyXG5cclxudmFyIF9nc2FwID0ge1xyXG4gIHJlZ2lzdGVyUGx1Z2luOiBmdW5jdGlvbiByZWdpc3RlclBsdWdpbigpIHtcclxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xyXG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XHJcbiAgICB9XHJcblxyXG4gICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgcmV0dXJuIF9jcmVhdGVQbHVnaW4oY29uZmlnKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcbiAgdGltZWxpbmU6IGZ1bmN0aW9uIHRpbWVsaW5lKHZhcnMpIHtcclxuICAgIHJldHVybiBuZXcgVGltZWxpbmUodmFycyk7XHJcbiAgfSxcclxuICBnZXRUd2VlbnNPZjogZnVuY3Rpb24gZ2V0VHdlZW5zT2YodGFyZ2V0cywgb25seUFjdGl2ZSkge1xyXG4gICAgcmV0dXJuIF9nbG9iYWxUaW1lbGluZS5nZXRUd2VlbnNPZih0YXJnZXRzLCBvbmx5QWN0aXZlKTtcclxuICB9LFxyXG4gIGdldFByb3BlcnR5OiBmdW5jdGlvbiBnZXRQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB1bml0LCB1bmNhY2hlKSB7XHJcbiAgICBfaXNTdHJpbmcodGFyZ2V0KSAmJiAodGFyZ2V0ID0gdG9BcnJheSh0YXJnZXQpWzBdKTsgLy9pbiBjYXNlIHNlbGVjdG9yIHRleHQgb3IgYW4gYXJyYXkgaXMgcGFzc2VkIGluXHJcblxyXG4gICAgdmFyIGdldHRlciA9IF9nZXRDYWNoZSh0YXJnZXQgfHwge30pLmdldCxcclxuICAgICAgICBmb3JtYXQgPSB1bml0ID8gX3Bhc3NUaHJvdWdoIDogX251bWVyaWNJZlBvc3NpYmxlO1xyXG5cclxuICAgIHVuaXQgPT09IFwibmF0aXZlXCIgJiYgKHVuaXQgPSBcIlwiKTtcclxuICAgIHJldHVybiAhdGFyZ2V0ID8gdGFyZ2V0IDogIXByb3BlcnR5ID8gZnVuY3Rpb24gKHByb3BlcnR5LCB1bml0LCB1bmNhY2hlKSB7XHJcbiAgICAgIHJldHVybiBmb3JtYXQoKF9wbHVnaW5zW3Byb3BlcnR5XSAmJiBfcGx1Z2luc1twcm9wZXJ0eV0uZ2V0IHx8IGdldHRlcikodGFyZ2V0LCBwcm9wZXJ0eSwgdW5pdCwgdW5jYWNoZSkpO1xyXG4gICAgfSA6IGZvcm1hdCgoX3BsdWdpbnNbcHJvcGVydHldICYmIF9wbHVnaW5zW3Byb3BlcnR5XS5nZXQgfHwgZ2V0dGVyKSh0YXJnZXQsIHByb3BlcnR5LCB1bml0LCB1bmNhY2hlKSk7XHJcbiAgfSxcclxuICBxdWlja1NldHRlcjogZnVuY3Rpb24gcXVpY2tTZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSwgdW5pdCkge1xyXG4gICAgdGFyZ2V0ID0gdG9BcnJheSh0YXJnZXQpO1xyXG5cclxuICAgIGlmICh0YXJnZXQubGVuZ3RoID4gMSkge1xyXG4gICAgICB2YXIgc2V0dGVycyA9IHRhcmdldC5tYXAoZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICByZXR1cm4gZ3NhcC5xdWlja1NldHRlcih0LCBwcm9wZXJ0eSwgdW5pdCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICAgICAgbCA9IHNldHRlcnMubGVuZ3RoO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGkgPSBsO1xyXG5cclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICBzZXR0ZXJzW2ldKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGFyZ2V0ID0gdGFyZ2V0WzBdIHx8IHt9O1xyXG5cclxuICAgIHZhciBQbHVnaW4gPSBfcGx1Z2luc1twcm9wZXJ0eV0sXHJcbiAgICAgICAgY2FjaGUgPSBfZ2V0Q2FjaGUodGFyZ2V0KSxcclxuICAgICAgICBwID0gY2FjaGUuaGFybmVzcyAmJiAoY2FjaGUuaGFybmVzcy5hbGlhc2VzIHx8IHt9KVtwcm9wZXJ0eV0gfHwgcHJvcGVydHksXHJcbiAgICAgICAgLy8gaW4gY2FzZSBpdCdzIGFuIGFsaWFzLCBsaWtlIFwicm90YXRlXCIgZm9yIFwicm90YXRpb25cIi5cclxuICAgIHNldHRlciA9IFBsdWdpbiA/IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICB2YXIgcCA9IG5ldyBQbHVnaW4oKTtcclxuICAgICAgX3F1aWNrVHdlZW4uX3B0ID0gMDtcclxuICAgICAgcC5pbml0KHRhcmdldCwgdW5pdCA/IHZhbHVlICsgdW5pdCA6IHZhbHVlLCBfcXVpY2tUd2VlbiwgMCwgW3RhcmdldF0pO1xyXG4gICAgICBwLnJlbmRlcigxLCBwKTtcclxuICAgICAgX3F1aWNrVHdlZW4uX3B0ICYmIF9yZW5kZXJQcm9wVHdlZW5zKDEsIF9xdWlja1R3ZWVuKTtcclxuICAgIH0gOiBjYWNoZS5zZXQodGFyZ2V0LCBwKTtcclxuXHJcbiAgICByZXR1cm4gUGx1Z2luID8gc2V0dGVyIDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBzZXR0ZXIodGFyZ2V0LCBwLCB1bml0ID8gdmFsdWUgKyB1bml0IDogdmFsdWUsIGNhY2hlLCAxKTtcclxuICAgIH07XHJcbiAgfSxcclxuICBxdWlja1RvOiBmdW5jdGlvbiBxdWlja1RvKHRhcmdldCwgcHJvcGVydHksIHZhcnMpIHtcclxuICAgIHZhciBfc2V0RGVmYXVsdHMyO1xyXG5cclxuICAgIHZhciB0d2VlbiA9IGdzYXAudG8odGFyZ2V0LCBfc2V0RGVmYXVsdHMoKF9zZXREZWZhdWx0czIgPSB7fSwgX3NldERlZmF1bHRzMltwcm9wZXJ0eV0gPSBcIis9MC4xXCIsIF9zZXREZWZhdWx0czIucGF1c2VkID0gdHJ1ZSwgX3NldERlZmF1bHRzMi5zdGFnZ2VyID0gMCwgX3NldERlZmF1bHRzMiksIHZhcnMgfHwge30pKSxcclxuICAgICAgICBmdW5jID0gZnVuY3Rpb24gZnVuYyh2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSkge1xyXG4gICAgICByZXR1cm4gdHdlZW4ucmVzZXRUbyhwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jLnR3ZWVuID0gdHdlZW47XHJcbiAgICByZXR1cm4gZnVuYztcclxuICB9LFxyXG4gIGlzVHdlZW5pbmc6IGZ1bmN0aW9uIGlzVHdlZW5pbmcodGFyZ2V0cykge1xyXG4gICAgcmV0dXJuIF9nbG9iYWxUaW1lbGluZS5nZXRUd2VlbnNPZih0YXJnZXRzLCB0cnVlKS5sZW5ndGggPiAwO1xyXG4gIH0sXHJcbiAgZGVmYXVsdHM6IGZ1bmN0aW9uIGRlZmF1bHRzKHZhbHVlKSB7XHJcbiAgICB2YWx1ZSAmJiB2YWx1ZS5lYXNlICYmICh2YWx1ZS5lYXNlID0gX3BhcnNlRWFzZSh2YWx1ZS5lYXNlLCBfZGVmYXVsdHMuZWFzZSkpO1xyXG4gICAgcmV0dXJuIF9tZXJnZURlZXAoX2RlZmF1bHRzLCB2YWx1ZSB8fCB7fSk7XHJcbiAgfSxcclxuICBjb25maWc6IGZ1bmN0aW9uIGNvbmZpZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIF9tZXJnZURlZXAoX2NvbmZpZywgdmFsdWUgfHwge30pO1xyXG4gIH0sXHJcbiAgcmVnaXN0ZXJFZmZlY3Q6IGZ1bmN0aW9uIHJlZ2lzdGVyRWZmZWN0KF9yZWYzKSB7XHJcbiAgICB2YXIgbmFtZSA9IF9yZWYzLm5hbWUsXHJcbiAgICAgICAgZWZmZWN0ID0gX3JlZjMuZWZmZWN0LFxyXG4gICAgICAgIHBsdWdpbnMgPSBfcmVmMy5wbHVnaW5zLFxyXG4gICAgICAgIGRlZmF1bHRzID0gX3JlZjMuZGVmYXVsdHMsXHJcbiAgICAgICAgZXh0ZW5kVGltZWxpbmUgPSBfcmVmMy5leHRlbmRUaW1lbGluZTtcclxuICAgIChwbHVnaW5zIHx8IFwiXCIpLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW5OYW1lKSB7XHJcbiAgICAgIHJldHVybiBwbHVnaW5OYW1lICYmICFfcGx1Z2luc1twbHVnaW5OYW1lXSAmJiAhX2dsb2JhbHNbcGx1Z2luTmFtZV0gJiYgX3dhcm4obmFtZSArIFwiIGVmZmVjdCByZXF1aXJlcyBcIiArIHBsdWdpbk5hbWUgKyBcIiBwbHVnaW4uXCIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgX2VmZmVjdHNbbmFtZV0gPSBmdW5jdGlvbiAodGFyZ2V0cywgdmFycywgdGwpIHtcclxuICAgICAgcmV0dXJuIGVmZmVjdCh0b0FycmF5KHRhcmdldHMpLCBfc2V0RGVmYXVsdHModmFycyB8fCB7fSwgZGVmYXVsdHMpLCB0bCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChleHRlbmRUaW1lbGluZSkge1xyXG4gICAgICBUaW1lbGluZS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAodGFyZ2V0cywgdmFycywgcG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQoX2VmZmVjdHNbbmFtZV0odGFyZ2V0cywgX2lzT2JqZWN0KHZhcnMpID8gdmFycyA6IChwb3NpdGlvbiA9IHZhcnMpICYmIHt9LCB0aGlzKSwgcG9zaXRpb24pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgcmVnaXN0ZXJFYXNlOiBmdW5jdGlvbiByZWdpc3RlckVhc2UobmFtZSwgZWFzZSkge1xyXG4gICAgX2Vhc2VNYXBbbmFtZV0gPSBfcGFyc2VFYXNlKGVhc2UpO1xyXG4gIH0sXHJcbiAgcGFyc2VFYXNlOiBmdW5jdGlvbiBwYXJzZUVhc2UoZWFzZSwgZGVmYXVsdEVhc2UpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gX3BhcnNlRWFzZShlYXNlLCBkZWZhdWx0RWFzZSkgOiBfZWFzZU1hcDtcclxuICB9LFxyXG4gIGdldEJ5SWQ6IGZ1bmN0aW9uIGdldEJ5SWQoaWQpIHtcclxuICAgIHJldHVybiBfZ2xvYmFsVGltZWxpbmUuZ2V0QnlJZChpZCk7XHJcbiAgfSxcclxuICBleHBvcnRSb290OiBmdW5jdGlvbiBleHBvcnRSb290KHZhcnMsIGluY2x1ZGVEZWxheWVkQ2FsbHMpIHtcclxuICAgIGlmICh2YXJzID09PSB2b2lkIDApIHtcclxuICAgICAgdmFycyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0bCA9IG5ldyBUaW1lbGluZSh2YXJzKSxcclxuICAgICAgICBjaGlsZCxcclxuICAgICAgICBuZXh0O1xyXG4gICAgdGwuc21vb3RoQ2hpbGRUaW1pbmcgPSBfaXNOb3RGYWxzZSh2YXJzLnNtb290aENoaWxkVGltaW5nKTtcclxuXHJcbiAgICBfZ2xvYmFsVGltZWxpbmUucmVtb3ZlKHRsKTtcclxuXHJcbiAgICB0bC5fZHAgPSAwOyAvL290aGVyd2lzZSBpdCdsbCBnZXQgcmUtYWN0aXZhdGVkIHdoZW4gYWRkaW5nIGNoaWxkcmVuIGFuZCBiZSByZS1pbnRyb2R1Y2VkIGludG8gX2dsb2JhbFRpbWVsaW5lJ3MgbGlua2VkIGxpc3QgKHRoZW4gYWRkZWQgdG8gaXRzZWxmKS5cclxuXHJcbiAgICB0bC5fdGltZSA9IHRsLl90VGltZSA9IF9nbG9iYWxUaW1lbGluZS5fdGltZTtcclxuICAgIGNoaWxkID0gX2dsb2JhbFRpbWVsaW5lLl9maXJzdDtcclxuXHJcbiAgICB3aGlsZSAoY2hpbGQpIHtcclxuICAgICAgbmV4dCA9IGNoaWxkLl9uZXh0O1xyXG5cclxuICAgICAgaWYgKGluY2x1ZGVEZWxheWVkQ2FsbHMgfHwgISghY2hpbGQuX2R1ciAmJiBjaGlsZCBpbnN0YW5jZW9mIFR3ZWVuICYmIGNoaWxkLnZhcnMub25Db21wbGV0ZSA9PT0gY2hpbGQuX3RhcmdldHNbMF0pKSB7XHJcbiAgICAgICAgX2FkZFRvVGltZWxpbmUodGwsIGNoaWxkLCBjaGlsZC5fc3RhcnQgLSBjaGlsZC5fZGVsYXkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjaGlsZCA9IG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgX2FkZFRvVGltZWxpbmUoX2dsb2JhbFRpbWVsaW5lLCB0bCwgMCk7XHJcblxyXG4gICAgcmV0dXJuIHRsO1xyXG4gIH0sXHJcbiAgY29udGV4dDogZnVuY3Rpb24gY29udGV4dChmdW5jLCBzY29wZSkge1xyXG4gICAgcmV0dXJuIGZ1bmMgPyBuZXcgQ29udGV4dChmdW5jLCBzY29wZSkgOiBfY29udGV4dDtcclxuICB9LFxyXG4gIG1hdGNoTWVkaWE6IGZ1bmN0aW9uIG1hdGNoTWVkaWEoc2NvcGUpIHtcclxuICAgIHJldHVybiBuZXcgTWF0Y2hNZWRpYShzY29wZSk7XHJcbiAgfSxcclxuICBtYXRjaE1lZGlhUmVmcmVzaDogZnVuY3Rpb24gbWF0Y2hNZWRpYVJlZnJlc2goKSB7XHJcbiAgICByZXR1cm4gX21lZGlhLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcclxuICAgICAgdmFyIGNvbmQgPSBjLmNvbmRpdGlvbnMsXHJcbiAgICAgICAgICBmb3VuZCxcclxuICAgICAgICAgIHA7XHJcblxyXG4gICAgICBmb3IgKHAgaW4gY29uZCkge1xyXG4gICAgICAgIGlmIChjb25kW3BdKSB7XHJcbiAgICAgICAgICBjb25kW3BdID0gZmFsc2U7XHJcbiAgICAgICAgICBmb3VuZCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3VuZCAmJiBjLnJldmVydCgpO1xyXG4gICAgfSkgfHwgX29uTWVkaWFDaGFuZ2UoKTtcclxuICB9LFxyXG4gIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcclxuICAgIHZhciBhID0gX2xpc3RlbmVyc1t0eXBlXSB8fCAoX2xpc3RlbmVyc1t0eXBlXSA9IFtdKTtcclxuICAgIH5hLmluZGV4T2YoY2FsbGJhY2spIHx8IGEucHVzaChjYWxsYmFjayk7XHJcbiAgfSxcclxuICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XHJcbiAgICB2YXIgYSA9IF9saXN0ZW5lcnNbdHlwZV0sXHJcbiAgICAgICAgaSA9IGEgJiYgYS5pbmRleE9mKGNhbGxiYWNrKTtcclxuICAgIGkgPj0gMCAmJiBhLnNwbGljZShpLCAxKTtcclxuICB9LFxyXG4gIHV0aWxzOiB7XHJcbiAgICB3cmFwOiB3cmFwLFxyXG4gICAgd3JhcFlveW86IHdyYXBZb3lvLFxyXG4gICAgZGlzdHJpYnV0ZTogZGlzdHJpYnV0ZSxcclxuICAgIHJhbmRvbTogcmFuZG9tLFxyXG4gICAgc25hcDogc25hcCxcclxuICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxyXG4gICAgZ2V0VW5pdDogZ2V0VW5pdCxcclxuICAgIGNsYW1wOiBjbGFtcCxcclxuICAgIHNwbGl0Q29sb3I6IHNwbGl0Q29sb3IsXHJcbiAgICB0b0FycmF5OiB0b0FycmF5LFxyXG4gICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxyXG4gICAgbWFwUmFuZ2U6IG1hcFJhbmdlLFxyXG4gICAgcGlwZTogcGlwZSxcclxuICAgIHVuaXRpemU6IHVuaXRpemUsXHJcbiAgICBpbnRlcnBvbGF0ZTogaW50ZXJwb2xhdGUsXHJcbiAgICBzaHVmZmxlOiBzaHVmZmxlXHJcbiAgfSxcclxuICBpbnN0YWxsOiBfaW5zdGFsbCxcclxuICBlZmZlY3RzOiBfZWZmZWN0cyxcclxuICB0aWNrZXI6IF90aWNrZXIsXHJcbiAgdXBkYXRlUm9vdDogVGltZWxpbmUudXBkYXRlUm9vdCxcclxuICBwbHVnaW5zOiBfcGx1Z2lucyxcclxuICBnbG9iYWxUaW1lbGluZTogX2dsb2JhbFRpbWVsaW5lLFxyXG4gIGNvcmU6IHtcclxuICAgIFByb3BUd2VlbjogUHJvcFR3ZWVuLFxyXG4gICAgZ2xvYmFsczogX2FkZEdsb2JhbCxcclxuICAgIFR3ZWVuOiBUd2VlbixcclxuICAgIFRpbWVsaW5lOiBUaW1lbGluZSxcclxuICAgIEFuaW1hdGlvbjogQW5pbWF0aW9uLFxyXG4gICAgZ2V0Q2FjaGU6IF9nZXRDYWNoZSxcclxuICAgIF9yZW1vdmVMaW5rZWRMaXN0SXRlbTogX3JlbW92ZUxpbmtlZExpc3RJdGVtLFxyXG4gICAgcmV2ZXJ0aW5nOiBmdW5jdGlvbiByZXZlcnRpbmcoKSB7XHJcbiAgICAgIHJldHVybiBfcmV2ZXJ0aW5nO1xyXG4gICAgfSxcclxuICAgIGNvbnRleHQ6IGZ1bmN0aW9uIGNvbnRleHQodG9BZGQpIHtcclxuICAgICAgaWYgKHRvQWRkICYmIF9jb250ZXh0KSB7XHJcbiAgICAgICAgX2NvbnRleHQuZGF0YS5wdXNoKHRvQWRkKTtcclxuXHJcbiAgICAgICAgdG9BZGQuX2N0eCA9IF9jb250ZXh0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gX2NvbnRleHQ7XHJcbiAgICB9LFxyXG4gICAgc3VwcHJlc3NPdmVyd3JpdGVzOiBmdW5jdGlvbiBzdXBwcmVzc092ZXJ3cml0ZXModmFsdWUpIHtcclxuICAgICAgcmV0dXJuIF9zdXBwcmVzc092ZXJ3cml0ZXMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5fZm9yRWFjaE5hbWUoXCJ0byxmcm9tLGZyb21UbyxkZWxheWVkQ2FsbCxzZXQsa2lsbFR3ZWVuc09mXCIsIGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgcmV0dXJuIF9nc2FwW25hbWVdID0gVHdlZW5bbmFtZV07XHJcbn0pO1xyXG5cclxuX3RpY2tlci5hZGQoVGltZWxpbmUudXBkYXRlUm9vdCk7XHJcblxyXG5fcXVpY2tUd2VlbiA9IF9nc2FwLnRvKHt9LCB7XHJcbiAgZHVyYXRpb246IDBcclxufSk7IC8vIC0tLS0gRVhUUkEgUExVR0lOUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxudmFyIF9nZXRQbHVnaW5Qcm9wVHdlZW4gPSBmdW5jdGlvbiBfZ2V0UGx1Z2luUHJvcFR3ZWVuKHBsdWdpbiwgcHJvcCkge1xyXG4gIHZhciBwdCA9IHBsdWdpbi5fcHQ7XHJcblxyXG4gIHdoaWxlIChwdCAmJiBwdC5wICE9PSBwcm9wICYmIHB0Lm9wICE9PSBwcm9wICYmIHB0LmZwICE9PSBwcm9wKSB7XHJcbiAgICBwdCA9IHB0Ll9uZXh0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHB0O1xyXG59LFxyXG4gICAgX2FkZE1vZGlmaWVycyA9IGZ1bmN0aW9uIF9hZGRNb2RpZmllcnModHdlZW4sIG1vZGlmaWVycykge1xyXG4gIHZhciB0YXJnZXRzID0gdHdlZW4uX3RhcmdldHMsXHJcbiAgICAgIHAsXHJcbiAgICAgIGksXHJcbiAgICAgIHB0O1xyXG5cclxuICBmb3IgKHAgaW4gbW9kaWZpZXJzKSB7XHJcbiAgICBpID0gdGFyZ2V0cy5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBwdCA9IHR3ZWVuLl9wdExvb2t1cFtpXVtwXTtcclxuXHJcbiAgICAgIGlmIChwdCAmJiAocHQgPSBwdC5kKSkge1xyXG4gICAgICAgIGlmIChwdC5fcHQpIHtcclxuICAgICAgICAgIC8vIGlzIGEgcGx1Z2luXHJcbiAgICAgICAgICBwdCA9IF9nZXRQbHVnaW5Qcm9wVHdlZW4ocHQsIHApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHQgJiYgcHQubW9kaWZpZXIgJiYgcHQubW9kaWZpZXIobW9kaWZpZXJzW3BdLCB0d2VlbiwgdGFyZ2V0c1tpXSwgcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0sXHJcbiAgICBfYnVpbGRNb2RpZmllclBsdWdpbiA9IGZ1bmN0aW9uIF9idWlsZE1vZGlmaWVyUGx1Z2luKG5hbWUsIG1vZGlmaWVyKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6IG5hbWUsXHJcbiAgICBoZWFkbGVzczogMSxcclxuICAgIHJhd1ZhcnM6IDEsXHJcbiAgICAvL2Rvbid0IHByZS1wcm9jZXNzIGZ1bmN0aW9uLWJhc2VkIHZhbHVlcyBvciBcInJhbmRvbSgpXCIgc3RyaW5ncy5cclxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQodGFyZ2V0LCB2YXJzLCB0d2Vlbikge1xyXG4gICAgICB0d2Vlbi5fb25Jbml0ID0gZnVuY3Rpb24gKHR3ZWVuKSB7XHJcbiAgICAgICAgdmFyIHRlbXAsIHA7XHJcblxyXG4gICAgICAgIGlmIChfaXNTdHJpbmcodmFycykpIHtcclxuICAgICAgICAgIHRlbXAgPSB7fTtcclxuXHJcbiAgICAgICAgICBfZm9yRWFjaE5hbWUodmFycywgZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRlbXBbbmFtZV0gPSAxO1xyXG4gICAgICAgICAgfSk7IC8vaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdG8gcm91bmRQcm9wcywgbGlrZSBcIngseVwiLCB3ZSByb3VuZCB0byB3aG9sZSBudW1iZXJzLlxyXG5cclxuXHJcbiAgICAgICAgICB2YXJzID0gdGVtcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtb2RpZmllcikge1xyXG4gICAgICAgICAgdGVtcCA9IHt9O1xyXG5cclxuICAgICAgICAgIGZvciAocCBpbiB2YXJzKSB7XHJcbiAgICAgICAgICAgIHRlbXBbcF0gPSBtb2RpZmllcih2YXJzW3BdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB2YXJzID0gdGVtcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9hZGRNb2RpZmllcnModHdlZW4sIHZhcnMpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH07XHJcbn07IC8vcmVnaXN0ZXIgY29yZSBwbHVnaW5zXHJcblxyXG5cclxuZXhwb3J0IHZhciBnc2FwID0gX2dzYXAucmVnaXN0ZXJQbHVnaW4oe1xyXG4gIG5hbWU6IFwiYXR0clwiLFxyXG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQodGFyZ2V0LCB2YXJzLCB0d2VlbiwgaW5kZXgsIHRhcmdldHMpIHtcclxuICAgIHZhciBwLCBwdCwgdjtcclxuICAgIHRoaXMudHdlZW4gPSB0d2VlbjtcclxuXHJcbiAgICBmb3IgKHAgaW4gdmFycykge1xyXG4gICAgICB2ID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShwKSB8fCBcIlwiO1xyXG4gICAgICBwdCA9IHRoaXMuYWRkKHRhcmdldCwgXCJzZXRBdHRyaWJ1dGVcIiwgKHYgfHwgMCkgKyBcIlwiLCB2YXJzW3BdLCBpbmRleCwgdGFyZ2V0cywgMCwgMCwgcCk7XHJcbiAgICAgIHB0Lm9wID0gcDtcclxuICAgICAgcHQuYiA9IHY7IC8vIHJlY29yZCB0aGUgYmVnaW5uaW5nIHZhbHVlIHNvIHdlIGNhbiByZXZlcnQoKVxyXG5cclxuICAgICAgdGhpcy5fcHJvcHMucHVzaChwKTtcclxuICAgIH1cclxuICB9LFxyXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHJhdGlvLCBkYXRhKSB7XHJcbiAgICB2YXIgcHQgPSBkYXRhLl9wdDtcclxuXHJcbiAgICB3aGlsZSAocHQpIHtcclxuICAgICAgX3JldmVydGluZyA/IHB0LnNldChwdC50LCBwdC5wLCBwdC5iLCBwdCkgOiBwdC5yKHJhdGlvLCBwdC5kKTsgLy8gaWYgcmV2ZXJ0aW5nLCBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCAocHQuYilcclxuXHJcbiAgICAgIHB0ID0gcHQuX25leHQ7XHJcbiAgICB9XHJcbiAgfVxyXG59LCB7XHJcbiAgbmFtZTogXCJlbmRBcnJheVwiLFxyXG4gIGhlYWRsZXNzOiAxLFxyXG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQodGFyZ2V0LCB2YWx1ZSkge1xyXG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0aGlzLmFkZCh0YXJnZXQsIGksIHRhcmdldFtpXSB8fCAwLCB2YWx1ZVtpXSwgMCwgMCwgMCwgMCwgMCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG59LCBfYnVpbGRNb2RpZmllclBsdWdpbihcInJvdW5kUHJvcHNcIiwgX3JvdW5kTW9kaWZpZXIpLCBfYnVpbGRNb2RpZmllclBsdWdpbihcIm1vZGlmaWVyc1wiKSwgX2J1aWxkTW9kaWZpZXJQbHVnaW4oXCJzbmFwXCIsIHNuYXApKSB8fCBfZ3NhcDsgLy90byBwcmV2ZW50IHRoZSBjb3JlIHBsdWdpbnMgZnJvbSBiZWluZyBkcm9wcGVkIHZpYSBhZ2dyZXNzaXZlIHRyZWUgc2hha2luZywgd2UgbXVzdCBpbmNsdWRlIHRoZW0gaW4gdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIHRoaXMgd2F5LlxyXG5cclxuVHdlZW4udmVyc2lvbiA9IFRpbWVsaW5lLnZlcnNpb24gPSBnc2FwLnZlcnNpb24gPSBcIjMuMTMuMFwiO1xyXG5fY29yZVJlYWR5ID0gMTtcclxuX3dpbmRvd0V4aXN0cygpICYmIF93YWtlKCk7XHJcbnZhciBQb3dlcjAgPSBfZWFzZU1hcC5Qb3dlcjAsXHJcbiAgICBQb3dlcjEgPSBfZWFzZU1hcC5Qb3dlcjEsXHJcbiAgICBQb3dlcjIgPSBfZWFzZU1hcC5Qb3dlcjIsXHJcbiAgICBQb3dlcjMgPSBfZWFzZU1hcC5Qb3dlcjMsXHJcbiAgICBQb3dlcjQgPSBfZWFzZU1hcC5Qb3dlcjQsXHJcbiAgICBMaW5lYXIgPSBfZWFzZU1hcC5MaW5lYXIsXHJcbiAgICBRdWFkID0gX2Vhc2VNYXAuUXVhZCxcclxuICAgIEN1YmljID0gX2Vhc2VNYXAuQ3ViaWMsXHJcbiAgICBRdWFydCA9IF9lYXNlTWFwLlF1YXJ0LFxyXG4gICAgUXVpbnQgPSBfZWFzZU1hcC5RdWludCxcclxuICAgIFN0cm9uZyA9IF9lYXNlTWFwLlN0cm9uZyxcclxuICAgIEVsYXN0aWMgPSBfZWFzZU1hcC5FbGFzdGljLFxyXG4gICAgQmFjayA9IF9lYXNlTWFwLkJhY2ssXHJcbiAgICBTdGVwcGVkRWFzZSA9IF9lYXNlTWFwLlN0ZXBwZWRFYXNlLFxyXG4gICAgQm91bmNlID0gX2Vhc2VNYXAuQm91bmNlLFxyXG4gICAgU2luZSA9IF9lYXNlTWFwLlNpbmUsXHJcbiAgICBFeHBvID0gX2Vhc2VNYXAuRXhwbyxcclxuICAgIENpcmMgPSBfZWFzZU1hcC5DaXJjO1xyXG5leHBvcnQgeyBQb3dlcjAsIFBvd2VyMSwgUG93ZXIyLCBQb3dlcjMsIFBvd2VyNCwgTGluZWFyLCBRdWFkLCBDdWJpYywgUXVhcnQsIFF1aW50LCBTdHJvbmcsIEVsYXN0aWMsIEJhY2ssIFN0ZXBwZWRFYXNlLCBCb3VuY2UsIFNpbmUsIEV4cG8sIENpcmMgfTtcclxuZXhwb3J0IHsgVHdlZW4gYXMgVHdlZW5NYXgsIFR3ZWVuIGFzIFR3ZWVuTGl0ZSwgVGltZWxpbmUgYXMgVGltZWxpbmVNYXgsIFRpbWVsaW5lIGFzIFRpbWVsaW5lTGl0ZSwgZ3NhcCBhcyBkZWZhdWx0LCB3cmFwLCB3cmFwWW95bywgZGlzdHJpYnV0ZSwgcmFuZG9tLCBzbmFwLCBub3JtYWxpemUsIGdldFVuaXQsIGNsYW1wLCBzcGxpdENvbG9yLCB0b0FycmF5LCBzZWxlY3RvciwgbWFwUmFuZ2UsIHBpcGUsIHVuaXRpemUsIGludGVycG9sYXRlLCBzaHVmZmxlIH07IC8vZXhwb3J0IHNvbWUgaW50ZXJuYWwgbWV0aG9kcy9vcm9qZWN0cyBmb3IgdXNlIGluIENTU1BsdWdpbiBzbyB0aGF0IHdlIGNhbiBleHRlcm5hbGl6ZSB0aGF0IGZpbGUgYW5kIGFsbG93IGN1c3RvbSBidWlsZHMgdGhhdCBleGNsdWRlIGl0LlxyXG5cclxuZXhwb3J0IHsgX2dldFByb3BlcnR5LCBfbnVtRXhwLCBfbnVtV2l0aFVuaXRFeHAsIF9pc1N0cmluZywgX2lzVW5kZWZpbmVkLCBfcmVuZGVyQ29tcGxleFN0cmluZywgX3JlbEV4cCwgX3NldERlZmF1bHRzLCBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0sIF9mb3JFYWNoTmFtZSwgX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSwgX2NvbG9yU3RyaW5nRmlsdGVyLCBfcmVwbGFjZVJhbmRvbSwgX2NoZWNrUGx1Z2luLCBfcGx1Z2lucywgX3RpY2tlciwgX2NvbmZpZywgX3JvdW5kTW9kaWZpZXIsIF9yb3VuZCwgX21pc3NpbmdQbHVnaW4sIF9nZXRTZXR0ZXIsIF9nZXRDYWNoZSwgX2NvbG9yRXhwLCBfcGFyc2VSZWxhdGl2ZSB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/gsap/gsap-core.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/gsap/index.js": /*!************************************!*\ !*** ./node_modules/gsap/index.js ***! \************************************/ /***/ (function(__unused_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 */ Back: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Back; },\n/* harmony export */ Bounce: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Bounce; },\n/* harmony export */ CSSPlugin: function() { return /* reexport safe */ _CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__.CSSPlugin; },\n/* harmony export */ Circ: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Circ; },\n/* harmony export */ Cubic: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Cubic; },\n/* harmony export */ Elastic: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Elastic; },\n/* harmony export */ Expo: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Expo; },\n/* harmony export */ Linear: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Linear; },\n/* harmony export */ Power0: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power0; },\n/* harmony export */ Power1: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power1; },\n/* harmony export */ Power2: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power2; },\n/* harmony export */ Power3: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power3; },\n/* harmony export */ Power4: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power4; },\n/* harmony export */ Quad: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quad; },\n/* harmony export */ Quart: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quart; },\n/* harmony export */ Quint: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quint; },\n/* harmony export */ Sine: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Sine; },\n/* harmony export */ SteppedEase: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.SteppedEase; },\n/* harmony export */ Strong: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Strong; },\n/* harmony export */ TimelineLite: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TimelineLite; },\n/* harmony export */ TimelineMax: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TimelineMax; },\n/* harmony export */ TweenLite: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TweenLite; },\n/* harmony export */ TweenMax: function() { return /* binding */ TweenMaxWithCSS; },\n/* harmony export */ \"default\": function() { return /* binding */ gsapWithCSS; },\n/* harmony export */ gsap: function() { return /* binding */ gsapWithCSS; }\n/* harmony export */ });\n/* harmony import */ var _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gsap-core.js */ \"(app-pages-browser)/./node_modules/gsap/gsap-core.js\");\n/* harmony import */ var _CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CSSPlugin.js */ \"(app-pages-browser)/./node_modules/gsap/CSSPlugin.js\");\n\r\n\r\nvar gsapWithCSS = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.registerPlugin(_CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__.CSSPlugin) || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap,\r\n // to protect from tree shaking\r\nTweenMaxWithCSS = gsapWithCSS.core.Tween;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9nc2FwL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFxTjtBQUMxSztBQUMzQyxrQkFBa0IsK0NBQUksZ0JBQWdCLG9EQUFTLEtBQUssK0NBQUk7QUFDeEQ7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZ3NhcC9pbmRleC5qcz8wNmU5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdzYXAsIFBvd2VyMCwgUG93ZXIxLCBQb3dlcjIsIFBvd2VyMywgUG93ZXI0LCBMaW5lYXIsIFF1YWQsIEN1YmljLCBRdWFydCwgUXVpbnQsIFN0cm9uZywgRWxhc3RpYywgQmFjaywgU3RlcHBlZEVhc2UsIEJvdW5jZSwgU2luZSwgRXhwbywgQ2lyYywgVHdlZW5MaXRlLCBUaW1lbGluZUxpdGUsIFRpbWVsaW5lTWF4IH0gZnJvbSBcIi4vZ3NhcC1jb3JlLmpzXCI7XHJcbmltcG9ydCB7IENTU1BsdWdpbiB9IGZyb20gXCIuL0NTU1BsdWdpbi5qc1wiO1xyXG52YXIgZ3NhcFdpdGhDU1MgPSBnc2FwLnJlZ2lzdGVyUGx1Z2luKENTU1BsdWdpbikgfHwgZ3NhcCxcclxuICAgIC8vIHRvIHByb3RlY3QgZnJvbSB0cmVlIHNoYWtpbmdcclxuVHdlZW5NYXhXaXRoQ1NTID0gZ3NhcFdpdGhDU1MuY29yZS5Ud2VlbjtcclxuZXhwb3J0IHsgZ3NhcFdpdGhDU1MgYXMgZ3NhcCwgZ3NhcFdpdGhDU1MgYXMgZGVmYXVsdCwgQ1NTUGx1Z2luLCBUd2Vlbk1heFdpdGhDU1MgYXMgVHdlZW5NYXgsIFR3ZWVuTGl0ZSwgVGltZWxpbmVNYXgsIFRpbWVsaW5lTGl0ZSwgUG93ZXIwLCBQb3dlcjEsIFBvd2VyMiwgUG93ZXIzLCBQb3dlcjQsIExpbmVhciwgUXVhZCwgQ3ViaWMsIFF1YXJ0LCBRdWludCwgU3Ryb25nLCBFbGFzdGljLCBCYWNrLCBTdGVwcGVkRWFzZSwgQm91bmNlLCBTaW5lLCBFeHBvLCBDaXJjIH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/gsap/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.js": /*!****************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/Icon.js ***! \****************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Icon; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _defaultAttributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultAttributes.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.js\");\n/* harmony import */ var _shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/src/utils.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\n\r\n\r\nconst Icon = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(\r\n ({\r\n color = \"currentColor\",\r\n size = 24,\r\n strokeWidth = 2,\r\n absoluteStrokeWidth,\r\n className = \"\",\r\n children,\r\n iconNode,\r\n ...rest\r\n }, ref) => {\r\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\r\n \"svg\",\r\n {\r\n ref,\r\n ..._defaultAttributes_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\r\n width: size,\r\n height: size,\r\n stroke: color,\r\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\r\n className: (0,_shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__.mergeClasses)(\"lucide\", className),\r\n ...rest\r\n },\r\n [\r\n ...iconNode.map(([tag, attrs]) => (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(tag, attrs)),\r\n ...Array.isArray(children) ? children : [children]\r\n ]\r\n );\r\n }\r\n);\r\n\r\n\r\n//# sourceMappingURL=Icon.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vSWNvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2tEO0FBQ0s7QUFDRjtBQUNyRDtBQUNBLGFBQWEsaURBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFdBQVcsb0RBQWE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2REFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0VBQVk7QUFDL0I7QUFDQSxPQUFPO0FBQ1A7QUFDQSwwQ0FBMEMsb0RBQWE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQzJCO0FBQzNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vSWNvbi5qcz9kYjY0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IGZvcndhcmRSZWYsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBkZWZhdWx0QXR0cmlidXRlcyBmcm9tICcuL2RlZmF1bHRBdHRyaWJ1dGVzLmpzJztcclxuaW1wb3J0IHsgbWVyZ2VDbGFzc2VzIH0gZnJvbSAnLi9zaGFyZWQvc3JjL3V0aWxzLmpzJztcclxuXHJcbmNvbnN0IEljb24gPSBmb3J3YXJkUmVmKFxyXG4gICh7XHJcbiAgICBjb2xvciA9IFwiY3VycmVudENvbG9yXCIsXHJcbiAgICBzaXplID0gMjQsXHJcbiAgICBzdHJva2VXaWR0aCA9IDIsXHJcbiAgICBhYnNvbHV0ZVN0cm9rZVdpZHRoLFxyXG4gICAgY2xhc3NOYW1lID0gXCJcIixcclxuICAgIGNoaWxkcmVuLFxyXG4gICAgaWNvbk5vZGUsXHJcbiAgICAuLi5yZXN0XHJcbiAgfSwgcmVmKSA9PiB7XHJcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcclxuICAgICAgXCJzdmdcIixcclxuICAgICAge1xyXG4gICAgICAgIHJlZixcclxuICAgICAgICAuLi5kZWZhdWx0QXR0cmlidXRlcyxcclxuICAgICAgICB3aWR0aDogc2l6ZSxcclxuICAgICAgICBoZWlnaHQ6IHNpemUsXHJcbiAgICAgICAgc3Ryb2tlOiBjb2xvcixcclxuICAgICAgICBzdHJva2VXaWR0aDogYWJzb2x1dGVTdHJva2VXaWR0aCA/IE51bWJlcihzdHJva2VXaWR0aCkgKiAyNCAvIE51bWJlcihzaXplKSA6IHN0cm9rZVdpZHRoLFxyXG4gICAgICAgIGNsYXNzTmFtZTogbWVyZ2VDbGFzc2VzKFwibHVjaWRlXCIsIGNsYXNzTmFtZSksXHJcbiAgICAgICAgLi4ucmVzdFxyXG4gICAgICB9LFxyXG4gICAgICBbXHJcbiAgICAgICAgLi4uaWNvbk5vZGUubWFwKChbdGFnLCBhdHRyc10pID0+IGNyZWF0ZUVsZW1lbnQodGFnLCBhdHRycykpLFxyXG4gICAgICAgIC4uLkFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dXHJcbiAgICAgIF1cclxuICAgICk7XHJcbiAgfVxyXG4pO1xyXG5cclxuZXhwb3J0IHsgSWNvbiBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUljb24uanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js": /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/createLucideIcon.js ***! \****************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ createLucideIcon; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/src/utils.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js\");\n/* harmony import */ var _Icon_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Icon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\n\r\n\r\nconst createLucideIcon = (iconName, iconNode) => {\r\n const Component = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(\r\n ({ className, ...props }, ref) => (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Icon_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\r\n ref,\r\n iconNode,\r\n className: (0,_shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__.mergeClasses)(`lucide-${(0,_shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__.toKebabCase)(iconName)}`, className),\r\n ...props\r\n })\r\n );\r\n Component.displayName = `${iconName}`;\r\n return Component;\r\n};\r\n\r\n\r\n//# sourceMappingURL=createLucideIcon.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vY3JlYXRlTHVjaWRlSWNvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2tEO0FBQ2dCO0FBQ3JDO0FBQzdCO0FBQ0E7QUFDQSxvQkFBb0IsaURBQVU7QUFDOUIsT0FBTyxxQkFBcUIsVUFBVSxvREFBYSxDQUFDLGdEQUFJO0FBQ3hEO0FBQ0E7QUFDQSxpQkFBaUIsa0VBQVksV0FBVyxpRUFBVyxXQUFXO0FBQzlEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkJBQTZCLFNBQVM7QUFDdEM7QUFDQTtBQUNBO0FBQ3VDO0FBQ3ZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vY3JlYXRlTHVjaWRlSWNvbi5qcz9kNWNlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IGZvcndhcmRSZWYsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IG1lcmdlQ2xhc3NlcywgdG9LZWJhYkNhc2UgfSBmcm9tICcuL3NoYXJlZC9zcmMvdXRpbHMuanMnO1xyXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24uanMnO1xyXG5cclxuY29uc3QgY3JlYXRlTHVjaWRlSWNvbiA9IChpY29uTmFtZSwgaWNvbk5vZGUpID0+IHtcclxuICBjb25zdCBDb21wb25lbnQgPSBmb3J3YXJkUmVmKFxyXG4gICAgKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IGNyZWF0ZUVsZW1lbnQoSWNvbiwge1xyXG4gICAgICByZWYsXHJcbiAgICAgIGljb25Ob2RlLFxyXG4gICAgICBjbGFzc05hbWU6IG1lcmdlQ2xhc3NlcyhgbHVjaWRlLSR7dG9LZWJhYkNhc2UoaWNvbk5hbWUpfWAsIGNsYXNzTmFtZSksXHJcbiAgICAgIC4uLnByb3BzXHJcbiAgICB9KVxyXG4gICk7XHJcbiAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYCR7aWNvbk5hbWV9YDtcclxuICByZXR1cm4gQ29tcG9uZW50O1xyXG59O1xyXG5cclxuZXhwb3J0IHsgY3JlYXRlTHVjaWRlSWNvbiBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZUx1Y2lkZUljb24uanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.js": /*!*****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/defaultAttributes.js ***! \*****************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ defaultAttributes; }\n/* harmony export */ });\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nvar defaultAttributes = {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n width: 24,\r\n height: 24,\r\n viewBox: \"0 0 24 24\",\r\n fill: \"none\",\r\n stroke: \"currentColor\",\r\n strokeWidth: 2,\r\n strokeLinecap: \"round\",\r\n strokeLinejoin: \"round\"\r\n};\r\n\r\n\r\n//# sourceMappingURL=defaultAttributes.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3dDO0FBQ3hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanM/NjFkYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ0Ni4wIC0gSVNDXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLlxyXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cclxuICovXHJcblxyXG52YXIgZGVmYXVsdEF0dHJpYnV0ZXMgPSB7XHJcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICB3aWR0aDogMjQsXHJcbiAgaGVpZ2h0OiAyNCxcclxuICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxyXG4gIGZpbGw6IFwibm9uZVwiLFxyXG4gIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcclxuICBzdHJva2VXaWR0aDogMixcclxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXHJcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxyXG59O1xyXG5cclxuZXhwb3J0IHsgZGVmYXVsdEF0dHJpYnV0ZXMgYXMgZGVmYXVsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0QXR0cmlidXRlcy5qcy5tYXBcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/arrow-left.js": /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/arrow-left.js ***! \****************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ ArrowLeft; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst ArrowLeft = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"ArrowLeft\", [\r\n [\"path\", { d: \"m12 19-7-7 7-7\", key: \"1l729n\" }],\r\n [\"path\", { d: \"M19 12H5\", key: \"x3x0zl\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=arrow-left.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0Esa0JBQWtCLGdFQUFnQjtBQUNsQyxhQUFhLG9DQUFvQztBQUNqRCxhQUFhLDhCQUE4QjtBQUMzQztBQUNBO0FBQ2dDO0FBQ2hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC5qcz84YjIyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24uanMnO1xyXG5cclxuY29uc3QgQXJyb3dMZWZ0ID0gY3JlYXRlTHVjaWRlSWNvbihcIkFycm93TGVmdFwiLCBbXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwibTEyIDE5LTctNyA3LTdcIiwga2V5OiBcIjFsNzI5blwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xOSAxMkg1XCIsIGtleTogXCJ4M3gwemxcIiB9XVxyXG5dKTtcclxuXHJcbmV4cG9ydCB7IEFycm93TGVmdCBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycm93LWxlZnQuanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/arrow-left.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/building.js": /*!**************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/building.js ***! \**************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Building; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Building = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Building\", [\r\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", ry: \"2\", key: \"76otgf\" }],\r\n [\"path\", { d: \"M9 22v-4h6v4\", key: \"r93iot\" }],\r\n [\"path\", { d: \"M8 6h.01\", key: \"1dz90k\" }],\r\n [\"path\", { d: \"M16 6h.01\", key: \"1x0f13\" }],\r\n [\"path\", { d: \"M12 6h.01\", key: \"1vi96p\" }],\r\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\r\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\r\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\r\n [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\r\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\r\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=building.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvYnVpbGRpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzRDtBQUN0RDtBQUNBLGlCQUFpQixnRUFBZ0I7QUFDakMsYUFBYSw0RUFBNEU7QUFDekYsYUFBYSxrQ0FBa0M7QUFDL0MsYUFBYSw4QkFBOEI7QUFDM0MsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSxnQ0FBZ0M7QUFDN0MsYUFBYSxnQ0FBZ0M7QUFDN0MsYUFBYSxnQ0FBZ0M7QUFDN0MsYUFBYSxnQ0FBZ0M7QUFDN0MsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSwrQkFBK0I7QUFDNUM7QUFDQTtBQUMrQjtBQUMvQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL2J1aWxkaW5nLmpzPzVlYzkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NDYuMCAtIElTQ1xyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cclxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbi5qcyc7XHJcblxyXG5jb25zdCBCdWlsZGluZyA9IGNyZWF0ZUx1Y2lkZUljb24oXCJCdWlsZGluZ1wiLCBbXHJcbiAgW1wicmVjdFwiLCB7IHdpZHRoOiBcIjE2XCIsIGhlaWdodDogXCIyMFwiLCB4OiBcIjRcIiwgeTogXCIyXCIsIHJ4OiBcIjJcIiwgcnk6IFwiMlwiLCBrZXk6IFwiNzZvdGdmXCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTkgMjJ2LTRoNnY0XCIsIGtleTogXCJyOTNpb3RcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNOCA2aC4wMVwiLCBrZXk6IFwiMWR6OTBrXCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTE2IDZoLjAxXCIsIGtleTogXCIxeDBmMTNcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNMTIgNmguMDFcIiwga2V5OiBcIjF2aTk2cFwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xMiAxMGguMDFcIiwga2V5OiBcIjFucmFyY1wiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xMiAxNGguMDFcIiwga2V5OiBcIjFldGlsaVwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xNiAxMGguMDFcIiwga2V5OiBcIjFtOTR3elwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xNiAxNGguMDFcIiwga2V5OiBcIjFnYm9md1wiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk04IDEwaC4wMVwiLCBrZXk6IFwiMTljbHQ4XCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTggMTRoLjAxXCIsIGtleTogXCI2NDIzYmhcIiB9XVxyXG5dKTtcclxuXHJcbmV4cG9ydCB7IEJ1aWxkaW5nIGFzIGRlZmF1bHQgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVpbGRpbmcuanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/building.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calculator.js": /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/calculator.js ***! \****************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Calculator; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Calculator = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Calculator\", [\r\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", key: \"1nb95v\" }],\r\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"6\", y2: \"6\", key: \"x4nwl0\" }],\r\n [\"line\", { x1: \"16\", x2: \"16\", y1: \"14\", y2: \"18\", key: \"wjye3r\" }],\r\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\r\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\r\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\r\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\r\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\r\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\r\n [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=calculator.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2FsY3VsYXRvci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0EsbUJBQW1CLGdFQUFnQjtBQUNuQyxhQUFhLG1FQUFtRTtBQUNoRixhQUFhLG9EQUFvRDtBQUNqRSxhQUFhLHVEQUF1RDtBQUNwRSxhQUFhLGdDQUFnQztBQUM3QyxhQUFhLGdDQUFnQztBQUM3QyxhQUFhLCtCQUErQjtBQUM1QyxhQUFhLGdDQUFnQztBQUM3QyxhQUFhLCtCQUErQjtBQUM1QyxhQUFhLGdDQUFnQztBQUM3QyxhQUFhLCtCQUErQjtBQUM1QztBQUNBO0FBQ2lDO0FBQ2pDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2FsY3VsYXRvci5qcz9iOWFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24uanMnO1xyXG5cclxuY29uc3QgQ2FsY3VsYXRvciA9IGNyZWF0ZUx1Y2lkZUljb24oXCJDYWxjdWxhdG9yXCIsIFtcclxuICBbXCJyZWN0XCIsIHsgd2lkdGg6IFwiMTZcIiwgaGVpZ2h0OiBcIjIwXCIsIHg6IFwiNFwiLCB5OiBcIjJcIiwgcng6IFwiMlwiLCBrZXk6IFwiMW5iOTV2XCIgfV0sXHJcbiAgW1wibGluZVwiLCB7IHgxOiBcIjhcIiwgeDI6IFwiMTZcIiwgeTE6IFwiNlwiLCB5MjogXCI2XCIsIGtleTogXCJ4NG53bDBcIiB9XSxcclxuICBbXCJsaW5lXCIsIHsgeDE6IFwiMTZcIiwgeDI6IFwiMTZcIiwgeTE6IFwiMTRcIiwgeTI6IFwiMThcIiwga2V5OiBcIndqeWUzclwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xNiAxMGguMDFcIiwga2V5OiBcIjFtOTR3elwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0xMiAxMGguMDFcIiwga2V5OiBcIjFucmFyY1wiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk04IDEwaC4wMVwiLCBrZXk6IFwiMTljbHQ4XCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTEyIDE0aC4wMVwiLCBrZXk6IFwiMWV0aWxpXCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTggMTRoLjAxXCIsIGtleTogXCI2NDIzYmhcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNMTIgMThoLjAxXCIsIGtleTogXCJtaHlndnVcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNOCAxOGguMDFcIiwga2V5OiBcImxycDM1dFwiIH1dXHJcbl0pO1xyXG5cclxuZXhwb3J0IHsgQ2FsY3VsYXRvciBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhbGN1bGF0b3IuanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calculator.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js": /*!**************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/calendar.js ***! \**************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Calendar; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Calendar = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Calendar\", [\r\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\r\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\r\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\r\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=calendar.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzRDtBQUN0RDtBQUNBLGlCQUFpQixnRUFBZ0I7QUFDakMsYUFBYSw0QkFBNEI7QUFDekMsYUFBYSw2QkFBNkI7QUFDMUMsYUFBYSxtRUFBbUU7QUFDaEYsYUFBYSw4QkFBOEI7QUFDM0M7QUFDQTtBQUMrQjtBQUMvQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLmpzPzdjMDEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NDYuMCAtIElTQ1xyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cclxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbi5qcyc7XHJcblxyXG5jb25zdCBDYWxlbmRhciA9IGNyZWF0ZUx1Y2lkZUljb24oXCJDYWxlbmRhclwiLCBbXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTggMnY0XCIsIGtleTogXCIxY21weW1cIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNMTYgMnY0XCIsIGtleTogXCI0bTgxdmtcIiB9XSxcclxuICBbXCJyZWN0XCIsIHsgd2lkdGg6IFwiMThcIiwgaGVpZ2h0OiBcIjE4XCIsIHg6IFwiM1wiLCB5OiBcIjRcIiwgcng6IFwiMlwiLCBrZXk6IFwiMWhvcGN5XCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTMgMTBoMThcIiwga2V5OiBcIjh0b2VuOFwiIH1dXHJcbl0pO1xyXG5cclxuZXhwb3J0IHsgQ2FsZW5kYXIgYXMgZGVmYXVsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYWxlbmRhci5qcy5tYXBcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/check.js": /*!***********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/check.js ***! \***********************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Check; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Check = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Check\", [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]);\r\n\r\n\r\n//# sourceMappingURL=check.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2hlY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzRDtBQUN0RDtBQUNBLGNBQWMsZ0VBQWdCLHNCQUFzQixxQ0FBcUM7QUFDekY7QUFDNEI7QUFDNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2x1Y2lkZS1yZWFjdC9kaXN0L2VzbS9pY29ucy9jaGVjay5qcz8zYzcwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24uanMnO1xyXG5cclxuY29uc3QgQ2hlY2sgPSBjcmVhdGVMdWNpZGVJY29uKFwiQ2hlY2tcIiwgW1tcInBhdGhcIiwgeyBkOiBcIk0yMCA2IDkgMTdsLTUtNVwiLCBrZXk6IFwiMWdtZjJjXCIgfV1dKTtcclxuXHJcbmV4cG9ydCB7IENoZWNrIGFzIGRlZmF1bHQgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hlY2suanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/check.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/chevron-down.js": /*!******************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/chevron-down.js ***! \******************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ ChevronDown; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst ChevronDown = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"ChevronDown\", [\r\n [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=chevron-down.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1kb3duLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDc0Q7QUFDdEQ7QUFDQSxvQkFBb0IsZ0VBQWdCO0FBQ3BDLGFBQWEsa0NBQWtDO0FBQy9DO0FBQ0E7QUFDa0M7QUFDbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2x1Y2lkZS1yZWFjdC9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWRvd24uanM/NTYwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ0Ni4wIC0gSVNDXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLlxyXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cclxuICovXHJcblxyXG5pbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uLmpzJztcclxuXHJcbmNvbnN0IENoZXZyb25Eb3duID0gY3JlYXRlTHVjaWRlSWNvbihcIkNoZXZyb25Eb3duXCIsIFtcclxuICBbXCJwYXRoXCIsIHsgZDogXCJtNiA5IDYgNiA2LTZcIiwga2V5OiBcInFydW5zbFwiIH1dXHJcbl0pO1xyXG5cclxuZXhwb3J0IHsgQ2hldnJvbkRvd24gYXMgZGVmYXVsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGV2cm9uLWRvd24uanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/chevron-down.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/chevron-up.js": /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/chevron-up.js ***! \****************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ ChevronUp; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst ChevronUp = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"ChevronUp\", [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]]);\r\n\r\n\r\n//# sourceMappingURL=chevron-up.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2hldnJvbi11cC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0Esa0JBQWtCLGdFQUFnQiwwQkFBMEIsb0NBQW9DO0FBQ2hHO0FBQ2dDO0FBQ2hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2hldnJvbi11cC5qcz9hODJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24uanMnO1xyXG5cclxuY29uc3QgQ2hldnJvblVwID0gY3JlYXRlTHVjaWRlSWNvbihcIkNoZXZyb25VcFwiLCBbW1wicGF0aFwiLCB7IGQ6IFwibTE4IDE1LTYtNi02IDZcIiwga2V5OiBcIjE1M3VkelwiIH1dXSk7XHJcblxyXG5leHBvcnQgeyBDaGV2cm9uVXAgYXMgZGVmYXVsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGV2cm9uLXVwLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/chevron-up.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check-big.js": /*!**********************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/circle-check-big.js ***! \**********************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ CircleCheckBig; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst CircleCheckBig = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"CircleCheckBig\", [\r\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\r\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=circle-check-big.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLWJpZy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0EsdUJBQXVCLGdFQUFnQjtBQUN2QyxhQUFhLHFEQUFxRDtBQUNsRSxhQUFhLG9DQUFvQztBQUNqRDtBQUNBO0FBQ3FDO0FBQ3JDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLWJpZy5qcz85MWFkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24uanMnO1xyXG5cclxuY29uc3QgQ2lyY2xlQ2hlY2tCaWcgPSBjcmVhdGVMdWNpZGVJY29uKFwiQ2lyY2xlQ2hlY2tCaWdcIiwgW1xyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0yMS44MDEgMTBBMTAgMTAgMCAxIDEgMTcgMy4zMzVcIiwga2V5OiBcInlwczNjdFwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIm05IDExIDMgM0wyMiA0XCIsIGtleTogXCIxcGZsemxcIiB9XVxyXG5dKTtcclxuXHJcbmV4cG9ydCB7IENpcmNsZUNoZWNrQmlnIGFzIGRlZmF1bHQgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2lyY2xlLWNoZWNrLWJpZy5qcy5tYXBcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check-big.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-help.js": /*!*****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/circle-help.js ***! \*****************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ CircleHelp; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst CircleHelp = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"CircleHelp\", [\r\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\r\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\r\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=circle-help.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWhlbHAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzRDtBQUN0RDtBQUNBLG1CQUFtQixnRUFBZ0I7QUFDbkMsZUFBZSw0Q0FBNEM7QUFDM0QsYUFBYSwwREFBMEQ7QUFDdkUsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQTtBQUNpQztBQUNqQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1oZWxwLmpzP2JhYzkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NDYuMCAtIElTQ1xyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cclxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbi5qcyc7XHJcblxyXG5jb25zdCBDaXJjbGVIZWxwID0gY3JlYXRlTHVjaWRlSWNvbihcIkNpcmNsZUhlbHBcIiwgW1xyXG4gIFtcImNpcmNsZVwiLCB7IGN4OiBcIjEyXCIsIGN5OiBcIjEyXCIsIHI6IFwiMTBcIiwga2V5OiBcIjFtZ2xheVwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgM1wiLCBrZXk6IFwiMXU3NzNzXCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTEyIDE3aC4wMVwiLCBrZXk6IFwicDMycDA1XCIgfV1cclxuXSk7XHJcblxyXG5leHBvcnQgeyBDaXJjbGVIZWxwIGFzIGRlZmF1bHQgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2lyY2xlLWhlbHAuanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-help.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clock.js": /*!***********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/clock.js ***! \***********************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Clock; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Clock = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Clock\", [\r\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\r\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=clock.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2xvY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzRDtBQUN0RDtBQUNBLGNBQWMsZ0VBQWdCO0FBQzlCLGVBQWUsNENBQTRDO0FBQzNELGlCQUFpQiwyQ0FBMkM7QUFDNUQ7QUFDQTtBQUM0QjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL2Nsb2NrLmpzPzA3NzciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NDYuMCAtIElTQ1xyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cclxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbi5qcyc7XHJcblxyXG5jb25zdCBDbG9jayA9IGNyZWF0ZUx1Y2lkZUljb24oXCJDbG9ja1wiLCBbXHJcbiAgW1wiY2lyY2xlXCIsIHsgY3g6IFwiMTJcIiwgY3k6IFwiMTJcIiwgcjogXCIxMFwiLCBrZXk6IFwiMW1nbGF5XCIgfV0sXHJcbiAgW1wicG9seWxpbmVcIiwgeyBwb2ludHM6IFwiMTIgNiAxMiAxMiAxNiAxNFwiLCBrZXk6IFwiNjhlc2d2XCIgfV1cclxuXSk7XHJcblxyXG5leHBvcnQgeyBDbG9jayBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsb2NrLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clock.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/cookie.js": /*!************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/cookie.js ***! \************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Cookie; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Cookie = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Cookie\", [\r\n [\"path\", { d: \"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\", key: \"laymnq\" }],\r\n [\"path\", { d: \"M8.5 8.5v.01\", key: \"ue8clq\" }],\r\n [\"path\", { d: \"M16 15.5v.01\", key: \"14dtrp\" }],\r\n [\"path\", { d: \"M12 12v.01\", key: \"u5ubse\" }],\r\n [\"path\", { d: \"M11 17v.01\", key: \"1hyl5a\" }],\r\n [\"path\", { d: \"M7 14v.01\", key: \"uct60s\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=cookie.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY29va2llLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDc0Q7QUFDdEQ7QUFDQSxlQUFlLGdFQUFnQjtBQUMvQixhQUFhLHlFQUF5RTtBQUN0RixhQUFhLGtDQUFrQztBQUMvQyxhQUFhLGtDQUFrQztBQUMvQyxhQUFhLGdDQUFnQztBQUM3QyxhQUFhLGdDQUFnQztBQUM3QyxhQUFhLCtCQUErQjtBQUM1QztBQUNBO0FBQzZCO0FBQzdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY29va2llLmpzPzQ1ZDAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NDYuMCAtIElTQ1xyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cclxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbi5qcyc7XHJcblxyXG5jb25zdCBDb29raWUgPSBjcmVhdGVMdWNpZGVJY29uKFwiQ29va2llXCIsIFtcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNMTIgMmExMCAxMCAwIDEgMCAxMCAxMCA0IDQgMCAwIDEtNS01IDQgNCAwIDAgMS01LTVcIiwga2V5OiBcImxheW1ucVwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk04LjUgOC41di4wMVwiLCBrZXk6IFwidWU4Y2xxXCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTE2IDE1LjV2LjAxXCIsIGtleTogXCIxNGR0cnBcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNMTIgMTJ2LjAxXCIsIGtleTogXCJ1NXVic2VcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNMTEgMTd2LjAxXCIsIGtleTogXCIxaHlsNWFcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNNyAxNHYuMDFcIiwga2V5OiBcInVjdDYwc1wiIH1dXHJcbl0pO1xyXG5cclxuZXhwb3J0IHsgQ29va2llIGFzIGRlZmF1bHQgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29va2llLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/cookie.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/info.js": /*!**********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/info.js ***! \**********************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Info; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Info = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Info\", [\r\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\r\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\r\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=info.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvaW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0EsYUFBYSxnRUFBZ0I7QUFDN0IsZUFBZSw0Q0FBNEM7QUFDM0QsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSwrQkFBK0I7QUFDNUM7QUFDQTtBQUMyQjtBQUMzQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL2luZm8uanM/Y2JjZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ0Ni4wIC0gSVNDXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLlxyXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cclxuICovXHJcblxyXG5pbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uLmpzJztcclxuXHJcbmNvbnN0IEluZm8gPSBjcmVhdGVMdWNpZGVJY29uKFwiSW5mb1wiLCBbXHJcbiAgW1wiY2lyY2xlXCIsIHsgY3g6IFwiMTJcIiwgY3k6IFwiMTJcIiwgcjogXCIxMFwiLCBrZXk6IFwiMW1nbGF5XCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTEyIDE2di00XCIsIGtleTogXCIxZHRpZnVcIiB9XSxcclxuICBbXCJwYXRoXCIsIHsgZDogXCJNMTIgOGguMDFcIiwga2V5OiBcImU5Ym9pM1wiIH1dXHJcbl0pO1xyXG5cclxuZXhwb3J0IHsgSW5mbyBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZm8uanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/info.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/loader-circle.js": /*!*******************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/loader-circle.js ***! \*******************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ LoaderCircle; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst LoaderCircle = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"LoaderCircle\", [\r\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=loader-circle.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbG9hZGVyLWNpcmNsZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0EscUJBQXFCLGdFQUFnQjtBQUNyQyxhQUFhLGlEQUFpRDtBQUM5RDtBQUNBO0FBQ21DO0FBQ25DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbG9hZGVyLWNpcmNsZS5qcz84ZjhjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24uanMnO1xyXG5cclxuY29uc3QgTG9hZGVyQ2lyY2xlID0gY3JlYXRlTHVjaWRlSWNvbihcIkxvYWRlckNpcmNsZVwiLCBbXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTIxIDEyYTkgOSAwIDEgMS02LjIxOS04LjU2XCIsIGtleTogXCIxM3phbGRcIiB9XVxyXG5dKTtcclxuXHJcbmV4cG9ydCB7IExvYWRlckNpcmNsZSBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvYWRlci1jaXJjbGUuanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/loader-circle.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.js": /*!**********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/mail.js ***! \**********************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Mail; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Mail = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Mail\", [\r\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }],\r\n [\"path\", { d: \"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\", key: \"1ocrg3\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=mail.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbWFpbC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0EsYUFBYSxnRUFBZ0I7QUFDN0IsYUFBYSxtRUFBbUU7QUFDaEYsYUFBYSwrREFBK0Q7QUFDNUU7QUFDQTtBQUMyQjtBQUMzQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL21haWwuanM/NzIzYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ0Ni4wIC0gSVNDXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLlxyXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cclxuICovXHJcblxyXG5pbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uLmpzJztcclxuXHJcbmNvbnN0IE1haWwgPSBjcmVhdGVMdWNpZGVJY29uKFwiTWFpbFwiLCBbXHJcbiAgW1wicmVjdFwiLCB7IHdpZHRoOiBcIjIwXCIsIGhlaWdodDogXCIxNlwiLCB4OiBcIjJcIiwgeTogXCI0XCIsIHJ4OiBcIjJcIiwga2V5OiBcIjE4bjNrMVwiIH1dLFxyXG4gIFtcInBhdGhcIiwgeyBkOiBcIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3XCIsIGtleTogXCIxb2NyZzNcIiB9XVxyXG5dKTtcclxuXHJcbmV4cG9ydCB7IE1haWwgYXMgZGVmYXVsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWlsLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/message-square.js": /*!********************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/message-square.js ***! \********************************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ MessageSquare; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst MessageSquare = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"MessageSquare\", [\r\n [\"path\", { d: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\", key: \"1lielz\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=message-square.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzRDtBQUN0RDtBQUNBLHNCQUFzQixnRUFBZ0I7QUFDdEMsYUFBYSxtRkFBbUY7QUFDaEc7QUFDQTtBQUNvQztBQUNwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLmpzPzJmODIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NDYuMCAtIElTQ1xyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cclxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbi5qcyc7XHJcblxyXG5jb25zdCBNZXNzYWdlU3F1YXJlID0gY3JlYXRlTHVjaWRlSWNvbihcIk1lc3NhZ2VTcXVhcmVcIiwgW1xyXG4gIFtcInBhdGhcIiwgeyBkOiBcIk0yMSAxNWEyIDIgMCAwIDEtMiAySDdsLTQgNFY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnpcIiwga2V5OiBcIjFsaWVselwiIH1dXHJcbl0pO1xyXG5cclxuZXhwb3J0IHsgTWVzc2FnZVNxdWFyZSBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lc3NhZ2Utc3F1YXJlLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/message-square.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/phone.js": /*!***********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/phone.js ***! \***********************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ Phone; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst Phone = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Phone\", [\r\n [\r\n \"path\",\r\n {\r\n d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\",\r\n key: \"foiqr5\"\r\n }\r\n ]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=phone.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvcGhvbmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzRDtBQUN0RDtBQUNBLGNBQWMsZ0VBQWdCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUM0QjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL3Bob25lLmpzPzVhN2EiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIGx1Y2lkZS1yZWFjdCB2MC40NDYuMCAtIElTQ1xyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS5cclxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbi5qcyc7XHJcblxyXG5jb25zdCBQaG9uZSA9IGNyZWF0ZUx1Y2lkZUljb24oXCJQaG9uZVwiLCBbXHJcbiAgW1xyXG4gICAgXCJwYXRoXCIsXHJcbiAgICB7XHJcbiAgICAgIGQ6IFwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCIsXHJcbiAgICAgIGtleTogXCJmb2lxcjVcIlxyXG4gICAgfVxyXG4gIF1cclxuXSk7XHJcblxyXG5leHBvcnQgeyBQaG9uZSBhcyBkZWZhdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBob25lLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/phone.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/user.js": /*!**********************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/user.js ***! \**********************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ User; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst User = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"User\", [\r\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\r\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=user.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvdXNlci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0EsYUFBYSxnRUFBZ0I7QUFDN0IsYUFBYSwrREFBK0Q7QUFDNUUsZUFBZSwwQ0FBMEM7QUFDekQ7QUFDQTtBQUMyQjtBQUMzQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL3VzZXIuanM/YmY2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ0Ni4wIC0gSVNDXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLlxyXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cclxuICovXHJcblxyXG5pbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uLmpzJztcclxuXHJcbmNvbnN0IFVzZXIgPSBjcmVhdGVMdWNpZGVJY29uKFwiVXNlclwiLCBbXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTE5IDIxdi0yYTQgNCAwIDAgMC00LTRIOWE0IDQgMCAwIDAtNCA0djJcIiwga2V5OiBcIjk3NWtlbFwiIH1dLFxyXG4gIFtcImNpcmNsZVwiLCB7IGN4OiBcIjEyXCIsIGN5OiBcIjdcIiwgcjogXCI0XCIsIGtleTogXCIxN3lzMGRcIiB9XVxyXG5dKTtcclxuXHJcbmV4cG9ydCB7IFVzZXIgYXMgZGVmYXVsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/user.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js": /*!*******************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/icons/x.js ***! \*******************************************************/ /***/ (function(__unused_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 */ \"default\": function() { return /* binding */ X; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nconst X = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"X\", [\r\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\r\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\r\n]);\r\n\r\n\r\n//# sourceMappingURL=x.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMveC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3NEO0FBQ3REO0FBQ0EsVUFBVSxnRUFBZ0I7QUFDMUIsYUFBYSxnQ0FBZ0M7QUFDN0MsYUFBYSxnQ0FBZ0M7QUFDN0M7QUFDQTtBQUN3QjtBQUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbHVjaWRlLXJlYWN0L2Rpc3QvZXNtL2ljb25zL3guanM/MWIzYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgbHVjaWRlLXJlYWN0IHYwLjQ0Ni4wIC0gSVNDXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLlxyXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cclxuICovXHJcblxyXG5pbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uLmpzJztcclxuXHJcbmNvbnN0IFggPSBjcmVhdGVMdWNpZGVJY29uKFwiWFwiLCBbXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwiTTE4IDYgNiAxOFwiLCBrZXk6IFwiMWJsNWY4XCIgfV0sXHJcbiAgW1wicGF0aFwiLCB7IGQ6IFwibTYgNiAxMiAxMlwiLCBrZXk6IFwiZDhiazZ2XCIgfV1cclxuXSk7XHJcblxyXG5leHBvcnQgeyBYIGFzIGRlZmF1bHQgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eC5qcy5tYXBcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js": /*!****************************************************************!*\ !*** ./node_modules/lucide-react/dist/esm/shared/src/utils.js ***! \****************************************************************/ /***/ (function(__unused_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 */ mergeClasses: function() { return /* binding */ mergeClasses; },\n/* harmony export */ toKebabCase: function() { return /* binding */ toKebabCase; }\n/* harmony export */ });\n/**\r\n * @license lucide-react v0.446.0 - ISC\r\n *\r\n * This source code is licensed under the ISC license.\r\n * See the LICENSE file in the root directory of this source tree.\r\n */\r\n\r\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\r\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\r\n return Boolean(className) && array.indexOf(className) === index;\r\n}).join(\" \");\r\n\r\n\r\n//# sourceMappingURL=utils.js.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ3FDO0FBQ3JDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy5qcz85OTU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBsdWNpZGUtcmVhY3QgdjAuNDQ2LjAgLSBJU0NcclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuXHJcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbmNvbnN0IHRvS2ViYWJDYXNlID0gKHN0cmluZykgPT4gc3RyaW5nLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csIFwiJDEtJDJcIikudG9Mb3dlckNhc2UoKTtcclxuY29uc3QgbWVyZ2VDbGFzc2VzID0gKC4uLmNsYXNzZXMpID0+IGNsYXNzZXMuZmlsdGVyKChjbGFzc05hbWUsIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gIHJldHVybiBCb29sZWFuKGNsYXNzTmFtZSkgJiYgYXJyYXkuaW5kZXhPZihjbGFzc05hbWUpID09PSBpbmRleDtcclxufSkuam9pbihcIiBcIik7XHJcblxyXG5leHBvcnQgeyBtZXJnZUNsYXNzZXMsIHRvS2ViYWJDYXNlIH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js": /*!***********************************************************!*\ !*** ./node_modules/next/dist/build/polyfills/process.js ***! \***********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\nvar _global_process, _global_process1;\r\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__(/*! ../../compiled/process */ \"(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\");\r\n\r\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyx3R0FBd0I7QUFDclA7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wcm9jZXNzLmpzPzE2MjkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfZ2xvYmFsX3Byb2Nlc3MsIF9nbG9iYWxfcHJvY2VzczE7XHJcbm1vZHVsZS5leHBvcnRzID0gKChfZ2xvYmFsX3Byb2Nlc3MgPSBnbG9iYWwucHJvY2VzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9nbG9iYWxfcHJvY2Vzcy5lbnYpICYmIHR5cGVvZiAoKF9nbG9iYWxfcHJvY2VzczEgPSBnbG9iYWwucHJvY2VzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9nbG9iYWxfcHJvY2VzczEuZW52KSA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbC5wcm9jZXNzIDogcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVkL3Byb2Nlc3NcIik7XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5Candre%5CDocuments%5CGitHub%5CWebklar.com%5Capp%5Cpage.tsx&server=false!": /*!****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5Candre%5CDocuments%5CGitHub%5CWebklar.com%5Capp%5Cpage.tsx&server=false! ***! \****************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/page.tsx */ \"(app-pages-browser)/./app/page.tsx\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNhbmRyZSU1Q0RvY3VtZW50cyU1Q0dpdEh1YiU1Q1dlYmtsYXIuY29tJTVDYXBwJTVDcGFnZS50c3gmc2VydmVyPWZhbHNlISIsIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvPzVhMTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxhbmRyZVxcXFxEb2N1bWVudHNcXFxcR2l0SHViXFxcXFdlYmtsYXIuY29tXFxcXGFwcFxcXFxwYWdlLnRzeFwiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5Candre%5CDocuments%5CGitHub%5CWebklar.com%5Capp%5Cpage.tsx&server=false!\n")); /***/ }), /***/ "(app-pages-browser)/./components/GlassSurface.css": /*!*************************************!*\ !*** ./components/GlassSurface.css ***! \*************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"59a2502fb3b1\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvR2xhc3NTdXJmYWNlLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9HbGFzc1N1cmZhY2UuY3NzPzUwODUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1OWEyNTAyZmIzYjFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/GlassSurface.css\n")); /***/ }), /***/ "(app-pages-browser)/./components/LogoLoop.css": /*!*********************************!*\ !*** ./components/LogoLoop.css ***! \*********************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"2483d3b8c821\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTG9nb0xvb3AuY3NzIiwibWFwcGluZ3MiOiI7QUFBQSwrREFBZSxjQUFjO0FBQzdCLElBQUksSUFBVSxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL0xvZ29Mb29wLmNzcz83NDNjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiMjQ4M2QzYjhjODIxXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/LogoLoop.css\n")); /***/ }), /***/ "(app-pages-browser)/./components/PillNav.css": /*!********************************!*\ !*** ./components/PillNav.css ***! \********************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"2ba557b5124e\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvUGlsbE5hdi5jc3MiLCJtYXBwaW5ncyI6IjtBQUFBLCtEQUFlLGNBQWM7QUFDN0IsSUFBSSxJQUFVLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvUGlsbE5hdi5jc3M/YWI4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjJiYTU1N2I1MTI0ZVwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/PillNav.css\n")); /***/ }), /***/ "(app-pages-browser)/./app/page.tsx": /*!**********************!*\ !*** ./app/page.tsx ***! \**********************/ /***/ (function(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 */ \"default\": function() { return /* binding */ AboutServicePage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_Calendar_Cookie_lucide_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! __barrel_optimize__?names=Calendar,Cookie!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/cookie.js\");\n/* harmony import */ var _barrel_optimize_names_Calendar_Cookie_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=Calendar,Cookie!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* harmony import */ var _components_ProtectedAppointmentBooking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ProtectedAppointmentBooking */ \"(app-pages-browser)/./components/ProtectedAppointmentBooking.tsx\");\n/* harmony import */ var _components_AppointmentStatus__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/AppointmentStatus */ \"(app-pages-browser)/./components/AppointmentStatus.tsx\");\n/* harmony import */ var _components_PriceCalculator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/PriceCalculator */ \"(app-pages-browser)/./components/PriceCalculator.tsx\");\n/* harmony import */ var _components_SpinningNumbers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/SpinningNumbers */ \"(app-pages-browser)/./components/SpinningNumbers.tsx\");\n/* harmony import */ var _components_GlassSurface__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/GlassSurface */ \"(app-pages-browser)/./components/GlassSurface.tsx\");\n/* harmony import */ var _components_LogoLoop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/components/LogoLoop */ \"(app-pages-browser)/./components/LogoLoop.tsx\");\n/* harmony import */ var _components_PillNav__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/PillNav */ \"(app-pages-browser)/./components/PillNav.tsx\");\n/* harmony import */ var _components_ui_timeline_demo__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/components/ui/timeline-demo */ \"(app-pages-browser)/./components/ui/timeline-demo.tsx\");\n/* harmony import */ var _components_ui_card_hover_effect__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/components/ui/card-hover-effect */ \"(app-pages-browser)/./components/ui/card-hover-effect.tsx\");\n/* harmony import */ var _components_ui_container_scroll_animation_demo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/components/ui/container-scroll-animation-demo */ \"(app-pages-browser)/./components/ui/container-scroll-animation-demo.tsx\");\n/* harmony import */ var _components_ui_background_beams__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/components/ui/background-beams */ \"(app-pages-browser)/./components/ui/background-beams.tsx\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_15__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Scroll animation hook\nconst useScrollAnimation = ()=>{\n _s();\n const [scrollY, setScrollY] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const handleScroll = ()=>setScrollY(window.scrollY);\n window.addEventListener(\"scroll\", handleScroll);\n return ()=>window.removeEventListener(\"scroll\", handleScroll);\n }, []);\n return scrollY;\n};\n_s(useScrollAnimation, \"eTR5W6wH45bVtWbD0ho0jkNrbDM=\");\n// Intersection Observer hook for fade-in animations\nconst useInView = function() {\n let threshold = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0.1;\n _s1();\n const [isInView, setIsInView] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const ref = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const observer = new IntersectionObserver((param)=>{\n let [entry] = param;\n if (entry.isIntersecting) {\n setIsInView(true);\n }\n }, {\n threshold\n });\n if (ref.current) {\n observer.observe(ref.current);\n }\n return ()=>observer.disconnect();\n }, [\n threshold\n ]);\n return [\n ref,\n isInView\n ];\n};\n_s1(useInView, \"jDhkbTO/bmAMmPJ/m2kggqex+PM=\");\n// Cookie Button Component\nconst CookieButton = ()=>{\n _s2();\n const [showBanner, setShowBanner] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const handleAccept = ()=>{\n setShowBanner(false);\n // Add cookie acceptance logic here\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowBanner(true),\n className: \"fixed bottom-6 left-6 z-50 w-14 h-14 rounded-full flex items-center justify-center shadow-lg transition-all duration-300 hover:scale-110\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calendar_Cookie_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"w-6 h-6 text-white\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 75,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 70,\n columnNumber: 7\n }, undefined),\n showBanner && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/50 backdrop-blur-sm z-50 flex items-center justify-center p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-md w-full p-6 rounded-3xl shadow-2xl\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calendar_Cookie_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"w-6 h-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 86,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Cookie-Einstellungen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 87,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 85,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mb-6 text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Wir verwenden Cookies, um Ihre Erfahrung zu verbessern. Durch die Nutzung unserer Website stimmen Sie unserer Datenschutzrichtlinie zu.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 91,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: handleAccept,\n className: \"flex-1 rounded-full font-medium\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: \"Akzeptieren\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 95,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: ()=>setShowBanner(false),\n variant: \"outline\",\n className: \"flex-1 rounded-full\",\n style: {\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Ablehnen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 105,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 94,\n columnNumber: 13\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 80,\n columnNumber: 9\n }, undefined)\n ]\n }, void 0, true);\n};\n_s2(CookieButton, \"EN9W71IQ6xIaJdu8pSen4afephI=\");\n_c = CookieButton;\nfunction AboutServicePage() {\n _s3();\n const scrollY = useScrollAnimation();\n const [heroRef, heroInView] = useInView();\n const [servicesRef, servicesInView] = useInView();\n const [processRef, processInView] = useInView();\n const [pricingRef, pricingInView] = useInView();\n const [aboutRef, aboutInView] = useInView();\n const [contactRef, contactInView] = useInView();\n const navWrapperRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const navInnerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const [navOffset, setNavOffset] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const navOffsetRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(0);\n const navExpandedRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(false);\n const animationFrameRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n navOffsetRef.current = navOffset;\n }, [\n navOffset\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n return ()=>{\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n };\n }, []);\n const animateOffset = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((target)=>{\n if (!Number.isFinite(target)) return;\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n animationFrameRef.current = null;\n }\n const startValue = navOffsetRef.current;\n const delta = target - startValue;\n if (Math.abs(delta) < 0.5) {\n navOffsetRef.current = target;\n setNavOffset(target);\n return;\n }\n const duration = 520;\n const startTime = performance.now();\n const easeOutCubic = (t)=>1 - Math.pow(1 - t, 3);\n const step = (now)=>{\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutCubic(progress);\n const value = startValue + delta * eased;\n navOffsetRef.current = value;\n setNavOffset(value);\n if (progress < 1) {\n animationFrameRef.current = requestAnimationFrame(step);\n } else {\n animationFrameRef.current = null;\n }\n };\n animationFrameRef.current = requestAnimationFrame(step);\n }, []);\n const calculateNavOffset = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function() {\n let mode = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : \"animate\", expandedOverride = arguments.length > 1 ? arguments[1] : void 0;\n if (!navWrapperRef.current || !navInnerRef.current) return;\n const expanded = expandedOverride !== null && expandedOverride !== void 0 ? expandedOverride : navExpandedRef.current;\n const wrapperWidth = navWrapperRef.current.clientWidth;\n const navWidth = navInnerRef.current.offsetWidth;\n const offset = expanded ? Math.max(0, (wrapperWidth - navWidth) / 2) : 0;\n if (!Number.isFinite(offset)) return;\n if (mode === \"immediate\") {\n navOffsetRef.current = offset;\n setNavOffset(offset);\n } else {\n animateOffset(offset);\n }\n }, [\n animateOffset\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n calculateNavOffset(\"immediate\", navExpandedRef.current);\n const handleResize = ()=>calculateNavOffset(\"immediate\", navExpandedRef.current);\n window.addEventListener(\"resize\", handleResize);\n return ()=>window.removeEventListener(\"resize\", handleResize);\n }, [\n calculateNavOffset\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!navInnerRef.current || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(()=>{\n calculateNavOffset(\"immediate\", navExpandedRef.current);\n });\n observer.observe(navInnerRef.current);\n return ()=>observer.disconnect();\n }, [\n calculateNavOffset\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const wrapper = navWrapperRef.current;\n if (!wrapper) return;\n const handleTransitionEnd = (event)=>{\n if (event.propertyName === \"max-width\" || event.propertyName === \"width\" || event.propertyName === \"transform\") {\n calculateNavOffset(navExpandedRef.current ? \"animate\" : \"immediate\", navExpandedRef.current);\n }\n };\n wrapper.addEventListener(\"transitionend\", handleTransitionEnd);\n return ()=>wrapper.removeEventListener(\"transitionend\", handleTransitionEnd);\n }, [\n calculateNavOffset\n ]);\n // Partner Logos für LogoLoop\n const partnerLogos = [\n {\n node: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n width: 96,\n height: 96,\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"16\",\n cy: \"16\",\n r: \"4\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 242,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"24\",\n cy: \"24\",\n r: \"4\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 243,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"32\",\n cy: \"32\",\n r: \"4\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 244,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M16 16L24 24M24 24L32 32\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\",\n strokeLinecap: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 24L24 12L36 24\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 246,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 240,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n fontSize: \"14px\",\n fontWeight: \"600\",\n whiteSpace: \"nowrap\"\n },\n children: \"Traefik\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 248,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 239,\n columnNumber: 9\n }, this),\n title: \"Traefik\",\n href: \"https://traefik.io\"\n },\n {\n node: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n width: 96,\n height: 96,\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"24\",\n cy: \"24\",\n r: \"16\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"3\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 259,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8 24C8 18 12 14 24 14C36 14 40 18 40 24C40 30 36 34 24 34C12 34 8 30 8 24Z\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 260,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M24 8C24 8 18 14 18 20C18 26 24 32 24 32\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 261,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 257,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n fontSize: \"14px\",\n fontWeight: \"600\",\n whiteSpace: \"nowrap\"\n },\n children: \"Porkbun\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 263,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 256,\n columnNumber: 9\n }, this),\n title: \"Porkbun\",\n href: \"https://porkbun.com\"\n },\n {\n node: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n width: 96,\n height: 96,\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"16\",\n cy: \"16\",\n r: \"5\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 274,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"32\",\n cy: \"16\",\n r: \"5\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 275,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"16\",\n cy: \"32\",\n r: \"5\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 276,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"32\",\n cy: \"32\",\n r: \"5\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 277,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M21 16L27 16M16 21L16 27M21 32L27 32\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\",\n strokeLinecap: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 278,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 272,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n fontSize: \"14px\",\n fontWeight: \"600\",\n whiteSpace: \"nowrap\"\n },\n children: \"n8n\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 280,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 271,\n columnNumber: 9\n }, this),\n title: \"n8n\",\n href: \"https://n8n.io\"\n },\n {\n node: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n width: 96,\n height: 96,\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8 24Q16 16 24 24T40 24\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"3\",\n strokeLinecap: \"round\",\n fill: \"none\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 291,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M10 28Q18 20 26 28T42 28\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"3\",\n strokeLinecap: \"round\",\n fill: \"none\",\n opacity: \"0.7\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"24\",\n cy: \"24\",\n r: \"2\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 293,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 289,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n fontSize: \"14px\",\n fontWeight: \"600\",\n whiteSpace: \"nowrap\"\n },\n children: \"Mistral AI\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 295,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 288,\n columnNumber: 9\n }, this),\n title: \"Mistral AI\",\n href: \"https://mistral.ai\"\n },\n {\n node: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n width: 96,\n height: 96,\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"12\",\n y: \"14\",\n width: \"24\",\n height: \"20\",\n rx: \"2\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"3\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 306,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M16 20H32M16 24H32M16 28H28\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\",\n strokeLinecap: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 307,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"36\",\n cy: \"18\",\n r: \"3\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 308,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 304,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n fontSize: \"14px\",\n fontWeight: \"600\",\n whiteSpace: \"nowrap\"\n },\n children: \"Hetzner\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 310,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 303,\n columnNumber: 9\n }, this),\n title: \"Hetzner\",\n href: \"https://www.hetzner.com\"\n },\n {\n node: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n width: 96,\n height: 96,\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"12\",\n y: \"12\",\n width: \"24\",\n height: \"24\",\n rx: \"4\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"3\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 321,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M18 20L24 24L18 28\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 322,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M28 20L30 24L28 28\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\",\n strokeLinecap: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 323,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 319,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n fontSize: \"14px\",\n fontWeight: \"600\",\n whiteSpace: \"nowrap\"\n },\n children: \"Cursor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 325,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 318,\n columnNumber: 9\n }, this),\n title: \"Cursor AI\",\n href: \"https://cursor.sh\"\n },\n {\n node: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n width: 96,\n height: 96,\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"14\",\n y: \"10\",\n width: \"20\",\n height: \"28\",\n rx: \"2\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"3\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M14 18H34M14 24H34M14 30H28\",\n stroke: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n strokeWidth: \"2\",\n strokeLinecap: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 337,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"32\",\n cy: \"14\",\n r: \"2\",\n fill: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 338,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 334,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n fontSize: \"14px\",\n fontWeight: \"600\",\n whiteSpace: \"nowrap\"\n },\n children: \"Appwrite\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 340,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 333,\n columnNumber: 9\n }, this),\n title: \"Appwrite\",\n href: \"https://appwrite.io\"\n }\n ];\n const valueProps = [\n {\n title: \"Zeitersparnis\",\n description: \"Wir \\xfcbernehmen den digitalen Teil, Sie konzentrieren sich aufs Gesch\\xe4ft\",\n link: \"#zeitersparnis\"\n },\n {\n title: \"Kompetenz & Erfahrung\",\n description: \"Technisch stark, klar in der Umsetzung\",\n link: \"#kompetenz-erfahrung\"\n },\n {\n title: \"Ma\\xdfgeschneiderte L\\xf6sungen\",\n description: \"Keine Templates, sondern individuelle Umsetzung\",\n link: \"#massgeschneiderte-loesungen\"\n },\n {\n title: \"Stressfreies Webmanagement\",\n description: \"Ein Ansprechpartner f\\xfcr alles\",\n link: \"#stressfreies-webmanagement\"\n }\n ];\n const navIsExpanded = scrollY > 40;\n const previousNavState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(navIsExpanded);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const previous = previousNavState.current;\n previousNavState.current = navIsExpanded;\n navExpandedRef.current = navIsExpanded;\n let raf1 = null;\n let raf2 = null;\n let timeoutId = null;\n if (navIsExpanded) {\n if (previous === false) {\n raf1 = requestAnimationFrame(()=>{\n calculateNavOffset(\"animate\", true);\n });\n raf2 = requestAnimationFrame(()=>{\n calculateNavOffset(\"animate\", true);\n });\n timeoutId = window.setTimeout(()=>{\n calculateNavOffset(\"animate\", true);\n }, 320);\n } else {\n calculateNavOffset(\"immediate\", true);\n }\n } else {\n animateOffset(0);\n }\n return ()=>{\n if (raf1 !== null) cancelAnimationFrame(raf1);\n if (raf2 !== null) cancelAnimationFrame(raf2);\n if (timeoutId !== null) window.clearTimeout(timeoutId);\n };\n }, [\n navIsExpanded,\n calculateNavOffset,\n animateOffset\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen overflow-hidden\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed left-0 right-0 z-40 px-4 top-4 transition-all duration-500\",\n style: {\n transitionTimingFunction: \"cubic-bezier(0.22, 1, 0.36, 1)\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full mx-auto transition-all duration-500 ease-out\",\n style: {\n maxWidth: navIsExpanded ? \"72rem\" : \"38rem\",\n width: navIsExpanded ? \"100%\" : \"96%\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_GlassSurface__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n width: \"100%\",\n height: \"auto\",\n borderRadius: 9999,\n displace: 2.0,\n backgroundOpacity: 0.3,\n className: \"w-full transition-all duration-500 ease-out\",\n style: {\n minHeight: \"70px\",\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary, \"66\"),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0.5rem 1.5rem\",\n transition: \"backdrop-filter 0.45s ease\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: navWrapperRef,\n className: \"relative w-full flex items-center justify-center transition-all duration-500\",\n style: {\n transitionTimingFunction: \"cubic-bezier(0.22, 1, 0.36, 1)\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: navInnerRef,\n className: \"inline-flex transition-all duration-500\",\n style: {\n transform: navIsExpanded ? \"translateX(-\".concat(navOffset, \"px)\") : \"translateX(0)\",\n transitionTimingFunction: \"cubic-bezier(0.22, 1, 0.36, 1)\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_PillNav__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n logo: \"/WebKlarLogo.png\",\n logoAlt: \"Webklar Logo\",\n items: [\n {\n label: \"\\xdcber uns\",\n href: \"#about\"\n },\n {\n label: \"Leistungen\",\n href: \"#services\"\n },\n {\n label: \"Unsere Abl\\xe4ufe\",\n href: \"#process\"\n }\n ],\n activeHref: \"#\",\n baseColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary,\n pillColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n hoveredPillTextColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n pillTextColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary,\n className: \"pill-nav-custom\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 459,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 451,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:block absolute right-0 transition-all duration-500 overflow-hidden\",\n style: {\n opacity: navIsExpanded ? 1 : 0,\n maxWidth: navIsExpanded ? \"200px\" : \"0px\",\n pointerEvents: navIsExpanded ? \"auto\" : \"none\",\n transform: navIsExpanded ? \"translateX(0)\" : \"translateX(16px)\",\n transitionTimingFunction: \"cubic-bezier(0.22, 1, 0.36, 1)\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_15___default()), {\n href: \"/kontakte\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n className: \"rounded-full text-sm font-semibold px-3 sm:px-5 py-1.5 shadow-lg hover:shadow-xl transition-all duration-300 hover:scale-105 btn-enhanced pulse-glow\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: \"Kontakt\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 487,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 486,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 476,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 443,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 426,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 419,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 413,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"hero\",\n className: \"relative h-screen flex items-center justify-center overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 z-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"video\", {\n autoPlay: true,\n muted: true,\n loop: true,\n playsInline: true,\n className: \"w-full h-full object-cover\",\n style: {\n filter: \"blur(8px)\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"source\", {\n src: \"/path/to/your/background-video.mp4\",\n type: \"video/mp4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 509,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 501,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 backdrop-blur-sm\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary, \"CC, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary, \"CC)\")\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 511,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 500,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: heroRef,\n className: \"relative z-20 px-4 sm:px-8 pt-24 sm:pt-28 pb-20 sm:pb-24 max-w-7xl mx-auto text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-4xl sm:text-6xl md:text-8xl font-bold mb-6 sm:mb-8 transition-all duration-1000 \".concat(heroInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: \"webklar – das Web ma\\xdfgeschneidert auf Ihr Unternehmen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 525,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 522,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap justify-center gap-2 sm:gap-4 mb-8 sm:mb-12 text-xs sm:text-sm mt-6 transition-all duration-1000 delay-300 \".concat(heroInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n children: [\n \"Strategieberatung\",\n \"UX/UI Design\",\n \"Entwicklung\",\n \"SEO & Support\"\n ].map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 sm:px-4 py-2 rounded-full backdrop-blur-sm border\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"80\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: item\n }, item, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 534,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 530,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col sm:flex-row items-center justify-center gap-4 sm:gap-6 transition-all duration-1000 delay-500 \".concat(heroInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: ()=>{\n var _document_getElementById;\n return (_document_getElementById = document.getElementById(\"contact\")) === null || _document_getElementById === void 0 ? void 0 : _document_getElementById.scrollIntoView({\n behavior: \"smooth\"\n });\n },\n className: \"w-full sm:w-auto px-6 sm:px-8 py-3 sm:py-4 rounded-full flex items-center justify-center space-x-3 text-base sm:text-lg font-semibold shadow-2xl hover:shadow-3xl transition-all duration-300 hover:scale-105 btn-enhanced hover-lift\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calendar_Cookie_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"w-5 sm:w-6 h-5 sm:h-6\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 559,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Kostenlosen Termin buchen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 560,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 551,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 548,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 sm:mt-12 px-4 sm:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n position: \"relative\",\n overflow: \"visible\",\n maxWidth: \"100%\"\n },\n className: \"logo-loop-container\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n height: \"180px\",\n position: \"relative\",\n width: \"100%\",\n paddingBottom: \"30px\",\n overflow: \"hidden\"\n },\n className: \"logo-loop-inner\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_LogoLoop__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n logos: partnerLogos,\n speed: 60,\n direction: \"left\",\n logoHeight: 140,\n gap: 100,\n pauseOnHover: true,\n scaleOnHover: true,\n ariaLabel: \"Technology partners\",\n style: {\n width: \"100%\"\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 568,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 567,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 566,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 565,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 521,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 498,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"about\",\n ref: aboutRef,\n className: \"relative px-4 sm:px-8 py-12 sm:py-20 rounded-t-[2rem] sm:rounded-t-[3rem] rounded-b-[2rem] sm:rounded-b-[3rem] mx-2 sm:mx-4 backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F0\"),\n position: \"relative\",\n zIndex: 10\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid lg:grid-cols-2 gap-8 sm:gap-16 items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative order-2 lg:order-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_SpinningNumbers__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 596,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 595,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"order-1 lg:order-2 transition-all duration-1000 w-full flex flex-col justify-center \".concat(aboutInView ? \"opacity-100 translate-x-0\" : \"opacity-0 translate-x-10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl sm:text-5xl md:text-6xl font-bold mb-6 sm:mb-8 leading-tight whitespace-nowrap\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block\",\n children: \"Worauf wir\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 604,\n columnNumber: 19\n }, this),\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block\",\n children: \"Wert\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 605,\n columnNumber: 19\n }, this),\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block\",\n children: \"legen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 606,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 603,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl sm:text-2xl md:text-3xl leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary,\n width: \"100%\",\n maxWidth: \"100%\",\n columnCount: 1,\n columnGap: \"3rem\",\n columnFill: \"balance\",\n textAlign: \"justify\"\n },\n children: \"Sicherheit ist f\\xfcr uns keine Nebensache, sondern die Grundlage jeder Website. Wir setzen auf moderne Technologien, zertifizierte Partner und h\\xf6chste Datenschutzstandards. Unsere Systeme sind darauf ausgelegt, Ausf\\xe4lle zu vermeiden und langfristig stabile Ergebnisse zu liefern – damit Ihre Online-Pr\\xe4senz so zuverl\\xe4ssig ist wie Ihr Unternehmen selbst.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 609,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 600,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 593,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 592,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 586,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"services\",\n ref: servicesRef,\n className: \"relative overflow-hidden px-4 sm:px-8 py-12 sm:py-20 rounded-t-[2rem] sm:rounded-t-[3rem] rounded-b-[2rem] sm:rounded-b-[3rem] mx-2 sm:mx-4 backdrop-blur-sm\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_background_beams__WEBPACK_IMPORTED_MODULE_14__.BackgroundBeams, {\n className: \"opacity-70 mix-blend-screen pointer-events-none\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 635,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pointer-events-none absolute inset-0 bg-gradient-to-b from-black/30 via-transparent to-black/70\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 636,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative z-10 max-w-7xl mx-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-12 sm:mb-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl sm:text-5xl md:text-6xl font-bold mb-4 sm:mb-6 transition-all duration-1000 bg-clip-text text-transparent bg-gradient-to-b from-neutral-50/90 via-neutral-200/80 to-neutral-400/70 \".concat(servicesInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n children: \"Unsere Leistungen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 640,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg sm:text-xl transition-all duration-1000 delay-200 text-neutral-100/80 \".concat(servicesInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n children: \"Alles aus einer Hand f\\xfcr Ihren digitalen Erfolg\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 645,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 639,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative z-10 transition-all duration-1000 \".concat(servicesInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_container_scroll_animation_demo__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 657,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 652,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 638,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 629,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"process\",\n ref: processRef,\n className: \"relative px-4 sm:px-8 py-12 sm:py-20 rounded-t-[2rem] sm:rounded-t-[3rem] rounded-b-[2rem] sm:rounded-b-[3rem] mx-2 sm:mx-4 backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F0\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-12 sm:mb-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl sm:text-5xl md:text-6xl font-bold mb-4 sm:mb-6 transition-all duration-1000 \".concat(processInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Unser Ablauf\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 672,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg sm:text-xl transition-all duration-1000 delay-200 \".concat(processInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"So l\\xe4uft die Zusammenarbeit ab\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 677,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 671,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-[32px] px-2 py-10 sm:px-6 sm:py-16 transition-all duration-700\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F2, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"E8)\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_timeline_demo__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 690,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 684,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 670,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 664,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"references\",\n ref: pricingRef,\n className: \"relative px-4 sm:px-8 py-12 sm:py-20 rounded-t-[2rem] sm:rounded-t-[3rem] rounded-b-[2rem] sm:rounded-b-[3rem] mx-2 sm:mx-4 backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary, \"F0\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-12 sm:mb-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl sm:text-5xl md:text-6xl font-bold mb-4 sm:mb-6 transition-all duration-1000 \".concat(pricingInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary\n },\n children: \"Faire Preise\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 704,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg sm:text-xl transition-all duration-1000 delay-200 \".concat(pricingInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: \"Transparent und flexibel\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 709,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 703,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-8 sm:p-12 rounded-3xl shadow-2xl backdrop-blur-sm transition-all duration-1000 delay-300 \".concat(pricingInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F0\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-2xl sm:text-3xl font-bold mb-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Individuelle L\\xf6sungen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 719,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg sm:text-xl mb-8 leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Unsere Preise richten sich nach dem Projektumfang und Ihren Anforderungen. Gemeinsam finden wir eine L\\xf6sung, die zu Ihrem Budget passt – transparent, fair und flexibel.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 722,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_PriceCalculator__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 726,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 716,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 702,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 696,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"relative px-4 sm:px-8 py-12 sm:py-20 rounded-t-[2rem] sm:rounded-t-[3rem] rounded-b-[2rem] sm:rounded-b-[3rem] mx-2 sm:mx-4 backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F0\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid lg:grid-cols-2 gap-12 sm:gap-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl sm:text-4xl font-bold mb-6 sm:mb-8\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"F\\xfcr wen wir arbeiten\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 740,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg sm:text-xl leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Wir arbeiten mit Unternehmen, die ihre veraltete Website modernisieren oder ihre Zeit nicht mehr mit Technik und Support verschwenden wollen.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 743,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 739,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl sm:text-4xl font-bold mb-6 sm:mb-8\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Warum wir das tun\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 750,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-3xl border shadow-sm\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F5, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary, \"1A)\"),\n borderColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary, \"55\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 sm:p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_card_hover_effect__WEBPACK_IMPORTED_MODULE_12__.HoverEffect, {\n items: valueProps,\n className: \"py-2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 761,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 760,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 753,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 749,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 737,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 736,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 732,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n ref: contactRef,\n id: \"contact\",\n className: \"relative px-4 sm:px-8 py-12 sm:py-20 rounded-t-[2rem] sm:rounded-t-[3rem] rounded-b-[2rem] sm:rounded-b-[3rem] mx-2 sm:mx-4 backdrop-blur-sm\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-12 sm:mb-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-3xl sm:text-5xl md:text-6xl font-bold mb-4 sm:mb-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: \"Lassen Sie uns sprechen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 781,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg sm:text-xl opacity-90\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: \"Erz\\xe4hlen Sie uns von Ihrem Projekt\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 787,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 780,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"transition-all duration-1000 \".concat(contactInView ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ProtectedAppointmentBooking__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 798,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 795,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 779,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 773,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"relative py-8 sm:py-12 border-t rounded-t-[2rem] sm:rounded-t-[3rem] mx-2 sm:mx-4 backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary, \"F0\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-6 sm:gap-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"col-span-1 sm:col-span-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl sm:text-3xl font-bold mb-4 relative\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"relative z-10\",\n children: \"Webklar\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 818,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute -inset-2 rounded-xl blur-sm opacity-20\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 819,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 814,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mb-6 leading-relaxed text-sm sm:text-base\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: \"Ihr Partner f\\xfcr Web & Support. Moderne Websites. Klare Kommunikation. Pers\\xf6nlicher Support.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 824,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 813,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"text-base sm:text-lg font-semibold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary\n },\n children: \"Services\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 832,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2 text-sm sm:text-base\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: [\n \"Webdesign\",\n \"E-Commerce\",\n \"SEO\",\n \"Hosting\"\n ].map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"hover:opacity-80 transition-opacity\",\n children: item\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 838,\n columnNumber: 23\n }, this)\n }, item, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 837,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 835,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 831,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"text-base sm:text-lg font-semibold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary\n },\n children: \"Kontakt\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 844,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2 text-sm sm:text-base\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_15___default()), {\n href: \"/impressum\",\n className: \"hover:opacity-80 transition-opacity\",\n children: \"Impressum\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 848,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 848,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_15___default()), {\n href: \"/datenschutz\",\n className: \"hover:opacity-80 transition-opacity\",\n children: \"Datenschutz\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 849,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 849,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_15___default()), {\n href: \"/agb\",\n className: \"hover:opacity-80 transition-opacity\",\n children: \"AGB\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 850,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 850,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_15___default()), {\n href: \"/kontakte\",\n className: \"hover:opacity-80 transition-opacity\",\n children: \"Kontakte\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 851,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 851,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 847,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 843,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 812,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-t mt-6 sm:mt-8 pt-6 sm:pt-8 text-center text-sm\",\n style: {\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"\\xa9 2025 Webklar. Alle Rechte vorbehalten.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 862,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 855,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 811,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 804,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(CookieButton, {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 871,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_AppointmentStatus__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 874,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\app\\\\page.tsx\",\n lineNumber: 411,\n columnNumber: 7\n }, this)\n }, void 0, false);\n}\n_s3(AboutServicePage, \"dzWvMuFlD+ZFOxOI3OpsjwbSnsE=\", false, function() {\n return [\n useScrollAnimation,\n useInView,\n useInView,\n useInView,\n useInView,\n useInView,\n useInView\n ];\n});\n_c1 = AboutServicePage;\nvar _c, _c1;\n$RefreshReg$(_c, \"CookieButton\");\n$RefreshReg$(_c1, \"AboutServicePage\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7Ozs7Ozs7a0VBQzVFLDhEQUFDNks7a0VBQUcsNEVBQUN2TSxtREFBSUE7NERBQUM0SCxNQUFLOzREQUFlbEcsV0FBVTtzRUFBc0M7Ozs7Ozs7Ozs7O2tFQUM5RSw4REFBQzZLO2tFQUFHLDRFQUFDdk0sbURBQUlBOzREQUFDNEgsTUFBSzs0REFBT2xHLFdBQVU7c0VBQXNDOzs7Ozs7Ozs7OztrRUFDdEUsOERBQUM2SztrRUFBRyw0RUFBQ3ZNLG1EQUFJQTs0REFBQzRILE1BQUs7NERBQVlsRyxXQUFVO3NFQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MENBSWpGLDhEQUFDSTtnQ0FDQ0osV0FBVTtnQ0FDVkMsT0FBTztvQ0FDTFUsYUFBYWpELCtDQUFNQSxDQUFDeUMsU0FBUztvQ0FDN0JHLE9BQU81QywrQ0FBTUEsQ0FBQzJDLFVBQVU7Z0NBQzFCOzBDQUVBLDRFQUFDSTs4Q0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFTVCw4REFBQ2Y7Ozs7OzhCQUdELDhEQUFDOUIscUVBQWlCQTs7Ozs7Ozs7Ozs7O0FBSTFCO0lBbHZCd0JnRDs7UUFDTnJDO1FBQ2NPO1FBQ1FBO1FBQ0ZBO1FBQ0FBO1FBQ0pBO1FBQ0lBOzs7TUFQZDhCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9wYWdlLnRzeD83NjAzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBDYWxlbmRhciwgQ29va2llIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xyXG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tIFwiQC9saWIvY29sb3JzXCI7XHJcbmltcG9ydCBQcm90ZWN0ZWRBcHBvaW50bWVudEJvb2tpbmcgZnJvbSBcIkAvY29tcG9uZW50cy9Qcm90ZWN0ZWRBcHBvaW50bWVudEJvb2tpbmdcIjtcclxuaW1wb3J0IEFwcG9pbnRtZW50U3RhdHVzIGZyb20gXCJAL2NvbXBvbmVudHMvQXBwb2ludG1lbnRTdGF0dXNcIjtcclxuaW1wb3J0IFByaWNlQ2FsY3VsYXRvciBmcm9tIFwiQC9jb21wb25lbnRzL1ByaWNlQ2FsY3VsYXRvclwiO1xyXG5pbXBvcnQgU3Bpbm5pbmdOdW1iZXJzIGZyb20gXCJAL2NvbXBvbmVudHMvU3Bpbm5pbmdOdW1iZXJzXCI7XHJcbmltcG9ydCBHbGFzc1N1cmZhY2UgZnJvbSBcIkAvY29tcG9uZW50cy9HbGFzc1N1cmZhY2VcIjtcclxuaW1wb3J0IExvZ29Mb29wIGZyb20gXCJAL2NvbXBvbmVudHMvTG9nb0xvb3BcIjtcclxuaW1wb3J0IFBpbGxOYXYgZnJvbSBcIkAvY29tcG9uZW50cy9QaWxsTmF2XCI7XHJcbmltcG9ydCBUaW1lbGluZURlbW8gZnJvbSBcIkAvY29tcG9uZW50cy91aS90aW1lbGluZS1kZW1vXCI7XHJcbmltcG9ydCB7IEhvdmVyRWZmZWN0IH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9jYXJkLWhvdmVyLWVmZmVjdFwiO1xyXG5pbXBvcnQgSGVyb1Njcm9sbERlbW8gZnJvbSBcIkAvY29tcG9uZW50cy91aS9jb250YWluZXItc2Nyb2xsLWFuaW1hdGlvbi1kZW1vXCI7XHJcbmltcG9ydCB7IEJhY2tncm91bmRCZWFtcyB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvYmFja2dyb3VuZC1iZWFtc1wiO1xyXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnO1xyXG5cclxuLy8gU2Nyb2xsIGFuaW1hdGlvbiBob29rXHJcbmNvbnN0IHVzZVNjcm9sbEFuaW1hdGlvbiA9ICgpID0+IHtcclxuICBjb25zdCBbc2Nyb2xsWSwgc2V0U2Nyb2xsWV0gPSB1c2VTdGF0ZSgwKTtcclxuICBcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4gc2V0U2Nyb2xsWSh3aW5kb3cuc2Nyb2xsWSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcclxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcclxuICB9LCBbXSk7XHJcbiAgXHJcbiAgcmV0dXJuIHNjcm9sbFk7XHJcbn07XHJcblxyXG4vLyBJbnRlcnNlY3Rpb24gT2JzZXJ2ZXIgaG9vayBmb3IgZmFkZS1pbiBhbmltYXRpb25zXHJcbmNvbnN0IHVzZUluVmlldyA9ICh0aHJlc2hvbGQgPSAwLjEpID0+IHtcclxuICBjb25zdCBbaXNJblZpZXcsIHNldElzSW5WaWV3XSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXHJcbiAgICAgIChbZW50cnldKSA9PiB7XHJcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XHJcbiAgICAgICAgICBzZXRJc0luVmlldyh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGhyZXNob2xkIH1cclxuICAgICk7XHJcblxyXG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XHJcbiAgICAgIG9ic2VydmVyLm9ic2VydmUocmVmLmN1cnJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgfSwgW3RocmVzaG9sZF0pO1xyXG5cclxuICByZXR1cm4gW3JlZiwgaXNJblZpZXddIGFzIGNvbnN0O1xyXG59O1xyXG5cclxuLy8gQ29va2llIEJ1dHRvbiBDb21wb25lbnRcclxuY29uc3QgQ29va2llQnV0dG9uID0gKCkgPT4ge1xyXG4gIGNvbnN0IFtzaG93QmFubmVyLCBzZXRTaG93QmFubmVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlQWNjZXB0ID0gKCkgPT4ge1xyXG4gICAgc2V0U2hvd0Jhbm5lcihmYWxzZSk7XHJcbiAgICAvLyBBZGQgY29va2llIGFjY2VwdGFuY2UgbG9naWMgaGVyZVxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8PlxyXG4gICAgICB7LyogQ29va2llIEJ1dHRvbiAqL31cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dCYW5uZXIodHJ1ZSl9XHJcbiAgICAgICAgY2xhc3NOYW1lPVwiZml4ZWQgYm90dG9tLTYgbGVmdC02IHotNTAgdy0xNCBoLTE0IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzaGFkb3ctbGcgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOnNjYWxlLTExMFwiXHJcbiAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19XHJcbiAgICAgID5cclxuICAgICAgICA8Q29va2llIGNsYXNzTmFtZT1cInctNiBoLTYgdGV4dC13aGl0ZVwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgey8qIENvb2tpZSBCYW5uZXIgKi99XHJcbiAgICAgIHtzaG93QmFubmVyICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2svNTAgYmFja2Ryb3AtYmx1ci1zbSB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNFwiPlxyXG4gICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibWF4LXctbWQgdy1mdWxsIHAtNiByb3VuZGVkLTN4bCBzaGFkb3ctMnhsXCJcclxuICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBtYi00XCI+XHJcbiAgICAgICAgICAgICAgPENvb2tpZSBjbGFzc05hbWU9XCJ3LTYgaC02XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19IC8+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgIENvb2tpZS1FaW5zdGVsbHVuZ2VuXHJcbiAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm1iLTYgdGV4dC1zbVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgIFdpciB2ZXJ3ZW5kZW4gQ29va2llcywgdW0gSWhyZSBFcmZhaHJ1bmcgenUgdmVyYmVzc2Vybi4gRHVyY2ggZGllIE51dHp1bmcgdW5zZXJlciBXZWJzaXRlIHN0aW1tZW4gU2llIHVuc2VyZXIgRGF0ZW5zY2h1dHpyaWNodGxpbmllIHp1LlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzcGFjZS14LTNcIj5cclxuICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQWNjZXB0fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHJvdW5kZWQtZnVsbCBmb250LW1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMucHJpbWFyeSxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEFremVwdGllcmVuXHJcbiAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dCYW5uZXIoZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIiBcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLWZ1bGxcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgXHJcbiAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLnNlY29uZGFyeVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBBYmxlaG5lblxyXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC8+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFib3V0U2VydmljZVBhZ2UoKSB7XHJcbiAgY29uc3Qgc2Nyb2xsWSA9IHVzZVNjcm9sbEFuaW1hdGlvbigpO1xyXG4gIGNvbnN0IFtoZXJvUmVmLCBoZXJvSW5WaWV3XSA9IHVzZUluVmlldygpO1xyXG4gIGNvbnN0IFtzZXJ2aWNlc1JlZiwgc2VydmljZXNJblZpZXddID0gdXNlSW5WaWV3KCk7XHJcbiAgY29uc3QgW3Byb2Nlc3NSZWYsIHByb2Nlc3NJblZpZXddID0gdXNlSW5WaWV3KCk7XHJcbiAgY29uc3QgW3ByaWNpbmdSZWYsIHByaWNpbmdJblZpZXddID0gdXNlSW5WaWV3KCk7XHJcbiAgY29uc3QgW2Fib3V0UmVmLCBhYm91dEluVmlld10gPSB1c2VJblZpZXcoKTtcclxuICBjb25zdCBbY29udGFjdFJlZiwgY29udGFjdEluVmlld10gPSB1c2VJblZpZXcoKTtcclxuICBjb25zdCBuYXZXcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcclxuICBjb25zdCBuYXZJbm5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XHJcbiAgY29uc3QgW25hdk9mZnNldCwgc2V0TmF2T2Zmc2V0XSA9IHVzZVN0YXRlKDApO1xyXG4gIGNvbnN0IG5hdk9mZnNldFJlZiA9IHVzZVJlZigwKTtcclxuICBjb25zdCBuYXZFeHBhbmRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgY29uc3QgYW5pbWF0aW9uRnJhbWVSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBuYXZPZmZzZXRSZWYuY3VycmVudCA9IG5hdk9mZnNldDtcclxuICB9LCBbbmF2T2Zmc2V0XSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBpZiAoYW5pbWF0aW9uRnJhbWVSZWYuY3VycmVudCkge1xyXG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lUmVmLmN1cnJlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgYW5pbWF0ZU9mZnNldCA9IHVzZUNhbGxiYWNrKCh0YXJnZXQ6IG51bWJlcikgPT4ge1xyXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGFyZ2V0KSkgcmV0dXJuO1xyXG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lUmVmLmN1cnJlbnQpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uRnJhbWVSZWYuY3VycmVudCk7XHJcbiAgICAgIGFuaW1hdGlvbkZyYW1lUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSBuYXZPZmZzZXRSZWYuY3VycmVudDtcclxuICAgIGNvbnN0IGRlbHRhID0gdGFyZ2V0IC0gc3RhcnRWYWx1ZTtcclxuICAgIGlmIChNYXRoLmFicyhkZWx0YSkgPCAwLjUpIHtcclxuICAgICAgbmF2T2Zmc2V0UmVmLmN1cnJlbnQgPSB0YXJnZXQ7XHJcbiAgICAgIHNldE5hdk9mZnNldCh0YXJnZXQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHVyYXRpb24gPSA1MjA7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICBjb25zdCBlYXNlT3V0Q3ViaWMgPSAodDogbnVtYmVyKSA9PiAxIC0gTWF0aC5wb3coMSAtIHQsIDMpO1xyXG5cclxuICAgIGNvbnN0IHN0ZXAgPSAobm93OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgZWxhcHNlZCA9IG5vdyAtIHN0YXJ0VGltZTtcclxuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1pbihlbGFwc2VkIC8gZHVyYXRpb24sIDEpO1xyXG4gICAgICBjb25zdCBlYXNlZCA9IGVhc2VPdXRDdWJpYyhwcm9ncmVzcyk7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gc3RhcnRWYWx1ZSArIGRlbHRhICogZWFzZWQ7XHJcbiAgICAgIG5hdk9mZnNldFJlZi5jdXJyZW50ID0gdmFsdWU7XHJcbiAgICAgIHNldE5hdk9mZnNldCh2YWx1ZSk7XHJcblxyXG4gICAgICBpZiAocHJvZ3Jlc3MgPCAxKSB7XHJcbiAgICAgICAgYW5pbWF0aW9uRnJhbWVSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbmltYXRpb25GcmFtZVJlZi5jdXJyZW50ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmltYXRpb25GcmFtZVJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgY2FsY3VsYXRlTmF2T2Zmc2V0ID0gdXNlQ2FsbGJhY2soXHJcbiAgICAobW9kZTogXCJhbmltYXRlXCIgfCBcImltbWVkaWF0ZVwiID0gXCJhbmltYXRlXCIsIGV4cGFuZGVkT3ZlcnJpZGU/OiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGlmICghbmF2V3JhcHBlclJlZi5jdXJyZW50IHx8ICFuYXZJbm5lclJlZi5jdXJyZW50KSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kZWRPdmVycmlkZSA/PyBuYXZFeHBhbmRlZFJlZi5jdXJyZW50O1xyXG4gICAgICBjb25zdCB3cmFwcGVyV2lkdGggPSBuYXZXcmFwcGVyUmVmLmN1cnJlbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgIGNvbnN0IG5hdldpZHRoID0gbmF2SW5uZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0gZXhwYW5kZWQgPyBNYXRoLm1heCgwLCAod3JhcHBlcldpZHRoIC0gbmF2V2lkdGgpIC8gMikgOiAwO1xyXG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvZmZzZXQpKSByZXR1cm47XHJcbiAgICAgIGlmIChtb2RlID09PSBcImltbWVkaWF0ZVwiKSB7XHJcbiAgICAgICAgbmF2T2Zmc2V0UmVmLmN1cnJlbnQgPSBvZmZzZXQ7XHJcbiAgICAgICAgc2V0TmF2T2Zmc2V0KG9mZnNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW5pbWF0ZU9mZnNldChvZmZzZXQpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgW2FuaW1hdGVPZmZzZXRdXHJcbiAgKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNhbGN1bGF0ZU5hdk9mZnNldChcImltbWVkaWF0ZVwiLCBuYXZFeHBhbmRlZFJlZi5jdXJyZW50KTtcclxuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IGNhbGN1bGF0ZU5hdk9mZnNldChcImltbWVkaWF0ZVwiLCBuYXZFeHBhbmRlZFJlZi5jdXJyZW50KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XHJcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGFuZGxlUmVzaXplKTtcclxuICB9LCBbY2FsY3VsYXRlTmF2T2Zmc2V0XSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoIW5hdklubmVyUmVmLmN1cnJlbnQgfHwgdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XHJcbiAgICAgIGNhbGN1bGF0ZU5hdk9mZnNldChcImltbWVkaWF0ZVwiLCBuYXZFeHBhbmRlZFJlZi5jdXJyZW50KTtcclxuICAgIH0pO1xyXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShuYXZJbm5lclJlZi5jdXJyZW50KTtcclxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgfSwgW2NhbGN1bGF0ZU5hdk9mZnNldF0pO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IG5hdldyYXBwZXJSZWYuY3VycmVudDtcclxuICAgIGlmICghd3JhcHBlcikgcmV0dXJuO1xyXG4gICAgY29uc3QgaGFuZGxlVHJhbnNpdGlvbkVuZCA9IChldmVudDogVHJhbnNpdGlvbkV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgPT09IFwibWF4LXdpZHRoXCIgfHwgZXZlbnQucHJvcGVydHlOYW1lID09PSBcIndpZHRoXCIgfHwgZXZlbnQucHJvcGVydHlOYW1lID09PSBcInRyYW5zZm9ybVwiKSB7XHJcbiAgICAgICAgY2FsY3VsYXRlTmF2T2Zmc2V0KG5hdkV4cGFuZGVkUmVmLmN1cnJlbnQgPyBcImFuaW1hdGVcIiA6IFwiaW1tZWRpYXRlXCIsIG5hdkV4cGFuZGVkUmVmLmN1cnJlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgd3JhcHBlci5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBoYW5kbGVUcmFuc2l0aW9uRW5kKTtcclxuICAgIHJldHVybiAoKSA9PiB3cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIGhhbmRsZVRyYW5zaXRpb25FbmQpO1xyXG4gIH0sIFtjYWxjdWxhdGVOYXZPZmZzZXRdKTtcclxuXHJcbiAgLy8gUGFydG5lciBMb2dvcyBmw7xyIExvZ29Mb29wXHJcbiAgY29uc3QgcGFydG5lckxvZ29zID0gW1xyXG4gICAge1xyXG4gICAgICBub2RlOiAoXHJcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT5cclxuICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCA0OCA0OFwiIGZpbGw9XCJub25lXCIgd2lkdGg9ezk2fSBoZWlnaHQ9ezk2fSB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIHsvKiBUcmFlZmlrIC0gUmV2ZXJzZSBQcm94eSBtaXQgZHJlaSBQdW5rdGVuICovfVxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTZcIiBjeT1cIjE2XCIgcj1cIjRcIiBmaWxsPXtjb2xvcnMuYmFja2dyb3VuZH0vPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjRcIiBjeT1cIjI0XCIgcj1cIjRcIiBmaWxsPXtjb2xvcnMuYmFja2dyb3VuZH0vPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMzJcIiBjeT1cIjMyXCIgcj1cIjRcIiBmaWxsPXtjb2xvcnMuYmFja2dyb3VuZH0vPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDE2TDI0IDI0TTI0IDI0TDMyIDMyXCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDI0TDI0IDEyTDM2IDI0XCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIyXCIgb3BhY2l0eT1cIjAuNVwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kLCBmb250U2l6ZTogJzE0cHgnLCBmb250V2VpZ2h0OiAnNjAwJywgd2hpdGVTcGFjZTogJ25vd3JhcCcgfX0+VHJhZWZpazwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgICAgdGl0bGU6IFwiVHJhZWZpa1wiLFxyXG4gICAgICBocmVmOiBcImh0dHBzOi8vdHJhZWZpay5pb1wiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBub2RlOiAoXHJcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT5cclxuICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCA0OCA0OFwiIGZpbGw9XCJub25lXCIgd2lkdGg9ezk2fSBoZWlnaHQ9ezk2fSB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIHsvKiBQb3JrYnVuIC0gRG9tYWluL0dsb2JlICovfVxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjRcIiBjeT1cIjI0XCIgcj1cIjE2XCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIzXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTggMjRDOCAxOCAxMiAxNCAyNCAxNEMzNiAxNCA0MCAxOCA0MCAyNEM0MCAzMCAzNiAzNCAyNCAzNEMxMiAzNCA4IDMwIDggMjRaXCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTI0IDhDMjQgOCAxOCAxNCAxOCAyMEMxOCAyNiAyNCAzMiAyNCAzMlwiIHN0cm9rZT17Y29sb3JzLmJhY2tncm91bmR9IHN0cm9rZVdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kLCBmb250U2l6ZTogJzE0cHgnLCBmb250V2VpZ2h0OiAnNjAwJywgd2hpdGVTcGFjZTogJ25vd3JhcCcgfX0+UG9ya2J1bjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgICAgdGl0bGU6IFwiUG9ya2J1blwiLFxyXG4gICAgICBocmVmOiBcImh0dHBzOi8vcG9ya2J1bi5jb21cIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbm9kZTogKFxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcgfX0+XHJcbiAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBmaWxsPVwibm9uZVwiIHdpZHRoPXs5Nn0gaGVpZ2h0PXs5Nn0geG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICB7LyogbjhuIC0gV29ya2Zsb3cgTm9kZXMgKi99XHJcbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNlwiIGN5PVwiMTZcIiByPVwiNVwiIGZpbGw9e2NvbG9ycy5iYWNrZ3JvdW5kfS8+XHJcbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzMlwiIGN5PVwiMTZcIiByPVwiNVwiIGZpbGw9e2NvbG9ycy5iYWNrZ3JvdW5kfS8+XHJcbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNlwiIGN5PVwiMzJcIiByPVwiNVwiIGZpbGw9e2NvbG9ycy5iYWNrZ3JvdW5kfS8+XHJcbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzMlwiIGN5PVwiMzJcIiByPVwiNVwiIGZpbGw9e2NvbG9ycy5iYWNrZ3JvdW5kfS8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTZMMjcgMTZNMTYgMjFMMTYgMjdNMjEgMzJMMjcgMzJcIiBzdHJva2U9e2NvbG9ycy5iYWNrZ3JvdW5kfSBzdHJva2VXaWR0aD1cIjJcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCwgZm9udFNpemU6ICcxNHB4JywgZm9udFdlaWdodDogJzYwMCcsIHdoaXRlU3BhY2U6ICdub3dyYXAnIH19Pm44bjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgICAgdGl0bGU6IFwibjhuXCIsXHJcbiAgICAgIGhyZWY6IFwiaHR0cHM6Ly9uOG4uaW9cIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbm9kZTogKFxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcgfX0+XHJcbiAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBmaWxsPVwibm9uZVwiIHdpZHRoPXs5Nn0gaGVpZ2h0PXs5Nn0geG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICB7LyogTWlzdHJhbCBBSSAtIFdpbmQvV2F2ZSAqL31cclxuICAgICAgICAgICAgPHBhdGggZD1cIk04IDI0UTE2IDE2IDI0IDI0VDQwIDI0XCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIzXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgMjhRMTggMjAgMjYgMjhUNDIgMjhcIiBzdHJva2U9e2NvbG9ycy5iYWNrZ3JvdW5kfSBzdHJva2VXaWR0aD1cIjNcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBmaWxsPVwibm9uZVwiIG9wYWNpdHk9XCIwLjdcIi8+XHJcbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyNFwiIGN5PVwiMjRcIiByPVwiMlwiIGZpbGw9e2NvbG9ycy5iYWNrZ3JvdW5kfSBvcGFjaXR5PVwiMC41XCIvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogY29sb3JzLmJhY2tncm91bmQsIGZvbnRTaXplOiAnMTRweCcsIGZvbnRXZWlnaHQ6ICc2MDAnLCB3aGl0ZVNwYWNlOiAnbm93cmFwJyB9fT5NaXN0cmFsIEFJPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApLFxyXG4gICAgICB0aXRsZTogXCJNaXN0cmFsIEFJXCIsXHJcbiAgICAgIGhyZWY6IFwiaHR0cHM6Ly9taXN0cmFsLmFpXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5vZGU6IChcclxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxyXG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDQ4IDQ4XCIgZmlsbD1cIm5vbmVcIiB3aWR0aD17OTZ9IGhlaWdodD17OTZ9IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgey8qIEhldHpuZXIgLSBTZXJ2ZXIvQ2xvdWQgKi99XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCIxMlwiIHk9XCIxNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyMFwiIHJ4PVwiMlwiIHN0cm9rZT17Y29sb3JzLmJhY2tncm91bmR9IHN0cm9rZVdpZHRoPVwiM1wiLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNiAyMEgzMk0xNiAyNEgzMk0xNiAyOEgyOFwiIHN0cm9rZT17Y29sb3JzLmJhY2tncm91bmR9IHN0cm9rZVdpZHRoPVwiMlwiIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjM2XCIgY3k9XCIxOFwiIHI9XCIzXCIgZmlsbD17Y29sb3JzLmJhY2tncm91bmR9Lz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kLCBmb250U2l6ZTogJzE0cHgnLCBmb250V2VpZ2h0OiAnNjAwJywgd2hpdGVTcGFjZTogJ25vd3JhcCcgfX0+SGV0em5lcjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgICAgdGl0bGU6IFwiSGV0em5lclwiLFxyXG4gICAgICBocmVmOiBcImh0dHBzOi8vd3d3LmhldHpuZXIuY29tXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5vZGU6IChcclxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxyXG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDQ4IDQ4XCIgZmlsbD1cIm5vbmVcIiB3aWR0aD17OTZ9IGhlaWdodD17OTZ9IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgey8qIEN1cnNvciAtIENvZGUgRWRpdG9yICovfVxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiMTJcIiB5PVwiMTJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjRcIiBzdHJva2U9e2NvbG9ycy5iYWNrZ3JvdW5kfSBzdHJva2VXaWR0aD1cIjNcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTggMjBMMjQgMjRMMTggMjhcIiBzdHJva2U9e2NvbG9ycy5iYWNrZ3JvdW5kfSBzdHJva2VXaWR0aD1cIjJcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTI4IDIwTDMwIDI0TDI4IDI4XCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogY29sb3JzLmJhY2tncm91bmQsIGZvbnRTaXplOiAnMTRweCcsIGZvbnRXZWlnaHQ6ICc2MDAnLCB3aGl0ZVNwYWNlOiAnbm93cmFwJyB9fT5DdXJzb3I8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICksXHJcbiAgICAgIHRpdGxlOiBcIkN1cnNvciBBSVwiLFxyXG4gICAgICBocmVmOiBcImh0dHBzOi8vY3Vyc29yLnNoXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5vZGU6IChcclxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxyXG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDQ4IDQ4XCIgZmlsbD1cIm5vbmVcIiB3aWR0aD17OTZ9IGhlaWdodD17OTZ9IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgey8qIEFwcHdyaXRlIC0gRGF0YWJhc2UvQmFja2VuZCAqL31cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjE0XCIgeT1cIjEwXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjI4XCIgcng9XCIyXCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIzXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDE4SDM0TTE0IDI0SDM0TTE0IDMwSDI4XCIgc3Ryb2tlPXtjb2xvcnMuYmFja2dyb3VuZH0gc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMzJcIiBjeT1cIjE0XCIgcj1cIjJcIiBmaWxsPXtjb2xvcnMuYmFja2dyb3VuZH0vPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogY29sb3JzLmJhY2tncm91bmQsIGZvbnRTaXplOiAnMTRweCcsIGZvbnRXZWlnaHQ6ICc2MDAnLCB3aGl0ZVNwYWNlOiAnbm93cmFwJyB9fT5BcHB3cml0ZTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgICAgdGl0bGU6IFwiQXBwd3JpdGVcIixcclxuICAgICAgaHJlZjogXCJodHRwczovL2FwcHdyaXRlLmlvXCJcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBjb25zdCB2YWx1ZVByb3BzID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogXCJaZWl0ZXJzcGFybmlzXCIsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBcIldpciDDvGJlcm5laG1lbiBkZW4gZGlnaXRhbGVuIFRlaWwsIFNpZSBrb256ZW50cmllcmVuIHNpY2ggYXVmcyBHZXNjaMOkZnRcIixcclxuICAgICAgbGluazogXCIjemVpdGVyc3Bhcm5pc1wiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogXCJLb21wZXRlbnogJiBFcmZhaHJ1bmdcIixcclxuICAgICAgZGVzY3JpcHRpb246IFwiVGVjaG5pc2NoIHN0YXJrLCBrbGFyIGluIGRlciBVbXNldHp1bmdcIixcclxuICAgICAgbGluazogXCIja29tcGV0ZW56LWVyZmFocnVuZ1wiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogXCJNYcOfZ2VzY2huZWlkZXJ0ZSBMw7ZzdW5nZW5cIixcclxuICAgICAgZGVzY3JpcHRpb246IFwiS2VpbmUgVGVtcGxhdGVzLCBzb25kZXJuIGluZGl2aWR1ZWxsZSBVbXNldHp1bmdcIixcclxuICAgICAgbGluazogXCIjbWFzc2dlc2NobmVpZGVydGUtbG9lc3VuZ2VuXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiBcIlN0cmVzc2ZyZWllcyBXZWJtYW5hZ2VtZW50XCIsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVpbiBBbnNwcmVjaHBhcnRuZXIgZsO8ciBhbGxlc1wiLFxyXG4gICAgICBsaW5rOiBcIiNzdHJlc3NmcmVpZXMtd2VibWFuYWdlbWVudFwiXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgY29uc3QgbmF2SXNFeHBhbmRlZCA9IHNjcm9sbFkgPiA0MDtcclxuXHJcbiAgY29uc3QgcHJldmlvdXNOYXZTdGF0ZSA9IHVzZVJlZihuYXZJc0V4cGFuZGVkKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHByZXZpb3VzID0gcHJldmlvdXNOYXZTdGF0ZS5jdXJyZW50O1xyXG4gICAgcHJldmlvdXNOYXZTdGF0ZS5jdXJyZW50ID0gbmF2SXNFeHBhbmRlZDtcclxuICAgIG5hdkV4cGFuZGVkUmVmLmN1cnJlbnQgPSBuYXZJc0V4cGFuZGVkO1xyXG5cclxuICAgIGxldCByYWYxOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIGxldCByYWYyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIGxldCB0aW1lb3V0SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGlmIChuYXZJc0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmIChwcmV2aW91cyA9PT0gZmFsc2UpIHtcclxuICAgICAgICByYWYxID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgIGNhbGN1bGF0ZU5hdk9mZnNldChcImFuaW1hdGVcIiwgdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmFmMiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICBjYWxjdWxhdGVOYXZPZmZzZXQoXCJhbmltYXRlXCIsIHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNhbGN1bGF0ZU5hdk9mZnNldChcImFuaW1hdGVcIiwgdHJ1ZSk7XHJcbiAgICAgICAgfSwgMzIwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjYWxjdWxhdGVOYXZPZmZzZXQoXCJpbW1lZGlhdGVcIiwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFuaW1hdGVPZmZzZXQoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgaWYgKHJhZjEgIT09IG51bGwpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZjEpO1xyXG4gICAgICBpZiAocmFmMiAhPT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmMik7XHJcbiAgICAgIGlmICh0aW1lb3V0SWQgIT09IG51bGwpIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcclxuICAgIH07XHJcbiAgfSwgW25hdklzRXhwYW5kZWQsIGNhbGN1bGF0ZU5hdk9mZnNldCwgYW5pbWF0ZU9mZnNldF0pO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gb3ZlcmZsb3ctaGlkZGVuXCIgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCB9fT5cclxuICAgICAgICB7LyogRml4ZWQgTmF2aWdhdGlvbiBtaXQgUGlsbE5hdiAqL31cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBsZWZ0LTAgcmlnaHQtMCB6LTQwIHB4LTQgdG9wLTQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwXCJcclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogXCJjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSlcIlxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBteC1hdXRvIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCBlYXNlLW91dFwiXHJcbiAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IG5hdklzRXhwYW5kZWQgPyBcIjcycmVtXCIgOiBcIjM4cmVtXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG5hdklzRXhwYW5kZWQgPyBcIjEwMCVcIiA6IFwiOTYlXCJcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPEdsYXNzU3VyZmFjZVxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzPXs5OTk5fVxyXG4gICAgICAgICAgICAgIGRpc3BsYWNlPXsyLjB9XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZE9wYWNpdHk9ezAuM31cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIGVhc2Utb3V0XCJcclxuICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgIG1pbkhlaWdodDogJzcwcHgnLFxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMuc2Vjb25kYXJ5fTY2YCxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogJzAuNXJlbSAxLjVyZW0nLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tkcm9wLWZpbHRlciAwLjQ1cyBlYXNlJ1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICByZWY9e25hdldyYXBwZXJSZWZ9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogXCJjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSlcIlxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7LyogUGlsbE5hdiBtaXQgZGVuIE5hdi1MaW5rcyAqL31cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgcmVmPXtuYXZJbm5lclJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG5hdklzRXhwYW5kZWQgPyBgdHJhbnNsYXRlWCgtJHtuYXZPZmZzZXR9cHgpYCA6IFwidHJhbnNsYXRlWCgwKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogXCJjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSlcIlxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8UGlsbE5hdlxyXG4gICAgICAgICAgICAgICAgICAgIGxvZ289XCIvV2ViS2xhckxvZ28ucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICBsb2dvQWx0PVwiV2Via2xhciBMb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcz17W1xyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ8OcYmVyIHVucycsIGhyZWY6ICcjYWJvdXQnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnTGVpc3R1bmdlbicsIGhyZWY6ICcjc2VydmljZXMnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnVW5zZXJlIEFibMOkdWZlJywgaHJlZjogJyNwcm9jZXNzJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgXX1cclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVIcmVmPVwiI1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZUNvbG9yPXtjb2xvcnMuc2Vjb25kYXJ5fVxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGxDb2xvcj17Y29sb3JzLmJhY2tncm91bmR9XHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJlZFBpbGxUZXh0Q29sb3I9e2NvbG9ycy5iYWNrZ3JvdW5kfVxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGxUZXh0Q29sb3I9e2NvbG9ycy5wcmltYXJ5fVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBpbGwtbmF2LWN1c3RvbVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHsvKiBLb250YWt0LUJ1dHRvbiByZWNodHMgKi99XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhpZGRlbiBtZDpibG9jayBhYnNvbHV0ZSByaWdodC0wIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IG5hdklzRXhwYW5kZWQgPyAxIDogMCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbmF2SXNFeHBhbmRlZCA/IFwiMjAwcHhcIiA6IFwiMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogbmF2SXNFeHBhbmRlZCA/IFwiYXV0b1wiIDogXCJub25lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBuYXZJc0V4cGFuZGVkID8gXCJ0cmFuc2xhdGVYKDApXCIgOiBcInRyYW5zbGF0ZVgoMTZweClcIixcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246IFwiY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpXCJcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9rb250YWt0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwicm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1zZW1pYm9sZCBweC0zIHNtOnB4LTUgcHktMS41IHNoYWRvdy1sZyBob3ZlcjpzaGFkb3cteGwgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOnNjYWxlLTEwNSBidG4tZW5oYW5jZWQgcHVsc2UtZ2xvd1wiIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3JzLnByaW1hcnksIGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIEtvbnRha3RcclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9MaW5rPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvR2xhc3NTdXJmYWNlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIHsvKiBCYWNrZ3JvdW5kIFZpZGVvIEhlcm8gU2VjdGlvbiAqL31cclxuICAgICAgICA8c2VjdGlvbiBpZD1cImhlcm9cIiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBoLXNjcmVlbiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgIHsvKiBWaWRlbyBCYWNrZ3JvdW5kICovfVxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMFwiPlxyXG4gICAgICAgICAgICA8dmlkZW8gXHJcbiAgICAgICAgICAgICAgYXV0b1BsYXkgXHJcbiAgICAgICAgICAgICAgbXV0ZWQgXHJcbiAgICAgICAgICAgICAgbG9vcCBcclxuICAgICAgICAgICAgICBwbGF5c0lubGluZVxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyXCJcclxuICAgICAgICAgICAgICBzdHlsZT17eyBmaWx0ZXI6ICdibHVyKDhweCknIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c291cmNlIHNyYz1cIi9wYXRoL3RvL3lvdXIvYmFja2dyb3VuZC12aWRlby5tcDRcIiB0eXBlPVwidmlkZW8vbXA0XCIgLz5cclxuICAgICAgICAgICAgPC92aWRlbz5cclxuICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIGJhY2tkcm9wLWJsdXItc21cIlxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICR7Y29sb3JzLnByaW1hcnl9Q0MsICR7Y29sb3JzLnNlY29uZGFyeX1DQylgXHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICA8ZGl2IHJlZj17aGVyb1JlZn0gY2xhc3NOYW1lPVwicmVsYXRpdmUgei0yMCBweC00IHNtOnB4LTggcHQtMjQgc206cHQtMjggcGItMjAgc206cGItMjQgbWF4LXctN3hsIG14LWF1dG8gdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT17YHRleHQtNHhsIHNtOnRleHQtNnhsIG1kOnRleHQtOHhsIGZvbnQtYm9sZCBtYi02IHNtOm1iLTggdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTAwMCAke1xyXG4gICAgICAgICAgICAgIGhlcm9JblZpZXcgPyAnb3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMCcgOiAnb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTEwJ1xyXG4gICAgICAgICAgICB9YH0+XHJcbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19PlxyXG4gICAgICAgICAgICAgICAgd2Via2xhciDigJMgZGFzIFdlYiBtYcOfZ2VzY2huZWlkZXJ0IGF1ZiBJaHIgVW50ZXJuZWhtZW5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIGdhcC0yIHNtOmdhcC00IG1iLTggc206bWItMTIgdGV4dC14cyBzbTp0ZXh0LXNtIG10LTYgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTAwMCBkZWxheS0zMDAgJHtcclxuICAgICAgICAgICAgICBoZXJvSW5WaWV3ID8gJ29wYWNpdHktMTAwIHRyYW5zbGF0ZS15LTAnIDogJ29wYWNpdHktMCB0cmFuc2xhdGUteS0xMCdcclxuICAgICAgICAgICAgfWB9PlxyXG4gICAgICAgICAgICAgIHtbJ1N0cmF0ZWdpZWJlcmF0dW5nJywgJ1VYL1VJIERlc2lnbicsICdFbnR3aWNrbHVuZycsICdTRU8gJiBTdXBwb3J0J10ubWFwKChpdGVtKSA9PiAoXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtfVxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHNtOnB4LTQgcHktMiByb3VuZGVkLWZ1bGwgYmFja2Ryb3AtYmx1ci1zbSBib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGAke2NvbG9ycy5iYWNrZ3JvdW5kfTgwYCxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY29sb3JzLnRlcnRpYXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMucHJpbWFyeVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGZsZXggZmxleC1jb2wgc206ZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00IHNtOmdhcC02IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTEwMDAgZGVsYXktNTAwICR7XHJcbiAgICAgICAgICAgICAgaGVyb0luVmlldyA/ICdvcGFjaXR5LTEwMCB0cmFuc2xhdGUteS0wJyA6ICdvcGFjaXR5LTAgdHJhbnNsYXRlLXktMTAnXHJcbiAgICAgICAgICAgIH1gfT5cclxuICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhY3QnKT8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSl9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgc206dy1hdXRvIHB4LTYgc206cHgtOCBweS0zIHNtOnB5LTQgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtMyB0ZXh0LWJhc2Ugc206dGV4dC1sZyBmb250LXNlbWlib2xkIHNoYWRvdy0yeGwgaG92ZXI6c2hhZG93LTN4bCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6c2NhbGUtMTA1IGJ0bi1lbmhhbmNlZCBob3Zlci1saWZ0XCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLnByaW1hcnlcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPENhbGVuZGFyIGNsYXNzTmFtZT1cInctNSBzbTp3LTYgaC01IHNtOmgtNlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5Lb3N0ZW5sb3NlbiBUZXJtaW4gYnVjaGVuPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIHsvKiBQYXJ0bmVyIFRvb2xzICovfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTggc206bXQtMTIgcHgtNCBzbTpweC04XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgb3ZlcmZsb3c6ICd2aXNpYmxlJywgbWF4V2lkdGg6ICcxMDAlJyB9fSBjbGFzc05hbWU9XCJsb2dvLWxvb3AtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogJzE4MHB4JywgcG9zaXRpb246ICdyZWxhdGl2ZScsIHdpZHRoOiAnMTAwJScsIHBhZGRpbmdCb3R0b206ICczMHB4Jywgb3ZlcmZsb3c6ICdoaWRkZW4nIH19IGNsYXNzTmFtZT1cImxvZ28tbG9vcC1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8TG9nb0xvb3BcclxuICAgICAgICAgICAgICAgICAgICBsb2dvcz17cGFydG5lckxvZ29zfVxyXG4gICAgICAgICAgICAgICAgICAgIHNwZWVkPXs2MH1cclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb249XCJsZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgICBsb2dvSGVpZ2h0PXsxNDB9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2FwPXsxMDB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGF1c2VPbkhvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVPbkhvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiVGVjaG5vbG9neSBwYXJ0bmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJyB9fVxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICB7LyogQWJvdXQgU2VjdGlvbiAqL31cclxuICAgICAgICA8c2VjdGlvbiBcclxuICAgICAgICAgIGlkPVwiYWJvdXRcIlxyXG4gICAgICAgICAgcmVmPXthYm91dFJlZn0gXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBweC00IHNtOnB4LTggcHktMTIgc206cHktMjAgcm91bmRlZC10LVsycmVtXSBzbTpyb3VuZGVkLXQtWzNyZW1dIHJvdW5kZWQtYi1bMnJlbV0gc206cm91bmRlZC1iLVszcmVtXSBteC0yIHNtOm14LTQgYmFja2Ryb3AtYmx1ci1zbVwiXHJcbiAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGAke2NvbG9ycy5iYWNrZ3JvdW5kfUYwYCwgcG9zaXRpb246ICdyZWxhdGl2ZScsIHpJbmRleDogMTAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBsZzpncmlkLWNvbHMtMiBnYXAtOCBzbTpnYXAtMTYgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgey8qIExpbmtzOiBTcGlubmluZyBOdW1iZXJzICovfVxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgb3JkZXItMiBsZzpvcmRlci0xXCI+XHJcbiAgICAgICAgICAgICAgICA8U3Bpbm5pbmdOdW1iZXJzIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgey8qIFJlY2h0czogVGV4dCBpbSBaZWl0dW5nc3N0aWwgKG1laHJzcGFsdGlnKSAqL31cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YG9yZGVyLTEgbGc6b3JkZXItMiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0xMDAwIHctZnVsbCBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyICR7XHJcbiAgICAgICAgICAgICAgICBhYm91dEluVmlldyA/ICdvcGFjaXR5LTEwMCB0cmFuc2xhdGUteC0wJyA6ICdvcGFjaXR5LTAgdHJhbnNsYXRlLXgtMTAnXHJcbiAgICAgICAgICAgICAgfWB9PlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtM3hsIHNtOnRleHQtNXhsIG1kOnRleHQtNnhsIGZvbnQtYm9sZCBtYi02IHNtOm1iLTggbGVhZGluZy10aWdodCB3aGl0ZXNwYWNlLW5vd3JhcFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrXCI+V29yYXVmIHdpcjwvc3Bhbj57XCIgXCJ9XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlubGluZS1ibG9ja1wiPldlcnQ8L3NwYW4+e1wiIFwifVxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2tcIj5sZWdlbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteGwgc206dGV4dC0yeGwgbWQ6dGV4dC0zeGwgbGVhZGluZy1yZWxheGVkXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkdhcDogJzNyZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkZpbGw6ICdiYWxhbmNlJyxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdqdXN0aWZ5J1xyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBTaWNoZXJoZWl0IGlzdCBmw7xyIHVucyBrZWluZSBOZWJlbnNhY2hlLCBzb25kZXJuIGRpZSBHcnVuZGxhZ2UgamVkZXIgV2Vic2l0ZS4gV2lyIHNldHplbiBhdWYgbW9kZXJuZSBUZWNobm9sb2dpZW4sIHplcnRpZml6aWVydGUgUGFydG5lciB1bmQgaMO2Y2hzdGUgRGF0ZW5zY2h1dHpzdGFuZGFyZHMuIFVuc2VyZSBTeXN0ZW1lIHNpbmQgZGFyYXVmIGF1c2dlbGVndCwgQXVzZsOkbGxlIHp1IHZlcm1laWRlbiB1bmQgbGFuZ2ZyaXN0aWcgc3RhYmlsZSBFcmdlYm5pc3NlIHp1IGxpZWZlcm4g4oCTIGRhbWl0IElocmUgT25saW5lLVByw6RzZW56IHNvIHp1dmVybMOkc3NpZyBpc3Qgd2llIElociBVbnRlcm5laG1lbiBzZWxic3QuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIHsvKiBTZXJ2aWNlcyBHcmlkICovfVxyXG4gICAgICAgIDxzZWN0aW9uIFxyXG4gICAgICAgICAgaWQ9XCJzZXJ2aWNlc1wiXHJcbiAgICAgICAgICByZWY9e3NlcnZpY2VzUmVmfSBcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiBweC00IHNtOnB4LTggcHktMTIgc206cHktMjAgcm91bmRlZC10LVsycmVtXSBzbTpyb3VuZGVkLXQtWzNyZW1dIHJvdW5kZWQtYi1bMnJlbV0gc206cm91bmRlZC1iLVszcmVtXSBteC0yIHNtOm14LTQgYmFja2Ryb3AtYmx1ci1zbVwiXHJcbiAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5wcmltYXJ5IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPEJhY2tncm91bmRCZWFtcyBjbGFzc05hbWU9XCJvcGFjaXR5LTcwIG1peC1ibGVuZC1zY3JlZW4gcG9pbnRlci1ldmVudHMtbm9uZVwiIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQtMCBiZy1ncmFkaWVudC10by1iIGZyb20tYmxhY2svMzAgdmlhLXRyYW5zcGFyZW50IHRvLWJsYWNrLzcwXCIgLz5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB6LTEwIG1heC13LTd4bCBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbWItMTIgc206bWItMTZcIj5cclxuICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPXtgdGV4dC0zeGwgc206dGV4dC01eGwgbWQ6dGV4dC02eGwgZm9udC1ib2xkIG1iLTQgc206bWItNiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0xMDAwIGJnLWNsaXAtdGV4dCB0ZXh0LXRyYW5zcGFyZW50IGJnLWdyYWRpZW50LXRvLWIgZnJvbS1uZXV0cmFsLTUwLzkwIHZpYS1uZXV0cmFsLTIwMC84MCB0by1uZXV0cmFsLTQwMC83MCAke1xyXG4gICAgICAgICAgICAgICAgc2VydmljZXNJblZpZXcgPyAnb3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMCcgOiAnb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTEwJ1xyXG4gICAgICAgICAgICAgIH1gfT5cclxuICAgICAgICAgICAgICAgIFVuc2VyZSBMZWlzdHVuZ2VuXHJcbiAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2B0ZXh0LWxnIHNtOnRleHQteGwgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTAwMCBkZWxheS0yMDAgdGV4dC1uZXV0cmFsLTEwMC84MCAke1xyXG4gICAgICAgICAgICAgICAgc2VydmljZXNJblZpZXcgPyAnb3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMCcgOiAnb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTEwJ1xyXG4gICAgICAgICAgICAgIH1gfT5cclxuICAgICAgICAgICAgICAgIEFsbGVzIGF1cyBlaW5lciBIYW5kIGbDvHIgSWhyZW4gZGlnaXRhbGVuIEVyZm9sZ1xyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcmVsYXRpdmUgei0xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0xMDAwICR7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc0luVmlldyA/IFwib3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMFwiIDogXCJvcGFjaXR5LTAgdHJhbnNsYXRlLXktMTBcIlxyXG4gICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPEhlcm9TY3JvbGxEZW1vIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgey8qIFByb2Nlc3MgU2VjdGlvbiAqL31cclxuICAgICAgICA8c2VjdGlvbiBcclxuICAgICAgICAgIGlkPVwicHJvY2Vzc1wiXHJcbiAgICAgICAgICByZWY9e3Byb2Nlc3NSZWZ9IFxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgcHgtNCBzbTpweC04IHB5LTEyIHNtOnB5LTIwIHJvdW5kZWQtdC1bMnJlbV0gc206cm91bmRlZC10LVszcmVtXSByb3VuZGVkLWItWzJyZW1dIHNtOnJvdW5kZWQtYi1bM3JlbV0gbXgtMiBzbTpteC00IGJhY2tkcm9wLWJsdXItc21cIlxyXG4gICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMuYmFja2dyb3VuZH1GMGAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTZ4bCBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbWItMTIgc206bWItMTZcIj5cclxuICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPXtgdGV4dC0zeGwgc206dGV4dC01eGwgbWQ6dGV4dC02eGwgZm9udC1ib2xkIG1iLTQgc206bWItNiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0xMDAwICR7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzSW5WaWV3ID8gJ29wYWNpdHktMTAwIHRyYW5zbGF0ZS15LTAnIDogJ29wYWNpdHktMCB0cmFuc2xhdGUteS0xMCdcclxuICAgICAgICAgICAgICB9YH0gc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgVW5zZXIgQWJsYXVmXHJcbiAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2B0ZXh0LWxnIHNtOnRleHQteGwgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTAwMCBkZWxheS0yMDAgJHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NJblZpZXcgPyAnb3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMCcgOiAnb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTEwJ1xyXG4gICAgICAgICAgICAgIH1gfSBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fT5cclxuICAgICAgICAgICAgICAgIFNvIGzDpHVmdCBkaWUgWnVzYW1tZW5hcmJlaXQgYWJcclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLVszMnB4XSBweC0yIHB5LTEwIHNtOnB4LTYgc206cHktMTYgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNzAwXCJcclxuICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICR7Y29sb3JzLmJhY2tncm91bmR9RjIsICR7Y29sb3JzLmJhY2tncm91bmR9RTgpYFxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8VGltZWxpbmVEZW1vIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICB7LyogUHJpY2luZyBTZWN0aW9uICovfVxyXG4gICAgICAgIDxzZWN0aW9uIFxyXG4gICAgICAgICAgaWQ9XCJyZWZlcmVuY2VzXCJcclxuICAgICAgICAgIHJlZj17cHJpY2luZ1JlZn0gXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBweC00IHNtOnB4LTggcHktMTIgc206cHktMjAgcm91bmRlZC10LVsycmVtXSBzbTpyb3VuZGVkLXQtWzNyZW1dIHJvdW5kZWQtYi1bMnJlbV0gc206cm91bmRlZC1iLVszcmVtXSBteC0yIHNtOm14LTQgYmFja2Ryb3AtYmx1ci1zbVwiXHJcbiAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGAke2NvbG9ycy5wcmltYXJ5fUYwYCB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctNHhsIG14LWF1dG8gdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0xMiBzbTptYi0xNlwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9e2B0ZXh0LTN4bCBzbTp0ZXh0LTV4bCBtZDp0ZXh0LTZ4bCBmb250LWJvbGQgbWItNCBzbTptYi02IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTEwMDAgJHtcclxuICAgICAgICAgICAgICAgIHByaWNpbmdJblZpZXcgPyAnb3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMCcgOiAnb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTEwJ1xyXG4gICAgICAgICAgICAgIH1gfSBzdHlsZT17eyBjb2xvcjogY29sb3JzLnRlcnRpYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgRmFpcmUgUHJlaXNlXHJcbiAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2B0ZXh0LWxnIHNtOnRleHQteGwgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTAwMCBkZWxheS0yMDAgJHtcclxuICAgICAgICAgICAgICAgIHByaWNpbmdJblZpZXcgPyAnb3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMCcgOiAnb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTEwJ1xyXG4gICAgICAgICAgICAgIH1gfSBzdHlsZT17eyBjb2xvcjogY29sb3JzLmJhY2tncm91bmQgfX0+XHJcbiAgICAgICAgICAgICAgICBUcmFuc3BhcmVudCB1bmQgZmxleGliZWxcclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BwLTggc206cC0xMiByb3VuZGVkLTN4bCBzaGFkb3ctMnhsIGJhY2tkcm9wLWJsdXItc20gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTAwMCBkZWxheS0zMDAgJHtcclxuICAgICAgICAgICAgICBwcmljaW5nSW5WaWV3ID8gJ29wYWNpdHktMTAwIHRyYW5zbGF0ZS15LTAnIDogJ29wYWNpdHktMCB0cmFuc2xhdGUteS0xMCdcclxuICAgICAgICAgICAgfWB9IHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLmJhY2tncm91bmR9RjBgIH19PlxyXG4gICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBzbTp0ZXh0LTN4bCBmb250LWJvbGQgbWItNlwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgIEluZGl2aWR1ZWxsZSBMw7ZzdW5nZW5cclxuICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtbGcgc206dGV4dC14bCBtYi04IGxlYWRpbmctcmVsYXhlZFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgVW5zZXJlIFByZWlzZSByaWNodGVuIHNpY2ggbmFjaCBkZW0gUHJvamVrdHVtZmFuZyB1bmQgSWhyZW4gQW5mb3JkZXJ1bmdlbi4gXHJcbiAgICAgICAgICAgICAgICBHZW1laW5zYW0gZmluZGVuIHdpciBlaW5lIEzDtnN1bmcsIGRpZSB6dSBJaHJlbSBCdWRnZXQgcGFzc3Qg4oCTIHRyYW5zcGFyZW50LCBmYWlyIHVuZCBmbGV4aWJlbC5cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgPFByaWNlQ2FsY3VsYXRvciAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgey8qIFRhcmdldCBHcm91cHMgJiBWYWx1ZSBQcm9wcyAqL31cclxuICAgICAgICA8c2VjdGlvbiBcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIHB4LTQgc206cHgtOCBweS0xMiBzbTpweS0yMCByb3VuZGVkLXQtWzJyZW1dIHNtOnJvdW5kZWQtdC1bM3JlbV0gcm91bmRlZC1iLVsycmVtXSBzbTpyb3VuZGVkLWItWzNyZW1dIG14LTIgc206bXgtNCBiYWNrZHJvcC1ibHVyLXNtXCJcclxuICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLmJhY2tncm91bmR9RjBgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy03eGwgbXgtYXV0b1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgbGc6Z3JpZC1jb2xzLTIgZ2FwLTEyIHNtOmdhcC0xNlwiPlxyXG4gICAgICAgICAgICAgIHsvKiBUYXJnZXQgR3JvdXBzICovfVxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC0yeGwgc206dGV4dC00eGwgZm9udC1ib2xkIG1iLTYgc206bWItOFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgRsO8ciB3ZW4gd2lyIGFyYmVpdGVuXHJcbiAgICAgICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1sZyBzbTp0ZXh0LXhsIGxlYWRpbmctcmVsYXhlZFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgICBXaXIgYXJiZWl0ZW4gbWl0IFVudGVybmVobWVuLCBkaWUgaWhyZSB2ZXJhbHRldGUgV2Vic2l0ZSBtb2Rlcm5pc2llcmVuIG9kZXIgaWhyZSBaZWl0IG5pY2h0IG1laHIgbWl0IFRlY2huaWsgdW5kIFN1cHBvcnQgdmVyc2Nod2VuZGVuIHdvbGxlbi5cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgey8qIFZhbHVlIFByb3BzICovfVxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC0yeGwgc206dGV4dC00eGwgZm9udC1ib2xkIG1iLTYgc206bWItOFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgV2FydW0gd2lyIGRhcyB0dW5cclxuICAgICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtM3hsIGJvcmRlciBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAke2NvbG9ycy5iYWNrZ3JvdW5kfUY1LCAke2NvbG9ycy50ZXJ0aWFyeX0xQSlgLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBgJHtjb2xvcnMuc2Vjb25kYXJ5fTU1YFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNCBzbTpwLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SG92ZXJFZmZlY3RcclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zPXt2YWx1ZVByb3BzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHktMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIHsvKiBDb250YWN0IFNlY3Rpb24gKi99XHJcbiAgICAgICAgPHNlY3Rpb24gXHJcbiAgICAgICAgICByZWY9e2NvbnRhY3RSZWZ9XHJcbiAgICAgICAgICBpZD1cImNvbnRhY3RcIlxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgcHgtNCBzbTpweC04IHB5LTEyIHNtOnB5LTIwIHJvdW5kZWQtdC1bMnJlbV0gc206cm91bmRlZC10LVszcmVtXSByb3VuZGVkLWItWzJyZW1dIHNtOnJvdW5kZWQtYi1bM3JlbV0gbXgtMiBzbTpteC00IGJhY2tkcm9wLWJsdXItc21cIlxyXG4gICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy00eGwgbXgtYXV0b1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyIG1iLTEyIHNtOm1iLTE2XCI+XHJcbiAgICAgICAgICAgICAgPGgyIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC0zeGwgc206dGV4dC01eGwgbWQ6dGV4dC02eGwgZm9udC1ib2xkIG1iLTQgc206bWItNlwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLmJhY2tncm91bmQgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBMYXNzZW4gU2llIHVucyBzcHJlY2hlblxyXG4gICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgICAgPHAgXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIHNtOnRleHQteGwgb3BhY2l0eS05MFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLmJhY2tncm91bmQgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBFcnrDpGhsZW4gU2llIHVucyB2b24gSWhyZW0gUHJvamVrdFxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTEwMDAgJHtcclxuICAgICAgICAgICAgICBjb250YWN0SW5WaWV3ID8gJ29wYWNpdHktMTAwIHRyYW5zbGF0ZS15LTAnIDogJ29wYWNpdHktMCB0cmFuc2xhdGUteS0xMCdcclxuICAgICAgICAgICAgfWB9PlxyXG4gICAgICAgICAgICAgIDxQcm90ZWN0ZWRBcHBvaW50bWVudEJvb2tpbmcgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIHsvKiBGb290ZXIgKi99XHJcbiAgICAgICAgPGZvb3RlciBcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIHB5LTggc206cHktMTIgYm9yZGVyLXQgcm91bmRlZC10LVsycmVtXSBzbTpyb3VuZGVkLXQtWzNyZW1dIG14LTIgc206bXgtNCBiYWNrZHJvcC1ibHVyLXNtXCJcclxuICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGAke2NvbG9ycy5wcmltYXJ5fUYwYCxcclxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGNvbG9ycy5zZWNvbmRhcnlcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy03eGwgbXgtYXV0byBweC00IHNtOnB4LThcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy00IGdhcC02IHNtOmdhcC04XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc3Bhbi0xIHNtOmNvbC1zcGFuLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtMnhsIHNtOnRleHQtM3hsIGZvbnQtYm9sZCBtYi00IHJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy50ZXJ0aWFyeSB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB6LTEwXCI+V2Via2xhcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSAtaW5zZXQtMiByb3VuZGVkLXhsIGJsdXItc20gb3BhY2l0eS0yMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19XHJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHAgXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTYgbGVhZGluZy1yZWxheGVkIHRleHQtc20gc206dGV4dC1iYXNlXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIElociBQYXJ0bmVyIGbDvHIgV2ViICYgU3VwcG9ydC4gTW9kZXJuZSBXZWJzaXRlcy4gS2xhcmUgS29tbXVuaWthdGlvbi4gUGVyc8O2bmxpY2hlciBTdXBwb3J0LlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGcgZm9udC1zZW1pYm9sZCBtYi00XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy50ZXJ0aWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgU2VydmljZXNcclxuICAgICAgICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yIHRleHQtc20gc206dGV4dC1iYXNlXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19PlxyXG4gICAgICAgICAgICAgICAgICB7WydXZWJkZXNpZ24nLCAnRS1Db21tZXJjZScsICdTRU8nLCAnSG9zdGluZyddLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2l0ZW19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzc05hbWU9XCJob3ZlcjpvcGFjaXR5LTgwIHRyYW5zaXRpb24tb3BhY2l0eVwiPntpdGVtfTwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZyBmb250LXNlbWlib2xkIG1iLTRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnRlcnRpYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgICBLb250YWt0XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInNwYWNlLXktMiB0ZXh0LXNtIHNtOnRleHQtYmFzZVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCB9fT5cclxuICAgICAgICAgICAgICAgICAgPGxpPjxMaW5rIGhyZWY9XCIvaW1wcmVzc3VtXCIgY2xhc3NOYW1lPVwiaG92ZXI6b3BhY2l0eS04MCB0cmFuc2l0aW9uLW9wYWNpdHlcIj5JbXByZXNzdW08L0xpbms+PC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpPjxMaW5rIGhyZWY9XCIvZGF0ZW5zY2h1dHpcIiBjbGFzc05hbWU9XCJob3ZlcjpvcGFjaXR5LTgwIHRyYW5zaXRpb24tb3BhY2l0eVwiPkRhdGVuc2NodXR6PC9MaW5rPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaT48TGluayBocmVmPVwiL2FnYlwiIGNsYXNzTmFtZT1cImhvdmVyOm9wYWNpdHktODAgdHJhbnNpdGlvbi1vcGFjaXR5XCI+QUdCPC9MaW5rPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaT48TGluayBocmVmPVwiL2tvbnRha3RlXCIgY2xhc3NOYW1lPVwiaG92ZXI6b3BhY2l0eS04MCB0cmFuc2l0aW9uLW9wYWNpdHlcIj5Lb250YWt0ZTwvTGluaz48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXQgbXQtNiBzbTptdC04IHB0LTYgc206cHQtOCB0ZXh0LWNlbnRlciB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5LFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxwPiZjb3B5OyAyMDI1IFdlYmtsYXIuIEFsbGUgUmVjaHRlIHZvcmJlaGFsdGVuLjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvb3Rlcj5cclxuXHJcbiAgICAgICAgey8qIEZpbG0gR3JhaW4gRWZmZWN0ICovfVxyXG5cclxuXHJcbiAgICAgICAgey8qIENvb2tpZSBCdXR0b24gKi99XHJcbiAgICAgICAgPENvb2tpZUJ1dHRvbiAvPlxyXG4gICAgICAgIFxyXG4gICAgICAgIHsvKiBBcHBvaW50bWVudCBTdGF0dXMgKi99XHJcbiAgICAgICAgPEFwcG9pbnRtZW50U3RhdHVzIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC8+XHJcbiAgKTtcclxufVxyXG4iXSwibmFtZXMiOlsidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkJ1dHRvbiIsIkNhbGVuZGFyIiwiQ29va2llIiwiY29sb3JzIiwiUHJvdGVjdGVkQXBwb2ludG1lbnRCb29raW5nIiwiQXBwb2ludG1lbnRTdGF0dXMiLCJQcmljZUNhbGN1bGF0b3IiLCJTcGlubmluZ051bWJlcnMiLCJHbGFzc1N1cmZhY2UiLCJMb2dvTG9vcCIsIlBpbGxOYXYiLCJUaW1lbGluZURlbW8iLCJIb3ZlckVmZmVjdCIsIkhlcm9TY3JvbGxEZW1vIiwiQmFja2dyb3VuZEJlYW1zIiwiTGluayIsInVzZVNjcm9sbEFuaW1hdGlvbiIsInNjcm9sbFkiLCJzZXRTY3JvbGxZIiwiaGFuZGxlU2Nyb2xsIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1c2VJblZpZXciLCJ0aHJlc2hvbGQiLCJpc0luVmlldyIsInNldElzSW5WaWV3IiwicmVmIiwib2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImVudHJ5IiwiaXNJbnRlcnNlY3RpbmciLCJjdXJyZW50Iiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJDb29raWVCdXR0b24iLCJzaG93QmFubmVyIiwic2V0U2hvd0Jhbm5lciIsImhhbmRsZUFjY2VwdCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJjbGFzc05hbWUiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsInNlY29uZGFyeSIsImRpdiIsImJhY2tncm91bmQiLCJjb2xvciIsInByaW1hcnkiLCJoMyIsInAiLCJ2YXJpYW50IiwiYm9yZGVyQ29sb3IiLCJBYm91dFNlcnZpY2VQYWdlIiwiaGVyb1JlZiIsImhlcm9JblZpZXciLCJzZXJ2aWNlc1JlZiIsInNlcnZpY2VzSW5WaWV3IiwicHJvY2Vzc1JlZiIsInByb2Nlc3NJblZpZXciLCJwcmljaW5nUmVmIiwicHJpY2luZ0luVmlldyIsImFib3V0UmVmIiwiYWJvdXRJblZpZXciLCJjb250YWN0UmVmIiwiY29udGFjdEluVmlldyIsIm5hdldyYXBwZXJSZWYiLCJuYXZJbm5lclJlZiIsIm5hdk9mZnNldCIsInNldE5hdk9mZnNldCIsIm5hdk9mZnNldFJlZiIsIm5hdkV4cGFuZGVkUmVmIiwiYW5pbWF0aW9uRnJhbWVSZWYiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVPZmZzZXQiLCJ0YXJnZXQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInN0YXJ0VmFsdWUiLCJkZWx0YSIsIk1hdGgiLCJhYnMiLCJkdXJhdGlvbiIsInN0YXJ0VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwiZWFzZU91dEN1YmljIiwidCIsInBvdyIsInN0ZXAiLCJlbGFwc2VkIiwicHJvZ3Jlc3MiLCJtaW4iLCJlYXNlZCIsInZhbHVlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FsY3VsYXRlTmF2T2Zmc2V0IiwibW9kZSIsImV4cGFuZGVkT3ZlcnJpZGUiLCJleHBhbmRlZCIsIndyYXBwZXJXaWR0aCIsImNsaWVudFdpZHRoIiwibmF2V2lkdGgiLCJvZmZzZXRXaWR0aCIsIm9mZnNldCIsIm1heCIsImhhbmRsZVJlc2l6ZSIsIlJlc2l6ZU9ic2VydmVyIiwid3JhcHBlciIsImhhbmRsZVRyYW5zaXRpb25FbmQiLCJldmVudCIsInByb3BlcnR5TmFtZSIsInBhcnRuZXJMb2dvcyIsIm5vZGUiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJnYXAiLCJzdmciLCJ2aWV3Qm94IiwiZmlsbCIsIndpZHRoIiwiaGVpZ2h0IiwieG1sbnMiLCJjaXJjbGUiLCJjeCIsImN5IiwiciIsInBhdGgiLCJkIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwib3BhY2l0eSIsInNwYW4iLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJ3aGl0ZVNwYWNlIiwidGl0bGUiLCJocmVmIiwicmVjdCIsIngiLCJ5IiwicngiLCJzdHJva2VMaW5lam9pbiIsInZhbHVlUHJvcHMiLCJkZXNjcmlwdGlvbiIsImxpbmsiLCJuYXZJc0V4cGFuZGVkIiwicHJldmlvdXNOYXZTdGF0ZSIsInByZXZpb3VzIiwicmFmMSIsInJhZjIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwibWF4V2lkdGgiLCJib3JkZXJSYWRpdXMiLCJkaXNwbGFjZSIsImJhY2tncm91bmRPcGFjaXR5IiwibWluSGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJwYWRkaW5nIiwidHJhbnNpdGlvbiIsInRyYW5zZm9ybSIsImxvZ28iLCJsb2dvQWx0IiwiaXRlbXMiLCJsYWJlbCIsImFjdGl2ZUhyZWYiLCJiYXNlQ29sb3IiLCJwaWxsQ29sb3IiLCJob3ZlcmVkUGlsbFRleHRDb2xvciIsInBpbGxUZXh0Q29sb3IiLCJwb2ludGVyRXZlbnRzIiwic2VjdGlvbiIsImlkIiwidmlkZW8iLCJhdXRvUGxheSIsIm11dGVkIiwibG9vcCIsInBsYXlzSW5saW5lIiwiZmlsdGVyIiwic291cmNlIiwic3JjIiwidHlwZSIsImgxIiwibWFwIiwiaXRlbSIsInRlcnRpYXJ5IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJwb3NpdGlvbiIsIm92ZXJmbG93IiwicGFkZGluZ0JvdHRvbSIsImxvZ29zIiwic3BlZWQiLCJkaXJlY3Rpb24iLCJsb2dvSGVpZ2h0IiwicGF1c2VPbkhvdmVyIiwic2NhbGVPbkhvdmVyIiwiYXJpYUxhYmVsIiwiekluZGV4IiwiaDIiLCJjb2x1bW5Db3VudCIsImNvbHVtbkdhcCIsImNvbHVtbkZpbGwiLCJ0ZXh0QWxpZ24iLCJmb290ZXIiLCJoNCIsInVsIiwibGkiLCJhIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/page.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/AppointmentBooking.tsx": /*!*******************************************!*\ !*** ./components/AppointmentBooking.tsx ***! \*******************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ AppointmentBooking; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check-big.js\");\n/* harmony import */ var _lib_supabase__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/supabase */ \"(app-pages-browser)/./lib/supabase.ts\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* harmony import */ var _AppointmentForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AppointmentForm */ \"(app-pages-browser)/./components/AppointmentForm.tsx\");\n/* harmony import */ var _EmailVerification__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./EmailVerification */ \"(app-pages-browser)/./components/EmailVerification.tsx\");\n/* harmony import */ var _hooks_useAuth__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/hooks/useAuth */ \"(app-pages-browser)/./hooks/useAuth.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\n\nfunction AppointmentBooking() {\n _s();\n const { user } = (0,_hooks_useAuth__WEBPACK_IMPORTED_MODULE_7__.useAuth)();\n const [currentStep, setCurrentStep] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"form\");\n const [appointmentData, setAppointmentData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [testMode, setTestMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); // Production mode - no test indicators\n const [tableStructure, setTableStructure] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [productionMode, setProductionMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); // Enable email verification\n const [customerAction, setCustomerAction] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const handleFormSubmit = async (data)=>{\n setAppointmentData(data);\n // Always go to email verification step\n setCurrentStep(\"verification\");\n };\n const handleVerificationComplete = async ()=>{\n if (!appointmentData) return;\n // Prüfe Authentifizierung nach E-Mail-Bestätigung\n if (!user) {\n setError(\"Bitte best\\xe4tige zuerst deine E-Mail-Adresse, um den Termin zu speichern.\");\n return;\n }\n setLoading(true);\n setError(null);\n try {\n // Create the appointment datetime by combining date and time\n console.log(\"=== DATE PROCESSING DEBUG ===\");\n console.log(\"Input termin_datum:\", appointmentData.termin_datum);\n console.log(\"Input termin_time:\", appointmentData.termin_time);\n console.log(\"Input termin_datum type:\", typeof appointmentData.termin_datum);\n console.log(\"Input termin_datum instanceof Date:\", appointmentData.termin_datum instanceof Date);\n // Check if termin_datum is actually a Date object\n if (!(appointmentData.termin_datum instanceof Date)) {\n console.error(\"❌ termin_datum is not a Date object!\");\n setError(\"Fehler: Ung\\xfcltiges Datum. Bitte w\\xe4hlen Sie einen Termin aus.\");\n return;\n }\n const appointmentDateTime = new Date(appointmentData.termin_datum);\n console.log(\"Created appointmentDateTime:\", appointmentDateTime);\n console.log(\"appointmentDateTime.toISOString():\", appointmentDateTime.toISOString());\n const [hours] = appointmentData.termin_time.split(\":\").map(Number);\n console.log(\"Extracted hours:\", hours);\n // Create the appointment datetime in local time to avoid timezone issues\n const year = appointmentDateTime.getFullYear();\n const month = appointmentDateTime.getMonth();\n const day = appointmentDateTime.getDate();\n console.log(\"Date components:\", {\n year,\n month,\n day,\n hours\n });\n // Create the final appointment datetime in local time\n const finalAppointmentDateTime = new Date(year, month, day, hours, 0, 0, 0);\n console.log(\"Final appointmentDateTime (local):\", finalAppointmentDateTime);\n console.log(\"Final appointmentDateTime.toISOString():\", finalAppointmentDateTime.toISOString());\n console.log(\"Final appointmentDateTime.getTime():\", finalAppointmentDateTime.getTime());\n console.log(\"Final appointmentDateTime local string:\", finalAppointmentDateTime.toLocaleString(\"de-DE\"));\n // Store the appointment time in local time format\n const localTimeString = \"\".concat(year, \"-\").concat((month + 1).toString().padStart(2, \"0\"), \"-\").concat(day.toString().padStart(2, \"0\"), \"T\").concat(hours.toString().padStart(2, \"0\"), \":00:00\");\n console.log(\"Local time string to save:\", localTimeString);\n // Check if customer already exists (by email)\n console.log(\"=== CUSTOMER CHECK DEBUG ===\");\n console.log(\"Input email:\", appointmentData.email);\n console.log(\"Input email type:\", typeof appointmentData.email);\n console.log(\"Input email length:\", appointmentData.email.length);\n console.log(\"Input email trimmed:\", appointmentData.email.trim());\n console.log(\"Input email lowercase:\", appointmentData.email.trim().toLowerCase());\n // First, let's check what's in the database for this email\n await checkSpecificEmail(appointmentData.email);\n // Try multiple email variations to find existing customer\n const emailVariations = [\n appointmentData.email.trim(),\n appointmentData.email.trim().toLowerCase(),\n appointmentData.email.trim().toUpperCase()\n ];\n console.log(\"Checking email variations:\", emailVariations);\n let existingCustomers = [];\n let checkError = null;\n // Try each email variation\n for (const emailVariation of emailVariations){\n const { data, error } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").select(\"*\").eq(\"email\", emailVariation).order(\"erstellt_am\", {\n ascending: false\n });\n if (error) {\n console.error('Error checking email variation \"'.concat(emailVariation, '\":'), error);\n checkError = error;\n continue;\n }\n if (data && data.length > 0) {\n console.log(\"Found \".concat(data.length, ' customers with email \"').concat(emailVariation, '\"'));\n existingCustomers = data;\n break;\n }\n }\n console.log(\"Database query result:\", {\n existingCustomers,\n checkError\n });\n console.log(\"Number of existing customers found:\", (existingCustomers === null || existingCustomers === void 0 ? void 0 : existingCustomers.length) || 0);\n if (existingCustomers && existingCustomers.length > 0) {\n console.log(\"All found customers with this email:\");\n existingCustomers.forEach((customer, index)=>{\n console.log(\"\".concat(index + 1, \". ID: \").concat(customer.id, ', Email: \"').concat(customer.email, '\", Created: ').concat(customer.erstellt_am, \", Termin: \").concat(customer.termin_datum));\n });\n }\n if (checkError) {\n console.error(\"Error checking existing customer:\", checkError);\n setError(\"Fehler beim \\xdcberpr\\xfcfen der Kundendaten. Bitte versuchen Sie es erneut.\");\n return;\n }\n const existingCustomer = existingCustomers && existingCustomers.length > 0 ? existingCustomers[0] : null;\n if (existingCustomer) {\n console.log(\"✅ Existing customer found:\", existingCustomer);\n console.log(\"Will UPDATE existing customer with ID:\", existingCustomer.id);\n // Warn if there are multiple entries with the same email\n if (existingCustomers.length > 1) {\n console.warn(\"⚠️ Found \".concat(existingCustomers.length, \" entries with email \").concat(appointmentData.email, \". Using the most recent one.\"));\n }\n } else {\n console.log(\"❌ No existing customer found - will CREATE new\");\n }\n const appointmentDataToSave = {\n email: appointmentData.email,\n beschreibung: \"\".concat(appointmentData.beschreibung, \"\\n\\nTermin: \").concat(formatAppointmentDate(appointmentData.termin_datum, appointmentData.termin_time), \"\\n\\nKontakt: \").concat(appointmentData.name, \" (\").concat(appointmentData.telefon, \")\\nFirma: \").concat(appointmentData.firma),\n termin_datum: localTimeString,\n ansprechpartner_name: appointmentData.name,\n telefon: appointmentData.telefon,\n firma: appointmentData.firma,\n berater: \"Webklar Team\",\n zielgruppe: \"Terminanfrage\"\n };\n let result;\n if (existingCustomer) {\n // Use upsert to ensure we update the existing customer\n console.log(\"\\uD83D\\uDD04 Starting UPSERT operation for customer ID:\", existingCustomer.id);\n const newDescription = \"\".concat(existingCustomer.beschreibung || \"\", \"\\n\\n--- NEUER TERMIN ---\\n\").concat(appointmentDataToSave.beschreibung);\n console.log(\"New description:\", newDescription);\n // Use upsert with the existing ID to force update\n const { data: upsertData, error: upsertError } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").upsert({\n id: existingCustomer.id,\n ...appointmentDataToSave,\n beschreibung: newDescription,\n erstellt_am: new Date().toISOString()\n }, {\n onConflict: \"id\" // Update on ID conflict\n }).select(\"*\");\n if (upsertError) {\n console.error(\"❌ Error upserting customer:\", upsertError);\n setError(\"Fehler beim Aktualisieren der Kundendaten. Bitte versuchen Sie es erneut.\");\n return;\n }\n if (!upsertData || upsertData.length === 0) {\n console.error(\"❌ Upsert operation returned no data\");\n setError(\"Fehler beim Aktualisieren der Kundendaten. Bitte versuchen Sie es erneut.\");\n return;\n }\n result = upsertData[0];\n console.log(\"✅ Customer updated via upsert:\", result);\n // Verify the update by fetching the customer again\n const { data: verifyData, error: verifyError } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").select(\"*\").eq(\"id\", existingCustomer.id).single();\n if (verifyError) {\n console.warn(\"⚠️ Could not verify update:\", verifyError);\n } else {\n console.log(\"✅ Update verified - customer data:\", verifyData);\n }\n setCustomerAction(\"updated\");\n } else {\n // Create new customer record ONLY if no existing customer found\n console.log(\"\\uD83C\\uDD95 Starting CREATE operation for new customer\");\n console.log(\"Create data:\", appointmentDataToSave);\n const { data, error } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").insert(appointmentDataToSave).select(\"*\");\n if (error) {\n console.error(\"❌ Error creating customer:\", error);\n setError(\"Fehler beim Erstellen der Kundendaten. Bitte versuchen Sie es erneut.\");\n return;\n }\n if (!data || data.length === 0) {\n console.error(\"❌ Create operation returned no data\");\n setError(\"Fehler beim Erstellen der Kundendaten. Bitte versuchen Sie es erneut.\");\n return;\n }\n result = data[0]; // Get the first (and only) created record\n console.log(\"✅ Customer created successfully:\", result);\n setCustomerAction(\"created\");\n }\n setCurrentStep(\"success\");\n } catch (err) {\n console.error(\"Unexpected error saving appointment:\", err);\n setError(\"Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut.\");\n } finally{\n setLoading(false);\n }\n };\n const handleBack = ()=>{\n setCurrentStep(\"form\");\n setError(null);\n };\n const handleReset = ()=>{\n setCurrentStep(\"form\");\n setAppointmentData(null);\n setError(null);\n setLoading(false);\n setCustomerAction(null);\n };\n const testDatabaseConnection = async ()=>{\n setLoading(true);\n setError(null);\n try {\n // Test basic connection and get table structure\n const { data, error } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").select(\"*\").limit(1);\n if (error) {\n console.error(\"Database connection test failed:\", error);\n setError(\"Datenbank-Verbindung fehlgeschlagen: \".concat(error.message));\n return;\n }\n console.log(\"Database connection successful:\", data);\n const columns = Object.keys(data[0] || {});\n console.log(\"Table structure:\", columns);\n setTableStructure(columns);\n // Analyze which columns we can use\n const availableColumns = {\n email: columns.includes(\"email\"),\n description: columns.includes(\"description\") || columns.includes(\"beschreibung\"),\n termin_datum: columns.includes(\"termin_datum\"),\n name: columns.includes(\"name\") || columns.includes(\"ansprechpartn\"),\n phone: columns.includes(\"phone\") || columns.includes(\"telefon\"),\n company: columns.includes(\"company\") || columns.includes(\"firma\")\n };\n console.log(\"Available columns for appointment:\", availableColumns);\n let statusMessage = \"✅ Datenbank-Verbindung erfolgreich!\\n\\n\";\n statusMessage += \"\\uD83D\\uDCCB Verf\\xfcgbare Spalten:\\n\";\n Object.entries(availableColumns).forEach((param)=>{\n let [key, available] = param;\n statusMessage += \"\".concat(available ? \"✅\" : \"❌\", \" \").concat(key, \"\\n\");\n });\n setError(statusMessage);\n } catch (err) {\n console.error(\"Connection test error:\", err);\n setError(\"❌ Datenbank-Verbindung fehlgeschlagen\");\n } finally{\n setLoading(false);\n }\n };\n const cleanupDuplicateCustomers = async ()=>{\n setLoading(true);\n setError(null);\n try {\n // Find all customers with duplicate emails\n const { data: allCustomers, error } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").select(\"*\").order(\"erstellt_am\", {\n ascending: true\n });\n if (error) {\n console.error(\"Error fetching customers:\", error);\n setError(\"Fehler beim Laden der Kundendaten.\");\n return;\n }\n // Group by email\n const emailGroups = {};\n allCustomers === null || allCustomers === void 0 ? void 0 : allCustomers.forEach((customer)=>{\n if (!emailGroups[customer.email]) {\n emailGroups[customer.email] = [];\n }\n emailGroups[customer.email].push(customer);\n });\n // Find duplicates\n const duplicates = Object.entries(emailGroups).filter((param)=>{\n let [email, customers] = param;\n return customers.length > 1;\n }).map((param)=>{\n let [email, customers] = param;\n return {\n email,\n customers\n };\n });\n console.log(\"Found duplicate customers:\", duplicates);\n if (duplicates.length === 0) {\n setError(\"✅ Keine Duplikate gefunden!\");\n return;\n }\n let statusMessage = \"\\uD83D\\uDD0D \".concat(duplicates.length, \" E-Mail-Adressen mit Duplikaten gefunden:\\n\\n\");\n duplicates.forEach((param)=>{\n let { email, customers } = param;\n statusMessage += \"\\uD83D\\uDCE7 \".concat(email, \": \").concat(customers.length, \" Eintr\\xe4ge\\n\");\n customers.forEach((customer, index)=>{\n statusMessage += \" \".concat(index + 1, \". ID: \").concat(customer.id, \" (\").concat(customer.erstellt_am, \")\\n\");\n });\n statusMessage += \"\\n\";\n });\n statusMessage += \"\\uD83D\\uDCA1 Tipp: Der neueste Eintrag wird f\\xfcr neue Termine verwendet.\";\n setError(statusMessage);\n } catch (err) {\n console.error(\"Cleanup error:\", err);\n setError(\"Fehler beim Bereinigen der Duplikate.\");\n } finally{\n setLoading(false);\n }\n };\n const checkSpecificEmail = async (email)=>{\n console.log(\"\\uD83D\\uDD0D Checking specific email:\", email);\n const { data, error } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").select(\"*\").eq(\"email\", email).order(\"erstellt_am\", {\n ascending: false\n });\n if (error) {\n console.error(\"Error checking email:\", error);\n return;\n }\n console.log(\"Found \".concat((data === null || data === void 0 ? void 0 : data.length) || 0, ' entries for email \"').concat(email, '\":'));\n data === null || data === void 0 ? void 0 : data.forEach((entry, index)=>{\n console.log(\"\".concat(index + 1, \". ID: \").concat(entry.id, ', Email: \"').concat(entry.email, '\", Created: ').concat(entry.erstellt_am));\n });\n return data;\n };\n const formatAppointmentDate = (date, time)=>{\n return new Intl.DateTimeFormat(\"de-DE\", {\n weekday: \"long\",\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\"\n }).format(date) + \" um \".concat(time, \" Uhr\");\n };\n const cleanupIncorrectDates = async ()=>{\n setLoading(true);\n setError(null);\n try {\n console.log(\"\\uD83E\\uDDF9 Cleaning up incorrect appointment dates...\");\n // Find all entries with the incorrect date \"2025-07-21 07:00:00\"\n const { data: incorrectEntries, error: findError } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").select(\"*\").eq(\"termin_datum\", \"2025-07-21T07:00:00.000Z\");\n if (findError) {\n console.error(\"Error finding incorrect entries:\", findError);\n setError(\"Fehler beim Finden der fehlerhaften Eintr\\xe4ge.\");\n return;\n }\n console.log(\"Found \".concat((incorrectEntries === null || incorrectEntries === void 0 ? void 0 : incorrectEntries.length) || 0, \" entries with incorrect date\"));\n if (incorrectEntries && incorrectEntries.length > 0) {\n // Update all incorrect entries to remove the termin_datum\n const { error: updateError } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_3__.supabase.from(\"kunden_projekte\").update({\n termin_datum: null\n }).eq(\"termin_datum\", \"2025-07-21T07:00:00.000Z\");\n if (updateError) {\n console.error(\"Error updating incorrect entries:\", updateError);\n setError(\"Fehler beim Bereinigen der fehlerhaften Eintr\\xe4ge.\");\n return;\n }\n console.log(\"✅ Successfully cleaned up incorrect appointment dates\");\n alert(\"✅ \".concat(incorrectEntries.length, \" fehlerhafte Termine wurden bereinigt!\"));\n } else {\n console.log(\"No incorrect entries found\");\n alert(\"✅ Keine fehlerhaften Termine gefunden!\");\n }\n } catch (err) {\n console.error(\"Unexpected error cleaning up dates:\", err);\n setError(\"Ein unerwarteter Fehler ist aufgetreten.\");\n } finally{\n setLoading(false);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-4xl mx-auto\",\n children: [\n productionMode && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 p-3 rounded-xl border-2 border-green-500 bg-green-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-green-700\",\n children: [\n \"✅ \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"Terminbuchung aktiv:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 476,\n columnNumber: 15\n }, this),\n \" Ihre Termine werden direkt in unserem System gespeichert.\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 475,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: testDatabaseConnection,\n disabled: loading,\n className: \"text-xs\",\n variant: \"outline\",\n size: \"sm\",\n children: loading ? \"Teste...\" : \"\\uD83D\\uDD0D DB-Verbindung testen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 479,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: cleanupDuplicateCustomers,\n disabled: loading,\n className: \"text-xs\",\n variant: \"outline\",\n size: \"sm\",\n children: loading ? \"Pr\\xfcfe...\" : \"\\uD83D\\uDD0D Duplikate pr\\xfcfen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 488,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: cleanupIncorrectDates,\n disabled: loading,\n className: \"text-xs\",\n variant: \"outline\",\n size: \"sm\",\n children: loading ? \"Bereinige...\" : \"\\uD83E\\uDDF9 Fehlerhafte Termine bereinigen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 497,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 478,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 474,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center space-x-2 sm:space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center space-y-2 \".concat(currentStep === \"form\" ? \"text-primary\" : currentStep === \"verification\" || currentStep === \"success\" ? \"text-primary\" : \"text-gray-400\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-10 h-10 rounded-full flex items-center justify-center transition-all duration-300 \".concat(currentStep === \"form\" ? \"bg-primary text-white shadow-lg scale-110\" : currentStep === \"verification\" || currentStep === \"success\" ? \"bg-primary text-white shadow-lg\" : \"bg-gray-200 text-gray-500\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 525,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 518,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs sm:text-sm font-medium text-center\",\n children: \"Termin ausw\\xe4hlen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 527,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 514,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 sm:w-12 h-1 rounded-full transition-all duration-300 \".concat(currentStep === \"verification\" || currentStep === \"success\" ? \"bg-primary\" : \"bg-gray-200\")\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 531,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center space-y-2 \".concat(currentStep === \"verification\" || currentStep === \"success\" ? \"text-primary\" : \"text-gray-400\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-10 h-10 rounded-full flex items-center justify-center transition-all duration-300 \".concat(currentStep === \"verification\" ? \"bg-primary text-white shadow-lg scale-110\" : currentStep === \"success\" ? \"bg-primary text-white shadow-lg\" : \"bg-gray-200 text-gray-500\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 550,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 543,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs sm:text-sm font-medium text-center\",\n children: \"E-Mail best\\xe4tigen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 552,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 538,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 512,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 511,\n columnNumber: 7\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 p-4 rounded-xl border-2 border-red-500 bg-red-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"text-red-600 text-sm whitespace-pre-wrap\",\n children: error\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 560,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 559,\n columnNumber: 9\n }, this),\n currentStep === \"form\" && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_AppointmentForm__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onSubmit: handleFormSubmit,\n loading: loading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 566,\n columnNumber: 9\n }, this),\n currentStep === \"verification\" && appointmentData && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_EmailVerification__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n email: appointmentData.email,\n onVerificationComplete: handleVerificationComplete,\n onBack: handleBack\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 573,\n columnNumber: 9\n }, this),\n currentStep === \"success\" && appointmentData && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-md mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 sm:p-8 rounded-3xl shadow-lg backdrop-blur-sm text-center\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.background, \"F0\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-6\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary, \"20\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"w-8 h-8\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 588,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 586,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-2xl font-bold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary\n },\n children: \"Termin best\\xe4tigt!\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 591,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.secondary\n },\n children: customerAction === \"created\" ? \"Vielen Dank f\\xfcr Ihre erste Terminanfrage! Ihr Kundenprofil wurde erstellt.\" : \"Vielen Dank f\\xfcr Ihre weitere Terminanfrage! Ihr bestehendes Kundenprofil wurde aktualisiert.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 596,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-xl border-2\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary, \"10\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"font-semibold mb-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary\n },\n children: \"Ihr Termin:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 608,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.secondary\n },\n children: formatAppointmentDate(appointmentData.termin_datum, appointmentData.termin_time)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 611,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 603,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-xl border-2\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary, \"10\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"font-semibold mb-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary\n },\n children: \"Kontaktdaten:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 621,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.secondary\n },\n children: [\n appointmentData.name,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"br\", {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 625,\n columnNumber: 41\n }, this),\n appointmentData.firma,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"br\", {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 626,\n columnNumber: 42\n }, this),\n appointmentData.email\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 624,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 616,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 595,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs mb-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.secondary\n },\n children: \"Vielen Dank f\\xfcr Ihre Terminanfrage! Wir werden uns in K\\xfcrze bei Ihnen melden, um den Termin zu best\\xe4tigen.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 632,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: handleReset,\n className: \"w-full rounded-xl\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_4__.colors.background\n },\n children: \"Neuen Termin buchen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 636,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 582,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 581,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentBooking.tsx\",\n lineNumber: 471,\n columnNumber: 5\n }, this);\n}\n_s(AppointmentBooking, \"w/v2Q61Af7tiOF6aAc3nN6MmSmQ=\", false, function() {\n return [\n _hooks_useAuth__WEBPACK_IMPORTED_MODULE_7__.useAuth\n ];\n});\n_c = AppointmentBooking;\nvar _c;\n$RefreshReg$(_c, \"AppointmentBooking\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQXBwb2ludG1lbnRCb29raW5nLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFd0M7QUFDUTtBQUNzQjtBQUM1QjtBQUNKO0FBQ1U7QUFDSTtBQUNWO0FBYzNCLFNBQVNXOztJQUN0QixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHRix1REFBT0E7SUFDeEIsTUFBTSxDQUFDRyxhQUFhQyxlQUFlLEdBQUdiLCtDQUFRQSxDQUFjO0lBQzVELE1BQU0sQ0FBQ2MsaUJBQWlCQyxtQkFBbUIsR0FBR2YsK0NBQVFBLENBQXlCO0lBQy9FLE1BQU0sQ0FBQ2dCLFNBQVNDLFdBQVcsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2tCLE9BQU9DLFNBQVMsR0FBR25CLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUNvQixVQUFVQyxZQUFZLEdBQUdyQiwrQ0FBUUEsQ0FBQyxRQUFRLHVDQUF1QztJQUN4RixNQUFNLENBQUNzQixnQkFBZ0JDLGtCQUFrQixHQUFHdkIsK0NBQVFBLENBQVcsRUFBRTtJQUNqRSxNQUFNLENBQUN3QixnQkFBZ0JDLGtCQUFrQixHQUFHekIsK0NBQVFBLENBQUMsUUFBUSw0QkFBNEI7SUFDekYsTUFBTSxDQUFDMEIsZ0JBQWdCQyxrQkFBa0IsR0FBRzNCLCtDQUFRQSxDQUErQjtJQUVuRixNQUFNNEIsbUJBQW1CLE9BQU9DO1FBQzlCZCxtQkFBbUJjO1FBRW5CLHVDQUF1QztRQUN2Q2hCLGVBQWU7SUFDakI7SUFFQSxNQUFNaUIsNkJBQTZCO1FBQ2pDLElBQUksQ0FBQ2hCLGlCQUFpQjtRQUV0QixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDSCxNQUFNO1lBQ1RRLFNBQVM7WUFDVDtRQUNGO1FBRUFGLFdBQVc7UUFDWEUsU0FBUztRQUVULElBQUk7WUFDRiw2REFBNkQ7WUFDN0RZLFFBQVFDLEdBQUcsQ0FBQztZQUNaRCxRQUFRQyxHQUFHLENBQUMsdUJBQXVC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RUksT0FBT2hKLCtDQUFNQSxDQUFDa0osU0FBUzs0Q0FBQzs7Z0RBQ3JEMUksZ0JBQWdCaUUsSUFBSTs4REFBQyw4REFBQzJFOzs7OztnREFDdEI1SSxnQkFBZ0JtRSxLQUFLOzhEQUFDLDhEQUFDeUU7Ozs7O2dEQUN2QjVJLGdCQUFnQndDLEtBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBSzVCLDhEQUFDaUY7NEJBQUVELFdBQVU7NEJBQWVZLE9BQU87Z0NBQUVJLE9BQU9oSiwrQ0FBTUEsQ0FBQ2tKLFNBQVM7NEJBQUM7c0NBQUc7Ozs7OztzQ0FJaEUsOERBQUN2Six5REFBTUE7NEJBQ0x3SSxTQUFTeEM7NEJBQ1RxQyxXQUFVOzRCQUNWWSxPQUFPO2dDQUNMQyxpQkFBaUI3SSwrQ0FBTUEsQ0FBQytJLE9BQU87Z0NBQy9CQyxPQUFPaEosK0NBQU1BLENBQUM4SSxVQUFVOzRCQUMxQjtzQ0FDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRYjtHQW5uQndCMUk7O1FBQ0xELG1EQUFPQTs7O0tBREZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQXBwb2ludG1lbnRCb29raW5nLnRzeD80NzA3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBDaGVja0NpcmNsZSwgQ2FsZW5kYXIsIE1haWwsIEFycm93TGVmdCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcclxuaW1wb3J0IHsgc3VwYWJhc2UgfSBmcm9tICdAL2xpYi9zdXBhYmFzZSc7XHJcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gJ0AvbGliL2NvbG9ycyc7XHJcbmltcG9ydCBBcHBvaW50bWVudEZvcm0gZnJvbSAnLi9BcHBvaW50bWVudEZvcm0nO1xyXG5pbXBvcnQgRW1haWxWZXJpZmljYXRpb24gZnJvbSAnLi9FbWFpbFZlcmlmaWNhdGlvbic7XHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2hvb2tzL3VzZUF1dGgnO1xyXG5cclxudHlwZSBCb29raW5nU3RlcCA9ICdmb3JtJyB8ICd2ZXJpZmljYXRpb24nIHwgJ3N1Y2Nlc3MnO1xyXG5cclxuaW50ZXJmYWNlIEFwcG9pbnRtZW50RGF0YSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRlbGVmb246IHN0cmluZztcclxuICBmaXJtYTogc3RyaW5nO1xyXG4gIGVtYWlsOiBzdHJpbmc7XHJcbiAgYmVzY2hyZWlidW5nOiBzdHJpbmc7XHJcbiAgdGVybWluX2RhdHVtPzogRGF0ZTtcclxuICB0ZXJtaW5fdGltZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXBwb2ludG1lbnRCb29raW5nKCkge1xyXG4gIGNvbnN0IHsgdXNlciB9ID0gdXNlQXV0aCgpO1xyXG4gIGNvbnN0IFtjdXJyZW50U3RlcCwgc2V0Q3VycmVudFN0ZXBdID0gdXNlU3RhdGU8Qm9va2luZ1N0ZXA+KCdmb3JtJyk7XHJcbiAgY29uc3QgW2FwcG9pbnRtZW50RGF0YSwgc2V0QXBwb2ludG1lbnREYXRhXSA9IHVzZVN0YXRlPEFwcG9pbnRtZW50RGF0YSB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFt0ZXN0TW9kZSwgc2V0VGVzdE1vZGVdID0gdXNlU3RhdGUoZmFsc2UpOyAvLyBQcm9kdWN0aW9uIG1vZGUgLSBubyB0ZXN0IGluZGljYXRvcnNcclxuICBjb25zdCBbdGFibGVTdHJ1Y3R1cmUsIHNldFRhYmxlU3RydWN0dXJlXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XHJcbiAgY29uc3QgW3Byb2R1Y3Rpb25Nb2RlLCBzZXRQcm9kdWN0aW9uTW9kZV0gPSB1c2VTdGF0ZShmYWxzZSk7IC8vIEVuYWJsZSBlbWFpbCB2ZXJpZmljYXRpb25cclxuICBjb25zdCBbY3VzdG9tZXJBY3Rpb24sIHNldEN1c3RvbWVyQWN0aW9uXSA9IHVzZVN0YXRlPCdjcmVhdGVkJyB8ICd1cGRhdGVkJyB8IG51bGw+KG51bGwpO1xyXG5cclxuICBjb25zdCBoYW5kbGVGb3JtU3VibWl0ID0gYXN5bmMgKGRhdGE6IEFwcG9pbnRtZW50RGF0YSkgPT4ge1xyXG4gICAgc2V0QXBwb2ludG1lbnREYXRhKGRhdGEpO1xyXG4gICAgXHJcbiAgICAvLyBBbHdheXMgZ28gdG8gZW1haWwgdmVyaWZpY2F0aW9uIHN0ZXBcclxuICAgIHNldEN1cnJlbnRTdGVwKCd2ZXJpZmljYXRpb24nKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVWZXJpZmljYXRpb25Db21wbGV0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGlmICghYXBwb2ludG1lbnREYXRhKSByZXR1cm47XHJcblxyXG4gICAgLy8gUHLDvGZlIEF1dGhlbnRpZml6aWVydW5nIG5hY2ggRS1NYWlsLUJlc3TDpHRpZ3VuZ1xyXG4gICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgIHNldEVycm9yKCdCaXR0ZSBiZXN0w6R0aWdlIHp1ZXJzdCBkZWluZSBFLU1haWwtQWRyZXNzZSwgdW0gZGVuIFRlcm1pbiB6dSBzcGVpY2hlcm4uJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgc2V0RXJyb3IobnVsbCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIHRoZSBhcHBvaW50bWVudCBkYXRldGltZSBieSBjb21iaW5pbmcgZGF0ZSBhbmQgdGltZVxyXG4gICAgICBjb25zb2xlLmxvZygnPT09IERBVEUgUFJPQ0VTU0lORyBERUJVRyA9PT0nKTtcclxuICAgICAgY29uc29sZS5sb2coJ0lucHV0IHRlcm1pbl9kYXR1bTonLCBhcHBvaW50bWVudERhdGEudGVybWluX2RhdHVtKTtcclxuICAgICAgY29uc29sZS5sb2coJ0lucHV0IHRlcm1pbl90aW1lOicsIGFwcG9pbnRtZW50RGF0YS50ZXJtaW5fdGltZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJbnB1dCB0ZXJtaW5fZGF0dW0gdHlwZTonLCB0eXBlb2YgYXBwb2ludG1lbnREYXRhLnRlcm1pbl9kYXR1bSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJbnB1dCB0ZXJtaW5fZGF0dW0gaW5zdGFuY2VvZiBEYXRlOicsIGFwcG9pbnRtZW50RGF0YS50ZXJtaW5fZGF0dW0gaW5zdGFuY2VvZiBEYXRlKTtcclxuICAgICAgXHJcbiAgICAgIC8vIENoZWNrIGlmIHRlcm1pbl9kYXR1bSBpcyBhY3R1YWxseSBhIERhdGUgb2JqZWN0XHJcbiAgICAgIGlmICghKGFwcG9pbnRtZW50RGF0YS50ZXJtaW5fZGF0dW0gaW5zdGFuY2VvZiBEYXRlKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCB0ZXJtaW5fZGF0dW0gaXMgbm90IGEgRGF0ZSBvYmplY3QhJyk7XHJcbiAgICAgICAgc2V0RXJyb3IoJ0ZlaGxlcjogVW5nw7xsdGlnZXMgRGF0dW0uIEJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIFRlcm1pbiBhdXMuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBhcHBvaW50bWVudERhdGVUaW1lID0gbmV3IERhdGUoYXBwb2ludG1lbnREYXRhLnRlcm1pbl9kYXR1bSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIGFwcG9pbnRtZW50RGF0ZVRpbWU6JywgYXBwb2ludG1lbnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdhcHBvaW50bWVudERhdGVUaW1lLnRvSVNPU3RyaW5nKCk6JywgYXBwb2ludG1lbnREYXRlVGltZS50b0lTT1N0cmluZygpKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IFtob3Vyc10gPSBhcHBvaW50bWVudERhdGEudGVybWluX3RpbWUhLnNwbGl0KCc6JykubWFwKE51bWJlcik7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdFeHRyYWN0ZWQgaG91cnM6JywgaG91cnMpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYXRlIHRoZSBhcHBvaW50bWVudCBkYXRldGltZSBpbiBsb2NhbCB0aW1lIHRvIGF2b2lkIHRpbWV6b25lIGlzc3Vlc1xyXG4gICAgICBjb25zdCB5ZWFyID0gYXBwb2ludG1lbnREYXRlVGltZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjb25zdCBtb250aCA9IGFwcG9pbnRtZW50RGF0ZVRpbWUuZ2V0TW9udGgoKTtcclxuICAgICAgY29uc3QgZGF5ID0gYXBwb2ludG1lbnREYXRlVGltZS5nZXREYXRlKCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zb2xlLmxvZygnRGF0ZSBjb21wb25lbnRzOicsIHsgeWVhciwgbW9udGgsIGRheSwgaG91cnMgfSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIGFwcG9pbnRtZW50IGRhdGV0aW1lIGluIGxvY2FsIHRpbWVcclxuICAgICAgY29uc3QgZmluYWxBcHBvaW50bWVudERhdGVUaW1lID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgaG91cnMsIDAsIDAsIDApO1xyXG4gICAgICBjb25zb2xlLmxvZygnRmluYWwgYXBwb2ludG1lbnREYXRlVGltZSAobG9jYWwpOicsIGZpbmFsQXBwb2ludG1lbnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGaW5hbCBhcHBvaW50bWVudERhdGVUaW1lLnRvSVNPU3RyaW5nKCk6JywgZmluYWxBcHBvaW50bWVudERhdGVUaW1lLnRvSVNPU3RyaW5nKCkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnRmluYWwgYXBwb2ludG1lbnREYXRlVGltZS5nZXRUaW1lKCk6JywgZmluYWxBcHBvaW50bWVudERhdGVUaW1lLmdldFRpbWUoKSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGaW5hbCBhcHBvaW50bWVudERhdGVUaW1lIGxvY2FsIHN0cmluZzonLCBmaW5hbEFwcG9pbnRtZW50RGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmcoJ2RlLURFJykpO1xyXG4gICAgICBcclxuICAgICAgLy8gU3RvcmUgdGhlIGFwcG9pbnRtZW50IHRpbWUgaW4gbG9jYWwgdGltZSBmb3JtYXRcclxuICAgICAgY29uc3QgbG9jYWxUaW1lU3RyaW5nID0gYCR7eWVhcn0tJHsobW9udGggKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9LSR7ZGF5LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1UJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjAwOjAwYDtcclxuICAgICAgY29uc29sZS5sb2coJ0xvY2FsIHRpbWUgc3RyaW5nIHRvIHNhdmU6JywgbG9jYWxUaW1lU3RyaW5nKTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGlmIGN1c3RvbWVyIGFscmVhZHkgZXhpc3RzIChieSBlbWFpbClcclxuICAgICAgY29uc29sZS5sb2coJz09PSBDVVNUT01FUiBDSEVDSyBERUJVRyA9PT0nKTtcclxuICAgICAgY29uc29sZS5sb2coJ0lucHV0IGVtYWlsOicsIGFwcG9pbnRtZW50RGF0YS5lbWFpbCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJbnB1dCBlbWFpbCB0eXBlOicsIHR5cGVvZiBhcHBvaW50bWVudERhdGEuZW1haWwpO1xyXG4gICAgICBjb25zb2xlLmxvZygnSW5wdXQgZW1haWwgbGVuZ3RoOicsIGFwcG9pbnRtZW50RGF0YS5lbWFpbC5sZW5ndGgpO1xyXG4gICAgICBjb25zb2xlLmxvZygnSW5wdXQgZW1haWwgdHJpbW1lZDonLCBhcHBvaW50bWVudERhdGEuZW1haWwudHJpbSgpKTtcclxuICAgICAgY29uc29sZS5sb2coJ0lucHV0IGVtYWlsIGxvd2VyY2FzZTonLCBhcHBvaW50bWVudERhdGEuZW1haWwudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICBcclxuICAgICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIHdoYXQncyBpbiB0aGUgZGF0YWJhc2UgZm9yIHRoaXMgZW1haWxcclxuICAgICAgYXdhaXQgY2hlY2tTcGVjaWZpY0VtYWlsKGFwcG9pbnRtZW50RGF0YS5lbWFpbCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBUcnkgbXVsdGlwbGUgZW1haWwgdmFyaWF0aW9ucyB0byBmaW5kIGV4aXN0aW5nIGN1c3RvbWVyXHJcbiAgICAgIGNvbnN0IGVtYWlsVmFyaWF0aW9ucyA9IFtcclxuICAgICAgICBhcHBvaW50bWVudERhdGEuZW1haWwudHJpbSgpLFxyXG4gICAgICAgIGFwcG9pbnRtZW50RGF0YS5lbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICBhcHBvaW50bWVudERhdGEuZW1haWwudHJpbSgpLnRvVXBwZXJDYXNlKClcclxuICAgICAgXTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCdDaGVja2luZyBlbWFpbCB2YXJpYXRpb25zOicsIGVtYWlsVmFyaWF0aW9ucyk7XHJcbiAgICAgIFxyXG4gICAgICBsZXQgZXhpc3RpbmdDdXN0b21lcnM6IGFueVtdID0gW107XHJcbiAgICAgIGxldCBjaGVja0Vycm9yOiBhbnkgPSBudWxsO1xyXG4gICAgICBcclxuICAgICAgLy8gVHJ5IGVhY2ggZW1haWwgdmFyaWF0aW9uXHJcbiAgICAgIGZvciAoY29uc3QgZW1haWxWYXJpYXRpb24gb2YgZW1haWxWYXJpYXRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2VcclxuICAgICAgICAgIC5mcm9tKCdrdW5kZW5fcHJvamVrdGUnKVxyXG4gICAgICAgICAgLnNlbGVjdCgnKicpXHJcbiAgICAgICAgICAuZXEoJ2VtYWlsJywgZW1haWxWYXJpYXRpb24pXHJcbiAgICAgICAgICAub3JkZXIoJ2Vyc3RlbGx0X2FtJywgeyBhc2NlbmRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgY2hlY2tpbmcgZW1haWwgdmFyaWF0aW9uIFwiJHtlbWFpbFZhcmlhdGlvbn1cIjpgLCBlcnJvcik7XHJcbiAgICAgICAgICBjaGVja0Vycm9yID0gZXJyb3I7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgJHtkYXRhLmxlbmd0aH0gY3VzdG9tZXJzIHdpdGggZW1haWwgXCIke2VtYWlsVmFyaWF0aW9ufVwiYCk7XHJcbiAgICAgICAgICBleGlzdGluZ0N1c3RvbWVycyA9IGRhdGE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKCdEYXRhYmFzZSBxdWVyeSByZXN1bHQ6JywgeyBleGlzdGluZ0N1c3RvbWVycywgY2hlY2tFcnJvciB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ051bWJlciBvZiBleGlzdGluZyBjdXN0b21lcnMgZm91bmQ6JywgZXhpc3RpbmdDdXN0b21lcnM/Lmxlbmd0aCB8fCAwKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChleGlzdGluZ0N1c3RvbWVycyAmJiBleGlzdGluZ0N1c3RvbWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0FsbCBmb3VuZCBjdXN0b21lcnMgd2l0aCB0aGlzIGVtYWlsOicpO1xyXG4gICAgICAgIGV4aXN0aW5nQ3VzdG9tZXJzLmZvckVhY2goKGN1c3RvbWVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYCR7aW5kZXggKyAxfS4gSUQ6ICR7Y3VzdG9tZXIuaWR9LCBFbWFpbDogXCIke2N1c3RvbWVyLmVtYWlsfVwiLCBDcmVhdGVkOiAke2N1c3RvbWVyLmVyc3RlbGx0X2FtfSwgVGVybWluOiAke2N1c3RvbWVyLnRlcm1pbl9kYXR1bX1gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoZWNrRXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjaGVja2luZyBleGlzdGluZyBjdXN0b21lcjonLCBjaGVja0Vycm9yKTtcclxuICAgICAgICBzZXRFcnJvcignRmVobGVyIGJlaW0gw5xiZXJwcsO8ZmVuIGRlciBLdW5kZW5kYXRlbi4gQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBleGlzdGluZ0N1c3RvbWVyID0gZXhpc3RpbmdDdXN0b21lcnMgJiYgZXhpc3RpbmdDdXN0b21lcnMubGVuZ3RoID4gMCA/IGV4aXN0aW5nQ3VzdG9tZXJzWzBdIDogbnVsbDtcclxuXHJcbiAgICAgIGlmIChleGlzdGluZ0N1c3RvbWVyKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ+KchSBFeGlzdGluZyBjdXN0b21lciBmb3VuZDonLCBleGlzdGluZ0N1c3RvbWVyKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnV2lsbCBVUERBVEUgZXhpc3RpbmcgY3VzdG9tZXIgd2l0aCBJRDonLCBleGlzdGluZ0N1c3RvbWVyLmlkKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgZW1haWxcclxuICAgICAgICBpZiAoZXhpc3RpbmdDdXN0b21lcnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKGDimqDvuI8gRm91bmQgJHtleGlzdGluZ0N1c3RvbWVycy5sZW5ndGh9IGVudHJpZXMgd2l0aCBlbWFpbCAke2FwcG9pbnRtZW50RGF0YS5lbWFpbH0uIFVzaW5nIHRoZSBtb3N0IHJlY2VudCBvbmUuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfinYwgTm8gZXhpc3RpbmcgY3VzdG9tZXIgZm91bmQgLSB3aWxsIENSRUFURSBuZXcnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYXBwb2ludG1lbnREYXRhVG9TYXZlID0ge1xyXG4gICAgICAgIGVtYWlsOiBhcHBvaW50bWVudERhdGEuZW1haWwsXHJcbiAgICAgICAgYmVzY2hyZWlidW5nOiBgJHthcHBvaW50bWVudERhdGEuYmVzY2hyZWlidW5nfVxcblxcblRlcm1pbjogJHtmb3JtYXRBcHBvaW50bWVudERhdGUoYXBwb2ludG1lbnREYXRhLnRlcm1pbl9kYXR1bSEsIGFwcG9pbnRtZW50RGF0YS50ZXJtaW5fdGltZSEpfVxcblxcbktvbnRha3Q6ICR7YXBwb2ludG1lbnREYXRhLm5hbWV9ICgke2FwcG9pbnRtZW50RGF0YS50ZWxlZm9ufSlcXG5GaXJtYTogJHthcHBvaW50bWVudERhdGEuZmlybWF9YCxcclxuICAgICAgICB0ZXJtaW5fZGF0dW06IGxvY2FsVGltZVN0cmluZywgLy8gU3RvcmUgaW4gbG9jYWwgdGltZSBmb3JtYXRcclxuICAgICAgICBhbnNwcmVjaHBhcnRuZXJfbmFtZTogYXBwb2ludG1lbnREYXRhLm5hbWUsXHJcbiAgICAgICAgdGVsZWZvbjogYXBwb2ludG1lbnREYXRhLnRlbGVmb24sXHJcbiAgICAgICAgZmlybWE6IGFwcG9pbnRtZW50RGF0YS5maXJtYSxcclxuICAgICAgICBiZXJhdGVyOiAnV2Via2xhciBUZWFtJyxcclxuICAgICAgICB6aWVsZ3J1cHBlOiAnVGVybWluYW5mcmFnZSdcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCByZXN1bHQ7XHJcblxyXG4gICAgICBpZiAoZXhpc3RpbmdDdXN0b21lcikge1xyXG4gICAgICAgIC8vIFVzZSB1cHNlcnQgdG8gZW5zdXJlIHdlIHVwZGF0ZSB0aGUgZXhpc3RpbmcgY3VzdG9tZXJcclxuICAgICAgICBjb25zb2xlLmxvZygn8J+UhCBTdGFydGluZyBVUFNFUlQgb3BlcmF0aW9uIGZvciBjdXN0b21lciBJRDonLCBleGlzdGluZ0N1c3RvbWVyLmlkKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBuZXdEZXNjcmlwdGlvbiA9IGAke2V4aXN0aW5nQ3VzdG9tZXIuYmVzY2hyZWlidW5nIHx8ICcnfVxcblxcbi0tLSBORVVFUiBURVJNSU4gLS0tXFxuJHthcHBvaW50bWVudERhdGFUb1NhdmUuYmVzY2hyZWlidW5nfWA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coJ05ldyBkZXNjcmlwdGlvbjonLCBuZXdEZXNjcmlwdGlvbik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gVXNlIHVwc2VydCB3aXRoIHRoZSBleGlzdGluZyBJRCB0byBmb3JjZSB1cGRhdGVcclxuICAgICAgICBjb25zdCB7IGRhdGE6IHVwc2VydERhdGEsIGVycm9yOiB1cHNlcnRFcnJvciB9ID0gYXdhaXQgc3VwYWJhc2VcclxuICAgICAgICAgIC5mcm9tKCdrdW5kZW5fcHJvamVrdGUnKVxyXG4gICAgICAgICAgLnVwc2VydCh7XHJcbiAgICAgICAgICAgIGlkOiBleGlzdGluZ0N1c3RvbWVyLmlkLCAvLyBVc2UgZXhpc3RpbmcgSUQgdG8gZm9yY2UgdXBkYXRlXHJcbiAgICAgICAgICAgIC4uLmFwcG9pbnRtZW50RGF0YVRvU2F2ZSxcclxuICAgICAgICAgICAgYmVzY2hyZWlidW5nOiBuZXdEZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgZXJzdGVsbHRfYW06IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBvbkNvbmZsaWN0OiAnaWQnIC8vIFVwZGF0ZSBvbiBJRCBjb25mbGljdFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5zZWxlY3QoJyonKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodXBzZXJ0RXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBFcnJvciB1cHNlcnRpbmcgY3VzdG9tZXI6JywgdXBzZXJ0RXJyb3IpO1xyXG4gICAgICAgICAgc2V0RXJyb3IoJ0ZlaGxlciBiZWltIEFrdHVhbGlzaWVyZW4gZGVyIEt1bmRlbmRhdGVuLiBCaXR0ZSB2ZXJzdWNoZW4gU2llIGVzIGVybmV1dC4nKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF1cHNlcnREYXRhIHx8IHVwc2VydERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgVXBzZXJ0IG9wZXJhdGlvbiByZXR1cm5lZCBubyBkYXRhJyk7XHJcbiAgICAgICAgICBzZXRFcnJvcignRmVobGVyIGJlaW0gQWt0dWFsaXNpZXJlbiBkZXIgS3VuZGVuZGF0ZW4uIEJpdHRlIHZlcnN1Y2hlbiBTaWUgZXMgZXJuZXV0LicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXN1bHQgPSB1cHNlcnREYXRhWzBdO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfinIUgQ3VzdG9tZXIgdXBkYXRlZCB2aWEgdXBzZXJ0OicsIHJlc3VsdCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gVmVyaWZ5IHRoZSB1cGRhdGUgYnkgZmV0Y2hpbmcgdGhlIGN1c3RvbWVyIGFnYWluXHJcbiAgICAgICAgY29uc3QgeyBkYXRhOiB2ZXJpZnlEYXRhLCBlcnJvcjogdmVyaWZ5RXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXHJcbiAgICAgICAgICAuZnJvbSgna3VuZGVuX3Byb2pla3RlJylcclxuICAgICAgICAgIC5zZWxlY3QoJyonKVxyXG4gICAgICAgICAgLmVxKCdpZCcsIGV4aXN0aW5nQ3VzdG9tZXIuaWQpXHJcbiAgICAgICAgICAuc2luZ2xlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHZlcmlmeUVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyBDb3VsZCBub3QgdmVyaWZ5IHVwZGF0ZTonLCB2ZXJpZnlFcnJvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCfinIUgVXBkYXRlIHZlcmlmaWVkIC0gY3VzdG9tZXIgZGF0YTonLCB2ZXJpZnlEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgc2V0Q3VzdG9tZXJBY3Rpb24oJ3VwZGF0ZWQnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDcmVhdGUgbmV3IGN1c3RvbWVyIHJlY29yZCBPTkxZIGlmIG5vIGV4aXN0aW5nIGN1c3RvbWVyIGZvdW5kXHJcbiAgICAgICAgY29uc29sZS5sb2coJ/CfhpUgU3RhcnRpbmcgQ1JFQVRFIG9wZXJhdGlvbiBmb3IgbmV3IGN1c3RvbWVyJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NyZWF0ZSBkYXRhOicsIGFwcG9pbnRtZW50RGF0YVRvU2F2ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2VcclxuICAgICAgICAgIC5mcm9tKCdrdW5kZW5fcHJvamVrdGUnKVxyXG4gICAgICAgICAgLmluc2VydChhcHBvaW50bWVudERhdGFUb1NhdmUpXHJcbiAgICAgICAgICAuc2VsZWN0KCcqJyk7XHJcblxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIEVycm9yIGNyZWF0aW5nIGN1c3RvbWVyOicsIGVycm9yKTtcclxuICAgICAgICAgIHNldEVycm9yKCdGZWhsZXIgYmVpbSBFcnN0ZWxsZW4gZGVyIEt1bmRlbmRhdGVuLiBCaXR0ZSB2ZXJzdWNoZW4gU2llIGVzIGVybmV1dC4nKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIENyZWF0ZSBvcGVyYXRpb24gcmV0dXJuZWQgbm8gZGF0YScpO1xyXG4gICAgICAgICAgc2V0RXJyb3IoJ0ZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXIgS3VuZGVuZGF0ZW4uIEJpdHRlIHZlcnN1Y2hlbiBTaWUgZXMgZXJuZXV0LicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzdWx0ID0gZGF0YVswXTsgLy8gR2V0IHRoZSBmaXJzdCAoYW5kIG9ubHkpIGNyZWF0ZWQgcmVjb3JkXHJcbiAgICAgICAgY29uc29sZS5sb2coJ+KchSBDdXN0b21lciBjcmVhdGVkIHN1Y2Nlc3NmdWxseTonLCByZXN1bHQpO1xyXG4gICAgICAgIHNldEN1c3RvbWVyQWN0aW9uKCdjcmVhdGVkJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldEN1cnJlbnRTdGVwKCdzdWNjZXNzJyk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBlcnJvciBzYXZpbmcgYXBwb2ludG1lbnQ6JywgZXJyKTtcclxuICAgICAgc2V0RXJyb3IoJ0VpbiB1bmVyd2FydGV0ZXIgRmVobGVyIGlzdCBhdWZnZXRyZXRlbi4gQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVCYWNrID0gKCkgPT4ge1xyXG4gICAgc2V0Q3VycmVudFN0ZXAoJ2Zvcm0nKTtcclxuICAgIHNldEVycm9yKG51bGwpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVJlc2V0ID0gKCkgPT4ge1xyXG4gICAgc2V0Q3VycmVudFN0ZXAoJ2Zvcm0nKTtcclxuICAgIHNldEFwcG9pbnRtZW50RGF0YShudWxsKTtcclxuICAgIHNldEVycm9yKG51bGwpO1xyXG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICBzZXRDdXN0b21lckFjdGlvbihudWxsKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB0ZXN0RGF0YWJhc2VDb25uZWN0aW9uID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgIHNldEVycm9yKG51bGwpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBUZXN0IGJhc2ljIGNvbm5lY3Rpb24gYW5kIGdldCB0YWJsZSBzdHJ1Y3R1cmVcclxuICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2VcclxuICAgICAgICAuZnJvbSgna3VuZGVuX3Byb2pla3RlJylcclxuICAgICAgICAuc2VsZWN0KCcqJylcclxuICAgICAgICAubGltaXQoMSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdEYXRhYmFzZSBjb25uZWN0aW9uIHRlc3QgZmFpbGVkOicsIGVycm9yKTtcclxuICAgICAgICBzZXRFcnJvcihgRGF0ZW5iYW5rLVZlcmJpbmR1bmcgZmVobGdlc2NobGFnZW46ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCdEYXRhYmFzZSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWw6JywgZGF0YSk7XHJcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBPYmplY3Qua2V5cyhkYXRhWzBdIHx8IHt9KTtcclxuICAgICAgY29uc29sZS5sb2coJ1RhYmxlIHN0cnVjdHVyZTonLCBjb2x1bW5zKTtcclxuICAgICAgc2V0VGFibGVTdHJ1Y3R1cmUoY29sdW1ucyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBBbmFseXplIHdoaWNoIGNvbHVtbnMgd2UgY2FuIHVzZVxyXG4gICAgICBjb25zdCBhdmFpbGFibGVDb2x1bW5zID0ge1xyXG4gICAgICAgIGVtYWlsOiBjb2x1bW5zLmluY2x1ZGVzKCdlbWFpbCcpLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjb2x1bW5zLmluY2x1ZGVzKCdkZXNjcmlwdGlvbicpIHx8IGNvbHVtbnMuaW5jbHVkZXMoJ2Jlc2NocmVpYnVuZycpLFxyXG4gICAgICAgIHRlcm1pbl9kYXR1bTogY29sdW1ucy5pbmNsdWRlcygndGVybWluX2RhdHVtJyksXHJcbiAgICAgICAgbmFtZTogY29sdW1ucy5pbmNsdWRlcygnbmFtZScpIHx8IGNvbHVtbnMuaW5jbHVkZXMoJ2Fuc3ByZWNocGFydG4nKSxcclxuICAgICAgICBwaG9uZTogY29sdW1ucy5pbmNsdWRlcygncGhvbmUnKSB8fCBjb2x1bW5zLmluY2x1ZGVzKCd0ZWxlZm9uJyksXHJcbiAgICAgICAgY29tcGFueTogY29sdW1ucy5pbmNsdWRlcygnY29tcGFueScpIHx8IGNvbHVtbnMuaW5jbHVkZXMoJ2Zpcm1hJylcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCdBdmFpbGFibGUgY29sdW1ucyBmb3IgYXBwb2ludG1lbnQ6JywgYXZhaWxhYmxlQ29sdW1ucyk7XHJcbiAgICAgIFxyXG4gICAgICBsZXQgc3RhdHVzTWVzc2FnZSA9ICfinIUgRGF0ZW5iYW5rLVZlcmJpbmR1bmcgZXJmb2xncmVpY2ghXFxuXFxuJztcclxuICAgICAgc3RhdHVzTWVzc2FnZSArPSAn8J+TiyBWZXJmw7xnYmFyZSBTcGFsdGVuOlxcbic7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGF2YWlsYWJsZUNvbHVtbnMpLmZvckVhY2goKFtrZXksIGF2YWlsYWJsZV0pID0+IHtcclxuICAgICAgICBzdGF0dXNNZXNzYWdlICs9IGAke2F2YWlsYWJsZSA/ICfinIUnIDogJ+KdjCd9ICR7a2V5fVxcbmA7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgc2V0RXJyb3Ioc3RhdHVzTWVzc2FnZSk7XHJcbiAgICAgIFxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nvbm5lY3Rpb24gdGVzdCBlcnJvcjonLCBlcnIpO1xyXG4gICAgICBzZXRFcnJvcign4p2MIERhdGVuYmFuay1WZXJiaW5kdW5nIGZlaGxnZXNjaGxhZ2VuJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBjbGVhbnVwRHVwbGljYXRlQ3VzdG9tZXJzID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgIHNldEVycm9yKG51bGwpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBGaW5kIGFsbCBjdXN0b21lcnMgd2l0aCBkdXBsaWNhdGUgZW1haWxzXHJcbiAgICAgIGNvbnN0IHsgZGF0YTogYWxsQ3VzdG9tZXJzLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2VcclxuICAgICAgICAuZnJvbSgna3VuZGVuX3Byb2pla3RlJylcclxuICAgICAgICAuc2VsZWN0KCcqJylcclxuICAgICAgICAub3JkZXIoJ2Vyc3RlbGx0X2FtJywgeyBhc2NlbmRpbmc6IHRydWUgfSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjdXN0b21lcnM6JywgZXJyb3IpO1xyXG4gICAgICAgIHNldEVycm9yKCdGZWhsZXIgYmVpbSBMYWRlbiBkZXIgS3VuZGVuZGF0ZW4uJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBHcm91cCBieSBlbWFpbFxyXG4gICAgICBjb25zdCBlbWFpbEdyb3VwczogeyBbZW1haWw6IHN0cmluZ106IGFueVtdIH0gPSB7fTtcclxuICAgICAgYWxsQ3VzdG9tZXJzPy5mb3JFYWNoKGN1c3RvbWVyID0+IHtcclxuICAgICAgICBpZiAoIWVtYWlsR3JvdXBzW2N1c3RvbWVyLmVtYWlsXSkge1xyXG4gICAgICAgICAgZW1haWxHcm91cHNbY3VzdG9tZXIuZW1haWxdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVtYWlsR3JvdXBzW2N1c3RvbWVyLmVtYWlsXS5wdXNoKGN1c3RvbWVyKTtcclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBGaW5kIGR1cGxpY2F0ZXNcclxuICAgICAgY29uc3QgZHVwbGljYXRlcyA9IE9iamVjdC5lbnRyaWVzKGVtYWlsR3JvdXBzKVxyXG4gICAgICAgIC5maWx0ZXIoKFtlbWFpbCwgY3VzdG9tZXJzXSkgPT4gY3VzdG9tZXJzLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgLm1hcCgoW2VtYWlsLCBjdXN0b21lcnNdKSA9PiAoeyBlbWFpbCwgY3VzdG9tZXJzIH0pKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCdGb3VuZCBkdXBsaWNhdGUgY3VzdG9tZXJzOicsIGR1cGxpY2F0ZXMpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgc2V0RXJyb3IoJ+KchSBLZWluZSBEdXBsaWthdGUgZ2VmdW5kZW4hJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBsZXQgc3RhdHVzTWVzc2FnZSA9IGDwn5SNICR7ZHVwbGljYXRlcy5sZW5ndGh9IEUtTWFpbC1BZHJlc3NlbiBtaXQgRHVwbGlrYXRlbiBnZWZ1bmRlbjpcXG5cXG5gO1xyXG4gICAgICBcclxuICAgICAgZHVwbGljYXRlcy5mb3JFYWNoKCh7IGVtYWlsLCBjdXN0b21lcnMgfSkgPT4ge1xyXG4gICAgICAgIHN0YXR1c01lc3NhZ2UgKz0gYPCfk6cgJHtlbWFpbH06ICR7Y3VzdG9tZXJzLmxlbmd0aH0gRWludHLDpGdlXFxuYDtcclxuICAgICAgICBjdXN0b21lcnMuZm9yRWFjaCgoY3VzdG9tZXIsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBzdGF0dXNNZXNzYWdlICs9IGAgICR7aW5kZXggKyAxfS4gSUQ6ICR7Y3VzdG9tZXIuaWR9ICgke2N1c3RvbWVyLmVyc3RlbGx0X2FtfSlcXG5gO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN0YXR1c01lc3NhZ2UgKz0gJ1xcbic7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgc3RhdHVzTWVzc2FnZSArPSAn8J+SoSBUaXBwOiBEZXIgbmV1ZXN0ZSBFaW50cmFnIHdpcmQgZsO8ciBuZXVlIFRlcm1pbmUgdmVyd2VuZGV0Lic7XHJcbiAgICAgIFxyXG4gICAgICBzZXRFcnJvcihzdGF0dXNNZXNzYWdlKTtcclxuICAgICAgXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQ2xlYW51cCBlcnJvcjonLCBlcnIpO1xyXG4gICAgICBzZXRFcnJvcignRmVobGVyIGJlaW0gQmVyZWluaWdlbiBkZXIgRHVwbGlrYXRlLicpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY2hlY2tTcGVjaWZpY0VtYWlsID0gYXN5bmMgKGVtYWlsOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKCfwn5SNIENoZWNraW5nIHNwZWNpZmljIGVtYWlsOicsIGVtYWlsKTtcclxuICAgIFxyXG4gICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2VcclxuICAgICAgLmZyb20oJ2t1bmRlbl9wcm9qZWt0ZScpXHJcbiAgICAgIC5zZWxlY3QoJyonKVxyXG4gICAgICAuZXEoJ2VtYWlsJywgZW1haWwpXHJcbiAgICAgIC5vcmRlcignZXJzdGVsbHRfYW0nLCB7IGFzY2VuZGluZzogZmFsc2UgfSk7XHJcbiAgICBcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjaGVja2luZyBlbWFpbDonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coYEZvdW5kICR7ZGF0YT8ubGVuZ3RoIHx8IDB9IGVudHJpZXMgZm9yIGVtYWlsIFwiJHtlbWFpbH1cIjpgKTtcclxuICAgIGRhdGE/LmZvckVhY2goKGVudHJ5LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhgJHtpbmRleCArIDF9LiBJRDogJHtlbnRyeS5pZH0sIEVtYWlsOiBcIiR7ZW50cnkuZW1haWx9XCIsIENyZWF0ZWQ6ICR7ZW50cnkuZXJzdGVsbHRfYW19YCk7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZm9ybWF0QXBwb2ludG1lbnREYXRlID0gKGRhdGU6IERhdGUsIHRpbWU6IHN0cmluZykgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdkZS1ERScsIHtcclxuICAgICAgd2Vla2RheTogJ2xvbmcnLFxyXG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcclxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcclxuICAgICAgeWVhcjogJ251bWVyaWMnXHJcbiAgICB9KS5mb3JtYXQoZGF0ZSkgKyBgIHVtICR7dGltZX0gVWhyYDtcclxuICB9O1xyXG5cclxuICBjb25zdCBjbGVhbnVwSW5jb3JyZWN0RGF0ZXMgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgc2V0RXJyb3IobnVsbCk7XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCfwn6e5IENsZWFuaW5nIHVwIGluY29ycmVjdCBhcHBvaW50bWVudCBkYXRlcy4uLicpO1xyXG4gICAgICBcclxuICAgICAgLy8gRmluZCBhbGwgZW50cmllcyB3aXRoIHRoZSBpbmNvcnJlY3QgZGF0ZSBcIjIwMjUtMDctMjEgMDc6MDA6MDBcIlxyXG4gICAgICBjb25zdCB7IGRhdGE6IGluY29ycmVjdEVudHJpZXMsIGVycm9yOiBmaW5kRXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXHJcbiAgICAgICAgLmZyb20oJ2t1bmRlbl9wcm9qZWt0ZScpXHJcbiAgICAgICAgLnNlbGVjdCgnKicpXHJcbiAgICAgICAgLmVxKCd0ZXJtaW5fZGF0dW0nLCAnMjAyNS0wNy0yMVQwNzowMDowMC4wMDBaJyk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZmluZEVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmluZGluZyBpbmNvcnJlY3QgZW50cmllczonLCBmaW5kRXJyb3IpO1xyXG4gICAgICAgIHNldEVycm9yKCdGZWhsZXIgYmVpbSBGaW5kZW4gZGVyIGZlaGxlcmhhZnRlbiBFaW50csOkZ2UuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zb2xlLmxvZyhgRm91bmQgJHtpbmNvcnJlY3RFbnRyaWVzPy5sZW5ndGggfHwgMH0gZW50cmllcyB3aXRoIGluY29ycmVjdCBkYXRlYCk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoaW5jb3JyZWN0RW50cmllcyAmJiBpbmNvcnJlY3RFbnRyaWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBVcGRhdGUgYWxsIGluY29ycmVjdCBlbnRyaWVzIHRvIHJlbW92ZSB0aGUgdGVybWluX2RhdHVtXHJcbiAgICAgICAgY29uc3QgeyBlcnJvcjogdXBkYXRlRXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXHJcbiAgICAgICAgICAuZnJvbSgna3VuZGVuX3Byb2pla3RlJylcclxuICAgICAgICAgIC51cGRhdGUoeyB0ZXJtaW5fZGF0dW06IG51bGwgfSlcclxuICAgICAgICAgIC5lcSgndGVybWluX2RhdHVtJywgJzIwMjUtMDctMjFUMDc6MDA6MDAuMDAwWicpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh1cGRhdGVFcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgaW5jb3JyZWN0IGVudHJpZXM6JywgdXBkYXRlRXJyb3IpO1xyXG4gICAgICAgICAgc2V0RXJyb3IoJ0ZlaGxlciBiZWltIEJlcmVpbmlnZW4gZGVyIGZlaGxlcmhhZnRlbiBFaW50csOkZ2UuJyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKCfinIUgU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgdXAgaW5jb3JyZWN0IGFwcG9pbnRtZW50IGRhdGVzJyk7XHJcbiAgICAgICAgYWxlcnQoYOKchSAke2luY29ycmVjdEVudHJpZXMubGVuZ3RofSBmZWhsZXJoYWZ0ZSBUZXJtaW5lIHd1cmRlbiBiZXJlaW5pZ3QhYCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ05vIGluY29ycmVjdCBlbnRyaWVzIGZvdW5kJyk7XHJcbiAgICAgICAgYWxlcnQoJ+KchSBLZWluZSBmZWhsZXJoYWZ0ZW4gVGVybWluZSBnZWZ1bmRlbiEnKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGNsZWFuaW5nIHVwIGRhdGVzOicsIGVycik7XHJcbiAgICAgIHNldEVycm9yKCdFaW4gdW5lcndhcnRldGVyIEZlaGxlciBpc3QgYXVmZ2V0cmV0ZW4uJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctNHhsIG14LWF1dG9cIj5cclxuICAgICAgey8qIFByb2R1Y3Rpb24gTW9kZSBJbmRpY2F0b3IgKi99XHJcbiAgICAgIHtwcm9kdWN0aW9uTW9kZSAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IHAtMyByb3VuZGVkLXhsIGJvcmRlci0yIGJvcmRlci1ncmVlbi01MDAgYmctZ3JlZW4tNTBcIj5cclxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmVlbi03MDBcIj5cclxuICAgICAgICAgICAg4pyFIDxzdHJvbmc+VGVybWluYnVjaHVuZyBha3Rpdjo8L3N0cm9uZz4gSWhyZSBUZXJtaW5lIHdlcmRlbiBkaXJla3QgaW4gdW5zZXJlbSBTeXN0ZW0gZ2VzcGVpY2hlcnQuXHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICBvbkNsaWNrPXt0ZXN0RGF0YWJhc2VDb25uZWN0aW9ufVxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPXtsb2FkaW5nfVxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHNcIlxyXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge2xvYWRpbmcgPyAnVGVzdGUuLi4nIDogJ/CflI0gREItVmVyYmluZHVuZyB0ZXN0ZW4nfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICBvbkNsaWNrPXtjbGVhbnVwRHVwbGljYXRlQ3VzdG9tZXJzfVxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPXtsb2FkaW5nfVxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHNcIlxyXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge2xvYWRpbmcgPyAnUHLDvGZlLi4uJyA6ICfwn5SNIER1cGxpa2F0ZSBwcsO8ZmVuJ31cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgb25DbGljaz17Y2xlYW51cEluY29ycmVjdERhdGVzfVxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPXtsb2FkaW5nfVxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHNcIlxyXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge2xvYWRpbmcgPyAnQmVyZWluaWdlLi4uJyA6ICfwn6e5IEZlaGxlcmhhZnRlIFRlcm1pbmUgYmVyZWluaWdlbid9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcblxyXG4gICAgICB7LyogRW5oYW5jZWQgU3RlcCBJbmRpY2F0b3IgKi99XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItOFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc3BhY2UteC0yIHNtOnNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgey8qIFN0ZXAgMSAqL31cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0yICR7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTdGVwID09PSAnZm9ybScgPyAndGV4dC1wcmltYXJ5JyA6IFxyXG4gICAgICAgICAgICBjdXJyZW50U3RlcCA9PT0gJ3ZlcmlmaWNhdGlvbicgfHwgY3VycmVudFN0ZXAgPT09ICdzdWNjZXNzJyA/ICd0ZXh0LXByaW1hcnknIDogJ3RleHQtZ3JheS00MDAnXHJcbiAgICAgICAgICB9YH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgdy0xMCBoLTEwIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgJHtcclxuICAgICAgICAgICAgICBjdXJyZW50U3RlcCA9PT0gJ2Zvcm0nIFxyXG4gICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHNoYWRvdy1sZyBzY2FsZS0xMTAnIFxyXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50U3RlcCA9PT0gJ3ZlcmlmaWNhdGlvbicgfHwgY3VycmVudFN0ZXAgPT09ICdzdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgc2hhZG93LWxnJ1xyXG4gICAgICAgICAgICAgICAgICA6ICdiZy1ncmF5LTIwMCB0ZXh0LWdyYXktNTAwJ1xyXG4gICAgICAgICAgICB9YH0+XHJcbiAgICAgICAgICAgICAgPENhbGVuZGFyIGNsYXNzTmFtZT1cInctNSBoLTVcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyXCI+VGVybWluIGF1c3fDpGhsZW48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgey8qIENvbm5lY3RvciAxICovfVxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2B3LTggc206dy0xMiBoLTEgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCAke1xyXG4gICAgICAgICAgICBjdXJyZW50U3RlcCA9PT0gJ3ZlcmlmaWNhdGlvbicgfHwgY3VycmVudFN0ZXAgPT09ICdzdWNjZXNzJyBcclxuICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5JyBcclxuICAgICAgICAgICAgICA6ICdiZy1ncmF5LTIwMCdcclxuICAgICAgICAgIH1gfT48L2Rpdj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgey8qIFN0ZXAgMiAqL31cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0yICR7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTdGVwID09PSAndmVyaWZpY2F0aW9uJyB8fCBjdXJyZW50U3RlcCA9PT0gJ3N1Y2Nlc3MnIFxyXG4gICAgICAgICAgICAgID8gJ3RleHQtcHJpbWFyeScgXHJcbiAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTQwMCdcclxuICAgICAgICAgIH1gfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2B3LTEwIGgtMTAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCAke1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRTdGVwID09PSAndmVyaWZpY2F0aW9uJyBcclxuICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSBzaGFkb3ctbGcgc2NhbGUtMTEwJyBcclxuICAgICAgICAgICAgICAgIDogY3VycmVudFN0ZXAgPT09ICdzdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgc2hhZG93LWxnJ1xyXG4gICAgICAgICAgICAgICAgICA6ICdiZy1ncmF5LTIwMCB0ZXh0LWdyYXktNTAwJ1xyXG4gICAgICAgICAgICB9YH0+XHJcbiAgICAgICAgICAgICAgPE1haWwgY2xhc3NOYW1lPVwidy01IGgtNVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1jZW50ZXJcIj5FLU1haWwgYmVzdMOkdGlnZW48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICB7LyogRXJyb3IgRGlzcGxheSAqL31cclxuICAgICAge2Vycm9yICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTYgcC00IHJvdW5kZWQteGwgYm9yZGVyLTIgYm9yZGVyLXJlZC01MDAgYmctcmVkLTUwXCI+XHJcbiAgICAgICAgICA8cHJlIGNsYXNzTmFtZT1cInRleHQtcmVkLTYwMCB0ZXh0LXNtIHdoaXRlc3BhY2UtcHJlLXdyYXBcIj57ZXJyb3J9PC9wcmU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcblxyXG4gICAgICB7LyogU3RlcCBDb250ZW50ICovfVxyXG4gICAgICB7Y3VycmVudFN0ZXAgPT09ICdmb3JtJyAmJiAoXHJcbiAgICAgICAgPEFwcG9pbnRtZW50Rm9ybSBcclxuICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVGb3JtU3VibWl0fVxyXG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgICAgICAvPlxyXG4gICAgICApfVxyXG5cclxuICAgICAge2N1cnJlbnRTdGVwID09PSAndmVyaWZpY2F0aW9uJyAmJiBhcHBvaW50bWVudERhdGEgJiYgKFxyXG4gICAgICAgIDxFbWFpbFZlcmlmaWNhdGlvbiBcclxuICAgICAgICAgIGVtYWlsPXthcHBvaW50bWVudERhdGEuZW1haWx9XHJcbiAgICAgICAgICBvblZlcmlmaWNhdGlvbkNvbXBsZXRlPXtoYW5kbGVWZXJpZmljYXRpb25Db21wbGV0ZX1cclxuICAgICAgICAgIG9uQmFjaz17aGFuZGxlQmFja31cclxuICAgICAgICAvPlxyXG4gICAgICApfVxyXG5cclxuICAgICAge2N1cnJlbnRTdGVwID09PSAnc3VjY2VzcycgJiYgYXBwb2ludG1lbnREYXRhICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBtYXgtdy1tZCBteC1hdXRvXCI+XHJcbiAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwLTYgc206cC04IHJvdW5kZWQtM3hsIHNoYWRvdy1sZyBiYWNrZHJvcC1ibHVyLXNtIHRleHQtY2VudGVyXCJcclxuICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMuYmFja2dyb3VuZH1GMGAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTE2IGgtMTYgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG14LWF1dG8gbWItNlwiXHJcbiAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMucHJpbWFyeX0yMGAgfX0+XHJcbiAgICAgICAgICAgICAgPENoZWNrQ2lyY2xlIGNsYXNzTmFtZT1cInctOCBoLThcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0gLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIG1iLTRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgVGVybWluIGJlc3TDpHRpZ3QhXHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNCBtYi02XCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAge2N1c3RvbWVyQWN0aW9uID09PSAnY3JlYXRlZCcgXHJcbiAgICAgICAgICAgICAgICAgID8gJ1ZpZWxlbiBEYW5rIGbDvHIgSWhyZSBlcnN0ZSBUZXJtaW5hbmZyYWdlISBJaHIgS3VuZGVucHJvZmlsIHd1cmRlIGVyc3RlbGx0LidcclxuICAgICAgICAgICAgICAgICAgOiAnVmllbGVuIERhbmsgZsO8ciBJaHJlIHdlaXRlcmUgVGVybWluYW5mcmFnZSEgSWhyIGJlc3RlaGVuZGVzIEt1bmRlbnByb2ZpbCB3dXJkZSBha3R1YWxpc2llcnQuJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNCByb3VuZGVkLXhsIGJvcmRlci0yXCIgXHJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMucHJpbWFyeX0xMGAsXHJcbiAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnMucHJpbWFyeSBcclxuICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCBtYi0yXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgICBJaHIgVGVybWluOlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgICB7Zm9ybWF0QXBwb2ludG1lbnREYXRlKGFwcG9pbnRtZW50RGF0YS50ZXJtaW5fZGF0dW0hLCBhcHBvaW50bWVudERhdGEudGVybWluX3RpbWUhKX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNCByb3VuZGVkLXhsIGJvcmRlci0yXCIgXHJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMucHJpbWFyeX0xMGAsXHJcbiAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnMucHJpbWFyeSBcclxuICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCBtYi0yXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgICBLb250YWt0ZGF0ZW46XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgIHthcHBvaW50bWVudERhdGEubmFtZX08YnIgLz5cclxuICAgICAgICAgICAgICAgICAge2FwcG9pbnRtZW50RGF0YS5maXJtYX08YnIgLz5cclxuICAgICAgICAgICAgICAgICAge2FwcG9pbnRtZW50RGF0YS5lbWFpbH1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIG1iLTZcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fT5cclxuICAgICAgICAgICAgICBWaWVsZW4gRGFuayBmw7xyIElocmUgVGVybWluYW5mcmFnZSEgV2lyIHdlcmRlbiB1bnMgaW4gS8O8cnplIGJlaSBJaG5lbiBtZWxkZW4sIHVtIGRlbiBUZXJtaW4genUgYmVzdMOkdGlnZW4uXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUmVzZXR9XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQteGxcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMucHJpbWFyeSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBOZXVlbiBUZXJtaW4gYnVjaGVuXHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiQnV0dG9uIiwiQ2hlY2tDaXJjbGUiLCJDYWxlbmRhciIsIk1haWwiLCJzdXBhYmFzZSIsImNvbG9ycyIsIkFwcG9pbnRtZW50Rm9ybSIsIkVtYWlsVmVyaWZpY2F0aW9uIiwidXNlQXV0aCIsIkFwcG9pbnRtZW50Qm9va2luZyIsInVzZXIiLCJjdXJyZW50U3RlcCIsInNldEN1cnJlbnRTdGVwIiwiYXBwb2ludG1lbnREYXRhIiwic2V0QXBwb2ludG1lbnREYXRhIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwidGVzdE1vZGUiLCJzZXRUZXN0TW9kZSIsInRhYmxlU3RydWN0dXJlIiwic2V0VGFibGVTdHJ1Y3R1cmUiLCJwcm9kdWN0aW9uTW9kZSIsInNldFByb2R1Y3Rpb25Nb2RlIiwiY3VzdG9tZXJBY3Rpb24iLCJzZXRDdXN0b21lckFjdGlvbiIsImhhbmRsZUZvcm1TdWJtaXQiLCJkYXRhIiwiaGFuZGxlVmVyaWZpY2F0aW9uQ29tcGxldGUiLCJjb25zb2xlIiwibG9nIiwidGVybWluX2RhdHVtIiwidGVybWluX3RpbWUiLCJEYXRlIiwiYXBwb2ludG1lbnREYXRlVGltZSIsInRvSVNPU3RyaW5nIiwiaG91cnMiLCJzcGxpdCIsIm1hcCIsIk51bWJlciIsInllYXIiLCJnZXRGdWxsWWVhciIsIm1vbnRoIiwiZ2V0TW9udGgiLCJkYXkiLCJnZXREYXRlIiwiZmluYWxBcHBvaW50bWVudERhdGVUaW1lIiwiZ2V0VGltZSIsInRvTG9jYWxlU3RyaW5nIiwibG9jYWxUaW1lU3RyaW5nIiwidG9TdHJpbmciLCJwYWRTdGFydCIsImVtYWlsIiwibGVuZ3RoIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiY2hlY2tTcGVjaWZpY0VtYWlsIiwiZW1haWxWYXJpYXRpb25zIiwidG9VcHBlckNhc2UiLCJleGlzdGluZ0N1c3RvbWVycyIsImNoZWNrRXJyb3IiLCJlbWFpbFZhcmlhdGlvbiIsImZyb20iLCJzZWxlY3QiLCJlcSIsIm9yZGVyIiwiYXNjZW5kaW5nIiwiZm9yRWFjaCIsImN1c3RvbWVyIiwiaW5kZXgiLCJpZCIsImVyc3RlbGx0X2FtIiwiZXhpc3RpbmdDdXN0b21lciIsIndhcm4iLCJhcHBvaW50bWVudERhdGFUb1NhdmUiLCJiZXNjaHJlaWJ1bmciLCJmb3JtYXRBcHBvaW50bWVudERhdGUiLCJuYW1lIiwidGVsZWZvbiIsImZpcm1hIiwiYW5zcHJlY2hwYXJ0bmVyX25hbWUiLCJiZXJhdGVyIiwiemllbGdydXBwZSIsInJlc3VsdCIsIm5ld0Rlc2NyaXB0aW9uIiwidXBzZXJ0RGF0YSIsInVwc2VydEVycm9yIiwidXBzZXJ0Iiwib25Db25mbGljdCIsInZlcmlmeURhdGEiLCJ2ZXJpZnlFcnJvciIsInNpbmdsZSIsImluc2VydCIsImVyciIsImhhbmRsZUJhY2siLCJoYW5kbGVSZXNldCIsInRlc3REYXRhYmFzZUNvbm5lY3Rpb24iLCJsaW1pdCIsIm1lc3NhZ2UiLCJjb2x1bW5zIiwiT2JqZWN0Iiwia2V5cyIsImF2YWlsYWJsZUNvbHVtbnMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwicGhvbmUiLCJjb21wYW55Iiwic3RhdHVzTWVzc2FnZSIsImVudHJpZXMiLCJrZXkiLCJhdmFpbGFibGUiLCJjbGVhbnVwRHVwbGljYXRlQ3VzdG9tZXJzIiwiYWxsQ3VzdG9tZXJzIiwiZW1haWxHcm91cHMiLCJwdXNoIiwiZHVwbGljYXRlcyIsImZpbHRlciIsImN1c3RvbWVycyIsImVudHJ5IiwiZGF0ZSIsInRpbWUiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJ3ZWVrZGF5IiwiZm9ybWF0IiwiY2xlYW51cEluY29ycmVjdERhdGVzIiwiaW5jb3JyZWN0RW50cmllcyIsImZpbmRFcnJvciIsInVwZGF0ZUVycm9yIiwidXBkYXRlIiwiYWxlcnQiLCJkaXYiLCJjbGFzc05hbWUiLCJwIiwic3Ryb25nIiwib25DbGljayIsImRpc2FibGVkIiwidmFyaWFudCIsInNpemUiLCJzcGFuIiwicHJlIiwib25TdWJtaXQiLCJvblZlcmlmaWNhdGlvbkNvbXBsZXRlIiwib25CYWNrIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwicHJpbWFyeSIsImNvbG9yIiwiaDMiLCJzZWNvbmRhcnkiLCJib3JkZXJDb2xvciIsImJyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/AppointmentBooking.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/AppointmentCalendar.tsx": /*!********************************************!*\ !*** ./components/AppointmentCalendar.tsx ***! \********************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ AppointmentCalendar; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Calendar,Clock,CheckCircle,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\");\n/* harmony import */ var _barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Calendar,Clock,CheckCircle,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clock.js\");\n/* harmony import */ var _barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Calendar,Clock,CheckCircle,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check-big.js\");\n/* harmony import */ var _barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Calendar,Clock,CheckCircle,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* harmony import */ var _lib_supabaseClient__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/supabaseClient */ \"(app-pages-browser)/./lib/supabaseClient.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nfunction AppointmentCalendar(param) {\n let { onSlotSelect, selectedSlot } = param;\n _s();\n const [availableSlots, setAvailableSlots] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n // Generate available time slots (2-hour slots, Mo-Fr 9-17 Uhr)\n const generateTimeSlots = ()=>{\n const slots = [];\n for(let hour = 9; hour <= 15; hour += 2){\n slots.push(\"\".concat(hour.toString().padStart(2, \"0\"), \":00\"));\n }\n return slots;\n };\n // Generate available dates for the next 4 weeks\n const generateAvailableDates = ()=>{\n const dates = [];\n const today = new Date();\n let currentDate = new Date(today);\n // Start from next Monday if today is weekend\n const dayOfWeek = currentDate.getDay();\n if (dayOfWeek === 0) {\n currentDate.setDate(currentDate.getDate() + 1);\n } else if (dayOfWeek === 6) {\n currentDate.setDate(currentDate.getDate() + 2);\n }\n for(let i = 0; i < 28; i++){\n const date = new Date(currentDate);\n date.setDate(date.getDate() + i);\n // Only include weekdays (Monday = 1, Friday = 5)\n if (date.getDay() >= 1 && date.getDay() <= 5) {\n dates.push(date);\n }\n }\n return dates;\n };\n // Generate available slots (with Supabase integration)\n const generateAvailableSlots = async ()=>{\n const dates = generateAvailableDates();\n const timeSlots = generateTimeSlots();\n const slots = [];\n try {\n // Get booked appointments from Supabase - look for termin_datum column\n const { data: bookedAppointments, error } = await _lib_supabaseClient__WEBPACK_IMPORTED_MODULE_4__.supabase.from(\"kunden_projekte\").select(\"termin_datum\").not(\"termin_datum\", \"is\", null);\n if (error) {\n console.error(\"Error fetching booked appointments:\", error);\n console.log(\"Falling back to all available slots\");\n // Fallback to all available\n dates.forEach((date)=>{\n timeSlots.forEach((time)=>{\n slots.push({\n date: new Date(date),\n time,\n available: true,\n booked: false\n });\n });\n });\n } else {\n console.log(\"Found booked appointments:\", bookedAppointments);\n console.log(\"Number of booked appointments:\", (bookedAppointments === null || bookedAppointments === void 0 ? void 0 : bookedAppointments.length) || 0);\n // Create a set of booked times for quick lookup\n const bookedTimes = new Set();\n bookedAppointments === null || bookedAppointments === void 0 ? void 0 : bookedAppointments.forEach((appointment)=>{\n if (appointment.termin_datum) {\n const appointmentDate = new Date(appointment.termin_datum);\n console.log(\"Processing booked appointment:\", appointment.termin_datum);\n console.log(\"Appointment date object:\", appointmentDate);\n console.log(\"Appointment hours:\", appointmentDate.getHours());\n console.log(\"Appointment local time:\", appointmentDate.toLocaleString(\"de-DE\"));\n // Use local time consistently - don't convert to UTC\n const year = appointmentDate.getFullYear();\n const month = appointmentDate.getMonth();\n const day = appointmentDate.getDate();\n const hours = appointmentDate.getHours();\n // Create time string using local time components\n const dateString = \"\".concat(year, \"-\").concat((month + 1).toString().padStart(2, \"0\"), \"-\").concat(day.toString().padStart(2, \"0\"));\n const hourString = hours.toString().padStart(2, \"0\") + \":00\";\n const timeString = \"\".concat(dateString, \"T\").concat(hourString, \":00:00\");\n bookedTimes.add(timeString);\n console.log(\"Booked appointment found (local time):\", timeString);\n }\n });\n console.log(\"All booked time strings:\", Array.from(bookedTimes));\n // Generate slots with availability check\n dates.forEach((date)=>{\n timeSlots.forEach((time)=>{\n const [hours] = time.split(\":\").map(Number);\n // Create slot datetime in local time\n const slotDateTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, 0, 0, 0);\n // Create time string using local time components (same as booked appointments)\n const year = slotDateTime.getFullYear();\n const month = slotDateTime.getMonth();\n const day = slotDateTime.getDate();\n const slotHours = slotDateTime.getHours();\n const dateString = \"\".concat(year, \"-\").concat((month + 1).toString().padStart(2, \"0\"), \"-\").concat(day.toString().padStart(2, \"0\"));\n const hourString = slotHours.toString().padStart(2, \"0\") + \":00\";\n const timeString = \"\".concat(dateString, \"T\").concat(hourString, \":00:00\");\n const isBooked = bookedTimes.has(timeString);\n console.log(\"Slot \".concat(dateString, \" \").concat(time, \":\"), {\n slotDateTime: slotDateTime.toISOString(),\n timeString,\n isBooked,\n bookedTimes: Array.from(bookedTimes)\n });\n if (isBooked) {\n console.log(\"Slot is booked:\", timeString);\n }\n slots.push({\n date: new Date(date),\n time,\n available: !isBooked,\n booked: isBooked\n });\n });\n });\n }\n } catch (err) {\n console.error(\"Error checking availability:\", err);\n // Fallback to all available\n dates.forEach((date)=>{\n timeSlots.forEach((time)=>{\n slots.push({\n date: new Date(date),\n time,\n available: true,\n booked: false\n });\n });\n });\n }\n setAvailableSlots(slots);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n setLoading(true);\n // Simulate loading time\n setTimeout(()=>{\n generateAvailableSlots();\n setLoading(false);\n }, 500);\n }, []);\n // Group slots by date\n const groupedSlots = availableSlots.reduce((groups, slot)=>{\n const dateKey = slot.date.toISOString().split(\"T\")[0];\n if (!groups[dateKey]) {\n groups[dateKey] = [];\n }\n groups[dateKey].push(slot);\n return groups;\n }, {});\n const formatDate = (date)=>{\n return new Intl.DateTimeFormat(\"de-DE\", {\n weekday: \"short\",\n day: \"2-digit\",\n month: \"2-digit\"\n }).format(date);\n };\n const isSlotSelected = (slot)=>{\n if (!selectedSlot) return false;\n return selectedSlot.date.toISOString().split(\"T\")[0] === slot.date.toISOString().split(\"T\")[0] && selectedSlot.time === slot.time;\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-md mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 rounded-2xl shadow-lg backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F0\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-6 h-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 215,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-xl font-bold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Termin ausw\\xe4hlen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 216,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 214,\n columnNumber: 9\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-spin rounded-full h-8 w-8 border-b-2 mx-auto mb-4\",\n style: {\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Lade verf\\xfcgbare Termine...\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 225,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 222,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: Object.entries(groupedSlots).slice(0, 3).map((param)=>{\n let [dateKey, slots] = param;\n const date = new Date(dateKey);\n // Show all slots, not just available ones\n const allSlotsForDate = slots;\n if (allSlotsForDate.length === 0) return null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border rounded-xl p-4\",\n style: {\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"font-semibold mb-3\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: formatDate(date)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 239,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-2\",\n children: allSlotsForDate.map((slot, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: isSlotSelected(slot) ? \"default\" : \"outline\",\n size: \"sm\",\n className: \"flex items-center space-x-2\",\n onClick: ()=>onSlotSelect(slot.date, slot.time),\n disabled: slot.booked || !slot.available,\n style: {\n backgroundColor: isSlotSelected(slot) ? _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary : slot.booked ? \"#f3f4f6\" : \"transparent\",\n color: isSlotSelected(slot) ? _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background : slot.booked ? \"#9ca3af\" : _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary,\n borderColor: slot.booked ? \"#d1d5db\" : _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.tertiary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 259,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: slot.time\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 260,\n columnNumber: 25\n }, this),\n isSlotSelected(slot) && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 261,\n columnNumber: 50\n }, this),\n slot.booked && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs\",\n children: \"(Gebucht)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 262,\n columnNumber: 41\n }, this)\n ]\n }, index, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 244,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 242,\n columnNumber: 19\n }, this)\n ]\n }, dateKey, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 237,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 228,\n columnNumber: 11\n }, this),\n selectedSlot && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 rounded-xl border-2\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary, \"20\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Ausgew\\xe4hlter Termin:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 280,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: [\n formatDate(selectedSlot.date),\n \" um \",\n selectedSlot.time,\n \" Uhr\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 283,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 279,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n variant: \"ghost\",\n size: \"sm\",\n onClick: ()=>onSlotSelect(new Date(), \"\"),\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calendar_Clock_CheckCircle_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 293,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 287,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 278,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 273,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 text-xs text-center\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"• Termine sind 1 Stunden lang\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 300,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"• Mo-Fr 9:00-17:00 Uhr\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 301,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"• Nur verf\\xfcgbare Termine werden angezeigt\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 302,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 299,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 210,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentCalendar.tsx\",\n lineNumber: 209,\n columnNumber: 5\n }, this);\n}\n_s(AppointmentCalendar, \"5WBwkel7xHXccacmfraPKr8jXos=\");\n_c = AppointmentCalendar;\nvar _c;\n$RefreshReg$(_c, \"AppointmentCalendar\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQXBwb2ludG1lbnRDYWxlbmRhci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUVtRDtBQUNIO0FBQ2U7QUFDekI7QUFDVTtBQWNqQyxTQUFTVSxvQkFBb0IsS0FBd0Q7UUFBeEQsRUFBRUMsWUFBWSxFQUFFQyxZQUFZLEVBQTRCLEdBQXhEOztJQUMxQyxNQUFNLENBQUNDLGdCQUFnQkMsa0JBQWtCLEdBQUdiLCtDQUFRQSxDQUFvQixFQUFFO0lBQzFFLE1BQU0sQ0FBQ2MsU0FBU0MsV0FBVyxHQUFHZiwrQ0FBUUEsQ0FBQztJQUV2QywrREFBK0Q7SUFDL0QsTUFBTWdCLG9CQUFvQjtRQUN4QixNQUFNQyxRQUFRLEVBQUU7UUFDaEIsSUFBSyxJQUFJQyxPQUFPLEdBQUdBLFFBQVEsSUFBSUEsUUFBUSxFQUFHO1lBQ3hDRCxNQUFNRSxJQUFJLENBQUMsR0FBb0MsT0FBakNELEtBQUtFLFFBQVEsR0FBR0MsUUFBUSxDQUFDLEdBQUcsTUFBSztRQUNqRDtRQUNBLE9BQU9KO0lBQ1Q7SUFFQSxnREFBZ0Q7SUFDaEQsTUFBTUsseUJBQXlCO1FBQzdCLE1BQU1DLFFBQVEsRUFBRTtRQUNoQixNQUFNQyxRQUFRLElBQUlDO1FBQ2xCLElBQUlDLGNBQWMsSUFBSUQsS0FBS0Q7UUFFM0IsNkNBQTZDO1FBQzdDLE1BQU1HLFlBQVlELFlBQVlFLE1BQU07UUFDcEMsSUFBSUQsY0FBYyxHQUFHO1lBQ25CRCxZQUFZRyxPQUFPLENBQUNILFlBQVlJLE9BQU8sS0FBSztRQUM5QyxPQUFPLElBQUlILGNBQWMsR0FBRztZQUMxQkQsWUFBWUcsT0FBTyxDQUFDSCxZQUFZSSxPQUFPLEtBQUs7UUFDOUM7UUFFQSxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSSxJQUFJQSxJQUFLO1lBQzNCLE1BQU1DLE9BQU8sSUFBSVAsS0FBS0M7WUFDdEJNLEtBQUtILE9BQU8sQ0FBQ0csS0FBS0YsT0FBTyxLQUFLQztZQUU5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Tjt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNEOztrREFDQyw4REFBQ1M7d0NBQUVSLFdBQVU7d0NBQWdCQyxPQUFPOzRDQUFFRyxPQUFPckYsK0NBQU1BLENBQUNzRixPQUFPO3dDQUFDO2tEQUFHOzs7Ozs7a0RBRy9ELDhEQUFDRzt3Q0FBRVIsV0FBVTt3Q0FBVUMsT0FBTzs0Q0FBRUcsT0FBT3JGLCtDQUFNQSxDQUFDMEYsU0FBUzt3Q0FBQzs7NENBQ3JEaEIsV0FBV3RFLGFBQWFxQixJQUFJOzRDQUFFOzRDQUFLckIsYUFBYWlDLElBQUk7NENBQUM7Ozs7Ozs7Ozs7Ozs7MENBRzFELDhEQUFDMUMseURBQU1BO2dDQUNMdUcsU0FBUTtnQ0FDUkMsTUFBSztnQ0FDTEMsU0FBUyxJQUFNakcsYUFBYSxJQUFJZSxRQUFRO2dDQUN4Q2dFLE9BQU87b0NBQUVHLE9BQU9yRiwrQ0FBTUEsQ0FBQ3NGLE9BQU87Z0NBQUM7MENBRS9CLDRFQUFDdkYsd0dBQUNBO29DQUFDa0YsV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFNckIsOERBQUNEO29CQUFJQyxXQUFVO29CQUEyQkMsT0FBTzt3QkFBRUcsT0FBT3JGLCtDQUFNQSxDQUFDMEYsU0FBUztvQkFBQzs7c0NBQ3pFLDhEQUFDRDtzQ0FBRTs7Ozs7O3NDQUNILDhEQUFDQTtzQ0FBRTs7Ozs7O3NDQUNILDhEQUFDQTtzQ0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLYjtHQTlSd0J2RjtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL0FwcG9pbnRtZW50Q2FsZW5kYXIudHN4PzU2ZjQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcblxyXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIjtcclxuaW1wb3J0IHsgQ2FsZW5kYXIsIENsb2NrLCBDaGVja0NpcmNsZSwgWCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcclxuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnQC9saWIvY29sb3JzJztcclxuaW1wb3J0IHsgc3VwYWJhc2UgfSBmcm9tICdAL2xpYi9zdXBhYmFzZUNsaWVudCc7XHJcblxyXG5pbnRlcmZhY2UgQXBwb2ludG1lbnRTbG90IHtcclxuICBkYXRlOiBEYXRlO1xyXG4gIHRpbWU6IHN0cmluZztcclxuICBhdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgYm9va2VkOiBib29sZWFuO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXBwb2ludG1lbnRDYWxlbmRhclByb3BzIHtcclxuICBvblNsb3RTZWxlY3Q6IChkYXRlOiBEYXRlLCB0aW1lOiBzdHJpbmcpID0+IHZvaWQ7XHJcbiAgc2VsZWN0ZWRTbG90PzogeyBkYXRlOiBEYXRlOyB0aW1lOiBzdHJpbmcgfSB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcG9pbnRtZW50Q2FsZW5kYXIoeyBvblNsb3RTZWxlY3QsIHNlbGVjdGVkU2xvdCB9OiBBcHBvaW50bWVudENhbGVuZGFyUHJvcHMpIHtcclxuICBjb25zdCBbYXZhaWxhYmxlU2xvdHMsIHNldEF2YWlsYWJsZVNsb3RzXSA9IHVzZVN0YXRlPEFwcG9pbnRtZW50U2xvdFtdPihbXSk7XHJcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICAvLyBHZW5lcmF0ZSBhdmFpbGFibGUgdGltZSBzbG90cyAoMi1ob3VyIHNsb3RzLCBNby1GciA5LTE3IFVocilcclxuICBjb25zdCBnZW5lcmF0ZVRpbWVTbG90cyA9ICgpID0+IHtcclxuICAgIGNvbnN0IHNsb3RzID0gW107XHJcbiAgICBmb3IgKGxldCBob3VyID0gOTsgaG91ciA8PSAxNTsgaG91ciArPSAyKSB7XHJcbiAgICAgIHNsb3RzLnB1c2goYCR7aG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjAwYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2xvdHM7XHJcbiAgfTtcclxuXHJcbiAgLy8gR2VuZXJhdGUgYXZhaWxhYmxlIGRhdGVzIGZvciB0aGUgbmV4dCA0IHdlZWtzXHJcbiAgY29uc3QgZ2VuZXJhdGVBdmFpbGFibGVEYXRlcyA9ICgpID0+IHtcclxuICAgIGNvbnN0IGRhdGVzID0gW107XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICBsZXQgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgICBcclxuICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBNb25kYXkgaWYgdG9kYXkgaXMgd2Vla2VuZFxyXG4gICAgY29uc3QgZGF5T2ZXZWVrID0gY3VycmVudERhdGUuZ2V0RGF5KCk7XHJcbiAgICBpZiAoZGF5T2ZXZWVrID09PSAwKSB7IC8vIFN1bmRheVxyXG4gICAgICBjdXJyZW50RGF0ZS5zZXREYXRlKGN1cnJlbnREYXRlLmdldERhdGUoKSArIDEpO1xyXG4gICAgfSBlbHNlIGlmIChkYXlPZldlZWsgPT09IDYpIHsgLy8gU2F0dXJkYXlcclxuICAgICAgY3VycmVudERhdGUuc2V0RGF0ZShjdXJyZW50RGF0ZS5nZXREYXRlKCkgKyAyKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI4OyBpKyspIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnREYXRlKTtcclxuICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgaSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBPbmx5IGluY2x1ZGUgd2Vla2RheXMgKE1vbmRheSA9IDEsIEZyaWRheSA9IDUpXHJcbiAgICAgIGlmIChkYXRlLmdldERheSgpID49IDEgJiYgZGF0ZS5nZXREYXkoKSA8PSA1KSB7XHJcbiAgICAgICAgZGF0ZXMucHVzaChkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVzO1xyXG4gIH07XHJcblxyXG4gIC8vIEdlbmVyYXRlIGF2YWlsYWJsZSBzbG90cyAod2l0aCBTdXBhYmFzZSBpbnRlZ3JhdGlvbilcclxuICBjb25zdCBnZW5lcmF0ZUF2YWlsYWJsZVNsb3RzID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgZGF0ZXMgPSBnZW5lcmF0ZUF2YWlsYWJsZURhdGVzKCk7XHJcbiAgICBjb25zdCB0aW1lU2xvdHMgPSBnZW5lcmF0ZVRpbWVTbG90cygpO1xyXG4gICAgY29uc3Qgc2xvdHM6IEFwcG9pbnRtZW50U2xvdFtdID0gW107XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gR2V0IGJvb2tlZCBhcHBvaW50bWVudHMgZnJvbSBTdXBhYmFzZSAtIGxvb2sgZm9yIHRlcm1pbl9kYXR1bSBjb2x1bW5cclxuICAgICAgY29uc3QgeyBkYXRhOiBib29rZWRBcHBvaW50bWVudHMsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxyXG4gICAgICAgIC5mcm9tKCdrdW5kZW5fcHJvamVrdGUnKVxyXG4gICAgICAgIC5zZWxlY3QoJ3Rlcm1pbl9kYXR1bScpXHJcbiAgICAgICAgLm5vdCgndGVybWluX2RhdHVtJywgJ2lzJywgbnVsbCk7XHJcblxyXG4gICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBib29rZWQgYXBwb2ludG1lbnRzOicsIGVycm9yKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnRmFsbGluZyBiYWNrIHRvIGFsbCBhdmFpbGFibGUgc2xvdHMnKTtcclxuICAgICAgICAvLyBGYWxsYmFjayB0byBhbGwgYXZhaWxhYmxlXHJcbiAgICAgICAgZGF0ZXMuZm9yRWFjaChkYXRlID0+IHtcclxuICAgICAgICAgIHRpbWVTbG90cy5mb3JFYWNoKHRpbWUgPT4ge1xyXG4gICAgICAgICAgICBzbG90cy5wdXNoKHtcclxuICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlKSxcclxuICAgICAgICAgICAgICB0aW1lLFxyXG4gICAgICAgICAgICAgIGF2YWlsYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICBib29rZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0ZvdW5kIGJvb2tlZCBhcHBvaW50bWVudHM6JywgYm9va2VkQXBwb2ludG1lbnRzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnTnVtYmVyIG9mIGJvb2tlZCBhcHBvaW50bWVudHM6JywgYm9va2VkQXBwb2ludG1lbnRzPy5sZW5ndGggfHwgMCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2V0IG9mIGJvb2tlZCB0aW1lcyBmb3IgcXVpY2sgbG9va3VwXHJcbiAgICAgICAgY29uc3QgYm9va2VkVGltZXMgPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgYm9va2VkQXBwb2ludG1lbnRzPy5mb3JFYWNoKGFwcG9pbnRtZW50ID0+IHtcclxuICAgICAgICAgIGlmIChhcHBvaW50bWVudC50ZXJtaW5fZGF0dW0pIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwb2ludG1lbnREYXRlID0gbmV3IERhdGUoYXBwb2ludG1lbnQudGVybWluX2RhdHVtKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2Nlc3NpbmcgYm9va2VkIGFwcG9pbnRtZW50OicsIGFwcG9pbnRtZW50LnRlcm1pbl9kYXR1bSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBcHBvaW50bWVudCBkYXRlIG9iamVjdDonLCBhcHBvaW50bWVudERhdGUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQXBwb2ludG1lbnQgaG91cnM6JywgYXBwb2ludG1lbnREYXRlLmdldEhvdXJzKCkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQXBwb2ludG1lbnQgbG9jYWwgdGltZTonLCBhcHBvaW50bWVudERhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlLURFJykpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gVXNlIGxvY2FsIHRpbWUgY29uc2lzdGVudGx5IC0gZG9uJ3QgY29udmVydCB0byBVVENcclxuICAgICAgICAgICAgY29uc3QgeWVhciA9IGFwcG9pbnRtZW50RGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICBjb25zdCBtb250aCA9IGFwcG9pbnRtZW50RGF0ZS5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXkgPSBhcHBvaW50bWVudERhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBob3VycyA9IGFwcG9pbnRtZW50RGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRpbWUgc3RyaW5nIHVzaW5nIGxvY2FsIHRpbWUgY29tcG9uZW50c1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gYCR7eWVhcn0tJHsobW9udGggKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9LSR7ZGF5LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xyXG4gICAgICAgICAgICBjb25zdCBob3VyU3RyaW5nID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpICsgJzowMCc7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtkYXRlU3RyaW5nfVQke2hvdXJTdHJpbmd9OjAwOjAwYDtcclxuICAgICAgICAgICAgYm9va2VkVGltZXMuYWRkKHRpbWVTdHJpbmcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQm9va2VkIGFwcG9pbnRtZW50IGZvdW5kIChsb2NhbCB0aW1lKTonLCB0aW1lU3RyaW5nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zb2xlLmxvZygnQWxsIGJvb2tlZCB0aW1lIHN0cmluZ3M6JywgQXJyYXkuZnJvbShib29rZWRUaW1lcykpO1xyXG5cclxuICAgICAgICAvLyBHZW5lcmF0ZSBzbG90cyB3aXRoIGF2YWlsYWJpbGl0eSBjaGVja1xyXG4gICAgICAgIGRhdGVzLmZvckVhY2goZGF0ZSA9PiB7XHJcbiAgICAgICAgICB0aW1lU2xvdHMuZm9yRWFjaCh0aW1lID0+IHtcclxuICAgICAgICAgICAgY29uc3QgW2hvdXJzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHNsb3QgZGF0ZXRpbWUgaW4gbG9jYWwgdGltZVxyXG4gICAgICAgICAgICBjb25zdCBzbG90RGF0ZVRpbWUgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGhvdXJzLCAwLCAwLCAwKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aW1lIHN0cmluZyB1c2luZyBsb2NhbCB0aW1lIGNvbXBvbmVudHMgKHNhbWUgYXMgYm9va2VkIGFwcG9pbnRtZW50cylcclxuICAgICAgICAgICAgY29uc3QgeWVhciA9IHNsb3REYXRlVGltZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICBjb25zdCBtb250aCA9IHNsb3REYXRlVGltZS5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXkgPSBzbG90RGF0ZVRpbWUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBzbG90SG91cnMgPSBzbG90RGF0ZVRpbWUuZ2V0SG91cnMoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBgJHt5ZWFyfS0keyhtb250aCArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0tJHtkYXkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGhvdXJTdHJpbmcgPSBzbG90SG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpICsgJzowMCc7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtkYXRlU3RyaW5nfVQke2hvdXJTdHJpbmd9OjAwOjAwYDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGlzQm9va2VkID0gYm9va2VkVGltZXMuaGFzKHRpbWVTdHJpbmcpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFNsb3QgJHtkYXRlU3RyaW5nfSAke3RpbWV9OmAsIHtcclxuICAgICAgICAgICAgICBzbG90RGF0ZVRpbWU6IHNsb3REYXRlVGltZS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICAgIHRpbWVTdHJpbmcsXHJcbiAgICAgICAgICAgICAgaXNCb29rZWQsXHJcbiAgICAgICAgICAgICAgYm9va2VkVGltZXM6IEFycmF5LmZyb20oYm9va2VkVGltZXMpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGlzQm9va2VkKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Nsb3QgaXMgYm9va2VkOicsIHRpbWVTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzbG90cy5wdXNoKHtcclxuICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlKSxcclxuICAgICAgICAgICAgICB0aW1lLFxyXG4gICAgICAgICAgICAgIGF2YWlsYWJsZTogIWlzQm9va2VkLFxyXG4gICAgICAgICAgICAgIGJvb2tlZDogaXNCb29rZWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNoZWNraW5nIGF2YWlsYWJpbGl0eTonLCBlcnIpO1xyXG4gICAgICAvLyBGYWxsYmFjayB0byBhbGwgYXZhaWxhYmxlXHJcbiAgICAgIGRhdGVzLmZvckVhY2goZGF0ZSA9PiB7XHJcbiAgICAgICAgdGltZVNsb3RzLmZvckVhY2godGltZSA9PiB7XHJcbiAgICAgICAgICBzbG90cy5wdXNoKHtcclxuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgIHRpbWUsXHJcbiAgICAgICAgICAgIGF2YWlsYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgYm9va2VkOiBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEF2YWlsYWJsZVNsb3RzKHNsb3RzKTtcclxuICB9O1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgIC8vIFNpbXVsYXRlIGxvYWRpbmcgdGltZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGdlbmVyYXRlQXZhaWxhYmxlU2xvdHMoKTtcclxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgLy8gR3JvdXAgc2xvdHMgYnkgZGF0ZVxyXG4gIGNvbnN0IGdyb3VwZWRTbG90cyA9IGF2YWlsYWJsZVNsb3RzLnJlZHVjZSgoZ3JvdXBzLCBzbG90KSA9PiB7XHJcbiAgICBjb25zdCBkYXRlS2V5ID0gc2xvdC5kYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgIGlmICghZ3JvdXBzW2RhdGVLZXldKSB7XHJcbiAgICAgIGdyb3Vwc1tkYXRlS2V5XSA9IFtdO1xyXG4gICAgfVxyXG4gICAgZ3JvdXBzW2RhdGVLZXldLnB1c2goc2xvdCk7XHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIEFwcG9pbnRtZW50U2xvdFtdPik7XHJcblxyXG4gIGNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZTogRGF0ZSkgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdkZS1ERScsIHtcclxuICAgICAgd2Vla2RheTogJ3Nob3J0JyxcclxuICAgICAgZGF5OiAnMi1kaWdpdCcsXHJcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCdcclxuICAgIH0pLmZvcm1hdChkYXRlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBpc1Nsb3RTZWxlY3RlZCA9IChzbG90OiBBcHBvaW50bWVudFNsb3QpID0+IHtcclxuICAgIGlmICghc2VsZWN0ZWRTbG90KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRTbG90LmRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdID09PSBzbG90LmRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICYmXHJcbiAgICAgICAgICAgc2VsZWN0ZWRTbG90LnRpbWUgPT09IHNsb3QudGltZTtcclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctbWQgbXgtYXV0b1wiPlxyXG4gICAgICA8ZGl2IFxyXG4gICAgICAgIGNsYXNzTmFtZT1cInAtNiByb3VuZGVkLTJ4bCBzaGFkb3ctbGcgYmFja2Ryb3AtYmx1ci1zbVwiXHJcbiAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMuYmFja2dyb3VuZH1GMGAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIG1iLTZcIj5cclxuICAgICAgICAgIDxDYWxlbmRhciBjbGFzc05hbWU9XCJ3LTYgaC02XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19IC8+XHJcbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgIFRlcm1pbiBhdXN3w6RobGVuXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICB7bG9hZGluZyA/IChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgcHktOFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgaC04IHctOCBib3JkZXItYi0yIG14LWF1dG8gbWItNFwiIFxyXG4gICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT48L2Rpdj5cclxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX0+TGFkZSB2ZXJmw7xnYmFyZSBUZXJtaW5lLi4uPC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKSA6IChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XHJcbiAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyhncm91cGVkU2xvdHMpLnNsaWNlKDAsIDMpLm1hcCgoW2RhdGVLZXksIHNsb3RzXSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlS2V5KTtcclxuICAgICAgICAgICAgICAvLyBTaG93IGFsbCBzbG90cywgbm90IGp1c3QgYXZhaWxhYmxlIG9uZXNcclxuICAgICAgICAgICAgICBjb25zdCBhbGxTbG90c0ZvckRhdGUgPSBzbG90cztcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBpZiAoYWxsU2xvdHNGb3JEYXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17ZGF0ZUtleX0gY2xhc3NOYW1lPVwiYm9yZGVyIHJvdW5kZWQteGwgcC00XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckNvbG9yOiBjb2xvcnMudGVydGlhcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIG1iLTNcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAge2Zvcm1hdERhdGUoZGF0ZSl9XHJcbiAgICAgICAgICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHthbGxTbG90c0ZvckRhdGUubWFwKChzbG90LCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXtpc1Nsb3RTZWxlY3RlZChzbG90KSA/IFwiZGVmYXVsdFwiIDogXCJvdXRsaW5lXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2xvdFNlbGVjdChzbG90LmRhdGUsIHNsb3QudGltZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzbG90LmJvb2tlZCB8fCAhc2xvdC5hdmFpbGFibGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpc1Nsb3RTZWxlY3RlZChzbG90KSA/IGNvbG9ycy5wcmltYXJ5IDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QuYm9va2VkID8gJyNmM2Y0ZjYnIDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogaXNTbG90U2VsZWN0ZWQoc2xvdCkgPyBjb2xvcnMuYmFja2dyb3VuZCA6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QuYm9va2VkID8gJyM5Y2EzYWYnIDogY29sb3JzLnByaW1hcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IHNsb3QuYm9va2VkID8gJyNkMWQ1ZGInIDogY29sb3JzLnRlcnRpYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDbG9jayBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3Nsb3QudGltZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1Nsb3RTZWxlY3RlZChzbG90KSAmJiA8Q2hlY2tDaXJjbGUgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2xvdC5ib29rZWQgJiYgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPihHZWJ1Y2h0KTwvc3Bhbj59XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcblxyXG4gICAgICAgIHtzZWxlY3RlZFNsb3QgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCByb3VuZGVkLXhsIGJvcmRlci0yXCIgXHJcbiAgICAgICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLnByaW1hcnl9MjBgLFxyXG4gICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnMucHJpbWFyeSBcclxuICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgIEF1c2dld8OkaGx0ZXIgVGVybWluOlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgICB7Zm9ybWF0RGF0ZShzZWxlY3RlZFNsb3QuZGF0ZSl9IHVtIHtzZWxlY3RlZFNsb3QudGltZX0gVWhyXHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcclxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblNsb3RTZWxlY3QobmV3IERhdGUoKSwgJycpfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPFggY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHRleHQteHMgdGV4dC1jZW50ZXJcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fT5cclxuICAgICAgICAgIDxwPuKAoiBUZXJtaW5lIHNpbmQgMSBTdHVuZGVuIGxhbmc8L3A+XHJcbiAgICAgICAgICA8cD7igKIgTW8tRnIgOTowMC0xNzowMCBVaHI8L3A+XHJcbiAgICAgICAgICA8cD7igKIgTnVyIHZlcmbDvGdiYXJlIFRlcm1pbmUgd2VyZGVuIGFuZ2V6ZWlndDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiQnV0dG9uIiwiQ2FsZW5kYXIiLCJDbG9jayIsIkNoZWNrQ2lyY2xlIiwiWCIsImNvbG9ycyIsInN1cGFiYXNlIiwiQXBwb2ludG1lbnRDYWxlbmRhciIsIm9uU2xvdFNlbGVjdCIsInNlbGVjdGVkU2xvdCIsImF2YWlsYWJsZVNsb3RzIiwic2V0QXZhaWxhYmxlU2xvdHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImdlbmVyYXRlVGltZVNsb3RzIiwic2xvdHMiLCJob3VyIiwicHVzaCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJnZW5lcmF0ZUF2YWlsYWJsZURhdGVzIiwiZGF0ZXMiLCJ0b2RheSIsIkRhdGUiLCJjdXJyZW50RGF0ZSIsImRheU9mV2VlayIsImdldERheSIsInNldERhdGUiLCJnZXREYXRlIiwiaSIsImRhdGUiLCJnZW5lcmF0ZUF2YWlsYWJsZVNsb3RzIiwidGltZVNsb3RzIiwiZGF0YSIsImJvb2tlZEFwcG9pbnRtZW50cyIsImVycm9yIiwiZnJvbSIsInNlbGVjdCIsIm5vdCIsImNvbnNvbGUiLCJsb2ciLCJmb3JFYWNoIiwidGltZSIsImF2YWlsYWJsZSIsImJvb2tlZCIsImxlbmd0aCIsImJvb2tlZFRpbWVzIiwiU2V0IiwiYXBwb2ludG1lbnQiLCJ0ZXJtaW5fZGF0dW0iLCJhcHBvaW50bWVudERhdGUiLCJnZXRIb3VycyIsInRvTG9jYWxlU3RyaW5nIiwieWVhciIsImdldEZ1bGxZZWFyIiwibW9udGgiLCJnZXRNb250aCIsImRheSIsImhvdXJzIiwiZGF0ZVN0cmluZyIsImhvdXJTdHJpbmciLCJ0aW1lU3RyaW5nIiwiYWRkIiwiQXJyYXkiLCJzcGxpdCIsIm1hcCIsIk51bWJlciIsInNsb3REYXRlVGltZSIsInNsb3RIb3VycyIsImlzQm9va2VkIiwiaGFzIiwidG9JU09TdHJpbmciLCJlcnIiLCJzZXRUaW1lb3V0IiwiZ3JvdXBlZFNsb3RzIiwicmVkdWNlIiwiZ3JvdXBzIiwic2xvdCIsImRhdGVLZXkiLCJmb3JtYXREYXRlIiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0Iiwid2Vla2RheSIsImZvcm1hdCIsImlzU2xvdFNlbGVjdGVkIiwiZGl2IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwiY29sb3IiLCJwcmltYXJ5IiwiaDMiLCJib3JkZXJDb2xvciIsInAiLCJzZWNvbmRhcnkiLCJPYmplY3QiLCJlbnRyaWVzIiwic2xpY2UiLCJhbGxTbG90c0ZvckRhdGUiLCJ0ZXJ0aWFyeSIsImg0IiwiaW5kZXgiLCJ2YXJpYW50Iiwic2l6ZSIsIm9uQ2xpY2siLCJkaXNhYmxlZCIsInNwYW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/AppointmentCalendar.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/AppointmentForm.tsx": /*!****************************************!*\ !*** ./components/AppointmentForm.tsx ***! \****************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ AppointmentForm; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/input */ \"(app-pages-browser)/./components/ui/input.tsx\");\n/* harmony import */ var _components_ui_textarea__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/textarea */ \"(app-pages-browser)/./components/ui/textarea.tsx\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Mail,Calendar,User,Phone,Building,MessageSquare!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Mail,Calendar,User,Phone,Building,MessageSquare!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/user.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Mail,Calendar,User,Phone,Building,MessageSquare!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/phone.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Mail,Calendar,User,Phone,Building,MessageSquare!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/building.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Mail,Calendar,User,Phone,Building,MessageSquare!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Mail,Calendar,User,Phone,Building,MessageSquare!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/message-square.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Mail,Calendar,User,Phone,Building,MessageSquare!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check-big.js\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* harmony import */ var _AppointmentCalendar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./AppointmentCalendar */ \"(app-pages-browser)/./components/AppointmentCalendar.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\nfunction AppointmentForm(param) {\n let { onSubmit, loading = false } = param;\n _s();\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n name: \"\",\n telefon: \"\",\n firma: \"\",\n email: \"\",\n beschreibung: \"\"\n });\n const [selectedSlot, setSelectedSlot] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [errors, setErrors] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const handleInputChange = (field, value)=>{\n setFormData((prev)=>({\n ...prev,\n [field]: value\n }));\n // Clear error when user starts typing\n if (errors[field]) {\n setErrors((prev)=>{\n const newErrors = {\n ...prev\n };\n delete newErrors[field];\n return newErrors;\n });\n }\n };\n const handleSlotSelect = (date, time)=>{\n console.log(\"=== SLOT SELECTION DEBUG ===\");\n console.log(\"Selected date:\", date);\n console.log(\"Selected time:\", time);\n console.log(\"Date type:\", typeof date);\n console.log(\"Date instanceof Date:\", date instanceof Date);\n console.log(\"Date.toISOString():\", date.toISOString());\n if (time === \"\") {\n setSelectedSlot(null);\n console.log(\"Slot deselected\");\n } else {\n setSelectedSlot({\n date,\n time\n });\n console.log(\"Slot selected:\", {\n date,\n time\n });\n }\n };\n const validateForm = ()=>{\n const newErrors = {};\n if (!formData.name.trim()) {\n newErrors.name = \"Name ist erforderlich\";\n }\n if (!formData.telefon.trim()) {\n newErrors.telefon = \"Telefonnummer ist erforderlich\";\n }\n if (!formData.firma.trim()) {\n newErrors.firma = \"Unternehmen ist erforderlich\";\n }\n if (!formData.email.trim()) {\n newErrors.email = \"E-Mail ist erforderlich\";\n } else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(formData.email)) {\n newErrors.email = \"Bitte geben Sie eine g\\xfcltige E-Mail-Adresse ein\";\n }\n if (!formData.beschreibung.trim()) {\n newErrors.beschreibung = \"Projektbeschreibung ist erforderlich\";\n }\n if (!selectedSlot) {\n newErrors.termin_datum = \"Bitte w\\xe4hlen Sie einen Termin aus\";\n }\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n if (validateForm()) {\n console.log(\"=== FORM SUBMIT DEBUG ===\");\n console.log(\"Form data:\", formData);\n console.log(\"Selected slot:\", selectedSlot);\n console.log(\"Selected slot date:\", selectedSlot === null || selectedSlot === void 0 ? void 0 : selectedSlot.date);\n console.log(\"Selected slot time:\", selectedSlot === null || selectedSlot === void 0 ? void 0 : selectedSlot.time);\n const submitData = {\n ...formData,\n termin_datum: selectedSlot === null || selectedSlot === void 0 ? void 0 : selectedSlot.date,\n termin_time: selectedSlot === null || selectedSlot === void 0 ? void 0 : selectedSlot.time\n };\n console.log(\"Submit data:\", submitData);\n console.log(\"Submit termin_datum:\", submitData.termin_datum);\n console.log(\"Submit termin_time:\", submitData.termin_time);\n onSubmit(submitData);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-4xl mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 lg:grid-cols-2 gap-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 sm:p-8 rounded-3xl shadow-lg backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background, \"F0\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"w-6 h-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 130,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-xl font-bold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: \"Termin anfragen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 131,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 129,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2 flex items-center space-x-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 140,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"01 – Wie ist dein Name?\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 141,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 138,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_3__.Input, {\n type: \"text\",\n value: formData.name,\n onChange: (e)=>handleInputChange(\"name\", e.target.value),\n className: \"w-full p-3 rounded-xl border-2 focus:outline-none focus:ring-2 \".concat(errors.name ? \"border-red-500\" : \"\"),\n style: {\n borderColor: errors.name ? \"#ef4444\" : _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n placeholder: \"Dein vollst\\xe4ndiger Name\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 143,\n columnNumber: 15\n }, this),\n errors.name && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500 text-sm mt-1\",\n children: errors.name\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 158,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 137,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2 flex items-center space-x-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 165,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"02 – Deine Telefonnummer\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 166,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 163,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_3__.Input, {\n type: \"tel\",\n value: formData.telefon,\n onChange: (e)=>handleInputChange(\"telefon\", e.target.value),\n className: \"w-full p-3 rounded-xl border-2 focus:outline-none focus:ring-2 \".concat(errors.telefon ? \"border-red-500\" : \"\"),\n style: {\n borderColor: errors.telefon ? \"#ef4444\" : _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n placeholder: \"+49 123 456789\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 168,\n columnNumber: 15\n }, this),\n errors.telefon && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500 text-sm mt-1\",\n children: errors.telefon\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 183,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 162,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2 flex items-center space-x-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"03 – Dein Unternehmen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 191,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 188,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_3__.Input, {\n type: \"text\",\n value: formData.firma,\n onChange: (e)=>handleInputChange(\"firma\", e.target.value),\n className: \"w-full p-3 rounded-xl border-2 focus:outline-none focus:ring-2 \".concat(errors.firma ? \"border-red-500\" : \"\"),\n style: {\n borderColor: errors.firma ? \"#ef4444\" : _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n placeholder: \"Name deines Unternehmens\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 193,\n columnNumber: 15\n }, this),\n errors.firma && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500 text-sm mt-1\",\n children: errors.firma\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 208,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 187,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2 flex items-center space-x-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 215,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"04 – Deine E-Mail-Adresse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 216,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 213,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_3__.Input, {\n type: \"email\",\n value: formData.email,\n onChange: (e)=>handleInputChange(\"email\", e.target.value),\n className: \"w-full p-3 rounded-xl border-2 focus:outline-none focus:ring-2 \".concat(errors.email ? \"border-red-500\" : \"\"),\n style: {\n borderColor: errors.email ? \"#ef4444\" : _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n placeholder: \"deine@email.de\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 218,\n columnNumber: 15\n }, this),\n errors.email && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500 text-sm mt-1\",\n children: errors.email\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 233,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 212,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2 flex items-center space-x-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 240,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"05 – Erz\\xe4hl uns kurz von deinem Vorhaben\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 241,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 238,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_textarea__WEBPACK_IMPORTED_MODULE_4__.Textarea, {\n value: formData.beschreibung,\n onChange: (e)=>handleInputChange(\"beschreibung\", e.target.value),\n rows: 4,\n className: \"w-full p-3 rounded-xl border-2 focus:outline-none focus:ring-2 \".concat(errors.beschreibung ? \"border-red-500\" : \"\"),\n style: {\n borderColor: errors.beschreibung ? \"#ef4444\" : _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n placeholder: \"Beschreibe dein Projekt, Ziele, W\\xfcnsche...\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 243,\n columnNumber: 15\n }, this),\n errors.beschreibung && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500 text-sm mt-1\",\n children: errors.beschreibung\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 237,\n columnNumber: 13\n }, this),\n errors.termin_datum && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-3 rounded-xl border-2 border-red-500 bg-red-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500 text-sm\",\n children: errors.termin_datum\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 264,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"submit\",\n disabled: loading,\n className: \"w-full py-3 rounded-xl text-lg font-semibold flex items-center justify-center space-x-2\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background\n },\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-spin rounded-full h-5 w-5 border-b-2 border-white\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 279,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Wird verarbeitet...\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 280,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 284,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Termin anfragen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 285,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 268,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 136,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 125,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col space-y-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_AppointmentCalendar__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onSlotSelect: handleSlotSelect,\n selectedSlot: selectedSlot\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 294,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 rounded-2xl backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary, \"20\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-xl font-bold mb-4 flex items-center space-x-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 306,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Oder direkt anrufen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 307,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 304,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3 text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"w-4 h-4 mr-3\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 312,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"+49 170 4969375\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"w-4 h-4 mr-3\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 316,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"support@webklar.com\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 317,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 315,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Mail_Calendar_User_Phone_Building_MessageSquare_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"w-4 h-4 mr-3\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 320,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Kaiserslautern, Deutschland\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 321,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 319,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 310,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 300,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 293,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 123,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentForm.tsx\",\n lineNumber: 122,\n columnNumber: 5\n }, this);\n}\n_s(AppointmentForm, \"MI3Bijfmga+vCnDTyzrTmFmJKvk=\");\n_c = AppointmentForm;\nvar _c;\n$RefreshReg$(_c, \"AppointmentForm\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQXBwb2ludG1lbnRGb3JtLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFd0M7QUFDUTtBQUNGO0FBQ007QUFDNkM7QUFDM0Q7QUFDa0I7QUFlekMsU0FBU2MsZ0JBQWdCLEtBQW1EO1FBQW5ELEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxLQUFLLEVBQXdCLEdBQW5EOztJQUN0QyxNQUFNLENBQUNDLFVBQVVDLFlBQVksR0FBR2pCLCtDQUFRQSxDQUFzQjtRQUM1RGtCLE1BQU07UUFDTkMsU0FBUztRQUNUQyxPQUFPO1FBQ1BDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBLE1BQU0sQ0FBQ0MsY0FBY0MsZ0JBQWdCLEdBQUd4QiwrQ0FBUUEsQ0FBc0M7SUFDdEYsTUFBTSxDQUFDeUIsUUFBUUMsVUFBVSxHQUFHMUIsK0NBQVFBLENBQXlCLENBQUM7SUFFOUQsTUFBTTJCLG9CQUFvQixDQUFDQyxPQUFrQ0M7UUFDM0RaLFlBQVlhLENBQUFBLE9BQVM7Z0JBQUUsR0FBR0EsSUFBSTtnQkFBRSxDQUFDRixNQUFNLEVBQUVDO1lBQU07UUFDL0Msc0NBQXNDO1FBQ3RDLElBQUlKLE1BQU0sQ0FBQ0csTUFBTSxFQUFFO1lBQ2pCRixVQUFVSSxDQUFBQTtnQkFDUixNQUFNQyxZQUFZO29CQUFFLEdBQUdELElBQUk7Z0JBQUM7Z0JBQzVCLE9BQU9DLFNBQVMsQ0FBQ0gsTUFBTTtnQkFDdkIsT0FBT0c7WUFDVDtRQUNGO0lBQ0Y7SUFFQSxNQUFNQyxtQkFBbUIsQ0FBQ0MsTUFBWUM7UUFDcENDLFFBQVFDLEdBQUcsQ0FBQztRQUNaRCxRQUFRQyxHQUFHLENBQUMsa0JBQWtCSDtRQUM5QkUsUUFBUUMsR0FBRyxDQUFDLGtCQUFrQkY7UUFDOUJDLFFBQVFDLEdBQUcsQ0FBQyxjQUFjLE9BQU9IO1FBQ2pDRSxRQUFRQyxHQUFHLENBQUMseUJBQXlCSCxnQkFBZ0JJO1FBQ3JERixRQUFRQyxHQUFH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LE9BQU83QywrQ0FBTUEsQ0FBQzRDLFVBQVU7b0NBQUM7O3NEQUNuRSw4REFBQ0o7NENBQUlDLFdBQVU7OzhEQUNiLDhEQUFDNUMsdUlBQUtBO29EQUFDNEMsV0FBVTs7Ozs7OzhEQUNqQiw4REFBQ1M7OERBQUs7Ozs7Ozs7Ozs7OztzREFFUiw4REFBQ1Y7NENBQUlDLFdBQVU7OzhEQUNiLDhEQUFDL0Msd0lBQUlBO29EQUFDK0MsV0FBVTs7Ozs7OzhEQUNoQiw4REFBQ1M7OERBQUs7Ozs7Ozs7Ozs7OztzREFFUiw4REFBQ1Y7NENBQUlDLFdBQVU7OzhEQUNiLDhEQUFDM0Msd0lBQVFBO29EQUFDMkMsV0FBVTs7Ozs7OzhEQUNwQiw4REFBQ1M7OERBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXRCO0dBalR3QmhEO0tBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQXBwb2ludG1lbnRGb3JtLnRzeD8zNTRkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvaW5wdXRcIjtcclxuaW1wb3J0IHsgVGV4dGFyZWEgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3RleHRhcmVhXCI7XHJcbmltcG9ydCB7IENoZWNrQ2lyY2xlLCBNYWlsLCBDYWxlbmRhciwgVXNlciwgUGhvbmUsIEJ1aWxkaW5nLCBNZXNzYWdlU3F1YXJlIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xyXG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICdAL2xpYi9jb2xvcnMnO1xyXG5pbXBvcnQgQXBwb2ludG1lbnRDYWxlbmRhciBmcm9tICcuL0FwcG9pbnRtZW50Q2FsZW5kYXInO1xyXG5cclxuaW50ZXJmYWNlIEFwcG9pbnRtZW50Rm9ybURhdGEge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0ZWxlZm9uOiBzdHJpbmc7XHJcbiAgZmlybWE6IHN0cmluZztcclxuICBlbWFpbDogc3RyaW5nO1xyXG4gIGJlc2NocmVpYnVuZzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXBwb2ludG1lbnRGb3JtUHJvcHMge1xyXG4gIG9uU3VibWl0OiAoZGF0YTogQXBwb2ludG1lbnRGb3JtRGF0YSAmIHsgdGVybWluX2RhdHVtPzogRGF0ZTsgdGVybWluX3RpbWU/OiBzdHJpbmcgfSkgPT4gdm9pZDtcclxuICBsb2FkaW5nPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXBwb2ludG1lbnRGb3JtKHsgb25TdWJtaXQsIGxvYWRpbmcgPSBmYWxzZSB9OiBBcHBvaW50bWVudEZvcm1Qcm9wcykge1xyXG4gIGNvbnN0IFtmb3JtRGF0YSwgc2V0Rm9ybURhdGFdID0gdXNlU3RhdGU8QXBwb2ludG1lbnRGb3JtRGF0YT4oe1xyXG4gICAgbmFtZTogJycsXHJcbiAgICB0ZWxlZm9uOiAnJyxcclxuICAgIGZpcm1hOiAnJyxcclxuICAgIGVtYWlsOiAnJyxcclxuICAgIGJlc2NocmVpYnVuZzogJydcclxuICB9KTtcclxuICBjb25zdCBbc2VsZWN0ZWRTbG90LCBzZXRTZWxlY3RlZFNsb3RdID0gdXNlU3RhdGU8eyBkYXRlOiBEYXRlOyB0aW1lOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFtlcnJvcnMsIHNldEVycm9yc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKGZpZWxkOiBrZXlvZiBBcHBvaW50bWVudEZvcm1EYXRhLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBzZXRGb3JtRGF0YShwcmV2ID0+ICh7IC4uLnByZXYsIFtmaWVsZF06IHZhbHVlIH0pKTtcclxuICAgIC8vIENsZWFyIGVycm9yIHdoZW4gdXNlciBzdGFydHMgdHlwaW5nXHJcbiAgICBpZiAoZXJyb3JzW2ZpZWxkXSkge1xyXG4gICAgICBzZXRFcnJvcnMocHJldiA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0geyAuLi5wcmV2IH07XHJcbiAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tmaWVsZF07XHJcbiAgICAgICAgcmV0dXJuIG5ld0Vycm9ycztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU2xvdFNlbGVjdCA9IChkYXRlOiBEYXRlLCB0aW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKCc9PT0gU0xPVCBTRUxFQ1RJT04gREVCVUcgPT09Jyk7XHJcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgZGF0ZTonLCBkYXRlKTtcclxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCB0aW1lOicsIHRpbWUpO1xyXG4gICAgY29uc29sZS5sb2coJ0RhdGUgdHlwZTonLCB0eXBlb2YgZGF0ZSk7XHJcbiAgICBjb25zb2xlLmxvZygnRGF0ZSBpbnN0YW5jZW9mIERhdGU6JywgZGF0ZSBpbnN0YW5jZW9mIERhdGUpO1xyXG4gICAgY29uc29sZS5sb2coJ0RhdGUudG9JU09TdHJpbmcoKTonLCBkYXRlLnRvSVNPU3RyaW5nKCkpO1xyXG4gICAgXHJcbiAgICBpZiAodGltZSA9PT0gJycpIHtcclxuICAgICAgc2V0U2VsZWN0ZWRTbG90KG51bGwpO1xyXG4gICAgICBjb25zb2xlLmxvZygnU2xvdCBkZXNlbGVjdGVkJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRTZWxlY3RlZFNsb3QoeyBkYXRlLCB0aW1lIH0pO1xyXG4gICAgICBjb25zb2xlLmxvZygnU2xvdCBzZWxlY3RlZDonLCB7IGRhdGUsIHRpbWUgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdmFsaWRhdGVGb3JtID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgbmV3RXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcblxyXG4gICAgaWYgKCFmb3JtRGF0YS5uYW1lLnRyaW0oKSkge1xyXG4gICAgICBuZXdFcnJvcnMubmFtZSA9ICdOYW1lIGlzdCBlcmZvcmRlcmxpY2gnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZm9ybURhdGEudGVsZWZvbi50cmltKCkpIHtcclxuICAgICAgbmV3RXJyb3JzLnRlbGVmb24gPSAnVGVsZWZvbm51bW1lciBpc3QgZXJmb3JkZXJsaWNoJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZvcm1EYXRhLmZpcm1hLnRyaW0oKSkge1xyXG4gICAgICBuZXdFcnJvcnMuZmlybWEgPSAnVW50ZXJuZWhtZW4gaXN0IGVyZm9yZGVybGljaCc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmb3JtRGF0YS5lbWFpbC50cmltKCkpIHtcclxuICAgICAgbmV3RXJyb3JzLmVtYWlsID0gJ0UtTWFpbCBpc3QgZXJmb3JkZXJsaWNoJztcclxuICAgIH0gZWxzZSBpZiAoIS9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QoZm9ybURhdGEuZW1haWwpKSB7XHJcbiAgICAgIG5ld0Vycm9ycy5lbWFpbCA9ICdCaXR0ZSBnZWJlbiBTaWUgZWluZSBnw7xsdGlnZSBFLU1haWwtQWRyZXNzZSBlaW4nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZm9ybURhdGEuYmVzY2hyZWlidW5nLnRyaW0oKSkge1xyXG4gICAgICBuZXdFcnJvcnMuYmVzY2hyZWlidW5nID0gJ1Byb2pla3RiZXNjaHJlaWJ1bmcgaXN0IGVyZm9yZGVybGljaCc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFzZWxlY3RlZFNsb3QpIHtcclxuICAgICAgbmV3RXJyb3JzLnRlcm1pbl9kYXR1bSA9ICdCaXR0ZSB3w6RobGVuIFNpZSBlaW5lbiBUZXJtaW4gYXVzJztcclxuICAgIH1cclxuXHJcbiAgICBzZXRFcnJvcnMobmV3RXJyb3JzKTtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhuZXdFcnJvcnMpLmxlbmd0aCA9PT0gMDtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBcclxuICAgIGlmICh2YWxpZGF0ZUZvcm0oKSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnPT09IEZPUk0gU1VCTUlUIERFQlVHID09PScpO1xyXG4gICAgICBjb25zb2xlLmxvZygnRm9ybSBkYXRhOicsIGZvcm1EYXRhKTtcclxuICAgICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHNsb3Q6Jywgc2VsZWN0ZWRTbG90KTtcclxuICAgICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHNsb3QgZGF0ZTonLCBzZWxlY3RlZFNsb3Q/LmRhdGUpO1xyXG4gICAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgc2xvdCB0aW1lOicsIHNlbGVjdGVkU2xvdD8udGltZSk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBzdWJtaXREYXRhID0ge1xyXG4gICAgICAgIC4uLmZvcm1EYXRhLFxyXG4gICAgICAgIHRlcm1pbl9kYXR1bTogc2VsZWN0ZWRTbG90Py5kYXRlLFxyXG4gICAgICAgIHRlcm1pbl90aW1lOiBzZWxlY3RlZFNsb3Q/LnRpbWVcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCdTdWJtaXQgZGF0YTonLCBzdWJtaXREYXRhKTtcclxuICAgICAgY29uc29sZS5sb2coJ1N1Ym1pdCB0ZXJtaW5fZGF0dW06Jywgc3VibWl0RGF0YS50ZXJtaW5fZGF0dW0pO1xyXG4gICAgICBjb25zb2xlLmxvZygnU3VibWl0IHRlcm1pbl90aW1lOicsIHN1Ym1pdERhdGEudGVybWluX3RpbWUpO1xyXG4gICAgICBcclxuICAgICAgb25TdWJtaXQoc3VibWl0RGF0YSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIG1heC13LTR4bCBteC1hdXRvXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBsZzpncmlkLWNvbHMtMiBnYXAtOFwiPlxyXG4gICAgICAgIHsvKiBBcHBvaW50bWVudCBGb3JtICovfVxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJwLTYgc206cC04IHJvdW5kZWQtM3hsIHNoYWRvdy1sZyBiYWNrZHJvcC1ibHVyLXNtXCJcclxuICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLmJhY2tncm91bmR9RjBgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMgbWItNlwiPlxyXG4gICAgICAgICAgICA8Q2FsZW5kYXIgY2xhc3NOYW1lPVwidy02IGgtNlwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fSAvPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgVGVybWluIGFuZnJhZ2VuXHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0yIGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICA8VXNlciBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPjAxIOKAkyBXaWUgaXN0IGRlaW4gTmFtZT88L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8SW5wdXQgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhLm5hbWV9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUlucHV0Q2hhbmdlKCduYW1lJywgZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlci0yIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgJHtcclxuICAgICAgICAgICAgICAgICAgZXJyb3JzLm5hbWUgPyAnYm9yZGVyLXJlZC01MDAnIDogJydcclxuICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgXHJcbiAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvcnMubmFtZSA/ICcjZWY0NDQ0JyA6IGNvbG9ycy50ZXJ0aWFyeSxcclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEZWluIHZvbGxzdMOkbmRpZ2VyIE5hbWVcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAge2Vycm9ycy5uYW1lICYmIChcclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXNtIG10LTFcIj57ZXJyb3JzLm5hbWV9PC9wPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0yIGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICA8UGhvbmUgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4wMiDigJMgRGVpbmUgVGVsZWZvbm51bW1lcjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxJbnB1dCBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZWxcIiBcclxuICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS50ZWxlZm9ufVxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVJbnB1dENoYW5nZSgndGVsZWZvbicsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCBwLTMgcm91bmRlZC14bCBib3JkZXItMiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICR7XHJcbiAgICAgICAgICAgICAgICAgIGVycm9ycy50ZWxlZm9uID8gJ2JvcmRlci1yZWQtNTAwJyA6ICcnXHJcbiAgICAgICAgICAgICAgICB9YH1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3JzLnRlbGVmb24gPyAnI2VmNDQ0NCcgOiBjb2xvcnMudGVydGlhcnksXHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMucHJpbWFyeVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiKzQ5IDEyMyA0NTY3ODlcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAge2Vycm9ycy50ZWxlZm9uICYmIChcclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXNtIG10LTFcIj57ZXJyb3JzLnRlbGVmb259PC9wPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0yIGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICA8QnVpbGRpbmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4wMyDigJMgRGVpbiBVbnRlcm5laG1lbjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxJbnB1dCBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybURhdGEuZmlybWF9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUlucHV0Q2hhbmdlKCdmaXJtYScsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCBwLTMgcm91bmRlZC14bCBib3JkZXItMiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICR7XHJcbiAgICAgICAgICAgICAgICAgIGVycm9ycy5maXJtYSA/ICdib3JkZXItcmVkLTUwMCcgOiAnJ1xyXG4gICAgICAgICAgICAgICAgfWB9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9ycy5maXJtYSA/ICcjZWY0NDQ0JyA6IGNvbG9ycy50ZXJ0aWFyeSxcclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lIGRlaW5lcyBVbnRlcm5laG1lbnNcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAge2Vycm9ycy5maXJtYSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgdGV4dC1zbSBtdC0xXCI+e2Vycm9ycy5maXJtYX08L3A+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTIgZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgIDxNYWlsIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+MDQg4oCTIERlaW5lIEUtTWFpbC1BZHJlc3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPElucHV0IFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImVtYWlsXCIgXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybURhdGEuZW1haWx9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUlucHV0Q2hhbmdlKCdlbWFpbCcsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCBwLTMgcm91bmRlZC14bCBib3JkZXItMiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICR7XHJcbiAgICAgICAgICAgICAgICAgIGVycm9ycy5lbWFpbCA/ICdib3JkZXItcmVkLTUwMCcgOiAnJ1xyXG4gICAgICAgICAgICAgICAgfWB9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9ycy5lbWFpbCA/ICcjZWY0NDQ0JyA6IGNvbG9ycy50ZXJ0aWFyeSxcclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkZWluZUBlbWFpbC5kZVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICB7ZXJyb3JzLmVtYWlsICYmIChcclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXNtIG10LTFcIj57ZXJyb3JzLmVtYWlsfTwvcD5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMiBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2VTcXVhcmUgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4wNSDigJMgRXJ6w6RobCB1bnMga3VyeiB2b24gZGVpbmVtIFZvcmhhYmVuPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPFRleHRhcmVhIFxyXG4gICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhLmJlc2NocmVpYnVuZ31cclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlSW5wdXRDaGFuZ2UoJ2Jlc2NocmVpYnVuZycsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgIHJvd3M9ezR9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyLTIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiAke1xyXG4gICAgICAgICAgICAgICAgICBlcnJvcnMuYmVzY2hyZWlidW5nID8gJ2JvcmRlci1yZWQtNTAwJyA6ICcnXHJcbiAgICAgICAgICAgICAgICB9YH1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3JzLmJlc2NocmVpYnVuZyA/ICcjZWY0NDQ0JyA6IGNvbG9ycy50ZXJ0aWFyeSxcclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJCZXNjaHJlaWJlIGRlaW4gUHJvamVrdCwgWmllbGUsIFfDvG5zY2hlLi4uXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIHtlcnJvcnMuYmVzY2hyZWlidW5nICYmIChcclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXNtIG10LTFcIj57ZXJyb3JzLmJlc2NocmVpYnVuZ308L3A+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB7ZXJyb3JzLnRlcm1pbl9kYXR1bSAmJiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTMgcm91bmRlZC14bCBib3JkZXItMiBib3JkZXItcmVkLTUwMCBiZy1yZWQtNTBcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXNtXCI+e2Vycm9ycy50ZXJtaW5fZGF0dW19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZD17bG9hZGluZ31cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcHktMyByb3VuZGVkLXhsIHRleHQtbGcgZm9udC1zZW1pYm9sZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTJcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IFxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMucHJpbWFyeSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7bG9hZGluZyA/IChcclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBoLTUgdy01IGJvcmRlci1iLTIgYm9yZGVyLXdoaXRlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPldpcmQgdmVyYXJiZWl0ZXQuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgPENoZWNrQ2lyY2xlIGNsYXNzTmFtZT1cInctNSBoLTVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj5UZXJtaW4gYW5mcmFnZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgey8qIENhbGVuZGFyIENvbXBvbmVudCAqL31cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgc3BhY2UteS02XCI+XHJcbiAgICAgICAgICA8QXBwb2ludG1lbnRDYWxlbmRhciBcclxuICAgICAgICAgICAgb25TbG90U2VsZWN0PXtoYW5kbGVTbG90U2VsZWN0fVxyXG4gICAgICAgICAgICBzZWxlY3RlZFNsb3Q9e3NlbGVjdGVkU2xvdH1cclxuICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgey8qIEFsdGVybmF0aXZlIENvbnRhY3QgKi99XHJcbiAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwLTYgcm91bmRlZC0yeGwgYmFja2Ryb3AtYmx1ci1zbVwiXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLnByaW1hcnl9MjBgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtYm9sZCBtYi00IGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiIFxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19PlxyXG4gICAgICAgICAgICAgIDxQaG9uZSBjbGFzc05hbWU9XCJ3LTUgaC01XCIgLz5cclxuICAgICAgICAgICAgICA8c3Bhbj5PZGVyIGRpcmVrdCBhbnJ1ZmVuPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTMgdGV4dC1zbVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCB9fT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8UGhvbmUgY2xhc3NOYW1lPVwidy00IGgtNCBtci0zXCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPis0OSAxNzAgNDk2OTM3NTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8TWFpbCBjbGFzc05hbWU9XCJ3LTQgaC00IG1yLTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+c3VwcG9ydEB3ZWJrbGFyLmNvbTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8QnVpbGRpbmcgY2xhc3NOYW1lPVwidy00IGgtNCBtci0zXCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPkthaXNlcnNsYXV0ZXJuLCBEZXV0c2NobGFuZDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiQnV0dG9uIiwiSW5wdXQiLCJUZXh0YXJlYSIsIkNoZWNrQ2lyY2xlIiwiTWFpbCIsIkNhbGVuZGFyIiwiVXNlciIsIlBob25lIiwiQnVpbGRpbmciLCJNZXNzYWdlU3F1YXJlIiwiY29sb3JzIiwiQXBwb2ludG1lbnRDYWxlbmRhciIsIkFwcG9pbnRtZW50Rm9ybSIsIm9uU3VibWl0IiwibG9hZGluZyIsImZvcm1EYXRhIiwic2V0Rm9ybURhdGEiLCJuYW1lIiwidGVsZWZvbiIsImZpcm1hIiwiZW1haWwiLCJiZXNjaHJlaWJ1bmciLCJzZWxlY3RlZFNsb3QiLCJzZXRTZWxlY3RlZFNsb3QiLCJlcnJvcnMiLCJzZXRFcnJvcnMiLCJoYW5kbGVJbnB1dENoYW5nZSIsImZpZWxkIiwidmFsdWUiLCJwcmV2IiwibmV3RXJyb3JzIiwiaGFuZGxlU2xvdFNlbGVjdCIsImRhdGUiLCJ0aW1lIiwiY29uc29sZSIsImxvZyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInZhbGlkYXRlRm9ybSIsInRyaW0iLCJ0ZXN0IiwidGVybWluX2RhdHVtIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInN1Ym1pdERhdGEiLCJ0ZXJtaW5fdGltZSIsImRpdiIsImNsYXNzTmFtZSIsInN0eWxlIiwiYmFja2dyb3VuZENvbG9yIiwiYmFja2dyb3VuZCIsImNvbG9yIiwicHJpbWFyeSIsImgzIiwiZm9ybSIsImxhYmVsIiwic3BhbiIsInR5cGUiLCJvbkNoYW5nZSIsInRhcmdldCIsImJvcmRlckNvbG9yIiwidGVydGlhcnkiLCJwbGFjZWhvbGRlciIsInAiLCJyb3dzIiwiZGlzYWJsZWQiLCJvblNsb3RTZWxlY3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/AppointmentForm.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/AppointmentStatus.tsx": /*!******************************************!*\ !*** ./components/AppointmentStatus.tsx ***! \******************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ AppointmentStatus; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail,Clock,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check-big.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail,Clock,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/user.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail,Clock,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail,Clock,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\");\n/* harmony import */ var _barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=CheckCircle,Calendar,Mail,Clock,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clock.js\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* harmony import */ var _hooks_useAuth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/hooks/useAuth */ \"(app-pages-browser)/./hooks/useAuth.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction AppointmentStatus() {\n _s();\n const { user, loading } = (0,_hooks_useAuth__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const [showStatus, setShowStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n // Show status if user is authenticated and has appointment_booking metadata\n if (user && !loading) {\n var _user_user_metadata;\n const hasAppointmentBooking = (_user_user_metadata = user.user_metadata) === null || _user_user_metadata === void 0 ? void 0 : _user_user_metadata.appointment_booking;\n if (hasAppointmentBooking) {\n setShowStatus(true);\n // Hide status after 10 seconds\n const timer = setTimeout(()=>{\n setShowStatus(false);\n }, 10000);\n return ()=>clearTimeout(timer);\n }\n }\n }, [\n user,\n loading\n ]);\n if (!showStatus) return null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed top-4 right-4 z-50 max-w-sm\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 rounded-2xl shadow-lg backdrop-blur-sm border-2\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.background, \"F0\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"w-6 h-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 41,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary\n },\n children: \"Termin best\\xe4tigt! ✅\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 42,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 40,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-4 h-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 49,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"Status:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 51,\n columnNumber: 15\n }, this),\n \" Angemeldet\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 50,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 48,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 56,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"E-Mail:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 58,\n columnNumber: 15\n }, this),\n \" \",\n user === null || user === void 0 ? void 0 : user.email\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 57,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 55,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"w-4 h-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 63,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"Termin:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 65,\n columnNumber: 15\n }, this),\n \" Gespeichert\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 64,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 62,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_CheckCircle_Calendar_Mail_Clock_User_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"w-4 h-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 70,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"Zeit:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 72,\n columnNumber: 15\n }, this),\n \" \",\n new Date().toLocaleTimeString(\"de-DE\")\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 71,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 69,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 47,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowStatus(false),\n className: \"mt-4 w-full p-2 rounded-xl text-sm transition-all duration-200 hover:scale-105\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.background\n },\n children: \"Verstanden\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 77,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\AppointmentStatus.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n_s(AppointmentStatus, \"0cw7Jg4CYo2Nxo+Ynb68cuuuUKs=\", false, function() {\n return [\n _hooks_useAuth__WEBPACK_IMPORTED_MODULE_3__.useAuth\n ];\n});\n_c = AppointmentStatus;\nvar _c;\n$RefreshReg$(_c, \"AppointmentStatus\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQXBwb2ludG1lbnRTdGF0dXMudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNEM7QUFDNEI7QUFDbEM7QUFDSTtBQUUzQixTQUFTUzs7SUFDdEIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHSCx1REFBT0E7SUFDakMsTUFBTSxDQUFDSSxZQUFZQyxjQUFjLEdBQUdaLCtDQUFRQSxDQUFDO0lBRTdDRCxnREFBU0EsQ0FBQztRQUNSLDRFQUE0RTtRQUM1RSxJQUFJVSxRQUFRLENBQUNDLFNBQVM7Z0JBQ1VEO1lBQTlCLE1BQU1JLHlCQUF3Qkosc0JBQUFBLEtBQUtLLGFBQWEsY0FBbEJMLDBDQUFBQSxvQkFBb0JNLG1CQUFtQjtZQUNyRSxJQUFJRix1QkFBdUI7Z0JBQ3pCRCxjQUFjO2dCQUVkLCtCQUErQjtnQkFDL0IsTUFBTUksUUFBUUMsV0FBVztvQkFDdkJMLGNBQWM7Z0JBQ2hCLEdBQUc7Z0JBRUgsT0FBTyxJQUFNTSxhQUFhRjtZQUM1QjtRQUNGO0lBQ0YsR0FBRztRQUFDUDtRQUFNQztLQUFRO0lBRWxCLElBQUksQ0FBQ0MsWUFBWSxPQUFPO0lBRXhCLHFCQUNFLDhEQUFDUTtRQUFJQyxXQUFVO2tCQUNiLDRFQUFDRDtZQUNDQyxXQUFVO1lBQ1ZDLE9BQU87Z0JBQ0xDLGlCQUFpQixHQUFxQixPQUFsQmhCLCtDQUFNQSxDQUFDaUIsVUFBVSxFQUFDO2dCQUN0Q0MsYUFBYWxCLCtDQUFNQSxDQUFDbUIsT0FBTztZQUM3Qjs7OEJBRUEsOERBQUNOO29CQUFJQyxXQUFVOztzQ0FDYiw4REFBQ25CLGdIQUFXQTs0QkFBQ21CLFdBQVU7NEJBQVVDLE9BQU87Z0NBQUVLLE9BQU9wQiwrQ0FBTUEsQ0FBQ21CLE9BQU87NEJBQUM7Ozs7OztzQ0FDaEUsOERBQUNFOzRCQUFHUCxXQUFVOzRCQUFnQkMsT0FBTztnQ0FBRUssT0FBT3BCLCtDQUFNQSxDQUFDbUIsT0FBTzs0QkFBQztzQ0FBRzs7Ozs7Ozs7Ozs7OzhCQUtsRSw4REFBQ047b0JBQUlDLFdBQVU7O3NDQUNiLDhEQUFDRDs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNmLGdIQUFJQTtvQ0FBQ2UsV0FBVTtvQ0FBVUMsT0FBTzt3Q0FBRUssT0FBT3BCLCtDQUFNQSxDQUFDc0IsU0FBUztvQ0FBQzs7Ozs7OzhDQUMzRCw4REFBQ0M7b0NBQUtULFdBQVU7b0NBQVVDLE9BQU87d0NBQUVLLE9BQU9wQiwrQ0FBTUEsQ0FBQ3NCLFNBQVM7b0NBQUM7O3NEQUN6RCw4REFBQ0U7c0RBQU87Ozs7Ozt3Q0FBZ0I7Ozs7Ozs7Ozs7Ozs7c0NBSTVCLDhEQUFDWDs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNqQixnSEFBSUE7b0NBQUNpQixXQUFVO29DQUFVQyxPQUFPO3dDQUFFSyxPQUFPcEIsK0NBQU1BLENBQUNzQixTQUFTO29DQUFDOzs7Ozs7OENBQzNELDhEQUFDQztvQ0FBS1QsV0FBVTtvQ0FBVUMsT0FBTzt3Q0FBRUssT0FBT3BCLCtDQUFNQSxDQUFDc0IsU0FBUztvQ0FBQzs7c0RBQ3pELDhEQUFDRTtzREFBTzs7Ozs7O3dDQUFnQjt3Q0FBRXJCLGlCQUFBQSwyQkFBQUEsS0FBTXNCLEtBQUs7Ozs7Ozs7Ozs7Ozs7c0NBSXpDLDhEQUFDWjs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNsQixnSEFBUUE7b0NBQUNrQixXQUFVO29DQUFVQyxPQUFPO3dDQUFFSyxPQUFPcEIsK0NBQU1BLENBQUNzQixTQUFTO29DQUFDOzs7Ozs7OENBQy9ELDhEQUFDQztvQ0FBS1QsV0FBVTtvQ0FBVUMsT0FBTzt3Q0FBRUssT0FBT3BCLCtDQUFNQSxDQUFDc0IsU0FBUztvQ0FBQzs7c0RBQ3pELDhEQUFDRTtzREFBTzs7Ozs7O3dDQUFnQjs7Ozs7Ozs7Ozs7OztzQ0FJNUIsOERBQUNYOzRCQUFJQyxXQUFVOzs4Q0FDYiw4REFBQ2hCLGdIQUFLQTtvQ0FBQ2dCLFdBQVU7b0NBQVVDLE9BQU87d0NBQUVLLE9BQU9wQiwrQ0FBTUEsQ0FBQ3NCLFNBQVM7b0NBQUM7Ozs7Ozs4Q0FDNUQsOERBQUNDO29DQUFLVCxXQUFVO29DQUFVQyxPQUFPO3dDQUFFSyxPQUFPcEIsK0NBQU1BLENBQUNzQixTQUFTO29DQUFDOztzREFDekQsOERBQUNFO3NEQUFPOzs7Ozs7d0NBQWM7d0NBQUUsSUFBSUUsT0FBT0Msa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OEJBSzVELDhEQUFDQztvQkFDQ0MsU0FBUyxJQUFNdkIsY0FBYztvQkFDN0JRLFdBQVU7b0JBQ1ZDLE9BQU87d0JBQ0xDLGlCQUFpQmhCLCtDQUFNQSxDQUFDbUIsT0FBTzt3QkFDL0JDLE9BQU9wQiwrQ0FBTUEsQ0FBQ2lCLFVBQVU7b0JBQzFCOzhCQUNEOzs7Ozs7Ozs7Ozs7Ozs7OztBQU1UO0dBbEZ3QmY7O1FBQ0lELG1EQUFPQTs7O0tBRFhDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQXBwb2ludG1lbnRTdGF0dXMudHN4PzRkNDgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcblxyXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDaGVja0NpcmNsZSwgQ2FsZW5kYXIsIE1haWwsIENsb2NrLCBVc2VyIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xyXG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICdAL2xpYi9jb2xvcnMnO1xyXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnQC9ob29rcy91c2VBdXRoJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcG9pbnRtZW50U3RhdHVzKCkge1xyXG4gIGNvbnN0IHsgdXNlciwgbG9hZGluZyB9ID0gdXNlQXV0aCgpO1xyXG4gIGNvbnN0IFtzaG93U3RhdHVzLCBzZXRTaG93U3RhdHVzXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vIFNob3cgc3RhdHVzIGlmIHVzZXIgaXMgYXV0aGVudGljYXRlZCBhbmQgaGFzIGFwcG9pbnRtZW50X2Jvb2tpbmcgbWV0YWRhdGFcclxuICAgIGlmICh1c2VyICYmICFsb2FkaW5nKSB7XHJcbiAgICAgIGNvbnN0IGhhc0FwcG9pbnRtZW50Qm9va2luZyA9IHVzZXIudXNlcl9tZXRhZGF0YT8uYXBwb2ludG1lbnRfYm9va2luZztcclxuICAgICAgaWYgKGhhc0FwcG9pbnRtZW50Qm9va2luZykge1xyXG4gICAgICAgIHNldFNob3dTdGF0dXModHJ1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gSGlkZSBzdGF0dXMgYWZ0ZXIgMTAgc2Vjb25kc1xyXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBzZXRTaG93U3RhdHVzKGZhbHNlKTtcclxuICAgICAgICB9LCAxMDAwMCk7XHJcblxyXG4gICAgICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgW3VzZXIsIGxvYWRpbmddKTtcclxuXHJcbiAgaWYgKCFzaG93U3RhdHVzKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZml4ZWQgdG9wLTQgcmlnaHQtNCB6LTUwIG1heC13LXNtXCI+XHJcbiAgICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3NOYW1lPVwicC02IHJvdW5kZWQtMnhsIHNoYWRvdy1sZyBiYWNrZHJvcC1ibHVyLXNtIGJvcmRlci0yXCJcclxuICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLmJhY2tncm91bmR9RjBgLFxyXG4gICAgICAgICAgYm9yZGVyQ29sb3I6IGNvbG9ycy5wcmltYXJ5XHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIG1iLTRcIj5cclxuICAgICAgICAgIDxDaGVja0NpcmNsZSBjbGFzc05hbWU9XCJ3LTYgaC02XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19IC8+XHJcbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgVGVybWluIGJlc3TDpHRpZ3QhIOKchVxyXG4gICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zXCI+XHJcbiAgICAgICAgICAgIDxVc2VyIGNsYXNzTmFtZT1cInctNCBoLTRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fSAvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX0+XHJcbiAgICAgICAgICAgICAgPHN0cm9uZz5TdGF0dXM6PC9zdHJvbmc+IEFuZ2VtZWxkZXRcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cclxuICAgICAgICAgICAgPE1haWwgY2xhc3NOYW1lPVwidy00IGgtNFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19IC8+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc21cIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fT5cclxuICAgICAgICAgICAgICA8c3Ryb25nPkUtTWFpbDo8L3N0cm9uZz4ge3VzZXI/LmVtYWlsfVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtM1wiPlxyXG4gICAgICAgICAgICA8Q2FsZW5kYXIgY2xhc3NOYW1lPVwidy00IGgtNFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19IC8+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc21cIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fT5cclxuICAgICAgICAgICAgICA8c3Ryb25nPlRlcm1pbjo8L3N0cm9uZz4gR2VzcGVpY2hlcnRcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cclxuICAgICAgICAgICAgPENsb2NrIGNsYXNzTmFtZT1cInctNCBoLTRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fSAvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX0+XHJcbiAgICAgICAgICAgICAgPHN0cm9uZz5aZWl0Ojwvc3Ryb25nPiB7bmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoJ2RlLURFJyl9XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93U3RhdHVzKGZhbHNlKX1cclxuICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTQgdy1mdWxsIHAtMiByb3VuZGVkLXhsIHRleHQtc20gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNjYWxlLTEwNVwiXHJcbiAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMucHJpbWFyeSxcclxuICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIFZlcnN0YW5kZW5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsIkNoZWNrQ2lyY2xlIiwiQ2FsZW5kYXIiLCJNYWlsIiwiQ2xvY2siLCJVc2VyIiwiY29sb3JzIiwidXNlQXV0aCIsIkFwcG9pbnRtZW50U3RhdHVzIiwidXNlciIsImxvYWRpbmciLCJzaG93U3RhdHVzIiwic2V0U2hvd1N0YXR1cyIsImhhc0FwcG9pbnRtZW50Qm9va2luZyIsInVzZXJfbWV0YWRhdGEiLCJhcHBvaW50bWVudF9ib29raW5nIiwidGltZXIiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiZGl2IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyQ29sb3IiLCJwcmltYXJ5IiwiY29sb3IiLCJoMyIsInNlY29uZGFyeSIsInNwYW4iLCJzdHJvbmciLCJlbWFpbCIsIkRhdGUiLCJ0b0xvY2FsZVRpbWVTdHJpbmciLCJidXR0b24iLCJvbkNsaWNrIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/AppointmentStatus.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/EmailVerification.tsx": /*!******************************************!*\ !*** ./components/EmailVerification.tsx ***! \******************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ EmailVerification; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/input */ \"(app-pages-browser)/./components/ui/input.tsx\");\n/* harmony import */ var _barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Mail,CheckCircle,ArrowLeft!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.js\");\n/* harmony import */ var _barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Mail,CheckCircle,ArrowLeft!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/arrow-left.js\");\n/* harmony import */ var _barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Mail,CheckCircle,ArrowLeft!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check-big.js\");\n/* harmony import */ var _lib_supabase__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/supabase */ \"(app-pages-browser)/./lib/supabase.ts\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\nfunction EmailVerification(param) {\n let { email, onVerificationComplete, onBack } = param;\n _s();\n const [verificationEmail, setVerificationEmail] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(email);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [sent, setSent] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [success, setSuccess] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [rateLimited, setRateLimited] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [cooldownTime, setCooldownTime] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const handleSendVerification = async ()=>{\n if (!verificationEmail || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(verificationEmail)) {\n setError(\"Bitte geben Sie eine g\\xfcltige E-Mail-Adresse ein.\");\n return;\n }\n if (rateLimited) {\n setError(\"Rate Limit aktiv. Bitte warten Sie \".concat(cooldownTime, \" Sekunden oder verwenden Sie die manuelle Best\\xe4tigung.\"));\n return;\n }\n setLoading(true);\n setError(null);\n try {\n console.log(\"=== E-MAIL VERIFICATION DEBUG ===\");\n console.log(\"Sending verification email to:\", verificationEmail);\n console.log(\"Current origin:\", window.location.origin);\n console.log(\"Redirect URL:\", \"\".concat(window.location.origin, \"/auth/callback\"));\n // Use signInWithOtp with proper configuration for email verification\n const { data, error } = await _lib_supabase__WEBPACK_IMPORTED_MODULE_4__.supabase.auth.signInWithOtp({\n email: verificationEmail,\n options: {\n shouldCreateUser: true,\n data: {\n // Custom metadata for appointment booking\n appointment_booking: true,\n email: verificationEmail\n }\n }\n });\n console.log(\"Supabase email verification response:\", {\n data,\n error\n });\n if (error) {\n console.error(\"Supabase email verification error:\", error);\n if (error.message.includes(\"rate limit\")) {\n setRateLimited(true);\n setCooldownTime(60); // 60 seconds cooldown\n // Start countdown\n const countdown = setInterval(()=>{\n setCooldownTime((prev)=>{\n if (prev <= 1) {\n clearInterval(countdown);\n setRateLimited(false);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n setError(\"E-Mail-Rate-Limit erreicht. Bitte warten Sie 60 Sekunden oder verwenden Sie die manuelle Best\\xe4tigung.\");\n } else if (error.message.includes(\"expired\") || error.message.includes(\"invalid\")) {\n setError(\"Der E-Mail-Link ist abgelaufen oder ung\\xfcltig. Bitte fordern Sie einen neuen Link an.\");\n } else {\n setError(\"E-Mail-Fehler: \".concat(error.message));\n }\n } else {\n console.log(\"Verification email sent successfully\");\n setSent(true);\n }\n } catch (err) {\n console.error(\"Unexpected error sending verification email:\", err);\n setError(\"Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.\");\n } finally{\n setLoading(false);\n }\n };\n const handleEmailChange = (e)=>{\n setVerificationEmail(e.target.value);\n if (error) setError(null);\n };\n const handleResend = ()=>{\n setSent(false);\n setError(null);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-md mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 sm:p-8 rounded-3xl shadow-lg backdrop-blur-sm\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background, \"F0\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-6 h-6\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 114,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-xl font-bold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: \"E-Mail senden\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 115,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 113,\n columnNumber: 9\n }, this),\n !sent ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.secondary\n },\n children: \"Um Ihren Termin zu best\\xe4tigen, senden wir Ihnen eine Best\\xe4tigungs-E-Mail. Klicken Sie auf den Link in der E-Mail, um sich zu authentifizieren.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 122,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: \"E-Mail-Adresse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 128,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_3__.Input, {\n type: \"email\",\n value: verificationEmail,\n onChange: handleEmailChange,\n className: \"w-full p-3 rounded-xl border-2 focus:outline-none focus:ring-2\",\n style: {\n borderColor: error ? \"#ef4444\" : _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n placeholder: \"ihre@email.de\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 131,\n columnNumber: 15\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-500 text-sm mt-1\",\n children: error\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 144,\n columnNumber: 17\n }, this),\n rateLimited && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 p-2 rounded-lg border-2 border-orange-300 bg-orange-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-orange-700\",\n children: [\n \"⚠️ \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"Rate Limit aktiv:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 150,\n columnNumber: 24\n }, this),\n \" Bitte warten Sie \",\n cooldownTime,\n \" Sekunden oder verwenden Sie die manuelle Best\\xe4tigung.\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 149,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 148,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 127,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: onBack,\n variant: \"outline\",\n className: \"flex-1 rounded-xl\",\n style: {\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"w-4 h-4 mr-2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 166,\n columnNumber: 17\n }, this),\n \"Zur\\xfcck\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 157,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: handleSendVerification,\n disabled: loading || rateLimited,\n className: \"flex-1 rounded-xl flex items-center justify-center space-x-2\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background\n },\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-spin rounded-full h-4 w-4 border-b-2 border-white\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 181,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"E-Mail wird gesendet...\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 182,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true) : rateLimited ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"Rate Limit (\",\n cooldownTime,\n \"s)\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 186,\n columnNumber: 21\n }, this)\n }, void 0, false) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 190,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"E-Mail senden\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 191,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 170,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 156,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 121,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary, \"20\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-8 h-8\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 200,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"text-lg font-semibold mb-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: \"E-Mail gesendet!\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.secondary\n },\n children: [\n \"Wir haben eine Best\\xe4tigungs-E-Mail an \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: verificationEmail\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 210,\n columnNumber: 55\n }, this),\n \" gesendet. Bitte \\xfcberpr\\xfcfen Sie Ihren Posteingang und klicken Sie auf den Link in der E-Mail.\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 209,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 199,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: handleResend,\n variant: \"outline\",\n className: \"flex-1 rounded-xl\",\n style: {\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.tertiary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary\n },\n children: \"Erneut senden\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 217,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: onVerificationComplete,\n className: \"flex-1 rounded-xl flex items-center justify-center space-x-2\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_5__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Mail_CheckCircle_ArrowLeft_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 237,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"E-Mail best\\xe4tigt\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 229,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 216,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 198,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 109,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\EmailVerification.tsx\",\n lineNumber: 108,\n columnNumber: 5\n }, this);\n}\n_s(EmailVerification, \"gxX+9KdGvGwtIHSL8cavqhyoGoE=\");\n_c = EmailVerification;\nvar _c;\n$RefreshReg$(_c, \"EmailVerification\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvRW1haWxWZXJpZmljYXRpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFd0M7QUFDUTtBQUNGO0FBQzJCO0FBQy9CO0FBQ0o7QUFRdkIsU0FBU1Msa0JBQWtCLEtBQWlFO1FBQWpFLEVBQUVDLEtBQUssRUFBRUMsc0JBQXNCLEVBQUVDLE1BQU0sRUFBMEIsR0FBakU7O0lBQ3hDLE1BQU0sQ0FBQ0MsbUJBQW1CQyxxQkFBcUIsR0FBR2IsK0NBQVFBLENBQUNTO0lBQzNELE1BQU0sQ0FBQ0ssU0FBU0MsV0FBVyxHQUFHZiwrQ0FBUUEsQ0FBQztJQUN2QyxNQUFNLENBQUNnQixNQUFNQyxRQUFRLEdBQUdqQiwrQ0FBUUEsQ0FBQztJQUNqQyxNQUFNLENBQUNrQixPQUFPQyxTQUFTLEdBQUduQiwrQ0FBUUEsQ0FBZ0I7SUFDbEQsTUFBTSxDQUFDb0IsU0FBU0MsV0FBVyxHQUFHckIsK0NBQVFBLENBQUM7SUFDdkMsTUFBTSxDQUFDc0IsYUFBYUMsZUFBZSxHQUFHdkIsK0NBQVFBLENBQUM7SUFDL0MsTUFBTSxDQUFDd0IsY0FBY0MsZ0JBQWdCLEdBQUd6QiwrQ0FBUUEsQ0FBQztJQUVqRCxNQUFNMEIseUJBQXlCO1FBQzdCLElBQUksQ0FBQ2QscUJBQXFCLENBQUMsNkJBQTZCZSxJQUFJLENBQUNmLG9CQUFvQjtZQUMvRU8sU0FBUztZQUNUO1FBQ0Y7UUFFQSxJQUFJRyxhQUFhO1lBQ2ZILFNBQVMsc0NBQW1ELE9BQWJLLGNBQWE7WUFDNUQ7UUFDRjtRQUVBVCxXQUFXO1FBQ1hJLFNBQVM7UUFFVCxJQUFJO1lBQ0ZTLFFBQVFDLEdBQUcsQ0FBQztZQUNaRCxRQUFRQyxHQUFHLENBQUMsa0NBQWtDakI7WUFDOUNnQixRQUFRQyxHQUFHLENBQUMsbUJBQW1CQyxPQUFPQyxRQUFRLENBQUNDLE1BQU07WUFDckRKLFFBQVFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBMEIsT0FBdkJDLE9BQU9DLFFB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Tzt3Q0FBRUMsaUJBQWlCLEdBQWtCLE9BQWYvQywrQ0FBTUEsQ0FBQ2tELE9BQU8sRUFBQztvQ0FBSTs4Q0FDbkQsNEVBQUN0RCxzR0FBSUE7d0NBQUNpRCxXQUFVO3dDQUFVQyxPQUFPOzRDQUFFRyxPQUFPakQsK0NBQU1BLENBQUNrRCxPQUFPO3dDQUFDOzs7Ozs7Ozs7Ozs4Q0FHM0QsOERBQUNlO29DQUFHcEIsV0FBVTtvQ0FBNkJDLE9BQU87d0NBQUVHLE9BQU9qRCwrQ0FBTUEsQ0FBQ2tELE9BQU87b0NBQUM7OENBQUc7Ozs7Ozs4Q0FJN0UsOERBQUNFO29DQUFFUCxXQUFVO29DQUFlQyxPQUFPO3dDQUFFRyxPQUFPakQsK0NBQU1BLENBQUNxRCxTQUFTO29DQUFDOzt3Q0FBRztzREFDeEIsOERBQUNPO3NEQUFRdkQ7Ozs7Ozt3Q0FBMkI7Ozs7Ozs7Ozs7Ozs7c0NBTTlFLDhEQUFDdUM7NEJBQUlDLFdBQVU7OzhDQUNiLDhEQUFDbkQseURBQU1BO29DQUNMbUUsU0FBU2xCO29DQUNUbUIsU0FBUTtvQ0FDUmpCLFdBQVU7b0NBQ1ZDLE9BQU87d0NBQ0xXLGFBQWF6RCwrQ0FBTUEsQ0FBQzBELFFBQVE7d0NBQzVCVCxPQUFPakQsK0NBQU1BLENBQUNrRCxPQUFPO29DQUN2Qjs4Q0FDRDs7Ozs7OzhDQUlELDhEQUFDeEQseURBQU1BO29DQUNMbUUsU0FBUzFEO29DQUNUMEMsV0FBVTtvQ0FDVkMsT0FBTzt3Q0FDTEMsaUJBQWlCL0MsK0NBQU1BLENBQUNrRCxPQUFPO3dDQUMvQkQsT0FBT2pELCtDQUFNQSxDQUFDZ0QsVUFBVTtvQ0FDMUI7O3NEQUVBLDhEQUFDbkQsc0dBQVdBOzRDQUFDZ0QsV0FBVTs7Ozs7O3NEQUN2Qiw4REFBQ21CO3NEQUFLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVF0QjtHQXRPd0IvRDtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL0VtYWlsVmVyaWZpY2F0aW9uLnRzeD85YjA2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvaW5wdXRcIjtcclxuaW1wb3J0IHsgTWFpbCwgQ2hlY2tDaXJjbGUsIEFsZXJ0Q2lyY2xlLCBBcnJvd0xlZnQgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCI7XHJcbmltcG9ydCB7IHN1cGFiYXNlIH0gZnJvbSAnQC9saWIvc3VwYWJhc2UnO1xyXG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICdAL2xpYi9jb2xvcnMnO1xyXG5cclxuaW50ZXJmYWNlIEVtYWlsVmVyaWZpY2F0aW9uUHJvcHMge1xyXG4gIGVtYWlsOiBzdHJpbmc7XHJcbiAgb25WZXJpZmljYXRpb25Db21wbGV0ZTogKCkgPT4gdm9pZDtcclxuICBvbkJhY2s6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVtYWlsVmVyaWZpY2F0aW9uKHsgZW1haWwsIG9uVmVyaWZpY2F0aW9uQ29tcGxldGUsIG9uQmFjayB9OiBFbWFpbFZlcmlmaWNhdGlvblByb3BzKSB7XHJcbiAgY29uc3QgW3ZlcmlmaWNhdGlvbkVtYWlsLCBzZXRWZXJpZmljYXRpb25FbWFpbF0gPSB1c2VTdGF0ZShlbWFpbCk7XHJcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtzZW50LCBzZXRTZW50XSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFtzdWNjZXNzLCBzZXRTdWNjZXNzXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbcmF0ZUxpbWl0ZWQsIHNldFJhdGVMaW1pdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbY29vbGRvd25UaW1lLCBzZXRDb29sZG93blRpbWVdID0gdXNlU3RhdGUoMCk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZVNlbmRWZXJpZmljYXRpb24gPSBhc3luYyAoKSA9PiB7XHJcbiAgICBpZiAoIXZlcmlmaWNhdGlvbkVtYWlsIHx8ICEvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZlcmlmaWNhdGlvbkVtYWlsKSkge1xyXG4gICAgICBzZXRFcnJvcignQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgRS1NYWlsLUFkcmVzc2UgZWluLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJhdGVMaW1pdGVkKSB7XHJcbiAgICAgIHNldEVycm9yKGBSYXRlIExpbWl0IGFrdGl2LiBCaXR0ZSB3YXJ0ZW4gU2llICR7Y29vbGRvd25UaW1lfSBTZWt1bmRlbiBvZGVyIHZlcndlbmRlbiBTaWUgZGllIG1hbnVlbGxlIEJlc3TDpHRpZ3VuZy5gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExvYWRpbmcodHJ1ZSk7XHJcbiAgICBzZXRFcnJvcihudWxsKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zb2xlLmxvZygnPT09IEUtTUFJTCBWRVJJRklDQVRJT04gREVCVUcgPT09Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdTZW5kaW5nIHZlcmlmaWNhdGlvbiBlbWFpbCB0bzonLCB2ZXJpZmljYXRpb25FbWFpbCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdDdXJyZW50IG9yaWdpbjonLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcclxuICAgICAgY29uc29sZS5sb2coJ1JlZGlyZWN0IFVSTDonLCBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hdXRoL2NhbGxiYWNrYCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBVc2Ugc2lnbkluV2l0aE90cCB3aXRoIHByb3BlciBjb25maWd1cmF0aW9uIGZvciBlbWFpbCB2ZXJpZmljYXRpb25cclxuICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduSW5XaXRoT3RwKHtcclxuICAgICAgICBlbWFpbDogdmVyaWZpY2F0aW9uRW1haWwsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgc2hvdWxkQ3JlYXRlVXNlcjogdHJ1ZSxcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgLy8gQ3VzdG9tIG1ldGFkYXRhIGZvciBhcHBvaW50bWVudCBib29raW5nXHJcbiAgICAgICAgICAgIGFwcG9pbnRtZW50X2Jvb2tpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGVtYWlsOiB2ZXJpZmljYXRpb25FbWFpbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZygnU3VwYWJhc2UgZW1haWwgdmVyaWZpY2F0aW9uIHJlc3BvbnNlOicsIHsgZGF0YSwgZXJyb3IgfSk7XHJcblxyXG4gICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdTdXBhYmFzZSBlbWFpbCB2ZXJpZmljYXRpb24gZXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcclxuICAgICAgICAgIHNldFJhdGVMaW1pdGVkKHRydWUpO1xyXG4gICAgICAgICAgc2V0Q29vbGRvd25UaW1lKDYwKTsgLy8gNjAgc2Vjb25kcyBjb29sZG93blxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBTdGFydCBjb3VudGRvd25cclxuICAgICAgICAgIGNvbnN0IGNvdW50ZG93biA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgc2V0Q29vbGRvd25UaW1lKHByZXYgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChwcmV2IDw9IDEpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY291bnRkb3duKTtcclxuICAgICAgICAgICAgICAgIHNldFJhdGVMaW1pdGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcHJldiAtIDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHNldEVycm9yKGBFLU1haWwtUmF0ZS1MaW1pdCBlcnJlaWNodC4gQml0dGUgd2FydGVuIFNpZSA2MCBTZWt1bmRlbiBvZGVyIHZlcndlbmRlbiBTaWUgZGllIG1hbnVlbGxlIEJlc3TDpHRpZ3VuZy5gKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ2V4cGlyZWQnKSB8fCBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdpbnZhbGlkJykpIHtcclxuICAgICAgICAgIHNldEVycm9yKCdEZXIgRS1NYWlsLUxpbmsgaXN0IGFiZ2VsYXVmZW4gb2RlciB1bmfDvGx0aWcuIEJpdHRlIGZvcmRlcm4gU2llIGVpbmVuIG5ldWVuIExpbmsgYW4uJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNldEVycm9yKGBFLU1haWwtRmVobGVyOiAke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdWZXJpZmljYXRpb24gZW1haWwgc2VudCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICBzZXRTZW50KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBlcnJvciBzZW5kaW5nIHZlcmlmaWNhdGlvbiBlbWFpbDonLCBlcnIpO1xyXG4gICAgICBzZXRFcnJvcignRWluIEZlaGxlciBpc3QgYXVmZ2V0cmV0ZW4uIEJpdHRlIHZlcnN1Y2hlbiBTaWUgZXMgZXJuZXV0LicpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRW1haWxDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuICAgIHNldFZlcmlmaWNhdGlvbkVtYWlsKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgIGlmIChlcnJvcikgc2V0RXJyb3IobnVsbCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlUmVzZW5kID0gKCkgPT4ge1xyXG4gICAgc2V0U2VudChmYWxzZSk7XHJcbiAgICBzZXRFcnJvcihudWxsKTtcclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctbWQgbXgtYXV0b1wiPlxyXG4gICAgICA8ZGl2IFxyXG4gICAgICAgIGNsYXNzTmFtZT1cInAtNiBzbTpwLTggcm91bmRlZC0zeGwgc2hhZG93LWxnIGJhY2tkcm9wLWJsdXItc21cIlxyXG4gICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLmJhY2tncm91bmR9RjBgIH19XHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBtYi02XCI+XHJcbiAgICAgICAgICA8TWFpbCBjbGFzc05hbWU9XCJ3LTYgaC02XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19IC8+XHJcbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGRcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgIEUtTWFpbCBzZW5kZW5cclxuICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgeyFzZW50ID8gKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgIFVtIElocmVuIFRlcm1pbiB6dSBiZXN0w6R0aWdlbiwgc2VuZGVuIHdpciBJaG5lbiBlaW5lIEJlc3TDpHRpZ3VuZ3MtRS1NYWlsLiBcclxuICAgICAgICAgICAgICBLbGlja2VuIFNpZSBhdWYgZGVuIExpbmsgaW4gZGVyIEUtTWFpbCwgdW0gc2ljaCB6dSBhdXRoZW50aWZpemllcmVuLlxyXG4gICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTJcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICBFLU1haWwtQWRyZXNzZVxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPElucHV0IFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImVtYWlsXCIgXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dmVyaWZpY2F0aW9uRW1haWx9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRW1haWxDaGFuZ2V9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyLTIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMlwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJyNlZjQ0NDQnIDogY29sb3JzLnRlcnRpYXJ5LFxyXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLnByaW1hcnlcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImlocmVAZW1haWwuZGVcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAge2Vycm9yICYmIChcclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXNtIG10LTFcIj57ZXJyb3J9PC9wPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAge3JhdGVMaW1pdGVkICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBwLTIgcm91bmRlZC1sZyBib3JkZXItMiBib3JkZXItb3JhbmdlLTMwMCBiZy1vcmFuZ2UtNTBcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW9yYW5nZS03MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICDimqDvuI8gPHN0cm9uZz5SYXRlIExpbWl0IGFrdGl2Ojwvc3Ryb25nPiBCaXR0ZSB3YXJ0ZW4gU2llIHtjb29sZG93blRpbWV9IFNla3VuZGVuIG9kZXIgdmVyd2VuZGVuIFNpZSBkaWUgbWFudWVsbGUgQmVzdMOkdGlndW5nLlxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzcGFjZS14LTNcIj5cclxuICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25CYWNrfVxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHJvdW5kZWQteGxcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgXHJcbiAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnMudGVydGlhcnksXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMucHJpbWFyeVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8QXJyb3dMZWZ0IGNsYXNzTmFtZT1cInctNCBoLTQgbXItMlwiIC8+XHJcbiAgICAgICAgICAgICAgICBadXLDvGNrXHJcbiAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbmRWZXJpZmljYXRpb259XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17bG9hZGluZyB8fCByYXRlTGltaXRlZH1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtMlwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMucHJpbWFyeSxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtsb2FkaW5nID8gKFxyXG4gICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBoLTQgdy00IGJvcmRlci1iLTIgYm9yZGVyLXdoaXRlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RS1NYWlsIHdpcmQgZ2VzZW5kZXQuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgKSA6IHJhdGVMaW1pdGVkID8gKFxyXG4gICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlJhdGUgTGltaXQgKHtjb29sZG93blRpbWV9cyk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8TWFpbCBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FLU1haWwgc2VuZGVuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKSA6IChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMTYgaC0xNiByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXgtYXV0byBtYi00XCJcclxuICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLnByaW1hcnl9MjBgIH19PlxyXG4gICAgICAgICAgICAgICAgPE1haWwgY2xhc3NOYW1lPVwidy04IGgtOFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fSAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgbWItMlwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgIEUtTWFpbCBnZXNlbmRldCFcclxuICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gbWItNFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgV2lyIGhhYmVuIGVpbmUgQmVzdMOkdGlndW5ncy1FLU1haWwgYW4gPHN0cm9uZz57dmVyaWZpY2F0aW9uRW1haWx9PC9zdHJvbmc+IGdlc2VuZGV0LiBcclxuICAgICAgICAgICAgICAgIEJpdHRlIMO8YmVycHLDvGZlbiBTaWUgSWhyZW4gUG9zdGVpbmdhbmcgdW5kIGtsaWNrZW4gU2llIGF1ZiBkZW4gTGluayBpbiBkZXIgRS1NYWlsLlxyXG4gICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNwYWNlLXgtM1wiPlxyXG4gICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVSZXNlbmR9XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC14bFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGNvbG9ycy50ZXJ0aWFyeSxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEVybmV1dCBzZW5kZW5cclxuICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25WZXJpZmljYXRpb25Db21wbGV0ZX1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtMlwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMucHJpbWFyeSxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxDaGVja0NpcmNsZSBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPkUtTWFpbCBiZXN0w6R0aWd0PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufSAiXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsIkJ1dHRvbiIsIklucHV0IiwiTWFpbCIsIkNoZWNrQ2lyY2xlIiwiQXJyb3dMZWZ0Iiwic3VwYWJhc2UiLCJjb2xvcnMiLCJFbWFpbFZlcmlmaWNhdGlvbiIsImVtYWlsIiwib25WZXJpZmljYXRpb25Db21wbGV0ZSIsIm9uQmFjayIsInZlcmlmaWNhdGlvbkVtYWlsIiwic2V0VmVyaWZpY2F0aW9uRW1haWwiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsInNlbnQiLCJzZXRTZW50IiwiZXJyb3IiLCJzZXRFcnJvciIsInN1Y2Nlc3MiLCJzZXRTdWNjZXNzIiwicmF0ZUxpbWl0ZWQiLCJzZXRSYXRlTGltaXRlZCIsImNvb2xkb3duVGltZSIsInNldENvb2xkb3duVGltZSIsImhhbmRsZVNlbmRWZXJpZmljYXRpb24iLCJ0ZXN0IiwiY29uc29sZSIsImxvZyIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwiZGF0YSIsImF1dGgiLCJzaWduSW5XaXRoT3RwIiwib3B0aW9ucyIsInNob3VsZENyZWF0ZVVzZXIiLCJhcHBvaW50bWVudF9ib29raW5nIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiY291bnRkb3duIiwic2V0SW50ZXJ2YWwiLCJwcmV2IiwiY2xlYXJJbnRlcnZhbCIsImVyciIsImhhbmRsZUVtYWlsQ2hhbmdlIiwiZSIsInRhcmdldCIsInZhbHVlIiwiaGFuZGxlUmVzZW5kIiwiZGl2IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwiY29sb3IiLCJwcmltYXJ5IiwiaDMiLCJwIiwic2Vjb25kYXJ5IiwibGFiZWwiLCJ0eXBlIiwib25DaGFuZ2UiLCJib3JkZXJDb2xvciIsInRlcnRpYXJ5IiwicGxhY2Vob2xkZXIiLCJzdHJvbmciLCJvbkNsaWNrIiwidmFyaWFudCIsImRpc2FibGVkIiwic3BhbiIsImg0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/EmailVerification.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/GlassSurface.tsx": /*!*************************************!*\ !*** ./components/GlassSurface.tsx ***! \*************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _GlassSurface_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./GlassSurface.css */ \"(app-pages-browser)/./components/GlassSurface.css\");\n\nvar _s = $RefreshSig$();\n\n\nconst GlassSurface = (param)=>{\n let { children, width = 200, height = 80, borderRadius = 20, borderWidth = 0.07, brightness = 50, opacity = 0.93, blur = 11, displace = 0, backgroundOpacity = 0, saturation = 1, distortionScale = -180, redOffset = 0, greenOffset = 10, blueOffset = 20, xChannel = \"R\", yChannel = \"G\", mixBlendMode = \"difference\", className = \"\", style = {} } = param;\n _s();\n const uniqueId = (0,react__WEBPACK_IMPORTED_MODULE_1__.useId)().replace(/:/g, \"-\");\n const filterId = \"glass-filter-\".concat(uniqueId);\n const redGradId = \"red-grad-\".concat(uniqueId);\n const blueGradId = \"blue-grad-\".concat(uniqueId);\n const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const feImageRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const redChannelRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const greenChannelRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const blueChannelRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const gaussianBlurRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const generateDisplacementMap = ()=>{\n var _containerRef_current;\n const rect = (_containerRef_current = containerRef.current) === null || _containerRef_current === void 0 ? void 0 : _containerRef_current.getBoundingClientRect();\n const actualWidth = (rect === null || rect === void 0 ? void 0 : rect.width) || 400;\n const actualHeight = (rect === null || rect === void 0 ? void 0 : rect.height) || 200;\n const edgeSize = Math.min(actualWidth, actualHeight) * (borderWidth * 0.5);\n const svgContent = '\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n ');\n return \"data:image/svg+xml,\".concat(encodeURIComponent(svgContent));\n };\n const updateDisplacementMap = ()=>{\n if (feImageRef.current) {\n feImageRef.current.setAttribute(\"href\", generateDisplacementMap());\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n updateDisplacementMap();\n [\n {\n ref: redChannelRef,\n offset: redOffset\n },\n {\n ref: greenChannelRef,\n offset: greenOffset\n },\n {\n ref: blueChannelRef,\n offset: blueOffset\n }\n ].forEach((param)=>{\n let { ref, offset } = param;\n if (ref.current) {\n ref.current.setAttribute(\"scale\", (distortionScale + offset).toString());\n ref.current.setAttribute(\"xChannelSelector\", xChannel);\n ref.current.setAttribute(\"yChannelSelector\", yChannel);\n }\n });\n if (gaussianBlurRef.current) {\n gaussianBlurRef.current.setAttribute(\"stdDeviation\", displace.toString());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n width,\n height,\n borderRadius,\n borderWidth,\n brightness,\n opacity,\n blur,\n displace,\n distortionScale,\n redOffset,\n greenOffset,\n blueOffset,\n xChannel,\n yChannel,\n mixBlendMode\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!containerRef.current) return;\n const resizeObserver = new ResizeObserver(()=>{\n setTimeout(updateDisplacementMap, 0);\n });\n resizeObserver.observe(containerRef.current);\n return ()=>{\n resizeObserver.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n setTimeout(updateDisplacementMap, 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n width,\n height\n ]);\n const supportsSVGFilters = ()=>{\n const isWebkit = /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);\n const isFirefox = /Firefox/.test(navigator.userAgent);\n if (isWebkit || isFirefox) {\n return false;\n }\n const div = document.createElement(\"div\");\n div.style.backdropFilter = \"url(#\".concat(filterId, \")\");\n return div.style.backdropFilter !== \"\";\n };\n const containerStyle = {\n ...style,\n width: typeof width === \"number\" ? \"\".concat(width, \"px\") : width,\n height: typeof height === \"number\" ? \"\".concat(height, \"px\") : height,\n borderRadius: \"\".concat(borderRadius, \"px\"),\n \"--glass-frost\": backgroundOpacity,\n \"--glass-saturation\": saturation,\n \"--filter-id\": \"url(#\".concat(filterId, \")\")\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: containerRef,\n className: \"glass-surface \".concat(supportsSVGFilters() ? \"glass-surface--svg\" : \"glass-surface--fallback\", \" \").concat(className),\n style: containerStyle,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"glass-surface__filter\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"defs\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"filter\", {\n id: filterId,\n colorInterpolationFilters: \"sRGB\",\n x: \"0%\",\n y: \"0%\",\n width: \"100%\",\n height: \"100%\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feImage\", {\n ref: feImageRef,\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n preserveAspectRatio: \"none\",\n result: \"map\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feDisplacementMap\", {\n ref: redChannelRef,\n in: \"SourceGraphic\",\n in2: \"map\",\n id: \"redchannel\",\n result: \"dispRed\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 183,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feColorMatrix\", {\n in: \"dispRed\",\n type: \"matrix\",\n values: \"1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\",\n result: \"red\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feDisplacementMap\", {\n ref: greenChannelRef,\n in: \"SourceGraphic\",\n in2: \"map\",\n id: \"greenchannel\",\n result: \"dispGreen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 193,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feColorMatrix\", {\n in: \"dispGreen\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0\",\n result: \"green\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feDisplacementMap\", {\n ref: blueChannelRef,\n in: \"SourceGraphic\",\n in2: \"map\",\n id: \"bluechannel\",\n result: \"dispBlue\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 209,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feColorMatrix\", {\n in: \"dispBlue\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\",\n result: \"blue\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feBlend\", {\n in: \"red\",\n in2: \"green\",\n mode: \"screen\",\n result: \"rg\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 219,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feBlend\", {\n in: \"rg\",\n in2: \"blue\",\n mode: \"screen\",\n result: \"output\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 220,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"feGaussianBlur\", {\n ref: gaussianBlurRef,\n in: \"output\",\n stdDeviation: \"0.7\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 181,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 180,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 179,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass-surface__content\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 225,\n columnNumber: 7\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\GlassSurface.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, undefined);\n};\n_s(GlassSurface, \"Nq0WZIQEVMhyCGgrFKUOyjHtQSQ=\", false, function() {\n return [\n react__WEBPACK_IMPORTED_MODULE_1__.useId\n ];\n});\n_c = GlassSurface;\n/* harmony default export */ __webpack_exports__[\"default\"] = (GlassSurface);\nvar _c;\n$RefreshReg$(_c, \"GlassSurface\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvR2xhc3NTdXJmYWNlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTJFO0FBQy9DO0FBeUI1QixNQUFNRyxlQUE0QztRQUFDLEVBQ2pEQyxRQUFRLEVBQ1JDLFFBQVEsR0FBRyxFQUNYQyxTQUFTLEVBQUUsRUFDWEMsZUFBZSxFQUFFLEVBQ2pCQyxjQUFjLElBQUksRUFDbEJDLGFBQWEsRUFBRSxFQUNmQyxVQUFVLElBQUksRUFDZEMsT0FBTyxFQUFFLEVBQ1RDLFdBQVcsQ0FBQyxFQUNaQyxvQkFBb0IsQ0FBQyxFQUNyQkMsYUFBYSxDQUFDLEVBQ2RDLGtCQUFrQixDQUFDLEdBQUcsRUFDdEJDLFlBQVksQ0FBQyxFQUNiQyxjQUFjLEVBQUUsRUFDaEJDLGFBQWEsRUFBRSxFQUNmQyxXQUFXLEdBQUcsRUFDZEMsV0FBVyxHQUFHLEVBQ2RDLGVBQWUsWUFBWSxFQUMzQkMsWUFBWSxFQUFFLEVBQ2RDLFFBQVEsQ0FBQyxDQUFDLEVBQ1g7O0lBQ0MsTUFBTUMsV0FBV3RCLDRDQUFLQSxHQUFHdUIsT0FBTyxDQUFDLE1BQU07SUFDdkMsTUFBTUMsV0FBVyxnQkFBeUIsT0FBVEY7SUFDakMsTUFBTUcsWUFBWSxZQUFxQixPQUFUSDtJQUM5QixNQUFNSSxhQUFhLGFBQXNCLE9BQVRKO0lBQ2hDLE1BQU1LLGVBQWU1Qiw2Q0FBTUEsQ0FBaUI7SUFDNUMsTUFBTTZCLGFBQWE3Qiw2Q0FBTUEsQ0FBb0I7SUFDN0MsTUFBTThCLGdCQUFnQjlCLDZDQUFNQSxDQUE4QjtJQUMxRCxNQUFNK0Isa0JBQWtCL0IsNkNBQU1BLENBQThCO0lBQzVELE1BQU1nQyxpQkFBaUJoQyw2Q0FBTUEsQ0FBOEI7SUFDM0QsTUFBTWlDLGtCQUFrQmpDLDZDQUFNQSxDQUEyQjtJQUV6RCxNQUFNa0MsMEJBQTBCO1lBQ2pCTjtRQUFiLE1BQU1PLFFBQU9QLHdCQUFBQSxhQUFhUSxPQUFPLGNBQXBCUiw0Q0FBQUEsc0JBQXNCUyxxQkFBcUI7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LFFBQU87Ozs7OzswQ0FDM0YsOERBQUNJO2dDQUNDRixJQUFHO2dDQUNIRyxNQUFLO2dDQUNMQyxRQUFPO2dDQUlQTixRQUFPOzs7Ozs7MENBRVQsOERBQUNDO2dDQUNDL0IsS0FBS2hCO2dDQUNMZ0QsSUFBRztnQ0FDSEMsS0FBSTtnQ0FDSlQsSUFBRztnQ0FDSE0sUUFBTzs7Ozs7OzBDQUVULDhEQUFDSTtnQ0FDQ0YsSUFBRztnQ0FDSEcsTUFBSztnQ0FDTEMsUUFBTztnQ0FJUE4sUUFBTzs7Ozs7OzBDQUVULDhEQUFDQztnQ0FBa0IvQixLQUFLZjtnQ0FBZ0IrQyxJQUFHO2dDQUFnQkMsS0FBSTtnQ0FBTVQsSUFBRztnQ0FBY00sUUFBTzs7Ozs7OzBDQUM3Riw4REFBQ0k7Z0NBQ0NGLElBQUc7Z0NBQ0hHLE1BQUs7Z0NBQ0xDLFFBQU87Z0NBSVBOLFFBQU87Ozs7OzswQ0FFVCw4REFBQ087Z0NBQVFMLElBQUc7Z0NBQU1DLEtBQUk7Z0NBQVFLLE1BQUs7Z0NBQVNSLFFBQU87Ozs7OzswQ0FDbkQsOERBQUNPO2dDQUFRTCxJQUFHO2dDQUFLQyxLQUFJO2dDQUFPSyxNQUFLO2dDQUFTUixRQUFPOzs7Ozs7MENBQ2pELDhEQUFDUztnQ0FBZXZDLEtBQUtkO2dDQUFpQjhDLElBQUc7Z0NBQVNRLGNBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBSXJFLDhEQUFDekI7Z0JBQUl6QyxXQUFVOzBCQUEwQmxCOzs7Ozs7Ozs7Ozs7QUFHL0M7R0F6TU1EOztRQXNCYUQsd0NBQUtBOzs7S0F0QmxCQztBQTJNTiwrREFBZUEsWUFBWUEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL0dsYXNzU3VyZmFjZS50c3g/MDM0NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlSWQsIFJlYWN0Tm9kZSwgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0ICcuL0dsYXNzU3VyZmFjZS5jc3MnO1xyXG5cclxuaW50ZXJmYWNlIEdsYXNzU3VyZmFjZVByb3BzIHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gIGhlaWdodD86IG51bWJlciB8IHN0cmluZztcclxuICBib3JkZXJSYWRpdXM/OiBudW1iZXI7XHJcbiAgYm9yZGVyV2lkdGg/OiBudW1iZXI7XHJcbiAgYnJpZ2h0bmVzcz86IG51bWJlcjtcclxuICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gIGJsdXI/OiBudW1iZXI7XHJcbiAgZGlzcGxhY2U/OiBudW1iZXI7XHJcbiAgYmFja2dyb3VuZE9wYWNpdHk/OiBudW1iZXI7XHJcbiAgc2F0dXJhdGlvbj86IG51bWJlcjtcclxuICBkaXN0b3J0aW9uU2NhbGU/OiBudW1iZXI7XHJcbiAgcmVkT2Zmc2V0PzogbnVtYmVyO1xyXG4gIGdyZWVuT2Zmc2V0PzogbnVtYmVyO1xyXG4gIGJsdWVPZmZzZXQ/OiBudW1iZXI7XHJcbiAgeENoYW5uZWw/OiBzdHJpbmc7XHJcbiAgeUNoYW5uZWw/OiBzdHJpbmc7XHJcbiAgbWl4QmxlbmRNb2RlPzogc3RyaW5nO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBzdHlsZT86IENTU1Byb3BlcnRpZXM7XHJcbn1cclxuXHJcbmNvbnN0IEdsYXNzU3VyZmFjZTogUmVhY3QuRkM8R2xhc3NTdXJmYWNlUHJvcHM+ID0gKHtcclxuICBjaGlsZHJlbixcclxuICB3aWR0aCA9IDIwMCxcclxuICBoZWlnaHQgPSA4MCxcclxuICBib3JkZXJSYWRpdXMgPSAyMCxcclxuICBib3JkZXJXaWR0aCA9IDAuMDcsXHJcbiAgYnJpZ2h0bmVzcyA9IDUwLFxyXG4gIG9wYWNpdHkgPSAwLjkzLFxyXG4gIGJsdXIgPSAxMSxcclxuICBkaXNwbGFjZSA9IDAsXHJcbiAgYmFja2dyb3VuZE9wYWNpdHkgPSAwLFxyXG4gIHNhdHVyYXRpb24gPSAxLFxyXG4gIGRpc3RvcnRpb25TY2FsZSA9IC0xODAsXHJcbiAgcmVkT2Zmc2V0ID0gMCxcclxuICBncmVlbk9mZnNldCA9IDEwLFxyXG4gIGJsdWVPZmZzZXQgPSAyMCxcclxuICB4Q2hhbm5lbCA9ICdSJyxcclxuICB5Q2hhbm5lbCA9ICdHJyxcclxuICBtaXhCbGVuZE1vZGUgPSAnZGlmZmVyZW5jZScsXHJcbiAgY2xhc3NOYW1lID0gJycsXHJcbiAgc3R5bGUgPSB7fVxyXG59KSA9PiB7XHJcbiAgY29uc3QgdW5pcXVlSWQgPSB1c2VJZCgpLnJlcGxhY2UoLzovZywgJy0nKTtcclxuICBjb25zdCBmaWx0ZXJJZCA9IGBnbGFzcy1maWx0ZXItJHt1bmlxdWVJZH1gO1xyXG4gIGNvbnN0IHJlZEdyYWRJZCA9IGByZWQtZ3JhZC0ke3VuaXF1ZUlkfWA7XHJcbiAgY29uc3QgYmx1ZUdyYWRJZCA9IGBibHVlLWdyYWQtJHt1bmlxdWVJZH1gO1xyXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XHJcbiAgY29uc3QgZmVJbWFnZVJlZiA9IHVzZVJlZjxTVkdGRUltYWdlRWxlbWVudD4obnVsbCk7XHJcbiAgY29uc3QgcmVkQ2hhbm5lbFJlZiA9IHVzZVJlZjxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ+KG51bGwpO1xyXG4gIGNvbnN0IGdyZWVuQ2hhbm5lbFJlZiA9IHVzZVJlZjxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ+KG51bGwpO1xyXG4gIGNvbnN0IGJsdWVDaGFubmVsUmVmID0gdXNlUmVmPFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudD4obnVsbCk7XHJcbiAgY29uc3QgZ2F1c3NpYW5CbHVyUmVmID0gdXNlUmVmPFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD4obnVsbCk7XHJcblxyXG4gIGNvbnN0IGdlbmVyYXRlRGlzcGxhY2VtZW50TWFwID0gKCkgPT4ge1xyXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lclJlZi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGFjdHVhbFdpZHRoID0gcmVjdD8ud2lkdGggfHwgNDAwO1xyXG4gICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0gcmVjdD8uaGVpZ2h0IHx8IDIwMDtcclxuICAgIGNvbnN0IGVkZ2VTaXplID0gTWF0aC5taW4oYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodCkgKiAoYm9yZGVyV2lkdGggKiAwLjUpO1xyXG5cclxuICAgIGNvbnN0IHN2Z0NvbnRlbnQgPSBgXHJcbiAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAke2FjdHVhbFdpZHRofSAke2FjdHVhbEhlaWdodH1cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCIke3JlZEdyYWRJZH1cIiB4MT1cIjEwMCVcIiB5MT1cIjAlXCIgeDI9XCIwJVwiIHkyPVwiMCVcIj5cclxuICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMCVcIiBzdG9wLWNvbG9yPVwiIzAwMDBcIi8+XHJcbiAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwicmVkXCIvPlxyXG4gICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cIiR7Ymx1ZUdyYWRJZH1cIiB4MT1cIjAlXCIgeTE9XCIwJVwiIHgyPVwiMCVcIiB5Mj1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMCVcIiBzdG9wLWNvbG9yPVwiIzAwMDBcIi8+XHJcbiAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwiYmx1ZVwiLz5cclxuICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgIDxyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIiR7YWN0dWFsV2lkdGh9XCIgaGVpZ2h0PVwiJHthY3R1YWxIZWlnaHR9XCIgZmlsbD1cImJsYWNrXCI+PC9yZWN0PlxyXG4gICAgICAgIDxyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIiR7YWN0dWFsV2lkdGh9XCIgaGVpZ2h0PVwiJHthY3R1YWxIZWlnaHR9XCIgcng9XCIke2JvcmRlclJhZGl1c31cIiBmaWxsPVwidXJsKCMke3JlZEdyYWRJZH0pXCIgLz5cclxuICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIke2FjdHVhbFdpZHRofVwiIGhlaWdodD1cIiR7YWN0dWFsSGVpZ2h0fVwiIHJ4PVwiJHtib3JkZXJSYWRpdXN9XCIgZmlsbD1cInVybCgjJHtibHVlR3JhZElkfSlcIiBzdHlsZT1cIm1peC1ibGVuZC1tb2RlOiAke21peEJsZW5kTW9kZX1cIiAvPlxyXG4gICAgICAgIDxyZWN0IHg9XCIke2VkZ2VTaXplfVwiIHk9XCIke2VkZ2VTaXplfVwiIHdpZHRoPVwiJHthY3R1YWxXaWR0aCAtIGVkZ2VTaXplICogMn1cIiBoZWlnaHQ9XCIke2FjdHVhbEhlaWdodCAtIGVkZ2VTaXplICogMn1cIiByeD1cIiR7Ym9yZGVyUmFkaXVzfVwiIGZpbGw9XCJoc2woMCAwJSAke2JyaWdodG5lc3N9JSAvICR7b3BhY2l0eX0pXCIgc3R5bGU9XCJmaWx0ZXI6Ymx1cigke2JsdXJ9cHgpXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICBgO1xyXG4gICAgcmV0dXJuIGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnQ29udGVudCl9YDtcclxuICB9O1xyXG5cclxuICBjb25zdCB1cGRhdGVEaXNwbGFjZW1lbnRNYXAgPSAoKSA9PiB7XHJcbiAgICBpZiAoZmVJbWFnZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgIGZlSW1hZ2VSZWYuY3VycmVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBnZW5lcmF0ZURpc3BsYWNlbWVudE1hcCgpKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgdXBkYXRlRGlzcGxhY2VtZW50TWFwKCk7XHJcblxyXG4gICAgW1xyXG4gICAgICB7IHJlZjogcmVkQ2hhbm5lbFJlZiwgb2Zmc2V0OiByZWRPZmZzZXQgfSxcclxuICAgICAgeyByZWY6IGdyZWVuQ2hhbm5lbFJlZiwgb2Zmc2V0OiBncmVlbk9mZnNldCB9LFxyXG4gICAgICB7IHJlZjogYmx1ZUNoYW5uZWxSZWYsIG9mZnNldDogYmx1ZU9mZnNldCB9XHJcbiAgICBdLmZvckVhY2goKHsgcmVmLCBvZmZzZXQgfSkgPT4ge1xyXG4gICAgICBpZiAocmVmLmN1cnJlbnQpIHtcclxuICAgICAgICByZWYuY3VycmVudC5zZXRBdHRyaWJ1dGUoJ3NjYWxlJywgKGRpc3RvcnRpb25TY2FsZSArIG9mZnNldCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgcmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCd4Q2hhbm5lbFNlbGVjdG9yJywgeENoYW5uZWwpO1xyXG4gICAgICAgIHJlZi5jdXJyZW50LnNldEF0dHJpYnV0ZSgneUNoYW5uZWxTZWxlY3RvcicsIHlDaGFubmVsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdhdXNzaWFuQmx1clJlZi5jdXJyZW50KSB7XHJcbiAgICAgIGdhdXNzaWFuQmx1clJlZi5jdXJyZW50LnNldEF0dHJpYnV0ZSgnc3RkRGV2aWF0aW9uJywgZGlzcGxhY2UudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXHJcbiAgfSwgW1xyXG4gICAgd2lkdGgsXHJcbiAgICBoZWlnaHQsXHJcbiAgICBib3JkZXJSYWRpdXMsXHJcbiAgICBib3JkZXJXaWR0aCxcclxuICAgIGJyaWdodG5lc3MsXHJcbiAgICBvcGFjaXR5LFxyXG4gICAgYmx1cixcclxuICAgIGRpc3BsYWNlLFxyXG4gICAgZGlzdG9ydGlvblNjYWxlLFxyXG4gICAgcmVkT2Zmc2V0LFxyXG4gICAgZ3JlZW5PZmZzZXQsXHJcbiAgICBibHVlT2Zmc2V0LFxyXG4gICAgeENoYW5uZWwsXHJcbiAgICB5Q2hhbm5lbCxcclxuICAgIG1peEJsZW5kTW9kZVxyXG4gIF0pO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKCFjb250YWluZXJSZWYuY3VycmVudCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCh1cGRhdGVEaXNwbGFjZW1lbnRNYXAsIDApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXJSZWYuY3VycmVudCk7XHJcblxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfTtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcclxuICB9LCBbXSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBzZXRUaW1lb3V0KHVwZGF0ZURpc3BsYWNlbWVudE1hcCwgMCk7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXHJcbiAgfSwgW3dpZHRoLCBoZWlnaHRdKTtcclxuXHJcbiAgY29uc3Qgc3VwcG9ydHNTVkdGaWx0ZXJzID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaXNXZWJraXQgPSAvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICEvQ2hyb21lLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gICAgY29uc3QgaXNGaXJlZm94ID0gL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblxyXG4gICAgaWYgKGlzV2Via2l0IHx8IGlzRmlyZWZveCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUuYmFja2Ryb3BGaWx0ZXIgPSBgdXJsKCMke2ZpbHRlcklkfSlgO1xyXG4gICAgcmV0dXJuIGRpdi5zdHlsZS5iYWNrZHJvcEZpbHRlciAhPT0gJyc7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XHJcbiAgICAuLi5zdHlsZSxcclxuICAgIHdpZHRoOiB0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInID8gYCR7d2lkdGh9cHhgIDogd2lkdGgsXHJcbiAgICBoZWlnaHQ6IHR5cGVvZiBoZWlnaHQgPT09ICdudW1iZXInID8gYCR7aGVpZ2h0fXB4YCA6IGhlaWdodCxcclxuICAgIGJvcmRlclJhZGl1czogYCR7Ym9yZGVyUmFkaXVzfXB4YCxcclxuICAgICctLWdsYXNzLWZyb3N0JzogYmFja2dyb3VuZE9wYWNpdHksXHJcbiAgICAnLS1nbGFzcy1zYXR1cmF0aW9uJzogc2F0dXJhdGlvbixcclxuICAgICctLWZpbHRlci1pZCc6IGB1cmwoIyR7ZmlsdGVySWR9KWBcclxuICB9IGFzIENTU1Byb3BlcnRpZXM7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2BnbGFzcy1zdXJmYWNlICR7c3VwcG9ydHNTVkdGaWx0ZXJzKCkgPyAnZ2xhc3Mtc3VyZmFjZS0tc3ZnJyA6ICdnbGFzcy1zdXJmYWNlLS1mYWxsYmFjayd9ICR7Y2xhc3NOYW1lfWB9XHJcbiAgICAgIHN0eWxlPXtjb250YWluZXJTdHlsZX1cclxuICAgID5cclxuICAgICAgPHN2ZyBjbGFzc05hbWU9XCJnbGFzcy1zdXJmYWNlX19maWx0ZXJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICA8ZmlsdGVyIGlkPXtmaWx0ZXJJZH0gY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycz1cInNSR0JcIiB4PVwiMCVcIiB5PVwiMCVcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDxmZUltYWdlIHJlZj17ZmVJbWFnZVJlZn0geD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiIHJlc3VsdD1cIm1hcFwiIC8+XHJcbiAgICAgICAgICAgIDxmZURpc3BsYWNlbWVudE1hcCByZWY9e3JlZENoYW5uZWxSZWZ9IGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cIm1hcFwiIGlkPVwicmVkY2hhbm5lbFwiIHJlc3VsdD1cImRpc3BSZWRcIiAvPlxyXG4gICAgICAgICAgICA8ZmVDb2xvck1hdHJpeFxyXG4gICAgICAgICAgICAgIGluPVwiZGlzcFJlZFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgdmFsdWVzPVwiMSAwIDAgMCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAwIDAgMCAwIDBcclxuICAgICAgICAgICAgICAgICAgICAgIDAgMCAwIDAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgMCAwIDAgMSAwXCJcclxuICAgICAgICAgICAgICByZXN1bHQ9XCJyZWRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZmVEaXNwbGFjZW1lbnRNYXBcclxuICAgICAgICAgICAgICByZWY9e2dyZWVuQ2hhbm5lbFJlZn1cclxuICAgICAgICAgICAgICBpbj1cIlNvdXJjZUdyYXBoaWNcIlxyXG4gICAgICAgICAgICAgIGluMj1cIm1hcFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJncmVlbmNoYW5uZWxcIlxyXG4gICAgICAgICAgICAgIHJlc3VsdD1cImRpc3BHcmVlblwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4XHJcbiAgICAgICAgICAgICAgaW49XCJkaXNwR3JlZW5cIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgMCAxIDAgMCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAwIDAgMCAwIDBcclxuICAgICAgICAgICAgICAgICAgICAgIDAgMCAwIDEgMFwiXHJcbiAgICAgICAgICAgICAgcmVzdWx0PVwiZ3JlZW5cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZmVEaXNwbGFjZW1lbnRNYXAgcmVmPXtibHVlQ2hhbm5lbFJlZn0gaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwibWFwXCIgaWQ9XCJibHVlY2hhbm5lbFwiIHJlc3VsdD1cImRpc3BCbHVlXCIgLz5cclxuICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXhcclxuICAgICAgICAgICAgICBpbj1cImRpc3BCbHVlXCJcclxuICAgICAgICAgICAgICB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDBcclxuICAgICAgICAgICAgICAgICAgICAgIDAgMCAwIDAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgMCAwIDEgMCAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAwIDAgMCAxIDBcIlxyXG4gICAgICAgICAgICAgIHJlc3VsdD1cImJsdWVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZmVCbGVuZCBpbj1cInJlZFwiIGluMj1cImdyZWVuXCIgbW9kZT1cInNjcmVlblwiIHJlc3VsdD1cInJnXCIgLz5cclxuICAgICAgICAgICAgPGZlQmxlbmQgaW49XCJyZ1wiIGluMj1cImJsdWVcIiBtb2RlPVwic2NyZWVuXCIgcmVzdWx0PVwib3V0cHV0XCIgLz5cclxuICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHJlZj17Z2F1c3NpYW5CbHVyUmVmfSBpbj1cIm91dHB1dFwiIHN0ZERldmlhdGlvbj1cIjAuN1wiIC8+XHJcbiAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICA8L2RlZnM+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdsYXNzLXN1cmZhY2VfX2NvbnRlbnRcIj57Y2hpbGRyZW59PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2xhc3NTdXJmYWNlO1xyXG5cclxuIl0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUlkIiwiR2xhc3NTdXJmYWNlIiwiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYnJpZ2h0bmVzcyIsIm9wYWNpdHkiLCJibHVyIiwiZGlzcGxhY2UiLCJiYWNrZ3JvdW5kT3BhY2l0eSIsInNhdHVyYXRpb24iLCJkaXN0b3J0aW9uU2NhbGUiLCJyZWRPZmZzZXQiLCJncmVlbk9mZnNldCIsImJsdWVPZmZzZXQiLCJ4Q2hhbm5lbCIsInlDaGFubmVsIiwibWl4QmxlbmRNb2RlIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJ1bmlxdWVJZCIsInJlcGxhY2UiLCJmaWx0ZXJJZCIsInJlZEdyYWRJZCIsImJsdWVHcmFkSWQiLCJjb250YWluZXJSZWYiLCJmZUltYWdlUmVmIiwicmVkQ2hhbm5lbFJlZiIsImdyZWVuQ2hhbm5lbFJlZiIsImJsdWVDaGFubmVsUmVmIiwiZ2F1c3NpYW5CbHVyUmVmIiwiZ2VuZXJhdGVEaXNwbGFjZW1lbnRNYXAiLCJyZWN0IiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImFjdHVhbFdpZHRoIiwiYWN0dWFsSGVpZ2h0IiwiZWRnZVNpemUiLCJNYXRoIiwibWluIiwic3ZnQ29udGVudCIsImVuY29kZVVSSUNvbXBvbmVudCIsInVwZGF0ZURpc3BsYWNlbWVudE1hcCIsInNldEF0dHJpYnV0ZSIsInJlZiIsIm9mZnNldCIsImZvckVhY2giLCJ0b1N0cmluZyIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJzZXRUaW1lb3V0Iiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJzdXBwb3J0c1NWR0ZpbHRlcnMiLCJpc1dlYmtpdCIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpc0ZpcmVmb3giLCJkaXYiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJiYWNrZHJvcEZpbHRlciIsImNvbnRhaW5lclN0eWxlIiwic3ZnIiwieG1sbnMiLCJkZWZzIiwiZmlsdGVyIiwiaWQiLCJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzIiwieCIsInkiLCJmZUltYWdlIiwicHJlc2VydmVBc3BlY3RSYXRpbyIsInJlc3VsdCIsImZlRGlzcGxhY2VtZW50TWFwIiwiaW4iLCJpbjIiLCJmZUNvbG9yTWF0cml4IiwidHlwZSIsInZhbHVlcyIsImZlQmxlbmQiLCJtb2RlIiwiZmVHYXVzc2lhbkJsdXIiLCJzdGREZXZpYXRpb24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/GlassSurface.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/LogoLoop.tsx": /*!*********************************!*\ !*** ./components/LogoLoop.tsx ***! \*********************************/ /***/ (function(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 */ LogoLoop: function() { return /* binding */ LogoLoop; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _LogoLoop_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./LogoLoop.css */ \"(app-pages-browser)/./components/LogoLoop.css\");\n/* __next_internal_client_entry_do_not_use__ LogoLoop,default auto */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$();\n\n\nconst ANIMATION_CONFIG = {\n SMOOTH_TAU: 0.25,\n MIN_COPIES: 2,\n COPY_HEADROOM: 2\n};\nconst toCssLength = (value)=>typeof value === \"number\" ? \"\".concat(value, \"px\") : value !== null && value !== void 0 ? value : undefined;\nconst useResizeObserver = (callback, elements, dependencies)=>{\n _s();\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!window.ResizeObserver) {\n const handleResize = ()=>callback();\n window.addEventListener(\"resize\", handleResize);\n callback();\n return ()=>window.removeEventListener(\"resize\", handleResize);\n }\n const observers = elements.map((ref)=>{\n if (!ref.current) return null;\n const observer = new ResizeObserver(callback);\n observer.observe(ref.current);\n return observer;\n });\n callback();\n return ()=>{\n observers.forEach((observer)=>observer === null || observer === void 0 ? void 0 : observer.disconnect());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n};\n_s(useResizeObserver, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\nconst useImageLoader = (seqRef, onLoad, dependencies)=>{\n _s1();\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n var _seqRef_current;\n var _seqRef_current_querySelectorAll;\n const images = (_seqRef_current_querySelectorAll = (_seqRef_current = seqRef.current) === null || _seqRef_current === void 0 ? void 0 : _seqRef_current.querySelectorAll(\"img\")) !== null && _seqRef_current_querySelectorAll !== void 0 ? _seqRef_current_querySelectorAll : [];\n if (images.length === 0) {\n onLoad();\n return;\n }\n let remainingImages = images.length;\n const handleImageLoad = ()=>{\n remainingImages -= 1;\n if (remainingImages === 0) {\n onLoad();\n }\n };\n images.forEach((img)=>{\n const htmlImg = img;\n if (htmlImg.complete) {\n handleImageLoad();\n } else {\n htmlImg.addEventListener(\"load\", handleImageLoad, {\n once: true\n });\n htmlImg.addEventListener(\"error\", handleImageLoad, {\n once: true\n });\n }\n });\n return ()=>{\n images.forEach((img)=>{\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageLoad);\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n};\n_s1(useImageLoader, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\nconst useAnimationLoop = (trackRef, targetVelocity, seqWidth, isHovered, pauseOnHover)=>{\n _s2();\n const rafRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const lastTimestampRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const offsetRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(0);\n const velocityRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(0);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const track = trackRef.current;\n if (!track) return;\n if (seqWidth > 0) {\n offsetRef.current = (offsetRef.current % seqWidth + seqWidth) % seqWidth;\n track.style.transform = \"translate3d(\".concat(-offsetRef.current, \"px, 0, 0)\");\n }\n const animate = (timestamp)=>{\n if (lastTimestampRef.current === null) {\n lastTimestampRef.current = timestamp;\n }\n const deltaTime = Math.max(0, timestamp - lastTimestampRef.current) / 1000;\n lastTimestampRef.current = timestamp;\n const target = pauseOnHover && isHovered ? 0 : targetVelocity;\n const easingFactor = 1 - Math.exp(-deltaTime / ANIMATION_CONFIG.SMOOTH_TAU);\n velocityRef.current += (target - velocityRef.current) * easingFactor;\n if (seqWidth > 0) {\n let nextOffset = offsetRef.current + velocityRef.current * deltaTime;\n nextOffset = (nextOffset % seqWidth + seqWidth) % seqWidth;\n offsetRef.current = nextOffset;\n const translateX = -offsetRef.current;\n track.style.transform = \"translate3d(\".concat(translateX, \"px, 0, 0)\");\n }\n rafRef.current = requestAnimationFrame(animate);\n };\n rafRef.current = requestAnimationFrame(animate);\n return ()=>{\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n }\n lastTimestampRef.current = null;\n };\n }, [\n targetVelocity,\n seqWidth,\n isHovered,\n pauseOnHover,\n trackRef\n ]);\n};\n_s2(useAnimationLoop, \"CHkB9QIrZTEfgjfB6nwY5WHuHxk=\");\nconst LogoLoop = /*#__PURE__*/ _s3((0,react__WEBPACK_IMPORTED_MODULE_1__.memo)(_c = _s3((param)=>{\n let { logos, speed = 120, direction = \"left\", width = \"100%\", logoHeight = 28, gap = 32, pauseOnHover = true, fadeOut = false, fadeOutColor, scaleOnHover = false, ariaLabel = \"Partner logos\", className, style } = param;\n _s3();\n const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const trackRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const seqRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const [seqWidth, setSeqWidth] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [copyCount, setCopyCount] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(ANIMATION_CONFIG.MIN_COPIES);\n const [isHovered, setIsHovered] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const targetVelocity = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const magnitude = Math.abs(speed);\n const directionMultiplier = direction === \"left\" ? 1 : -1;\n const speedMultiplier = speed < 0 ? -1 : 1;\n return magnitude * directionMultiplier * speedMultiplier;\n }, [\n speed,\n direction\n ]);\n const updateDimensions = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{\n var _containerRef_current, _seqRef_current_getBoundingClientRect, _seqRef_current_getBoundingClientRect1, _seqRef_current;\n var _containerRef_current_clientWidth;\n const containerWidth = (_containerRef_current_clientWidth = (_containerRef_current = containerRef.current) === null || _containerRef_current === void 0 ? void 0 : _containerRef_current.clientWidth) !== null && _containerRef_current_clientWidth !== void 0 ? _containerRef_current_clientWidth : 0;\n var _seqRef_current_getBoundingClientRect_width;\n const sequenceWidth = (_seqRef_current_getBoundingClientRect_width = (_seqRef_current = seqRef.current) === null || _seqRef_current === void 0 ? void 0 : (_seqRef_current_getBoundingClientRect1 = _seqRef_current.getBoundingClientRect) === null || _seqRef_current_getBoundingClientRect1 === void 0 ? void 0 : (_seqRef_current_getBoundingClientRect = _seqRef_current_getBoundingClientRect1.call(_seqRef_current)) === null || _seqRef_current_getBoundingClientRect === void 0 ? void 0 : _seqRef_current_getBoundingClientRect.width) !== null && _seqRef_current_getBoundingClientRect_width !== void 0 ? _seqRef_current_getBoundingClientRect_width : 0;\n if (sequenceWidth > 0) {\n setSeqWidth(Math.ceil(sequenceWidth));\n const copiesNeeded = Math.ceil(containerWidth / sequenceWidth) + ANIMATION_CONFIG.COPY_HEADROOM;\n setCopyCount(Math.max(ANIMATION_CONFIG.MIN_COPIES, copiesNeeded));\n }\n }, []);\n useResizeObserver(updateDimensions, [\n containerRef,\n seqRef\n ], [\n logos,\n gap,\n logoHeight\n ]);\n useImageLoader(seqRef, updateDimensions, [\n logos,\n gap,\n logoHeight\n ]);\n useAnimationLoop(trackRef, targetVelocity, seqWidth, isHovered, pauseOnHover);\n const cssVariables = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>({\n \"--logoloop-gap\": \"\".concat(gap, \"px\"),\n \"--logoloop-logoHeight\": \"\".concat(logoHeight, \"px\"),\n ...fadeOutColor && {\n \"--logoloop-fadeColor\": fadeOutColor\n }\n }), [\n gap,\n logoHeight,\n fadeOutColor\n ]);\n const rootClassName = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>[\n \"logoloop\",\n fadeOut && \"logoloop--fade\",\n scaleOnHover && \"logoloop--scale-hover\",\n className\n ].filter(Boolean).join(\" \"), [\n fadeOut,\n scaleOnHover,\n className\n ]);\n const handleMouseEnter = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{\n if (pauseOnHover) setIsHovered(true);\n }, [\n pauseOnHover\n ]);\n const handleMouseLeave = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{\n if (pauseOnHover) setIsHovered(false);\n }, [\n pauseOnHover\n ]);\n const renderLogoItem = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((item, key)=>{\n const isNodeItem = \"node\" in item;\n var _item_alt;\n const content = isNodeItem ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"logoloop__node\",\n \"aria-hidden\": !!item.href && !item.ariaLabel,\n children: item.node\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\LogoLoop.tsx\",\n lineNumber: 240,\n columnNumber: 7\n }, undefined) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: item.src,\n srcSet: item.srcSet,\n sizes: item.sizes,\n width: item.width,\n height: item.height,\n alt: (_item_alt = item.alt) !== null && _item_alt !== void 0 ? _item_alt : \"\",\n title: item.title,\n loading: \"lazy\",\n decoding: \"async\",\n draggable: false\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\LogoLoop.tsx\",\n lineNumber: 244,\n columnNumber: 7\n }, undefined);\n var _item_ariaLabel, _item_alt1;\n const itemAriaLabel = isNodeItem ? (_item_ariaLabel = item.ariaLabel) !== null && _item_ariaLabel !== void 0 ? _item_ariaLabel : item.title : (_item_alt1 = item.alt) !== null && _item_alt1 !== void 0 ? _item_alt1 : item.title;\n const itemContent = item.href ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n className: \"logoloop__link\",\n href: item.href,\n \"aria-label\": itemAriaLabel || \"logo link\",\n target: \"_blank\",\n rel: \"noreferrer noopener\",\n children: content\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\LogoLoop.tsx\",\n lineNumber: 260,\n columnNumber: 7\n }, undefined) : content;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n className: \"logoloop__item\",\n role: \"listitem\",\n children: itemContent\n }, key, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\LogoLoop.tsx\",\n lineNumber: 274,\n columnNumber: 7\n }, undefined);\n }, []);\n const logoLists = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from({\n length: copyCount\n }, (_, copyIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"logoloop__list\",\n role: \"list\",\n \"aria-hidden\": copyIndex > 0,\n ref: copyIndex === 0 ? seqRef : undefined,\n children: logos.map((item, itemIndex)=>renderLogoItem(item, \"\".concat(copyIndex, \"-\").concat(itemIndex)))\n }, \"copy-\".concat(copyIndex), false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\LogoLoop.tsx\",\n lineNumber: 283,\n columnNumber: 9\n }, undefined)), [\n copyCount,\n logos,\n renderLogoItem\n ]);\n var _toCssLength;\n const containerStyle = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>({\n width: (_toCssLength = toCssLength(width)) !== null && _toCssLength !== void 0 ? _toCssLength : \"100%\",\n ...cssVariables,\n ...style\n }), [\n width,\n cssVariables,\n style\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: containerRef,\n className: rootClassName,\n style: containerStyle,\n role: \"region\",\n \"aria-label\": ariaLabel,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"logoloop__track\",\n ref: trackRef,\n children: logoLists\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\LogoLoop.tsx\",\n lineNumber: 315,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\LogoLoop.tsx\",\n lineNumber: 306,\n columnNumber: 5\n }, undefined);\n}, \"U3/dJDb7s52rp4bnqMvGaPwQ2Ys=\", false, function() {\n return [\n useResizeObserver,\n useImageLoader,\n useAnimationLoop\n ];\n})), \"U3/dJDb7s52rp4bnqMvGaPwQ2Ys=\", false, function() {\n return [\n useResizeObserver,\n useImageLoader,\n useAnimationLoop\n ];\n});\n_c1 = LogoLoop;\nLogoLoop.displayName = \"LogoLoop\";\n/* harmony default export */ __webpack_exports__[\"default\"] = (LogoLoop);\nvar _c, _c1;\n$RefreshReg$(_c, \"LogoLoop$memo\");\n$RefreshReg$(_c1, \"LogoLoop\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTG9nb0xvb3AudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFMkY7QUFDbkU7QUFFeEIsTUFBTU0sbUJBQW1CO0lBQ3ZCQyxZQUFZO0lBQ1pDLFlBQVk7SUFDWkMsZUFBZTtBQUNqQjtBQUVBLE1BQU1DLGNBQWMsQ0FBQ0MsUUFDbEIsT0FBT0EsVUFBVSxXQUFXLEdBQVMsT0FBTkEsT0FBTSxRQUFPQSxrQkFBQUEsbUJBQUFBLFFBQVNDO0FBK0J4RCxNQUFNQyxvQkFBb0IsQ0FDeEJDLFVBQ0FDLFVBQ0FDOztJQUVBZixnREFBU0EsQ0FBQztRQUNSLElBQUksQ0FBQ2dCLE9BQU9DLGNBQWMsRUFBRTtZQUMxQixNQUFNQyxlQUFlLElBQU1MO1lBQzNCRyxPQUFPRyxnQkFBZ0IsQ0FBQyxVQUFVRDtZQUNsQ0w7WUFDQSxPQUFPLElBQU1HLE9BQU9JLG1CQUFtQixDQUFDLFVBQVVGO1FBQ3BEO1FBRUEsTUFBTUcsWUFBWVAsU0FBU1EsR0FBRyxDQUFDQyxDQUFBQTtZQUM3QixJQUFJLENBQUNBLElBQUlDLE9BQU8sRUFBRSxPQUFPO1lBQ3pCLE1BQU1DLFdBQVcsSUFBSVIsZUFBZUo7WUFDcENZLFNBQVNDLE9BQU8sQ0FBQ0gsSUFBSUMsT0FBTztZQUM1QixPQUFPQztRQUNUO1FBRUFaO1FBRUEsT0FBTztZQUNMUSxVQUFVTSxPQUFPLENBQUNGLENBQUFBLFdBQVlBLHFCQUFBQSwrQkFBQUEsU0FBVUcsVUFBVTtRQUNwRDtJQUNBLHVEQUF1RDtJQUN6RCxHQUFHYjtBQUNMO0dBM0JNSDtBQTZCTixNQUFNaUIsaUJBQWlCLENBQ3JCQyxRQUNBQyxRQUNBaEI7O0lBRUFmLGdEQUFTQSxDQUFDO1lBQ084QjtZQUFBQTtRQUFmLE1BQU1FLFNBQVNGLENBQUFBLG9DQUFBQSxrQkFBQUEsT0FBT04sT0FBTyxjQUFkTSxzQ0FBQUEsZ0JBQWdCRyxnQkFBZ0IsQ0FBQyxvQkFBakNILDhDQUFBQSxtQ0FBMkMsRUFB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c291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgbWVtbywgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgJy4vTG9nb0xvb3AuY3NzJztcclxuXHJcbmNvbnN0IEFOSU1BVElPTl9DT05GSUcgPSB7XHJcbiAgU01PT1RIX1RBVTogMC4yNSxcclxuICBNSU5fQ09QSUVTOiAyLFxyXG4gIENPUFlfSEVBRFJPT006IDJcclxufTtcclxuXHJcbmNvbnN0IHRvQ3NzTGVuZ3RoID0gKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gXHJcbiAgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyBgJHt2YWx1ZX1weGAgOiAodmFsdWUgPz8gdW5kZWZpbmVkKSk7XHJcblxyXG5pbnRlcmZhY2UgTG9nb0l0ZW0ge1xyXG4gIG5vZGU/OiBSZWFjdE5vZGU7XHJcbiAgc3JjPzogc3RyaW5nO1xyXG4gIHNyY1NldD86IHN0cmluZztcclxuICBzaXplcz86IHN0cmluZztcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBoZWlnaHQ/OiBudW1iZXI7XHJcbiAgYWx0Pzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIGhyZWY/OiBzdHJpbmc7XHJcbiAgYXJpYUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTG9nb0xvb3BQcm9wcyB7XHJcbiAgbG9nb3M6IExvZ29JdGVtW107XHJcbiAgc3BlZWQ/OiBudW1iZXI7XHJcbiAgZGlyZWN0aW9uPzogJ2xlZnQnIHwgJ3JpZ2h0JztcclxuICB3aWR0aD86IG51bWJlciB8IHN0cmluZztcclxuICBsb2dvSGVpZ2h0PzogbnVtYmVyO1xyXG4gIGdhcD86IG51bWJlcjtcclxuICBwYXVzZU9uSG92ZXI/OiBib29sZWFuO1xyXG4gIGZhZGVPdXQ/OiBib29sZWFuO1xyXG4gIGZhZGVPdXRDb2xvcj86IHN0cmluZztcclxuICBzY2FsZU9uSG92ZXI/OiBib29sZWFuO1xyXG4gIGFyaWFMYWJlbD86IHN0cmluZztcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xyXG59XHJcblxyXG5jb25zdCB1c2VSZXNpemVPYnNlcnZlciA9IChcclxuICBjYWxsYmFjazogKCkgPT4gdm9pZCxcclxuICBlbGVtZW50czogUmVhY3QuUmVmT2JqZWN0PEhUTUxFbGVtZW50PltdLFxyXG4gIGRlcGVuZGVuY2llczogdW5rbm93bltdXHJcbikgPT4ge1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoIXdpbmRvdy5SZXNpemVPYnNlcnZlcikge1xyXG4gICAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiBjYWxsYmFjaygpO1xyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcclxuICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9ic2VydmVycyA9IGVsZW1lbnRzLm1hcChyZWYgPT4ge1xyXG4gICAgICBpZiAoIXJlZi5jdXJyZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHJlZi5jdXJyZW50KTtcclxuICAgICAgcmV0dXJuIG9ic2VydmVyO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY2FsbGJhY2soKTtcclxuXHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBvYnNlcnZlcnMuZm9yRWFjaChvYnNlcnZlciA9PiBvYnNlcnZlcj8uZGlzY29ubmVjdCgpKTtcclxuICAgIH07XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXHJcbiAgfSwgZGVwZW5kZW5jaWVzKTtcclxufTtcclxuXHJcbmNvbnN0IHVzZUltYWdlTG9hZGVyID0gKFxyXG4gIHNlcVJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxFbGVtZW50PixcclxuICBvbkxvYWQ6ICgpID0+IHZvaWQsXHJcbiAgZGVwZW5kZW5jaWVzOiB1bmtub3duW11cclxuKSA9PiB7XHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGltYWdlcyA9IHNlcVJlZi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKSA/PyBbXTtcclxuICAgIGlmIChpbWFnZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIG9uTG9hZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlbWFpbmluZ0ltYWdlcyA9IGltYWdlcy5sZW5ndGg7XHJcbiAgICBjb25zdCBoYW5kbGVJbWFnZUxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHJlbWFpbmluZ0ltYWdlcyAtPSAxO1xyXG4gICAgICBpZiAocmVtYWluaW5nSW1hZ2VzID09PSAwKSB7XHJcbiAgICAgICAgb25Mb2FkKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcclxuICAgICAgY29uc3QgaHRtbEltZyA9IGltZyBhcyBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gICAgICBpZiAoaHRtbEltZy5jb21wbGV0ZSkge1xyXG4gICAgICAgIGhhbmRsZUltYWdlTG9hZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGh0bWxJbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGhhbmRsZUltYWdlTG9hZCwgeyBvbmNlOiB0cnVlIH0pO1xyXG4gICAgICAgIGh0bWxJbWcuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVJbWFnZUxvYWQsIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcclxuICAgICAgICBpbWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGhhbmRsZUltYWdlTG9hZCk7XHJcbiAgICAgICAgaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlSW1hZ2VMb2FkKTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xyXG4gIH0sIGRlcGVuZGVuY2llcyk7XHJcbn07XHJcblxyXG5jb25zdCB1c2VBbmltYXRpb25Mb29wID0gKFxyXG4gIHRyYWNrUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTEVsZW1lbnQ+LFxyXG4gIHRhcmdldFZlbG9jaXR5OiBudW1iZXIsXHJcbiAgc2VxV2lkdGg6IG51bWJlcixcclxuICBpc0hvdmVyZWQ6IGJvb2xlYW4sXHJcbiAgcGF1c2VPbkhvdmVyOiBib29sZWFuXHJcbikgPT4ge1xyXG4gIGNvbnN0IHJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICBjb25zdCBsYXN0VGltZXN0YW1wUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IG9mZnNldFJlZiA9IHVzZVJlZigwKTtcclxuICBjb25zdCB2ZWxvY2l0eVJlZiA9IHVzZVJlZigwKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHRyYWNrID0gdHJhY2tSZWYuY3VycmVudDtcclxuICAgIGlmICghdHJhY2spIHJldHVybjtcclxuXHJcbiAgICBpZiAoc2VxV2lkdGggPiAwKSB7XHJcbiAgICAgIG9mZnNldFJlZi5jdXJyZW50ID0gKChvZmZzZXRSZWYuY3VycmVudCAlIHNlcVdpZHRoKSArIHNlcVdpZHRoKSAlIHNlcVdpZHRoO1xyXG4gICAgICB0cmFjay5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHstb2Zmc2V0UmVmLmN1cnJlbnR9cHgsIDAsIDApYDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmltYXRlID0gKHRpbWVzdGFtcDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChsYXN0VGltZXN0YW1wUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcclxuICAgICAgICBsYXN0VGltZXN0YW1wUmVmLmN1cnJlbnQgPSB0aW1lc3RhbXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRlbHRhVGltZSA9IE1hdGgubWF4KDAsIHRpbWVzdGFtcCAtIGxhc3RUaW1lc3RhbXBSZWYuY3VycmVudCkgLyAxMDAwO1xyXG4gICAgICBsYXN0VGltZXN0YW1wUmVmLmN1cnJlbnQgPSB0aW1lc3RhbXA7XHJcblxyXG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXVzZU9uSG92ZXIgJiYgaXNIb3ZlcmVkID8gMCA6IHRhcmdldFZlbG9jaXR5O1xyXG4gICAgICBjb25zdCBlYXNpbmdGYWN0b3IgPSAxIC0gTWF0aC5leHAoLWRlbHRhVGltZSAvIEFOSU1BVElPTl9DT05GSUcuU01PT1RIX1RBVSk7XHJcbiAgICAgIHZlbG9jaXR5UmVmLmN1cnJlbnQgKz0gKHRhcmdldCAtIHZlbG9jaXR5UmVmLmN1cnJlbnQpICogZWFzaW5nRmFjdG9yO1xyXG5cclxuICAgICAgaWYgKHNlcVdpZHRoID4gMCkge1xyXG4gICAgICAgIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0UmVmLmN1cnJlbnQgKyB2ZWxvY2l0eVJlZi5jdXJyZW50ICogZGVsdGFUaW1lO1xyXG4gICAgICAgIG5leHRPZmZzZXQgPSAoKG5leHRPZmZzZXQgJSBzZXFXaWR0aCkgKyBzZXFXaWR0aCkgJSBzZXFXaWR0aDtcclxuICAgICAgICBvZmZzZXRSZWYuY3VycmVudCA9IG5leHRPZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlWCA9IC1vZmZzZXRSZWYuY3VycmVudDtcclxuICAgICAgICB0cmFjay5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt0cmFuc2xhdGVYfXB4LCAwLCAwKWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgfTtcclxuXHJcbiAgICByYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcclxuXHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBpZiAocmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcclxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZSZWYuY3VycmVudCk7XHJcbiAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGxhc3RUaW1lc3RhbXBSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICB9O1xyXG4gIH0sIFt0YXJnZXRWZWxvY2l0eSwgc2VxV2lkdGgsIGlzSG92ZXJlZCwgcGF1c2VPbkhvdmVyLCB0cmFja1JlZl0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IExvZ29Mb29wID0gbWVtbzxMb2dvTG9vcFByb3BzPigoe1xyXG4gIGxvZ29zLFxyXG4gIHNwZWVkID0gMTIwLFxyXG4gIGRpcmVjdGlvbiA9ICdsZWZ0JyxcclxuICB3aWR0aCA9ICcxMDAlJyxcclxuICBsb2dvSGVpZ2h0ID0gMjgsXHJcbiAgZ2FwID0gMzIsXHJcbiAgcGF1c2VPbkhvdmVyID0gdHJ1ZSxcclxuICBmYWRlT3V0ID0gZmFsc2UsXHJcbiAgZmFkZU91dENvbG9yLFxyXG4gIHNjYWxlT25Ib3ZlciA9IGZhbHNlLFxyXG4gIGFyaWFMYWJlbCA9ICdQYXJ0bmVyIGxvZ29zJyxcclxuICBjbGFzc05hbWUsXHJcbiAgc3R5bGVcclxufSkgPT4ge1xyXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XHJcbiAgY29uc3QgdHJhY2tSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xyXG4gIGNvbnN0IHNlcVJlZiA9IHVzZVJlZjxIVE1MVUxpc3RFbGVtZW50PihudWxsKTtcclxuICBjb25zdCBbc2VxV2lkdGgsIHNldFNlcVdpZHRoXSA9IHVzZVN0YXRlKDApO1xyXG4gIGNvbnN0IFtjb3B5Q291bnQsIHNldENvcHlDb3VudF0gPSB1c2VTdGF0ZShBTklNQVRJT05fQ09ORklHLk1JTl9DT1BJRVMpO1xyXG4gIGNvbnN0IFtpc0hvdmVyZWQsIHNldElzSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG4gIGNvbnN0IHRhcmdldFZlbG9jaXR5ID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICBjb25zdCBtYWduaXR1ZGUgPSBNYXRoLmFicyhzcGVlZCk7XHJcbiAgICBjb25zdCBkaXJlY3Rpb25NdWx0aXBsaWVyID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyAxIDogLTE7XHJcbiAgICBjb25zdCBzcGVlZE11bHRpcGxpZXIgPSBzcGVlZCA8IDAgPyAtMSA6IDE7XHJcbiAgICByZXR1cm4gbWFnbml0dWRlICogZGlyZWN0aW9uTXVsdGlwbGllciAqIHNwZWVkTXVsdGlwbGllcjtcclxuICB9LCBbc3BlZWQsIGRpcmVjdGlvbl0pO1xyXG5cclxuICBjb25zdCB1cGRhdGVEaW1lbnNpb25zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXJSZWYuY3VycmVudD8uY2xpZW50V2lkdGggPz8gMDtcclxuICAgIGNvbnN0IHNlcXVlbmNlV2lkdGggPSBzZXFSZWYuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0Py4oKT8ud2lkdGggPz8gMDtcclxuICAgIGlmIChzZXF1ZW5jZVdpZHRoID4gMCkge1xyXG4gICAgICBzZXRTZXFXaWR0aChNYXRoLmNlaWwoc2VxdWVuY2VXaWR0aCkpO1xyXG4gICAgICBjb25zdCBjb3BpZXNOZWVkZWQgPSBNYXRoLmNlaWwoY29udGFpbmVyV2lkdGggLyBzZXF1ZW5jZVdpZHRoKSArIEFOSU1BVElPTl9DT05GSUcuQ09QWV9IRUFEUk9PTTtcclxuICAgICAgc2V0Q29weUNvdW50KE1hdGgubWF4KEFOSU1BVElPTl9DT05GSUcuTUlOX0NPUElFUywgY29waWVzTmVlZGVkKSk7XHJcbiAgICB9XHJcbiAgfSwgW10pO1xyXG5cclxuICB1c2VSZXNpemVPYnNlcnZlcih1cGRhdGVEaW1lbnNpb25zLCBbY29udGFpbmVyUmVmLCBzZXFSZWZdLCBbbG9nb3MsIGdhcCwgbG9nb0hlaWdodF0pO1xyXG4gIHVzZUltYWdlTG9hZGVyKHNlcVJlZiwgdXBkYXRlRGltZW5zaW9ucywgW2xvZ29zLCBnYXAsIGxvZ29IZWlnaHRdKTtcclxuICB1c2VBbmltYXRpb25Mb29wKHRyYWNrUmVmLCB0YXJnZXRWZWxvY2l0eSwgc2VxV2lkdGgsIGlzSG92ZXJlZCwgcGF1c2VPbkhvdmVyKTtcclxuXHJcbiAgY29uc3QgY3NzVmFyaWFibGVzID0gdXNlTWVtbyhcclxuICAgICgpID0+ICh7XHJcbiAgICAgICctLWxvZ29sb29wLWdhcCc6IGAke2dhcH1weGAsXHJcbiAgICAgICctLWxvZ29sb29wLWxvZ29IZWlnaHQnOiBgJHtsb2dvSGVpZ2h0fXB4YCxcclxuICAgICAgLi4uKGZhZGVPdXRDb2xvciAmJiB7ICctLWxvZ29sb29wLWZhZGVDb2xvcic6IGZhZGVPdXRDb2xvciB9KVxyXG4gICAgfSksXHJcbiAgICBbZ2FwLCBsb2dvSGVpZ2h0LCBmYWRlT3V0Q29sb3JdXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qgcm9vdENsYXNzTmFtZSA9IHVzZU1lbW8oXHJcbiAgICAoKSA9PlxyXG4gICAgICBbJ2xvZ29sb29wJywgZmFkZU91dCAmJiAnbG9nb2xvb3AtLWZhZGUnLCBzY2FsZU9uSG92ZXIgJiYgJ2xvZ29sb29wLS1zY2FsZS1ob3ZlcicsIGNsYXNzTmFtZV1cclxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXHJcbiAgICAgICAgLmpvaW4oJyAnKSxcclxuICAgIFtmYWRlT3V0LCBzY2FsZU9uSG92ZXIsIGNsYXNzTmFtZV1cclxuICApO1xyXG5cclxuICBjb25zdCBoYW5kbGVNb3VzZUVudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgaWYgKHBhdXNlT25Ib3Zlcikgc2V0SXNIb3ZlcmVkKHRydWUpO1xyXG4gIH0sIFtwYXVzZU9uSG92ZXJdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgIGlmIChwYXVzZU9uSG92ZXIpIHNldElzSG92ZXJlZChmYWxzZSk7XHJcbiAgfSwgW3BhdXNlT25Ib3Zlcl0pO1xyXG5cclxuICBjb25zdCByZW5kZXJMb2dvSXRlbSA9IHVzZUNhbGxiYWNrKChpdGVtOiBMb2dvSXRlbSwga2V5OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGlzTm9kZUl0ZW0gPSAnbm9kZScgaW4gaXRlbTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBpc05vZGVJdGVtID8gKFxyXG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJsb2dvbG9vcF9fbm9kZVwiIGFyaWEtaGlkZGVuPXshIWl0ZW0uaHJlZiAmJiAhaXRlbS5hcmlhTGFiZWx9PlxyXG4gICAgICAgIHtpdGVtLm5vZGV9XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICkgOiAoXHJcbiAgICAgIDxpbWdcclxuICAgICAgICBzcmM9e2l0ZW0uc3JjfVxyXG4gICAgICAgIHNyY1NldD17aXRlbS5zcmNTZXR9XHJcbiAgICAgICAgc2l6ZXM9e2l0ZW0uc2l6ZXN9XHJcbiAgICAgICAgd2lkdGg9e2l0ZW0ud2lkdGh9XHJcbiAgICAgICAgaGVpZ2h0PXtpdGVtLmhlaWdodH1cclxuICAgICAgICBhbHQ9e2l0ZW0uYWx0ID8/ICcnfVxyXG4gICAgICAgIHRpdGxlPXtpdGVtLnRpdGxlfVxyXG4gICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcclxuICAgICAgICBkcmFnZ2FibGU9e2ZhbHNlfVxyXG4gICAgICAvPlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBpdGVtQXJpYUxhYmVsID0gaXNOb2RlSXRlbSA/IChpdGVtLmFyaWFMYWJlbCA/PyBpdGVtLnRpdGxlKSA6IChpdGVtLmFsdCA/PyBpdGVtLnRpdGxlKTtcclxuICAgIGNvbnN0IGl0ZW1Db250ZW50ID0gaXRlbS5ocmVmID8gKFxyXG4gICAgICA8YVxyXG4gICAgICAgIGNsYXNzTmFtZT1cImxvZ29sb29wX19saW5rXCJcclxuICAgICAgICBocmVmPXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgYXJpYS1sYWJlbD17aXRlbUFyaWFMYWJlbCB8fCAnbG9nbyBsaW5rJ31cclxuICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgIHJlbD1cIm5vcmVmZXJyZXIgbm9vcGVuZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAge2NvbnRlbnR9XHJcbiAgICAgIDwvYT5cclxuICAgICkgOiAoXHJcbiAgICAgIGNvbnRlbnRcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGxpIGNsYXNzTmFtZT1cImxvZ29sb29wX19pdGVtXCIga2V5PXtrZXl9IHJvbGU9XCJsaXN0aXRlbVwiPlxyXG4gICAgICAgIHtpdGVtQ29udGVudH1cclxuICAgICAgPC9saT5cclxuICAgICk7XHJcbiAgfSwgW10pO1xyXG5cclxuICBjb25zdCBsb2dvTGlzdHMgPSB1c2VNZW1vKFxyXG4gICAgKCkgPT5cclxuICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogY29weUNvdW50IH0sIChfLCBjb3B5SW5kZXgpID0+IChcclxuICAgICAgICA8dWxcclxuICAgICAgICAgIGNsYXNzTmFtZT1cImxvZ29sb29wX19saXN0XCJcclxuICAgICAgICAgIGtleT17YGNvcHktJHtjb3B5SW5kZXh9YH1cclxuICAgICAgICAgIHJvbGU9XCJsaXN0XCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPXtjb3B5SW5kZXggPiAwfVxyXG4gICAgICAgICAgcmVmPXtjb3B5SW5kZXggPT09IDAgPyBzZXFSZWYgOiB1bmRlZmluZWR9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2xvZ29zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PiByZW5kZXJMb2dvSXRlbShpdGVtLCBgJHtjb3B5SW5kZXh9LSR7aXRlbUluZGV4fWApKX1cclxuICAgICAgICA8L3VsPlxyXG4gICAgICApKSxcclxuICAgIFtjb3B5Q291bnQsIGxvZ29zLCByZW5kZXJMb2dvSXRlbV1cclxuICApO1xyXG5cclxuICBjb25zdCBjb250YWluZXJTdHlsZSA9IHVzZU1lbW8oXHJcbiAgICAoKSA9PiAoe1xyXG4gICAgICB3aWR0aDogdG9Dc3NMZW5ndGgod2lkdGgpID8/ICcxMDAlJyxcclxuICAgICAgLi4uY3NzVmFyaWFibGVzLFxyXG4gICAgICAuLi5zdHlsZVxyXG4gICAgfSksXHJcbiAgICBbd2lkdGgsIGNzc1ZhcmlhYmxlcywgc3R5bGVdXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17cm9vdENsYXNzTmFtZX1cclxuICAgICAgc3R5bGU9e2NvbnRhaW5lclN0eWxlfVxyXG4gICAgICByb2xlPVwicmVnaW9uXCJcclxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxyXG4gICAgICBvbk1vdXNlRW50ZXI9e2hhbmRsZU1vdXNlRW50ZXJ9XHJcbiAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlTW91c2VMZWF2ZX1cclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJsb2dvbG9vcF9fdHJhY2tcIiByZWY9e3RyYWNrUmVmfT5cclxuICAgICAgICB7bG9nb0xpc3RzfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0pO1xyXG5cclxuTG9nb0xvb3AuZGlzcGxheU5hbWUgPSAnTG9nb0xvb3AnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTG9nb0xvb3A7XHJcblxyXG4iXSwibmFtZXMiOlsidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJtZW1vIiwiQU5JTUFUSU9OX0NPTkZJRyIsIlNNT09USF9UQVUiLCJNSU5fQ09QSUVTIiwiQ09QWV9IRUFEUk9PTSIsInRvQ3NzTGVuZ3RoIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJ1c2VSZXNpemVPYnNlcnZlciIsImNhbGxiYWNrIiwiZWxlbWVudHMiLCJkZXBlbmRlbmNpZXMiLCJ3aW5kb3ciLCJSZXNpemVPYnNlcnZlciIsImhhbmRsZVJlc2l6ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib2JzZXJ2ZXJzIiwibWFwIiwicmVmIiwiY3VycmVudCIsIm9ic2VydmVyIiwib2JzZXJ2ZSIsImZvckVhY2giLCJkaXNjb25uZWN0IiwidXNlSW1hZ2VMb2FkZXIiLCJzZXFSZWYiLCJvbkxvYWQiLCJpbWFnZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwicmVtYWluaW5nSW1hZ2VzIiwiaGFuZGxlSW1hZ2VMb2FkIiwiaW1nIiwiaHRtbEltZyIsImNvbXBsZXRlIiwib25jZSIsInVzZUFuaW1hdGlvbkxvb3AiLCJ0cmFja1JlZiIsInRhcmdldFZlbG9jaXR5Iiwic2VxV2lkdGgiLCJpc0hvdmVyZWQiLCJwYXVzZU9uSG92ZXIiLCJyYWZSZWYiLCJsYXN0VGltZXN0YW1wUmVmIiwib2Zmc2V0UmVmIiwidmVsb2NpdHlSZWYiLCJ0cmFjayIsInN0eWxlIiwidHJhbnNmb3JtIiwiYW5pbWF0ZSIsInRpbWVzdGFtcCIsImRlbHRhVGltZSIsIk1hdGgiLCJtYXgiLCJ0YXJnZXQiLCJlYXNpbmdGYWN0b3IiLCJleHAiLCJuZXh0T2Zmc2V0IiwidHJhbnNsYXRlWCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiTG9nb0xvb3AiLCJsb2dvcyIsInNwZWVkIiwiZGlyZWN0aW9uIiwid2lkdGgiLCJsb2dvSGVpZ2h0IiwiZ2FwIiwiZmFkZU91dCIsImZhZGVPdXRDb2xvciIsInNjYWxlT25Ib3ZlciIsImFyaWFMYWJlbCIsImNsYXNzTmFtZSIsImNvbnRhaW5lclJlZiIsInNldFNlcVdpZHRoIiwiY29weUNvdW50Iiwic2V0Q29weUNvdW50Iiwic2V0SXNIb3ZlcmVkIiwibWFnbml0dWRlIiwiYWJzIiwiZGlyZWN0aW9uTXVsdGlwbGllciIsInNwZWVkTXVsdGlwbGllciIsInVwZGF0ZURpbWVuc2lvbnMiLCJjb250YWluZXJXaWR0aCIsImNsaWVudFdpZHRoIiwic2VxdWVuY2VXaWR0aCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImNlaWwiLCJjb3BpZXNOZWVkZWQiLCJjc3NWYXJpYWJsZXMiLCJyb290Q2xhc3NOYW1lIiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJoYW5kbGVNb3VzZUVudGVyIiwiaGFuZGxlTW91c2VMZWF2ZSIsInJlbmRlckxvZ29JdGVtIiwiaXRlbSIsImtleSIsImlzTm9kZUl0ZW0iLCJjb250ZW50Iiwic3BhbiIsImFyaWEtaGlkZGVuIiwiaHJlZiIsIm5vZGUiLCJzcmMiLCJzcmNTZXQiLCJzaXplcyIsImhlaWdodCIsImFsdCIsInRpdGxlIiwibG9hZGluZyIsImRlY29kaW5nIiwiZHJhZ2dhYmxlIiwiaXRlbUFyaWFMYWJlbCIsIml0ZW1Db250ZW50IiwiYSIsImFyaWEtbGFiZWwiLCJyZWwiLCJsaSIsInJvbGUiLCJsb2dvTGlzdHMiLCJBcnJheSIsImZyb20iLCJfIiwiY29weUluZGV4IiwidWwiLCJpdGVtSW5kZXgiLCJjb250YWluZXJTdHlsZSIsImRpdiIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/LogoLoop.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/PillNav.tsx": /*!********************************!*\ !*** ./components/PillNav.tsx ***! \********************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! gsap */ \"(app-pages-browser)/./node_modules/gsap/index.js\");\n/* harmony import */ var _PillNav_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PillNav.css */ \"(app-pages-browser)/./components/PillNav.css\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nconst PillNav = (param)=>{\n let { logo, logoAlt = \"Logo\", items, activeHref, className = \"\", ease = \"power3.easeOut\", baseColor = \"#fff\", pillColor = \"#060010\", hoveredPillTextColor = \"#060010\", pillTextColor, onMobileMenuClick, initialLoadAnimation = true } = param;\n _s();\n const resolvedPillTextColor = pillTextColor !== null && pillTextColor !== void 0 ? pillTextColor : baseColor;\n const [isMobileMenuOpen, setIsMobileMenuOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const circleRefs = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)([]);\n const tlRefs = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)([]);\n const activeTweenRefs = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)([]);\n const logoImgRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const logoTweenRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const hamburgerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const mobileMenuRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const navItemsRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const logoRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const hasAnimatedRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(false);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n var _document_fonts;\n const layout = ()=>{\n circleRefs.current.forEach((circle)=>{\n var _tlRefs_current_index;\n if (!(circle === null || circle === void 0 ? void 0 : circle.parentElement)) return;\n const pill = circle.parentElement;\n const rect = pill.getBoundingClientRect();\n const { width: w, height: h } = rect;\n const R = (w * w / 4 + h * h) / (2 * h);\n const D = Math.ceil(2 * R) + 2;\n const delta = Math.ceil(R - Math.sqrt(Math.max(0, R * R - w * w / 4))) + 1;\n const originY = D - delta;\n circle.style.width = \"\".concat(D, \"px\");\n circle.style.height = \"\".concat(D, \"px\");\n circle.style.bottom = \"-\".concat(delta, \"px\");\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(circle, {\n xPercent: -50,\n scale: 0,\n transformOrigin: \"50% \".concat(originY, \"px\")\n });\n const label = pill.querySelector(\".pill-label\");\n const white = pill.querySelector(\".pill-label-hover\");\n if (label) gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(label, {\n y: 0\n });\n if (white) gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(white, {\n y: h + 12,\n opacity: 0\n });\n const index = circleRefs.current.indexOf(circle);\n if (index === -1) return;\n (_tlRefs_current_index = tlRefs.current[index]) === null || _tlRefs_current_index === void 0 ? void 0 : _tlRefs_current_index.kill();\n const tl = gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.timeline({\n paused: true\n });\n tl.to(circle, {\n scale: 1.2,\n xPercent: -50,\n duration: 2,\n ease,\n overwrite: \"auto\"\n }, 0);\n if (label) {\n tl.to(label, {\n y: -(h + 8),\n duration: 2,\n ease,\n overwrite: \"auto\"\n }, 0);\n }\n if (white) {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(white, {\n y: Math.ceil(h + 100),\n opacity: 0\n });\n tl.to(white, {\n y: 0,\n opacity: 1,\n duration: 2,\n ease,\n overwrite: \"auto\"\n }, 0);\n }\n tlRefs.current[index] = tl;\n });\n };\n layout();\n const onResize = ()=>layout();\n window.addEventListener(\"resize\", onResize);\n if ((_document_fonts = document.fonts) === null || _document_fonts === void 0 ? void 0 : _document_fonts.ready) {\n document.fonts.ready.then(layout).catch(()=>{});\n }\n const menu = mobileMenuRef.current;\n if (menu) {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(menu, {\n visibility: \"hidden\",\n opacity: 0,\n scaleY: 1\n });\n }\n if (initialLoadAnimation && !hasAnimatedRef.current) {\n const logoEl = logoRef.current;\n const navItems = navItemsRef.current;\n if (logoEl) {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(logoEl, {\n scale: 0\n });\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(logoEl, {\n scale: 1,\n duration: 0.6,\n ease\n });\n }\n if (navItems) {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(navItems, {\n width: 0,\n overflow: \"hidden\"\n });\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(navItems, {\n width: \"auto\",\n duration: 0.6,\n ease\n });\n }\n hasAnimatedRef.current = true;\n } else if (navItemsRef.current && !hasAnimatedRef.current) {\n // Wenn initialLoadAnimation false ist, setze die Items sofort auf sichtbar\n const navItems = navItemsRef.current;\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(navItems, {\n width: \"auto\",\n overflow: \"visible\"\n });\n if (logoRef.current) {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(logoRef.current, {\n scale: 1\n });\n }\n hasAnimatedRef.current = true;\n }\n return ()=>window.removeEventListener(\"resize\", onResize);\n }, [\n items,\n ease\n ]); // initialLoadAnimation entfernt, damit es nur einmal läuft\n const handleEnter = (i)=>{\n var _activeTweenRefs_current_i;\n const tl = tlRefs.current[i];\n if (!tl) return;\n (_activeTweenRefs_current_i = activeTweenRefs.current[i]) === null || _activeTweenRefs_current_i === void 0 ? void 0 : _activeTweenRefs_current_i.kill();\n activeTweenRefs.current[i] = tl.tweenTo(tl.duration(), {\n duration: 0.3,\n ease,\n overwrite: \"auto\"\n });\n };\n const handleLeave = (i)=>{\n var _activeTweenRefs_current_i;\n const tl = tlRefs.current[i];\n if (!tl) return;\n (_activeTweenRefs_current_i = activeTweenRefs.current[i]) === null || _activeTweenRefs_current_i === void 0 ? void 0 : _activeTweenRefs_current_i.kill();\n activeTweenRefs.current[i] = tl.tweenTo(0, {\n duration: 0.2,\n ease,\n overwrite: \"auto\"\n });\n };\n const handleLogoEnter = ()=>{\n var _logoTweenRef_current;\n const img = logoImgRef.current;\n if (!img) return;\n (_logoTweenRef_current = logoTweenRef.current) === null || _logoTweenRef_current === void 0 ? void 0 : _logoTweenRef_current.kill();\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(img, {\n rotate: 0\n });\n logoTweenRef.current = gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(img, {\n rotate: 360,\n duration: 0.2,\n ease,\n overwrite: \"auto\"\n });\n };\n const toggleMobileMenu = ()=>{\n const newState = !isMobileMenuOpen;\n setIsMobileMenuOpen(newState);\n const hamburger = hamburgerRef.current;\n const menu = mobileMenuRef.current;\n if (hamburger) {\n const lines = hamburger.querySelectorAll(\".hamburger-line\");\n if (newState) {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(lines[0], {\n rotation: 45,\n y: 3,\n duration: 0.3,\n ease\n });\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(lines[1], {\n rotation: -45,\n y: -3,\n duration: 0.3,\n ease\n });\n } else {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(lines[0], {\n rotation: 0,\n y: 0,\n duration: 0.3,\n ease\n });\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(lines[1], {\n rotation: 0,\n y: 0,\n duration: 0.3,\n ease\n });\n }\n }\n if (menu) {\n if (newState) {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(menu, {\n visibility: \"visible\"\n });\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.fromTo(menu, {\n opacity: 0,\n y: 10,\n scaleY: 1\n }, {\n opacity: 1,\n y: 0,\n scaleY: 1,\n duration: 0.3,\n ease,\n transformOrigin: \"top center\"\n });\n } else {\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.to(menu, {\n opacity: 0,\n y: 10,\n scaleY: 1,\n duration: 0.2,\n ease,\n transformOrigin: \"top center\",\n onComplete: ()=>{\n gsap__WEBPACK_IMPORTED_MODULE_4__.gsap.set(menu, {\n visibility: \"hidden\"\n });\n }\n });\n }\n }\n onMobileMenuClick === null || onMobileMenuClick === void 0 ? void 0 : onMobileMenuClick();\n };\n const isExternalLink = (href)=>href.startsWith(\"http://\") || href.startsWith(\"https://\") || href.startsWith(\"//\") || href.startsWith(\"mailto:\") || href.startsWith(\"tel:\") || href.startsWith(\"#\");\n const cssVars = {\n [\"--base\"]: baseColor,\n [\"--pill-bg\"]: pillColor,\n [\"--hover-text\"]: hoveredPillTextColor,\n [\"--pill-text\"]: resolvedPillTextColor\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pill-nav-container\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"pill-nav \".concat(className),\n \"aria-label\": \"Primary\",\n style: cssVars,\n children: [\n logo && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n className: \"pill-logo\",\n href: \"#\",\n \"aria-label\": \"Home\",\n onMouseEnter: handleLogoEnter,\n role: \"menuitem\",\n ref: logoRef,\n onClick: (e)=>{\n e.preventDefault();\n window.scrollTo({\n top: 0,\n behavior: \"smooth\"\n });\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: logo,\n alt: logoAlt,\n ref: logoImgRef\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 250,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pill-nav-items desktop-only\",\n ref: navItemsRef,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"pill-list\",\n role: \"menubar\",\n children: items.map((item, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n role: \"none\",\n children: isExternalLink(item.href) ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n role: \"menuitem\",\n href: item.href,\n className: \"pill\".concat(activeHref === item.href ? \" is-active\" : \"\"),\n \"aria-label\": item.ariaLabel || item.label,\n onMouseEnter: ()=>handleEnter(i),\n onMouseLeave: ()=>handleLeave(i),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hover-circle\",\n \"aria-hidden\": \"true\",\n ref: (el)=>{\n circleRefs.current[i] = el;\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 266,\n columnNumber: 21\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-stack\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"pill-label\",\n children: item.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 274,\n columnNumber: 23\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"pill-label-hover\",\n \"aria-hidden\": \"true\",\n children: item.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 275,\n columnNumber: 23\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 273,\n columnNumber: 21\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 258,\n columnNumber: 19\n }, undefined) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n role: \"menuitem\",\n href: item.href,\n className: \"pill\".concat(activeHref === item.href ? \" is-active\" : \"\"),\n \"aria-label\": item.ariaLabel || item.label,\n onMouseEnter: ()=>handleEnter(i),\n onMouseLeave: ()=>handleLeave(i),\n onClick: (e)=>{\n if (item.href.startsWith(\"#\")) {\n e.preventDefault();\n const element = document.getElementById(item.href.substring(1));\n if (element) {\n element.scrollIntoView({\n behavior: \"smooth\"\n });\n }\n }\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hover-circle\",\n \"aria-hidden\": \"true\",\n ref: (el)=>{\n circleRefs.current[i] = el;\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 298,\n columnNumber: 21\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-stack\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"pill-label\",\n children: item.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 306,\n columnNumber: 23\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"pill-label-hover\",\n \"aria-hidden\": \"true\",\n children: item.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 307,\n columnNumber: 23\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 305,\n columnNumber: 21\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 281,\n columnNumber: 19\n }, undefined)\n }, item.href || \"item-\".concat(i), false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 256,\n columnNumber: 15\n }, undefined))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 254,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 253,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"mobile-menu-button mobile-only\",\n onClick: toggleMobileMenu,\n \"aria-label\": \"Toggle menu\",\n ref: hamburgerRef,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hamburger-line\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 323,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hamburger-line\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 324,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 317,\n columnNumber: 9\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 236,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mobile-menu-popover mobile-only\",\n ref: mobileMenuRef,\n style: cssVars,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mobile-menu-list\",\n children: items.map((item, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: isExternalLink(item.href) ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: item.href,\n className: \"mobile-menu-link\".concat(activeHref === item.href ? \" is-active\" : \"\"),\n onClick: ()=>setIsMobileMenuOpen(false),\n children: item.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 332,\n columnNumber: 17\n }, undefined) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: item.href,\n className: \"mobile-menu-link\".concat(activeHref === item.href ? \" is-active\" : \"\"),\n onClick: ()=>{\n setIsMobileMenuOpen(false);\n if (item.href.startsWith(\"#\")) {\n const element = document.getElementById(item.href.substring(1));\n if (element) {\n element.scrollIntoView({\n behavior: \"smooth\"\n });\n }\n }\n },\n children: item.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 340,\n columnNumber: 17\n }, undefined)\n }, item.href || \"mobile-item-\".concat(i), false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 330,\n columnNumber: 13\n }, undefined))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 328,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 327,\n columnNumber: 7\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PillNav.tsx\",\n lineNumber: 235,\n columnNumber: 5\n }, undefined);\n};\n_s(PillNav, \"Dbx+DrZkuvKfyAOov6WJiBwfOOA=\");\n_c = PillNav;\n/* harmony default export */ __webpack_exports__[\"default\"] = (PillNav);\nvar _c;\n$RefreshReg$(_c, \"PillNav\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvUGlsbE5hdi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVvRDtBQUN2QjtBQUNEO0FBQ0w7QUF1QnZCLE1BQU1LLFVBQVU7UUFBQyxFQUNmQyxJQUFJLEVBQ0pDLFVBQVUsTUFBTSxFQUNoQkMsS0FBSyxFQUNMQyxVQUFVLEVBQ1ZDLFlBQVksRUFBRSxFQUNkQyxPQUFPLGdCQUFnQixFQUN2QkMsWUFBWSxNQUFNLEVBQ2xCQyxZQUFZLFNBQVMsRUFDckJDLHVCQUF1QixTQUFTLEVBQ2hDQyxhQUFhLEVBQ2JDLGlCQUFpQixFQUNqQkMsdUJBQXVCLElBQUksRUFDZDs7SUFDYixNQUFNQyx3QkFBd0JILDBCQUFBQSwyQkFBQUEsZ0JBQWlCSDtJQUMvQyxNQUFNLENBQUNPLGtCQUFrQkMsb0JBQW9CLEdBQUdsQiwrQ0FBUUEsQ0FBQztJQUN6RCxNQUFNbUIsYUFBYXBCLDZDQUFNQSxDQUE2QixFQUFFO0lBQ3hELE1BQU1xQixTQUFTckIsNkNBQU1BLENBQXVCLEVBQUU7SUFDOUMsTUFBTXNCLGtCQUFrQnRCLDZDQUFNQSxDQUFvQixFQUFFO0lBQ3BELE1BQU11QixhQUFhdkIsNkNBQU1BLENBQTBCO0lBQ25ELE1BQU13QixlQUFleEIsNkNBQU1BLENBQXlCO0lBQ3BELE1BQU15QixlQUFlekIsNkNBQU1BLENBQTJCO0lBQ3RELE1BQU0wQixnQkFBZ0IxQiw2Q0FBTUEsQ0FBd0I7SUFDcEQsTUFBTTJCLGNBQWMzQiw2Q0FBTUEsQ0FBd0I7SUFDbEQsTUFBTTRCLFVBQVU1Qiw2Q0FBTUEsQ0FBMkI7SUFDakQsTUFBTTZCLGlCQUFpQjdCLDZDQUFNQSxDQUFDO0lBRTlCRCxnREFBU0EsQ0FBQztZQTBDSitCO1FBekNKLE1BQU1DLFNBQVM7WUFDYlgsV0FBV1ksT0FBTyxDQUFDQyxPQUFPLENBQUNDLENBQUFBO29CQXVCekJiO2dCQXRCQSxJQUFJLEVBQUNhLG1CQUFBQSw2QkFBQUEsT0FBUUMsYUFBYSxH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LElBQUksR0FBRyxlQUFlO2dDQUN4RVMsU0FBUyxJQUFNM0Ysb0JBQW9COzBDQUVsQ3FHLEtBQUsvRCxLQUFLOzs7OzswREFHYiw4REFBQ3ZELGtEQUFJQTtnQ0FDSG1HLE1BQU1tQixLQUFLbkIsSUFBSTtnQ0FDZjVGLFdBQVcsbUJBQWdFLE9BQTdDRCxlQUFlZ0gsS0FBS25CLElBQUksR0FBRyxlQUFlO2dDQUN4RVMsU0FBUztvQ0FDUDNGLG9CQUFvQjtvQ0FDcEIsSUFBSXFHLEtBQUtuQixJQUFJLENBQUNDLFVBQVUsQ0FBQyxNQUFNO3dDQUM3QixNQUFNMEIsVUFBVWxHLFNBQVNtRyxjQUFjLENBQUNULEtBQUtuQixJQUFJLENBQUM2QixTQUFTLENBQUM7d0NBQzVELElBQUlGLFNBQVM7NENBQ1hBLFFBQVFHLGNBQWMsQ0FBQztnREFBRWhCLFVBQVU7NENBQVM7d0NBQzlDO29DQUNGO2dDQUNGOzBDQUVDSyxLQUFLL0QsS0FBSzs7Ozs7OzJCQXZCUitELEtBQUtuQixJQUFJLElBQUksZUFBaUIsT0FBRmY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdDakQ7R0E3VU1sRjtLQUFBQTtBQStVTiwrREFBZUEsT0FBT0EsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL1BpbGxOYXYudHN4P2RhYjQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcblxyXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluayc7XHJcbmltcG9ydCB7IGdzYXAgfSBmcm9tICdnc2FwJztcclxuaW1wb3J0ICcuL1BpbGxOYXYuY3NzJztcclxuXHJcbmludGVyZmFjZSBQaWxsTmF2SXRlbSB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBocmVmOiBzdHJpbmc7XHJcbiAgYXJpYUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUGlsbE5hdlByb3BzIHtcclxuICBsb2dvPzogc3RyaW5nO1xyXG4gIGxvZ29BbHQ/OiBzdHJpbmc7XHJcbiAgaXRlbXM6IFBpbGxOYXZJdGVtW107XHJcbiAgYWN0aXZlSHJlZj86IHN0cmluZztcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgZWFzZT86IHN0cmluZztcclxuICBiYXNlQ29sb3I/OiBzdHJpbmc7XHJcbiAgcGlsbENvbG9yPzogc3RyaW5nO1xyXG4gIGhvdmVyZWRQaWxsVGV4dENvbG9yPzogc3RyaW5nO1xyXG4gIHBpbGxUZXh0Q29sb3I/OiBzdHJpbmc7XHJcbiAgb25Nb2JpbGVNZW51Q2xpY2s/OiAoKSA9PiB2b2lkO1xyXG4gIGluaXRpYWxMb2FkQW5pbWF0aW9uPzogYm9vbGVhbjtcclxufVxyXG5cclxuY29uc3QgUGlsbE5hdiA9ICh7XHJcbiAgbG9nbyxcclxuICBsb2dvQWx0ID0gJ0xvZ28nLFxyXG4gIGl0ZW1zLFxyXG4gIGFjdGl2ZUhyZWYsXHJcbiAgY2xhc3NOYW1lID0gJycsXHJcbiAgZWFzZSA9ICdwb3dlcjMuZWFzZU91dCcsXHJcbiAgYmFzZUNvbG9yID0gJyNmZmYnLFxyXG4gIHBpbGxDb2xvciA9ICcjMDYwMDEwJyxcclxuICBob3ZlcmVkUGlsbFRleHRDb2xvciA9ICcjMDYwMDEwJyxcclxuICBwaWxsVGV4dENvbG9yLFxyXG4gIG9uTW9iaWxlTWVudUNsaWNrLFxyXG4gIGluaXRpYWxMb2FkQW5pbWF0aW9uID0gdHJ1ZVxyXG59OiBQaWxsTmF2UHJvcHMpID0+IHtcclxuICBjb25zdCByZXNvbHZlZFBpbGxUZXh0Q29sb3IgPSBwaWxsVGV4dENvbG9yID8/IGJhc2VDb2xvcjtcclxuICBjb25zdCBbaXNNb2JpbGVNZW51T3Blbiwgc2V0SXNNb2JpbGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgY2lyY2xlUmVmcyA9IHVzZVJlZjwoSFRNTFNwYW5FbGVtZW50IHwgbnVsbClbXT4oW10pO1xyXG4gIGNvbnN0IHRsUmVmcyA9IHVzZVJlZjxnc2FwLmNvcmUuVGltZWxpbmVbXT4oW10pO1xyXG4gIGNvbnN0IGFjdGl2ZVR3ZWVuUmVmcyA9IHVzZVJlZjxnc2FwLmNvcmUuVHdlZW5bXT4oW10pO1xyXG4gIGNvbnN0IGxvZ29JbWdSZWYgPSB1c2VSZWY8SFRNTEltYWdlRWxlbWVudCB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IGxvZ29Ud2VlblJlZiA9IHVzZVJlZjxnc2FwLmNvcmUuVHdlZW4gfCBudWxsPihudWxsKTtcclxuICBjb25zdCBoYW1idXJnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKTtcclxuICBjb25zdCBtb2JpbGVNZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XHJcbiAgY29uc3QgbmF2SXRlbXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcclxuICBjb25zdCBsb2dvUmVmID0gdXNlUmVmPEhUTUxBbmNob3JFbGVtZW50IHwgbnVsbD4obnVsbCk7XHJcbiAgY29uc3QgaGFzQW5pbWF0ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgbGF5b3V0ID0gKCkgPT4ge1xyXG4gICAgICBjaXJjbGVSZWZzLmN1cnJlbnQuZm9yRWFjaChjaXJjbGUgPT4ge1xyXG4gICAgICAgIGlmICghY2lyY2xlPy5wYXJlbnRFbGVtZW50KSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcGlsbCA9IGNpcmNsZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSBwaWxsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IHcsIGhlaWdodDogaCB9ID0gcmVjdDtcclxuICAgICAgICBjb25zdCBSID0gKCh3ICogdykgLyA0ICsgaCAqIGgpIC8gKDIgKiBoKTtcclxuICAgICAgICBjb25zdCBEID0gTWF0aC5jZWlsKDIgKiBSKSArIDI7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLmNlaWwoUiAtIE1hdGguc3FydChNYXRoLm1heCgwLCBSICogUiAtICh3ICogdykgLyA0KSkpICsgMTtcclxuICAgICAgICBjb25zdCBvcmlnaW5ZID0gRCAtIGRlbHRhO1xyXG4gICAgICAgIGNpcmNsZS5zdHlsZS53aWR0aCA9IGAke0R9cHhgO1xyXG4gICAgICAgIGNpcmNsZS5zdHlsZS5oZWlnaHQgPSBgJHtEfXB4YDtcclxuICAgICAgICBjaXJjbGUuc3R5bGUuYm90dG9tID0gYC0ke2RlbHRhfXB4YDtcclxuICAgICAgICBnc2FwLnNldChjaXJjbGUsIHtcclxuICAgICAgICAgIHhQZXJjZW50OiAtNTAsXHJcbiAgICAgICAgICBzY2FsZTogMCxcclxuICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogYDUwJSAke29yaWdpbll9cHhgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBwaWxsLnF1ZXJ5U2VsZWN0b3IoJy5waWxsLWxhYmVsJyk7XHJcbiAgICAgICAgY29uc3Qgd2hpdGUgPSBwaWxsLnF1ZXJ5U2VsZWN0b3IoJy5waWxsLWxhYmVsLWhvdmVyJyk7XHJcbiAgICAgICAgaWYgKGxhYmVsKSBnc2FwLnNldChsYWJlbCwgeyB5OiAwIH0pO1xyXG4gICAgICAgIGlmICh3aGl0ZSkgZ3NhcC5zZXQod2hpdGUsIHsgeTogaCArIDEyLCBvcGFjaXR5OiAwIH0pO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2lyY2xlUmVmcy5jdXJyZW50LmluZGV4T2YoY2lyY2xlKTtcclxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XHJcbiAgICAgICAgdGxSZWZzLmN1cnJlbnRbaW5kZXhdPy5raWxsKCk7XHJcbiAgICAgICAgY29uc3QgdGwgPSBnc2FwLnRpbWVsaW5lKHsgcGF1c2VkOiB0cnVlIH0pO1xyXG4gICAgICAgIHRsLnRvKGNpcmNsZSwgeyBzY2FsZTogMS4yLCB4UGVyY2VudDogLTUwLCBkdXJhdGlvbjogMiwgZWFzZSwgb3ZlcndyaXRlOiAnYXV0bycgfSwgMCk7XHJcbiAgICAgICAgaWYgKGxhYmVsKSB7XHJcbiAgICAgICAgICB0bC50byhsYWJlbCwgeyB5OiAtKGggKyA4KSwgZHVyYXRpb246IDIsIGVhc2UsIG92ZXJ3cml0ZTogJ2F1dG8nIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2hpdGUpIHtcclxuICAgICAgICAgIGdzYXAuc2V0KHdoaXRlLCB7IHk6IE1hdGguY2VpbChoICsgMTAwKSwgb3BhY2l0eTogMCB9KTtcclxuICAgICAgICAgIHRsLnRvKHdoaXRlLCB7IHk6IDAsIG9wYWNpdHk6IDEsIGR1cmF0aW9uOiAyLCBlYXNlLCBvdmVyd3JpdGU6ICdhdXRvJyB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGxSZWZzLmN1cnJlbnRbaW5kZXhdID0gdGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBsYXlvdXQoKTtcclxuICAgIGNvbnN0IG9uUmVzaXplID0gKCkgPT4gbGF5b3V0KCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpO1xyXG4gICAgaWYgKGRvY3VtZW50LmZvbnRzPy5yZWFkeSkge1xyXG4gICAgICBkb2N1bWVudC5mb250cy5yZWFkeS50aGVuKGxheW91dCkuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWVudSA9IG1vYmlsZU1lbnVSZWYuY3VycmVudDtcclxuICAgIGlmIChtZW51KSB7XHJcbiAgICAgIGdzYXAuc2V0KG1lbnUsIHsgdmlzaWJpbGl0eTogJ2hpZGRlbicsIG9wYWNpdHk6IDAsIHNjYWxlWTogMSB9KTtcclxuICAgIH1cclxuICAgIGlmIChpbml0aWFsTG9hZEFuaW1hdGlvbiAmJiAhaGFzQW5pbWF0ZWRSZWYuY3VycmVudCkge1xyXG4gICAgICBjb25zdCBsb2dvRWwgPSBsb2dvUmVmLmN1cnJlbnQ7XHJcbiAgICAgIGNvbnN0IG5hdkl0ZW1zID0gbmF2SXRlbXNSZWYuY3VycmVudDtcclxuICAgICAgaWYgKGxvZ29FbCkge1xyXG4gICAgICAgIGdzYXAuc2V0KGxvZ29FbCwgeyBzY2FsZTogMCB9KTtcclxuICAgICAgICBnc2FwLnRvKGxvZ29FbCwge1xyXG4gICAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgICBkdXJhdGlvbjogMC42LFxyXG4gICAgICAgICAgZWFzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuYXZJdGVtcykge1xyXG4gICAgICAgIGdzYXAuc2V0KG5hdkl0ZW1zLCB7IHdpZHRoOiAwLCBvdmVyZmxvdzogJ2hpZGRlbicgfSk7XHJcbiAgICAgICAgZ3NhcC50byhuYXZJdGVtcywge1xyXG4gICAgICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLjYsXHJcbiAgICAgICAgICBlYXNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaGFzQW5pbWF0ZWRSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKG5hdkl0ZW1zUmVmLmN1cnJlbnQgJiYgIWhhc0FuaW1hdGVkUmVmLmN1cnJlbnQpIHtcclxuICAgICAgLy8gV2VubiBpbml0aWFsTG9hZEFuaW1hdGlvbiBmYWxzZSBpc3QsIHNldHplIGRpZSBJdGVtcyBzb2ZvcnQgYXVmIHNpY2h0YmFyXHJcbiAgICAgIGNvbnN0IG5hdkl0ZW1zID0gbmF2SXRlbXNSZWYuY3VycmVudDtcclxuICAgICAgZ3NhcC5zZXQobmF2SXRlbXMsIHsgd2lkdGg6ICdhdXRvJywgb3ZlcmZsb3c6ICd2aXNpYmxlJyB9KTtcclxuICAgICAgaWYgKGxvZ29SZWYuY3VycmVudCkge1xyXG4gICAgICAgIGdzYXAuc2V0KGxvZ29SZWYuY3VycmVudCwgeyBzY2FsZTogMSB9KTtcclxuICAgICAgfVxyXG4gICAgICBoYXNBbmltYXRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpO1xyXG4gIH0sIFtpdGVtcywgZWFzZV0pOyAvLyBpbml0aWFsTG9hZEFuaW1hdGlvbiBlbnRmZXJudCwgZGFtaXQgZXMgbnVyIGVpbm1hbCBsw6R1ZnRcclxuXHJcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSAoaTogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB0bCA9IHRsUmVmcy5jdXJyZW50W2ldO1xyXG4gICAgaWYgKCF0bCkgcmV0dXJuO1xyXG4gICAgYWN0aXZlVHdlZW5SZWZzLmN1cnJlbnRbaV0/LmtpbGwoKTtcclxuICAgIGFjdGl2ZVR3ZWVuUmVmcy5jdXJyZW50W2ldID0gdGwudHdlZW5Ubyh0bC5kdXJhdGlvbigpLCB7XHJcbiAgICAgIGR1cmF0aW9uOiAwLjMsXHJcbiAgICAgIGVhc2UsXHJcbiAgICAgIG92ZXJ3cml0ZTogJ2F1dG8nXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVMZWF2ZSA9IChpOiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHRsID0gdGxSZWZzLmN1cnJlbnRbaV07XHJcbiAgICBpZiAoIXRsKSByZXR1cm47XHJcbiAgICBhY3RpdmVUd2VlblJlZnMuY3VycmVudFtpXT8ua2lsbCgpO1xyXG4gICAgYWN0aXZlVHdlZW5SZWZzLmN1cnJlbnRbaV0gPSB0bC50d2VlblRvKDAsIHtcclxuICAgICAgZHVyYXRpb246IDAuMixcclxuICAgICAgZWFzZSxcclxuICAgICAgb3ZlcndyaXRlOiAnYXV0bydcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUxvZ29FbnRlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGltZyA9IGxvZ29JbWdSZWYuY3VycmVudDtcclxuICAgIGlmICghaW1nKSByZXR1cm47XHJcbiAgICBsb2dvVHdlZW5SZWYuY3VycmVudD8ua2lsbCgpO1xyXG4gICAgZ3NhcC5zZXQoaW1nLCB7IHJvdGF0ZTogMCB9KTtcclxuICAgIGxvZ29Ud2VlblJlZi5jdXJyZW50ID0gZ3NhcC50byhpbWcsIHtcclxuICAgICAgcm90YXRlOiAzNjAsXHJcbiAgICAgIGR1cmF0aW9uOiAwLjIsXHJcbiAgICAgIGVhc2UsXHJcbiAgICAgIG92ZXJ3cml0ZTogJ2F1dG8nXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBjb25zdCB0b2dnbGVNb2JpbGVNZW51ID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbmV3U3RhdGUgPSAhaXNNb2JpbGVNZW51T3BlbjtcclxuICAgIHNldElzTW9iaWxlTWVudU9wZW4obmV3U3RhdGUpO1xyXG4gICAgY29uc3QgaGFtYnVyZ2VyID0gaGFtYnVyZ2VyUmVmLmN1cnJlbnQ7XHJcbiAgICBjb25zdCBtZW51ID0gbW9iaWxlTWVudVJlZi5jdXJyZW50O1xyXG4gICAgaWYgKGhhbWJ1cmdlcikge1xyXG4gICAgICBjb25zdCBsaW5lcyA9IGhhbWJ1cmdlci5xdWVyeVNlbGVjdG9yQWxsKCcuaGFtYnVyZ2VyLWxpbmUnKTtcclxuICAgICAgaWYgKG5ld1N0YXRlKSB7XHJcbiAgICAgICAgZ3NhcC50byhsaW5lc1swXSwgeyByb3RhdGlvbjogNDUsIHk6IDMsIGR1cmF0aW9uOiAwLjMsIGVhc2UgfSk7XHJcbiAgICAgICAgZ3NhcC50byhsaW5lc1sxXSwgeyByb3RhdGlvbjogLTQ1LCB5OiAtMywgZHVyYXRpb246IDAuMywgZWFzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnc2FwLnRvKGxpbmVzWzBdLCB7IHJvdGF0aW9uOiAwLCB5OiAwLCBkdXJhdGlvbjogMC4zLCBlYXNlIH0pO1xyXG4gICAgICAgIGdzYXAudG8obGluZXNbMV0sIHsgcm90YXRpb246IDAsIHk6IDAsIGR1cmF0aW9uOiAwLjMsIGVhc2UgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChtZW51KSB7XHJcbiAgICAgIGlmIChuZXdTdGF0ZSkge1xyXG4gICAgICAgIGdzYXAuc2V0KG1lbnUsIHsgdmlzaWJpbGl0eTogJ3Zpc2libGUnIH0pO1xyXG4gICAgICAgIGdzYXAuZnJvbVRvKFxyXG4gICAgICAgICAgbWVudSxcclxuICAgICAgICAgIHsgb3BhY2l0eTogMCwgeTogMTAsIHNjYWxlWTogMSB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICBzY2FsZVk6IDEsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAwLjMsXHJcbiAgICAgICAgICAgIGVhc2UsXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBjZW50ZXInXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnc2FwLnRvKG1lbnUsIHtcclxuICAgICAgICAgIG9wYWNpdHk6IDAsXHJcbiAgICAgICAgICB5OiAxMCxcclxuICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLjIsXHJcbiAgICAgICAgICBlYXNlLFxyXG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGNlbnRlcicsXHJcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGdzYXAuc2V0KG1lbnUsIHsgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIG9uTW9iaWxlTWVudUNsaWNrPy4oKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBpc0V4dGVybmFsTGluayA9IChocmVmOiBzdHJpbmcpID0+XHJcbiAgICBocmVmLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fFxyXG4gICAgaHJlZi5zdGFydHNXaXRoKCdodHRwczovLycpIHx8XHJcbiAgICBocmVmLnN0YXJ0c1dpdGgoJy8vJykgfHxcclxuICAgIGhyZWYuc3RhcnRzV2l0aCgnbWFpbHRvOicpIHx8XHJcbiAgICBocmVmLnN0YXJ0c1dpdGgoJ3RlbDonKSB8fFxyXG4gICAgaHJlZi5zdGFydHNXaXRoKCcjJyk7XHJcblxyXG4gIGNvbnN0IGNzc1ZhcnMgPSB7XHJcbiAgICBbJy0tYmFzZSddOiBiYXNlQ29sb3IsXHJcbiAgICBbJy0tcGlsbC1iZyddOiBwaWxsQ29sb3IsXHJcbiAgICBbJy0taG92ZXItdGV4dCddOiBob3ZlcmVkUGlsbFRleHRDb2xvcixcclxuICAgIFsnLS1waWxsLXRleHQnXTogcmVzb2x2ZWRQaWxsVGV4dENvbG9yXHJcbiAgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwaWxsLW5hdi1jb250YWluZXJcIj5cclxuICAgICAgPG5hdiBjbGFzc05hbWU9e2BwaWxsLW5hdiAke2NsYXNzTmFtZX1gfSBhcmlhLWxhYmVsPVwiUHJpbWFyeVwiIHN0eWxlPXtjc3NWYXJzfT5cclxuICAgICAgICB7bG9nbyAmJiAoXHJcbiAgICAgICAgICA8TGlua1xyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwaWxsLWxvZ29cIlxyXG4gICAgICAgICAgICBocmVmPVwiI1wiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIb21lXCJcclxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXtoYW5kbGVMb2dvRW50ZXJ9XHJcbiAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgICAgIHJlZj17bG9nb1JlZn1cclxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcclxuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbWcgc3JjPXtsb2dvfSBhbHQ9e2xvZ29BbHR9IHJlZj17bG9nb0ltZ1JlZn0gLz5cclxuICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGlsbC1uYXYtaXRlbXMgZGVza3RvcC1vbmx5XCIgcmVmPXtuYXZJdGVtc1JlZn0+XHJcbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwicGlsbC1saXN0XCIgcm9sZT1cIm1lbnViYXJcIj5cclxuICAgICAgICAgICAge2l0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gKFxyXG4gICAgICAgICAgICAgIDxsaSBrZXk9e2l0ZW0uaHJlZiB8fCBgaXRlbS0ke2l9YH0gcm9sZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIHtpc0V4dGVybmFsTGluayhpdGVtLmhyZWYpID8gKFxyXG4gICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj17aXRlbS5ocmVmfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHBpbGwke2FjdGl2ZUhyZWYgPT09IGl0ZW0uaHJlZiA/ICcgaXMtYWN0aXZlJyA6ICcnfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17aXRlbS5hcmlhTGFiZWwgfHwgaXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IGhhbmRsZUVudGVyKGkpfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gaGFuZGxlTGVhdmUoaSl9XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXItY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICByZWY9e2VsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlUmVmcy5jdXJyZW50W2ldID0gZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWwtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInBpbGwtbGFiZWxcIj57aXRlbS5sYWJlbH08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJwaWxsLWxhYmVsLWhvdmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BwaWxsJHthY3RpdmVIcmVmID09PSBpdGVtLmhyZWYgPyAnIGlzLWFjdGl2ZScgOiAnJ31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2l0ZW0uYXJpYUxhYmVsIHx8IGl0ZW0ubGFiZWx9XHJcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBoYW5kbGVFbnRlcihpKX1cclxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IGhhbmRsZUxlYXZlKGkpfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5ocmVmLnN0YXJ0c1dpdGgoJyMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpdGVtLmhyZWYuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlci1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17ZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGVSZWZzLmN1cnJlbnRbaV0gPSBlbDtcclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbC1zdGFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicGlsbC1sYWJlbFwiPntpdGVtLmxhYmVsfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInBpbGwtbGFiZWwtaG92ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0ubGFiZWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJtb2JpbGUtbWVudS1idXR0b24gbW9iaWxlLW9ubHlcIlxyXG4gICAgICAgICAgb25DbGljaz17dG9nZ2xlTW9iaWxlTWVudX1cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgbWVudVwiXHJcbiAgICAgICAgICByZWY9e2hhbWJ1cmdlclJlZn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYW1idXJnZXItbGluZVwiIC8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYW1idXJnZXItbGluZVwiIC8+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmF2PlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vYmlsZS1tZW51LXBvcG92ZXIgbW9iaWxlLW9ubHlcIiByZWY9e21vYmlsZU1lbnVSZWZ9IHN0eWxlPXtjc3NWYXJzfT5cclxuICAgICAgICA8dWwgY2xhc3NOYW1lPVwibW9iaWxlLW1lbnUtbGlzdFwiPlxyXG4gICAgICAgICAge2l0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gKFxyXG4gICAgICAgICAgICA8bGkga2V5PXtpdGVtLmhyZWYgfHwgYG1vYmlsZS1pdGVtLSR7aX1gfT5cclxuICAgICAgICAgICAgICB7aXNFeHRlcm5hbExpbmsoaXRlbS5ocmVmKSA/IChcclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbW9iaWxlLW1lbnUtbGluayR7YWN0aXZlSHJlZiA9PT0gaXRlbS5ocmVmID8gJyBpcy1hY3RpdmUnIDogJyd9YH1cclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNNb2JpbGVNZW51T3BlbihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8TGlua1xyXG4gICAgICAgICAgICAgICAgICBocmVmPXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YG1vYmlsZS1tZW51LWxpbmske2FjdGl2ZUhyZWYgPT09IGl0ZW0uaHJlZiA/ICcgaXMtYWN0aXZlJyA6ICcnfWB9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJc01vYmlsZU1lbnVPcGVuKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5ocmVmLnN0YXJ0c1dpdGgoJyMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGl0ZW0uaHJlZi5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgPC9MaW5rPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICApKX1cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQaWxsTmF2O1xyXG5cclxuIl0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiTGluayIsImdzYXAiLCJQaWxsTmF2IiwibG9nbyIsImxvZ29BbHQiLCJpdGVtcyIsImFjdGl2ZUhyZWYiLCJjbGFzc05hbWUiLCJlYXNlIiwiYmFzZUNvbG9yIiwicGlsbENvbG9yIiwiaG92ZXJlZFBpbGxUZXh0Q29sb3IiLCJwaWxsVGV4dENvbG9yIiwib25Nb2JpbGVNZW51Q2xpY2siLCJpbml0aWFsTG9hZEFuaW1hdGlvbiIsInJlc29sdmVkUGlsbFRleHRDb2xvciIsImlzTW9iaWxlTWVudU9wZW4iLCJzZXRJc01vYmlsZU1lbnVPcGVuIiwiY2lyY2xlUmVmcyIsInRsUmVmcyIsImFjdGl2ZVR3ZWVuUmVmcyIsImxvZ29JbWdSZWYiLCJsb2dvVHdlZW5SZWYiLCJoYW1idXJnZXJSZWYiLCJtb2JpbGVNZW51UmVmIiwibmF2SXRlbXNSZWYiLCJsb2dvUmVmIiwiaGFzQW5pbWF0ZWRSZWYiLCJkb2N1bWVudCIsImxheW91dCIsImN1cnJlbnQiLCJmb3JFYWNoIiwiY2lyY2xlIiwicGFyZW50RWxlbWVudCIsInBpbGwiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJ3IiwiaGVpZ2h0IiwiaCIsIlIiLCJEIiwiTWF0aCIsImNlaWwiLCJkZWx0YSIsInNxcnQiLCJtYXgiLCJvcmlnaW5ZIiwic3R5bGUiLCJib3R0b20iLCJzZXQiLCJ4UGVyY2VudCIsInNjYWxlIiwidHJhbnNmb3JtT3JpZ2luIiwibGFiZWwiLCJxdWVyeVNlbGVjdG9yIiwid2hpdGUiLCJ5Iiwib3BhY2l0eSIsImluZGV4IiwiaW5kZXhPZiIsImtpbGwiLCJ0bCIsInRpbWVsaW5lIiwicGF1c2VkIiwidG8iLCJkdXJhdGlvbiIsIm92ZXJ3cml0ZSIsIm9uUmVzaXplIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImZvbnRzIiwicmVhZHkiLCJ0aGVuIiwiY2F0Y2giLCJtZW51IiwidmlzaWJpbGl0eSIsInNjYWxlWSIsImxvZ29FbCIsIm5hdkl0ZW1zIiwib3ZlcmZsb3ciLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlRW50ZXIiLCJpIiwidHdlZW5UbyIsImhhbmRsZUxlYXZlIiwiaGFuZGxlTG9nb0VudGVyIiwiaW1nIiwicm90YXRlIiwidG9nZ2xlTW9iaWxlTWVudSIsIm5ld1N0YXRlIiwiaGFtYnVyZ2VyIiwibGluZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwicm90YXRpb24iLCJmcm9tVG8iLCJvbkNvbXBsZXRlIiwiaXNFeHRlcm5hbExpbmsiLCJocmVmIiwic3RhcnRzV2l0aCIsImNzc1ZhcnMiLCJkaXYiLCJuYXYiLCJhcmlhLWxhYmVsIiwib25Nb3VzZUVudGVyIiwicm9sZSIsInJlZiIsIm9uQ2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJzY3JvbGxUbyIsInRvcCIsImJlaGF2aW9yIiwic3JjIiwiYWx0IiwidWwiLCJtYXAiLCJpdGVtIiwibGkiLCJhIiwiYXJpYUxhYmVsIiwib25Nb3VzZUxlYXZlIiwic3BhbiIsImFyaWEtaGlkZGVuIiwiZWwiLCJlbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJzdWJzdHJpbmciLCJzY3JvbGxJbnRvVmlldyIsImJ1dHRvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/PillNav.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/PriceCalculator.tsx": /*!****************************************!*\ !*** ./components/PriceCalculator.tsx ***! \****************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ PriceCalculator; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_checkbox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/checkbox */ \"(app-pages-browser)/./components/ui/checkbox.tsx\");\n/* harmony import */ var _components_ui_textarea__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/textarea */ \"(app-pages-browser)/./components/ui/textarea.tsx\");\n/* harmony import */ var _components_ui_collapsible__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/collapsible */ \"(app-pages-browser)/./components/ui/collapsible.tsx\");\n/* harmony import */ var _components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/ui/tooltip */ \"(app-pages-browser)/./components/ui/tooltip.tsx\");\n/* harmony import */ var _barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Calculator,ChevronDown,ChevronUp,Loader2,Info,HelpCircle!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calculator.js\");\n/* harmony import */ var _barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=Calculator,ChevronDown,ChevronUp,Loader2,Info,HelpCircle!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/chevron-up.js\");\n/* harmony import */ var _barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=Calculator,ChevronDown,ChevronUp,Loader2,Info,HelpCircle!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/chevron-down.js\");\n/* harmony import */ var _barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=Calculator,ChevronDown,ChevronUp,Loader2,Info,HelpCircle!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-help.js\");\n/* harmony import */ var _barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=Calculator,ChevronDown,ChevronUp,Loader2,Info,HelpCircle!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/info.js\");\n/* harmony import */ var _barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=Calculator,ChevronDown,ChevronUp,Loader2,Info,HelpCircle!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\n\nconst services = [\n {\n id: \"seo\",\n label: \"SEO-Optimierung\",\n tooltip: \"Suchmaschinenoptimierung f\\xfcr bessere Sichtbarkeit in Google & Co.\"\n },\n {\n id: \"database\",\n label: \"Datenbank-Anbindung\",\n tooltip: \"Verbindung zu bestehenden Datenbanken oder neue Datenbankstrukturen\"\n },\n {\n id: \"ai\",\n label: \"KI-Integration\",\n tooltip: \"K\\xfcnstliche Intelligenz f\\xfcr Chatbots, Empfehlungssysteme oder Automatisierung\"\n },\n {\n id: \"responsive\",\n label: \"Responsives Design\",\n tooltip: \"Optimale Darstellung auf allen Ger\\xe4ten: Desktop, Tablet, Smartphone\"\n },\n {\n id: \"social\",\n label: \"Social-Media-Verkn\\xfcpfung\",\n tooltip: \"Integration von Social Media Feeds und Sharing-Funktionen\"\n },\n {\n id: \"payment\",\n label: \"Zahlungsmethoden\",\n tooltip: \"Sichere Online-Zahlungen mit PayPal, Kreditkarte, SEPA & Co.\"\n },\n {\n id: \"analytics\",\n label: \"Nutzeranalyse & Tracking\",\n tooltip: \"Google Analytics, Conversion-Tracking und detaillierte Besucherstatistiken\"\n },\n {\n id: \"domain\",\n label: \"Domainverwaltung\",\n tooltip: \"Professionelle Domain-Einrichtung und DNS-Konfiguration\"\n },\n {\n id: \"strategy\",\n label: \"Strategieberatung\",\n tooltip: \"Digitale Strategie, Zielgruppenanalyse und Wettbewerbsanalyse\"\n },\n {\n id: \"app\",\n label: \"App-Entwicklung\",\n tooltip: \"Native oder Progressive Web Apps f\\xfcr iOS und Android\"\n }\n];\nconst subscriptionServices = [\n {\n id: \"content\",\n label: \"Content-Pflege\",\n tooltip: \"Regelm\\xe4\\xdfige Aktualisierung von Texten, Bildern und Inhalten\"\n },\n {\n id: \"newsletter\",\n label: \"Newsletter-Versand & Pflege\",\n tooltip: \"Professionelle Newsletter-Erstellung, Versand und Analyse\"\n },\n {\n id: \"landingpage\",\n label: \"Landingpage-Erstellung (1x/Monat)\",\n tooltip: \"Conversion-optimierte Landingpages f\\xfcr Kampagnen und Aktionen\"\n },\n {\n id: \"blog\",\n label: \"Blog-Pflege\",\n tooltip: \"Regelm\\xe4\\xdfige Blogartikel, SEO-Optimierung und Community-Management\"\n },\n {\n id: \"domain_redirects\",\n label: \"Domainverwaltung & Umleitungen\",\n tooltip: \"Professionelle Domain-Verwaltung, Weiterleitungen und DNS-Management\"\n }\n];\nfunction PriceCalculator(param) {\n let { onPriceCalculated } = param;\n _s();\n const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n pages: 1,\n services: [],\n express: false,\n subscription: [],\n specialRequirements: \"\"\n });\n const [result, setResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const handleServiceChange = (serviceId, checked)=>{\n setFormData((prev)=>({\n ...prev,\n services: checked ? [\n ...prev.services,\n serviceId\n ] : prev.services.filter((id)=>id !== serviceId)\n }));\n };\n const handleSubscriptionChange = (serviceId, checked)=>{\n setFormData((prev)=>({\n ...prev,\n subscription: checked ? [\n ...prev.subscription,\n serviceId\n ] : prev.subscription.filter((id)=>id !== serviceId)\n }));\n };\n const generatePrompt = ()=>{\n const selectedServices = services.filter((service)=>formData.services.includes(service.id));\n const selectedSubscriptions = subscriptionServices.filter((service)=>formData.subscription.includes(service.id));\n const additionalServices = selectedServices.length > 0 ? selectedServices.map((s)=>s.label).join(\", \") : \"Keine zus\\xe4tzlichen Leistungen ausgew\\xe4hlt\";\n const ongoingServices = selectedSubscriptions.length > 0 ? selectedSubscriptions.map((s)=>s.label).join(\", \") : \"Keine laufenden Services ausgew\\xe4hlt\";\n return \"Du bist eine intelligente Webprojekt-KI, die Kunden bei der Preisabsch\\xe4tzung f\\xfcr professionelle Websites unterst\\xfctzt. Analysiere die vom Kunden angegebenen W\\xfcnsche und gib einen gesch\\xe4tzten Preisrahmen in Euro aus, basierend auf Komplexit\\xe4t, Umfang und Zusatzleistungen.\\n\\nWichtige Regeln:\\n– Die Basiswebsite beginnt bei 300 €\\n– Mehr Seiten erh\\xf6hen den Preis moderat\\n– Express-Lieferung kostet +30 % Aufpreis\\n– Je mehr Leistungen ausgew\\xe4hlt werden, desto effizienter kann gearbeitet werden ⇒ kleine Mengenrabatte m\\xf6glich\\n– Laufende Services bedeuten monatliche Zusatzkosten (nicht im Grundpreis enthalten)\\n– Alle Preise sind unverbindliche Sch\\xe4tzungen\\n\\nZiel: Der Kunde soll eine ehrliche und transparente Einsch\\xe4tzung bekommen – nicht zu hoch, aber auch nicht unter Wert.\\n\\n⸻\\n\\nKundeneingaben\\nSeitenanzahl: \".concat(formData.pages, \"\\n\\nZus\\xe4tzliche Leistungen:\\n\").concat(additionalServices, \"\\n\\nLaufende Services:\\n\").concat(ongoingServices, \"\\n\\nExpress-Lieferung gew\\xfcnscht?\\n\").concat(formData.express ? \"Ja\" : \"Nein\", \"\\n\\nBesondere W\\xfcnsche / Anforderungen:\\n\").concat(formData.specialRequirements || \"Keine besonderen W\\xfcnsche angegeben\", \"\\n\\n⸻\\n\\nBitte liefere als Antwort:\\n– Eine realistische Preisspanne in Euro (z. B. 750–950 €)\\n– Eine kurze Begr\\xfcndung (1–2 S\\xe4tze)\\n– Hinweis auf Beratungsgespr\\xe4ch f\\xfcr verbindliches Angebot\");\n };\n const calculateLocalPrice = ()=>{\n let basePrice = 300; // Basis-Website\n // Preis pro Seite (ab der 2. Seite)\n if (formData.pages > 1) {\n basePrice += (formData.pages - 1) * 50;\n }\n // Zusatzleistungen\n const selectedServices = services.filter((service)=>formData.services.includes(service.id));\n const servicePrices = {\n \"seo\": 150,\n \"database\": 200,\n \"ai\": 300,\n \"responsive\": 100,\n \"social\": 80,\n \"payment\": 120,\n \"analytics\": 90,\n \"domain\": 60,\n \"strategy\": 180,\n \"app\": 400\n };\n let servicesCost = 0;\n selectedServices.forEach((service)=>{\n servicesCost += servicePrices[service.id] || 0;\n });\n // Mengenrabatt für mehrere Leistungen\n if (selectedServices.length > 2) {\n servicesCost *= 0.9; // 10% Rabatt ab 3 Leistungen\n }\n // Express-Lieferung\n let totalPrice = basePrice + servicesCost;\n if (formData.express) {\n totalPrice *= 1.3; // +30% für Express\n }\n // Preisspanne (10% Variation)\n const variation = totalPrice * 0.1;\n const minPrice = Math.round(totalPrice - variation);\n const maxPrice = Math.round(totalPrice + variation);\n return {\n price: \"\".concat(minPrice, \"–\").concat(maxPrice, \"€\"),\n details: \"Basierend auf \".concat(formData.pages, \" Seiten und \").concat(selectedServices.length, \" Zusatzleistungen. \").concat(formData.express ? \"Express-Lieferung inklusive.\" : \"\")\n };\n };\n const calculatePrice = async ()=>{\n setIsLoading(true);\n try {\n var _data_choices__message, _data_choices_, _data_choices, _data_choices_1, _data_choices1;\n const prompt = generatePrompt();\n console.log(\"Sending API request with prompt:\", prompt);\n const response = await fetch(\"/api/calculate-price\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n prompt: prompt\n })\n });\n console.log(\"Response status:\", response.status);\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"API Error Response:\", errorText);\n // Fallback zur lokalen Preisberechnung\n console.log(\"Using local price calculation as fallback\");\n const localResult = calculateLocalPrice();\n setResult(localResult);\n onPriceCalculated === null || onPriceCalculated === void 0 ? void 0 : onPriceCalculated(localResult.price, localResult.details);\n return;\n }\n const data = await response.json();\n console.log(\"API Response data:\", data);\n const aiResponse = ((_data_choices = data.choices) === null || _data_choices === void 0 ? void 0 : (_data_choices_ = _data_choices[0]) === null || _data_choices_ === void 0 ? void 0 : (_data_choices__message = _data_choices_.message) === null || _data_choices__message === void 0 ? void 0 : _data_choices__message.content) || ((_data_choices1 = data.choices) === null || _data_choices1 === void 0 ? void 0 : (_data_choices_1 = _data_choices1[0]) === null || _data_choices_1 === void 0 ? void 0 : _data_choices_1.text) || \"Preis konnte nicht berechnet werden\";\n console.log(\"AI Response:\", aiResponse);\n // Extract price range and details\n const priceMatch = aiResponse.match(/(\\d+[-–]\\d+€)/);\n const price = priceMatch ? priceMatch[1] : \"Preis auf Anfrage\";\n const details = aiResponse.replace((priceMatch === null || priceMatch === void 0 ? void 0 : priceMatch[0]) || \"\", \"\").trim();\n const result = {\n price,\n details\n };\n setResult(result);\n onPriceCalculated === null || onPriceCalculated === void 0 ? void 0 : onPriceCalculated(price, details);\n } catch (error) {\n console.error(\"Error calculating price:\", error);\n // Fallback zur lokalen Preisberechnung\n console.log(\"Using local price calculation as fallback due to error\");\n const localResult = calculateLocalPrice();\n setResult(localResult);\n onPriceCalculated === null || onPriceCalculated === void 0 ? void 0 : onPriceCalculated(localResult.price, localResult.details);\n } finally{\n setIsLoading(false);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-4xl mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_collapsible__WEBPACK_IMPORTED_MODULE_5__.Collapsible, {\n open: isOpen,\n onOpenChange: setIsOpen,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_collapsible__WEBPACK_IMPORTED_MODULE_5__.CollapsibleTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n size: \"lg\",\n className: \"w-full px-8 py-4 rounded-full text-lg font-semibold shadow-xl hover:scale-105 transition-all duration-300 flex items-center justify-center space-x-2\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 297,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Preis kalkulieren\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 298,\n columnNumber: 13\n }, this),\n isOpen ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 299,\n columnNumber: 23\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 299,\n columnNumber: 59\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 289,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 288,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_collapsible__WEBPACK_IMPORTED_MODULE_5__.CollapsibleContent, {\n className: \"mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative overflow-hidden rounded-3xl shadow-2xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-8 sm:p-12\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background, \"F0\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-2xl sm:text-3xl font-bold mb-8 text-center\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: \"Kalkuliere deinen individuellen Preis mit wenigen Klicks\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 307,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-lg font-semibold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: [\n \"Anzahl der Seiten: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.secondary\n },\n children: formData.pages\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 315,\n columnNumber: 40\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 314,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"range\",\n min: \"1\",\n max: \"10\",\n value: formData.pages,\n onChange: (e)=>setFormData((prev)=>({\n ...prev,\n pages: parseInt(e.target.value)\n })),\n className: \"flex-1 h-3 rounded-lg appearance-none cursor-pointer\",\n style: {\n background: \"linear-gradient(to right, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.secondary, \" 0%, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.secondary, \" \").concat((formData.pages - 1) * 11.11, \"%, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary, \" \").concat((formData.pages - 1) * 11.11, \"%, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary, \" 100%)\")\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 318,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-lg font-bold min-w-[3rem] text-center\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.secondary\n },\n children: formData.pages\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 329,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 317,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between text-sm mt-2\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"1\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 334,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"10\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 335,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 333,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-lg font-semibold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: \"Zus\\xe4tzliche Leistungen\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 341,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-4\",\n children: services.map((service)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.TooltipProvider, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.Tooltip, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.TooltipTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 p-3 rounded-lg hover:bg-white/20 transition-colors cursor-pointer\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_checkbox__WEBPACK_IMPORTED_MODULE_3__.Checkbox, {\n id: service.id,\n checked: formData.services.includes(service.id),\n onCheckedChange: (checked)=>handleServiceChange(service.id, checked),\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 350,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: service.id,\n className: \"text-lg cursor-pointer flex-1\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: service.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 356,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"w-4 h-4 opacity-60\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.secondary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 359,\n columnNumber: 31\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 349,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 348,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.TooltipContent, {\n className: \"max-w-xs\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: service.tooltip\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 363,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 362,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 347,\n columnNumber: 25\n }, this)\n }, service.id, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 346,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 344,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 340,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 p-4 rounded-lg hover:bg-white/20 transition-colors\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_checkbox__WEBPACK_IMPORTED_MODULE_3__.Checkbox, {\n id: \"express\",\n checked: formData.express,\n onCheckedChange: (checked)=>setFormData((prev)=>({\n ...prev,\n express: checked\n })),\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 373,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"express\",\n className: \"text-lg cursor-pointer\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: \"Express-Lieferung\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 379,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 372,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-lg font-semibold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: \"Laufende Services (optional)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 386,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: subscriptionServices.map((service)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.TooltipProvider, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.Tooltip, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.TooltipTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3 p-3 rounded-lg hover:bg-white/20 transition-colors cursor-pointer\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_checkbox__WEBPACK_IMPORTED_MODULE_3__.Checkbox, {\n id: service.id,\n checked: formData.subscription.includes(service.id),\n onCheckedChange: (checked)=>handleSubscriptionChange(service.id, checked),\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 395,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: service.id,\n className: \"text-lg cursor-pointer flex-1\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: service.label\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 401,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"w-4 h-4 opacity-60\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.secondary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 404,\n columnNumber: 31\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 394,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 393,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_tooltip__WEBPACK_IMPORTED_MODULE_6__.TooltipContent, {\n className: \"max-w-xs\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: service.tooltip\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 408,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 407,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 392,\n columnNumber: 25\n }, this)\n }, service.id, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 391,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 389,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 385,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 306,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative h-8\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background, \"F0\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"absolute bottom-0 w-full h-full\",\n viewBox: \"0 0 1200 120\",\n preserveAspectRatio: \"none\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M0,0 C300,120 900,120 1200,0 L1200,120 L0,120 Z\",\n fill: \"currentColor\",\n fillOpacity: \"0.1\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 426,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 420,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 419,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-8 sm:p-12\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary, \"F0\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-lg font-semibold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background\n },\n children: \"Haben Sie besondere W\\xfcnsche oder Anforderungen (optional, nicht verpflichtend)?\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 439,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_textarea__WEBPACK_IMPORTED_MODULE_4__.Textarea, {\n value: formData.specialRequirements,\n onChange: (e)=>setFormData((prev)=>({\n ...prev,\n specialRequirements: e.target.value\n })),\n placeholder: \"Welche Funktionen oder Strukturen sind Ihnen wichtig? Beispiele: Mitgliederbereich, Projektverwaltung, dynamischer Produktfilter, interne Datenbankpflege, mehrsprachige Inhalte.\",\n className: \"w-full p-4 text-lg resize-none\",\n rows: 4,\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background, \"20\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 442,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 438,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-lg\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background, \"20\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"w-5 h-5 mt-1 flex-shrink-0\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 459,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background\n },\n children: \"Diese Leistungen sind bei jeder Website automatisch enthalten: Hosting, Wartung, technischer Support, SEO-Grundoptimierung, Performance-Check und eine pers\\xf6nliche Quartalsberatung.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 460,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 458,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 457,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: calculatePrice,\n disabled: isLoading,\n size: \"lg\",\n className: \"w-full px-8 py-4 rounded-full text-lg font-semibold shadow-xl hover:scale-105 transition-all duration-300 flex items-center justify-center space-x-2\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary,\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.primary\n },\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"w-5 h-5 animate-spin\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 479,\n columnNumber: 23\n }, this),\n \"Berechne Preis...\"\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Calculator_ChevronDown_ChevronUp_Loader2_Info_HelpCircle_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 484,\n columnNumber: 23\n }, this),\n \"Preis berechnen\"\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 467,\n columnNumber: 17\n }, this),\n result && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 p-6 rounded-xl border-2\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary, \"20\"),\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"text-xl font-semibold mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary\n },\n children: [\n \"Gesch\\xe4tzter Preis: \",\n result.price\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 497,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background\n },\n children: result.details\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 500,\n columnNumber: 21\n }, this),\n formData.subscription.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-lg font-medium mb-4\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.tertiary\n },\n children: \"+200€/Monat f\\xfcr laufende Services\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 504,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_7__.colors.background\n },\n children: \"Dies ist ein Richtwert. Im Beratungsgespr\\xe4ch kl\\xe4ren wir alle Details und finden eine L\\xf6sung, die zu Ihrem Budget passt.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 508,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 492,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 436,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 435,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 304,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 303,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 287,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\PriceCalculator.tsx\",\n lineNumber: 286,\n columnNumber: 5\n }, this);\n}\n_s(PriceCalculator, \"ZVSMe2R3kwpWXiMdX/CUWYBBx1c=\");\n_c = PriceCalculator;\nvar _c;\n$RefreshReg$(_c, \"PriceCalculator\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvUHJpY2VDYWxjdWxhdG9yLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDaUM7QUFDZTtBQUNJO0FBQ0E7QUFDOEM7QUFDQztBQUNOO0FBQ3ZEO0FBTXRDLE1BQU1rQixXQUFXO0lBQ2Y7UUFDRUMsSUFBSTtRQUNKQyxPQUFPO1FBQ1BDLFNBQVM7SUFDWDtJQUNBO1FBQ0VGLElBQUk7UUFDSkMsT0FBTztRQUNQQyxTQUFTO0lBQ1g7SUFDQTtRQUNFRixJQUFJO1FBQ0pDLE9BQU87UUFDUEMsU0FBUztJQUNYO0lBQ0E7UUFDRUYsSUFBSTtRQUNKQyxPQUFPO1FBQ1BDLFNBQVM7SUFDWDtJQUNBO1FBQ0VGLElBQUk7UUFDSkMsT0FBTztRQUNQQyxTQUFTO0lBQ1g7SUFDQTtRQUNFRixJQUFJO1FBQ0pDLE9BQU87UUFDUEMsU0FBUztJQUNYO0lBQ0E7UUFDRUYsSUFBSTtRQUNKQyxPQUFPO1FBQ1BDLFNBQVM7SUFDWDtJQUNBO1FBQ0VGLElBQUk7UUFDSkMsT0FBTztRQUNQQyxTQUFTO0lBQ1g7SUFDQTtRQUNFRixJQUFJO1FBQ0pDLE9BQU87UUFDUEMsU0FBUztJQUNYO0lBQ0E7UUFDRUYsSUFBSTtRQUNKQyxPQUFPO1FBQ1BDLFNBQVM7SUFDWDtDQUNEO0FBRUQsTUFBTUMsdUJBQXVCO0lBQzNCO1FBQ0VILElBQUk7UUFDSkMsT0FBTztRQUNQQyxTQUFTO0lBQ1g7SUFDQTtRQUNFRixJQUFJO1FBQ0pDLE9BQU87UUFDUEMsU0FBUztJQUNYO0lBQ0E7UUFDRUYsSUFBSTtRQUNKQyxPQUFPO1FBQ1BDLFNBQVM7SUFDWDtJQUNBO1FBQ0VGLElBQUk7UUFDSkMsT0FBTztRQUNQQyxTQUFTO0lBQ1g7SUFDQTtRQUNFRixJQUFJO1FBQ0pDLE9BQU87UUFDUEMsU0FBUztJQUNYO0NBQ0Q7QUFFYyxTQUFTRSxnQkFBZ0IsS0FBMkM7UUFBM0MsRUFBRUMsaUJBQWlCLEVBQXdCLEdBQTNDOztJ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b0RBQTJCSyxPQUFPO3dEQUFFRyxPQUFPdEYsK0NBQU1BLENBQUNvRyxRQUFRO29EQUFDOzhEQUFHOzs7Ozs7OERBSTdFLDhEQUFDRztvREFBRXpCLFdBQVU7b0RBQVVLLE9BQU87d0RBQUVHLE9BQU90RiwrQ0FBTUEsQ0FBQ3VGLFVBQVU7b0RBQUM7OERBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVloRjtHQXhhd0JqRjtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL1ByaWNlQ2FsY3VsYXRvci50c3g/NmY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCc7XHJcbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RleHRhcmVhJztcclxuaW1wb3J0IHsgQ29sbGFwc2libGUsIENvbGxhcHNpYmxlQ29udGVudCwgQ29sbGFwc2libGVUcmlnZ2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NvbGxhcHNpYmxlJztcclxuaW1wb3J0IHsgVG9vbHRpcCwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBQcm92aWRlciwgVG9vbHRpcFRyaWdnZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdG9vbHRpcCc7XHJcbmltcG9ydCB7IENhbGN1bGF0b3IsIENoZXZyb25Eb3duLCBDaGV2cm9uVXAsIExvYWRlcjIsIEluZm8sIEhlbHBDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xyXG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICdAL2xpYi9jb2xvcnMnO1xyXG5cclxuaW50ZXJmYWNlIFByaWNlQ2FsY3VsYXRvclByb3BzIHtcclxuICBvblByaWNlQ2FsY3VsYXRlZD86IChwcmljZTogc3RyaW5nLCBkZXRhaWxzOiBzdHJpbmcpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmNvbnN0IHNlcnZpY2VzID0gW1xyXG4gIHsgXHJcbiAgICBpZDogJ3NlbycsIFxyXG4gICAgbGFiZWw6ICdTRU8tT3B0aW1pZXJ1bmcnLFxyXG4gICAgdG9vbHRpcDogJ1N1Y2htYXNjaGluZW5vcHRpbWllcnVuZyBmw7xyIGJlc3NlcmUgU2ljaHRiYXJrZWl0IGluIEdvb2dsZSAmIENvLidcclxuICB9LFxyXG4gIHsgXHJcbiAgICBpZDogJ2RhdGFiYXNlJywgXHJcbiAgICBsYWJlbDogJ0RhdGVuYmFuay1BbmJpbmR1bmcnLFxyXG4gICAgdG9vbHRpcDogJ1ZlcmJpbmR1bmcgenUgYmVzdGVoZW5kZW4gRGF0ZW5iYW5rZW4gb2RlciBuZXVlIERhdGVuYmFua3N0cnVrdHVyZW4nXHJcbiAgfSxcclxuICB7IFxyXG4gICAgaWQ6ICdhaScsIFxyXG4gICAgbGFiZWw6ICdLSS1JbnRlZ3JhdGlvbicsXHJcbiAgICB0b29sdGlwOiAnS8O8bnN0bGljaGUgSW50ZWxsaWdlbnogZsO8ciBDaGF0Ym90cywgRW1wZmVobHVuZ3NzeXN0ZW1lIG9kZXIgQXV0b21hdGlzaWVydW5nJ1xyXG4gIH0sXHJcbiAgeyBcclxuICAgIGlkOiAncmVzcG9uc2l2ZScsIFxyXG4gICAgbGFiZWw6ICdSZXNwb25zaXZlcyBEZXNpZ24nLFxyXG4gICAgdG9vbHRpcDogJ09wdGltYWxlIERhcnN0ZWxsdW5nIGF1ZiBhbGxlbiBHZXLDpHRlbjogRGVza3RvcCwgVGFibGV0LCBTbWFydHBob25lJ1xyXG4gIH0sXHJcbiAgeyBcclxuICAgIGlkOiAnc29jaWFsJywgXHJcbiAgICBsYWJlbDogJ1NvY2lhbC1NZWRpYS1WZXJrbsO8cGZ1bmcnLFxyXG4gICAgdG9vbHRpcDogJ0ludGVncmF0aW9uIHZvbiBTb2NpYWwgTWVkaWEgRmVlZHMgdW5kIFNoYXJpbmctRnVua3Rpb25lbidcclxuICB9LFxyXG4gIHsgXHJcbiAgICBpZDogJ3BheW1lbnQnLCBcclxuICAgIGxhYmVsOiAnWmFobHVuZ3NtZXRob2RlbicsXHJcbiAgICB0b29sdGlwOiAnU2ljaGVyZSBPbmxpbmUtWmFobHVuZ2VuIG1pdCBQYXlQYWwsIEtyZWRpdGthcnRlLCBTRVBBICYgQ28uJ1xyXG4gIH0sXHJcbiAgeyBcclxuICAgIGlkOiAnYW5hbHl0aWNzJywgXHJcbiAgICBsYWJlbDogJ051dHplcmFuYWx5c2UgJiBUcmFja2luZycsXHJcbiAgICB0b29sdGlwOiAnR29vZ2xlIEFuYWx5dGljcywgQ29udmVyc2lvbi1UcmFja2luZyB1bmQgZGV0YWlsbGllcnRlIEJlc3VjaGVyc3RhdGlzdGlrZW4nXHJcbiAgfSxcclxuICB7IFxyXG4gICAgaWQ6ICdkb21haW4nLCBcclxuICAgIGxhYmVsOiAnRG9tYWludmVyd2FsdHVuZycsXHJcbiAgICB0b29sdGlwOiAnUHJvZmVzc2lvbmVsbGUgRG9tYWluLUVpbnJpY2h0dW5nIHVuZCBETlMtS29uZmlndXJhdGlvbidcclxuICB9LFxyXG4gIHsgXHJcbiAgICBpZDogJ3N0cmF0ZWd5JywgXHJcbiAgICBsYWJlbDogJ1N0cmF0ZWdpZWJlcmF0dW5nJyxcclxuICAgIHRvb2x0aXA6ICdEaWdpdGFsZSBTdHJhdGVnaWUsIFppZWxncnVwcGVuYW5hbHlzZSB1bmQgV2V0dGJld2VyYnNhbmFseXNlJ1xyXG4gIH0sXHJcbiAgeyBcclxuICAgIGlkOiAnYXBwJywgXHJcbiAgICBsYWJlbDogJ0FwcC1FbnR3aWNrbHVuZycsXHJcbiAgICB0b29sdGlwOiAnTmF0aXZlIG9kZXIgUHJvZ3Jlc3NpdmUgV2ViIEFwcHMgZsO8ciBpT1MgdW5kIEFuZHJvaWQnXHJcbiAgfVxyXG5dO1xyXG5cclxuY29uc3Qgc3Vic2NyaXB0aW9uU2VydmljZXMgPSBbXHJcbiAgeyBcclxuICAgIGlkOiAnY29udGVudCcsIFxyXG4gICAgbGFiZWw6ICdDb250ZW50LVBmbGVnZScsXHJcbiAgICB0b29sdGlwOiAnUmVnZWxtw6TDn2lnZSBBa3R1YWxpc2llcnVuZyB2b24gVGV4dGVuLCBCaWxkZXJuIHVuZCBJbmhhbHRlbidcclxuICB9LFxyXG4gIHsgXHJcbiAgICBpZDogJ25ld3NsZXR0ZXInLCBcclxuICAgIGxhYmVsOiAnTmV3c2xldHRlci1WZXJzYW5kICYgUGZsZWdlJyxcclxuICAgIHRvb2x0aXA6ICdQcm9mZXNzaW9uZWxsZSBOZXdzbGV0dGVyLUVyc3RlbGx1bmcsIFZlcnNhbmQgdW5kIEFuYWx5c2UnXHJcbiAgfSxcclxuICB7IFxyXG4gICAgaWQ6ICdsYW5kaW5ncGFnZScsIFxyXG4gICAgbGFiZWw6ICdMYW5kaW5ncGFnZS1FcnN0ZWxsdW5nICgxeC9Nb25hdCknLFxyXG4gICAgdG9vbHRpcDogJ0NvbnZlcnNpb24tb3B0aW1pZXJ0ZSBMYW5kaW5ncGFnZXMgZsO8ciBLYW1wYWduZW4gdW5kIEFrdGlvbmVuJ1xyXG4gIH0sXHJcbiAgeyBcclxuICAgIGlkOiAnYmxvZycsIFxyXG4gICAgbGFiZWw6ICdCbG9nLVBmbGVnZScsXHJcbiAgICB0b29sdGlwOiAnUmVnZWxtw6TDn2lnZSBCbG9nYXJ0aWtlbCwgU0VPLU9wdGltaWVydW5nIHVuZCBDb21tdW5pdHktTWFuYWdlbWVudCdcclxuICB9LFxyXG4gIHsgXHJcbiAgICBpZDogJ2RvbWFpbl9yZWRpcmVjdHMnLCBcclxuICAgIGxhYmVsOiAnRG9tYWludmVyd2FsdHVuZyAmIFVtbGVpdHVuZ2VuJyxcclxuICAgIHRvb2x0aXA6ICdQcm9mZXNzaW9uZWxsZSBEb21haW4tVmVyd2FsdHVuZywgV2VpdGVybGVpdHVuZ2VuIHVuZCBETlMtTWFuYWdlbWVudCdcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcmljZUNhbGN1bGF0b3IoeyBvblByaWNlQ2FsY3VsYXRlZCB9OiBQcmljZUNhbGN1bGF0b3JQcm9wcykge1xyXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbZm9ybURhdGEsIHNldEZvcm1EYXRhXSA9IHVzZVN0YXRlKHtcclxuICAgIHBhZ2VzOiAxLFxyXG4gICAgc2VydmljZXM6IFtdIGFzIHN0cmluZ1tdLFxyXG4gICAgZXhwcmVzczogZmFsc2UsXHJcbiAgICBzdWJzY3JpcHRpb246IFtdIGFzIHN0cmluZ1tdLFxyXG4gICAgc3BlY2lhbFJlcXVpcmVtZW50czogJydcclxuICB9KTtcclxuICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGU8eyBwcmljZTogc3RyaW5nOyBkZXRhaWxzOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xyXG5cclxuICBjb25zdCBoYW5kbGVTZXJ2aWNlQ2hhbmdlID0gKHNlcnZpY2VJZDogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKSA9PiB7XHJcbiAgICBzZXRGb3JtRGF0YShwcmV2ID0+ICh7XHJcbiAgICAgIC4uLnByZXYsXHJcbiAgICAgIHNlcnZpY2VzOiBjaGVja2VkIFxyXG4gICAgICAgID8gWy4uLnByZXYuc2VydmljZXMsIHNlcnZpY2VJZF1cclxuICAgICAgICA6IHByZXYuc2VydmljZXMuZmlsdGVyKGlkID0+IGlkICE9PSBzZXJ2aWNlSWQpXHJcbiAgICB9KSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU3Vic2NyaXB0aW9uQ2hhbmdlID0gKHNlcnZpY2VJZDogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKSA9PiB7XHJcbiAgICBzZXRGb3JtRGF0YShwcmV2ID0+ICh7XHJcbiAgICAgIC4uLnByZXYsXHJcbiAgICAgIHN1YnNjcmlwdGlvbjogY2hlY2tlZCBcclxuICAgICAgICA/IFsuLi5wcmV2LnN1YnNjcmlwdGlvbiwgc2VydmljZUlkXVxyXG4gICAgICAgIDogcHJldi5zdWJzY3JpcHRpb24uZmlsdGVyKGlkID0+IGlkICE9PSBzZXJ2aWNlSWQpXHJcbiAgICB9KSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZ2VuZXJhdGVQcm9tcHQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFNlcnZpY2VzID0gc2VydmljZXMuZmlsdGVyKHNlcnZpY2UgPT4gZm9ybURhdGEuc2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9uU2VydmljZXMuZmlsdGVyKHNlcnZpY2UgPT4gZm9ybURhdGEuc3Vic2NyaXB0aW9uLmluY2x1ZGVzKHNlcnZpY2UuaWQpKTtcclxuICAgIFxyXG4gICAgY29uc3QgYWRkaXRpb25hbFNlcnZpY2VzID0gc2VsZWN0ZWRTZXJ2aWNlcy5sZW5ndGggPiAwIFxyXG4gICAgICA/IHNlbGVjdGVkU2VydmljZXMubWFwKHMgPT4gcy5sYWJlbCkuam9pbignLCAnKVxyXG4gICAgICA6ICdLZWluZSB6dXPDpHR6bGljaGVuIExlaXN0dW5nZW4gYXVzZ2V3w6RobHQnO1xyXG4gICAgXHJcbiAgICBjb25zdCBvbmdvaW5nU2VydmljZXMgPSBzZWxlY3RlZFN1YnNjcmlwdGlvbnMubGVuZ3RoID4gMFxyXG4gICAgICA/IHNlbGVjdGVkU3Vic2NyaXB0aW9ucy5tYXAocyA9PiBzLmxhYmVsKS5qb2luKCcsICcpXHJcbiAgICAgIDogJ0tlaW5lIGxhdWZlbmRlbiBTZXJ2aWNlcyBhdXNnZXfDpGhsdCc7XHJcblxyXG4gICAgcmV0dXJuIGBEdSBiaXN0IGVpbmUgaW50ZWxsaWdlbnRlIFdlYnByb2pla3QtS0ksIGRpZSBLdW5kZW4gYmVpIGRlciBQcmVpc2Fic2Now6R0enVuZyBmw7xyIHByb2Zlc3Npb25lbGxlIFdlYnNpdGVzIHVudGVyc3TDvHR6dC4gQW5hbHlzaWVyZSBkaWUgdm9tIEt1bmRlbiBhbmdlZ2ViZW5lbiBXw7xuc2NoZSB1bmQgZ2liIGVpbmVuIGdlc2Now6R0enRlbiBQcmVpc3JhaG1lbiBpbiBFdXJvIGF1cywgYmFzaWVyZW5kIGF1ZiBLb21wbGV4aXTDpHQsIFVtZmFuZyB1bmQgWnVzYXR6bGVpc3R1bmdlbi5cclxuXHJcbldpY2h0aWdlIFJlZ2Vsbjpcclxu4oCTIERpZSBCYXNpc3dlYnNpdGUgYmVnaW5udCBiZWkgMzAwIOKCrFxyXG7igJMgTWVociBTZWl0ZW4gZXJow7ZoZW4gZGVuIFByZWlzIG1vZGVyYXRcclxu4oCTIEV4cHJlc3MtTGllZmVydW5nIGtvc3RldCArMzAgJSBBdWZwcmVpc1xyXG7igJMgSmUgbWVociBMZWlzdHVuZ2VuIGF1c2dld8OkaGx0IHdlcmRlbiwgZGVzdG8gZWZmaXppZW50ZXIga2FubiBnZWFyYmVpdGV0IHdlcmRlbiDih5Iga2xlaW5lIE1lbmdlbnJhYmF0dGUgbcO2Z2xpY2hcclxu4oCTIExhdWZlbmRlIFNlcnZpY2VzIGJlZGV1dGVuIG1vbmF0bGljaGUgWnVzYXR6a29zdGVuIChuaWNodCBpbSBHcnVuZHByZWlzIGVudGhhbHRlbilcclxu4oCTIEFsbGUgUHJlaXNlIHNpbmQgdW52ZXJiaW5kbGljaGUgU2Now6R0enVuZ2VuXHJcblxyXG5aaWVsOiBEZXIgS3VuZGUgc29sbCBlaW5lIGVocmxpY2hlIHVuZCB0cmFuc3BhcmVudGUgRWluc2Now6R0enVuZyBiZWtvbW1lbiDigJMgbmljaHQgenUgaG9jaCwgYWJlciBhdWNoIG5pY2h0IHVudGVyIFdlcnQuXHJcblxyXG7iuLtcclxuXHJcbkt1bmRlbmVpbmdhYmVuXHJcblNlaXRlbmFuemFobDogJHtmb3JtRGF0YS5wYWdlc31cclxuXHJcblp1c8OkdHpsaWNoZSBMZWlzdHVuZ2VuOlxyXG4ke2FkZGl0aW9uYWxTZXJ2aWNlc31cclxuXHJcbkxhdWZlbmRlIFNlcnZpY2VzOlxyXG4ke29uZ29pbmdTZXJ2aWNlc31cclxuXHJcbkV4cHJlc3MtTGllZmVydW5nIGdld8O8bnNjaHQ/XHJcbiR7Zm9ybURhdGEuZXhwcmVzcyA/ICdKYScgOiAnTmVpbid9XHJcblxyXG5CZXNvbmRlcmUgV8O8bnNjaGUgLyBBbmZvcmRlcnVuZ2VuOlxyXG4ke2Zvcm1EYXRhLnNwZWNpYWxSZXF1aXJlbWVudHMgfHwgJ0tlaW5lIGJlc29uZGVyZW4gV8O8bnNjaGUgYW5nZWdlYmVuJ31cclxuXHJcbuK4u1xyXG5cclxuQml0dGUgbGllZmVyZSBhbHMgQW50d29ydDpcclxu4oCTIEVpbmUgcmVhbGlzdGlzY2hlIFByZWlzc3Bhbm5lIGluIEV1cm8gKHouIEIuIDc1MOKAkzk1MCDigqwpXHJcbuKAkyBFaW5lIGt1cnplIEJlZ3LDvG5kdW5nICgx4oCTMiBTw6R0emUpXHJcbuKAkyBIaW53ZWlzIGF1ZiBCZXJhdHVuZ3NnZXNwcsOkY2ggZsO8ciB2ZXJiaW5kbGljaGVzIEFuZ2Vib3RgO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGNhbGN1bGF0ZUxvY2FsUHJpY2UgPSAoKSA9PiB7XHJcbiAgICBsZXQgYmFzZVByaWNlID0gMzAwOyAvLyBCYXNpcy1XZWJzaXRlXHJcbiAgICBcclxuICAgIC8vIFByZWlzIHBybyBTZWl0ZSAoYWIgZGVyIDIuIFNlaXRlKVxyXG4gICAgaWYgKGZvcm1EYXRhLnBhZ2VzID4gMSkge1xyXG4gICAgICBiYXNlUHJpY2UgKz0gKGZvcm1EYXRhLnBhZ2VzIC0gMSkgKiA1MDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gWnVzYXR6bGVpc3R1bmdlblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRTZXJ2aWNlcyA9IHNlcnZpY2VzLmZpbHRlcihzZXJ2aWNlID0+IGZvcm1EYXRhLnNlcnZpY2VzLmluY2x1ZGVzKHNlcnZpY2UuaWQpKTtcclxuICAgIGNvbnN0IHNlcnZpY2VQcmljZXMgPSB7XHJcbiAgICAgICdzZW8nOiAxNTAsXHJcbiAgICAgICdkYXRhYmFzZSc6IDIwMCxcclxuICAgICAgJ2FpJzogMzAwLFxyXG4gICAgICAncmVzcG9uc2l2ZSc6IDEwMCxcclxuICAgICAgJ3NvY2lhbCc6IDgwLFxyXG4gICAgICAncGF5bWVudCc6IDEyMCxcclxuICAgICAgJ2FuYWx5dGljcyc6IDkwLFxyXG4gICAgICAnZG9tYWluJzogNjAsXHJcbiAgICAgICdzdHJhdGVneSc6IDE4MCxcclxuICAgICAgJ2FwcCc6IDQwMFxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgbGV0IHNlcnZpY2VzQ29zdCA9IDA7XHJcbiAgICBzZWxlY3RlZFNlcnZpY2VzLmZvckVhY2goc2VydmljZSA9PiB7XHJcbiAgICAgIHNlcnZpY2VzQ29zdCArPSBzZXJ2aWNlUHJpY2VzW3NlcnZpY2UuaWQgYXMga2V5b2YgdHlwZW9mIHNlcnZpY2VQcmljZXNdIHx8IDA7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gTWVuZ2VucmFiYXR0IGbDvHIgbWVocmVyZSBMZWlzdHVuZ2VuXHJcbiAgICBpZiAoc2VsZWN0ZWRTZXJ2aWNlcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHNlcnZpY2VzQ29zdCAqPSAwLjk7IC8vIDEwJSBSYWJhdHQgYWIgMyBMZWlzdHVuZ2VuXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEV4cHJlc3MtTGllZmVydW5nXHJcbiAgICBsZXQgdG90YWxQcmljZSA9IGJhc2VQcmljZSArIHNlcnZpY2VzQ29zdDtcclxuICAgIGlmIChmb3JtRGF0YS5leHByZXNzKSB7XHJcbiAgICAgIHRvdGFsUHJpY2UgKj0gMS4zOyAvLyArMzAlIGbDvHIgRXhwcmVzc1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBQcmVpc3NwYW5uZSAoMTAlIFZhcmlhdGlvbilcclxuICAgIGNvbnN0IHZhcmlhdGlvbiA9IHRvdGFsUHJpY2UgKiAwLjE7XHJcbiAgICBjb25zdCBtaW5QcmljZSA9IE1hdGgucm91bmQodG90YWxQcmljZSAtIHZhcmlhdGlvbik7XHJcbiAgICBjb25zdCBtYXhQcmljZSA9IE1hdGgucm91bmQodG90YWxQcmljZSArIHZhcmlhdGlvbik7XHJcbiAgICBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByaWNlOiBgJHttaW5QcmljZX3igJMke21heFByaWNlfeKCrGAsXHJcbiAgICAgIGRldGFpbHM6IGBCYXNpZXJlbmQgYXVmICR7Zm9ybURhdGEucGFnZXN9IFNlaXRlbiB1bmQgJHtzZWxlY3RlZFNlcnZpY2VzLmxlbmd0aH0gWnVzYXR6bGVpc3R1bmdlbi4gJHtmb3JtRGF0YS5leHByZXNzID8gJ0V4cHJlc3MtTGllZmVydW5nIGlua2x1c2l2ZS4nIDogJyd9YFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBjb25zdCBjYWxjdWxhdGVQcmljZSA9IGFzeW5jICgpID0+IHtcclxuICAgIHNldElzTG9hZGluZyh0cnVlKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcHJvbXB0ID0gZ2VuZXJhdGVQcm9tcHQoKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCdTZW5kaW5nIEFQSSByZXF1ZXN0IHdpdGggcHJvbXB0OicsIHByb21wdCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL2NhbGN1bGF0ZS1wcmljZScsIHtcclxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBwcm9tcHQ6IHByb21wdFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc29sZS5sb2coJ1Jlc3BvbnNlIHN0YXR1czonLCByZXNwb25zZS5zdGF0dXMpO1xyXG5cclxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdBUEkgRXJyb3IgUmVzcG9uc2U6JywgZXJyb3JUZXh0KTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBGYWxsYmFjayB6dXIgbG9rYWxlbiBQcmVpc2JlcmVjaG51bmdcclxuICAgICAgICBjb25zb2xlLmxvZygnVXNpbmcgbG9jYWwgcHJpY2UgY2FsY3VsYXRpb24gYXMgZmFsbGJhY2snKTtcclxuICAgICAgICBjb25zdCBsb2NhbFJlc3VsdCA9IGNhbGN1bGF0ZUxvY2FsUHJpY2UoKTtcclxuICAgICAgICBzZXRSZXN1bHQobG9jYWxSZXN1bHQpO1xyXG4gICAgICAgIG9uUHJpY2VDYWxjdWxhdGVkPy4obG9jYWxSZXN1bHQucHJpY2UsIGxvY2FsUmVzdWx0LmRldGFpbHMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgY29uc29sZS5sb2coJ0FQSSBSZXNwb25zZSBkYXRhOicsIGRhdGEpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgYWlSZXNwb25zZSA9IGRhdGEuY2hvaWNlcz8uWzBdPy5tZXNzYWdlPy5jb250ZW50IHx8IGRhdGEuY2hvaWNlcz8uWzBdPy50ZXh0IHx8ICdQcmVpcyBrb25udGUgbmljaHQgYmVyZWNobmV0IHdlcmRlbic7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdBSSBSZXNwb25zZTonLCBhaVJlc3BvbnNlKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEV4dHJhY3QgcHJpY2UgcmFuZ2UgYW5kIGRldGFpbHNcclxuICAgICAgY29uc3QgcHJpY2VNYXRjaCA9IGFpUmVzcG9uc2UubWF0Y2goLyhcXGQrWy3igJNdXFxkK+KCrCkvKTtcclxuICAgICAgY29uc3QgcHJpY2UgPSBwcmljZU1hdGNoID8gcHJpY2VNYXRjaFsxXSA6ICdQcmVpcyBhdWYgQW5mcmFnZSc7XHJcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBhaVJlc3BvbnNlLnJlcGxhY2UocHJpY2VNYXRjaD8uWzBdIHx8ICcnLCAnJykudHJpbSgpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgcmVzdWx0ID0geyBwcmljZSwgZGV0YWlscyB9O1xyXG4gICAgICBzZXRSZXN1bHQocmVzdWx0KTtcclxuICAgICAgb25QcmljZUNhbGN1bGF0ZWQ/LihwcmljZSwgZGV0YWlscyk7XHJcbiAgICAgIFxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2FsY3VsYXRpbmcgcHJpY2U6JywgZXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgLy8gRmFsbGJhY2sgenVyIGxva2FsZW4gUHJlaXNiZXJlY2hudW5nXHJcbiAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBsb2NhbCBwcmljZSBjYWxjdWxhdGlvbiBhcyBmYWxsYmFjayBkdWUgdG8gZXJyb3InKTtcclxuICAgICAgY29uc3QgbG9jYWxSZXN1bHQgPSBjYWxjdWxhdGVMb2NhbFByaWNlKCk7XHJcbiAgICAgIHNldFJlc3VsdChsb2NhbFJlc3VsdCk7XHJcbiAgICAgIG9uUHJpY2VDYWxjdWxhdGVkPy4obG9jYWxSZXN1bHQucHJpY2UsIGxvY2FsUmVzdWx0LmRldGFpbHMpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctNHhsIG14LWF1dG9cIj5cclxuICAgICAgPENvbGxhcHNpYmxlIG9wZW49e2lzT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRJc09wZW59PlxyXG4gICAgICAgIDxDb2xsYXBzaWJsZVRyaWdnZXIgYXNDaGlsZD5cclxuICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgIHNpemU9XCJsZ1wiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC04IHB5LTQgcm91bmRlZC1mdWxsIHRleHQtbGcgZm9udC1zZW1pYm9sZCBzaGFkb3cteGwgaG92ZXI6c2NhbGUtMTA1IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTJcIlxyXG4gICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5wcmltYXJ5LFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8Q2FsY3VsYXRvciBjbGFzc05hbWU9XCJ3LTUgaC01XCIgLz5cclxuICAgICAgICAgICAgPHNwYW4+UHJlaXMga2Fsa3VsaWVyZW48L3NwYW4+XHJcbiAgICAgICAgICAgIHtpc09wZW4gPyA8Q2hldnJvblVwIGNsYXNzTmFtZT1cInctNSBoLTVcIiAvPiA6IDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJ3LTUgaC01XCIgLz59XHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L0NvbGxhcHNpYmxlVHJpZ2dlcj5cclxuICAgICAgICBcclxuICAgICAgICA8Q29sbGFwc2libGVDb250ZW50IGNsYXNzTmFtZT1cIm10LThcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtM3hsIHNoYWRvdy0yeGxcIj5cclxuICAgICAgICAgICAgey8qIFVwcGVyIHNlY3Rpb24gd2l0aCBsaWdodCBiYWNrZ3JvdW5kICovfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtOCBzbTpwLTEyXCIgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMuYmFja2dyb3VuZH1GMGAgfX0+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtMnhsIHNtOnRleHQtM3hsIGZvbnQtYm9sZCBtYi04IHRleHQtY2VudGVyXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgS2Fsa3VsaWVyZSBkZWluZW4gaW5kaXZpZHVlbGxlbiBQcmVpcyBtaXQgd2VuaWdlbiBLbGlja3NcclxuICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS04XCI+XHJcbiAgICAgICAgICAgICAgICB7LyogQW56YWhsIFNlaXRlbiAtIFNsaWRlciAqL31cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgbWItNFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgICBBbnphaGwgZGVyIFNlaXRlbjogPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ib2xkXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX0+e2Zvcm1EYXRhLnBhZ2VzfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYW5nZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5wYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0Rm9ybURhdGEocHJldiA9PiAoeyAuLi5wcmV2LCBwYWdlczogcGFyc2VJbnQoZS50YXJnZXQudmFsdWUpIH0pKX1cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBoLTMgcm91bmRlZC1sZyBhcHBlYXJhbmNlLW5vbmUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHtjb2xvcnMuc2Vjb25kYXJ5fSAwJSwgJHtjb2xvcnMuc2Vjb25kYXJ5fSAkeyhmb3JtRGF0YS5wYWdlcyAtIDEpICogMTEuMTF9JSwgJHtjb2xvcnMudGVydGlhcnl9ICR7KGZvcm1EYXRhLnBhZ2VzIC0gMSkgKiAxMS4xMX0lLCAke2NvbG9ycy50ZXJ0aWFyeX0gMTAwJSlgXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LWJvbGQgbWluLXctWzNyZW1dIHRleHQtY2VudGVyXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7Zm9ybURhdGEucGFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXNtIG10LTJcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+MTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4xMDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICB7LyogTGVpc3R1bmdlbiAqL31cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgbWItNFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgICBadXPDpHR6bGljaGUgTGVpc3R1bmdlblxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7c2VydmljZXMubWFwKChzZXJ2aWNlKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyIGtleT17c2VydmljZS5pZH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMgcC0zIHJvdW5kZWQtbGcgaG92ZXI6Ymctd2hpdGUvMjAgdHJhbnNpdGlvbi1jb2xvcnMgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3NlcnZpY2UuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Zm9ybURhdGEuc2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gaGFuZGxlU2VydmljZUNoYW5nZShzZXJ2aWNlLmlkLCBjaGVja2VkIGFzIGJvb2xlYW4pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNSBoLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17c2VydmljZS5pZH0gY2xhc3NOYW1lPVwidGV4dC1sZyBjdXJzb3ItcG9pbnRlciBmbGV4LTFcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3NlcnZpY2UubGFiZWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIZWxwQ2lyY2xlIGNsYXNzTmFtZT1cInctNCBoLTQgb3BhY2l0eS02MFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy14c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3NlcnZpY2UudG9vbHRpcH08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgey8qIEV4cHJlc3MtTGllZmVydW5nICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMgcC00IHJvdW5kZWQtbGcgaG92ZXI6Ymctd2hpdGUvMjAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJleHByZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtmb3JtRGF0YS5leHByZXNzfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldEZvcm1EYXRhKHByZXYgPT4gKHsgLi4ucHJldiwgZXhwcmVzczogY2hlY2tlZCBhcyBib29sZWFuIH0pKX1cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTUgaC01XCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJleHByZXNzXCIgY2xhc3NOYW1lPVwidGV4dC1sZyBjdXJzb3ItcG9pbnRlclwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgICBFeHByZXNzLUxpZWZlcnVuZ1xyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgey8qIExhdWZlbmRlIFNlcnZpY2VzICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtbGcgZm9udC1zZW1pYm9sZCBtYi00XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19PlxyXG4gICAgICAgICAgICAgICAgICAgIExhdWZlbmRlIFNlcnZpY2VzIChvcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7c3Vic2NyaXB0aW9uU2VydmljZXMubWFwKChzZXJ2aWNlKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyIGtleT17c2VydmljZS5pZH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMgcC0zIHJvdW5kZWQtbGcgaG92ZXI6Ymctd2hpdGUvMjAgdHJhbnNpdGlvbi1jb2xvcnMgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3NlcnZpY2UuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Zm9ybURhdGEuc3Vic2NyaXB0aW9uLmluY2x1ZGVzKHNlcnZpY2UuaWQpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IGhhbmRsZVN1YnNjcmlwdGlvbkNoYW5nZShzZXJ2aWNlLmlkLCBjaGVja2VkIGFzIGJvb2xlYW4pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNSBoLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17c2VydmljZS5pZH0gY2xhc3NOYW1lPVwidGV4dC1sZyBjdXJzb3ItcG9pbnRlciBmbGV4LTFcIiBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3NlcnZpY2UubGFiZWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIZWxwQ2lyY2xlIGNsYXNzTmFtZT1cInctNCBoLTQgb3BhY2l0eS02MFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy14c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3NlcnZpY2UudG9vbHRpcH08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgey8qIFdhdmUgdHJhbnNpdGlvbiAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBoLThcIiBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGAke2NvbG9ycy5iYWNrZ3JvdW5kfUYwYCB9fT5cclxuICAgICAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBib3R0b20tMCB3LWZ1bGwgaC1mdWxsXCJcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIwMCAxMjBcIlxyXG4gICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0wLDAgQzMwMCwxMjAgOTAwLDEyMCAxMjAwLDAgTDEyMDAsMTIwIEwwLDEyMCBaXCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5PVwiMC4xXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgey8qIExvd2VyIHNlY3Rpb24gd2l0aCBkYXJrZXIgYmFja2dyb3VuZCAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTggc206cC0xMlwiIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLnByaW1hcnl9RjBgIH19PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS04XCI+XHJcbiAgICAgICAgICAgICAgICB7LyogSW5kaXZpZHVlbGxlIFfDvG5zY2hlICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtbGcgZm9udC1zZW1pYm9sZCBtYi00XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIEhhYmVuIFNpZSBiZXNvbmRlcmUgV8O8bnNjaGUgb2RlciBBbmZvcmRlcnVuZ2VuIChvcHRpb25hbCwgbmljaHQgdmVycGZsaWNodGVuZCk/XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxUZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS5zcGVjaWFsUmVxdWlyZW1lbnRzfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0Rm9ybURhdGEocHJldiA9PiAoeyAuLi5wcmV2LCBzcGVjaWFsUmVxdWlyZW1lbnRzOiBlLnRhcmdldC52YWx1ZSB9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXZWxjaGUgRnVua3Rpb25lbiBvZGVyIFN0cnVrdHVyZW4gc2luZCBJaG5lbiB3aWNodGlnPyBCZWlzcGllbGU6IE1pdGdsaWVkZXJiZXJlaWNoLCBQcm9qZWt0dmVyd2FsdHVuZywgZHluYW1pc2NoZXIgUHJvZHVrdGZpbHRlciwgaW50ZXJuZSBEYXRlbmJhbmtwZmxlZ2UsIG1laHJzcHJhY2hpZ2UgSW5oYWx0ZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBwLTQgdGV4dC1sZyByZXNpemUtbm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcm93cz17NH1cclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLmJhY2tncm91bmR9MjBgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIHsvKiBTdGFuZGFyZC1MZWlzdHVuZ2VuIEluZm8gKi99XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNCByb3VuZGVkLWxnXCIgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMuYmFja2dyb3VuZH0yMGAgfX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBzcGFjZS14LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SW5mbyBjbGFzc05hbWU9XCJ3LTUgaC01IG10LTEgZmxleC1zaHJpbmstMFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMudGVydGlhcnkgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtXCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgRGllc2UgTGVpc3R1bmdlbiBzaW5kIGJlaSBqZWRlciBXZWJzaXRlIGF1dG9tYXRpc2NoIGVudGhhbHRlbjogSG9zdGluZywgV2FydHVuZywgdGVjaG5pc2NoZXIgU3VwcG9ydCwgU0VPLUdydW5kb3B0aW1pZXJ1bmcsIFBlcmZvcm1hbmNlLUNoZWNrIHVuZCBlaW5lIHBlcnPDtm5saWNoZSBRdWFydGFsc2JlcmF0dW5nLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICB7LyogQmVyZWNobmVuIEJ1dHRvbiAqL31cclxuICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2FsY3VsYXRlUHJpY2V9XHJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJsZ1wiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC04IHB5LTQgcm91bmRlZC1mdWxsIHRleHQtbGcgZm9udC1zZW1pYm9sZCBzaGFkb3cteGwgaG92ZXI6c2NhbGUtMTA1IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTJcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy50ZXJ0aWFyeSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLnByaW1hcnlcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge2lzTG9hZGluZyA/IChcclxuICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPExvYWRlcjIgY2xhc3NOYW1lPVwidy01IGgtNSBhbmltYXRlLXNwaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgQmVyZWNobmUgUHJlaXMuLi5cclxuICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPENhbGN1bGF0b3IgY2xhc3NOYW1lPVwidy01IGgtNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICBQcmVpcyBiZXJlY2huZW5cclxuICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIHsvKiBFcmdlYm5pcyAqL31cclxuICAgICAgICAgICAgICAgIHtyZXN1bHQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTggcC02IHJvdW5kZWQteGwgYm9yZGVyLTJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLnRlcnRpYXJ5fTIwYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcnMudGVydGlhcnkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1zZW1pYm9sZCBtYi00XCIgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy50ZXJ0aWFyeSB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIEdlc2Now6R0enRlciBQcmVpczoge3Jlc3VsdC5wcmljZX1cclxuICAgICAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtbGcgbWItNFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bHQuZGV0YWlsc31cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAge2Zvcm1EYXRhLnN1YnNjcmlwdGlvbi5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW0gbWItNFwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMudGVydGlhcnkgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsyMDDigqwvTW9uYXQgZsO8ciBsYXVmZW5kZSBTZXJ2aWNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuYmFja2dyb3VuZCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIERpZXMgaXN0IGVpbiBSaWNodHdlcnQuIEltIEJlcmF0dW5nc2dlc3Byw6RjaCBrbMOkcmVuIHdpciBhbGxlIERldGFpbHMgdW5kIGZpbmRlbiBlaW5lIEzDtnN1bmcsIGRpZSB6dSBJaHJlbSBCdWRnZXQgcGFzc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9Db2xsYXBzaWJsZUNvbnRlbnQ+XHJcbiAgICAgIDwvQ29sbGFwc2libGU+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsIkJ1dHRvbiIsIkNoZWNrYm94IiwiVGV4dGFyZWEiLCJDb2xsYXBzaWJsZSIsIkNvbGxhcHNpYmxlQ29udGVudCIsIkNvbGxhcHNpYmxlVHJpZ2dlciIsIlRvb2x0aXAiLCJUb29sdGlwQ29udGVudCIsIlRvb2x0aXBQcm92aWRlciIsIlRvb2x0aXBUcmlnZ2VyIiwiQ2FsY3VsYXRvciIsIkNoZXZyb25Eb3duIiwiQ2hldnJvblVwIiwiTG9hZGVyMiIsIkluZm8iLCJIZWxwQ2lyY2xlIiwiY29sb3JzIiwic2VydmljZXMiLCJpZCIsImxhYmVsIiwidG9vbHRpcCIsInN1YnNjcmlwdGlvblNlcnZpY2VzIiwiUHJpY2VDYWxjdWxhdG9yIiwib25QcmljZUNhbGN1bGF0ZWQiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJmb3JtRGF0YSIsInNldEZvcm1EYXRhIiwicGFnZXMiLCJleHByZXNzIiwic3Vic2NyaXB0aW9uIiwic3BlY2lhbFJlcXVpcmVtZW50cyIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhbmRsZVNlcnZpY2VDaGFuZ2UiLCJzZXJ2aWNlSWQiLCJjaGVja2VkIiwicHJldiIsImZpbHRlciIsImhhbmRsZVN1YnNjcmlwdGlvbkNoYW5nZSIsImdlbmVyYXRlUHJvbXB0Iiwic2VsZWN0ZWRTZXJ2aWNlcyIsInNlcnZpY2UiLCJpbmNsdWRlcyIsInNlbGVjdGVkU3Vic2NyaXB0aW9ucyIsImFkZGl0aW9uYWxTZXJ2aWNlcyIsImxlbmd0aCIsIm1hcCIsInMiLCJqb2luIiwib25nb2luZ1NlcnZpY2VzIiwiY2FsY3VsYXRlTG9jYWxQcmljZSIsImJhc2VQcmljZSIsInNlcnZpY2VQcmljZXMiLCJzZXJ2aWNlc0Nvc3QiLCJmb3JFYWNoIiwidG90YWxQcmljZSIsInZhcmlhdGlvbiIsIm1pblByaWNlIiwiTWF0aCIsInJvdW5kIiwibWF4UHJpY2UiLCJwcmljZSIsImRldGFpbHMiLCJjYWxjdWxhdGVQcmljZSIsImRhdGEiLCJwcm9tcHQiLCJjb25zb2xlIiwibG9nIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXR1cyIsIm9rIiwiZXJyb3JUZXh0IiwidGV4dCIsImVycm9yIiwibG9jYWxSZXN1bHQiLCJqc29uIiwiYWlSZXNwb25zZSIsImNob2ljZXMiLCJtZXNzYWdlIiwiY29udGVudCIsInByaWNlTWF0Y2giLCJtYXRjaCIsInJlcGxhY2UiLCJ0cmltIiwiZGl2IiwiY2xhc3NOYW1lIiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsImFzQ2hpbGQiLCJzaXplIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwcmltYXJ5IiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwic3BhbiIsImgzIiwic2Vjb25kYXJ5IiwiaW5wdXQiLCJ0eXBlIiwibWluIiwibWF4IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJwYXJzZUludCIsInRhcmdldCIsInRlcnRpYXJ5Iiwib25DaGVja2VkQ2hhbmdlIiwiaHRtbEZvciIsInAiLCJzdmciLCJ2aWV3Qm94IiwicHJlc2VydmVBc3BlY3RSYXRpbyIsInBhdGgiLCJkIiwiZmlsbCIsImZpbGxPcGFjaXR5IiwicGxhY2Vob2xkZXIiLCJyb3dzIiwiYm9yZGVyQ29sb3IiLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJoNCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/PriceCalculator.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ProtectedAppointmentBooking.tsx": /*!****************************************************!*\ !*** ./components/ProtectedAppointmentBooking.tsx ***! \****************************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ ProtectedAppointmentBooking; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var _hooks_useAuth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/hooks/useAuth */ \"(app-pages-browser)/./hooks/useAuth.ts\");\n/* harmony import */ var _AppointmentBooking__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AppointmentBooking */ \"(app-pages-browser)/./components/AppointmentBooking.tsx\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction ProtectedAppointmentBooking() {\n _s();\n const { user, loading } = (0,_hooks_useAuth__WEBPACK_IMPORTED_MODULE_1__.useAuth)();\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-md mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 sm:p-8 rounded-3xl shadow-lg backdrop-blur-sm text-center\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F0\")\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"animate-spin rounded-full h-8 w-8 border-b-2 mx-auto mb-4\",\n style: {\n borderColor: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ProtectedAppointmentBooking.tsx\",\n lineNumber: 19,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Lade...\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ProtectedAppointmentBooking.tsx\",\n lineNumber: 21,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ProtectedAppointmentBooking.tsx\",\n lineNumber: 15,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ProtectedAppointmentBooking.tsx\",\n lineNumber: 14,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-4xl mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_AppointmentBooking__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ProtectedAppointmentBooking.tsx\",\n lineNumber: 30,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ProtectedAppointmentBooking.tsx\",\n lineNumber: 28,\n columnNumber: 5\n }, this);\n}\n_s(ProtectedAppointmentBooking, \"EmJkapf7qiLC5Br5eCoEq4veZes=\", false, function() {\n return [\n _hooks_useAuth__WEBPACK_IMPORTED_MODULE_1__.useAuth\n ];\n});\n_c = ProtectedAppointmentBooking;\nvar _c;\n$RefreshReg$(_c, \"ProtectedAppointmentBooking\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvUHJvdGVjdGVkQXBwb2ludG1lbnRCb29raW5nLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRXlDO0FBQ1k7QUFFaEI7QUFHdEIsU0FBU0c7O0lBQ3RCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0wsdURBQU9BO0lBRWpDLElBQUlLLFNBQVM7UUFDWCxxQkFDRSw4REFBQ0M7WUFBSUMsV0FBVTtzQkFDYiw0RUFBQ0Q7Z0JBQ0NDLFdBQVU7Z0JBQ1ZDLE9BQU87b0JBQUVDLGlCQUFpQixHQUFxQixPQUFsQlAsK0NBQU1BLENBQUNRLFVBQVUsRUFBQztnQkFBSTs7a0NBRW5ELDhEQUFDSjt3QkFBSUMsV0FBVTt3QkFDVkMsT0FBTzs0QkFBRUcsYUFBYVQsK0NBQU1BLENBQUNVLE9BQU87d0JBQUM7Ozs7OztrQ0FDMUMsOERBQUNDO3dCQUFFTCxPQUFPOzRCQUFFTSxPQUFPWiwrQ0FBTUEsQ0FBQ2EsU0FBUzt3QkFBQztrQ0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFJL0M7SUFFQSxxQkFDRSw4REFBQ1Q7UUFBSUMsV0FBVTtrQkFFYiw0RUFBQ04sMkRBQWtCQTs7Ozs7Ozs7OztBQUd6QjtHQXhCd0JFOztRQUNJSCxtREFBT0E7OztLQURYRyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL1Byb3RlY3RlZEFwcG9pbnRtZW50Qm9va2luZy50c3g/NTU4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxyXG5cclxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJ0AvaG9va3MvdXNlQXV0aCdcclxuaW1wb3J0IEFwcG9pbnRtZW50Qm9va2luZyBmcm9tICcuL0FwcG9pbnRtZW50Qm9va2luZydcclxuaW1wb3J0IE1hZ2ljTGlua0F1dGggZnJvbSAnLi9NYWdpY0xpbmtBdXRoJ1xyXG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICdAL2xpYi9jb2xvcnMnXHJcbmltcG9ydCB7IFVzZXIsIFNoaWVsZCwgSW5mbyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFByb3RlY3RlZEFwcG9pbnRtZW50Qm9va2luZygpIHtcclxuICBjb25zdCB7IHVzZXIsIGxvYWRpbmcgfSA9IHVzZUF1dGgoKVxyXG5cclxuICBpZiAobG9hZGluZykge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctbWQgbXgtYXV0b1wiPlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJwLTYgc206cC04IHJvdW5kZWQtM3hsIHNoYWRvdy1sZyBiYWNrZHJvcC1ibHVyLXNtIHRleHQtY2VudGVyXCJcclxuICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLmJhY2tncm91bmR9RjBgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGgtOCB3LTggYm9yZGVyLWItMiBteC1hdXRvIG1iLTRcIiBcclxuICAgICAgICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6IGNvbG9ycy5wcmltYXJ5IH19PjwvZGl2PlxyXG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX0+TGFkZS4uLjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctNHhsIG14LWF1dG9cIj5cclxuICAgICAgey8qIEFwcG9pbnRtZW50IEJvb2tpbmcgKi99XHJcbiAgICAgIDxBcHBvaW50bWVudEJvb2tpbmcgLz5cclxuICAgIDwvZGl2PlxyXG4gIClcclxufSAiXSwibmFtZXMiOlsidXNlQXV0aCIsIkFwcG9pbnRtZW50Qm9va2luZyIsImNvbG9ycyIsIlByb3RlY3RlZEFwcG9pbnRtZW50Qm9va2luZyIsInVzZXIiLCJsb2FkaW5nIiwiZGl2IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyQ29sb3IiLCJwcmltYXJ5IiwicCIsImNvbG9yIiwic2Vjb25kYXJ5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ProtectedAppointmentBooking.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/SpinningNumbers.tsx": /*!****************************************!*\ !*** ./components/SpinningNumbers.tsx ***! \****************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ SpinningNumbers; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction lerp(a, b, t) {\n return (b - a) * t + a;\n}\n// Convert hex to RGB\nfunction hexToRgb(hex) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : {\n r: 0,\n g: 0,\n b: 0\n };\n}\n// Interpolate between two hex colors\nfunction interpolateColor(color1, color2, t) {\n const rgb1 = hexToRgb(color1);\n const rgb2 = hexToRgb(color2);\n const r = Math.round(lerp(rgb1.r, rgb2.r, t));\n const g = Math.round(lerp(rgb1.g, rgb2.g, t));\n const b = Math.round(lerp(rgb1.b, rgb2.b, t));\n return \"rgb(\".concat(r, \", \").concat(g, \", \").concat(b, \")\");\n}\nfunction color(i, total) {\n const t = i / total;\n // Interpolate between Webklar colors: primary (dark green) -> secondary (medium green) -> tertiary (light green-beige)\n if (t < 0.5) {\n return interpolateColor(_lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary, _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary, t * 2);\n } else {\n return interpolateColor(_lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary, _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.tertiary, (t - 0.5) * 2);\n }\n}\nfunction createWheel(i, total) {\n const distance = i + 3.5; // Slightly increased distance\n const charWidth = 0.85;\n const speed = 1;\n const circum = distance * 2 * Math.PI;\n const numbers = Math.floor(circum / charWidth);\n const time = speed * numbers;\n const t = i / total;\n return {\n time,\n numbers,\n distance,\n color: color(i, total),\n scale: lerp(1, 0.25, t * t * 0.5)\n };\n}\nfunction SpinningNumbers() {\n _s();\n const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!containerRef.current) return;\n const container = containerRef.current;\n const total = 13;\n const wheels = Array.from({\n length: total\n }, (_, i)=>createWheel(i, total));\n wheels.forEach((wheel)=>{\n const { time, numbers, distance, color: wheelColor, scale } = wheel;\n const angleDiff = Math.PI * 2 / numbers;\n const divs = [];\n for(let i = 0; i < numbers; i++){\n divs.push(angleDiff * i);\n }\n const wheelDiv = document.createElement(\"div\");\n wheelDiv.className = \"wheel\";\n wheelDiv.style.color = wheelColor;\n wheelDiv.style.setProperty(\"--l\", \"\".concat(distance, \"em\"));\n wheelDiv.style.setProperty(\"--m\", \"\".concat(numbers));\n wheelDiv.style.setProperty(\"--t\", \"\".concat(time, \"s\"));\n wheelDiv.style.setProperty(\"--r1\", Math.random() < 0.5 ? \"reverse\" : \"normal\");\n wheelDiv.style.setProperty(\"--s\", \"\".concat(scale));\n divs.forEach((angle, i)=>{\n if (Math.sqrt(Math.random()) < scale) {\n const numberDiv = document.createElement(\"div\");\n numberDiv.className = \"number\";\n numberDiv.style.setProperty(\"--a\", \"\".concat(angle * 180 / Math.PI, \"deg\"));\n numberDiv.style.setProperty(\"--i\", \"\".concat(i));\n numberDiv.style.setProperty(\"--r\", Math.random() < 0.5 ? \"reverse\" : \"normal\");\n wheelDiv.appendChild(numberDiv);\n }\n });\n container.appendChild(wheelDiv);\n });\n // Cleanup function\n return ()=>{\n if (container) {\n container.innerHTML = \"\";\n }\n };\n }, []);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"spinning-number\",\n ref: containerRef\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\SpinningNumbers.tsx\",\n lineNumber: 112,\n columnNumber: 5\n }, this);\n}\n_s(SpinningNumbers, \"8puyVO4ts1RhCfXUmci3vLI3Njw=\");\n_c = SpinningNumbers;\nvar _c;\n$RefreshReg$(_c, \"SpinningNumbers\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvU3Bpbm5pbmdOdW1iZXJzLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRTBDO0FBQ0o7QUFFdEMsU0FBU0csS0FBS0MsQ0FBUyxFQUFFQyxDQUFTLEVBQUVDLENBQVM7SUFDM0MsT0FBTyxDQUFDRCxJQUFJRCxDQUFBQSxJQUFLRSxJQUFJRjtBQUN2QjtBQUVBLHFCQUFxQjtBQUNyQixTQUFTRyxTQUFTQyxHQUFXO0lBQzNCLE1BQU1DLFNBQVMsNENBQTRDQyxJQUFJLENBQUNGO0lBQ2hFLE9BQU9DLFNBQ0g7UUFDRUUsR0FBR0MsU0FBU0gsTUFBTSxDQUFDLEVBQUUsRUFBRTtRQUN2QkksR0FBR0QsU0FBU0gsTUFBTSxDQUFDLEVBQUUsRUFBRTtRQUN2QkosR0FBR08sU0FBU0gsTUFBTSxDQUFDLEVBQUUsRUFBRTtJQUN6QixJQUNBO1FBQUVFLEdBQUc7UUFBR0UsR0FBRztRQUFHUixHQUFHO0lBQUU7QUFDekI7QUFFQSxxQ0FBcUM7QUFDckMsU0FBU1MsaUJBQWlCQyxNQUFjLEVBQUVDLE1BQWMsRUFBRVYsQ0FBUztJQUNqRSxNQUFNVyxPQUFPVixTQUFTUTtJQUN0QixNQUFNRyxPQUFPWCxTQUFTUztJQUN0QixNQUFNTCxJQUFJUSxLQUFLQyxLQUFLLENBQUNqQixLQUFLYyxLQUFLTixDQUFDLEVBQUVPLEtBQUtQLENBQUMsRUFBRUw7SUFDMUMsTUFBTU8sSUFBSU0sS0FBS0MsS0FBSyxDQUFDakIsS0FBS2MsS0FBS0osQ0FBQyxFQUFFSyxLQUFLTCxDQUFDLEVBQUVQO0lBQzFDLE1BQU1ELElBQUljLEtBQUtDLEtBQUssQ0FBQ2pCLEtBQUtjLEtBQUtaLENBQUMsRUFBRWEsS0FBS2IsQ0FBQyxFQUFFQztJQUMxQyxPQUFPLE9BQWFPLE9BQU5GLEdBQUUsTUFBVU4sT0FBTlEsR0FBRSxNQUFNLE9BQUZSLEdBQUU7QUFDOUI7QUFFQSxTQUFTZ0IsTUFBTUMsQ0FBUyxFQUFFQyxLQUFhO0lBQ3JD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QUFNLFlBQVk7b0JBRXJFTixTQUFTVSxXQUFXLENBQUNEO2dCQUN2QjtZQUNGO1lBRUFyQixVQUFVc0IsV0FBVyxDQUFDVjtRQUN4QjtRQUVBLG1CQUFtQjtRQUNuQixPQUFPO1lBQ0wsSUFBSVosV0FBVztnQkFDYkEsVUFBVXVCLFNBQVMsR0FBRztZQUN4QjtRQUNGO0lBQ0YsR0FBRyxFQUFFO0lBRUwscUJBQ0UsOERBQUNDO1FBQUlULFdBQVU7UUFBa0JVLEtBQUszQjs7Ozs7O0FBRTFDO0dBdER3QkQ7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9TcGlubmluZ051bWJlcnMudHN4PzdjYzUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcblxyXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnQC9saWIvY29sb3JzJztcclxuXHJcbmZ1bmN0aW9uIGxlcnAoYTogbnVtYmVyLCBiOiBudW1iZXIsIHQ6IG51bWJlcikge1xyXG4gIHJldHVybiAoYiAtIGEpICogdCArIGE7XHJcbn1cclxuXHJcbi8vIENvbnZlcnQgaGV4IHRvIFJHQlxyXG5mdW5jdGlvbiBoZXhUb1JnYihoZXg6IHN0cmluZyk6IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9IHtcclxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KTtcclxuICByZXR1cm4gcmVzdWx0XHJcbiAgICA/IHtcclxuICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgfVxyXG4gICAgOiB7IHI6IDAsIGc6IDAsIGI6IDAgfTtcclxufVxyXG5cclxuLy8gSW50ZXJwb2xhdGUgYmV0d2VlbiB0d28gaGV4IGNvbG9yc1xyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUNvbG9yKGNvbG9yMTogc3RyaW5nLCBjb2xvcjI6IHN0cmluZywgdDogbnVtYmVyKTogc3RyaW5nIHtcclxuICBjb25zdCByZ2IxID0gaGV4VG9SZ2IoY29sb3IxKTtcclxuICBjb25zdCByZ2IyID0gaGV4VG9SZ2IoY29sb3IyKTtcclxuICBjb25zdCByID0gTWF0aC5yb3VuZChsZXJwKHJnYjEuciwgcmdiMi5yLCB0KSk7XHJcbiAgY29uc3QgZyA9IE1hdGgucm91bmQobGVycChyZ2IxLmcsIHJnYjIuZywgdCkpO1xyXG4gIGNvbnN0IGIgPSBNYXRoLnJvdW5kKGxlcnAocmdiMS5iLCByZ2IyLmIsIHQpKTtcclxuICByZXR1cm4gYHJnYigke3J9LCAke2d9LCAke2J9KWA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbG9yKGk6IG51bWJlciwgdG90YWw6IG51bWJlcikge1xyXG4gIGNvbnN0IHQgPSBpIC8gdG90YWw7XHJcbiAgLy8gSW50ZXJwb2xhdGUgYmV0d2VlbiBXZWJrbGFyIGNvbG9yczogcHJpbWFyeSAoZGFyayBncmVlbikgLT4gc2Vjb25kYXJ5IChtZWRpdW0gZ3JlZW4pIC0+IHRlcnRpYXJ5IChsaWdodCBncmVlbi1iZWlnZSlcclxuICBpZiAodCA8IDAuNSkge1xyXG4gICAgcmV0dXJuIGludGVycG9sYXRlQ29sb3IoY29sb3JzLnByaW1hcnksIGNvbG9ycy5zZWNvbmRhcnksIHQgKiAyKTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGludGVycG9sYXRlQ29sb3IoY29sb3JzLnNlY29uZGFyeSwgY29sb3JzLnRlcnRpYXJ5LCAodCAtIDAuNSkgKiAyKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVdoZWVsKGk6IG51bWJlciwgdG90YWw6IG51bWJlcikge1xyXG4gIGNvbnN0IGRpc3RhbmNlID0gaSArIDMuNTsgLy8gU2xpZ2h0bHkgaW5jcmVhc2VkIGRpc3RhbmNlXHJcbiAgY29uc3QgY2hhcldpZHRoID0gMC44NTtcclxuICBjb25zdCBzcGVlZCA9IDE7XHJcbiAgY29uc3QgY2lyY3VtID0gZGlzdGFuY2UgKiAyICogTWF0aC5QSTtcclxuICBjb25zdCBudW1iZXJzID0gTWF0aC5mbG9vcihjaXJjdW0gLyBjaGFyV2lkdGgpO1xyXG4gIGNvbnN0IHRpbWUgPSBzcGVlZCAqIG51bWJlcnM7XHJcbiAgY29uc3QgdCA9IGkgLyB0b3RhbDtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHRpbWUsXHJcbiAgICBudW1iZXJzLFxyXG4gICAgZGlzdGFuY2UsXHJcbiAgICBjb2xvcjogY29sb3IoaSwgdG90YWwpLFxyXG4gICAgc2NhbGU6IGxlcnAoMSwgMC4yNSwgdCAqIHQgKiAwLjUpLCAvLyBNZWRpdW0gc2NhbGVcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGlubmluZ051bWJlcnMoKSB7XHJcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmICghY29udGFpbmVyUmVmLmN1cnJlbnQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJSZWYuY3VycmVudDtcclxuICAgIGNvbnN0IHRvdGFsID0gMTM7XHJcbiAgICBjb25zdCB3aGVlbHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gY3JlYXRlV2hlZWwoaSwgdG90YWwpKTtcclxuXHJcbiAgICB3aGVlbHMuZm9yRWFjaCgod2hlZWwpID0+IHtcclxuICAgICAgY29uc3QgeyB0aW1lLCBudW1iZXJzLCBkaXN0YW5jZSwgY29sb3I6IHdoZWVsQ29sb3IsIHNjYWxlIH0gPSB3aGVlbDtcclxuICAgICAgY29uc3QgYW5nbGVEaWZmID0gKE1hdGguUEkgKiAyKSAvIG51bWJlcnM7XHJcbiAgICAgIGNvbnN0IGRpdnMgPSBbXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyczsgaSsrKSB7XHJcbiAgICAgICAgZGl2cy5wdXNoKGFuZ2xlRGlmZiAqIGkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB3aGVlbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICB3aGVlbERpdi5jbGFzc05hbWUgPSAnd2hlZWwnO1xyXG4gICAgICB3aGVlbERpdi5zdHlsZS5jb2xvciA9IHdoZWVsQ29sb3I7XHJcbiAgICAgIHdoZWVsRGl2LnN0eWxlLnNldFByb3BlcnR5KCctLWwnLCBgJHtkaXN0YW5jZX1lbWApO1xyXG4gICAgICB3aGVlbERpdi5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tJywgYCR7bnVtYmVyc31gKTtcclxuICAgICAgd2hlZWxEaXYuc3R5bGUuc2V0UHJvcGVydHkoJy0tdCcsIGAke3RpbWV9c2ApO1xyXG4gICAgICB3aGVlbERpdi5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1yMScsIE1hdGgucmFuZG9tKCkgPCAwLjUgPyAncmV2ZXJzZScgOiAnbm9ybWFsJyk7XHJcbiAgICAgIHdoZWVsRGl2LnN0eWxlLnNldFByb3BlcnR5KCctLXMnLCBgJHtzY2FsZX1gKTtcclxuXHJcbiAgICAgIGRpdnMuZm9yRWFjaCgoYW5nbGUsIGkpID0+IHtcclxuICAgICAgICBpZiAoTWF0aC5zcXJ0KE1hdGgucmFuZG9tKCkpIDwgc2NhbGUpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgbnVtYmVyRGl2LmNsYXNzTmFtZSA9ICdudW1iZXInO1xyXG4gICAgICAgICAgbnVtYmVyRGl2LnN0eWxlLnNldFByb3BlcnR5KCctLWEnLCBgJHsoYW5nbGUgKiAxODApIC8gTWF0aC5QSX1kZWdgKTtcclxuICAgICAgICAgIG51bWJlckRpdi5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pJywgYCR7aX1gKTtcclxuICAgICAgICAgIG51bWJlckRpdi5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1yJywgTWF0aC5yYW5kb20oKSA8IDAuNSA/ICdyZXZlcnNlJyA6ICdub3JtYWwnKTtcclxuXHJcbiAgICAgICAgICB3aGVlbERpdi5hcHBlbmRDaGlsZChudW1iZXJEaXYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQod2hlZWxEaXYpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2xlYW51cCBmdW5jdGlvblxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9LCBbXSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInNwaW5uaW5nLW51bWJlclwiIHJlZj17Y29udGFpbmVyUmVmfSAvPlxyXG4gICk7XHJcbn1cclxuXHJcbiJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJjb2xvcnMiLCJsZXJwIiwiYSIsImIiLCJ0IiwiaGV4VG9SZ2IiLCJoZXgiLCJyZXN1bHQiLCJleGVjIiwiciIsInBhcnNlSW50IiwiZyIsImludGVycG9sYXRlQ29sb3IiLCJjb2xvcjEiLCJjb2xvcjIiLCJyZ2IxIiwicmdiMiIsIk1hdGgiLCJyb3VuZCIsImNvbG9yIiwiaSIsInRvdGFsIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInRlcnRpYXJ5IiwiY3JlYXRlV2hlZWwiLCJkaXN0YW5jZSIsImNoYXJXaWR0aCIsInNwZWVkIiwiY2lyY3VtIiwiUEkiLCJudW1iZXJzIiwiZmxvb3IiLCJ0aW1lIiwic2NhbGUiLCJTcGlubmluZ051bWJlcnMiLCJjb250YWluZXJSZWYiLCJjdXJyZW50IiwiY29udGFpbmVyIiwid2hlZWxzIiwiQXJyYXkiLCJmcm9tIiwibGVuZ3RoIiwiXyIsImZvckVhY2giLCJ3aGVlbCIsIndoZWVsQ29sb3IiLCJhbmdsZURpZmYiLCJkaXZzIiwicHVzaCIsIndoZWVsRGl2IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsInJhbmRvbSIsImFuZ2xlIiwic3FydCIsIm51bWJlckRpdiIsImFwcGVuZENoaWxkIiwiaW5uZXJIVE1MIiwiZGl2IiwicmVmIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/SpinningNumbers.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/background-beams.tsx": /*!********************************************!*\ !*** ./components/ui/background-beams.tsx ***! \********************************************/ /***/ (function(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 */ BackgroundBeams: function() { return /* binding */ BackgroundBeams; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ BackgroundBeams auto */ \n\n\n\nconst BackgroundBeams = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1___default().memo(_c = (param)=>{\n let { className } = param;\n const paths = [\n \"M-380 -189C-380 -189 -312 216 152 343C616 470 684 875 684 875\",\n \"M-373 -197C-373 -197 -305 208 159 335C623 462 691 867 691 867\",\n \"M-366 -205C-366 -205 -298 200 166 327C630 454 698 859 698 859\",\n \"M-359 -213C-359 -213 -291 192 173 319C637 446 705 851 705 851\",\n \"M-352 -221C-352 -221 -284 184 180 311C644 438 712 843 712 843\",\n \"M-345 -229C-345 -229 -277 176 187 303C651 430 719 835 719 835\",\n \"M-338 -237C-338 -237 -270 168 194 295C658 422 726 827 726 827\",\n \"M-331 -245C-331 -245 -263 160 201 287C665 414 733 819 733 819\",\n \"M-324 -253C-324 -253 -256 152 208 279C672 406 740 811 740 811\",\n \"M-317 -261C-317 -261 -249 144 215 271C679 398 747 803 747 803\",\n \"M-310 -269C-310 -269 -242 136 222 263C686 390 754 795 754 795\",\n \"M-303 -277C-303 -277 -235 128 229 255C693 382 761 787 761 787\",\n \"M-296 -285C-296 -285 -228 120 236 247C700 374 768 779 768 779\",\n \"M-289 -293C-289 -293 -221 112 243 239C707 366 775 771 775 771\",\n \"M-282 -301C-282 -301 -214 104 250 231C714 358 782 763 782 763\",\n \"M-275 -309C-275 -309 -207 96 257 223C721 350 789 755 789 755\",\n \"M-268 -317C-268 -317 -200 88 264 215C728 342 796 747 796 747\",\n \"M-261 -325C-261 -325 -193 80 271 207C735 334 803 739 803 739\",\n \"M-254 -333C-254 -333 -186 72 278 199C742 326 810 731 810 731\",\n \"M-247 -341C-247 -341 -179 64 285 191C749 318 817 723 817 723\",\n \"M-240 -349C-240 -349 -172 56 292 183C756 310 824 715 824 715\",\n \"M-233 -357C-233 -357 -165 48 299 175C763 302 831 707 831 707\",\n \"M-226 -365C-226 -365 -158 40 306 167C770 294 838 699 838 699\",\n \"M-219 -373C-219 -373 -151 32 313 159C777 286 845 691 845 691\",\n \"M-212 -381C-212 -381 -144 24 320 151C784 278 852 683 852 683\",\n \"M-205 -389C-205 -389 -137 16 327 143C791 270 859 675 859 675\",\n \"M-198 -397C-198 -397 -130 8 334 135C798 262 866 667 866 667\",\n \"M-191 -405C-191 -405 -123 0 341 127C805 254 873 659 873 659\",\n \"M-184 -413C-184 -413 -116 -8 348 119C812 246 880 651 880 651\",\n \"M-177 -421C-177 -421 -109 -16 355 111C819 238 887 643 887 643\",\n \"M-170 -429C-170 -429 -102 -24 362 103C826 230 894 635 894 635\",\n \"M-163 -437C-163 -437 -95 -32 369 95C833 222 901 627 901 627\",\n \"M-156 -445C-156 -445 -88 -40 376 87C840 214 908 619 908 619\",\n \"M-149 -453C-149 -453 -81 -48 383 79C847 206 915 611 915 611\",\n \"M-142 -461C-142 -461 -74 -56 390 71C854 198 922 603 922 603\",\n \"M-135 -469C-135 -469 -67 -64 397 63C861 190 929 595 929 595\",\n \"M-128 -477C-128 -477 -60 -72 404 55C868 182 936 587 936 587\",\n \"M-121 -485C-121 -485 -53 -80 411 47C875 174 943 579 943 579\",\n \"M-114 -493C-114 -493 -46 -88 418 39C882 166 950 571 950 571\",\n \"M-107 -501C-107 -501 -39 -96 425 31C889 158 957 563 957 563\",\n \"M-100 -509C-100 -509 -32 -104 432 23C896 150 964 555 964 555\",\n \"M-93 -517C-93 -517 -25 -112 439 15C903 142 971 547 971 547\",\n \"M-86 -525C-86 -525 -18 -120 446 7C910 134 978 539 978 539\",\n \"M-79 -533C-79 -533 -11 -128 453 -1C917 126 985 531 985 531\",\n \"M-72 -541C-72 -541 -4 -136 460 -9C924 118 992 523 992 523\",\n \"M-65 -549C-65 -549 3 -144 467 -17C931 110 999 515 999 515\",\n \"M-58 -557C-58 -557 10 -152 474 -25C938 102 1006 507 1006 507\",\n \"M-51 -565C-51 -565 17 -160 481 -33C945 94 1013 499 1013 499\",\n \"M-44 -573C-44 -573 24 -168 488 -41C952 86 1020 491 1020 491\",\n \"M-37 -581C-37 -581 31 -176 495 -49C959 78 1027 483 1027 483\"\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"absolute inset-0 flex h-full w-full items-center justify-center [mask-repeat:no-repeat] [mask-size:40px]\", className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"pointer-events-none absolute z-0 h-full w-full\",\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 696 316\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M-380 -189C-380 -189 -312 216 152 343C616 470 684 875 684 875M-373 -197C-373 -197 -305 208 159 335C623 462 691 867 691 867M-366 -205C-366 -205 -298 200 166 327C630 454 698 859 698 859M-359 -213C-359 -213 -291 192 173 319C637 446 705 851 705 851M-352 -221C-352 -221 -284 184 180 311C644 438 712 843 712 843M-345 -229C-345 -229 -277 176 187 303C651 430 719 835 719 835M-338 -237C-338 -237 -270 168 194 295C658 422 726 827 726 827M-331 -245C-331 -245 -263 160 201 287C665 414 733 819 733 819M-324 -253C-324 -253 -256 152 208 279C672 406 740 811 740 811M-317 -261C-317 -261 -249 144 215 271C679 398 747 803 747 803M-310 -269C-310 -269 -242 136 222 263C686 390 754 795 754 795M-303 -277C-303 -277 -235 128 229 255C693 382 761 787 761 787M-296 -285C-296 -285 -228 120 236 247C700 374 768 779 768 779M-289 -293C-289 -293 -221 112 243 239C707 366 775 771 775 771M-282 -301C-282 -301 -214 104 250 231C714 358 782 763 782 763M-275 -309C-275 -309 -207 96 257 223C721 350 789 755 789 755M-268 -317C-268 -317 -200 88 264 215C728 342 796 747 796 747M-261 -325C-261 -325 -193 80 271 207C735 334 803 739 803 739M-254 -333C-254 -333 -186 72 278 199C742 326 810 731 810 731M-247 -341C-247 -341 -179 64 285 191C749 318 817 723 817 723M-240 -349C-240 -349 -172 56 292 183C756 310 824 715 824 715M-233 -357C-233 -357 -165 48 299 175C763 302 831 707 831 707M-226 -365C-226 -365 -158 40 306 167C770 294 838 699 838 699M-219 -373C-219 -373 -151 32 313 159C777 286 845 691 845 691M-212 -381C-212 -381 -144 24 320 151C784 278 852 683 852 683M-205 -389C-205 -389 -137 16 327 143C791 270 859 675 859 675M-198 -397C-198 -397 -130 8 334 135C798 262 866 667 866 667M-191 -405C-191 -405 -123 0 341 127C805 254 873 659 873 659M-184 -413C-184 -413 -116 -8 348 119C812 246 880 651 880 651M-177 -421C-177 -421 -109 -16 355 111C819 238 887 643 887 643M-170 -429C-170 -429 -102 -24 362 103C826 230 894 635 894 635M-163 -437C-163 -437 -95 -32 369 95C833 222 901 627 901 627M-156 -445C-156 -445 -88 -40 376 87C840 214 908 619 908 619M-149 -453C-149 -453 -81 -48 383 79C847 206 915 611 915 611M-142 -461C-142 -461 -74 -56 390 71C854 198 922 603 922 603M-135 -469C-135 -469 -67 -64 397 63C861 190 929 595 929 595M-128 -477C-128 -477 -60 -72 404 55C868 182 936 587 936 587M-121 -485C-121 -485 -53 -80 411 47C875 174 943 579 943 579M-114 -493C-114 -493 -46 -88 418 39C882 166 950 571 950 571M-107 -501C-107 -501 -39 -96 425 31C889 158 957 563 957 563M-100 -509C-100 -509 -32 -104 432 23C896 150 964 555 964 555M-93 -517C-93 -517 -25 -112 439 15C903 142 971 547 971 547M-86 -525C-86 -525 -18 -120 446 7C910 134 978 539 978 539M-79 -533C-79 -533 -11 -128 453 -1C917 126 985 531 985 531M-72 -541C-72 -541 -4 -136 460 -9C924 118 992 523 992 523M-65 -549C-65 -549 3 -144 467 -17C931 110 999 515 999 515M-58 -557C-58 -557 10 -152 474 -25C938 102 1006 507 1006 507M-51 -565C-51 -565 17 -160 481 -33C945 94 1013 499 1013 499M-44 -573C-44 -573 24 -168 488 -41C952 86 1020 491 1020 491M-37 -581C-37 -581 31 -176 495 -49C959 78 1027 483 1027 483M-30 -589C-30 -589 38 -184 502 -57C966 70 1034 475 1034 475M-23 -597C-23 -597 45 -192 509 -65C973 62 1041 467 1041 467M-16 -605C-16 -605 52 -200 516 -73C980 54 1048 459 1048 459M-9 -613C-9 -613 59 -208 523 -81C987 46 1055 451 1055 451M-2 -621C-2 -621 66 -216 530 -89C994 38 1062 443 1062 443M5 -629C5 -629 73 -224 537 -97C1001 30 1069 435 1069 435M12 -637C12 -637 80 -232 544 -105C1008 22 1076 427 1076 427M19 -645C19 -645 87 -240 551 -113C1015 14 1083 419 1083 419\",\n stroke: \"url(#paint0_radial_242_278)\",\n strokeOpacity: \"0.05\",\n strokeWidth: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 75,\n columnNumber: 11\n }, undefined),\n paths.map((path, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(motion_react__WEBPACK_IMPORTED_MODULE_3__.motion.path, {\n d: path,\n stroke: \"url(#linearGradient-\".concat(index, \")\"),\n strokeOpacity: \"0.4\",\n strokeWidth: \"0.5\"\n }, \"path-\" + index, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 83,\n columnNumber: 13\n }, undefined)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"defs\", {\n children: [\n paths.map((path, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(motion_react__WEBPACK_IMPORTED_MODULE_3__.motion.linearGradient, {\n id: \"linearGradient-\".concat(index),\n initial: {\n x1: \"0%\",\n x2: \"0%\",\n y1: \"0%\",\n y2: \"0%\"\n },\n animate: {\n x1: [\n \"0%\",\n \"100%\"\n ],\n x2: [\n \"0%\",\n \"95%\"\n ],\n y1: [\n \"0%\",\n \"100%\"\n ],\n y2: [\n \"0%\",\n \"\".concat(93 + Math.random() * 8, \"%\")\n ]\n },\n transition: {\n duration: Math.random() * 10 + 10,\n ease: \"easeInOut\",\n repeat: Infinity,\n delay: Math.random() * 10\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"stop\", {\n stopColor: \"#18CCFC\",\n stopOpacity: \"0\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 115,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"stop\", {\n stopColor: \"#18CCFC\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 116,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"stop\", {\n offset: \"32.5%\",\n stopColor: \"#6344F5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 117,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"stop\", {\n offset: \"100%\",\n stopColor: \"#AE48FF\",\n stopOpacity: \"0\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 118,\n columnNumber: 17\n }, undefined)\n ]\n }, \"gradient-\".concat(index), true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 93,\n columnNumber: 15\n }, undefined)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"radialGradient\", {\n id: \"paint0_radial_242_278\",\n cx: \"0\",\n cy: \"0\",\n r: \"1\",\n gradientUnits: \"userSpaceOnUse\",\n gradientTransform: \"translate(352 34) rotate(90) scale(555 1560.62)\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"stop\", {\n offset: \"0.0666667\",\n stopColor: \"#d4d4d4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 130,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"stop\", {\n offset: \"0.243243\",\n stopColor: \"#d4d4d4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 131,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"stop\", {\n offset: \"0.43594\",\n stopColor: \"white\",\n stopOpacity: \"0\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 132,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 122,\n columnNumber: 13\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 91,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 67,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\background-beams.tsx\",\n lineNumber: 61,\n columnNumber: 7\n }, undefined);\n});\n_c1 = BackgroundBeams;\nBackgroundBeams.displayName = \"BackgroundBeams\";\nvar _c, _c1;\n$RefreshReg$(_c, \"BackgroundBeams$React.memo\");\n$RefreshReg$(_c1, \"BackgroundBeams\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvYmFja2dyb3VuZC1iZWFtcy50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUMwQjtBQUNZO0FBQ0w7QUFFMUIsTUFBTUcsZ0NBQWtCSCxpREFBVSxNQUN2QztRQUFDLEVBQUVLLFNBQVMsRUFBMEI7SUFDcEMsTUFBTUMsUUFBUTtRQUNaO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDRDtJQUNELHFCQUNFLDhEQUFDQztRQUNDRixXQUFXSCw4Q0FBRUEsQ0FDWCw0R0FDQUc7a0JBR0YsNEVBQUNHO1lBQ0NILFdBQVU7WUFDVkksT0FBTTtZQUNOQyxRQUFPO1lBQ1BDLFNBQVE7WUFDUkMsTUFBSztZQUNMQyxPQUFNOzs4QkFFTiw4REFBQ0M7b0JBQ0NDLEdBQUU7b0JBQ0ZDLFFBQU87b0JBQ1BDLGVBQWM7b0JBQ2RDLGFBQVk7Ozs7OztnQkFHYlosTUFBTWEsR0FBRyxDQUFDLENBQUNMLE1BQU1NLHNCQUNoQiw4REFBQ25CLGdEQUFNQSxDQUFDYSxJQUFJO3dCQUVWQyxHQUFHRDt3QkFDSEUsUUFBUSx1QkFBNkIsT0FBTkksT0FBTTt3QkFDckNILGVBQWM7d0JBQ2RDLGFBQVk7dUJBSlAsVUFBVUU7Ozs7OzhCQU9uQiw4REFBQ0M7O3dCQUNFZixNQUFNYSxHQUFHLENBQUMsQ0FBQ0wsTUFBTU0sc0JBQ2hCLDhEQUFDbkIsZ0RBQU1BLENBQUNxQixjQUFjO2dDQUNwQkMsSUFBSSxrQkFBd0IsT0FBTkg7Z0NBRXRCSSxTQUFTO29DQUNQQyxJQUFJO29DQUNKQyxJQUFJO29DQUNKQyxJQUFJO29DQUNKQyxJQUFJO2dDQUNOO2dDQUNBQyxTQUFTO29DQUNQSixJQUFJO3dDQUFDO3dDQUFNO3FDQUFPO29DQUNsQkMsSUFBSTt3Q0FBQzt3Q0FBTTtxQ0FBTTtvQ0FDakJDLElBQUk7d0NBQUM7d0NBQU07cUNBQU87b0NBQ2xCQyxJQUFJO3dDQUFDO3dDQUFPLEdBQXlCLE9BQXZCLEtBQUtFLEtBQUtDLE1BQU0sS0FBSyxHQUFFO3FDQUFHO2dDQUMxQztnQ0FDQUMsWUFBWTtvQ0FDVkMsVUFBVUgsS0FBS0MsTUFBTSxLQUFLLEtBQUs7b0NBQy9CRyxNQUFNO29DQUNOQyxRQUFRQztvQ0FDUkMsT0FBT1AsS0FBS0MsTUFBTSxLQUFLO2dDQUN6Qjs7a0RBRUEsOERBQUNPO3dDQUFLQyxXQUFVO3dDQUFVQyxhQUFZOzs7Ozs7a0RBQ3RDLDhEQUFDRjt3Q0FBS0MsV0FBVTs7Ozs7O2tEQUNoQiw4REFBQ0Q7d0NBQUtHLFFBQU87d0NBQVFGLFdBQVU7Ozs7OztrREFDL0IsOERBQUNEO3dDQUFLRyxRQUFPO3dDQUFPRixXQUFVO3dDQUFVQyxhQUFZOzs7Ozs7OytCQXZCL0MsWUFBa0IsT0FBTnBCOzs7OztzQ0EyQnJCLDhEQUFDc0I7NEJBQ0NuQixJQUFHOzRCQUNIb0IsSUFBRzs0QkFDSEMsSUFBRzs0QkFDSEMsR0FBRTs0QkFDRkMsZUFBYzs0QkFDZEMsbUJBQWtCOzs4Q0FFbEIsOERBQUNUO29DQUFLRyxRQUFPO29DQUFZRixXQUFVOzs7Ozs7OENBQ25DLDhEQUFDRDtvQ0FBS0csUUFBTztvQ0FBV0YsV0FBVTs7Ozs7OzhDQUNsQyw4REFBQ0Q7b0NBQUtHLFFBQU87b0NBQVVGLFdBQVU7b0NBQVFDLGFBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWpFLEdBQ0E7O0FBRUZyQyxnQkFBZ0I2QyxXQUFXLEdBQUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy91aS9iYWNrZ3JvdW5kLWJlYW1zLnRzeD8xY2JkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IG1vdGlvbiB9IGZyb20gXCJtb3Rpb24vcmVhY3RcIjtcclxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBCYWNrZ3JvdW5kQmVhbXMgPSBSZWFjdC5tZW1vKFxyXG4gICh7IGNsYXNzTmFtZSB9OiB7IGNsYXNzTmFtZT86IHN0cmluZyB9KSA9PiB7XHJcbiAgICBjb25zdCBwYXRocyA9IFtcclxuICAgICAgXCJNLTM4MCAtMTg5Qy0zODAgLTE4OSAtMzEyIDIxNiAxNTIgMzQzQzYxNiA0NzAgNjg0IDg3NSA2ODQgODc1XCIsXHJcbiAgICAgIFwiTS0zNzMgLTE5N0MtMzczIC0xOTcgLTMwNSAyMDggMTU5IDMzNUM2MjMgNDYyIDY5MSA4NjcgNjkxIDg2N1wiLFxyXG4gICAgICBcIk0tMzY2IC0yMDVDLTM2NiAtMjA1IC0yOTggMjAwIDE2NiAzMjdDNjMwIDQ1NCA2OTggODU5IDY5OCA4NTlcIixcclxuICAgICAgXCJNLTM1OSAtMjEzQy0zNTkgLTIxMyAtMjkxIDE5MiAxNzMgMzE5QzYzNyA0NDYgNzA1IDg1MSA3MDUgODUxXCIsXHJcbiAgICAgIFwiTS0zNTIgLTIyMUMtMzUyIC0yMjEgLTI4NCAxODQgMTgwIDMxMUM2NDQgNDM4IDcxMiA4NDMgNzEyIDg0M1wiLFxyXG4gICAgICBcIk0tMzQ1IC0yMjlDLTM0NSAtMjI5IC0yNzcgMTc2IDE4NyAzMDNDNjUxIDQzMCA3MTkgODM1IDcxOSA4MzVcIixcclxuICAgICAgXCJNLTMzOCAtMjM3Qy0zMzggLTIzNyAtMjcwIDE2OCAxOTQgMjk1QzY1OCA0MjIgNzI2IDgyNyA3MjYgODI3XCIsXHJcbiAgICAgIFwiTS0zMzEgLTI0NUMtMzMxIC0yNDUgLTI2MyAxNjAgMjAxIDI4N0M2NjUgNDE0IDczMyA4MTkgNzMzIDgxOVwiLFxyXG4gICAgICBcIk0tMzI0IC0yNTNDLTMyNCAtMjUzIC0yNTYgMTUyIDIwOCAyNzlDNjcyIDQwNiA3NDAgODExIDc0MCA4MTFcIixcclxuICAgICAgXCJNLTMxNyAtMjYxQy0zMTcgLTI2MSAtMjQ5IDE0NCAyMTUgMjcxQzY3OSAzOTggNzQ3IDgwMyA3NDcgODAzXCIsXHJcbiAgICAgIFwiTS0zMTAgLTI2OUMtMzEwIC0yNjkgLTI0MiAxMzYgMjIyIDI2M0M2ODYgMzkwIDc1NCA3OTUgNzU0IDc5NVwiLFxyXG4gICAgICBcIk0tMzAzIC0yNzdDLTMwMyAtMjc3IC0yMzUgMTI4IDIyOSAyNTVDNjkzIDM4MiA3NjEgNzg3IDc2MSA3ODdcIixcclxuICAgICAgXCJNLTI5NiAtMjg1Qy0yOTYgLTI4NSAtMjI4IDEyMCAyMzYgMjQ3QzcwMCAzNzQgNzY4IDc3OSA3NjggNzc5XCIsXHJcbiAgICAgIFwiTS0yODkgLTI5M0MtMjg5IC0yOTMgLTIyMSAxMTIgMjQzIDIzOUM3MDcgMzY2IDc3NSA3NzEgNzc1IDc3MVwiLFxyXG4gICAgICBcIk0tMjgyIC0zMDFDLTI4MiAtMzAxIC0yMTQgMTA0IDI1MCAyMzFDNzE0IDM1OCA3ODIgNzYzIDc4MiA3NjNcIixcclxuICAgICAgXCJNLTI3NSAtMzA5Qy0yNzUgLTMwOSAtMjA3IDk2IDI1NyAyMjNDNzIxIDM1MCA3ODkgNzU1IDc4OSA3NTVcIixcclxuICAgICAgXCJNLTI2OCAtMzE3Qy0yNjggLTMxNyAtMjAwIDg4IDI2NCAyMTVDNzI4IDM0MiA3OTYgNzQ3IDc5NiA3NDdcIixcclxuICAgICAgXCJNLTI2MSAtMzI1Qy0yNjEgLTMyNSAtMTkzIDgwIDI3MSAyMDdDNzM1IDMzNCA4MDMgNzM5IDgwMyA3MzlcIixcclxuICAgICAgXCJNLTI1NCAtMzMzQy0yNTQgLTMzMyAtMTg2IDcyIDI3OCAxOTlDNzQyIDMyNiA4MTAgNzMxIDgxMCA3MzFcIixcclxuICAgICAgXCJNLTI0NyAtMzQxQy0yNDcgLTM0MSAtMTc5IDY0IDI4NSAxOTFDNzQ5IDMxOCA4MTcgNzIzIDgxNyA3MjNcIixcclxuICAgICAgXCJNLTI0MCAtMzQ5Qy0yNDAgLTM0OSAtMTcyIDU2IDI5MiAxODNDNzU2IDMxMCA4MjQgNzE1IDgyNCA3MTVcIixcclxuICAgICAgXCJNLTIzMyAtMzU3Qy0yMzMgLTM1NyAtMTY1IDQ4IDI5OSAxNzVDNzYzIDMwMiA4MzEgNzA3IDgzMSA3MDdcIixcclxuICAgICAgXCJNLTIyNiAtMzY1Qy0yMjYgLTM2NSAtMTU4IDQwIDMwNiAxNjdDNzcwIDI5NCA4MzggNjk5IDgzOCA2OTlcIixcclxuICAgICAgXCJNLTIxOSAtMzczQy0yMTkgLTM3MyAtMTUxIDMyIDMxMyAxNTlDNzc3IDI4NiA4NDUgNjkxIDg0NSA2OTFcIixcclxuICAgICAgXCJNLTIxMiAtMzgxQy0yMTIgLTM4MSAtMTQ0IDI0IDMyMCAxNTFDNzg0IDI3OCA4NTIgNjgzIDg1MiA2ODNcIixcclxuICAgICAgXCJNLTIwNSAtMzg5Qy0yMDUgLTM4OSAtMTM3IDE2IDMyNyAxNDNDNzkxIDI3MCA4NTkgNjc1IDg1OSA2NzVcIixcclxuICAgICAgXCJNLTE5OCAtMzk3Qy0xOTggLTM5NyAtMTMwIDggMzM0IDEzNUM3OTggMjYyIDg2NiA2NjcgODY2IDY2N1wiLFxyXG4gICAgICBcIk0tMTkxIC00MDVDLTE5MSAtNDA1IC0xMjMgMCAzNDEgMTI3QzgwNSAyNTQgODczIDY1OSA4NzMgNjU5XCIsXHJcbiAgICAgIFwiTS0xODQgLTQxM0MtMTg0IC00MTMgLTExNiAtOCAzNDggMTE5QzgxMiAyNDYgODgwIDY1MSA4ODAgNjUxXCIsXHJcbiAgICAgIFwiTS0xNzcgLTQyMUMtMTc3IC00MjEgLTEwOSAtMTYgMzU1IDExMUM4MTkgMjM4IDg4NyA2NDMgODg3IDY0M1wiLFxyXG4gICAgICBcIk0tMTcwIC00MjlDLTE3MCAtNDI5IC0xMDIgLTI0IDM2MiAxMDNDODI2IDIzMCA4OTQgNjM1IDg5NCA2MzVcIixcclxuICAgICAgXCJNLTE2MyAtNDM3Qy0xNjMgLTQzNyAtOTUgLTMyIDM2OSA5NUM4MzMgMjIyIDkwMSA2MjcgOTAxIDYyN1wiLFxyXG4gICAgICBcIk0tMTU2IC00NDVDLTE1NiAtNDQ1IC04OCAtNDAgMzc2IDg3Qzg0MCAyMTQgOTA4IDYxOSA5MDggNjE5XCIsXHJcbiAgICAgIFwiTS0xNDkgLTQ1M0MtMTQ5IC00NTMgLTgxIC00OCAzODMgNzlDODQ3IDIwNiA5MTUgNjExIDkxNSA2MTFcIixcclxuICAgICAgXCJNLTE0MiAtNDYxQy0xNDIgLTQ2MSAtNzQgLTU2IDM5MCA3MUM4NTQgMTk4IDkyMiA2MDMgOTIyIDYwM1wiLFxyXG4gICAgICBcIk0tMTM1IC00NjlDLTEzNSAtNDY5IC02NyAtNjQgMzk3IDYzQzg2MSAxOTAgOTI5IDU5NSA5MjkgNTk1XCIsXHJcbiAgICAgIFwiTS0xMjggLTQ3N0MtMTI4IC00NzcgLTYwIC03MiA0MDQgNTVDODY4IDE4MiA5MzYgNTg3IDkzNiA1ODdcIixcclxuICAgICAgXCJNLTEyMSAtNDg1Qy0xMjEgLTQ4NSAtNTMgLTgwIDQxMSA0N0M4NzUgMTc0IDk0MyA1NzkgOTQzIDU3OVwiLFxyXG4gICAgICBcIk0tMTE0IC00OTNDLTExNCAtNDkzIC00NiAtODggNDE4IDM5Qzg4MiAxNjYgOTUwIDU3MSA5NTAgNTcxXCIsXHJcbiAgICAgIFwiTS0xMDcgLTUwMUMtMTA3IC01MDEgLTM5IC05NiA0MjUgMzFDODg5IDE1OCA5NTcgNTYzIDk1NyA1NjNcIixcclxuICAgICAgXCJNLTEwMCAtNTA5Qy0xMDAgLTUwOSAtMzIgLTEwNCA0MzIgMjNDODk2IDE1MCA5NjQgNTU1IDk2NCA1NTVcIixcclxuICAgICAgXCJNLTkzIC01MTdDLTkzIC01MTcgLTI1IC0xMTIgNDM5IDE1QzkwMyAxNDIgOTcxIDU0NyA5NzEgNTQ3XCIsXHJcbiAgICAgIFwiTS04NiAtNTI1Qy04NiAtNTI1IC0xOCAtMTIwIDQ0NiA3QzkxMCAxMzQgOTc4IDUzOSA5NzggNTM5XCIsXHJcbiAgICAgIFwiTS03OSAtNTMzQy03OSAtNTMzIC0xMSAtMTI4IDQ1MyAtMUM5MTcgMTI2IDk4NSA1MzEgOTg1IDUzMVwiLFxyXG4gICAgICBcIk0tNzIgLTU0MUMtNzIgLTU0MSAtNCAtMTM2IDQ2MCAtOUM5MjQgMTE4IDk5MiA1MjMgOTkyIDUyM1wiLFxyXG4gICAgICBcIk0tNjUgLTU0OUMtNjUgLTU0OSAzIC0xNDQgNDY3IC0xN0M5MzEgMTEwIDk5OSA1MTUgOTk5IDUxNVwiLFxyXG4gICAgICBcIk0tNTggLTU1N0MtNTggLTU1NyAxMCAtMTUyIDQ3NCAtMjVDOTM4IDEwMiAxMDA2IDUwNyAxMDA2IDUwN1wiLFxyXG4gICAgICBcIk0tNTEgLTU2NUMtNTEgLTU2NSAxNyAtMTYwIDQ4MSAtMzNDOTQ1IDk0IDEwMTMgNDk5IDEwMTMgNDk5XCIsXHJcbiAgICAgIFwiTS00NCAtNTczQy00NCAtNTczIDI0IC0xNjggNDg4IC00MUM5NTIgODYgMTAyMCA0OTEgMTAyMCA0OTFcIixcclxuICAgICAgXCJNLTM3IC01ODFDLTM3IC01ODEgMzEgLTE3NiA0OTUgLTQ5Qzk1OSA3OCAxMDI3IDQ4MyAxMDI3IDQ4M1wiLFxyXG4gICAgXTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NuKFxyXG4gICAgICAgICAgXCJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaC1mdWxsIHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgW21hc2stcmVwZWF0Om5vLXJlcGVhdF0gW21hc2stc2l6ZTo0MHB4XVwiLFxyXG4gICAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICAgICl9XHJcbiAgICAgID5cclxuICAgICAgICA8c3ZnXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHotMCBoLWZ1bGwgdy1mdWxsXCJcclxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcclxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNjk2IDMxNlwiXHJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTS0zODAgLTE4OUMtMzgwIC0xODkgLTMxMiAyMTYgMTUyIDM0M0M2MTYgNDcwIDY4NCA4NzUgNjg0IDg3NU0tMzczIC0xOTdDLTM3MyAtMTk3IC0zMDUgMjA4IDE1OSAzMzVDNjIzIDQ2MiA2OTEgODY3IDY5MSA4NjdNLTM2NiAtMjA1Qy0zNjYgLTIwNSAtMjk4IDIwMCAxNjYgMzI3QzYzMCA0NTQgNjk4IDg1OSA2OTggODU5TS0zNTkgLTIxM0MtMzU5IC0yMTMgLTI5MSAxOTIgMTczIDMxOUM2MzcgNDQ2IDcwNSA4NTEgNzA1IDg1MU0tMzUyIC0yMjFDLTM1MiAtMjIxIC0yODQgMTg0IDE4MCAzMTFDNjQ0IDQzOCA3MTIgODQzIDcxMiA4NDNNLTM0NSAtMjI5Qy0zNDUgLTIyOSAtMjc3IDE3NiAxODcgMzAzQzY1MSA0MzAgNzE5IDgzNSA3MTkgODM1TS0zMzggLTIzN0MtMzM4IC0yMzcgLTI3MCAxNjggMTk0IDI5NUM2NTggNDIyIDcyNiA4MjcgNzI2IDgyN00tMzMxIC0yNDVDLTMzMSAtMjQ1IC0yNjMgMTYwIDIwMSAyODdDNjY1IDQxNCA3MzMgODE5IDczMyA4MTlNLTMyNCAtMjUzQy0zMjQgLTI1MyAtMjU2IDE1MiAyMDggMjc5QzY3MiA0MDYgNzQwIDgxMSA3NDAgODExTS0zMTcgLTI2MUMtMzE3IC0yNjEgLTI0OSAxNDQgMjE1IDI3MUM2NzkgMzk4IDc0NyA4MDMgNzQ3IDgwM00tMzEwIC0yNjlDLTMxMCAtMjY5IC0yNDIgMTM2IDIyMiAyNjNDNjg2IDM5MCA3NTQgNzk1IDc1NCA3OTVNLTMwMyAtMjc3Qy0zMDMgLTI3NyAtMjM1IDEyOCAyMjkgMjU1QzY5MyAzODIgNzYxIDc4NyA3NjEgNzg3TS0yOTYgLTI4NUMtMjk2IC0yODUgLTIyOCAxMjAgMjM2IDI0N0M3MDAgMzc0IDc2OCA3NzkgNzY4IDc3OU0tMjg5IC0yOTNDLTI4OSAtMjkzIC0yMjEgMTEyIDI0MyAyMzlDNzA3IDM2NiA3NzUgNzcxIDc3NSA3NzFNLTI4MiAtMzAxQy0yODIgLTMwMSAtMjE0IDEwNCAyNTAgMjMxQzcxNCAzNTggNzgyIDc2MyA3ODIgNzYzTS0yNzUgLTMwOUMtMjc1IC0zMDkgLTIwNyA5NiAyNTcgMjIzQzcyMSAzNTAgNzg5IDc1NSA3ODkgNzU1TS0yNjggLTMxN0MtMjY4IC0zMTcgLTIwMCA4OCAyNjQgMjE1QzcyOCAzNDIgNzk2IDc0NyA3OTYgNzQ3TS0yNjEgLTMyNUMtMjYxIC0zMjUgLTE5MyA4MCAyNzEgMjA3QzczNSAzMzQgODAzIDczOSA4MDMgNzM5TS0yNTQgLTMzM0MtMjU0IC0zMzMgLTE4NiA3MiAyNzggMTk5Qzc0MiAzMjYgODEwIDczMSA4MTAgNzMxTS0yNDcgLTM0MUMtMjQ3IC0zNDEgLTE3OSA2NCAyODUgMTkxQzc0OSAzMTggODE3IDcyMyA4MTcgNzIzTS0yNDAgLTM0OUMtMjQwIC0zNDkgLTE3MiA1NiAyOTIgMTgzQzc1NiAzMTAgODI0IDcxNSA4MjQgNzE1TS0yMzMgLTM1N0MtMjMzIC0zNTcgLTE2NSA0OCAyOTkgMTc1Qzc2MyAzMDIgODMxIDcwNyA4MzEgNzA3TS0yMjYgLTM2NUMtMjI2IC0zNjUgLTE1OCA0MCAzMDYgMTY3Qzc3MCAyOTQgODM4IDY5OSA4MzggNjk5TS0yMTkgLTM3M0MtMjE5IC0zNzMgLTE1MSAzMiAzMTMgMTU5Qzc3NyAyODYgODQ1IDY5MSA4NDUgNjkxTS0yMTIgLTM4MUMtMjEyIC0zODEgLTE0NCAyNCAzMjAgMTUxQzc4NCAyNzggODUyIDY4MyA4NTIgNjgzTS0yMDUgLTM4OUMtMjA1IC0zODkgLTEzNyAxNiAzMjcgMTQzQzc5MSAyNzAgODU5IDY3NSA4NTkgNjc1TS0xOTggLTM5N0MtMTk4IC0zOTcgLTEzMCA4IDMzNCAxMzVDNzk4IDI2MiA4NjYgNjY3IDg2NiA2NjdNLTE5MSAtNDA1Qy0xOTEgLTQwNSAtMTIzIDAgMzQxIDEyN0M4MDUgMjU0IDg3MyA2NTkgODczIDY1OU0tMTg0IC00MTNDLTE4NCAtNDEzIC0xMTYgLTggMzQ4IDExOUM4MTIgMjQ2IDg4MCA2NTEgODgwIDY1MU0tMTc3IC00MjFDLTE3NyAtNDIxIC0xMDkgLTE2IDM1NSAxMTFDODE5IDIzOCA4ODcgNjQzIDg4NyA2NDNNLTE3MCAtNDI5Qy0xNzAgLTQyOSAtMTAyIC0yNCAzNjIgMTAzQzgyNiAyMzAgODk0IDYzNSA4OTQgNjM1TS0xNjMgLTQzN0MtMTYzIC00MzcgLTk1IC0zMiAzNjkgOTVDODMzIDIyMiA5MDEgNjI3IDkwMSA2MjdNLTE1NiAtNDQ1Qy0xNTYgLTQ0NSAtODggLTQwIDM3NiA4N0M4NDAgMjE0IDkwOCA2MTkgOTA4IDYxOU0tMTQ5IC00NTNDLTE0OSAtNDUzIC04MSAtNDggMzgzIDc5Qzg0NyAyMDYgOTE1IDYxMSA5MTUgNjExTS0xNDIgLTQ2MUMtMTQyIC00NjEgLTc0IC01NiAzOTAgNzFDODU0IDE5OCA5MjIgNjAzIDkyMiA2MDNNLTEzNSAtNDY5Qy0xMzUgLTQ2OSAtNjcgLTY0IDM5NyA2M0M4NjEgMTkwIDkyOSA1OTUgOTI5IDU5NU0tMTI4IC00NzdDLTEyOCAtNDc3IC02MCAtNzIgNDA0IDU1Qzg2OCAxODIgOTM2IDU4NyA5MzYgNTg3TS0xMjEgLTQ4NUMtMTIxIC00ODUgLTUzIC04MCA0MTEgNDdDODc1IDE3NCA5NDMgNTc5IDk0MyA1NzlNLTExNCAtNDkzQy0xMTQgLTQ5MyAtNDYgLTg4IDQxOCAzOUM4ODIgMTY2IDk1MCA1NzEgOTUwIDU3MU0tMTA3IC01MDFDLTEwNyAtNTAxIC0zOSAtOTYgNDI1IDMxQzg4OSAxNTggOTU3IDU2MyA5NTcgNTYzTS0xMDAgLTUwOUMtMTAwIC01MDkgLTMyIC0xMDQgNDMyIDIzQzg5NiAxNTAgOTY0IDU1NSA5NjQgNTU1TS05MyAtNTE3Qy05MyAtNTE3IC0yNSAtMTEyIDQzOSAxNUM5MDMgMTQyIDk3MSA1NDcgOTcxIDU0N00tODYgLTUyNUMtODYgLTUyNSAtMTggLTEyMCA0NDYgN0M5MTAgMTM0IDk3OCA1MzkgOTc4IDUzOU0tNzkgLTUzM0MtNzkgLTUzMyAtMTEgLTEyOCA0NTMgLTFDOTE3IDEyNiA5ODUgNTMxIDk4NSA1MzFNLTcyIC01NDFDLTcyIC01NDEgLTQgLTEzNiA0NjAgLTlDOTI0IDExOCA5OTIgNTIzIDk5MiA1MjNNLTY1IC01NDlDLTY1IC01NDkgMyAtMTQ0IDQ2NyAtMTdDOTMxIDExMCA5OTkgNTE1IDk5OSA1MTVNLTU4IC01NTdDLTU4IC01NTcgMTAgLTE1MiA0NzQgLTI1QzkzOCAxMDIgMTAwNiA1MDcgMTAwNiA1MDdNLTUxIC01NjVDLTUxIC01NjUgMTcgLTE2MCA0ODEgLTMzQzk0NSA5NCAxMDEzIDQ5OSAxMDEzIDQ5OU0tNDQgLTU3M0MtNDQgLTU3MyAyNCAtMTY4IDQ4OCAtNDFDOTUyIDg2IDEwMjAgNDkxIDEwMjAgNDkxTS0zNyAtNTgxQy0zNyAtNTgxIDMxIC0xNzYgNDk1IC00OUM5NTkgNzggMTAyNyA0ODMgMTAyNyA0ODNNLTMwIC01ODlDLTMwIC01ODkgMzggLTE4NCA1MDIgLTU3Qzk2NiA3MCAxMDM0IDQ3NSAxMDM0IDQ3NU0tMjMgLTU5N0MtMjMgLTU5NyA0NSAtMTkyIDUwOSAtNjVDOTczIDYyIDEwNDEgNDY3IDEwNDEgNDY3TS0xNiAtNjA1Qy0xNiAtNjA1IDUyIC0yMDAgNTE2IC03M0M5ODAgNTQgMTA0OCA0NTkgMTA0OCA0NTlNLTkgLTYxM0MtOSAtNjEzIDU5IC0yMDggNTIzIC04MUM5ODcgNDYgMTA1NSA0NTEgMTA1NSA0NTFNLTIgLTYyMUMtMiAtNjIxIDY2IC0yMTYgNTMwIC04OUM5OTQgMzggMTA2MiA0NDMgMTA2MiA0NDNNNSAtNjI5QzUgLTYyOSA3MyAtMjI0IDUzNyAtOTdDMTAwMSAzMCAxMDY5IDQzNSAxMDY5IDQzNU0xMiAtNjM3QzEyIC02MzcgODAgLTIzMiA1NDQgLTEwNUMxMDA4IDIyIDEwNzYgNDI3IDEwNzYgNDI3TTE5IC02NDVDMTkgLTY0NSA4NyAtMjQwIDU1MSAtMTEzQzEwMTUgMTQgMTA4MyA0MTkgMTA4MyA0MTlcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCJ1cmwoI3BhaW50MF9yYWRpYWxfMjQyXzI3OClcIlxyXG4gICAgICAgICAgICBzdHJva2VPcGFjaXR5PVwiMC4wNVwiXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoPVwiMC41XCJcclxuICAgICAgICAgID48L3BhdGg+XHJcblxyXG4gICAgICAgICAge3BhdGhzLm1hcCgocGF0aCwgaW5kZXgpID0+IChcclxuICAgICAgICAgICAgPG1vdGlvbi5wYXRoXHJcbiAgICAgICAgICAgICAga2V5PXtgcGF0aC1gICsgaW5kZXh9XHJcbiAgICAgICAgICAgICAgZD17cGF0aH1cclxuICAgICAgICAgICAgICBzdHJva2U9e2B1cmwoI2xpbmVhckdyYWRpZW50LSR7aW5kZXh9KWB9XHJcbiAgICAgICAgICAgICAgc3Ryb2tlT3BhY2l0eT1cIjAuNFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIwLjVcIlxyXG4gICAgICAgICAgICA+PC9tb3Rpb24ucGF0aD5cclxuICAgICAgICAgICkpfVxyXG4gICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgIHtwYXRocy5tYXAoKHBhdGgsIGluZGV4KSA9PiAoXHJcbiAgICAgICAgICAgICAgPG1vdGlvbi5saW5lYXJHcmFkaWVudFxyXG4gICAgICAgICAgICAgICAgaWQ9e2BsaW5lYXJHcmFkaWVudC0ke2luZGV4fWB9XHJcbiAgICAgICAgICAgICAgICBrZXk9e2BncmFkaWVudC0ke2luZGV4fWB9XHJcbiAgICAgICAgICAgICAgICBpbml0aWFsPXt7XHJcbiAgICAgICAgICAgICAgICAgIHgxOiBcIjAlXCIsXHJcbiAgICAgICAgICAgICAgICAgIHgyOiBcIjAlXCIsXHJcbiAgICAgICAgICAgICAgICAgIHkxOiBcIjAlXCIsXHJcbiAgICAgICAgICAgICAgICAgIHkyOiBcIjAlXCIsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZT17e1xyXG4gICAgICAgICAgICAgICAgICB4MTogW1wiMCVcIiwgXCIxMDAlXCJdLFxyXG4gICAgICAgICAgICAgICAgICB4MjogW1wiMCVcIiwgXCI5NSVcIl0sXHJcbiAgICAgICAgICAgICAgICAgIHkxOiBbXCIwJVwiLCBcIjEwMCVcIl0sXHJcbiAgICAgICAgICAgICAgICAgIHkyOiBbXCIwJVwiLCBgJHs5MyArIE1hdGgucmFuZG9tKCkgKiA4fSVgXSxcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XHJcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBNYXRoLnJhbmRvbSgpICogMTAgKyAxMCxcclxuICAgICAgICAgICAgICAgICAgZWFzZTogXCJlYXNlSW5PdXRcIixcclxuICAgICAgICAgICAgICAgICAgcmVwZWF0OiBJbmZpbml0eSxcclxuICAgICAgICAgICAgICAgICAgZGVsYXk6IE1hdGgucmFuZG9tKCkgKiAxMCxcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHN0b3Agc3RvcENvbG9yPVwiIzE4Q0NGQ1wiIHN0b3BPcGFjaXR5PVwiMFwiPjwvc3RvcD5cclxuICAgICAgICAgICAgICAgIDxzdG9wIHN0b3BDb2xvcj1cIiMxOENDRkNcIj48L3N0b3A+XHJcbiAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIzMi41JVwiIHN0b3BDb2xvcj1cIiM2MzQ0RjVcIj48L3N0b3A+XHJcbiAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIxMDAlXCIgc3RvcENvbG9yPVwiI0FFNDhGRlwiIHN0b3BPcGFjaXR5PVwiMFwiPjwvc3RvcD5cclxuICAgICAgICAgICAgICA8L21vdGlvbi5saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgKSl9XHJcblxyXG4gICAgICAgICAgICA8cmFkaWFsR3JhZGllbnRcclxuICAgICAgICAgICAgICBpZD1cInBhaW50MF9yYWRpYWxfMjQyXzI3OFwiXHJcbiAgICAgICAgICAgICAgY3g9XCIwXCJcclxuICAgICAgICAgICAgICBjeT1cIjBcIlxyXG4gICAgICAgICAgICAgIHI9XCIxXCJcclxuICAgICAgICAgICAgICBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPVwidHJhbnNsYXRlKDM1MiAzNCkgcm90YXRlKDkwKSBzY2FsZSg1NTUgMTU2MC42MilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMC4wNjY2NjY3XCIgc3RvcENvbG9yPVwiI2Q0ZDRkNFwiPjwvc3RvcD5cclxuICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwLjI0MzI0M1wiIHN0b3BDb2xvcj1cIiNkNGQ0ZDRcIj48L3N0b3A+XHJcbiAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMC40MzU5NFwiIHN0b3BDb2xvcj1cIndoaXRlXCIgc3RvcE9wYWNpdHk9XCIwXCI+PC9zdG9wPlxyXG4gICAgICAgICAgICA8L3JhZGlhbEdyYWRpZW50PlxyXG4gICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfSxcclxuKTtcclxuXHJcbkJhY2tncm91bmRCZWFtcy5kaXNwbGF5TmFtZSA9IFwiQmFja2dyb3VuZEJlYW1zXCI7XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsIm1vdGlvbiIsImNuIiwiQmFja2dyb3VuZEJlYW1zIiwibWVtbyIsImNsYXNzTmFtZSIsInBhdGhzIiwiZGl2Iiwic3ZnIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwicGF0aCIsImQiLCJzdHJva2UiLCJzdHJva2VPcGFjaXR5Iiwic3Ryb2tlV2lkdGgiLCJtYXAiLCJpbmRleCIsImRlZnMiLCJsaW5lYXJHcmFkaWVudCIsImlkIiwiaW5pdGlhbCIsIngxIiwieDIiLCJ5MSIsInkyIiwiYW5pbWF0ZSIsIk1hdGgiLCJyYW5kb20iLCJ0cmFuc2l0aW9uIiwiZHVyYXRpb24iLCJlYXNlIiwicmVwZWF0IiwiSW5maW5pdHkiLCJkZWxheSIsInN0b3AiLCJzdG9wQ29sb3IiLCJzdG9wT3BhY2l0eSIsIm9mZnNldCIsInJhZGlhbEdyYWRpZW50IiwiY3giLCJjeSIsInIiLCJncmFkaWVudFVuaXRzIiwiZ3JhZGllbnRUcmFuc2Zvcm0iLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/background-beams.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/button.tsx": /*!**********************************!*\ !*** ./components/ui/button.tsx ***! \**********************************/ /***/ (function(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 */ Button: function() { return /* binding */ Button; },\n/* harmony export */ buttonVariants: function() { return /* binding */ buttonVariants; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-slot */ \"(app-pages-browser)/./node_modules/@radix-ui/react-slot/dist/index.mjs\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! class-variance-authority */ \"(app-pages-browser)/./node_modules/class-variance-authority/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n\n\n\n\n\nconst buttonVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_2__.cva)(\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\"\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n});\nconst Button = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>{\n let { className, variant, size, asChild = false, ...props } = param;\n const Comp = asChild ? _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_4__.Slot : \"button\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Comp, {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(buttonVariants({\n variant,\n size,\n className\n })),\n ref: ref,\n ...props\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\button.tsx\",\n lineNumber: 46,\n columnNumber: 7\n }, undefined);\n});\n_c1 = Button;\nButton.displayName = \"Button\";\n\nvar _c, _c1;\n$RefreshReg$(_c, \"Button$React.forwardRef\");\n$RefreshReg$(_c1, \"Button\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBK0I7QUFDYTtBQUNzQjtBQUVqQztBQUVqQyxNQUFNSSxpQkFBaUJGLDZEQUFHQSxDQUN4QiwwUkFDQTtJQUNFRyxVQUFVO1FBQ1JDLFNBQVM7WUFDUEMsU0FBUztZQUNUQyxhQUNFO1lBQ0ZDLFNBQ0U7WUFDRkMsV0FDRTtZQUNGQyxPQUFPO1lBQ1BDLE1BQU07UUFDUjtRQUNBQyxNQUFNO1lBQ0pOLFNBQVM7WUFDVE8sSUFBSTtZQUNKQyxJQUFJO1lBQ0pDLE1BQU07UUFDUjtJQUNGO0lBQ0FDLGlCQUFpQjtRQUNmWCxTQUFTO1FBQ1RPLE1BQU07SUFDUjtBQUNGO0FBU0YsTUFBTUssdUJBQVNsQiw2Q0FBZ0IsTUFDN0IsUUFBMERvQjtRQUF6RCxFQUFFQyxTQUFTLEVBQUVmLE9BQU8sRUFBRU8sSUFBSSxFQUFFUyxVQUFVLEtBQUssRUFBRSxHQUFHQyxPQUFPO0lBQ3RELE1BQU1DLE9BQU9GLFVBQVVyQixzREFBSUEsR0FBRztJQUM5QixxQkFDRSw4REFBQ3VCO1FBQ0NILFdBQVdsQiw4Q0FBRUEsQ0FBQ0MsZUFBZTtZQUFFRTtZQUFTTztZQUFNUTtRQUFVO1FBQ3hERCxLQUFLQTtRQUNKLEdBQUdHLEtBQUs7Ozs7OztBQUdmOztBQUVGTCxPQUFPTyxXQUFXLEdBQUc7QUFFYSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL3VpL2J1dHRvbi50c3g/ODk0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCc7XHJcbmltcG9ydCB7IGN2YSwgdHlwZSBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknO1xyXG5cclxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscyc7XHJcblxyXG5jb25zdCBidXR0b25WYXJpYW50cyA9IGN2YShcclxuICAnaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAnLFxyXG4gIHtcclxuICAgIHZhcmlhbnRzOiB7XHJcbiAgICAgIHZhcmlhbnQ6IHtcclxuICAgICAgICBkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcclxuICAgICAgICBkZXN0cnVjdGl2ZTpcclxuICAgICAgICAgICdiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAnLFxyXG4gICAgICAgIG91dGxpbmU6XHJcbiAgICAgICAgICAnYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcclxuICAgICAgICBzZWNvbmRhcnk6XHJcbiAgICAgICAgICAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwJyxcclxuICAgICAgICBnaG9zdDogJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcclxuICAgICAgICBsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxyXG4gICAgICB9LFxyXG4gICAgICBzaXplOiB7XHJcbiAgICAgICAgZGVmYXVsdDogJ2gtMTAgcHgtNCBweS0yJyxcclxuICAgICAgICBzbTogJ2gtOSByb3VuZGVkLW1kIHB4LTMnLFxyXG4gICAgICAgIGxnOiAnaC0xMSByb3VuZGVkLW1kIHB4LTgnLFxyXG4gICAgICAgIGljb246ICdoLTEwIHctMTAnLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIGRlZmF1bHRWYXJpYW50czoge1xyXG4gICAgICB2YXJpYW50OiAnZGVmYXVsdCcsXHJcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcclxuICAgIH0sXHJcbiAgfVxyXG4pO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCdXR0b25Qcm9wc1xyXG4gIGV4dGVuZHMgUmVhY3QuQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+LFxyXG4gICAgVmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4ge1xyXG4gIGFzQ2hpbGQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5jb25zdCBCdXR0b24gPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxCdXR0b25FbGVtZW50LCBCdXR0b25Qcm9wcz4oXHJcbiAgKHsgY2xhc3NOYW1lLCB2YXJpYW50LCBzaXplLCBhc0NoaWxkID0gZmFsc2UsIC4uLnByb3BzIH0sIHJlZikgPT4ge1xyXG4gICAgY29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbic7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8Q29tcFxyXG4gICAgICAgIGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxyXG4gICAgICAgIHJlZj17cmVmfVxyXG4gICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgLz5cclxuICAgICk7XHJcbiAgfVxyXG4pO1xyXG5CdXR0b24uZGlzcGxheU5hbWUgPSAnQnV0dG9uJztcclxuXHJcbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfTtcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiU2xvdCIsImN2YSIsImNuIiwiYnV0dG9uVmFyaWFudHMiLCJ2YXJpYW50cyIsInZhcmlhbnQiLCJkZWZhdWx0IiwiZGVzdHJ1Y3RpdmUiLCJvdXRsaW5lIiwic2Vjb25kYXJ5IiwiZ2hvc3QiLCJsaW5rIiwic2l6ZSIsInNtIiwibGciLCJpY29uIiwiZGVmYXVsdFZhcmlhbnRzIiwiQnV0dG9uIiwiZm9yd2FyZFJlZiIsInJlZiIsImNsYXNzTmFtZSIsImFzQ2hpbGQiLCJwcm9wcyIsIkNvbXAiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/button.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/card-hover-effect.tsx": /*!*********************************************!*\ !*** ./components/ui/card-hover-effect.tsx ***! \*********************************************/ /***/ (function(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 */ Card: function() { return /* binding */ Card; },\n/* harmony export */ CardDescription: function() { return /* binding */ CardDescription; },\n/* harmony export */ CardTitle: function() { return /* binding */ CardTitle; },\n/* harmony export */ HoverEffect: function() { return /* binding */ HoverEffect; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs\");\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n\nvar _s = $RefreshSig$();\n\n\n\n\nconst HoverEffect = (param)=>{\n let { items, className } = param;\n _s();\n let [hoveredIndex, setHoveredIndex] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(\"grid grid-cols-1 md:grid-cols-2 gap-6\", className),\n children: items.map((item, idx)=>{\n var _item_link, _ref;\n const key = (_ref = (_item_link = item === null || item === void 0 ? void 0 : item.link) !== null && _item_link !== void 0 ? _item_link : item.title) !== null && _ref !== void 0 ? _ref : idx;\n const cardContent = /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(motion_react__WEBPACK_IMPORTED_MODULE_4__.AnimatePresence, {\n children: hoveredIndex === idx && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(motion_react__WEBPACK_IMPORTED_MODULE_5__.motion.span, {\n className: \"absolute inset-0 h-full w-full block rounded-3xl\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary, \"33\")\n },\n layoutId: \"hoverBackground\",\n initial: {\n opacity: 0\n },\n animate: {\n opacity: 1,\n transition: {\n duration: 0.15\n }\n },\n exit: {\n opacity: 0,\n transition: {\n duration: 0.15,\n delay: 0.2\n }\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 33,\n columnNumber: 17\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 31,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Card, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(CardTitle, {\n children: item.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(CardDescription, {\n children: item.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 51,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 49,\n columnNumber: 13\n }, undefined)\n ]\n }, void 0, true);\n if (item === null || item === void 0 ? void 0 : item.link) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: item.link,\n className: \"relative group block p-2 h-full w-full\",\n onMouseEnter: ()=>setHoveredIndex(idx),\n onMouseLeave: ()=>setHoveredIndex(null),\n children: cardContent\n }, key, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 58,\n columnNumber: 13\n }, undefined);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative group block p-2 h-full w-full\",\n onMouseEnter: ()=>setHoveredIndex(idx),\n onMouseLeave: ()=>setHoveredIndex(null),\n children: cardContent\n }, key, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 71,\n columnNumber: 11\n }, undefined);\n })\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 21,\n columnNumber: 5\n }, undefined);\n};\n_s(HoverEffect, \"9iVkaaUbrFxVCU6MuI1jK6905pI=\");\n_c = HoverEffect;\nconst Card = (param)=>{\n let { className, children } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(\"rounded-3xl h-full w-full overflow-hidden border backdrop-blur-sm transition-all duration-300 group-hover:-translate-y-1 group-hover:shadow-lg relative z-20\", className),\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F2, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary, \"26)\"),\n borderColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary, \"55\")\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative z-50 p-6\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 103,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 93,\n columnNumber: 5\n }, undefined);\n};\n_c1 = Card;\nconst CardTitle = (param)=>{\n let { className, children } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(\"text-xl font-semibold tracking-wide\", className),\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 117,\n columnNumber: 5\n }, undefined);\n};\n_c2 = CardTitle;\nconst CardDescription = (param)=>{\n let { className, children } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(\"mt-3 leading-relaxed text-base\", className),\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\card-hover-effect.tsx\",\n lineNumber: 133,\n columnNumber: 5\n }, undefined);\n};\n_c3 = CardDescription;\nvar _c, _c1, _c2, _c3;\n$RefreshReg$(_c, \"HoverEffect\");\n$RefreshReg$(_c1, \"Card\");\n$RefreshReg$(_c2, \"CardTitle\");\n$RefreshReg$(_c3, \"CardDescription\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvY2FyZC1ob3Zlci1lZmZlY3QudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUM7QUFDc0I7QUFFdEI7QUFDSztBQUUvQixNQUFNSyxjQUFjO1FBQUMsRUFDMUJDLEtBQUssRUFDTEMsU0FBUyxFQVFWOztJQUNDLElBQUksQ0FBQ0MsY0FBY0MsZ0JBQWdCLEdBQUdOLCtDQUFRQSxDQUFnQjtJQUU5RCxxQkFDRSw4REFBQ087UUFDQ0gsV0FBV1AsOENBQUVBLENBQ1gseUNBQ0FPO2tCQUdERCxNQUFNSyxHQUFHLENBQUMsQ0FBQ0MsTUFBTUM7Z0JBQ0pELFlBQUFBO1lBQVosTUFBTUUsTUFBTUYsQ0FBQUEsT0FBQUEsQ0FBQUEsYUFBQUEsaUJBQUFBLDJCQUFBQSxLQUFNRyxJQUFJLGNBQVZILHdCQUFBQSxhQUFjQSxLQUFLSSxLQUFLLGNBQXhCSixrQkFBQUEsT0FBNEJDO1lBQ3hDLE1BQU1JLDRCQUNKOztrQ0FDRSw4REFBQ2hCLHlEQUFlQTtrQ0FDYk8saUJBQWlCSyxxQkFDaEIsOERBQUNYLGdEQUFNQSxDQUFDZ0IsSUFBSTs0QkFDVlgsV0FBVTs0QkFDVlksT0FBTztnQ0FBRUMsaUJBQWlCLEdBQW9CLE9BQWpCaEIsK0NBQU1BLENBQUNpQixTQUFTLEVBQUM7NEJBQUk7NEJBQ2xEQyxVQUFTOzRCQUNUQyxTQUFTO2dDQUFFQyxTQUFTOzRCQUFFOzRCQUN0QkMsU0FBUztnQ0FDUEQsU0FBUztnQ0FDVEUsWUFBWTtvQ0FBRUMsVUFBVTtnQ0FBSzs0QkFDL0I7NEJBQ0FDLE1BQU07Z0NBQ0pKLFNBQVM7Z0NBQ1RFLFlBQVk7b0NBQUVDLFVBQVU7b0NBQU1FLE9BQU87Z0NBQUk7NEJBQzNDOzs7Ozs7Ozs7OztrQ0FJTiw4REFBQ0M7OzBDQUNDLDhEQUFDQzswQ0FBV25CLEtBQUtJLEtBQUs7Ozs7OzswQ0FDdEIsOERBQUNnQjswQ0FBaUJwQixLQUFLcUIsV0FBVzs7Ozs7Ozs7Ozs7Ozs7WUFLeEMsSUFBSXJCLGlCQUFBQSwyQkFBQUEsS0FBTUcsSUFBSSxFQUFFO2dCQUNkLHFCQUNFLDhEQUFDbUI7b0JBRUNDLE1BQU12QixLQUFLRyxJQUFJO29CQUNmUixXQUFVO29CQUNWNkIsY0FBYyxJQUFNM0IsZ0JBQWdCSTtvQkFDcEN3QixjQUFjLElBQU01QixnQkFBZ0I7OEJBRW5DUTttQkFOSUg7Ozs7O1lBU1g7WUFFQSxxQkFDRSw4REFBQ0o7Z0JBRUNILFdBQVU7Z0JBQ1Y2QixjQUFjLElBQU0zQixnQkFBZ0JJO2dCQUNwQ3dCLGNBQWMsSUFBTTVCLGdCQUFnQjswQkFFbkNRO2VBTElIOzs7OztRQVFYOzs7Ozs7QUFHTixFQUFFO0dBNUVXVDtLQUFBQTtBQThFTixNQUFNeUIsT0FBTztRQUFDLEVBQ25CdkIsU0FBUyxFQUNUK0IsUUFBUSxFQUlUO0lBQ0MscUJBQ0UsOERBQUM1QjtRQUNDSCxXQUFXUCw4Q0FBRUEsQ0FDWCxnS0FDQU87UUFFRlksT0FBTztZQUNMb0IsWUFBWSwyQkFBbURuQyxPQUF4QkEsK0NBQU1BLENBQUNtQyxVQUFVLEVBQUMsUUFBdUIsT0FBakJuQywrQ0FBTUEsQ0FBQ2lCLFNBQVMsRUFBQztZQUNoRm1CLGFBQWEsR0FBb0IsT0FBakJwQywrQ0FBTUEsQ0FBQ2lCLFNBQVMsRUFBQztRQUNuQztrQkFFQSw0RUFBQ1g7WUFBSUgsV0FBVTtzQkFDWitCOzs7Ozs7Ozs7OztBQUlULEVBQUU7TUF2QldSO0FBd0JOLE1BQU1DLFlBQVk7UUFBQyxFQUN4QnhCLFNBQVMsRUFDVCtCLFFBQVEsRUFJVDtJQUNDLHFCQUNFLDhEQUFDRztRQUNDbEMsV0FBV1AsOENBQUVBLENBQUMsdUNBQXVDTztRQUNyRFksT0FBTztZQUFFdUIsT0FBT3RDLCtDQUFNQSxDQUFDdUMsT0FBTztRQUFDO2tCQUU5Qkw7Ozs7OztBQUdQLEVBQUU7TUFmV1A7QUFnQk4sTUFBTUMsa0JBQWtCO1FBQUMsRUFDOUJ6QixTQUFTLEVBQ1QrQixRQUFRLEVBSVQ7SUFDQyxxQkFDRSw4REFBQ007UUFDQ3JDLFdBQVdQLDhDQUFFQSxDQUNYLGtDQUNBTztRQUVGWSxPQUFPO1lBQUV1QixPQUFPdEMsK0NBQU1BLENBQUNpQixTQUFTO1FBQUM7a0JBRWhDaUI7Ozs7OztBQUdQLEVBQUU7TUFsQldOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvdWkvY2FyZC1ob3Zlci1lZmZlY3QudHN4PzJmYTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tIFwibW90aW9uL3JlYWN0XCI7XHJcblxyXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tIFwiQC9saWIvY29sb3JzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgSG92ZXJFZmZlY3QgPSAoe1xyXG4gIGl0ZW1zLFxyXG4gIGNsYXNzTmFtZSxcclxufToge1xyXG4gIGl0ZW1zOiB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxpbms/OiBzdHJpbmc7XHJcbiAgfVtdO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxufSkgPT4ge1xyXG4gIGxldCBbaG92ZXJlZEluZGV4LCBzZXRIb3ZlcmVkSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzTmFtZT17Y24oXHJcbiAgICAgICAgXCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC02XCIsXHJcbiAgICAgICAgY2xhc3NOYW1lXHJcbiAgICAgICl9XHJcbiAgICA+XHJcbiAgICAgIHtpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGl0ZW0/LmxpbmsgPz8gaXRlbS50aXRsZSA/PyBpZHg7XHJcbiAgICAgICAgY29uc3QgY2FyZENvbnRlbnQgPSAoXHJcbiAgICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlPlxyXG4gICAgICAgICAgICAgIHtob3ZlcmVkSW5kZXggPT09IGlkeCAmJiAoXHJcbiAgICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBoLWZ1bGwgdy1mdWxsIGJsb2NrIHJvdW5kZWQtM3hsXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBgJHtjb2xvcnMuc2Vjb25kYXJ5fTMzYCB9fVxyXG4gICAgICAgICAgICAgICAgICBsYXlvdXRJZD1cImhvdmVyQmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxyXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjE1IH0sXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9e3tcclxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMTUsIGRlbGF5OiAwLjIgfSxcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XHJcbiAgICAgICAgICAgIDxDYXJkPlxyXG4gICAgICAgICAgICAgIDxDYXJkVGl0bGU+e2l0ZW0udGl0bGV9PC9DYXJkVGl0bGU+XHJcbiAgICAgICAgICAgICAgPENhcmREZXNjcmlwdGlvbj57aXRlbS5kZXNjcmlwdGlvbn08L0NhcmREZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgPC9DYXJkPlxyXG4gICAgICAgICAgPC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0/LmxpbmspIHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAga2V5PXtrZXl9XHJcbiAgICAgICAgICAgICAgaHJlZj17aXRlbS5saW5rfVxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGdyb3VwIGJsb2NrIHAtMiBoLWZ1bGwgdy1mdWxsXCJcclxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWRJbmRleChpZHgpfVxyXG4gICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0SG92ZXJlZEluZGV4KG51bGwpfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge2NhcmRDb250ZW50fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAga2V5PXtrZXl9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGdyb3VwIGJsb2NrIHAtMiBoLWZ1bGwgdy1mdWxsXCJcclxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRIb3ZlcmVkSW5kZXgoaWR4KX1cclxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRIb3ZlcmVkSW5kZXgobnVsbCl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtjYXJkQ29udGVudH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBDYXJkID0gKHtcclxuICBjbGFzc05hbWUsXHJcbiAgY2hpbGRyZW4sXHJcbn06IHtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcclxufSkgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzTmFtZT17Y24oXHJcbiAgICAgICAgXCJyb3VuZGVkLTN4bCBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYmFja2Ryb3AtYmx1ci1zbSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgZ3JvdXAtaG92ZXI6LXRyYW5zbGF0ZS15LTEgZ3JvdXAtaG92ZXI6c2hhZG93LWxnIHJlbGF0aXZlIHotMjBcIixcclxuICAgICAgICBjbGFzc05hbWVcclxuICAgICAgKX1cclxuICAgICAgc3R5bGU9e3tcclxuICAgICAgICBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgJHtjb2xvcnMuYmFja2dyb3VuZH1GMiwgJHtjb2xvcnMuc2Vjb25kYXJ5fTI2KWAsXHJcbiAgICAgICAgYm9yZGVyQ29sb3I6IGAke2NvbG9ycy5zZWNvbmRhcnl9NTVgLFxyXG4gICAgICB9fVxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHotNTAgcC02XCI+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn07XHJcbmV4cG9ydCBjb25zdCBDYXJkVGl0bGUgPSAoe1xyXG4gIGNsYXNzTmFtZSxcclxuICBjaGlsZHJlbixcclxufToge1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG59KSA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxoNFxyXG4gICAgICBjbGFzc05hbWU9e2NuKFwidGV4dC14bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGVcIiwgY2xhc3NOYW1lKX1cclxuICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19XHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvaDQ+XHJcbiAgKTtcclxufTtcclxuZXhwb3J0IGNvbnN0IENhcmREZXNjcmlwdGlvbiA9ICh7XHJcbiAgY2xhc3NOYW1lLFxyXG4gIGNoaWxkcmVuLFxyXG59OiB7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XHJcbn0pID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgPHBcclxuICAgICAgY2xhc3NOYW1lPXtjbihcclxuICAgICAgICBcIm10LTMgbGVhZGluZy1yZWxheGVkIHRleHQtYmFzZVwiLFxyXG4gICAgICAgIGNsYXNzTmFtZVxyXG4gICAgICApfVxyXG4gICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L3A+XHJcbiAgKTtcclxufTtcclxuIl0sIm5hbWVzIjpbImNuIiwiQW5pbWF0ZVByZXNlbmNlIiwibW90aW9uIiwidXNlU3RhdGUiLCJjb2xvcnMiLCJIb3ZlckVmZmVjdCIsIml0ZW1zIiwiY2xhc3NOYW1lIiwiaG92ZXJlZEluZGV4Iiwic2V0SG92ZXJlZEluZGV4IiwiZGl2IiwibWFwIiwiaXRlbSIsImlkeCIsImtleSIsImxpbmsiLCJ0aXRsZSIsImNhcmRDb250ZW50Iiwic3BhbiIsInN0eWxlIiwiYmFja2dyb3VuZENvbG9yIiwic2Vjb25kYXJ5IiwibGF5b3V0SWQiLCJpbml0aWFsIiwib3BhY2l0eSIsImFuaW1hdGUiLCJ0cmFuc2l0aW9uIiwiZHVyYXRpb24iLCJleGl0IiwiZGVsYXkiLCJDYXJkIiwiQ2FyZFRpdGxlIiwiQ2FyZERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJhIiwiaHJlZiIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsImNoaWxkcmVuIiwiYmFja2dyb3VuZCIsImJvcmRlckNvbG9yIiwiaDQiLCJjb2xvciIsInByaW1hcnkiLCJwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/card-hover-effect.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/checkbox.tsx": /*!************************************!*\ !*** ./components/ui/checkbox.tsx ***! \************************************/ /***/ (function(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 */ Checkbox: function() { return /* binding */ Checkbox; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-checkbox */ \"(app-pages-browser)/./node_modules/@radix-ui/react-checkbox/dist/index.mjs\");\n/* harmony import */ var _barrel_optimize_names_Check_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Check!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/check.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Checkbox auto */ \n\n\n\n\nconst Checkbox = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>/*#__PURE__*/ {\n let { className, ...props } = param;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__.Root, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\", className),\n ...props,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__.Indicator, {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex items-center justify-center text-current\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Check_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\checkbox.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\checkbox.tsx\",\n lineNumber: 21,\n columnNumber: 5\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\checkbox.tsx\",\n lineNumber: 13,\n columnNumber: 3\n }, undefined);\n});\n_c1 = Checkbox;\nCheckbox.displayName = _radix_ui_react_checkbox__WEBPACK_IMPORTED_MODULE_3__.Root.displayName;\n\nvar _c, _c1;\n$RefreshReg$(_c, \"Checkbox$React.forwardRef\");\n$RefreshReg$(_c1, \"Checkbox\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRStCO0FBQytCO0FBQ3pCO0FBRUo7QUFFakMsTUFBTUkseUJBQVdKLDZDQUFnQixNQUcvQixRQUEwQk07UUFBekIsRUFBRUMsU0FBUyxFQUFFLEdBQUdDLE9BQU87V0FDeEIsOERBQUNQLDBEQUFzQjtRQUNyQkssS0FBS0E7UUFDTEMsV0FBV0osOENBQUVBLENBQ1gsa1RBQ0FJO1FBRUQsR0FBR0MsS0FBSztrQkFFVCw0RUFBQ1AsK0RBQTJCO1lBQzFCTSxXQUFXSiw4Q0FBRUEsQ0FBQztzQkFFZCw0RUFBQ0QsaUZBQUtBO2dCQUFDSyxXQUFVOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUc7O0FBRTFCSCxTQUFTTyxXQUFXLEdBQUdWLDBEQUFzQixDQUFDVSxXQUFXO0FBRXJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4PzQxZTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBDaGVjayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XHJcblxyXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJztcclxuXHJcbmNvbnN0IENoZWNrYm94ID0gUmVhY3QuZm9yd2FyZFJlZjxcclxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290PixcclxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIENoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XHJcbj4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+IChcclxuICA8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxyXG4gICAgcmVmPXtyZWZ9XHJcbiAgICBjbGFzc05hbWU9e2NuKFxyXG4gICAgICAncGVlciBoLTQgdy00IHNocmluay0wIHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1wcmltYXJ5IHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQnLFxyXG4gICAgICBjbGFzc05hbWVcclxuICAgICl9XHJcbiAgICB7Li4ucHJvcHN9XHJcbiAgPlxyXG4gICAgPENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxyXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQnKX1cclxuICAgID5cclxuICAgICAgPENoZWNrIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxyXG4gICAgPC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XHJcbiAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxyXG4pKTtcclxuQ2hlY2tib3guZGlzcGxheU5hbWUgPSBDaGVja2JveFByaW1pdGl2ZS5Sb290LmRpc3BsYXlOYW1lO1xyXG5cclxuZXhwb3J0IHsgQ2hlY2tib3ggfTtcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiQ2hlY2tib3hQcmltaXRpdmUiLCJDaGVjayIsImNuIiwiQ2hlY2tib3giLCJmb3J3YXJkUmVmIiwicmVmIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJSb290IiwiSW5kaWNhdG9yIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/checkbox.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/collapsible.tsx": /*!***************************************!*\ !*** ./components/ui/collapsible.tsx ***! \***************************************/ /***/ (function(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 */ Collapsible: function() { return /* binding */ Collapsible; },\n/* harmony export */ CollapsibleContent: function() { return /* binding */ CollapsibleContent; },\n/* harmony export */ CollapsibleTrigger: function() { return /* binding */ CollapsibleTrigger; }\n/* harmony export */ });\n/* harmony import */ var _radix_ui_react_collapsible__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @radix-ui/react-collapsible */ \"(app-pages-browser)/./node_modules/@radix-ui/react-collapsible/dist/index.mjs\");\n/* __next_internal_client_entry_do_not_use__ Collapsible,CollapsibleTrigger,CollapsibleContent auto */ \nconst Collapsible = _radix_ui_react_collapsible__WEBPACK_IMPORTED_MODULE_0__.Root;\nconst CollapsibleTrigger = _radix_ui_react_collapsible__WEBPACK_IMPORTED_MODULE_0__.CollapsibleTrigger;\nconst CollapsibleContent = _radix_ui_react_collapsible__WEBPACK_IMPORTED_MODULE_0__.CollapsibleContent;\n\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvY29sbGFwc2libGUudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7dUdBRW9FO0FBRXBFLE1BQU1DLGNBQWNELDZEQUF5QjtBQUU3QyxNQUFNRyxxQkFBcUJILDJFQUF1QztBQUVsRSxNQUFNSSxxQkFBcUJKLDJFQUF1QztBQUVIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvdWkvY29sbGFwc2libGUudHN4PzE0YzEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0ICogYXMgQ29sbGFwc2libGVQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNvbGxhcHNpYmxlJztcclxuXHJcbmNvbnN0IENvbGxhcHNpYmxlID0gQ29sbGFwc2libGVQcmltaXRpdmUuUm9vdDtcclxuXHJcbmNvbnN0IENvbGxhcHNpYmxlVHJpZ2dlciA9IENvbGxhcHNpYmxlUHJpbWl0aXZlLkNvbGxhcHNpYmxlVHJpZ2dlcjtcclxuXHJcbmNvbnN0IENvbGxhcHNpYmxlQ29udGVudCA9IENvbGxhcHNpYmxlUHJpbWl0aXZlLkNvbGxhcHNpYmxlQ29udGVudDtcclxuXHJcbmV4cG9ydCB7IENvbGxhcHNpYmxlLCBDb2xsYXBzaWJsZVRyaWdnZXIsIENvbGxhcHNpYmxlQ29udGVudCB9O1xyXG4iXSwibmFtZXMiOlsiQ29sbGFwc2libGVQcmltaXRpdmUiLCJDb2xsYXBzaWJsZSIsIlJvb3QiLCJDb2xsYXBzaWJsZVRyaWdnZXIiLCJDb2xsYXBzaWJsZUNvbnRlbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/collapsible.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/container-scroll-animation-demo.tsx": /*!***********************************************************!*\ !*** ./components/ui/container-scroll-animation-demo.tsx ***! \***********************************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ HeroScrollDemo; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var _components_ui_container_scroll_animation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/ui/container-scroll-animation */ \"(app-pages-browser)/./components/ui/container-scroll-animation.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nfunction HeroScrollDemo() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_container_scroll_animation__WEBPACK_IMPORTED_MODULE_1__.ContainerScroll, {\n titleComponent: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-base font-medium uppercase tracking-[0.3em] text-neutral-500 dark:text-neutral-400\",\n children: \"Strategieberatung & Konzeption\"\n }, void 0, false, void 0, void 0),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-4xl font-semibold text-black dark:text-white\",\n children: \"Gemeinsam entwickeln wir die richtige digitale Strategie f\\xfcr Ihr Unternehmen\"\n }, void 0, false, void 0, void 0)\n ]\n }, void 0, true),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: \"/Domain-Einrichtung%20%26%20Verwaltung.gif\",\n alt: \"Domain-Einrichtung und Verwaltung\",\n height: 720,\n width: 1400,\n className: \"mx-auto h-full max-h-[540px] w-full rounded-2xl object-cover object-center\",\n draggable: false\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation-demo.tsx\",\n lineNumber: 20,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation-demo.tsx\",\n lineNumber: 8,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation-demo.tsx\",\n lineNumber: 7,\n columnNumber: 5\n }, this);\n}\n_c = HeroScrollDemo;\nvar _c;\n$RefreshReg$(_c, \"HeroScrollDemo\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvY29udGFpbmVyLXNjcm9sbC1hbmltYXRpb24tZGVtby50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUU2RTtBQUU5RCxTQUFTQztJQUN0QixxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTtrQkFDYiw0RUFBQ0gsc0ZBQWVBO1lBQ2RJLDhCQUNFOztrQ0FDRSw4REFBQ0M7d0JBQUVGLFdBQVU7a0NBQTBGOztrQ0FHdkcsOERBQUNHO3dCQUFHSCxXQUFVO2tDQUFvRDs7OztzQkFNdEUsNEVBQUNJO2dCQUNDQyxLQUFJO2dCQUNKQyxLQUFJO2dCQUNKQyxRQUFRO2dCQUNSQyxPQUFPO2dCQUNQUixXQUFVO2dCQUNWUyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7O0FBS3JCO0tBMUJ3QlgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy91aS9jb250YWluZXItc2Nyb2xsLWFuaW1hdGlvbi1kZW1vLnRzeD8yZjEyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IHsgQ29udGFpbmVyU2Nyb2xsIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9jb250YWluZXItc2Nyb2xsLWFuaW1hdGlvblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSGVyb1Njcm9sbERlbW8oKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgPENvbnRhaW5lclNjcm9sbFxyXG4gICAgICAgIHRpdGxlQ29tcG9uZW50PXtcclxuICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtYmFzZSBmb250LW1lZGl1bSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuM2VtXSB0ZXh0LW5ldXRyYWwtNTAwIGRhcms6dGV4dC1uZXV0cmFsLTQwMFwiPlxyXG4gICAgICAgICAgICAgIFN0cmF0ZWdpZWJlcmF0dW5nICYgS29uemVwdGlvblxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTR4bCBmb250LXNlbWlib2xkIHRleHQtYmxhY2sgZGFyazp0ZXh0LXdoaXRlXCI+XHJcbiAgICAgICAgICAgICAgR2VtZWluc2FtIGVudHdpY2tlbG4gd2lyIGRpZSByaWNodGlnZSBkaWdpdGFsZSBTdHJhdGVnaWUgZsO8ciBJaHIgVW50ZXJuZWhtZW5cclxuICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgIH1cclxuICAgICAgPlxyXG4gICAgICAgIDxpbWdcclxuICAgICAgICAgIHNyYz1cIi9Eb21haW4tRWlucmljaHR1bmclMjAlMjYlMjBWZXJ3YWx0dW5nLmdpZlwiXHJcbiAgICAgICAgICBhbHQ9XCJEb21haW4tRWlucmljaHR1bmcgdW5kIFZlcndhbHR1bmdcIlxyXG4gICAgICAgICAgaGVpZ2h0PXs3MjB9XHJcbiAgICAgICAgICB3aWR0aD17MTQwMH1cclxuICAgICAgICAgIGNsYXNzTmFtZT1cIm14LWF1dG8gaC1mdWxsIG1heC1oLVs1NDBweF0gdy1mdWxsIHJvdW5kZWQtMnhsIG9iamVjdC1jb3ZlciBvYmplY3QtY2VudGVyXCJcclxuICAgICAgICAgIGRyYWdnYWJsZT17ZmFsc2V9XHJcbiAgICAgICAgLz5cclxuICAgICAgPC9Db250YWluZXJTY3JvbGw+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG4iXSwibmFtZXMiOlsiQ29udGFpbmVyU2Nyb2xsIiwiSGVyb1Njcm9sbERlbW8iLCJkaXYiLCJjbGFzc05hbWUiLCJ0aXRsZUNvbXBvbmVudCIsInAiLCJoMSIsImltZyIsInNyYyIsImFsdCIsImhlaWdodCIsIndpZHRoIiwiZHJhZ2dhYmxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/container-scroll-animation-demo.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/container-scroll-animation.tsx": /*!******************************************************!*\ !*** ./components/ui/container-scroll-animation.tsx ***! \******************************************************/ /***/ (function(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 */ Card: function() { return /* binding */ Card; },\n/* harmony export */ ContainerScroll: function() { return /* binding */ ContainerScroll; },\n/* harmony export */ Header: function() { return /* binding */ Header; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/value/use-scroll.mjs\");\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/value/use-transform.mjs\");\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs\");\n/* __next_internal_client_entry_do_not_use__ ContainerScroll,Header,Card auto */ \nvar _s = $RefreshSig$();\n\n\nconst ContainerScroll = (param)=>{\n let { titleComponent, children } = param;\n _s();\n const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const { scrollYProgress } = (0,motion_react__WEBPACK_IMPORTED_MODULE_2__.useScroll)({\n target: containerRef\n });\n const [isMobile, setIsMobile] = react__WEBPACK_IMPORTED_MODULE_1___default().useState(false);\n react__WEBPACK_IMPORTED_MODULE_1___default().useEffect(()=>{\n const checkMobile = ()=>{\n setIsMobile(window.innerWidth <= 768);\n };\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n return ()=>{\n window.removeEventListener(\"resize\", checkMobile);\n };\n }, []);\n const scaleDimensions = ()=>{\n return isMobile ? [\n 0.7,\n 0.9\n ] : [\n 1.05,\n 1\n ];\n };\n const rotate = (0,motion_react__WEBPACK_IMPORTED_MODULE_3__.useTransform)(scrollYProgress, [\n 0,\n 1\n ], [\n 20,\n 0\n ]);\n const scale = (0,motion_react__WEBPACK_IMPORTED_MODULE_3__.useTransform)(scrollYProgress, [\n 0,\n 1\n ], scaleDimensions());\n const translate = (0,motion_react__WEBPACK_IMPORTED_MODULE_3__.useTransform)(scrollYProgress, [\n 0,\n 1\n ], [\n 0,\n -100\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex h-[60rem] items-center justify-center p-2 md:h-[80rem] md:p-20\",\n ref: containerRef,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full py-10 md:py-40\",\n style: {\n perspective: \"1000px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Header, {\n translate: translate,\n titleComponent: titleComponent\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation.tsx\",\n lineNumber: 49,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Card, {\n rotate: rotate,\n translate: translate,\n scale: scale,\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation.tsx\",\n lineNumber: 50,\n columnNumber: 9\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation.tsx\",\n lineNumber: 43,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation.tsx\",\n lineNumber: 39,\n columnNumber: 5\n }, undefined);\n};\n_s(ContainerScroll, \"ASbD8gX0RUr8mvLoxB2H8s3CAs0=\", false, function() {\n return [\n motion_react__WEBPACK_IMPORTED_MODULE_2__.useScroll,\n motion_react__WEBPACK_IMPORTED_MODULE_3__.useTransform,\n motion_react__WEBPACK_IMPORTED_MODULE_3__.useTransform,\n motion_react__WEBPACK_IMPORTED_MODULE_3__.useTransform\n ];\n});\n_c = ContainerScroll;\nconst Header = (param)=>{\n let { translate, titleComponent } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(motion_react__WEBPACK_IMPORTED_MODULE_4__.motion.div, {\n style: {\n translateY: translate\n },\n className: \"div mx-auto max-w-5xl text-center\",\n children: titleComponent\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation.tsx\",\n lineNumber: 60,\n columnNumber: 5\n }, undefined);\n};\n_c1 = Header;\nconst Card = (param)=>{\n let { rotate, scale, children } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(motion_react__WEBPACK_IMPORTED_MODULE_4__.motion.div, {\n style: {\n rotateX: rotate,\n scale,\n boxShadow: \"0 0 #0000004d, 0 9px 20px #0000004a, 0 37px 37px #00000042, 0 84px 50px #00000026, 0 149px 60px #0000000a, 0 233px 65px #00000003\"\n },\n className: \"mx-auto -mt-12 h-[30rem] w-full max-w-5xl rounded-[30px] border-4 border-[#6C6C6C] bg-[#222222] p-2 shadow-2xl md:h-[40rem] md:p-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \" h-full w-full overflow-hidden rounded-2xl bg-gray-100 p-3 dark:bg-zinc-900 md:rounded-2xl md:p-4 \",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation.tsx\",\n lineNumber: 91,\n columnNumber: 7\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\container-scroll-animation.tsx\",\n lineNumber: 82,\n columnNumber: 5\n }, undefined);\n};\n_c2 = Card;\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"ContainerScroll\");\n$RefreshReg$(_c1, \"Header\");\n$RefreshReg$(_c2, \"Card\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvY29udGFpbmVyLXNjcm9sbC1hbmltYXRpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXNDO0FBQ3NDO0FBRXJFLE1BQU1LLGtCQUFrQjtRQUFDLEVBQzlCQyxjQUFjLEVBQ2RDLFFBQVEsRUFJVDs7SUFDQyxNQUFNQyxlQUFlUCw2Q0FBTUEsQ0FBaUI7SUFDNUMsTUFBTSxFQUFFUSxlQUFlLEVBQUUsR0FBR04sdURBQVNBLENBQUM7UUFDcENPLFFBQVFGO0lBQ1Y7SUFDQSxNQUFNLENBQUNHLFVBQVVDLFlBQVksR0FBR1oscURBQWMsQ0FBQztJQUUvQ0Esc0RBQWUsQ0FBQztRQUNkLE1BQU1lLGNBQWM7WUFDbEJILFlBQVlJLE9BQU9DLFVBQVUsSUFBSTtRQUNuQztRQUNBRjtRQUNBQyxPQUFPRSxnQkFBZ0IsQ0FBQyxVQUFVSDtRQUNsQyxPQUFPO1lBQ0xDLE9BQU9HLG1CQUFtQixDQUFDLFVBQVVKO1FBQ3ZDO0lBQ0YsR0FBRyxFQUFFO0lBRUwsTUFBTUssa0JBQWtCO1FBQ3RCLE9BQU9ULFdBQVc7WUFBQztZQUFLO1NBQUksR0FBRztZQUFDO1lBQU07U0FBRTtJQUMxQztJQUVBLE1BQU1VLFNBQVNqQiwwREFBWUEsQ0FBQ0ssaUJBQWlCO1FBQUM7UUFBRztLQUFFLEVBQUU7UUFBQztRQUFJO0tBQUU7SUFDNUQsTUFBTWEsUUFBUWxCLDBEQUFZQSxDQUFDSyxpQkFBaUI7UUFBQztRQUFHO0tBQUUsRUFBRVc7SUFDcEQsTUFBTUcsWUFBWW5CLDBEQUFZQSxDQUFDSyxpQkFBaUI7UUFBQztRQUFHO0tBQUUsRUFBRTtRQUFDO1FBQUcsQ0FBQztLQUFJO0lBRWpFLHFCQUNFLDhEQUFDZTtRQUNDQyxXQUFVO1FBQ1ZDLEtBQUtsQjtrQkFFTCw0RUFBQ2dCO1lBQ0NDLFdBQVU7WUFDVkUsT0FBTztnQkFDTEMsYUFBYTtZQUNmOzs4QkFFQSw4REFBQ0M7b0JBQU9OLFdBQVdBO29CQUFXakIsZ0JBQWdCQTs7Ozs7OzhCQUM5Qyw4REFBQ3dCO29CQUFLVCxRQUFRQTtvQkFBUUUsV0FBV0E7b0JBQVdELE9BQU9BOzhCQUNoRGY7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS1gsRUFBRTtHQWxEV0Y7O1FBUWlCRixtREFBU0E7UUFvQnRCQyxzREFBWUE7UUFDYkEsc0RBQVlBO1FBQ1JBLHNEQUFZQTs7O0tBOUJuQkM7QUFvRE4sTUFBTXdCLFNBQVM7UUFBQyxFQUFFTixTQUFTLEVBQUVqQixjQUFjLEVBQU87SUFDdkQscUJBQ0UsOERBQUNKLGdEQUFNQSxDQUFDc0IsR0FBRztRQUNURyxPQUFPO1lBQ0xJLFlBQVlSO1FBQ2Q7UUFDQUUsV0FBVTtrQkFFVG5COzs7Ozs7QUFHUCxFQUFFO01BWFd1QjtBQWFOLE1BQU1DLE9BQU87UUFBQyxFQUNuQlQsTUFBTSxFQUNOQyxLQUFLLEVBQ0xmLFFBQVEsRUFNVDtJQUNDLHFCQUNFLDhEQUFDTCxnREFBTUEsQ0FBQ3NCLEdBQUc7UUFDVEcsT0FBTztZQUNMSyxTQUFTWDtZQUNUQztZQUNBVyxXQUNFO1FBQ0o7UUFDQVIsV0FBVTtrQkFFViw0RUFBQ0Q7WUFBSUMsV0FBVTtzQkFDWmxCOzs7Ozs7Ozs7OztBQUlULEVBQUU7TUF6Qld1QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL3VpL2NvbnRhaW5lci1zY3JvbGwtYW5pbWF0aW9uLnRzeD83YjY0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBtb3Rpb24sIE1vdGlvblZhbHVlLCB1c2VTY3JvbGwsIHVzZVRyYW5zZm9ybSB9IGZyb20gXCJtb3Rpb24vcmVhY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBDb250YWluZXJTY3JvbGwgPSAoe1xyXG4gIHRpdGxlQ29tcG9uZW50LFxyXG4gIGNoaWxkcmVuLFxyXG59OiB7XHJcbiAgdGl0bGVDb21wb25lbnQ6IHN0cmluZyB8IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG59KSA9PiB7XHJcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcclxuICBjb25zdCB7IHNjcm9sbFlQcm9ncmVzcyB9ID0gdXNlU2Nyb2xsKHtcclxuICAgIHRhcmdldDogY29udGFpbmVyUmVmLFxyXG4gIH0pO1xyXG4gIGNvbnN0IFtpc01vYmlsZSwgc2V0SXNNb2JpbGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgY2hlY2tNb2JpbGUgPSAoKSA9PiB7XHJcbiAgICAgIHNldElzTW9iaWxlKHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2OCk7XHJcbiAgICB9O1xyXG4gICAgY2hlY2tNb2JpbGUoKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGNoZWNrTW9iaWxlKTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGNoZWNrTW9iaWxlKTtcclxuICAgIH07XHJcbiAgfSwgW10pO1xyXG5cclxuICBjb25zdCBzY2FsZURpbWVuc2lvbnMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gaXNNb2JpbGUgPyBbMC43LCAwLjldIDogWzEuMDUsIDFdO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJvdGF0ZSA9IHVzZVRyYW5zZm9ybShzY3JvbGxZUHJvZ3Jlc3MsIFswLCAxXSwgWzIwLCAwXSk7XHJcbiAgY29uc3Qgc2NhbGUgPSB1c2VUcmFuc2Zvcm0oc2Nyb2xsWVByb2dyZXNzLCBbMCwgMV0sIHNjYWxlRGltZW5zaW9ucygpKTtcclxuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VUcmFuc2Zvcm0oc2Nyb2xsWVByb2dyZXNzLCBbMCwgMV0sIFswLCAtMTAwXSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggaC1bNjByZW1dIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgbWQ6aC1bODByZW1dIG1kOnAtMjBcIlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBweS0xMCBtZDpweS00MFwiXHJcbiAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgIHBlcnNwZWN0aXZlOiBcIjEwMDBweFwiLFxyXG4gICAgICAgIH19XHJcbiAgICAgID5cclxuICAgICAgICA8SGVhZGVyIHRyYW5zbGF0ZT17dHJhbnNsYXRlfSB0aXRsZUNvbXBvbmVudD17dGl0bGVDb21wb25lbnR9IC8+XHJcbiAgICAgICAgPENhcmQgcm90YXRlPXtyb3RhdGV9IHRyYW5zbGF0ZT17dHJhbnNsYXRlfSBzY2FsZT17c2NhbGV9PlxyXG4gICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgIDwvQ2FyZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IEhlYWRlciA9ICh7IHRyYW5zbGF0ZSwgdGl0bGVDb21wb25lbnQgfTogYW55KSA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxtb3Rpb24uZGl2XHJcbiAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgdHJhbnNsYXRlWTogdHJhbnNsYXRlLFxyXG4gICAgICB9fVxyXG4gICAgICBjbGFzc05hbWU9XCJkaXYgbXgtYXV0byBtYXgtdy01eGwgdGV4dC1jZW50ZXJcIlxyXG4gICAgPlxyXG4gICAgICB7dGl0bGVDb21wb25lbnR9XHJcbiAgICA8L21vdGlvbi5kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBDYXJkID0gKHtcclxuICByb3RhdGUsXHJcbiAgc2NhbGUsXHJcbiAgY2hpbGRyZW4sXHJcbn06IHtcclxuICByb3RhdGU6IE1vdGlvblZhbHVlPG51bWJlcj47XHJcbiAgc2NhbGU6IE1vdGlvblZhbHVlPG51bWJlcj47XHJcbiAgdHJhbnNsYXRlOiBNb3Rpb25WYWx1ZTxudW1iZXI+O1xyXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XHJcbn0pID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgPG1vdGlvbi5kaXZcclxuICAgICAgc3R5bGU9e3tcclxuICAgICAgICByb3RhdGVYOiByb3RhdGUsXHJcbiAgICAgICAgc2NhbGUsXHJcbiAgICAgICAgYm94U2hhZG93OlxyXG4gICAgICAgICAgXCIwIDAgIzAwMDAwMDRkLCAwIDlweCAyMHB4ICMwMDAwMDA0YSwgMCAzN3B4IDM3cHggIzAwMDAwMDQyLCAwIDg0cHggNTBweCAjMDAwMDAwMjYsIDAgMTQ5cHggNjBweCAjMDAwMDAwMGEsIDAgMjMzcHggNjVweCAjMDAwMDAwMDNcIixcclxuICAgICAgfX1cclxuICAgICAgY2xhc3NOYW1lPVwibXgtYXV0byAtbXQtMTIgaC1bMzByZW1dIHctZnVsbCBtYXgtdy01eGwgcm91bmRlZC1bMzBweF0gYm9yZGVyLTQgYm9yZGVyLVsjNkM2QzZDXSBiZy1bIzIyMjIyMl0gcC0yIHNoYWRvdy0yeGwgbWQ6aC1bNDByZW1dIG1kOnAtNlwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtMnhsIGJnLWdyYXktMTAwIHAtMyBkYXJrOmJnLXppbmMtOTAwIG1kOnJvdW5kZWQtMnhsIG1kOnAtNCBcIj5cclxuICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tb3Rpb24uZGl2PlxyXG4gICk7XHJcbn07XHJcblxyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VSZWYiLCJtb3Rpb24iLCJ1c2VTY3JvbGwiLCJ1c2VUcmFuc2Zvcm0iLCJDb250YWluZXJTY3JvbGwiLCJ0aXRsZUNvbXBvbmVudCIsImNoaWxkcmVuIiwiY29udGFpbmVyUmVmIiwic2Nyb2xsWVByb2dyZXNzIiwidGFyZ2V0IiwiaXNNb2JpbGUiLCJzZXRJc01vYmlsZSIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiY2hlY2tNb2JpbGUiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzY2FsZURpbWVuc2lvbnMiLCJyb3RhdGUiLCJzY2FsZSIsInRyYW5zbGF0ZSIsImRpdiIsImNsYXNzTmFtZSIsInJlZiIsInN0eWxlIiwicGVyc3BlY3RpdmUiLCJIZWFkZXIiLCJDYXJkIiwidHJhbnNsYXRlWSIsInJvdGF0ZVgiLCJib3hTaGFkb3ciXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/container-scroll-animation.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/input.tsx": /*!*********************************!*\ !*** ./components/ui/input.tsx ***! \*********************************/ /***/ (function(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 */ Input: function() { return /* binding */ Input; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n\n\n\nconst Input = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>{\n let { className, type, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: type,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\", className),\n ref: ref,\n ...props\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\input.tsx\",\n lineNumber: 11,\n columnNumber: 7\n }, undefined);\n});\n_c1 = Input;\nInput.displayName = \"Input\";\n\nvar _c, _c1;\n$RefreshReg$(_c, \"Input$React.forwardRef\");\n$RefreshReg$(_c1, \"Input\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUErQjtBQUVFO0FBS2pDLE1BQU1FLHNCQUFRRiw2Q0FBZ0IsTUFDNUIsUUFBZ0NJO1FBQS9CLEVBQUVDLFNBQVMsRUFBRUMsSUFBSSxFQUFFLEdBQUdDLE9BQU87SUFDNUIscUJBQ0UsOERBQUNDO1FBQ0NGLE1BQU1BO1FBQ05ELFdBQVdKLDhDQUFFQSxDQUNYLHFYQUNBSTtRQUVGRCxLQUFLQTtRQUNKLEdBQUdHLEtBQUs7Ozs7OztBQUdmOztBQUVGTCxNQUFNTyxXQUFXLEdBQUc7QUFFSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL3VpL2lucHV0LnRzeD9kYTc5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuXHJcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFByb3BzXHJcbiAgZXh0ZW5kcyBSZWFjdC5JbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+IHt9XHJcblxyXG5jb25zdCBJbnB1dCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTElucHV0RWxlbWVudCwgSW5wdXRQcm9wcz4oXHJcbiAgKHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9LCByZWYpID0+IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcclxuICAgICAgICAgICdmbGV4IGgtMTAgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTMgcHktMiB0ZXh0LXNtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxyXG4gICAgICAgICAgY2xhc3NOYW1lXHJcbiAgICAgICAgKX1cclxuICAgICAgICByZWY9e3JlZn1cclxuICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgIC8+XHJcbiAgICApO1xyXG4gIH1cclxuKTtcclxuSW5wdXQuZGlzcGxheU5hbWUgPSAnSW5wdXQnO1xyXG5cclxuZXhwb3J0IHsgSW5wdXQgfTtcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiY24iLCJJbnB1dCIsImZvcndhcmRSZWYiLCJyZWYiLCJjbGFzc05hbWUiLCJ0eXBlIiwicHJvcHMiLCJpbnB1dCIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/input.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/textarea.tsx": /*!************************************!*\ !*** ./components/ui/textarea.tsx ***! \************************************/ /***/ (function(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 */ Textarea: function() { return /* binding */ Textarea; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n\n\n\nconst Textarea = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>{\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\", className),\n ref: ref,\n ...props\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\textarea.tsx\",\n lineNumber: 11,\n columnNumber: 7\n }, undefined);\n});\n_c1 = Textarea;\nTextarea.displayName = \"Textarea\";\n\nvar _c, _c1;\n$RefreshReg$(_c, \"Textarea$React.forwardRef\");\n$RefreshReg$(_c1, \"Textarea\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvdGV4dGFyZWEudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUErQjtBQUVFO0FBS2pDLE1BQU1FLHlCQUFXRiw2Q0FBZ0IsTUFDL0IsUUFBMEJJO1FBQXpCLEVBQUVDLFNBQVMsRUFBRSxHQUFHQyxPQUFPO0lBQ3RCLHFCQUNFLDhEQUFDQztRQUNDRixXQUFXSiw4Q0FBRUEsQ0FDWCx3U0FDQUk7UUFFRkQsS0FBS0E7UUFDSixHQUFHRSxLQUFLOzs7Ozs7QUFHZjs7QUFFRkosU0FBU00sV0FBVyxHQUFHO0FBRUgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy91aS90ZXh0YXJlYS50c3g/YjgwMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcblxyXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGV4dGFyZWFQcm9wc1xyXG4gIGV4dGVuZHMgUmVhY3QuVGV4dGFyZWFIVE1MQXR0cmlidXRlczxIVE1MVGV4dEFyZWFFbGVtZW50PiB7fVxyXG5cclxuY29uc3QgVGV4dGFyZWEgPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQsIFRleHRhcmVhUHJvcHM+KFxyXG4gICh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8dGV4dGFyZWFcclxuICAgICAgICBjbGFzc05hbWU9e2NuKFxyXG4gICAgICAgICAgJ2ZsZXggbWluLWgtWzgwcHhdIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC0zIHB5LTIgdGV4dC1zbSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxyXG4gICAgICAgICAgY2xhc3NOYW1lXHJcbiAgICAgICAgKX1cclxuICAgICAgICByZWY9e3JlZn1cclxuICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgIC8+XHJcbiAgICApO1xyXG4gIH1cclxuKTtcclxuVGV4dGFyZWEuZGlzcGxheU5hbWUgPSAnVGV4dGFyZWEnO1xyXG5cclxuZXhwb3J0IHsgVGV4dGFyZWEgfTtcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiY24iLCJUZXh0YXJlYSIsImZvcndhcmRSZWYiLCJyZWYiLCJjbGFzc05hbWUiLCJwcm9wcyIsInRleHRhcmVhIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/textarea.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/timeline-demo.tsx": /*!*****************************************!*\ !*** ./components/ui/timeline-demo.tsx ***! \*****************************************/ /***/ (function(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 */ \"default\": function() { return /* binding */ TimelineDemo; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ui_timeline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/timeline */ \"(app-pages-browser)/./components/ui/timeline.tsx\");\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\nfunction TimelineDemo() {\n const data = [\n {\n title: \"01\",\n content: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl p-6 transition-transform duration-300 hover:-translate-y-1\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F5, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"E0)\"),\n minHeight: \"260px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Kennenlernen & Beratung\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 19,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-4 text-sm leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Wir lernen Sie und Ihr Unternehmen kennen, sprechen \\xfcber Ziele und W\\xfcnsche und schaffen eine klare Basis f\\xfcr das gemeinsame Projekt.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 25,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 12,\n columnNumber: 9\n }, this)\n },\n {\n title: \"02\",\n content: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl p-6 transition-transform duration-300 hover:-translate-y-1\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F5, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"E0)\"),\n minHeight: \"260px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Konzept & Struktur\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 45,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-4 text-sm leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Wir entwickeln Struktur, Sitemap und Content-Plan, damit jede Seite logisch aufgebaut ist und Nutzer:innen schnell die passenden Informationen finden.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 51,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n },\n {\n title: \"03\",\n content: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl p-6 transition-transform duration-300 hover:-translate-y-1\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F5, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"E0)\"),\n minHeight: \"260px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Design & Umsetzung\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 71,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-4 text-sm leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Wir gestalten Ihr digitales Erscheinungsbild und setzen das technische Fundament um – ganz nach Ihren Vorstellungen und abgestimmt auf Ihre Marke.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 77,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 64,\n columnNumber: 9\n }, this)\n },\n {\n title: \"04\",\n content: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl p-6 transition-transform duration-300 hover:-translate-y-1\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F5, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"E0)\"),\n minHeight: \"260px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Feinschliff & Go-Live\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 97,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-4 text-sm leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Wir finalisieren Inhalte, testen Performance und Sicherheit und begleiten Sie beim Launch, damit alles reibungslos l\\xe4uft.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 103,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 90,\n columnNumber: 9\n }, this)\n },\n {\n title: \"05\",\n content: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl p-6 transition-transform duration-300 hover:-translate-y-1\",\n style: {\n background: \"linear-gradient(135deg, \".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"F5, \").concat(_lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.background, \"E0)\"),\n minHeight: \"260px\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.primary\n },\n children: \"Support & Pflege\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 123,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-4 text-sm leading-relaxed\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_3__.colors.secondary\n },\n children: \"Auch nach dem Launch bleiben wir an Ihrer Seite und k\\xfcmmern uns um Updates, Wartung und Optimierungen – f\\xfcr nachhaltigen Erfolg.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 129,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 116,\n columnNumber: 9\n }, this)\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full overflow-clip\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_timeline__WEBPACK_IMPORTED_MODULE_2__.Timeline, {\n data: data\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 143,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline-demo.tsx\",\n lineNumber: 142,\n columnNumber: 5\n }, this);\n}\n_c = TimelineDemo;\nvar _c;\n$RefreshReg$(_c, \"TimelineDemo\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvdGltZWxpbmUtZGVtby50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUUwQjtBQUMwQjtBQUNkO0FBRXZCLFNBQVNHO0lBQ3RCLE1BQU1DLE9BQU87UUFDWDtZQUNFQyxPQUFPO1lBQ1BDLHVCQUNFLDhEQUFDQztnQkFDQ0MsV0FBVTtnQkFDVkMsT0FBTztvQkFDTEMsWUFBWSwyQkFBbURSLE9BQXhCQSwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDLFFBQXdCLE9BQWxCUiwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDO29CQUNqRkMsV0FBVztnQkFDYjs7a0NBRUEsOERBQUNDO3dCQUNDSixXQUFVO3dCQUNWQyxPQUFPOzRCQUFFSSxPQUFPWCwrQ0FBTUEsQ0FBQ1ksT0FBTzt3QkFBQztrQ0FDaEM7Ozs7OztrQ0FHRCw4REFBQ0M7d0JBQ0NQLFdBQVU7d0JBQ1ZDLE9BQU87NEJBQUVJLE9BQU9YLCtDQUFNQSxDQUFDYyxTQUFTO3dCQUFDO2tDQUNsQzs7Ozs7Ozs7Ozs7O1FBTVA7UUFDQTtZQUNFWCxPQUFPO1lBQ1BDLHVCQUNFLDhEQUFDQztnQkFDQ0MsV0FBVTtnQkFDVkMsT0FBTztvQkFDTEMsWUFBWSwyQkFBbURSLE9BQXhCQSwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDLFFBQXdCLE9BQWxCUiwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDO29CQUNqRkMsV0FBVztnQkFDYjs7a0NBRUEsOERBQUNDO3dCQUNDSixXQUFVO3dCQUNWQyxPQUFPOzRCQUFFSSxPQUFPWCwrQ0FBTUEsQ0FBQ1ksT0FBTzt3QkFBQztrQ0FDaEM7Ozs7OztrQ0FHRCw4REFBQ0M7d0JBQ0NQLFdBQVU7d0JBQ1ZDLE9BQU87NEJBQUVJLE9BQU9YLCtDQUFNQSxDQUFDYyxTQUFTO3dCQUFDO2tDQUNsQzs7Ozs7Ozs7Ozs7O1FBTVA7UUFDQTtZQUNFWCxPQUFPO1lBQ1BDLHVCQUNFLDhEQUFDQztnQkFDQ0MsV0FBVTtnQkFDVkMsT0FBTztvQkFDTEMsWUFBWSwyQkFBbURSLE9BQXhCQSwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDLFFBQXdCLE9BQWxCUiwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDO29CQUNqRkMsV0FBVztnQkFDYjs7a0NBRUEsOERBQUNDO3dCQUNDSixXQUFVO3dCQUNWQyxPQUFPOzRCQUFFSSxPQUFPWCwrQ0FBTUEsQ0FBQ1ksT0FBTzt3QkFBQztrQ0FDaEM7Ozs7OztrQ0FHRCw4REFBQ0M7d0JBQ0NQLFdBQVU7d0JBQ1ZDLE9BQU87NEJBQUVJLE9BQU9YLCtDQUFNQSxDQUFDYyxTQUFTO3dCQUFDO2tDQUNsQzs7Ozs7Ozs7Ozs7O1FBTVA7UUFDQTtZQUNFWCxPQUFPO1lBQ1BDLHVCQUNFLDhEQUFDQztnQkFDQ0MsV0FBVTtnQkFDVkMsT0FBTztvQkFDTEMsWUFBWSwyQkFBbURSLE9BQXhCQSwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDLFFBQXdCLE9BQWxCUiwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDO29CQUNqRkMsV0FBVztnQkFDYjs7a0NBRUEsOERBQUNDO3dCQUNDSixXQUFVO3dCQUNWQyxPQUFPOzRCQUFFSSxPQUFPWCwrQ0FBTUEsQ0FBQ1ksT0FBTzt3QkFBQztrQ0FDaEM7Ozs7OztrQ0FHRCw4REFBQ0M7d0JBQ0NQLFdBQVU7d0JBQ1ZDLE9BQU87NEJBQUVJLE9BQU9YLCtDQUFNQSxDQUFDYyxTQUFTO3dCQUFDO2tDQUNsQzs7Ozs7Ozs7Ozs7O1FBTVA7UUFDQTtZQUNFWCxPQUFPO1lBQ1BDLHVCQUNFLDhEQUFDQztnQkFDQ0MsV0FBVTtnQkFDVkMsT0FBTztvQkFDTEMsWUFBWSwyQkFBbURSLE9BQXhCQSwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDLFFBQXdCLE9BQWxCUiwrQ0FBTUEsQ0FBQ1EsVUFBVSxFQUFDO29CQUNqRkMsV0FBVztnQkFDYjs7a0NBRUEsOERBQUNDO3dCQUNDSixXQUFVO3dCQUNWQyxPQUFPOzRCQUFFSSxPQUFPWCwrQ0FBTUEsQ0FBQ1ksT0FBTzt3QkFBQztrQ0FDaEM7Ozs7OztrQ0FHRCw4REFBQ0M7d0JBQ0NQLFdBQVU7d0JBQ1ZDLE9BQU87NEJBQUVJLE9BQU9YLCtDQUFNQSxDQUFDYyxTQUFTO3dCQUFDO2tDQUNsQzs7Ozs7Ozs7Ozs7O1FBTVA7S0FDRDtJQUVELHFCQUNFLDhEQUFDVDtRQUFJQyxXQUFVO2tCQUNiLDRFQUFDUCw2REFBUUE7WUFBQ0csTUFBTUE7Ozs7Ozs7Ozs7O0FBR3RCO0tBM0l3QkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy91aS90aW1lbGluZS1kZW1vLnRzeD80NjViIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBUaW1lbGluZSB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvdGltZWxpbmVcIjtcclxuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSBcIkAvbGliL2NvbG9yc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGltZWxpbmVEZW1vKCkge1xyXG4gIGNvbnN0IGRhdGEgPSBbXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiBcIjAxXCIsXHJcbiAgICAgIGNvbnRlbnQ6IChcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLTJ4bCBwLTYgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0xXCJcclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAke2NvbG9ycy5iYWNrZ3JvdW5kfUY1LCAke2NvbG9ycy5iYWNrZ3JvdW5kfUUwKWAsXHJcbiAgICAgICAgICAgIG1pbkhlaWdodDogXCIyNjBweFwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8aDNcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkXCJcclxuICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEtlbm5lbmxlcm5lbiAmIEJlcmF0dW5nXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtNCB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZFwiXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFdpciBsZXJuZW4gU2llIHVuZCBJaHIgVW50ZXJuZWhtZW4ga2VubmVuLCBzcHJlY2hlbiDDvGJlciBaaWVsZSB1bmQgV8O8bnNjaGUgdW5kIHNjaGFmZmVuXHJcbiAgICAgICAgICAgIGVpbmUga2xhcmUgQmFzaXMgZsO8ciBkYXMgZ2VtZWluc2FtZSBQcm9qZWt0LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6IFwiMDJcIixcclxuICAgICAgY29udGVudDogKFxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtMnhsIHAtNiB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTFcIlxyXG4gICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICR7Y29sb3JzLmJhY2tncm91bmR9RjUsICR7Y29sb3JzLmJhY2tncm91bmR9RTApYCxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjI2MHB4XCIsXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxoM1xyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIlxyXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgS29uemVwdCAmIFN0cnVrdHVyXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtNCB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZFwiXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFdpciBlbnR3aWNrZWxuIFN0cnVrdHVyLCBTaXRlbWFwIHVuZCBDb250ZW50LVBsYW4sIGRhbWl0IGplZGUgU2VpdGUgbG9naXNjaCBhdWZnZWJhdXQgaXN0XHJcbiAgICAgICAgICAgIHVuZCBOdXR6ZXI6aW5uZW4gc2NobmVsbCBkaWUgcGFzc2VuZGVuIEluZm9ybWF0aW9uZW4gZmluZGVuLlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6IFwiMDNcIixcclxuICAgICAgY29udGVudDogKFxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtMnhsIHAtNiB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTFcIlxyXG4gICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICR7Y29sb3JzLmJhY2tncm91bmR9RjUsICR7Y29sb3JzLmJhY2tncm91bmR9RTApYCxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjI2MHB4XCIsXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxoM1xyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIlxyXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgRGVzaWduICYgVW1zZXR6dW5nXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtNCB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZFwiXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMuc2Vjb25kYXJ5IH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFdpciBnZXN0YWx0ZW4gSWhyIGRpZ2l0YWxlcyBFcnNjaGVpbnVuZ3NiaWxkIHVuZCBzZXR6ZW4gZGFzIHRlY2huaXNjaGUgRnVuZGFtZW50IHVtIOKAkyBnYW56XHJcbiAgICAgICAgICAgIG5hY2ggSWhyZW4gVm9yc3RlbGx1bmdlbiB1bmQgYWJnZXN0aW1tdCBhdWYgSWhyZSBNYXJrZS5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiBcIjA0XCIsXHJcbiAgICAgIGNvbnRlbnQ6IChcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLTJ4bCBwLTYgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0xXCJcclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAke2NvbG9ycy5iYWNrZ3JvdW5kfUY1LCAke2NvbG9ycy5iYWNrZ3JvdW5kfUUwKWAsXHJcbiAgICAgICAgICAgIG1pbkhlaWdodDogXCIyNjBweFwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8aDNcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkXCJcclxuICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5wcmltYXJ5IH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEZlaW5zY2hsaWZmICYgR28tTGl2ZVxyXG4gICAgICAgICAgPC9oMz5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTQgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWRcIlxyXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBXaXIgZmluYWxpc2llcmVuIEluaGFsdGUsIHRlc3RlbiBQZXJmb3JtYW5jZSB1bmQgU2ljaGVyaGVpdCB1bmQgYmVnbGVpdGVuIFNpZSBiZWltIExhdW5jaCxcclxuICAgICAgICAgICAgZGFtaXQgYWxsZXMgcmVpYnVuZ3Nsb3MgbMOkdWZ0LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6IFwiMDVcIixcclxuICAgICAgY29udGVudDogKFxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtMnhsIHAtNiB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTFcIlxyXG4gICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICR7Y29sb3JzLmJhY2tncm91bmR9RjUsICR7Y29sb3JzLmJhY2tncm91bmR9RTApYCxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjI2MHB4XCIsXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxoM1xyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIlxyXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgU3VwcG9ydCAmIFBmbGVnZVxyXG4gICAgICAgICAgPC9oMz5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTQgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWRcIlxyXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnNlY29uZGFyeSB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBBdWNoIG5hY2ggZGVtIExhdW5jaCBibGVpYmVuIHdpciBhbiBJaHJlciBTZWl0ZSB1bmQga8O8bW1lcm4gdW5zIHVtIFVwZGF0ZXMsIFdhcnR1bmcgdW5kXHJcbiAgICAgICAgICAgIE9wdGltaWVydW5nZW4g4oCTIGbDvHIgbmFjaGhhbHRpZ2VuIEVyZm9sZy5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIG92ZXJmbG93LWNsaXBcIj5cclxuICAgICAgPFRpbWVsaW5lIGRhdGE9e2RhdGF9IC8+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJUaW1lbGluZSIsImNvbG9ycyIsIlRpbWVsaW5lRGVtbyIsImRhdGEiLCJ0aXRsZSIsImNvbnRlbnQiLCJkaXYiLCJjbGFzc05hbWUiLCJzdHlsZSIsImJhY2tncm91bmQiLCJtaW5IZWlnaHQiLCJoMyIsImNvbG9yIiwicHJpbWFyeSIsInAiLCJzZWNvbmRhcnkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/timeline-demo.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/timeline.tsx": /*!************************************!*\ !*** ./components/ui/timeline.tsx ***! \************************************/ /***/ (function(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 */ Timeline: function() { return /* binding */ Timeline; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/value/use-scroll.mjs\");\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/value/use-transform.mjs\");\n/* harmony import */ var motion_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! motion/react */ \"(app-pages-browser)/./node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/colors */ \"(app-pages-browser)/./lib/colors.ts\");\n/* __next_internal_client_entry_do_not_use__ Timeline auto */ \nvar _s = $RefreshSig$();\n\n\n\nconst Timeline = (param)=>{\n let { data } = param;\n _s();\n const ref = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const [height, setHeight] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (ref.current) {\n const rect = ref.current.getBoundingClientRect();\n setHeight(rect.height);\n }\n }, [\n ref\n ]);\n const { scrollYProgress } = (0,motion_react__WEBPACK_IMPORTED_MODULE_3__.useScroll)({\n target: containerRef,\n offset: [\n \"start 10%\",\n \"end 50%\"\n ]\n });\n const heightTransform = (0,motion_react__WEBPACK_IMPORTED_MODULE_4__.useTransform)(scrollYProgress, [\n 0,\n 1\n ], [\n 0,\n height\n ]);\n const opacityTransform = (0,motion_react__WEBPACK_IMPORTED_MODULE_4__.useTransform)(scrollYProgress, [\n 0,\n 0.1\n ], [\n 0,\n 1\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full font-sans md:px-10\",\n ref: containerRef,\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.background\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto py-20 px-4 md:px-8 lg:px-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-lg md:text-4xl mb-4 max-w-4xl\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary\n },\n children: \"Unser Projektfahrplan im \\xdcberblick\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 39,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm md:text-base max-w-sm\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary\n },\n children: \"Schritt f\\xfcr Schritt zur erfolgreichen Website – transparent, strukturiert und begleitet von unserem Team.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 45,\n columnNumber: 9\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 38,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: ref,\n className: \"relative max-w-7xl mx-auto pb-20\",\n children: [\n data.map((item, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-start pt-10 md:pt-40 md:gap-10 min-h-[320px]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"sticky flex flex-col md:flex-row z-40 items-center top-40 self-start max-w-xs lg:max-w-sm md:w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-10 absolute left-3 md:left-3 w-10 rounded-full flex items-center justify-center\",\n style: {\n backgroundColor: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.background\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-4 w-4 rounded-full border\",\n style: {\n backgroundColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary, \"4D\"),\n borderColor: \"\".concat(_lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.secondary, \"66\")\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 65,\n columnNumber: 17\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 61,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"hidden md:block text-xl md:pl-20 md:text-5xl font-bold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary\n },\n children: item.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 73,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 60,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative pl-20 pr-4 md:pl-4 w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"md:hidden block text-2xl mb-4 text-left font-bold\",\n style: {\n color: _lib_colors__WEBPACK_IMPORTED_MODULE_2__.colors.primary\n },\n children: item.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 82,\n columnNumber: 15\n }, undefined),\n item.content,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 81,\n columnNumber: 13\n }, undefined)\n ]\n }, index, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 56,\n columnNumber: 11\n }, undefined)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n height: height + \"px\"\n },\n className: \"absolute md:left-8 left-8 top-0 overflow-hidden w-[2px] bg-[linear-gradient(to_bottom,var(--tw-gradient-stops))] from-transparent from-[0%] via-neutral-200 dark:via-neutral-700 to-transparent to-[99%] [mask-image:linear-gradient(to_bottom,transparent_0%,black_10%,black_90%,transparent_100%)] \",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(motion_react__WEBPACK_IMPORTED_MODULE_5__.motion.div, {\n style: {\n height: heightTransform,\n opacity: opacityTransform\n },\n className: \"absolute inset-x-0 top-0 w-[2px] bg-gradient-to-t from-purple-500 via-blue-500 to-transparent from-[0%] via-[10%] rounded-full\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 98,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 92,\n columnNumber: 9\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 54,\n columnNumber: 7\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\timeline.tsx\",\n lineNumber: 33,\n columnNumber: 5\n }, undefined);\n};\n_s(Timeline, \"kFz0QophyXZS+E0JAkQ+z6t2Fe0=\", false, function() {\n return [\n motion_react__WEBPACK_IMPORTED_MODULE_3__.useScroll,\n motion_react__WEBPACK_IMPORTED_MODULE_4__.useTransform,\n motion_react__WEBPACK_IMPORTED_MODULE_4__.useTransform\n ];\n});\n_c = Timeline;\nvar _c;\n$RefreshReg$(_c, \"Timeline\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvdGltZWxpbmUudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFK0Q7QUFDSjtBQUNyQjtBQU8vQixNQUFNUSxXQUFXO1FBQUMsRUFBRUMsSUFBSSxFQUE2Qjs7SUFDMUQsTUFBTUMsTUFBTUwsNkNBQU1BLENBQWlCO0lBQ25DLE1BQU1NLGVBQWVOLDZDQUFNQSxDQUFpQjtJQUM1QyxNQUFNLENBQUNPLFFBQVFDLFVBQVUsR0FBR1AsK0NBQVFBLENBQUM7SUFFckNGLGdEQUFTQSxDQUFDO1FBQ1IsSUFBSU0sSUFBSUksT0FBTyxFQUFFO1lBQ2YsTUFBTUMsT0FBT0wsSUFBSUksT0FBTyxDQUFDRSxxQkFBcUI7WUFDOUNILFVBQVVFLEtBQUtILE1BQU07UUFDdkI7SUFDRixHQUFHO1FBQUNGO0tBQUk7SUFFUixNQUFNLEVBQUVPLGVBQWUsRUFBRSxHQUFHakIsdURBQVNBLENBQUM7UUFDcENrQixRQUFRUDtRQUNSUSxRQUFRO1lBQUM7WUFBYTtTQUFVO0lBQ2xDO0lBRUEsTUFBTUMsa0JBQWtCbkIsMERBQVlBLENBQUNnQixpQkFBaUI7UUFBQztRQUFHO0tBQUUsRUFBRTtRQUFDO1FBQUdMO0tBQU87SUFDekUsTUFBTVMsbUJBQW1CcEIsMERBQVlBLENBQUNnQixpQkFBaUI7UUFBQztRQUFHO0tBQUksRUFBRTtRQUFDO1FBQUc7S0FBRTtJQUV2RSxxQkFDRSw4REFBQ0s7UUFDQ0MsV0FBVTtRQUNWYixLQUFLQztRQUNMYSxPQUFPO1lBQUVDLGlCQUFpQmxCLCtDQUFNQSxDQUFDbUIsVUFBVTtRQUFDOzswQkFFNUMsOERBQUNKO2dCQUFJQyxXQUFVOztrQ0FDYiw4REFBQ0k7d0JBQ0NKLFdBQVU7d0JBQ1ZDLE9BQU87NEJBQUVJLE9BQU9yQiwrQ0FBTUEsQ0FBQ3NCLE9BQU87d0JBQUM7a0NBQ2hDOzs7Ozs7a0NBR0QsOERBQUNDO3dCQUNDUCxXQUFVO3dCQUNWQyxPQUFPOzRCQUFFSSxPQUFPckIsK0NBQU1BLENBQUN3QixTQUFTO3dCQUFDO2tDQUNsQzs7Ozs7Ozs7Ozs7OzBCQU1ILDhEQUFDVDtnQkFBSVosS0FBS0E7Z0JBQUthLFdBQVU7O29CQUN0QmQsS0FBS3VCLEdBQUcsQ0FBQyxDQUFDQyxNQUFNQyxzQkFDZiw4REFBQ1o7NEJBRUNDLFdBQVU7OzhDQUVWLDhEQUFDRDtvQ0FBSUMsV0FBVTs7c0RBQ2IsOERBQUNEOzRDQUNDQyxXQUFVOzRDQUNWQyxPQUFPO2dEQUFFQyxpQkFBaUJsQiwrQ0FBTUEsQ0FBQ21CLFVBQVU7NENBQUM7c0RBRTVDLDRFQUFDSjtnREFDQ0MsV0FBVTtnREFDVkMsT0FBTztvREFDTEMsaUJBQWlCLEdBQW9CLE9BQWpCbEIsK0NBQU1BLENBQUN3QixTQUFTLEVBQUM7b0RBQ3JDSSxhQUFhLEdBQW9CLE9BQWpCNUIsK0NBQU1BLENBQUN3QixTQUFTLEVBQUM7Z0RBQ25DOzs7Ozs7Ozs7OztzREFHSiw4REFBQ0s7NENBQ0NiLFdBQVU7NENBQ1ZDLE9BQU87Z0RBQUVJLE9BQU9yQiwrQ0FBTUEsQ0FBQ3NCLE9BQU87NENBQUM7c0RBRTlCSSxLQUFLSSxLQUFLOzs7Ozs7Ozs7Ozs7OENBSWYsOERBQUNmO29DQUFJQyxXQUFVOztzREFDYiw4REFBQ2E7NENBQ0NiLFdBQVU7NENBQ1ZDLE9BQU87Z0RBQUVJLE9BQU9yQiwrQ0FBTUEsQ0FBQ3NCLE9BQU87NENBQUM7c0RBRTlCSSxLQUFLSSxLQUFLOzs7Ozs7d0NBRVpKLEtBQUtLLE9BQU87d0NBQUU7Ozs7Ozs7OzJCQS9CWko7Ozs7O2tDQW1DVCw4REFBQ1o7d0JBQ0NFLE9BQU87NEJBQ0xaLFFBQVFBLFNBQVM7d0JBQ25CO3dCQUNBVyxXQUFVO2tDQUVWLDRFQUFDckIsZ0RBQU1BLENBQUNvQixHQUFHOzRCQUNURSxPQUFPO2dDQUNMWixRQUFRUTtnQ0FDUm1CLFNBQVNsQjs0QkFDWDs0QkFDQUUsV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNdEIsRUFBRTtHQWpHV2Y7O1FBWWlCUixtREFBU0E7UUFLYkMsc0RBQVlBO1FBQ1hBLHNEQUFZQTs7O0tBbEIxQk8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy91aS90aW1lbGluZS50c3g/OGMxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcclxuXHJcbmltcG9ydCB7IHVzZVNjcm9sbCwgdXNlVHJhbnNmb3JtLCBtb3Rpb24gfSBmcm9tIFwibW90aW9uL3JlYWN0XCI7XHJcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSBcIkAvbGliL2NvbG9yc1wiO1xyXG5cclxuaW50ZXJmYWNlIFRpbWVsaW5lRW50cnkge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgY29udGVudDogUmVhY3QuUmVhY3ROb2RlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgVGltZWxpbmUgPSAoeyBkYXRhIH06IHsgZGF0YTogVGltZWxpbmVFbnRyeVtdIH0pID0+IHtcclxuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xyXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XHJcbiAgY29uc3QgW2hlaWdodCwgc2V0SGVpZ2h0XSA9IHVzZVN0YXRlKDApO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSByZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuICB9LCBbcmVmXSk7XHJcblxyXG4gIGNvbnN0IHsgc2Nyb2xsWVByb2dyZXNzIH0gPSB1c2VTY3JvbGwoe1xyXG4gICAgdGFyZ2V0OiBjb250YWluZXJSZWYsXHJcbiAgICBvZmZzZXQ6IFtcInN0YXJ0IDEwJVwiLCBcImVuZCA1MCVcIl0sXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGhlaWdodFRyYW5zZm9ybSA9IHVzZVRyYW5zZm9ybShzY3JvbGxZUHJvZ3Jlc3MsIFswLCAxXSwgWzAsIGhlaWdodF0pO1xyXG4gIGNvbnN0IG9wYWNpdHlUcmFuc2Zvcm0gPSB1c2VUcmFuc2Zvcm0oc2Nyb2xsWVByb2dyZXNzLCBbMCwgMC4xXSwgWzAsIDFdKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZvbnQtc2FucyBtZDpweC0xMFwiXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19XHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHktMjAgcHgtNCBtZDpweC04IGxnOnB4LTEwXCI+XHJcbiAgICAgICAgPGgyXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIG1kOnRleHQtNHhsIG1iLTQgbWF4LXctNHhsXCJcclxuICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBjb2xvcnMucHJpbWFyeSB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIFVuc2VyIFByb2pla3RmYWhycGxhbiBpbSDDnGJlcmJsaWNrXHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgICA8cFxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1zbSBtZDp0ZXh0LWJhc2UgbWF4LXctc21cIlxyXG4gICAgICAgICAgc3R5bGU9e3sgY29sb3I6IGNvbG9ycy5zZWNvbmRhcnkgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICBTY2hyaXR0IGbDvHIgU2Nocml0dCB6dXIgZXJmb2xncmVpY2hlbiBXZWJzaXRlIOKAkyB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIHN0cnVrdHVyaWVydCB1bmQgYmVnbGVpdGV0IHZvbiB1bnNlcmVtIFRlYW0uXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT1cInJlbGF0aXZlIG1heC13LTd4bCBteC1hdXRvIHBiLTIwXCI+XHJcbiAgICAgICAge2RhdGEubWFwKChpdGVtLCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktc3RhcnQgcHQtMTAgbWQ6cHQtNDAgbWQ6Z2FwLTEwIG1pbi1oLVszMjBweF1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IHotNDAgaXRlbXMtY2VudGVyIHRvcC00MCBzZWxmLXN0YXJ0IG1heC13LXhzIGxnOm1heC13LXNtIG1kOnctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtMTAgYWJzb2x1dGUgbGVmdC0zIG1kOmxlZnQtMyB3LTEwIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTQgdy00IHJvdW5kZWQtZnVsbCBib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3JzLnNlY29uZGFyeX00RGAsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGAke2NvbG9ycy5zZWNvbmRhcnl9NjZgLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8aDNcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhpZGRlbiBtZDpibG9jayB0ZXh0LXhsIG1kOnBsLTIwIG1kOnRleHQtNXhsIGZvbnQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7aXRlbS50aXRsZX1cclxuICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgcGwtMjAgcHItNCBtZDpwbC00IHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxoM1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWQ6aGlkZGVuIGJsb2NrIHRleHQtMnhsIG1iLTQgdGV4dC1sZWZ0IGZvbnQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogY29sb3JzLnByaW1hcnkgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7aXRlbS50aXRsZX1cclxuICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgIHtpdGVtLmNvbnRlbnR9e1wiIFwifVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICkpfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgXCJweFwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIG1kOmxlZnQtOCBsZWZ0LTggdG9wLTAgb3ZlcmZsb3ctaGlkZGVuIHctWzJweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sdmFyKC0tdHctZ3JhZGllbnQtc3RvcHMpKV0gZnJvbS10cmFuc3BhcmVudCBmcm9tLVswJV0gdmlhLW5ldXRyYWwtMjAwIGRhcms6dmlhLW5ldXRyYWwtNzAwIHRvLXRyYW5zcGFyZW50IHRvLVs5OSVdICBbbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLHRyYW5zcGFyZW50XzAlLGJsYWNrXzEwJSxibGFja185MCUsdHJhbnNwYXJlbnRfMTAwJSldIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1vdGlvbi5kaXZcclxuICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICBvcGFjaXR5OiBvcGFjaXR5VHJhbnNmb3JtLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC14LTAgdG9wLTAgIHctWzJweF0gYmctZ3JhZGllbnQtdG8tdCBmcm9tLXB1cnBsZS01MDAgdmlhLWJsdWUtNTAwIHRvLXRyYW5zcGFyZW50IGZyb20tWzAlXSB2aWEtWzEwJV0gcm91bmRlZC1mdWxsXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbiJdLCJuYW1lcyI6WyJ1c2VTY3JvbGwiLCJ1c2VUcmFuc2Zvcm0iLCJtb3Rpb24iLCJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY29sb3JzIiwiVGltZWxpbmUiLCJkYXRhIiwicmVmIiwiY29udGFpbmVyUmVmIiwiaGVpZ2h0Iiwic2V0SGVpZ2h0IiwiY3VycmVudCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxZUHJvZ3Jlc3MiLCJ0YXJnZXQiLCJvZmZzZXQiLCJoZWlnaHRUcmFuc2Zvcm0iLCJvcGFjaXR5VHJhbnNmb3JtIiwiZGl2IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwiaDIiLCJjb2xvciIsInByaW1hcnkiLCJwIiwic2Vjb25kYXJ5IiwibWFwIiwiaXRlbSIsImluZGV4IiwiYm9yZGVyQ29sb3IiLCJoMyIsInRpdGxlIiwiY29udGVudCIsIm9wYWNpdHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/timeline.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/tooltip.tsx": /*!***********************************!*\ !*** ./components/ui/tooltip.tsx ***! \***********************************/ /***/ (function(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 */ Tooltip: function() { return /* binding */ Tooltip; },\n/* harmony export */ TooltipContent: function() { return /* binding */ TooltipContent; },\n/* harmony export */ TooltipProvider: function() { return /* binding */ TooltipProvider; },\n/* harmony export */ TooltipTrigger: function() { return /* binding */ TooltipTrigger; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-tooltip */ \"(app-pages-browser)/./node_modules/@radix-ui/react-tooltip/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Tooltip,TooltipTrigger,TooltipContent,TooltipProvider auto */ \n\n\n\nconst TooltipProvider = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Provider;\nconst Tooltip = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Root;\nconst TooltipTrigger = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Trigger;\nconst TooltipContent = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>/*#__PURE__*/ {\n let { className, sideOffset = 4, ...props } = param;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Content, {\n ref: ref,\n sideOffset: sideOffset,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\andre\\\\Documents\\\\GitHub\\\\Webklar.com\\\\components\\\\ui\\\\tooltip.tsx\",\n lineNumber: 18,\n columnNumber: 3\n }, undefined);\n});\n_c1 = TooltipContent;\nTooltipContent.displayName = _radix_ui_react_tooltip__WEBPACK_IMPORTED_MODULE_3__.Content.displayName;\n\nvar _c, _c1;\n$RefreshReg$(_c, \"TooltipContent$React.forwardRef\");\n$RefreshReg$(_c1, \"TooltipContent\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvdG9vbHRpcC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUUrQjtBQUM2QjtBQUUzQjtBQUVqQyxNQUFNRyxrQkFBa0JGLDZEQUF5QjtBQUVqRCxNQUFNSSxVQUFVSix5REFBcUI7QUFFckMsTUFBTU0saUJBQWlCTiw0REFBd0I7QUFFL0MsTUFBTVEsK0JBQWlCVCw2Q0FBZ0IsTUFHckMsUUFBMENXO1FBQXpDLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxDQUFDLEVBQUUsR0FBR0MsT0FBTztXQUN4Qyw4REFBQ2IsNERBQXdCO1FBQ3ZCVSxLQUFLQTtRQUNMRSxZQUFZQTtRQUNaRCxXQUFXViw4Q0FBRUEsQ0FDWCxzWUFDQVU7UUFFRCxHQUFHRSxLQUFLOzs7Ozs7QUFDVjs7QUFFSEwsZUFBZU8sV0FBVyxHQUFHZiw0REFBd0IsQ0FBQ2UsV0FBVztBQUVHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvdWkvdG9vbHRpcC50c3g/OWZjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCAqIGFzIFRvb2x0aXBQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXRvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscyc7XHJcblxyXG5jb25zdCBUb29sdGlwUHJvdmlkZXIgPSBUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyO1xyXG5cclxuY29uc3QgVG9vbHRpcCA9IFRvb2x0aXBQcmltaXRpdmUuUm9vdDtcclxuXHJcbmNvbnN0IFRvb2x0aXBUcmlnZ2VyID0gVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyO1xyXG5cclxuY29uc3QgVG9vbHRpcENvbnRlbnQgPSBSZWFjdC5mb3J3YXJkUmVmPFxyXG4gIFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFRvb2x0aXBQcmltaXRpdmUuQ29udGVudD4sXHJcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XHJcbj4oKHsgY2xhc3NOYW1lLCBzaWRlT2Zmc2V0ID0gNCwgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXHJcbiAgPFRvb2x0aXBQcmltaXRpdmUuQ29udGVudFxyXG4gICAgcmVmPXtyZWZ9XHJcbiAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxyXG4gICAgY2xhc3NOYW1lPXtjbihcclxuICAgICAgJ3otNTAgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXBvcG92ZXIgcHgtMyBweS0xLjUgdGV4dC1zbSB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgYW5pbWF0ZS1pbiBmYWRlLWluLTAgem9vbS1pbi05NSBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yJyxcclxuICAgICAgY2xhc3NOYW1lXHJcbiAgICApfVxyXG4gICAgey4uLnByb3BzfVxyXG4gIC8+XHJcbikpO1xyXG5Ub29sdGlwQ29udGVudC5kaXNwbGF5TmFtZSA9IFRvb2x0aXBQcmltaXRpdmUuQ29udGVudC5kaXNwbGF5TmFtZTtcclxuXHJcbmV4cG9ydCB7IFRvb2x0aXAsIFRvb2x0aXBUcmlnZ2VyLCBUb29sdGlwQ29udGVudCwgVG9vbHRpcFByb3ZpZGVyIH07XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsIlRvb2x0aXBQcmltaXRpdmUiLCJjbiIsIlRvb2x0aXBQcm92aWRlciIsIlByb3ZpZGVyIiwiVG9vbHRpcCIsIlJvb3QiLCJUb29sdGlwVHJpZ2dlciIsIlRyaWdnZXIiLCJUb29sdGlwQ29udGVudCIsImZvcndhcmRSZWYiLCJyZWYiLCJjbGFzc05hbWUiLCJzaWRlT2Zmc2V0IiwicHJvcHMiLCJDb250ZW50IiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/tooltip.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./hooks/useAuth.ts": /*!**************************!*\ !*** ./hooks/useAuth.ts ***! \**************************/ /***/ (function(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 */ useAuth: function() { return /* binding */ useAuth; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_supabase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/supabase */ \"(app-pages-browser)/./lib/supabase.ts\");\n/* __next_internal_client_entry_do_not_use__ useAuth auto */ \n\nfunction useAuth() {\n const [user, setUser] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n // Get initial session\n _lib_supabase__WEBPACK_IMPORTED_MODULE_1__.supabase.auth.getSession().then((param)=>{\n let { data: { session } } = param;\n var _session_user;\n setUser((_session_user = session === null || session === void 0 ? void 0 : session.user) !== null && _session_user !== void 0 ? _session_user : null);\n setLoading(false);\n });\n // Listen for auth changes\n const { data: { subscription } } = _lib_supabase__WEBPACK_IMPORTED_MODULE_1__.supabase.auth.onAuthStateChange((_event, session)=>{\n var _session_user;\n setUser((_session_user = session === null || session === void 0 ? void 0 : session.user) !== null && _session_user !== void 0 ? _session_user : null);\n setLoading(false);\n });\n return ()=>subscription.unsubscribe();\n }, []);\n return {\n user,\n loading\n };\n}\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2hvb2tzL3VzZUF1dGgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs2REFFMkM7QUFDRjtBQUdsQyxTQUFTRztJQUNkLE1BQU0sQ0FBQ0MsTUFBTUMsUUFBUSxHQUFHTCwrQ0FBUUEsQ0FBYztJQUM5QyxNQUFNLENBQUNNLFNBQVNDLFdBQVcsR0FBR1AsK0NBQVFBLENBQUM7SUFFdkNDLGdEQUFTQSxDQUFDO1FBQ1Isc0JBQXNCO1FBQ3RCQyxtREFBUUEsQ0FBQ00sSUFBSSxDQUFDQyxVQUFVLEdBQUdDLElBQUksQ0FBQztnQkFBQyxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRSxFQUFFO2dCQUM1Q0E7WUFBUlAsUUFBUU8sQ0FBQUEsZ0JBQUFBLG9CQUFBQSw4QkFBQUEsUUFBU1IsSUFBSSxjQUFiUSwyQkFBQUEsZ0JBQWlCO1lBQ3pCTCxXQUFXO1FBQ2I7UUFFQSwwQkFBMEI7UUFDMUIsTUFBTSxFQUFFSSxNQUFNLEVBQUVFLFlBQVksRUFBRSxFQUFFLEdBQUdYLG1EQUFRQSxDQUFDTSxJQUFJLENBQUNNLGlCQUFpQixDQUFDLENBQUNDLFFBQVFIO2dCQUNsRUE7WUFBUlAsUUFBUU8sQ0FBQUEsZ0JBQUFBLG9CQUFBQSw4QkFBQUEsUUFBU1IsSUFBSSxjQUFiUSwyQkFBQUEsZ0JBQWlCO1lBQ3pCTCxXQUFXO1FBQ2I7UUFFQSxPQUFPLElBQU1NLGFBQWFHLFdBQVc7SUFDdkMsR0FBRyxFQUFFO0lBRUwsT0FBTztRQUFFWjtRQUFNRTtJQUFRO0FBQ3pCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2hvb2tzL3VzZUF1dGgudHM/OWM3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxyXG5cclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xyXG5pbXBvcnQgeyBzdXBhYmFzZSB9IGZyb20gJ0AvbGliL3N1cGFiYXNlJ1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dGgoKSB7XHJcbiAgY29uc3QgW3VzZXIsIHNldFVzZXJdID0gdXNlU3RhdGU8VXNlciB8IG51bGw+KG51bGwpXHJcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vIEdldCBpbml0aWFsIHNlc3Npb25cclxuICAgIHN1cGFiYXNlLmF1dGguZ2V0U2Vzc2lvbigpLnRoZW4oKHsgZGF0YTogeyBzZXNzaW9uIH0gfSkgPT4ge1xyXG4gICAgICBzZXRVc2VyKHNlc3Npb24/LnVzZXIgPz8gbnVsbClcclxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcclxuICAgIH0pXHJcblxyXG4gICAgLy8gTGlzdGVuIGZvciBhdXRoIGNoYW5nZXNcclxuICAgIGNvbnN0IHsgZGF0YTogeyBzdWJzY3JpcHRpb24gfSB9ID0gc3VwYWJhc2UuYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZSgoX2V2ZW50LCBzZXNzaW9uKSA9PiB7XHJcbiAgICAgIHNldFVzZXIoc2Vzc2lvbj8udXNlciA/PyBudWxsKVxyXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICB9LCBbXSlcclxuXHJcbiAgcmV0dXJuIHsgdXNlciwgbG9hZGluZyB9XHJcbn0gIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0Iiwic3VwYWJhc2UiLCJ1c2VBdXRoIiwidXNlciIsInNldFVzZXIiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImF1dGgiLCJnZXRTZXNzaW9uIiwidGhlbiIsImRhdGEiLCJzZXNzaW9uIiwic3Vic2NyaXB0aW9uIiwib25BdXRoU3RhdGVDaGFuZ2UiLCJfZXZlbnQiLCJ1bnN1YnNjcmliZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./hooks/useAuth.ts\n")); /***/ }), /***/ "(app-pages-browser)/./lib/colors.ts": /*!***********************!*\ !*** ./lib/colors.ts ***! \***********************/ /***/ (function(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 */ colors: function() { return /* binding */ colors; }\n/* harmony export */ });\n// Centralized color system\nconst colors = {\n // Main brand colors\n primary: \"#0A400C\",\n secondary: \"#819067\",\n tertiary: \"#B1AB86\",\n background: \"#FEFAE0\",\n // Derived colors for better contrast\n primaryLight: \"#0F5010\",\n primaryDark: \"#052006\",\n secondaryLight: \"#9AA67F\",\n secondaryDark: \"#6B7A58\",\n // Neutral colors\n white: \"#FFFFFF\",\n black: \"#000000\",\n gray: {\n 100: \"#F5F5F5\",\n 200: \"#E5E5E5\",\n 300: \"#D4D4D4\",\n 400: \"#A3A3A3\",\n 500: \"#737373\",\n 600: \"#525252\",\n 700: \"#404040\",\n 800: \"#262626\",\n 900: \"#171717\"\n }\n};\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi9jb2xvcnMudHMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDJCQUEyQjtBQUNwQixNQUFNQSxTQUFTO0lBQ3BCLG9CQUFvQjtJQUNwQkMsU0FBUztJQUNUQyxXQUFXO0lBQ1hDLFVBQVU7SUFDVkMsWUFBWTtJQUVaLHFDQUFxQztJQUNyQ0MsY0FBYztJQUNkQyxhQUFhO0lBQ2JDLGdCQUFnQjtJQUNoQkMsZUFBZTtJQUVmLGlCQUFpQjtJQUNqQkMsT0FBTztJQUNQQyxPQUFPO0lBQ1BDLE1BQU07UUFDSixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7SUFDUDtBQUNGLEVBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbGliL2NvbG9ycy50cz9jMzJhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENlbnRyYWxpemVkIGNvbG9yIHN5c3RlbVxyXG5leHBvcnQgY29uc3QgY29sb3JzID0ge1xyXG4gIC8vIE1haW4gYnJhbmQgY29sb3JzXHJcbiAgcHJpbWFyeTogJyMwQTQwMEMnLCAgICAgIC8vIERhcmsgZ3JlZW5cclxuICBzZWNvbmRhcnk6ICcjODE5MDY3JywgICAgLy8gTWVkaXVtIGdyZWVuICBcclxuICB0ZXJ0aWFyeTogJyNCMUFCODYnLCAgICAgLy8gTGlnaHQgZ3JlZW4tYmVpZ2VcclxuICBiYWNrZ3JvdW5kOiAnI0ZFRkFFMCcsICAgLy8gQ3JlYW0gYmFja2dyb3VuZFxyXG4gIFxyXG4gIC8vIERlcml2ZWQgY29sb3JzIGZvciBiZXR0ZXIgY29udHJhc3RcclxuICBwcmltYXJ5TGlnaHQ6ICcjMEY1MDEwJyxcclxuICBwcmltYXJ5RGFyazogJyMwNTIwMDYnLFxyXG4gIHNlY29uZGFyeUxpZ2h0OiAnIzlBQTY3RicsXHJcbiAgc2Vjb25kYXJ5RGFyazogJyM2QjdBNTgnLFxyXG4gIFxyXG4gIC8vIE5ldXRyYWwgY29sb3JzXHJcbiAgd2hpdGU6ICcjRkZGRkZGJyxcclxuICBibGFjazogJyMwMDAwMDAnLFxyXG4gIGdyYXk6IHtcclxuICAgIDEwMDogJyNGNUY1RjUnLFxyXG4gICAgMjAwOiAnI0U1RTVFNScsXHJcbiAgICAzMDA6ICcjRDRENEQ0JyxcclxuICAgIDQwMDogJyNBM0EzQTMnLFxyXG4gICAgNTAwOiAnIzczNzM3MycsXHJcbiAgICA2MDA6ICcjNTI1MjUyJyxcclxuICAgIDcwMDogJyM0MDQwNDAnLFxyXG4gICAgODAwOiAnIzI2MjYyNicsXHJcbiAgICA5MDA6ICcjMTcxNzE3JyxcclxuICB9XHJcbn0gYXMgY29uc3Q7XHJcblxyXG5leHBvcnQgdHlwZSBDb2xvcktleSA9IGtleW9mIHR5cGVvZiBjb2xvcnM7Il0sIm5hbWVzIjpbImNvbG9ycyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJ0ZXJ0aWFyeSIsImJhY2tncm91bmQiLCJwcmltYXJ5TGlnaHQiLCJwcmltYXJ5RGFyayIsInNlY29uZGFyeUxpZ2h0Iiwic2Vjb25kYXJ5RGFyayIsIndoaXRlIiwiYmxhY2siLCJncmF5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/colors.ts\n")); /***/ }), /***/ "(app-pages-browser)/./lib/supabase.ts": /*!*************************!*\ !*** ./lib/supabase.ts ***! \*************************/ /***/ (function(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 */ supabase: function() { return /* binding */ supabase; }\n/* harmony export */ });\n/* harmony import */ var _supabase_supabase_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/supabase-js */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/index.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n\nconst supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL || \"https://pkaijflgerfyspupyoex.supabase.co\";\nconst supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InBrYWlqZmxnZXJmeXNwdXB5b2V4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTM5MTQwOTgsImV4cCI6MjA2OTQ5MDA5OH0.WuxgIsfJ4Fffkv7NaMRV4do7G_uy7S5m46632ploB58\";\nconst supabase = (0,_supabase_supabase_js__WEBPACK_IMPORTED_MODULE_0__.createClient)(supabaseUrl, supabaseAnonKey, {\n auth: {\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true\n }\n});\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi9zdXBhYmFzZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0Q7QUFFcEQsTUFBTUMsY0FBY0MsT0FBT0EsQ0FBQ0MsR0FBRyxDQUFDQyx3QkFBd0IsSUFBSTtBQUM1RCxNQUFNQyxrQkFBa0JILE9BQU9BLENBQUNDLEdBQUcsQ0FBQ0csNkJBQTZCLElBQUk7QUFFOUQsTUFBTUMsV0FBV1AsbUVBQVlBLENBQUNDLGFBQWFJLGlCQUFpQjtJQUNqRUcsTUFBTTtRQUNKQyxrQkFBa0I7UUFDbEJDLGdCQUFnQjtRQUNoQkMsb0JBQW9CO0lBQ3RCO0FBQ0YsR0FBRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9saWIvc3VwYWJhc2UudHM/Yzk5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXHJcblxyXG5jb25zdCBzdXBhYmFzZVVybCA9IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX1NVUEFCQVNFX1VSTCB8fCAnaHR0cHM6Ly9wa2FpamZsZ2VyZnlzcHVweW9leC5zdXBhYmFzZS5jbydcclxuY29uc3Qgc3VwYWJhc2VBbm9uS2V5ID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfU1VQQUJBU0VfQU5PTl9LRVkgfHwgJ2V5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSnpkWEJoWW1GelpTSXNJbkpsWmlJNkluQnJZV2xxWm14blpYSm1lWE53ZFhCNWIyVjRJaXdpY205c1pTSTZJbUZ1YjI0aUxDSnBZWFFpT2pFM05UTTVNVFF3T1Rnc0ltVjRjQ0k2TWpBMk9UUTVNREE1T0gwLld1eGdJc2ZKNEZmZmt2N05hTVJWNGRvN0dfdXk3UzVtNDY2MzJwbG9CNTgnXHJcblxyXG5leHBvcnQgY29uc3Qgc3VwYWJhc2UgPSBjcmVhdGVDbGllbnQoc3VwYWJhc2VVcmwsIHN1cGFiYXNlQW5vbktleSwge1xyXG4gIGF1dGg6IHtcclxuICAgIGF1dG9SZWZyZXNoVG9rZW46IHRydWUsXHJcbiAgICBwZXJzaXN0U2Vzc2lvbjogdHJ1ZSxcclxuICAgIGRldGVjdFNlc3Npb25JblVybDogdHJ1ZVxyXG4gIH1cclxufSkgIl0sIm5hbWVzIjpbImNyZWF0ZUNsaWVudCIsInN1cGFiYXNlVXJsIiwicHJvY2VzcyIsImVudiIsIk5FWFRfUFVCTElDX1NVUEFCQVNFX1VSTCIsInN1cGFiYXNlQW5vbktleSIsIk5FWFRfUFVCTElDX1NVUEFCQVNFX0FOT05fS0VZIiwic3VwYWJhc2UiLCJhdXRoIiwiYXV0b1JlZnJlc2hUb2tlbiIsInBlcnNpc3RTZXNzaW9uIiwiZGV0ZWN0U2Vzc2lvbkluVXJsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/supabase.ts\n")); /***/ }), /***/ "(app-pages-browser)/./lib/supabaseClient.ts": /*!*******************************!*\ !*** ./lib/supabaseClient.ts ***! \*******************************/ /***/ (function(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 */ supabase: function() { return /* binding */ supabase; }\n/* harmony export */ });\n/* harmony import */ var _supabase_supabase_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/supabase-js */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/module/index.js\");\n\nconst supabaseUrl = \"https://pkaijflgerfyspupyoex.supabase.co\";\nconst supabaseAnonKey = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InBrYWlqZmxnZXJmeXNwdXB5b2V4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTM5MTQwOTgsImV4cCI6MjA2OTQ5MDA5OH0.WuxgIsfJ4Fffkv7NaMRV4do7G_uy7S5m46632ploB58\";\nconst supabase = (0,_supabase_supabase_js__WEBPACK_IMPORTED_MODULE_0__.createClient)(supabaseUrl, supabaseAnonKey);\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi9zdXBhYmFzZUNsaWVudC50cyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxRDtBQUVyRCxNQUFNQyxjQUFjO0FBQ25CLE1BQU1DLGtCQUFrQjtBQUVsQixNQUFNQyxXQUFXSCxtRUFBWUEsQ0FBQ0MsYUFBYUMsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2xpYi9zdXBhYmFzZUNsaWVudC50cz8zYTdkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdXBhYmFzZS1qcyc7XHJcblxyXG5jb25zdCBzdXBhYmFzZVVybCA9ICdodHRwczovL3BrYWlqZmxnZXJmeXNwdXB5b2V4LnN1cGFiYXNlLmNvJztcclxuIGNvbnN0IHN1cGFiYXNlQW5vbktleSA9ICdleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKcGMzTWlPaUp6ZFhCaFltRnpaU0lzSW5KbFppSTZJbkJyWVdscVpteG5aWEptZVhOd2RYQjViMlY0SWl3aWNtOXNaU0k2SW1GdWIyNGlMQ0pwWVhRaU9qRTNOVE01TVRRd09UZ3NJbVY0Y0NJNk1qQTJPVFE1TURBNU9IMC5XdXhnSXNmSjRGZmZrdjdOYU1SVjRkbzdHX3V5N1M1bTQ2NjMycGxvQjU4JztcclxuXHJcbmV4cG9ydCBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudChzdXBhYmFzZVVybCwgc3VwYWJhc2VBbm9uS2V5KTsgIl0sIm5hbWVzIjpbImNyZWF0ZUNsaWVudCIsInN1cGFiYXNlVXJsIiwic3VwYWJhc2VBbm9uS2V5Iiwic3VwYWJhc2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/supabaseClient.ts\n")); /***/ }), /***/ "(app-pages-browser)/./lib/utils.ts": /*!**********************!*\ !*** ./lib/utils.ts ***! \**********************/ /***/ (function(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 */ cn: function() { return /* binding */ cn; }\n/* harmony export */ });\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clsx */ \"(app-pages-browser)/./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var tailwind_merge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tailwind-merge */ \"(app-pages-browser)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs\");\n\n\nfunction cn() {\n for(var _len = arguments.length, inputs = new Array(_len), _key = 0; _key < _len; _key++){\n inputs[_key] = arguments[_key];\n }\n return (0,tailwind_merge__WEBPACK_IMPORTED_MODULE_1__.twMerge)((0,clsx__WEBPACK_IMPORTED_MODULE_0__.clsx)(inputs));\n}\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi91dGlscy50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNkM7QUFDSjtBQUVsQyxTQUFTRTtJQUFHO1FBQUdDLE9BQUgsdUJBQXVCO0lBQUQ7SUFDdkMsT0FBT0YsdURBQU9BLENBQUNELDBDQUFJQSxDQUFDRztBQUN0QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9saWIvdXRpbHMudHM/Zjc0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbHN4LCB0eXBlIENsYXNzVmFsdWUgfSBmcm9tICdjbHN4JztcclxuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xyXG4gIHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSk7XHJcbn1cclxuIl0sIm5hbWVzIjpbImNsc3giLCJ0d01lcmdlIiwiY24iLCJpbnB1dHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/utils.ts\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/client/add-locale.js": /*!*****************************************************!*\ !*** ./node_modules/next/dist/client/add-locale.js ***! \*****************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\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 (false) {}\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=add-locale.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1sb2NhbGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDZDQUE0QztJQUN4Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDBCQUEwQkMsbUJBQU9BLENBQUMsbUhBQTRCO0FBQ3BFLE1BQU1GLFlBQVksU0FBU0csSUFBSTtJQUMzQixJQUFJLElBQUlDLE9BQU9DLFVBQVVDLE1BQU0sRUFBRUMsT0FBTyxJQUFJQyxNQUFNSixPQUFPLElBQUlBLE9BQU8sSUFBSSxJQUFJSyxPQUFPLEdBQUdBLE9BQU9MLE1BQU1LLE9BQU87UUFDdEdGLElBQUksQ0FBQ0UsT0FBTyxFQUFFLEdBQUdKLFNBQVMsQ0FBQ0ksS0FBSztJQUNwQztJQUNBLElBQUlDLEtBQStCLEVBQUUsRUFFcEM7SUFDRCxPQUFPUDtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9QLFFBQVFrQixPQUFPLEtBQUssY0FBZSxPQUFPbEIsUUFBUWtCLE9BQU8sS0FBSyxZQUFZbEIsUUFBUWtCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2xCLFFBQVFrQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLckIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRa0IsT0FBTyxFQUFFLGNBQWM7UUFBRWpCLE9BQU87SUFBSztJQUNuRUgsT0FBT3NCLE1BQU0sQ0FBQ3BCLFFBQVFrQixPQUFPLEVBQUVsQjtJQUMvQnFCLE9BQU9yQixPQUFPLEdBQUdBLFFBQVFrQixPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1sb2NhbGUuanM/ZTJkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkTG9jYWxlXCIsIHtcclxuICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBhZGRMb2NhbGU7XHJcbiAgICB9XHJcbn0pO1xyXG5jb25zdCBfbm9ybWFsaXpldHJhaWxpbmdzbGFzaCA9IHJlcXVpcmUoXCIuL25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaFwiKTtcclxuY29uc3QgYWRkTG9jYWxlID0gZnVuY3Rpb24ocGF0aCkge1xyXG4gICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcclxuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcclxuICAgIH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XHJcbiAgICAgICAgcmV0dXJuICgwLCBfbm9ybWFsaXpldHJhaWxpbmdzbGFzaC5ub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCkocmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1sb2NhbGVcIikuYWRkTG9jYWxlKHBhdGgsIC4uLmFyZ3MpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXRoO1xyXG59O1xyXG5cclxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcclxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkLWxvY2FsZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiYWRkTG9jYWxlIiwiX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2giLCJyZXF1aXJlIiwicGF0aCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/add-locale.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js": /*!************************************************************!*\ !*** ./node_modules/next/dist/client/get-domain-locale.js ***! \************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDomainLocale\", ({\n enumerable: true,\n get: function() {\n return getDomainLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || \"\";\nfunction getDomainLocale(path, locale, locales, domainLocales) {\n if (false) {} else {\n return false;\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=get-domain-locale.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2dldC1kb21haW4tbG9jYWxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxtREFBa0Q7SUFDOUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywwQkFBMEJDLG1CQUFPQSxDQUFDLG1IQUE0QjtBQUNwRSxNQUFNQyxXQUFXQyxNQUFrQyxJQUFJO0FBQ3ZELFNBQVNKLGdCQUFnQk8sSUFBSSxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsYUFBYTtJQUN6RCxJQUFJTixLQUErQixFQUFFLEVBV3BDLE1BQU07UUFDSCxPQUFPO0lBQ1g7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPUixRQUFRMkIsT0FBTyxLQUFLLGNBQWUsT0FBTzNCLFFBQVEyQixPQUFPLEtBQUssWUFBWTNCLFFBQVEyQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8zQixRQUFRMkIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzlCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTJCLE9BQU8sRUFBRSxjQUFjO1FBQUUxQixPQUFPO0lBQUs7SUFDbkVILE9BQU8rQixNQUFNLENBQUM3QixRQUFRMkIsT0FBTyxFQUFFM0I7SUFDL0I4QixPQUFPOUIsT0FBTyxHQUFHQSxRQUFRMkIsT0FBTztBQUNsQyxFQUVBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9nZXQtZG9tYWluLWxvY2FsZS5qcz81YzI3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcclxuICAgIHZhbHVlOiB0cnVlXHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREb21haW5Mb2NhbGVcIiwge1xyXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgIGdldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldERvbWFpbkxvY2FsZTtcclxuICAgIH1cclxufSk7XHJcbmNvbnN0IF9ub3JtYWxpemV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoXCIpO1xyXG5jb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggfHwgXCJcIjtcclxuZnVuY3Rpb24gZ2V0RG9tYWluTG9jYWxlKHBhdGgsIGxvY2FsZSwgbG9jYWxlcywgZG9tYWluTG9jYWxlcykge1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcclxuICAgICAgICBjb25zdCBub3JtYWxpemVMb2NhbGVQYXRoID0gcmVxdWlyZShcIi4vbm9ybWFsaXplLWxvY2FsZS1wYXRoXCIpLm5vcm1hbGl6ZUxvY2FsZVBhdGg7XHJcbiAgICAgICAgY29uc3QgZGV0ZWN0RG9tYWluTG9jYWxlID0gcmVxdWlyZShcIi4vZGV0ZWN0LWRvbWFpbi1sb2NhbGVcIikuZGV0ZWN0RG9tYWluTG9jYWxlO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGxvY2FsZSB8fCBub3JtYWxpemVMb2NhbGVQYXRoKHBhdGgsIGxvY2FsZXMpLmRldGVjdGVkTG9jYWxlO1xyXG4gICAgICAgIGNvbnN0IGRvbWFpbiA9IGRldGVjdERvbWFpbkxvY2FsZShkb21haW5Mb2NhbGVzLCB1bmRlZmluZWQsIHRhcmdldCk7XHJcbiAgICAgICAgaWYgKGRvbWFpbikge1xyXG4gICAgICAgICAgICBjb25zdCBwcm90byA9IFwiaHR0cFwiICsgKGRvbWFpbi5odHRwID8gXCJcIiA6IFwic1wiKSArIFwiOi8vXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTG9jYWxlID0gdGFyZ2V0ID09PSBkb21haW4uZGVmYXVsdExvY2FsZSA/IFwiXCIgOiBcIi9cIiArIHRhcmdldDtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBwcm90byArIGRvbWFpbi5kb21haW4gKyAoMCwgX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2gubm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2gpKFwiXCIgKyBiYXNlUGF0aCArIGZpbmFsTG9jYWxlICsgcGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XHJcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xyXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xyXG59XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQtZG9tYWluLWxvY2FsZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0RG9tYWluTG9jYWxlIiwiX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2giLCJyZXF1aXJlIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGgiLCJsb2NhbGUiLCJsb2NhbGVzIiwiZG9tYWluTG9jYWxlcyIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJub3JtYWxpemVMb2NhbGVQYXRoIiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwidGFyZ2V0IiwiZGV0ZWN0ZWRMb2NhbGUiLCJkb21haW4iLCJ1bmRlZmluZWQiLCJwcm90byIsImh0dHAiLCJmaW5hbExvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/client/link.js": /*!***********************************************!*\ !*** ./node_modules/next/dist/client/link.js ***! \***********************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$();\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\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 _resolvehref = __webpack_require__(/*! ./resolve-href */ \"(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(app-pages-browser)/./node_modules/next/dist/client/add-locale.js\");\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.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 _useintersection = __webpack_require__(/*! ./use-intersection */ \"(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js\");\nconst _getdomainlocale = __webpack_require__(/*! ./get-domain-locale */ \"(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js\");\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.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 prefetched = new Set();\nfunction prefetch(router, href, as, options, appOptions, isAppRouter) {\n if (false) {}\n // app-router supports external urls out of the box so it shouldn't short-circuit here as support for e.g. `replace` is added in the app-router.\n if (!isAppRouter && !(0, _islocalurl.isLocalURL)(href)) {\n return;\n }\n // We should only dedupe requests when experimental.optimisticClientCache is\n // disabled.\n if (!options.bypassPrefetchedCheck) {\n const locale = typeof options.locale !== \"undefined\" ? options.locale : \"locale\" in router ? router.locale : undefined;\n const prefetchedKey = href + \"%\" + as + \"%\" + locale;\n // If we've already fetched the key, then don't prefetch it again!\n if (prefetched.has(prefetchedKey)) {\n return;\n }\n // Mark this URL as prefetched.\n prefetched.add(prefetchedKey);\n }\n const prefetchPromise = isAppRouter ? router.prefetch(href, appOptions) : router.prefetch(href, as, options);\n // Prefetch the JSON 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 Promise.resolve(prefetchPromise).catch((err)=>{\n if (true) {\n // rethrow to show invalid URL errors\n throw err;\n }\n });\n}\nfunction isModifiedEvent(event) {\n const eventTarget = event.currentTarget;\n const target = eventTarget.getAttribute(\"target\");\n return target && target !== \"_self\" || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download\n event.nativeEvent && event.nativeEvent.which === 2;\n}\nfunction linkClicked(e, router, href, as, replace, shallow, scroll, locale, isAppRouter, prefetchEnabled) {\n const { nodeName } = e.currentTarget;\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === \"A\";\n if (isAnchorNodeName && (isModifiedEvent(e) || // app-router supports external urls out of the box so it shouldn't short-circuit here as support for e.g. `replace` is added in the app-router.\n !isAppRouter && !(0, _islocalurl.isLocalURL)(href))) {\n // ignore click for browser’s default behavior\n return;\n }\n e.preventDefault();\n const navigate = ()=>{\n // If the router is an NextRouter instance it will have `beforePopState`\n const routerScroll = scroll != null ? scroll : true;\n if (\"beforePopState\" in router) {\n router[replace ? \"replace\" : \"push\"](href, as, {\n shallow,\n locale,\n scroll: routerScroll\n });\n } else {\n router[replace ? \"replace\" : \"push\"](as || href, {\n forceOptimisticNavigation: !prefetchEnabled,\n scroll: routerScroll\n });\n }\n };\n if (isAppRouter) {\n _react.default.startTransition(navigate);\n } else {\n navigate();\n }\n}\nfunction formatStringOrUrl(urlObjOrString) {\n if (typeof urlObjOrString === \"string\") {\n return urlObjOrString;\n }\n return (0, _formaturl.formatUrl)(urlObjOrString);\n}\n/**\r\n * React Component that enables client-side transitions between routes.\r\n */ const Link = /*#__PURE__*/ _s(_react.default.forwardRef(_c = _s(function LinkComponent(props, forwardedRef) {\n _s();\n let children;\n const { href: hrefProp, as: asProp, children: childrenProp, prefetch: prefetchProp = null, passHref, replace, shallow, scroll, locale, onClick, onMouseEnter: onMouseEnterProp, onTouchStart: onTouchStartProp, legacyBehavior = false, ...restProps } = props;\n children = childrenProp;\n if (legacyBehavior && (typeof children === \"string\" || typeof children === \"number\")) {\n children = /*#__PURE__*/ _react.default.createElement(\"a\", null, children);\n }\n const pagesRouter = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n const appRouter = _react.default.useContext(_approutercontextsharedruntime.AppRouterContext);\n const router = pagesRouter != null ? pagesRouter : appRouter;\n // We're in the app directory if there is no pages router.\n const isAppRouter = !pagesRouter;\n const prefetchEnabled = prefetchProp !== false;\n /**\r\n * The possible states for prefetch are:\r\n * - null: this is the default \"auto\" mode, where we will prefetch partially if the link is in the viewport\r\n * - true: we will prefetch if the link is visible and prefetch the full page, not just partially\r\n * - false: we will not prefetch if in the viewport at all\r\n */ const appPrefetchKind = prefetchProp === null ? _routerreducertypes.PrefetchKind.AUTO : _routerreducertypes.PrefetchKind.FULL;\n if (true) {\n function createPropError(args) {\n return new Error(\"Failed prop type: The prop `\" + args.key + \"` expects a \" + args.expected + \" in ``, but got `\" + args.actual + \"` instead.\" + ( true ? \"\\nOpen your browser's console to view the Component stack trace.\" : 0));\n }\n // TypeScript trick for type-guarding:\n const requiredPropsGuard = {\n href: true\n };\n const requiredProps = Object.keys(requiredPropsGuard);\n requiredProps.forEach((key)=>{\n if (key === \"href\") {\n if (props[key] == null || typeof props[key] !== \"string\" && typeof props[key] !== \"object\") {\n throw createPropError({\n key,\n expected: \"`string` or `object`\",\n actual: props[key] === null ? \"null\" : typeof props[key]\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\n // TypeScript trick for type-guarding:\n const optionalPropsGuard = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n locale: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true\n };\n const optionalProps = Object.keys(optionalPropsGuard);\n optionalProps.forEach((key)=>{\n const valType = typeof props[key];\n if (key === \"as\") {\n if (props[key] && valType !== \"string\" && valType !== \"object\") {\n throw createPropError({\n key,\n expected: \"`string` or `object`\",\n actual: valType\n });\n }\n } else if (key === \"locale\") {\n if (props[key] && valType !== \"string\") {\n throw createPropError({\n key,\n expected: \"`string`\",\n actual: valType\n });\n }\n } else if (key === \"onClick\" || key === \"onMouseEnter\" || key === \"onTouchStart\") {\n if (props[key] && valType !== \"function\") {\n throw createPropError({\n key,\n expected: \"`function`\",\n actual: valType\n });\n }\n } else if (key === \"replace\" || key === \"scroll\" || key === \"shallow\" || key === \"passHref\" || key === \"prefetch\" || key === \"legacyBehavior\") {\n if (props[key] != null && valType !== \"boolean\") {\n throw createPropError({\n key,\n expected: \"`boolean`\",\n actual: valType\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\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 const hasWarned = _react.default.useRef(false);\n if (props.prefetch && !hasWarned.current && !isAppRouter) {\n hasWarned.current = true;\n console.warn(\"Next.js auto-prefetches automatically based on viewport. The prefetch attribute is no longer needed. More: https://nextjs.org/docs/messages/prefetch-true-deprecated\");\n }\n }\n if (true) {\n if (isAppRouter && !asProp) {\n let href;\n if (typeof hrefProp === \"string\") {\n href = hrefProp;\n } else if (typeof hrefProp === \"object\" && typeof hrefProp.pathname === \"string\") {\n href = hrefProp.pathname;\n }\n if (href) {\n const hasDynamicSegment = href.split(\"/\").some((segment)=>segment.startsWith(\"[\") && segment.endsWith(\"]\"));\n if (hasDynamicSegment) {\n throw new Error(\"Dynamic href `\" + href + \"` found in while using the `/app` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href\");\n }\n }\n }\n }\n const { href, as } = _react.default.useMemo(()=>{\n if (!pagesRouter) {\n const resolvedHref = formatStringOrUrl(hrefProp);\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref\n };\n }\n const [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(pagesRouter, hrefProp, true);\n return {\n href: resolvedHref,\n as: asProp ? (0, _resolvehref.resolveHref)(pagesRouter, asProp) : resolvedAs || resolvedHref\n };\n }, [\n pagesRouter,\n hrefProp,\n asProp\n ]);\n const previousHref = _react.default.useRef(href);\n const previousAs = _react.default.useRef(as);\n // This will return the first child, if multiple are provided it will throw an error\n let child;\n if (legacyBehavior) {\n if (true) {\n if (onClick) {\n console.warn('\"onClick\" was passed to with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link');\n }\n if (onMouseEnterProp) {\n console.warn('\"onMouseEnter\" was passed to with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link');\n }\n try {\n child = _react.default.Children.only(children);\n } catch (err) {\n if (!children) {\n throw new Error(\"No children were passed to with `href` of `\" + hrefProp + \"` but one child is required https://nextjs.org/docs/messages/link-no-children\");\n }\n throw new Error(\"Multiple children were passed to with `href` of `\" + hrefProp + \"` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children\" + ( true ? \" \\nOpen your browser's console to view the Component stack trace.\" : 0));\n }\n } else {}\n } else {\n if (true) {\n if ((children == null ? void 0 : children.type) === \"a\") {\n throw new Error(\"Invalid with child. Please remove or use .\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor\");\n }\n }\n }\n const childRef = legacyBehavior ? child && typeof child === \"object\" && child.ref : forwardedRef;\n const [setIntersectionRef, isVisible, resetVisible] = (0, _useintersection.useIntersection)({\n rootMargin: \"200px\"\n });\n const setRef = _react.default.useCallback((el)=>{\n // Before the link getting observed, check if visible state need to be reset\n if (previousAs.current !== as || previousHref.current !== href) {\n resetVisible();\n previousAs.current = as;\n previousHref.current = href;\n }\n setIntersectionRef(el);\n if (childRef) {\n if (typeof childRef === \"function\") childRef(el);\n else if (typeof childRef === \"object\") {\n childRef.current = el;\n }\n }\n }, [\n as,\n childRef,\n href,\n resetVisible,\n setIntersectionRef\n ]);\n // Prefetch the URL if we haven't already and it's visible.\n _react.default.useEffect(()=>{\n // in dev, we only prefetch on hover to avoid wasting resources as the prefetch will trigger compiling the page.\n if (true) {\n return;\n }\n if (!router) {\n return;\n }\n // If we don't need to prefetch the URL, don't do prefetch.\n if (!isVisible || !prefetchEnabled) {\n return;\n }\n // Prefetch the URL.\n prefetch(router, href, as, {\n locale\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n }, [\n as,\n href,\n isVisible,\n locale,\n prefetchEnabled,\n pagesRouter == null ? void 0 : pagesRouter.locale,\n router,\n isAppRouter,\n appPrefetchKind\n ]);\n const childProps = {\n ref: setRef,\n onClick (e) {\n if (true) {\n if (!e) {\n throw new Error('Component rendered inside next/link has to pass click event to \"onClick\" prop.');\n }\n }\n if (!legacyBehavior && typeof onClick === \"function\") {\n onClick(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onClick === \"function\") {\n child.props.onClick(e);\n }\n if (!router) {\n return;\n }\n if (e.defaultPrevented) {\n return;\n }\n linkClicked(e, router, href, as, replace, shallow, scroll, locale, isAppRouter, prefetchEnabled);\n },\n onMouseEnter (e) {\n if (!legacyBehavior && typeof onMouseEnterProp === \"function\") {\n onMouseEnterProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onMouseEnter === \"function\") {\n child.props.onMouseEnter(e);\n }\n if (!router) {\n return;\n }\n if ((!prefetchEnabled || \"development\" === \"development\") && isAppRouter) {\n return;\n }\n prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n },\n onTouchStart (e) {\n if (!legacyBehavior && typeof onTouchStartProp === \"function\") {\n onTouchStartProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onTouchStart === \"function\") {\n child.props.onTouchStart(e);\n }\n if (!router) {\n return;\n }\n if (!prefetchEnabled && isAppRouter) {\n return;\n }\n prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n }\n };\n // If child is an tag and doesn't have a href attribute, or if the 'passHref' property is\n // defined, we specify the current 'href', so that repetition is not needed by the user.\n // If the url is absolute, we can bypass the logic to prepend the domain and locale.\n if ((0, _utils.isAbsoluteUrl)(as)) {\n childProps.href = as;\n } else if (!legacyBehavior || passHref || child.type === \"a\" && !(\"href\" in child.props)) {\n const curLocale = typeof locale !== \"undefined\" ? locale : pagesRouter == null ? void 0 : pagesRouter.locale;\n // we only render domain locales if we are currently on a domain locale\n // so that locale links are still visitable in development/preview envs\n const localeDomain = (pagesRouter == null ? void 0 : pagesRouter.isLocaleDomain) && (0, _getdomainlocale.getDomainLocale)(as, curLocale, pagesRouter == null ? void 0 : pagesRouter.locales, pagesRouter == null ? void 0 : pagesRouter.domainLocales);\n childProps.href = localeDomain || (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, curLocale, pagesRouter == null ? void 0 : pagesRouter.defaultLocale));\n }\n return legacyBehavior ? /*#__PURE__*/ _react.default.cloneElement(child, childProps) : /*#__PURE__*/ _react.default.createElement(\"a\", {\n ...restProps,\n ...childProps\n }, children);\n}, \"wKD5mb5mk47bkaStGb/Fvd6RWZE=\")), \"wKD5mb5mk47bkaStGb/Fvd6RWZE=\");\n_c1 = Link;\nconst _default = Link;\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=link.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"Link$_react.default.forwardRef\");\n$RefreshReg$(_c1, \"Link\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2xpbmsuanMiLCJtYXBwaW5ncyI6InFEQUVhOztBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsU0FBUyxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNRyxlQUFlSCxtQkFBT0EsQ0FBQywyRkFBZ0I7QUFDN0MsTUFBTUksY0FBY0osbUJBQU9BLENBQUMscUlBQXlDO0FBQ3JFLE1BQU1LLGFBQWFMLG1CQUFPQSxDQUFDLGlJQUF1QztBQUNsRSxNQUFNTSxTQUFTTixtQkFBT0EsQ0FBQyw2RkFBcUI7QUFDNUMsTUFBTU8sYUFBYVAsbUJBQU9BLENBQUMsdUZBQWM7QUFDekMsTUFBTVEsOEJBQThCUixtQkFBT0EsQ0FBQyw2SUFBNkM7QUFDekYsTUFBTVMsaUNBQWlDVCxtQkFBT0EsQ0FBQyxxSkFBaUQ7QUFDaEcsTUFBTVUsbUJBQW1CVixtQkFBT0EsQ0FBQyxtR0FBb0I7QUFDckQsTUFBTVcsbUJBQW1CWCxtQkFBT0EsQ0FBQyxxR0FBcUI7QUFDdEQsTUFBTVksZUFBZVosbUJBQU9BLENBQUMsNkZBQWlCO0FBQzlDLE1BQU1hLHNCQUFzQmIsbUJBQU9BLENBQUMsK0pBQWtEO0FBQ3RGLE1BQU1jLGFBQWEsSUFBSUM7QUFDdkIsU0FBU0MsU0FBU0MsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLEVBQUUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFdBQVc7SUFDaEUsSUFBSSxLQUE2QixFQUFFLEVBRWxDO0lBQ0QsZ0pBQWdKO0lBQ2hKLElBQUksQ0FBQ0EsZUFBZSxDQUFDLENBQUMs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UUFBUXFFLE9BQU8sRUFBRSxjQUFjO1FBQUVwRSxPQUFPO0lBQUs7SUFDbkVILE9BQU9zSyxNQUFNLENBQUNwSyxRQUFRcUUsT0FBTyxFQUFFckU7SUFDL0JxSyxPQUFPckssT0FBTyxHQUFHQSxRQUFRcUUsT0FBTztBQUNsQyxFQUVBLGdDQUFnQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9saW5rLmpzP2U0ZjkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcblxyXG5cInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xyXG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XHJcbmNvbnN0IF9yZXNvbHZlaHJlZiA9IHJlcXVpcmUoXCIuL3Jlc29sdmUtaHJlZlwiKTtcclxuY29uc3QgX2lzbG9jYWx1cmwgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsXCIpO1xyXG5jb25zdCBfZm9ybWF0dXJsID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmxcIik7XHJcbmNvbnN0IF91dGlscyA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3V0aWxzXCIpO1xyXG5jb25zdCBfYWRkbG9jYWxlID0gcmVxdWlyZShcIi4vYWRkLWxvY2FsZVwiKTtcclxuY29uc3QgX3JvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XHJcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcclxuY29uc3QgX3VzZWludGVyc2VjdGlvbiA9IHJlcXVpcmUoXCIuL3VzZS1pbnRlcnNlY3Rpb25cIik7XHJcbmNvbnN0IF9nZXRkb21haW5sb2NhbGUgPSByZXF1aXJlKFwiLi9nZXQtZG9tYWluLWxvY2FsZVwiKTtcclxuY29uc3QgX2FkZGJhc2VwYXRoID0gcmVxdWlyZShcIi4vYWRkLWJhc2UtcGF0aFwiKTtcclxuY29uc3QgX3JvdXRlcnJlZHVjZXJ0eXBlcyA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXNcIik7XHJcbmNvbnN0IHByZWZldGNoZWQgPSBuZXcgU2V0KCk7XHJcbmZ1bmN0aW9uIHByZWZldGNoKHJvdXRlciwgaHJlZiwgYXMsIG9wdGlvbnMsIGFwcE9wdGlvbnMsIGlzQXBwUm91dGVyKSB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGFwcC1yb3V0ZXIgc3VwcG9ydHMgZXh0ZXJuYWwgdXJscyBvdXQgb2YgdGhlIGJveCBzbyBpdCBzaG91bGRuJ3Qgc2hvcnQtY2lyY3VpdCBoZXJlIGFzIHN1cHBvcnQgZm9yIGUuZy4gYHJlcGxhY2VgIGlzIGFkZGVkIGluIHRoZSBhcHAtcm91dGVyLlxyXG4gICAgaWYgKCFpc0FwcFJvdXRlciAmJiAhKDAsIF9pc2xvY2FsdXJsLmlzTG9jYWxVUkwpKGhyZWYpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVkdXBlIHJlcXVlc3RzIHdoZW4gZXhwZXJpbWVudGFsLm9wdGltaXN0aWNDbGllbnRDYWNoZSBpc1xyXG4gICAgLy8gZGlzYWJsZWQuXHJcbiAgICBpZiAoIW9wdGlvbnMuYnlwYXNzUHJlZmV0Y2hlZENoZWNrKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxlID0gLy8gTGV0IHRoZSBsaW5rJ3MgbG9jYWxlIHByb3Agb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcm91dGVyIGxvY2FsZS5cclxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5sb2NhbGUgIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLmxvY2FsZSA6IFwibG9jYWxlXCIgaW4gcm91dGVyID8gcm91dGVyLmxvY2FsZSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBwcmVmZXRjaGVkS2V5ID0gaHJlZiArIFwiJVwiICsgYXMgKyBcIiVcIiArIGxvY2FsZTtcclxuICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZldGNoZWQgdGhlIGtleSwgdGhlbiBkb24ndCBwcmVmZXRjaCBpdCBhZ2FpbiFcclxuICAgICAgICBpZiAocHJlZmV0Y2hlZC5oYXMocHJlZmV0Y2hlZEtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXJrIHRoaXMgVVJMIGFzIHByZWZldGNoZWQuXHJcbiAgICAgICAgcHJlZmV0Y2hlZC5hZGQocHJlZmV0Y2hlZEtleSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVmZXRjaFByb21pc2UgPSBpc0FwcFJvdXRlciA/IHJvdXRlci5wcmVmZXRjaChocmVmLCBhcHBPcHRpb25zKSA6IHJvdXRlci5wcmVmZXRjaChocmVmLCBhcywgb3B0aW9ucyk7XHJcbiAgICAvLyBQcmVmZXRjaCB0aGUgSlNPTiBwYWdlIGlmIGFza2VkIChvbmx5IGluIHRoZSBjbGllbnQpXHJcbiAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSBhIHByZWZldGNoIGVycm9yIGhlcmUgc2luY2Ugd2UgbWF5IGJlXHJcbiAgICAvLyBsb2FkaW5nIHdpdGggcHJpb3JpdHkgd2hpY2ggY2FuIHJlamVjdCBidXQgd2UgZG9uJ3RcclxuICAgIC8vIHdhbnQgdG8gZm9yY2UgbmF2aWdhdGlvbiBzaW5jZSB0aGlzIGlzIG9ubHkgYSBwcmVmZXRjaFxyXG4gICAgUHJvbWlzZS5yZXNvbHZlKHByZWZldGNoUHJvbWlzZSkuY2F0Y2goKGVycik9PntcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgIC8vIHJldGhyb3cgdG8gc2hvdyBpbnZhbGlkIFVSTCBlcnJvcnNcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGlzTW9kaWZpZWRFdmVudChldmVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwidGFyZ2V0XCIpO1xyXG4gICAgcmV0dXJuIHRhcmdldCAmJiB0YXJnZXQgIT09IFwiX3NlbGZcIiB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IC8vIHRyaWdnZXJzIHJlc291cmNlIGRvd25sb2FkXHJcbiAgICBldmVudC5uYXRpdmVFdmVudCAmJiBldmVudC5uYXRpdmVFdmVudC53aGljaCA9PT0gMjtcclxufVxyXG5mdW5jdGlvbiBsaW5rQ2xpY2tlZChlLCByb3V0ZXIsIGhyZWYsIGFzLCByZXBsYWNlLCBzaGFsbG93LCBzY3JvbGwsIGxvY2FsZSwgaXNBcHBSb3V0ZXIsIHByZWZldGNoRW5hYmxlZCkge1xyXG4gICAgY29uc3QgeyBub2RlTmFtZSB9ID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gICAgLy8gYW5jaG9ycyBpbnNpZGUgYW4gc3ZnIGhhdmUgYSBsb3dlcmNhc2Ugbm9kZU5hbWVcclxuICAgIGNvbnN0IGlzQW5jaG9yTm9kZU5hbWUgPSBub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIkFcIjtcclxuICAgIGlmIChpc0FuY2hvck5vZGVOYW1lICYmIChpc01vZGlmaWVkRXZlbnQoZSkgfHwgLy8gYXBwLXJvdXRlciBzdXBwb3J0cyBleHRlcm5hbCB1cmxzIG91dCBvZiB0aGUgYm94IHNvIGl0IHNob3VsZG4ndCBzaG9ydC1jaXJjdWl0IGhlcmUgYXMgc3VwcG9ydCBmb3IgZS5nLiBgcmVwbGFjZWAgaXMgYWRkZWQgaW4gdGhlIGFwcC1yb3V0ZXIuXHJcbiAgICAhaXNBcHBSb3V0ZXIgJiYgISgwLCBfaXNsb2NhbHVybC5pc0xvY2FsVVJMKShocmVmKSkpIHtcclxuICAgICAgICAvLyBpZ25vcmUgY2xpY2sgZm9yIGJyb3dzZXLigJlzIGRlZmF1bHQgYmVoYXZpb3JcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBuYXZpZ2F0ZSA9ICgpPT57XHJcbiAgICAgICAgLy8gSWYgdGhlIHJvdXRlciBpcyBhbiBOZXh0Um91dGVyIGluc3RhbmNlIGl0IHdpbGwgaGF2ZSBgYmVmb3JlUG9wU3RhdGVgXHJcbiAgICAgICAgY29uc3Qgcm91dGVyU2Nyb2xsID0gc2Nyb2xsICE9IG51bGwgPyBzY3JvbGwgOiB0cnVlO1xyXG4gICAgICAgIGlmIChcImJlZm9yZVBvcFN0YXRlXCIgaW4gcm91dGVyKSB7XHJcbiAgICAgICAgICAgIHJvdXRlcltyZXBsYWNlID8gXCJyZXBsYWNlXCIgOiBcInB1c2hcIl0oaHJlZiwgYXMsIHtcclxuICAgICAgICAgICAgICAgIHNoYWxsb3csXHJcbiAgICAgICAgICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHJvdXRlclNjcm9sbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByb3V0ZXJbcmVwbGFjZSA/IFwicmVwbGFjZVwiIDogXCJwdXNoXCJdKGFzIHx8IGhyZWYsIHtcclxuICAgICAgICAgICAgICAgIGZvcmNlT3B0aW1pc3RpY05hdmlnYXRpb246ICFwcmVmZXRjaEVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHJvdXRlclNjcm9sbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGlzQXBwUm91dGVyKSB7XHJcbiAgICAgICAgX3JlYWN0LmRlZmF1bHQuc3RhcnRUcmFuc2l0aW9uKG5hdmlnYXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmF2aWdhdGUoKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBmb3JtYXRTdHJpbmdPclVybCh1cmxPYmpPclN0cmluZykge1xyXG4gICAgaWYgKHR5cGVvZiB1cmxPYmpPclN0cmluZyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiB1cmxPYmpPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiAoMCwgX2Zvcm1hdHVybC5mb3JtYXRVcmwpKHVybE9iak9yU3RyaW5nKTtcclxufVxyXG4vKipcclxuICogUmVhY3QgQ29tcG9uZW50IHRoYXQgZW5hYmxlcyBjbGllbnQtc2lkZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIHJvdXRlcy5cclxuICovIGNvbnN0IExpbmsgPSAvKiNfX1BVUkVfXyovIF9yZWFjdC5kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlua0NvbXBvbmVudChwcm9wcywgZm9yd2FyZGVkUmVmKSB7XHJcbiAgICBsZXQgY2hpbGRyZW47XHJcbiAgICBjb25zdCB7IGhyZWY6IGhyZWZQcm9wLCBhczogYXNQcm9wLCBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLCBwcmVmZXRjaDogcHJlZmV0Y2hQcm9wID0gbnVsbCwgcGFzc0hyZWYsIHJlcGxhY2UsIHNoYWxsb3csIHNjcm9sbCwgbG9jYWxlLCBvbkNsaWNrLCBvbk1vdXNlRW50ZXI6IG9uTW91c2VFbnRlclByb3AsIG9uVG91Y2hTdGFydDogb25Ub3VjaFN0YXJ0UHJvcCwgbGVnYWN5QmVoYXZpb3IgPSBmYWxzZSwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcclxuICAgIGNoaWxkcmVuID0gY2hpbGRyZW5Qcm9wO1xyXG4gICAgaWYgKGxlZ2FjeUJlaGF2aW9yICYmICh0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGNoaWxkcmVuID09PSBcIm51bWJlclwiKSkge1xyXG4gICAgICAgIGNoaWxkcmVuID0gLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBudWxsLCBjaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWdlc1JvdXRlciA9IF9yZWFjdC5kZWZhdWx0LnVzZUNvbnRleHQoX3JvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLlJvdXRlckNvbnRleHQpO1xyXG4gICAgY29uc3QgYXBwUm91dGVyID0gX3JlYWN0LmRlZmF1bHQudXNlQ29udGV4dChfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuQXBwUm91dGVyQ29udGV4dCk7XHJcbiAgICBjb25zdCByb3V0ZXIgPSBwYWdlc1JvdXRlciAhPSBudWxsID8gcGFnZXNSb3V0ZXIgOiBhcHBSb3V0ZXI7XHJcbiAgICAvLyBXZSdyZSBpbiB0aGUgYXBwIGRpcmVjdG9yeSBpZiB0aGVyZSBpcyBubyBwYWdlcyByb3V0ZXIuXHJcbiAgICBjb25zdCBpc0FwcFJvdXRlciA9ICFwYWdlc1JvdXRlcjtcclxuICAgIGNvbnN0IHByZWZldGNoRW5hYmxlZCA9IHByZWZldGNoUHJvcCAhPT0gZmFsc2U7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwb3NzaWJsZSBzdGF0ZXMgZm9yIHByZWZldGNoIGFyZTpcclxuICAgICAqIC0gbnVsbDogdGhpcyBpcyB0aGUgZGVmYXVsdCBcImF1dG9cIiBtb2RlLCB3aGVyZSB3ZSB3aWxsIHByZWZldGNoIHBhcnRpYWxseSBpZiB0aGUgbGluayBpcyBpbiB0aGUgdmlld3BvcnRcclxuICAgICAqIC0gdHJ1ZTogd2Ugd2lsbCBwcmVmZXRjaCBpZiB0aGUgbGluayBpcyB2aXNpYmxlIGFuZCBwcmVmZXRjaCB0aGUgZnVsbCBwYWdlLCBub3QganVzdCBwYXJ0aWFsbHlcclxuICAgICAqIC0gZmFsc2U6IHdlIHdpbGwgbm90IHByZWZldGNoIGlmIGluIHRoZSB2aWV3cG9ydCBhdCBhbGxcclxuICAgICAqLyBjb25zdCBhcHBQcmVmZXRjaEtpbmQgPSBwcmVmZXRjaFByb3AgPT09IG51bGwgPyBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5BVVRPIDogX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuRlVMTDtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9wRXJyb3IoYXJncykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFwiRmFpbGVkIHByb3AgdHlwZTogVGhlIHByb3AgYFwiICsgYXJncy5rZXkgKyBcImAgZXhwZWN0cyBhIFwiICsgYXJncy5leHBlY3RlZCArIFwiIGluIGA8TGluaz5gLCBidXQgZ290IGBcIiArIGFyZ3MuYWN0dWFsICsgXCJgIGluc3RlYWQuXCIgKyAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IFwiXFxuT3BlbiB5b3VyIGJyb3dzZXIncyBjb25zb2xlIHRvIHZpZXcgdGhlIENvbXBvbmVudCBzdGFjayB0cmFjZS5cIiA6IFwiXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcclxuICAgICAgICBjb25zdCByZXF1aXJlZFByb3BzR3VhcmQgPSB7XHJcbiAgICAgICAgICAgIGhyZWY6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkUHJvcHMgPSBPYmplY3Qua2V5cyhyZXF1aXJlZFByb3BzR3VhcmQpO1xyXG4gICAgICAgIHJlcXVpcmVkUHJvcHMuZm9yRWFjaCgoa2V5KT0+e1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcImhyZWZcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzW2tleV0gPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHNba2V5XSAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgcHJvcHNba2V5XSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYHN0cmluZ2Agb3IgYG9iamVjdGBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBwcm9wc1trZXldID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgcHJvcHNba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcclxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICAgICAgICAgICAgIGNvbnN0IF8gPSBrZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBUeXBlU2NyaXB0IHRyaWNrIGZvciB0eXBlLWd1YXJkaW5nOlxyXG4gICAgICAgIGNvbnN0IG9wdGlvbmFsUHJvcHNHdWFyZCA9IHtcclxuICAgICAgICAgICAgYXM6IHRydWUsXHJcbiAgICAgICAgICAgIHJlcGxhY2U6IHRydWUsXHJcbiAgICAgICAgICAgIHNjcm9sbDogdHJ1ZSxcclxuICAgICAgICAgICAgc2hhbGxvdzogdHJ1ZSxcclxuICAgICAgICAgICAgcGFzc0hyZWY6IHRydWUsXHJcbiAgICAgICAgICAgIHByZWZldGNoOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NhbGU6IHRydWUsXHJcbiAgICAgICAgICAgIG9uQ2xpY2s6IHRydWUsXHJcbiAgICAgICAgICAgIG9uTW91c2VFbnRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OiB0cnVlLFxyXG4gICAgICAgICAgICBsZWdhY3lCZWhhdmlvcjogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uYWxQcm9wcyA9IE9iamVjdC5rZXlzKG9wdGlvbmFsUHJvcHNHdWFyZCk7XHJcbiAgICAgICAgb3B0aW9uYWxQcm9wcy5mb3JFYWNoKChrZXkpPT57XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbFR5cGUgPSB0eXBlb2YgcHJvcHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJhc1wiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcHNba2V5XSAmJiB2YWxUeXBlICE9PSBcInN0cmluZ1wiICYmIHZhbFR5cGUgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVQcm9wRXJyb3Ioe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImBzdHJpbmdgIG9yIGBvYmplY3RgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdmFsVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJsb2NhbGVcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzW2tleV0gJiYgdmFsVHlwZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYHN0cmluZ2BcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiB2YWxUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIm9uQ2xpY2tcIiB8fCBrZXkgPT09IFwib25Nb3VzZUVudGVyXCIgfHwga2V5ID09PSBcIm9uVG91Y2hTdGFydFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcHNba2V5XSAmJiB2YWxUeXBlICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVQcm9wRXJyb3Ioe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImBmdW5jdGlvbmBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiB2YWxUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInJlcGxhY2VcIiB8fCBrZXkgPT09IFwic2Nyb2xsXCIgfHwga2V5ID09PSBcInNoYWxsb3dcIiB8fCBrZXkgPT09IFwicGFzc0hyZWZcIiB8fCBrZXkgPT09IFwicHJlZmV0Y2hcIiB8fCBrZXkgPT09IFwibGVnYWN5QmVoYXZpb3JcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzW2tleV0gIT0gbnVsbCAmJiB2YWxUeXBlICE9PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYGJvb2xlYW5gXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdmFsVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcclxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICAgICAgICAgICAgIGNvbnN0IF8gPSBrZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBUaGlzIGhvb2sgaXMgaW4gYSBjb25kaXRpb25hbCBidXQgdGhhdCBpcyBvayBiZWNhdXNlIGBwcm9jZXNzLmVudi5OT0RFX0VOVmAgbmV2ZXIgY2hhbmdlc1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xyXG4gICAgICAgIGNvbnN0IGhhc1dhcm5lZCA9IF9yZWFjdC5kZWZhdWx0LnVzZVJlZihmYWxzZSk7XHJcbiAgICAgICAgaWYgKHByb3BzLnByZWZldGNoICYmICFoYXNXYXJuZWQuY3VycmVudCAmJiAhaXNBcHBSb3V0ZXIpIHtcclxuICAgICAgICAgICAgaGFzV2FybmVkLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJOZXh0LmpzIGF1dG8tcHJlZmV0Y2hlcyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHZpZXdwb3J0LiBUaGUgcHJlZmV0Y2ggYXR0cmlidXRlIGlzIG5vIGxvbmdlciBuZWVkZWQuIE1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3ByZWZldGNoLXRydWUtZGVwcmVjYXRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKGlzQXBwUm91dGVyICYmICFhc1Byb3ApIHtcclxuICAgICAgICAgICAgbGV0IGhyZWY7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaHJlZlByb3AgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGhyZWYgPSBocmVmUHJvcDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaHJlZlByb3AgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGhyZWZQcm9wLnBhdGhuYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICBocmVmID0gaHJlZlByb3AucGF0aG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGhyZWYpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0R5bmFtaWNTZWdtZW50ID0gaHJlZi5zcGxpdChcIi9cIikuc29tZSgoc2VnbWVudCk9PnNlZ21lbnQuc3RhcnRzV2l0aChcIltcIikgJiYgc2VnbWVudC5lbmRzV2l0aChcIl1cIikpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0R5bmFtaWNTZWdtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyBocmVmIGBcIiArIGhyZWYgKyBcImAgZm91bmQgaW4gPExpbms+IHdoaWxlIHVzaW5nIHRoZSBgL2FwcGAgcm91dGVyLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvYXBwLWRpci1keW5hbWljLWhyZWZcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGhyZWYsIGFzIH0gPSBfcmVhY3QuZGVmYXVsdC51c2VNZW1vKCgpPT57XHJcbiAgICAgICAgaWYgKCFwYWdlc1JvdXRlcikge1xyXG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZEhyZWYgPSBmb3JtYXRTdHJpbmdPclVybChocmVmUHJvcCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBocmVmOiByZXNvbHZlZEhyZWYsXHJcbiAgICAgICAgICAgICAgICBhczogYXNQcm9wID8gZm9ybWF0U3RyaW5nT3JVcmwoYXNQcm9wKSA6IHJlc29sdmVkSHJlZlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBbcmVzb2x2ZWRIcmVmLCByZXNvbHZlZEFzXSA9ICgwLCBfcmVzb2x2ZWhyZWYucmVzb2x2ZUhyZWYpKHBhZ2VzUm91dGVyLCBocmVmUHJvcCwgdHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaHJlZjogcmVzb2x2ZWRIcmVmLFxyXG4gICAgICAgICAgICBhczogYXNQcm9wID8gKDAsIF9yZXNvbHZlaHJlZi5yZXNvbHZlSHJlZikocGFnZXNSb3V0ZXIsIGFzUHJvcCkgOiByZXNvbHZlZEFzIHx8IHJlc29sdmVkSHJlZlxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXHJcbiAgICAgICAgcGFnZXNSb3V0ZXIsXHJcbiAgICAgICAgaHJlZlByb3AsXHJcbiAgICAgICAgYXNQcm9wXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHByZXZpb3VzSHJlZiA9IF9yZWFjdC5kZWZhdWx0LnVzZVJlZihocmVmKTtcclxuICAgIGNvbnN0IHByZXZpb3VzQXMgPSBfcmVhY3QuZGVmYXVsdC51c2VSZWYoYXMpO1xyXG4gICAgLy8gVGhpcyB3aWxsIHJldHVybiB0aGUgZmlyc3QgY2hpbGQsIGlmIG11bHRpcGxlIGFyZSBwcm92aWRlZCBpdCB3aWxsIHRocm93IGFuIGVycm9yXHJcbiAgICBsZXQgY2hpbGQ7XHJcbiAgICBpZiAobGVnYWN5QmVoYXZpb3IpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xyXG4gICAgICAgICAgICBpZiAob25DbGljaykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdcIm9uQ2xpY2tcIiB3YXMgcGFzc2VkIHRvIDxMaW5rPiB3aXRoIGBocmVmYCBvZiBgJyArIGhyZWZQcm9wICsgJ2AgYnV0IFwibGVnYWN5QmVoYXZpb3JcIiB3YXMgc2V0LiBUaGUgbGVnYWN5IGJlaGF2aW9yIHJlcXVpcmVzIG9uQ2xpY2sgYmUgc2V0IG9uIHRoZSBjaGlsZCBvZiBuZXh0L2xpbmsnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob25Nb3VzZUVudGVyUHJvcCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdcIm9uTW91c2VFbnRlclwiIHdhcyBwYXNzZWQgdG8gPExpbms+IHdpdGggYGhyZWZgIG9mIGAnICsgaHJlZlByb3AgKyAnYCBidXQgXCJsZWdhY3lCZWhhdmlvclwiIHdhcyBzZXQuIFRoZSBsZWdhY3kgYmVoYXZpb3IgcmVxdWlyZXMgb25Nb3VzZUVudGVyIGJlIHNldCBvbiB0aGUgY2hpbGQgb2YgbmV4dC9saW5rJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNoaWxkID0gX3JlYWN0LmRlZmF1bHQuQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNoaWxkcmVuIHdlcmUgcGFzc2VkIHRvIDxMaW5rPiB3aXRoIGBocmVmYCBvZiBgXCIgKyBocmVmUHJvcCArIFwiYCBidXQgb25lIGNoaWxkIGlzIHJlcXVpcmVkIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2xpbmstbm8tY2hpbGRyZW5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdWx0aXBsZSBjaGlsZHJlbiB3ZXJlIHBhc3NlZCB0byA8TGluaz4gd2l0aCBgaHJlZmAgb2YgYFwiICsgaHJlZlByb3AgKyBcImAgYnV0IG9ubHkgb25lIGNoaWxkIGlzIHN1cHBvcnRlZCBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9saW5rLW11bHRpcGxlLWNoaWxkcmVuXCIgKyAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IFwiIFxcbk9wZW4geW91ciBicm93c2VyJ3MgY29uc29sZSB0byB2aWV3IHRoZSBDb21wb25lbnQgc3RhY2sgdHJhY2UuXCIgOiBcIlwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjaGlsZCA9IF9yZWFjdC5kZWZhdWx0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcclxuICAgICAgICAgICAgaWYgKChjaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2hpbGRyZW4udHlwZSkgPT09IFwiYVwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIDxMaW5rPiB3aXRoIDxhPiBjaGlsZC4gUGxlYXNlIHJlbW92ZSA8YT4gb3IgdXNlIDxMaW5rIGxlZ2FjeUJlaGF2aW9yPi5cXG5MZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9pbnZhbGlkLW5ldy1saW5rLXdpdGgtZXh0cmEtYW5jaG9yXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgY2hpbGRSZWYgPSBsZWdhY3lCZWhhdmlvciA/IGNoaWxkICYmIHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIiAmJiBjaGlsZC5yZWYgOiBmb3J3YXJkZWRSZWY7XHJcbiAgICBjb25zdCBbc2V0SW50ZXJzZWN0aW9uUmVmLCBpc1Zpc2libGUsIHJlc2V0VmlzaWJsZV0gPSAoMCwgX3VzZWludGVyc2VjdGlvbi51c2VJbnRlcnNlY3Rpb24pKHtcclxuICAgICAgICByb290TWFyZ2luOiBcIjIwMHB4XCJcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2V0UmVmID0gX3JlYWN0LmRlZmF1bHQudXNlQ2FsbGJhY2soKGVsKT0+e1xyXG4gICAgICAgIC8vIEJlZm9yZSB0aGUgbGluayBnZXR0aW5nIG9ic2VydmVkLCBjaGVjayBpZiB2aXNpYmxlIHN0YXRlIG5lZWQgdG8gYmUgcmVzZXRcclxuICAgICAgICBpZiAocHJldmlvdXNBcy5jdXJyZW50ICE9PSBhcyB8fCBwcmV2aW91c0hyZWYuY3VycmVudCAhPT0gaHJlZikge1xyXG4gICAgICAgICAgICByZXNldFZpc2libGUoKTtcclxuICAgICAgICAgICAgcHJldmlvdXNBcy5jdXJyZW50ID0gYXM7XHJcbiAgICAgICAgICAgIHByZXZpb3VzSHJlZi5jdXJyZW50ID0gaHJlZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SW50ZXJzZWN0aW9uUmVmKGVsKTtcclxuICAgICAgICBpZiAoY2hpbGRSZWYpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZFJlZiA9PT0gXCJmdW5jdGlvblwiKSBjaGlsZFJlZihlbCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaGlsZFJlZiA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRSZWYuY3VycmVudCA9IGVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGFzLFxyXG4gICAgICAgIGNoaWxkUmVmLFxyXG4gICAgICAgIGhyZWYsXHJcbiAgICAgICAgcmVzZXRWaXNpYmxlLFxyXG4gICAgICAgIHNldEludGVyc2VjdGlvblJlZlxyXG4gICAgXSk7XHJcbiAgICAvLyBQcmVmZXRjaCB0aGUgVVJMIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBhbmQgaXQncyB2aXNpYmxlLlxyXG4gICAgX3JlYWN0LmRlZmF1bHQudXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgLy8gaW4gZGV2LCB3ZSBvbmx5IHByZWZldGNoIG9uIGhvdmVyIHRvIGF2b2lkIHdhc3RpbmcgcmVzb3VyY2VzIGFzIHRoZSBwcmVmZXRjaCB3aWxsIHRyaWdnZXIgY29tcGlsaW5nIHRoZSBwYWdlLlxyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJvdXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgdG8gcHJlZmV0Y2ggdGhlIFVSTCwgZG9uJ3QgZG8gcHJlZmV0Y2guXHJcbiAgICAgICAgaWYgKCFpc1Zpc2libGUgfHwgIXByZWZldGNoRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFByZWZldGNoIHRoZSBVUkwuXHJcbiAgICAgICAgcHJlZmV0Y2gocm91dGVyLCBocmVmLCBhcywge1xyXG4gICAgICAgICAgICBsb2NhbGVcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIGtpbmQ6IGFwcFByZWZldGNoS2luZFxyXG4gICAgICAgIH0sIGlzQXBwUm91dGVyKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhcyxcclxuICAgICAgICBocmVmLFxyXG4gICAgICAgIGlzVmlzaWJsZSxcclxuICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgcHJlZmV0Y2hFbmFibGVkLFxyXG4gICAgICAgIHBhZ2VzUm91dGVyID09IG51bGwgPyB2b2lkIDAgOiBwYWdlc1JvdXRlci5sb2NhbGUsXHJcbiAgICAgICAgcm91dGVyLFxyXG4gICAgICAgIGlzQXBwUm91dGVyLFxyXG4gICAgICAgIGFwcFByZWZldGNoS2luZFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBjaGlsZFByb3BzID0ge1xyXG4gICAgICAgIHJlZjogc2V0UmVmLFxyXG4gICAgICAgIG9uQ2xpY2sgKGUpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgcmVuZGVyZWQgaW5zaWRlIG5leHQvbGluayBoYXMgdG8gcGFzcyBjbGljayBldmVudCB0byBcIm9uQ2xpY2tcIiBwcm9wLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghbGVnYWN5QmVoYXZpb3IgJiYgdHlwZW9mIG9uQ2xpY2sgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgb25DbGljayhlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobGVnYWN5QmVoYXZpb3IgJiYgY2hpbGQucHJvcHMgJiYgdHlwZW9mIGNoaWxkLnByb3BzLm9uQ2xpY2sgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQucHJvcHMub25DbGljayhlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXJvdXRlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaW5rQ2xpY2tlZChlLCByb3V0ZXIsIGhyZWYsIGFzLCByZXBsYWNlLCBzaGFsbG93LCBzY3JvbGwsIGxvY2FsZSwgaXNBcHBSb3V0ZXIsIHByZWZldGNoRW5hYmxlZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbk1vdXNlRW50ZXIgKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFsZWdhY3lCZWhhdmlvciAmJiB0eXBlb2Ygb25Nb3VzZUVudGVyUHJvcCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXJQcm9wKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChsZWdhY3lCZWhhdmlvciAmJiBjaGlsZC5wcm9wcyAmJiB0eXBlb2YgY2hpbGQucHJvcHMub25Nb3VzZUVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnByb3BzLm9uTW91c2VFbnRlcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXJvdXRlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgoIXByZWZldGNoRW5hYmxlZCB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSAmJiBpc0FwcFJvdXRlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZWZldGNoKHJvdXRlciwgaHJlZiwgYXMsIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsZSxcclxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgLy8gQHNlZSB7aHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2Rpc2N1c3Npb25zLzQwMjY4P3NvcnQ9dG9wI2Rpc2N1c3Npb25jb21tZW50LTM1NzI2NDJ9XHJcbiAgICAgICAgICAgICAgICBieXBhc3NQcmVmZXRjaGVkQ2hlY2s6IHRydWVcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2luZDogYXBwUHJlZmV0Y2hLaW5kXHJcbiAgICAgICAgICAgIH0sIGlzQXBwUm91dGVyKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uVG91Y2hTdGFydCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIWxlZ2FjeUJlaGF2aW9yICYmIHR5cGVvZiBvblRvdWNoU3RhcnRQcm9wID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIG9uVG91Y2hTdGFydFByb3AoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGxlZ2FjeUJlaGF2aW9yICYmIGNoaWxkLnByb3BzICYmIHR5cGVvZiBjaGlsZC5wcm9wcy5vblRvdWNoU3RhcnQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQucHJvcHMub25Ub3VjaFN0YXJ0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcm91dGVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwcmVmZXRjaEVuYWJsZWQgJiYgaXNBcHBSb3V0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmVmZXRjaChyb3V0ZXIsIGhyZWYsIGFzLCB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIEBzZWUge2h0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9kaXNjdXNzaW9ucy80MDI2OD9zb3J0PXRvcCNkaXNjdXNzaW9uY29tbWVudC0zNTcyNjQyfVxyXG4gICAgICAgICAgICAgICAgYnlwYXNzUHJlZmV0Y2hlZENoZWNrOiB0cnVlXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtpbmQ6IGFwcFByZWZldGNoS2luZFxyXG4gICAgICAgICAgICB9LCBpc0FwcFJvdXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIElmIGNoaWxkIGlzIGFuIDxhPiB0YWcgYW5kIGRvZXNuJ3QgaGF2ZSBhIGhyZWYgYXR0cmlidXRlLCBvciBpZiB0aGUgJ3Bhc3NIcmVmJyBwcm9wZXJ0eSBpc1xyXG4gICAgLy8gZGVmaW5lZCwgd2Ugc3BlY2lmeSB0aGUgY3VycmVudCAnaHJlZicsIHNvIHRoYXQgcmVwZXRpdGlvbiBpcyBub3QgbmVlZGVkIGJ5IHRoZSB1c2VyLlxyXG4gICAgLy8gSWYgdGhlIHVybCBpcyBhYnNvbHV0ZSwgd2UgY2FuIGJ5cGFzcyB0aGUgbG9naWMgdG8gcHJlcGVuZCB0aGUgZG9tYWluIGFuZCBsb2NhbGUuXHJcbiAgICBpZiAoKDAsIF91dGlscy5pc0Fic29sdXRlVXJsKShhcykpIHtcclxuICAgICAgICBjaGlsZFByb3BzLmhyZWYgPSBhcztcclxuICAgIH0gZWxzZSBpZiAoIWxlZ2FjeUJlaGF2aW9yIHx8IHBhc3NIcmVmIHx8IGNoaWxkLnR5cGUgPT09IFwiYVwiICYmICEoXCJocmVmXCIgaW4gY2hpbGQucHJvcHMpKSB7XHJcbiAgICAgICAgY29uc3QgY3VyTG9jYWxlID0gdHlwZW9mIGxvY2FsZSAhPT0gXCJ1bmRlZmluZWRcIiA/IGxvY2FsZSA6IHBhZ2VzUm91dGVyID09IG51bGwgPyB2b2lkIDAgOiBwYWdlc1JvdXRlci5sb2NhbGU7XHJcbiAgICAgICAgLy8gd2Ugb25seSByZW5kZXIgZG9tYWluIGxvY2FsZXMgaWYgd2UgYXJlIGN1cnJlbnRseSBvbiBhIGRvbWFpbiBsb2NhbGVcclxuICAgICAgICAvLyBzbyB0aGF0IGxvY2FsZSBsaW5rcyBhcmUgc3RpbGwgdmlzaXRhYmxlIGluIGRldmVsb3BtZW50L3ByZXZpZXcgZW52c1xyXG4gICAgICAgIGNvbnN0IGxvY2FsZURvbWFpbiA9IChwYWdlc1JvdXRlciA9PSBudWxsID8gdm9pZCAwIDogcGFnZXNSb3V0ZXIuaXNMb2NhbGVEb21haW4pICYmICgwLCBfZ2V0ZG9tYWlubG9jYWxlLmdldERvbWFpbkxvY2FsZSkoYXMsIGN1ckxvY2FsZSwgcGFnZXNSb3V0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IHBhZ2VzUm91dGVyLmxvY2FsZXMsIHBhZ2VzUm91dGVyID09IG51bGwgPyB2b2lkIDAgOiBwYWdlc1JvdXRlci5kb21haW5Mb2NhbGVzKTtcclxuICAgICAgICBjaGlsZFByb3BzLmhyZWYgPSBsb2NhbGVEb21haW4gfHwgKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShhcywgY3VyTG9jYWxlLCBwYWdlc1JvdXRlciA9PSBudWxsID8gdm9pZCAwIDogcGFnZXNSb3V0ZXIuZGVmYXVsdExvY2FsZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ2FjeUJlaGF2aW9yID8gLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jbG9uZUVsZW1lbnQoY2hpbGQsIGNoaWxkUHJvcHMpIDogLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7XHJcbiAgICAgICAgLi4ucmVzdFByb3BzLFxyXG4gICAgICAgIC4uLmNoaWxkUHJvcHNcclxuICAgIH0sIGNoaWxkcmVuKTtcclxufSk7XHJcbmNvbnN0IF9kZWZhdWx0ID0gTGluaztcclxuXHJcbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XHJcbn1cclxuXHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbmsuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIl9kZWZhdWx0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdCIsIl8iLCJfcmVzb2x2ZWhyZWYiLCJfaXNsb2NhbHVybCIsIl9mb3JtYXR1cmwiLCJfdXRpbHMiLCJfYWRkbG9jYWxlIiwiX3JvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX3VzZWludGVyc2VjdGlvbiIsIl9nZXRkb21haW5sb2NhbGUiLCJfYWRkYmFzZXBhdGgiLCJfcm91dGVycmVkdWNlcnR5cGVzIiwicHJlZmV0Y2hlZCIsIlNldCIsInByZWZldGNoIiwicm91dGVyIiwiaHJlZiIsImFzIiwib3B0aW9ucyIsImFwcE9wdGlvbnMiLCJpc0FwcFJvdXRlciIsImlzTG9jYWxVUkwiLCJieXBhc3NQcmVmZXRjaGVkQ2hlY2siLCJsb2NhbGUiLCJ1bmRlZmluZWQiLCJwcmVmZXRjaGVkS2V5IiwiaGFzIiwiYWRkIiwicHJlZmV0Y2hQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYXRjaCIsImVyciIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImlzTW9kaWZpZWRFdmVudCIsImV2ZW50IiwiZXZlbnRUYXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwiZ2V0QXR0cmlidXRlIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsImFsdEtleSIsIm5hdGl2ZUV2ZW50Iiwid2hpY2giLCJsaW5rQ2xpY2tlZCIsImUiLCJyZXBsYWNlIiwic2hhbGxvdyIsInNjcm9sbCIsInByZWZldGNoRW5hYmxlZCIsIm5vZGVOYW1lIiwiaXNBbmNob3JOb2RlTmFtZSIsInRvVXBwZXJDYXNlIiwicHJldmVudERlZmF1bHQiLCJuYXZpZ2F0ZSIsInJvdXRlclNjcm9sbCIsImZvcmNlT3B0aW1pc3RpY05hdmlnYXRpb24iLCJkZWZhdWx0Iiwic3RhcnRUcmFuc2l0aW9uIiwiZm9ybWF0U3RyaW5nT3JVcmwiLCJ1cmxPYmpPclN0cmluZyIsImZvcm1hdFVybCIsIkxpbmsiLCJmb3J3YXJkUmVmIiwiTGlua0NvbXBvbmVudCIsInByb3BzIiwiZm9yd2FyZGVkUmVmIiwiY2hpbGRyZW4iLCJocmVmUHJvcCIsImFzUHJvcCIsImNoaWxkcmVuUHJvcCIsInByZWZldGNoUHJvcCIsInBhc3NIcmVmIiwib25DbGljayIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VFbnRlclByb3AiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoU3RhcnRQcm9wIiwibGVnYWN5QmVoYXZpb3IiLCJyZXN0UHJvcHMiLCJjcmVhdGVFbGVtZW50IiwicGFnZXNSb3V0ZXIiLCJ1c2VDb250ZXh0IiwiUm91dGVyQ29udGV4dCIsImFwcFJvdXRlciIsIkFwcFJvdXRlckNvbnRleHQiLCJhcHBQcmVmZXRjaEtpbmQiLCJQcmVmZXRjaEtpbmQiLCJBVVRPIiwiRlVMTCIsImNyZWF0ZVByb3BFcnJvciIsImFyZ3MiLCJFcnJvciIsImtleSIsImV4cGVjdGVkIiwiYWN0dWFsIiwicmVxdWlyZWRQcm9wc0d1YXJkIiwicmVxdWlyZWRQcm9wcyIsImtleXMiLCJmb3JFYWNoIiwib3B0aW9uYWxQcm9wc0d1YXJkIiwib3B0aW9uYWxQcm9wcyIsInZhbFR5cGUiLCJoYXNXYXJuZWQiLCJ1c2VSZWYiLCJjdXJyZW50IiwiY29uc29sZSIsIndhcm4iLCJwYXRobmFtZSIsImhhc0R5bmFtaWNTZWdtZW50Iiwic3BsaXQiLCJzb21lIiwic2VnbWVudCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInVzZU1lbW8iLCJyZXNvbHZlZEhyZWYiLCJyZXNvbHZlZEFzIiwicmVzb2x2ZUhyZWYiLCJwcmV2aW91c0hyZWYiLCJwcmV2aW91c0FzIiwiY2hpbGQiLCJDaGlsZHJlbiIsIm9ubHkiLCJ0eXBlIiwiY2hpbGRSZWYiLCJyZWYiLCJzZXRJbnRlcnNlY3Rpb25SZWYiLCJpc1Zpc2libGUiLCJyZXNldFZpc2libGUiLCJ1c2VJbnRlcnNlY3Rpb24iLCJyb290TWFyZ2luIiwic2V0UmVmIiwidXNlQ2FsbGJhY2siLCJlbCIsInVzZUVmZmVjdCIsImtpbmQiLCJjaGlsZFByb3BzIiwiZGVmYXVsdFByZXZlbnRlZCIsInByaW9yaXR5IiwiaXNBYnNvbHV0ZVVybCIsImN1ckxvY2FsZSIsImxvY2FsZURvbWFpbiIsImlzTG9jYWxlRG9tYWluIiwiZ2V0RG9tYWluTG9jYWxlIiwibG9jYWxlcyIsImRvbWFpbkxvY2FsZXMiLCJhZGRCYXNlUGF0aCIsImFkZExvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJjbG9uZUVsZW1lbnQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/link.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js": /*!****************************************************************!*\ !*** ./node_modules/next/dist/client/request-idle-callback.js ***! \****************************************************************/ /***/ (function(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 requestIdleCallback: function() {\n return requestIdleCallback;\n },\n cancelIdleCallback: function() {\n return cancelIdleCallback;\n }\n});\nconst requestIdleCallback = typeof self !== \"undefined\" && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n let start = Date.now();\n return self.setTimeout(function() {\n cb({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nconst cancelIdleCallback = typeof self !== \"undefined\" && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n return clearTimeout(id);\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=request-idle-callback.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcscUJBQXFCO1FBQ2pCLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1ELHNCQUFzQixPQUFPUSxTQUFTLGVBQWVBLEtBQUtSLG1CQUFtQixJQUFJUSxLQUFLUixtQkFBbUIsQ0FBQ1MsSUFBSSxDQUFDQyxXQUFXLFNBQVNDLEVBQUU7SUFDdkksSUFBSUMsUUFBUUMsS0FBS0MsR0FBRztJQUNwQixPQUFPTixLQUFLTyxVQUFVLENBQUM7UUFDbkJKLEdBQUc7WUFDQ0ssWUFBWTtZQUNaQyxlQUFlO2dCQUNYLE9BQU9DLEtBQUtDLEdBQUcsQ0FBQyxHQUFHLEtBQU1OLENBQUFBLEtBQUtDLEdBQUcsS0FBS0YsS0FBSTtZQUM5QztRQUNKO0lBQ0osR0FBRztBQUNQO0FBQ0EsTUFBTVgscUJBQXFCLE9BQU9PLFNBQVMsZUFBZUEsS0FBS1Asa0JBQWtCLElBQUlPLEtBQUtQLGtCQUFrQixDQUFDUSxJQUFJLENBQUNDLFdBQVcsU0FBU1UsRUFBRTtJQUNwSSxPQUFPQyxhQUFhRDtBQUN4QjtBQUVBLElBQUksQ0FBQyxPQUFPdkIsUUFBUXlCLE9BQU8sS0FBSyxjQUFlLE9BQU96QixRQUFReUIsT0FBTyxLQUFLLFlBQVl6QixRQUFReUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPekIsUUFBUXlCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks1QixPQUFPQyxjQUFjLENBQUNDLFFBQVF5QixPQUFPLEVBQUUsY0FBYztRQUFFeEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPNkIsTUFBTSxDQUFDM0IsUUFBUXlCLE9BQU8sRUFBRXpCO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVF5QixPQUFPO0FBQ2xDLEVBRUEsaURBQWlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay5qcz8xZTIwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcclxuICAgIHZhbHVlOiB0cnVlXHJcbn0pO1xyXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2s6IG51bGwsXHJcbiAgICBjYW5jZWxJZGxlQ2FsbGJhY2s6IG51bGxcclxufSk7XHJcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcclxuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cclxuICAgIH0pO1xyXG59XHJcbl9leHBvcnQoZXhwb3J0cywge1xyXG4gICAgcmVxdWVzdElkbGVDYWxsYmFjazogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RJZGxlQ2FsbGJhY2s7XHJcbiAgICB9LFxyXG4gICAgY2FuY2VsSWRsZUNhbGxiYWNrOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY2FuY2VsSWRsZUNhbGxiYWNrO1xyXG4gICAgfVxyXG59KTtcclxuY29uc3QgcmVxdWVzdElkbGVDYWxsYmFjayA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYucmVxdWVzdElkbGVDYWxsYmFjayAmJiBzZWxmLnJlcXVlc3RJZGxlQ2FsbGJhY2suYmluZCh3aW5kb3cpIHx8IGZ1bmN0aW9uKGNiKSB7XHJcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgcmV0dXJuIHNlbGYuc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICBjYih7XHJcbiAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB0aW1lUmVtYWluaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCA1MCAtIChEYXRlLm5vdygpIC0gc3RhcnQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgMSk7XHJcbn07XHJcbmNvbnN0IGNhbmNlbElkbGVDYWxsYmFjayA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2FuY2VsSWRsZUNhbGxiYWNrICYmIHNlbGYuY2FuY2VsSWRsZUNhbGxiYWNrLmJpbmQod2luZG93KSB8fCBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIGNsZWFyVGltZW91dChpZCk7XHJcbn07XHJcblxyXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XHJcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xyXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xyXG59XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1ZXN0LWlkbGUtY2FsbGJhY2suanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwicmVxdWVzdElkbGVDYWxsYmFjayIsImNhbmNlbElkbGVDYWxsYmFjayIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsInNlbGYiLCJiaW5kIiwid2luZG93IiwiY2IiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJzZXRUaW1lb3V0IiwiZGlkVGltZW91dCIsInRpbWVSZW1haW5pbmciLCJNYXRoIiwibWF4IiwiaWQiLCJjbGVhclRpbWVvdXQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js": /*!*******************************************************!*\ !*** ./node_modules/next/dist/client/resolve-href.js ***! \*******************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n enumerable: true,\n get: function() {\n return resolveHref;\n }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nfunction resolveHref(router, href, resolveAs) {\n // we use a dummy base url for relative urls\n let base;\n let urlAsString = typeof href === \"string\" ? href : (0, _formaturl.formatWithValidation)(href);\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\\/\\//);\n const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n const urlParts = urlAsStringNoProto.split(\"?\");\n if ((urlParts[0] || \"\").match(/(\\/\\/|\\\\)/)) {\n console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : \"\") + normalizedUrl;\n }\n // Return because it cannot be routed by the Next.js router\n if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n try {\n base = new URL(urlAsString.startsWith(\"#\") ? router.asPath : router.pathname, \"http://n\");\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL(\"/\", \"http://n\");\n }\n try {\n const finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n let interpolatedAs = \"\";\n if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n if (result) {\n interpolatedAs = (0, _formaturl.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: (0, _omit.omit)(query, params)\n });\n }\n }\n // if the origin didn't change, it means we received a relative href\n const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [\n resolvedHref,\n interpolatedAs || resolvedHref\n ] : resolvedHref;\n } catch (_) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\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=resolve-href.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3Jlc29sdmUtaHJlZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsK0NBQThDO0lBQzFDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsZUFBZUMsbUJBQU9BLENBQUMsbUlBQXdDO0FBQ3JFLE1BQU1DLGFBQWFELG1CQUFPQSxDQUFDLGlJQUF1QztBQUNsRSxNQUFNRSxRQUFRRixtQkFBT0EsQ0FBQyxxSEFBaUM7QUFDdkQsTUFBTUcsU0FBU0gsbUJBQU9BLENBQUMsNkZBQXFCO0FBQzVDLE1BQU1JLDBCQUEwQkosbUJBQU9BLENBQUMsbUhBQTRCO0FBQ3BFLE1BQU1LLGNBQWNMLG1CQUFPQSxDQUFDLHFJQUF5QztBQUNyRSxNQUFNTSxVQUFVTixtQkFBT0EsQ0FBQyxpSEFBNEI7QUFDcEQsTUFBTU8saUJBQWlCUCxtQkFBT0EsQ0FBQyx5SUFBMkM7QUFDMUUsU0FBU0YsWUFBWVUsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFNBQVM7SUFDeEMsNENBQTRDO0lBQzVDLElBQUlDO0lBQ0osSUFBSUMsY0FBYyxPQUFPSCxTQUFTLFdBQVdBLE9BQU8sQ0FBQyxHQUFHUixXQUFXWSxvQkFBb0IsRUFBRUo7SUFDekYsNkRBQTZEO0lBQzdELG1EQUFtRDtJQUNuRCxNQUFNSyxnQkFBZ0JGLFlBQVlHLEtBQUssQ0FBQztJQUN4QyxNQUFNQyxxQkFBcUJGLGdCQUFnQkYsWUFBWUssS0FBSyxDQUFDSCxhQUFhLENBQUMsRUFBRSxDQUFDSSxNQUFNLElBQUlOO0lBQ3hGLE1BQU1PLFdBQVdILG1CQUFtQkksS0FBSyxDQUFDO0lBQzFDLElBQUksQ0FBQ0QsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFDLEVBQUdKLEtBQUssQ0FBQyxjQUFjO1FBQ3hDTSxRQUFRQyxLQUFLLENBQUMsbUJBQW1CVixjQUFjLHVDQUF1Q0osT0FBT2UsUUFBUSxHQUFHO1FBQ3hHLE1BQU1DLGdCQUFnQixDQUFDLEdBQUdyQixPQUFPc0Isd0JBQXdCLEVBQUVUO1FBQzNESixjQUFjLENBQUNFLGdCQUFnQkEsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFDLElBQUtVO0lBQzVEO0lBQ0EsMkRBQTJEO0lBQzNELElBQUksQ0FBQyxDQUFDLEdBQUduQixZQUFZcUIsVUFBVSxFQUFFZCxjQUFjO1FBQzNDLE9BQU9GLFlBQVk7WUFDZkU7U0FDSCxHQUFHQTtJQUNSO0lBQ0EsSUFBSTtRQUNBRCxPQUFPLElBQUlnQixJQUFJZixZQUFZZ0IsVUFBVSxDQUFDLE9BQU9wQixPQUFPcUIsTUFBTSxHQUFHckIsT0FBT2UsUUFBUSxFQUFFO0lBQ2xGLEVBQUUsT0FBT08sR0FBRztRQUNSLGtEQUFrRDtRQUNsRG5CLE9BQU8sSUFBSWdCLElBQUksS0FBSztJQUN4QjtJQUNBLElBQUk7UUFDQSxNQUFNSSxXQUFXLElBQUlKLElBQUlmLGFBQWFEO1FBQ3RDb0IsU0FBU1IsUUFBUSxHQUFHLENBQUMsR0FBR25CLHdCQUF3QjRCLDBCQUEwQixFQUFFRCxTQUFTUixRQUFRO1FBQzdGLElBQUlVLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsR0FBRzNCLFFBQVE0QixjQUFjLEVBQUVILFNBQVNSLFFBQVEsS0FBS1EsU0FBU0ksWUFBWSxJQUFJekIsV0FBVztZQUN0RixNQUFNMEIsUUFBUSxDQUFDLEdBQUdyQyxhQUFhc0Msc0JBQXNCLEVBQUVOLFNBQVNJLFlBQVk7WUFDNUUsTUFBTSxFQUFFRyxNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBR2hDLGVBQWVpQyxhQUFhLEVBQUVULFNBQVNSLFFBQVEsRUFBRVEsU0FBU1IsUUFBUSxFQUFFYTtZQUNuRyxJQUFJRSxRQUFRO2dCQUNSTCxpQkFBaUIsQ0FBQyxHQUFHaEMsV0FBV1ksb0JBQW9CLEVBQUU7b0JBQ2xEVSxVQUFVZTtvQkFDVkcsTUFBTVYsU0FBU1UsSUFBSTtvQkFDbkJMLE9BQU8sQ0FBQyxHQUFHbEMsTUFBTXdDLElBQUksRUFBRU4sT0FBT0c7Z0JBQ2xDO1lBQ0o7UUFDSjtRQUNBLG9FQUFvRTtRQUNwRSxNQUFNSSxlQUFlWixTQUFTYSxNQUFNLEtBQUtqQyxLQUFLaUMsTUFBTSxHQUFHYixTQUFTdEIsSUFBSSxDQUFDUSxLQUFLLENBQUNjLFNBQVNhLE1BQU0sQ0FBQzFCLE1BQU0sSUFBSWEsU0FBU3RCLElBQUk7UUFDbEgsT0FBT0MsWUFBWTtZQUNmaUM7WUFDQVYsa0JBQWtCVTtTQUNyQixHQUFHQTtJQUNSLEVBQUUsT0FBT2IsR0FBRztRQUNSLE9BQU9wQixZQUFZO1lBQ2ZFO1NBQ0gsR0FBR0E7SUFDUjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9sQixRQUFRbUQsT0FBTyxLQUFLLGNBQWUsT0FBT25ELFFBQVFtRCxPQUFPLEtBQUssWUFBWW5ELFFBQVFtRCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uRCxRQUFRbUQsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1ELE9BQU8sRUFBRSxjQUFjO1FBQUVsRCxPQUFPO0lBQUs7SUFDbkVILE9BQU91RCxNQUFNLENBQUNyRCxRQUFRbUQsT0FBTyxFQUFFbkQ7SUFDL0JzRCxPQUFPdEQsT0FBTyxHQUFHQSxRQUFRbUQsT0FBTztBQUNsQyxFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXNvbHZlLWhyZWYuanM/MmY5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVzb2x2ZUhyZWZcIiwge1xyXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgIGdldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVIcmVmO1xyXG4gICAgfVxyXG59KTtcclxuY29uc3QgX3F1ZXJ5c3RyaW5nID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nXCIpO1xyXG5jb25zdCBfZm9ybWF0dXJsID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmxcIik7XHJcbmNvbnN0IF9vbWl0ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL29taXRcIik7XHJcbmNvbnN0IF91dGlscyA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3V0aWxzXCIpO1xyXG5jb25zdCBfbm9ybWFsaXpldHJhaWxpbmdzbGFzaCA9IHJlcXVpcmUoXCIuL25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaFwiKTtcclxuY29uc3QgX2lzbG9jYWx1cmwgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsXCIpO1xyXG5jb25zdCBfdXRpbHMxID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzXCIpO1xyXG5jb25zdCBfaW50ZXJwb2xhdGVhcyA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcnBvbGF0ZS1hc1wiKTtcclxuZnVuY3Rpb24gcmVzb2x2ZUhyZWYocm91dGVyLCBocmVmLCByZXNvbHZlQXMpIHtcclxuICAgIC8vIHdlIHVzZSBhIGR1bW15IGJhc2UgdXJsIGZvciByZWxhdGl2ZSB1cmxzXHJcbiAgICBsZXQgYmFzZTtcclxuICAgIGxldCB1cmxBc1N0cmluZyA9IHR5cGVvZiBocmVmID09PSBcInN0cmluZ1wiID8gaHJlZiA6ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShocmVmKTtcclxuICAgIC8vIHJlcGVhdGVkIHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIGluIHRoZSBVUkwgYXJlIGNvbnNpZGVyZWRcclxuICAgIC8vIGludmFsaWQgYW5kIHdpbGwgbmV2ZXIgbWF0Y2ggYSBOZXh0LmpzIHBhZ2UvZmlsZVxyXG4gICAgY29uc3QgdXJsUHJvdG9NYXRjaCA9IHVybEFzU3RyaW5nLm1hdGNoKC9eW2EtekEtWl17MSx9OlxcL1xcLy8pO1xyXG4gICAgY29uc3QgdXJsQXNTdHJpbmdOb1Byb3RvID0gdXJsUHJvdG9NYXRjaCA/IHVybEFzU3RyaW5nLnNsaWNlKHVybFByb3RvTWF0Y2hbMF0ubGVuZ3RoKSA6IHVybEFzU3RyaW5nO1xyXG4gICAgY29uc3QgdXJsUGFydHMgPSB1cmxBc1N0cmluZ05vUHJvdG8uc3BsaXQoXCI/XCIpO1xyXG4gICAgaWYgKCh1cmxQYXJ0c1swXSB8fCBcIlwiKS5tYXRjaCgvKFxcL1xcL3xcXFxcKS8pKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgaHJlZiAnXCIgKyB1cmxBc1N0cmluZyArIFwiJyBwYXNzZWQgdG8gbmV4dC9yb3V0ZXIgaW4gcGFnZTogJ1wiICsgcm91dGVyLnBhdGhuYW1lICsgXCInLiBSZXBlYXRlZCBmb3J3YXJkLXNsYXNoZXMgKC8vKSBvciBiYWNrc2xhc2hlcyBcXFxcIGFyZSBub3QgdmFsaWQgaW4gdGhlIGhyZWYuXCIpO1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRVcmwgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcykodXJsQXNTdHJpbmdOb1Byb3RvKTtcclxuICAgICAgICB1cmxBc1N0cmluZyA9ICh1cmxQcm90b01hdGNoID8gdXJsUHJvdG9NYXRjaFswXSA6IFwiXCIpICsgbm9ybWFsaXplZFVybDtcclxuICAgIH1cclxuICAgIC8vIFJldHVybiBiZWNhdXNlIGl0IGNhbm5vdCBiZSByb3V0ZWQgYnkgdGhlIE5leHQuanMgcm91dGVyXHJcbiAgICBpZiAoISgwLCBfaXNsb2NhbHVybC5pc0xvY2FsVVJMKSh1cmxBc1N0cmluZykpIHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZUFzID8gW1xyXG4gICAgICAgICAgICB1cmxBc1N0cmluZ1xyXG4gICAgICAgIF0gOiB1cmxBc1N0cmluZztcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgYmFzZSA9IG5ldyBVUkwodXJsQXNTdHJpbmcuc3RhcnRzV2l0aChcIiNcIikgPyByb3V0ZXIuYXNQYXRoIDogcm91dGVyLnBhdGhuYW1lLCBcImh0dHA6Ly9uXCIpO1xyXG4gICAgfSBjYXRjaCAoXykge1xyXG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIC8gZm9yIGludmFsaWQgYXNQYXRoIHZhbHVlcyBlLmcuIC8vXHJcbiAgICAgICAgYmFzZSA9IG5ldyBVUkwoXCIvXCIsIFwiaHR0cDovL25cIik7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsVXJsID0gbmV3IFVSTCh1cmxBc1N0cmluZywgYmFzZSk7XHJcbiAgICAgICAgZmluYWxVcmwucGF0aG5hbWUgPSAoMCwgX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2gubm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2gpKGZpbmFsVXJsLnBhdGhuYW1lKTtcclxuICAgICAgICBsZXQgaW50ZXJwb2xhdGVkQXMgPSBcIlwiO1xyXG4gICAgICAgIGlmICgoMCwgX3V0aWxzMS5pc0R5bmFtaWNSb3V0ZSkoZmluYWxVcmwucGF0aG5hbWUpICYmIGZpbmFsVXJsLnNlYXJjaFBhcmFtcyAmJiByZXNvbHZlQXMpIHtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSAoMCwgX3F1ZXJ5c3RyaW5nLnNlYXJjaFBhcmFtc1RvVXJsUXVlcnkpKGZpbmFsVXJsLnNlYXJjaFBhcmFtcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcmVzdWx0LCBwYXJhbXMgfSA9ICgwLCBfaW50ZXJwb2xhdGVhcy5pbnRlcnBvbGF0ZUFzKShmaW5hbFVybC5wYXRobmFtZSwgZmluYWxVcmwucGF0aG5hbWUsIHF1ZXJ5KTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVkQXMgPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogZmluYWxVcmwuaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogKDAsIF9vbWl0Lm9taXQpKHF1ZXJ5LCBwYXJhbXMpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB0aGUgb3JpZ2luIGRpZG4ndCBjaGFuZ2UsIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEgcmVsYXRpdmUgaHJlZlxyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkSHJlZiA9IGZpbmFsVXJsLm9yaWdpbiA9PT0gYmFzZS5vcmlnaW4gPyBmaW5hbFVybC5ocmVmLnNsaWNlKGZpbmFsVXJsLm9yaWdpbi5sZW5ndGgpIDogZmluYWxVcmwuaHJlZjtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZUFzID8gW1xyXG4gICAgICAgICAgICByZXNvbHZlZEhyZWYsXHJcbiAgICAgICAgICAgIGludGVycG9sYXRlZEFzIHx8IHJlc29sdmVkSHJlZlxyXG4gICAgICAgIF0gOiByZXNvbHZlZEhyZWY7XHJcbiAgICB9IGNhdGNoIChfKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBcyA/IFtcclxuICAgICAgICAgICAgdXJsQXNTdHJpbmdcclxuICAgICAgICBdIDogdXJsQXNTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XHJcbn1cclxuXHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc29sdmUtaHJlZi5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicmVzb2x2ZUhyZWYiLCJfcXVlcnlzdHJpbmciLCJyZXF1aXJlIiwiX2Zvcm1hdHVybCIsIl9vbWl0IiwiX3V0aWxzIiwiX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2giLCJfaXNsb2NhbHVybCIsIl91dGlsczEiLCJfaW50ZXJwb2xhdGVhcyIsInJvdXRlciIsImhyZWYiLCJyZXNvbHZlQXMiLCJiYXNlIiwidXJsQXNTdHJpbmciLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsInVybFByb3RvTWF0Y2giLCJtYXRjaCIsInVybEFzU3RyaW5nTm9Qcm90byIsInNsaWNlIiwibGVuZ3RoIiwidXJsUGFydHMiLCJzcGxpdCIsImNvbnNvbGUiLCJlcnJvciIsInBhdGhuYW1lIiwibm9ybWFsaXplZFVybCIsIm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyIsImlzTG9jYWxVUkwiLCJVUkwiLCJzdGFydHNXaXRoIiwiYXNQYXRoIiwiXyIsImZpbmFsVXJsIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJpbnRlcnBvbGF0ZWRBcyIsImlzRHluYW1pY1JvdXRlIiwic2VhcmNoUGFyYW1zIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwicmVzdWx0IiwicGFyYW1zIiwiaW50ZXJwb2xhdGVBcyIsImhhc2giLCJvbWl0IiwicmVzb2x2ZWRIcmVmIiwib3JpZ2luIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js": /*!***********************************************************!*\ !*** ./node_modules/next/dist/client/use-intersection.js ***! \***********************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useIntersection\", ({\n enumerable: true,\n get: function() {\n return useIntersection;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js\");\nconst hasIntersectionObserver = typeof IntersectionObserver === \"function\";\nconst observers = new Map();\nconst idList = [];\nfunction createObserver(options) {\n const id = {\n root: options.root || null,\n margin: options.rootMargin || \"\"\n };\n const existing = idList.find((obj)=>obj.root === id.root && obj.margin === id.margin);\n let instance;\n if (existing) {\n instance = observers.get(existing);\n if (instance) {\n return instance;\n }\n }\n const elements = new Map();\n const observer = new IntersectionObserver((entries)=>{\n entries.forEach((entry)=>{\n const callback = elements.get(entry.target);\n const isVisible = entry.isIntersecting || entry.intersectionRatio > 0;\n if (callback && isVisible) {\n callback(isVisible);\n }\n });\n }, options);\n instance = {\n id,\n observer,\n elements\n };\n idList.push(id);\n observers.set(id, instance);\n return instance;\n}\nfunction observe(element, callback, options) {\n const { id, observer, elements } = createObserver(options);\n elements.set(element, callback);\n observer.observe(element);\n return function unobserve() {\n elements.delete(element);\n observer.unobserve(element);\n // Destroy observer when there's nothing left to watch:\n if (elements.size === 0) {\n observer.disconnect();\n observers.delete(id);\n const index = idList.findIndex((obj)=>obj.root === id.root && obj.margin === id.margin);\n if (index > -1) {\n idList.splice(index, 1);\n }\n }\n };\n}\nfunction useIntersection(param) {\n let { rootRef, rootMargin, disabled } = param;\n const isDisabled = disabled || !hasIntersectionObserver;\n const [visible, setVisible] = (0, _react.useState)(false);\n const elementRef = (0, _react.useRef)(null);\n const setElement = (0, _react.useCallback)((element)=>{\n elementRef.current = element;\n }, []);\n (0, _react.useEffect)(()=>{\n if (hasIntersectionObserver) {\n if (isDisabled || visible) return;\n const element = elementRef.current;\n if (element && element.tagName) {\n const unobserve = observe(element, (isVisible)=>isVisible && setVisible(isVisible), {\n root: rootRef == null ? void 0 : rootRef.current,\n rootMargin\n });\n return unobserve;\n }\n } else {\n if (!visible) {\n const idleCallback = (0, _requestidlecallback.requestIdleCallback)(()=>setVisible(true));\n return ()=>(0, _requestidlecallback.cancelIdleCallback)(idleCallback);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isDisabled,\n rootMargin,\n rootRef,\n visible,\n elementRef.current\n ]);\n const resetVisible = (0, _react.useCallback)(()=>{\n setVisible(false);\n }, []);\n return [\n setElement,\n visible,\n resetVisible\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-intersection.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3VzZS1pbnRlcnNlY3Rpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFNBQVNDLG1CQUFPQSxDQUFDLG1GQUFPO0FBQzlCLE1BQU1DLHVCQUF1QkQsbUJBQU9BLENBQUMsNkdBQXlCO0FBQzlELE1BQU1FLDBCQUEwQixPQUFPQyx5QkFBeUI7QUFDaEUsTUFBTUMsWUFBWSxJQUFJQztBQUN0QixNQUFNQyxTQUFTLEVBQUU7QUFDakIsU0FBU0MsZUFBZUMsT0FBTztJQUMzQixNQUFNQyxLQUFLO1FBQ1BDLE1BQU1GLFFBQVFFLElBQUksSUFBSTtRQUN0QkMsUUFBUUgsUUFBUUksVUFBVSxJQUFJO0lBQ2xDO0lBQ0EsTUFBTUMsV0FBV1AsT0FBT1EsSUFBSSxDQUFDLENBQUNDLE1BQU1BLElBQUlMLElBQUksS0FBS0QsR0FBR0MsSUFBSSxJQUFJSyxJQUFJSixNQUFNLEtBQUtGLEdBQUdFLE1BQU07SUFDcEYsSUFBSUs7SUFDSixJQUFJSCxVQUFVO1FBQ1ZHLFdBQVdaLFVBQVVQLEdBQUcsQ0FBQ2dCO1FBQ3pCLElBQUlHLFVBQVU7WUFDVixPQUFPQTtRQUNYO0lBQ0o7SUFDQSxNQUFNQyxXQUFXLElBQUlaO0lBQ3JCLE1BQU1hLFdBQVcsSUFBSWYscUJBQXFCLENBQUNnQjtRQUN2Q0EsUUFBUUMsT0FBTyxDQUFDLENBQUNDO1lBQ2IsTUFBTUMsV0FBV0wsU0FBU3BCLEdBQUcsQ0FBQ3dCLE1BQU1FLE1BQU07WUFDMUMsTUFBTUMsWUFBWUgsTUFBTUksY0FBYyxJQUFJSixNQUFNSyxpQkFBaUIsR0FBRztZQUNwRSxJQUFJSixZQUFZRSxXQUFXO2dCQUN2QkYsU0FBU0U7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LFFBQVE4RCxPQUFPLEVBQUU5RDtJQUMvQmlFLE9BQU9qRSxPQUFPLEdBQUdBLFFBQVE4RCxPQUFPO0FBQ2xDLEVBRUEsNENBQTRDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3VzZS1pbnRlcnNlY3Rpb24uanM/ZmQ5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlSW50ZXJzZWN0aW9uXCIsIHtcclxuICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB1c2VJbnRlcnNlY3Rpb247XHJcbiAgICB9XHJcbn0pO1xyXG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XHJcbmNvbnN0IF9yZXF1ZXN0aWRsZWNhbGxiYWNrID0gcmVxdWlyZShcIi4vcmVxdWVzdC1pZGxlLWNhbGxiYWNrXCIpO1xyXG5jb25zdCBoYXNJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiO1xyXG5jb25zdCBvYnNlcnZlcnMgPSBuZXcgTWFwKCk7XHJcbmNvbnN0IGlkTGlzdCA9IFtdO1xyXG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZlcihvcHRpb25zKSB7XHJcbiAgICBjb25zdCBpZCA9IHtcclxuICAgICAgICByb290OiBvcHRpb25zLnJvb3QgfHwgbnVsbCxcclxuICAgICAgICBtYXJnaW46IG9wdGlvbnMucm9vdE1hcmdpbiB8fCBcIlwiXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBpZExpc3QuZmluZCgob2JqKT0+b2JqLnJvb3QgPT09IGlkLnJvb3QgJiYgb2JqLm1hcmdpbiA9PT0gaWQubWFyZ2luKTtcclxuICAgIGxldCBpbnN0YW5jZTtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICAgIGluc3RhbmNlID0gb2JzZXJ2ZXJzLmdldChleGlzdGluZyk7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IG5ldyBNYXAoKTtcclxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKT0+e1xyXG4gICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpPT57XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gZWxlbWVudHMuZ2V0KGVudHJ5LnRhcmdldCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IGVudHJ5LmlzSW50ZXJzZWN0aW5nIHx8IGVudHJ5LmludGVyc2VjdGlvblJhdGlvID4gMDtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIGlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soaXNWaXNpYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgICBpbnN0YW5jZSA9IHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBvYnNlcnZlcixcclxuICAgICAgICBlbGVtZW50c1xyXG4gICAgfTtcclxuICAgIGlkTGlzdC5wdXNoKGlkKTtcclxuICAgIG9ic2VydmVycy5zZXQoaWQsIGluc3RhbmNlKTtcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxufVxyXG5mdW5jdGlvbiBvYnNlcnZlKGVsZW1lbnQsIGNhbGxiYWNrLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7IGlkLCBvYnNlcnZlciwgZWxlbWVudHMgfSA9IGNyZWF0ZU9ic2VydmVyKG9wdGlvbnMpO1xyXG4gICAgZWxlbWVudHMuc2V0KGVsZW1lbnQsIGNhbGxiYWNrKTtcclxuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5vYnNlcnZlKCkge1xyXG4gICAgICAgIGVsZW1lbnRzLmRlbGV0ZShlbGVtZW50KTtcclxuICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZWxlbWVudCk7XHJcbiAgICAgICAgLy8gRGVzdHJveSBvYnNlcnZlciB3aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIHdhdGNoOlxyXG4gICAgICAgIGlmIChlbGVtZW50cy5zaXplID09PSAwKSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXJzLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaWRMaXN0LmZpbmRJbmRleCgob2JqKT0+b2JqLnJvb3QgPT09IGlkLnJvb3QgJiYgb2JqLm1hcmdpbiA9PT0gaWQubWFyZ2luKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGlkTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB1c2VJbnRlcnNlY3Rpb24ocGFyYW0pIHtcclxuICAgIGxldCB7IHJvb3RSZWYsIHJvb3RNYXJnaW4sIGRpc2FibGVkIH0gPSBwYXJhbTtcclxuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCAhaGFzSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XHJcbiAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSAoMCwgX3JlYWN0LnVzZVN0YXRlKShmYWxzZSk7XHJcbiAgICBjb25zdCBlbGVtZW50UmVmID0gKDAsIF9yZWFjdC51c2VSZWYpKG51bGwpO1xyXG4gICAgY29uc3Qgc2V0RWxlbWVudCA9ICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKChlbGVtZW50KT0+e1xyXG4gICAgICAgIGVsZW1lbnRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XHJcbiAgICB9LCBbXSk7XHJcbiAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcclxuICAgICAgICBpZiAoaGFzSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgaWYgKGlzRGlzYWJsZWQgfHwgdmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudFJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVub2JzZXJ2ZSA9IG9ic2VydmUoZWxlbWVudCwgKGlzVmlzaWJsZSk9PmlzVmlzaWJsZSAmJiBzZXRWaXNpYmxlKGlzVmlzaWJsZSksIHtcclxuICAgICAgICAgICAgICAgICAgICByb290OiByb290UmVmID09IG51bGwgPyB2b2lkIDAgOiByb290UmVmLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdE1hcmdpblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5vYnNlcnZlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF2aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZGxlQ2FsbGJhY2sgPSAoMCwgX3JlcXVlc3RpZGxlY2FsbGJhY2sucmVxdWVzdElkbGVDYWxsYmFjaykoKCk9PnNldFZpc2libGUodHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpPT4oMCwgX3JlcXVlc3RpZGxlY2FsbGJhY2suY2FuY2VsSWRsZUNhbGxiYWNrKShpZGxlQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgcm9vdE1hcmdpbixcclxuICAgICAgICByb290UmVmLFxyXG4gICAgICAgIHZpc2libGUsXHJcbiAgICAgICAgZWxlbWVudFJlZi5jdXJyZW50XHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHJlc2V0VmlzaWJsZSA9ICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKCgpPT57XHJcbiAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHNldEVsZW1lbnQsXHJcbiAgICAgICAgdmlzaWJsZSxcclxuICAgICAgICByZXNldFZpc2libGVcclxuICAgIF07XHJcbn1cclxuXHJcbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XHJcbn1cclxuXHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1pbnRlcnNlY3Rpb24uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInVzZUludGVyc2VjdGlvbiIsIl9yZWFjdCIsInJlcXVpcmUiLCJfcmVxdWVzdGlkbGVjYWxsYmFjayIsImhhc0ludGVyc2VjdGlvbk9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlcnMiLCJNYXAiLCJpZExpc3QiLCJjcmVhdGVPYnNlcnZlciIsIm9wdGlvbnMiLCJpZCIsInJvb3QiLCJtYXJnaW4iLCJyb290TWFyZ2luIiwiZXhpc3RpbmciLCJmaW5kIiwib2JqIiwiaW5zdGFuY2UiLCJlbGVtZW50cyIsIm9ic2VydmVyIiwiZW50cmllcyIsImZvckVhY2giLCJlbnRyeSIsImNhbGxiYWNrIiwidGFyZ2V0IiwiaXNWaXNpYmxlIiwiaXNJbnRlcnNlY3RpbmciLCJpbnRlcnNlY3Rpb25SYXRpbyIsInB1c2giLCJzZXQiLCJvYnNlcnZlIiwiZWxlbWVudCIsInVub2JzZXJ2ZSIsImRlbGV0ZSIsInNpemUiLCJkaXNjb25uZWN0IiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJwYXJhbSIsInJvb3RSZWYiLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInVzZVN0YXRlIiwiZWxlbWVudFJlZiIsInVzZVJlZiIsInNldEVsZW1lbnQiLCJ1c2VDYWxsYmFjayIsImN1cnJlbnQiLCJ1c2VFZmZlY3QiLCJ0YWdOYW1lIiwiaWRsZUNhbGxiYWNrIiwicmVxdWVzdElkbGVDYWxsYmFjayIsImNhbmNlbElkbGVDYWxsYmFjayIsInJlc2V0VmlzaWJsZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js": /*!************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/escape-regexp.js ***! \************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n enumerable: true,\n get: function() {\n return escapeStringRegexp;\n }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, \"\\\\$&\");\n }\n return str;\n} //# sourceMappingURL=escape-regexp.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLmpzIiwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUM3RDtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsc0RBQXFEO0lBQ2pESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsY0FBYztBQUNwQixNQUFNQyxrQkFBa0I7QUFDeEIsU0FBU0YsbUJBQW1CRyxHQUFHO0lBQzNCLCtHQUErRztJQUMvRyxJQUFJRixZQUFZRyxJQUFJLENBQUNELE1BQU07UUFDdkIsT0FBT0EsSUFBSUUsT0FBTyxDQUFDSCxpQkFBaUI7SUFDeEM7SUFDQSxPQUFPQztBQUNYLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLmpzP2RiZmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gcmVnZXhwIGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXNjYXBlLXN0cmluZy1yZWdleHBcclxuXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xyXG4gICAgdmFsdWU6IHRydWVcclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVzY2FwZVN0cmluZ1JlZ2V4cFwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gZXNjYXBlU3RyaW5nUmVnZXhwO1xyXG4gICAgfVxyXG59KTtcclxuY29uc3QgcmVIYXNSZWdFeHAgPSAvW3xcXFxce30oKVtcXF1eJCsqPy4tXS87XHJcbmNvbnN0IHJlUmVwbGFjZVJlZ0V4cCA9IC9bfFxcXFx7fSgpW1xcXV4kKyo/Li1dL2c7XHJcbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ1JlZ2V4cChzdHIpIHtcclxuICAgIC8vIHNlZSBhbHNvOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzJkYTAyNGMzYjRmOTk0N2E0ODUxNzYzOWRlNzU2MDQ1N2NkNGVjNmMvZXNjYXBlUmVnRXhwLmpzI0wyM1xyXG4gICAgaWYgKHJlSGFzUmVnRXhwLnRlc3Qoc3RyKSkge1xyXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShyZVJlcGxhY2VSZWdFeHAsIFwiXFxcXCQmXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNjYXBlLXJlZ2V4cC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZXNjYXBlU3RyaW5nUmVnZXhwIiwicmVIYXNSZWdFeHAiLCJyZVJlcGxhY2VSZWdFeHAiLCJzdHIiLCJ0ZXN0IiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js": /*!****************************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***! \****************************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\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 RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = \"RouterContext\";\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsU0FBUyxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNRixnQkFBZ0JHLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDO0FBQ25ELElBQUlDLElBQXFDLEVBQUU7SUFDdkNQLGNBQWNVLFdBQVcsR0FBRztBQUNoQyxFQUVBLHlEQUF5RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanM/OGZhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUm91dGVyQ29udGV4dFwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gUm91dGVyQ29udGV4dDtcclxuICAgIH1cclxufSk7XHJcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XHJcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcclxuY29uc3QgUm91dGVyQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCk7XHJcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgIFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIlJvdXRlckNvbnRleHRcIjtcclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlJvdXRlckNvbnRleHQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiXyIsImRlZmF1bHQiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js": /*!**********************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/format-url.js ***! \**********************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\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 formatUrl: function() {\n return formatUrl;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n },\n formatWithValidation: function() {\n return formatWithValidation;\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 _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || \"\";\n let pathname = urlObj.pathname || \"\";\n let hash = urlObj.hash || \"\";\n let query = urlObj.query || \"\";\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, \":\") + \"@\" : \"\";\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(\":\") ? \"[\" + hostname + \"]\" : hostname);\n if (urlObj.port) {\n host += \":\" + urlObj.port;\n }\n }\n if (query && typeof query === \"object\") {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && \"?\" + query || \"\";\n if (protocol && !protocol.endsWith(\":\")) protocol += \":\";\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = \"//\" + (host || \"\");\n if (pathname && pathname[0] !== \"/\") pathname = \"/\" + pathname;\n } else if (!host) {\n host = \"\";\n }\n if (hash && hash[0] !== \"#\") hash = \"#\" + hash;\n if (search && search[0] !== \"?\") search = \"?\" + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace(\"#\", \"%23\");\n return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n \"auth\",\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"slashes\"\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === \"object\") {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsc0RBQXNEO0FBQ3RELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2REFBNkQ7QUFDN0QsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLHlDQUF5QztBQUM1QjtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsV0FBVztRQUNQLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsc0JBQXNCO1FBQ2xCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLDRCQUE0QkMsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1DLGVBQWUsV0FBVyxHQUFHRiwwQkFBMEJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsMEdBQWU7QUFDdEYsTUFBTUcsbUJBQW1CO0FBQ3pCLFNBQVNiLFVBQVVjLE1BQU07SUFDckIsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRjtJQUN6QixJQUFJRyxXQUFXSCxPQUFPRyxRQUFRLElBQUk7SUFDbEMsSUFBSUMsV0FBV0osT0FBT0ksUUFBUSxJQUFJO0lBQ2xDLElBQUlDLE9BQU9MLE9BQU9LLElBQUksSUFBSTtJQUMxQixJQUFJQyxRQUFRTixPQUFPTSxLQUFLLElBQUk7SUFDNUIsSUFBSUMsT0FBTztJQUNYTixPQUFPQSxPQUFPTyxtQkFBbUJQLE1BQU1RLE9BQU8sQ0FBQyxRQUFRLE9BQU8sTUFBTTtJQUNwRSxJQUFJVCxPQUFPTyxJQUFJLEVBQUU7UUFDYkEsT0FBT04sT0FBT0QsT0FBT08sSUFBSTtJQUM3QixPQUFPLElBQUlMLFVBQVU7UUFDakJLLE9BQU9OLE9BQVEsRUFBQ0MsU0FBU1EsT0FBTyxDQUFDLE9BQU8sTUFBTVIsV0FBVyxNQUFNQSxRQUFPO1FBQ3RFLElBQUlGLE9BQU9XLElBQUksRUFBRTtZQUNiSixRQUFRLE1BQU1QLE9BQU9XLElBQUk7UUFDN0I7SUFDSjtJQUNBLElBQUlMLFNBQVMsT0FBT0EsVUFBVSxVQUFVO1FBQ3BDQSxRQUFRTSxPQUFPZixhQUFhZ0Isc0JBQXNCLENBQUNQO0lBQ3ZEO0lBQ0EsSUFBSVEsU0FBU2QsT0FBT2MsTUFBTSxJQUFJUixTQUFTLE1BQU1BLFNBQVM7SUFDdEQsSUFBSUgsWUFBWSxDQUFDQSxTQUFTWSxRQUFRLENBQUMsTUFBTVosWUFBWTtJQUNyRCxJQUFJSCxPQUFPZ0IsT0FBTyxJQUFJLENBQUMsQ0FBQ2IsWUFBWUosaUJBQWlCa0IsSUFBSSxDQUFDZCxTQUFRLEtBQU1JLFNBQVMsT0FBTztRQUNwRkEsT0FBTyxPQUFRQSxDQUFBQSxRQUFRLEVBQUM7UUFDeEIsSUFBSUgsWUFBWUEsUUFBUSxDQUFDLEVBQUUsS0FBSyxLQUFLQSxXQUFXLE1BQU1BO0lBQzFELE9BQU8sSUFBSSxDQUFDRyxNQUFNO1FBQ2RBLE9BQU87SUFDWDtJQUNBLElBQUlGLFFBQVFBLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBS0EsT0FBTyxNQUFNQTtJQUMxQyxJQUFJUyxVQUFVQSxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUtBLFNBQVMsTUFBTUE7SUFDaERWLFdBQVdBLFNBQVNLLE9BQU8sQ0FBQyxTQUFTRDtJQUNyQ00sU0FBU0EsT0FBT0wsT0FBTyxDQUFDLEtBQUs7SUFDN0IsT0FBTyxLQUFLTixXQUFXSSxPQUFPSCxXQUFXVSxTQUFTVDtBQUN0RDtBQUNBLE1BQU1sQixnQkFBZ0I7SUFDbEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRCxTQUFTQyxxQkFBcUI4QixHQUFHO0lBQzdCLElBQUlDLElBQXNDLEVBQUU7UUFDeEMsSUFBSUQsUUFBUSxRQUFRLE9BQU9BLFFBQVEsVUFBVTtZQUN6Q3JDLE9BQU95QyxJQUFJLENBQUNKLEtBQUtLLE9BQU8sQ0FBQyxDQUFDQztnQkFDdEIsSUFBSSxDQUFDckMsY0FBY3NDLFFBQVEsQ0FBQ0QsTUFBTTtvQkFDOUJFLFFBQVFDLElBQUksQ0FBQyx1REFBdURIO2dCQUN4RTtZQUNKO1FBQ0o7SUFDSjtJQUNBLE9BQU90QyxVQUFVZ0M7QUFDckIsRUFFQSxzQ0FBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtdXJsLmpzPzdiNTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0IGZ1bmN0aW9uIG1vZGlmaWVkIGZyb20gbm9kZWpzXHJcbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxyXG4vL1xyXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxyXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXHJcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xyXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXHJcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcclxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXHJcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4vL1xyXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxyXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuLy9cclxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xyXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXHJcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cclxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXHJcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxyXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXHJcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcblwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcclxuICAgIHZhbHVlOiB0cnVlXHJcbn0pO1xyXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIGZvcm1hdFVybDogbnVsbCxcclxuICAgIHVybE9iamVjdEtleXM6IG51bGwsXHJcbiAgICBmb3JtYXRXaXRoVmFsaWRhdGlvbjogbnVsbFxyXG59KTtcclxuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xyXG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxyXG4gICAgfSk7XHJcbn1cclxuX2V4cG9ydChleHBvcnRzLCB7XHJcbiAgICBmb3JtYXRVcmw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBmb3JtYXRVcmw7XHJcbiAgICB9LFxyXG4gICAgdXJsT2JqZWN0S2V5czogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHVybE9iamVjdEtleXM7XHJcbiAgICB9LFxyXG4gICAgZm9ybWF0V2l0aFZhbGlkYXRpb246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBmb3JtYXRXaXRoVmFsaWRhdGlvbjtcclxuICAgIH1cclxufSk7XHJcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcclxuY29uc3QgX3F1ZXJ5c3RyaW5nID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcIi4vcXVlcnlzdHJpbmdcIikpO1xyXG5jb25zdCBzbGFzaGVkUHJvdG9jb2xzID0gL2h0dHBzP3xmdHB8Z29waGVyfGZpbGUvO1xyXG5mdW5jdGlvbiBmb3JtYXRVcmwodXJsT2JqKSB7XHJcbiAgICBsZXQgeyBhdXRoLCBob3N0bmFtZSB9ID0gdXJsT2JqO1xyXG4gICAgbGV0IHByb3RvY29sID0gdXJsT2JqLnByb3RvY29sIHx8IFwiXCI7XHJcbiAgICBsZXQgcGF0aG5hbWUgPSB1cmxPYmoucGF0aG5hbWUgfHwgXCJcIjtcclxuICAgIGxldCBoYXNoID0gdXJsT2JqLmhhc2ggfHwgXCJcIjtcclxuICAgIGxldCBxdWVyeSA9IHVybE9iai5xdWVyeSB8fCBcIlwiO1xyXG4gICAgbGV0IGhvc3QgPSBmYWxzZTtcclxuICAgIGF1dGggPSBhdXRoID8gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpLnJlcGxhY2UoLyUzQS9pLCBcIjpcIikgKyBcIkBcIiA6IFwiXCI7XHJcbiAgICBpZiAodXJsT2JqLmhvc3QpIHtcclxuICAgICAgICBob3N0ID0gYXV0aCArIHVybE9iai5ob3N0O1xyXG4gICAgfSBlbHNlIGlmIChob3N0bmFtZSkge1xyXG4gICAgICAgIGhvc3QgPSBhdXRoICsgKH5ob3N0bmFtZS5pbmRleE9mKFwiOlwiKSA/IFwiW1wiICsgaG9zdG5hbWUgKyBcIl1cIiA6IGhvc3RuYW1lKTtcclxuICAgICAgICBpZiAodXJsT2JqLnBvcnQpIHtcclxuICAgICAgICAgICAgaG9zdCArPSBcIjpcIiArIHVybE9iai5wb3J0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChxdWVyeSAmJiB0eXBlb2YgcXVlcnkgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBxdWVyeSA9IFN0cmluZyhfcXVlcnlzdHJpbmcudXJsUXVlcnlUb1NlYXJjaFBhcmFtcyhxdWVyeSkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlYXJjaCA9IHVybE9iai5zZWFyY2ggfHwgcXVlcnkgJiYgXCI/XCIgKyBxdWVyeSB8fCBcIlwiO1xyXG4gICAgaWYgKHByb3RvY29sICYmICFwcm90b2NvbC5lbmRzV2l0aChcIjpcIikpIHByb3RvY29sICs9IFwiOlwiO1xyXG4gICAgaWYgKHVybE9iai5zbGFzaGVzIHx8ICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29scy50ZXN0KHByb3RvY29sKSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcclxuICAgICAgICBob3N0ID0gXCIvL1wiICsgKGhvc3QgfHwgXCJcIik7XHJcbiAgICAgICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lWzBdICE9PSBcIi9cIikgcGF0aG5hbWUgPSBcIi9cIiArIHBhdGhuYW1lO1xyXG4gICAgfSBlbHNlIGlmICghaG9zdCkge1xyXG4gICAgICAgIGhvc3QgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGhhc2ggJiYgaGFzaFswXSAhPT0gXCIjXCIpIGhhc2ggPSBcIiNcIiArIGhhc2g7XHJcbiAgICBpZiAoc2VhcmNoICYmIHNlYXJjaFswXSAhPT0gXCI/XCIpIHNlYXJjaCA9IFwiP1wiICsgc2VhcmNoO1xyXG4gICAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGVuY29kZVVSSUNvbXBvbmVudCk7XHJcbiAgICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZShcIiNcIiwgXCIlMjNcIik7XHJcbiAgICByZXR1cm4gXCJcIiArIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcclxufVxyXG5jb25zdCB1cmxPYmplY3RLZXlzID0gW1xyXG4gICAgXCJhdXRoXCIsXHJcbiAgICBcImhhc2hcIixcclxuICAgIFwiaG9zdFwiLFxyXG4gICAgXCJob3N0bmFtZVwiLFxyXG4gICAgXCJocmVmXCIsXHJcbiAgICBcInBhdGhcIixcclxuICAgIFwicGF0aG5hbWVcIixcclxuICAgIFwicG9ydFwiLFxyXG4gICAgXCJwcm90b2NvbFwiLFxyXG4gICAgXCJxdWVyeVwiLFxyXG4gICAgXCJzZWFyY2hcIixcclxuICAgIFwic2xhc2hlc1wiXHJcbl07XHJcbmZ1bmN0aW9uIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHVybCkge1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcclxuICAgICAgICBpZiAodXJsICE9PSBudWxsICYmIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModXJsKS5mb3JFYWNoKChrZXkpPT57XHJcbiAgICAgICAgICAgICAgICBpZiAoIXVybE9iamVjdEtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlVua25vd24ga2V5IHBhc3NlZCB2aWEgdXJsT2JqZWN0IGludG8gdXJsLmZvcm1hdDogXCIgKyBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0VXJsKHVybCk7XHJcbn1cclxuXHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC11cmwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZm9ybWF0VXJsIiwidXJsT2JqZWN0S2V5cyIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfcXVlcnlzdHJpbmciLCJfIiwic2xhc2hlZFByb3RvY29scyIsInVybE9iaiIsImF1dGgiLCJob3N0bmFtZSIsInByb3RvY29sIiwicGF0aG5hbWUiLCJoYXNoIiwicXVlcnkiLCJob3N0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImluZGV4T2YiLCJwb3J0IiwiU3RyaW5nIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaCIsImVuZHNXaXRoIiwic2xhc2hlcyIsInRlc3QiLCJ1cmwiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIiwiY29uc29sZSIsIndhcm4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js": /*!*****************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***! \*****************************************************************/ /***/ (function(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 getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGlCQUFpQjtRQUNiLE9BQU9RLGNBQWNSLGVBQWU7SUFDeEM7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT1EsV0FBV1IsY0FBYztJQUNwQztBQUNKO0FBQ0EsTUFBTU8sZ0JBQWdCRSxtQkFBT0EsQ0FBQyw4R0FBaUI7QUFDL0MsTUFBTUQsYUFBYUMsbUJBQU9BLENBQUMsd0dBQWMsR0FFekMsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW5kZXguanM/ZjUyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBnZXRTb3J0ZWRSb3V0ZXM6IG51bGwsXHJcbiAgICBpc0R5bmFtaWNSb3V0ZTogbnVsbFxyXG59KTtcclxuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xyXG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxyXG4gICAgfSk7XHJcbn1cclxuX2V4cG9ydChleHBvcnRzLCB7XHJcbiAgICBnZXRTb3J0ZWRSb3V0ZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfc29ydGVkcm91dGVzLmdldFNvcnRlZFJvdXRlcztcclxuICAgIH0sXHJcbiAgICBpc0R5bmFtaWNSb3V0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGU7XHJcbiAgICB9XHJcbn0pO1xyXG5jb25zdCBfc29ydGVkcm91dGVzID0gcmVxdWlyZShcIi4vc29ydGVkLXJvdXRlc1wiKTtcclxuY29uc3QgX2lzZHluYW1pYyA9IHJlcXVpcmUoXCIuL2lzLWR5bmFtaWNcIik7XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJnZXRTb3J0ZWRSb3V0ZXMiLCJpc0R5bmFtaWNSb3V0ZSIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9zb3J0ZWRyb3V0ZXMiLCJfaXNkeW5hbWljIiwicmVxdWlyZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js": /*!**************************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***! \**************************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n enumerable: true,\n get: function() {\n return interpolateAs;\n }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n let interpolatedRoute = \"\";\n const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n const dynamicGroups = dynamicRegex.groups;\n const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : \"\") || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n const params = Object.keys(dynamicGroups);\n if (!params.every((param)=>{\n let value = dynamicMatches[param] || \"\";\n const { repeat, optional } = dynamicGroups[param];\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = \"[\" + (repeat ? \"...\" : \"\") + param + \"]\";\n if (optional) {\n replaced = (!value ? \"/\" : \"\") + \"[\" + replaced + \"]\";\n }\n if (repeat && !Array.isArray(value)) value = [\n value\n ];\n return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment)=>encodeURIComponent(segment)).join(\"/\") : encodeURIComponent(value)) || \"/\");\n })) {\n interpolatedRoute = \"\" // did not satisfy all requirements\n ;\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `` component directly.\n }\n return {\n params,\n result: interpolatedRoute\n };\n} //# sourceMappingURL=interpolate-as.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGlEQUFnRDtJQUM1Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGdCQUFnQkMsbUJBQU9BLENBQUMsOEdBQWlCO0FBQy9DLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLDBHQUFlO0FBQzNDLFNBQVNGLGNBQWNJLEtBQUssRUFBRUMsVUFBVSxFQUFFQyxLQUFLO0lBQzNDLElBQUlDLG9CQUFvQjtJQUN4QixNQUFNQyxlQUFlLENBQUMsR0FBR0wsWUFBWU0sYUFBYSxFQUFFTDtJQUNwRCxNQUFNTSxnQkFBZ0JGLGFBQWFHLE1BQU07SUFDekMsTUFBTUMsaUJBQ04sQ0FBQ1AsZUFBZUQsUUFBUSxDQUFDLEdBQUdILGNBQWNZLGVBQWUsRUFBRUwsY0FBY0gsY0FBYyxFQUFDLEtBQU0sZ0RBQWdEO0lBQzlJLHNFQUFzRTtJQUN0RUM7SUFDQUMsb0JBQW9CSDtJQUNwQixNQUFNVSxTQUFTcEIsT0FBT3FCLElBQUksQ0FBQ0w7SUFDM0IsSUFBSSxDQUFDSSxPQUFPRSxLQUFLLENBQUMsQ0FBQ0M7UUFDZixJQUFJcEIsUUFBUWUsY0FBYyxDQUFDSyxNQUFNLElBQUk7UUFDckMsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRSxHQUFHVCxhQUFhLENBQUNPLE1BQU07UUFDakQsaUNBQWlDO1FBQ2pDLDBEQUEwRDtRQUMxRCxJQUFJRyxXQUFXLE1BQU9GLENBQUFBLFNBQVMsUUFBUSxFQUFDLElBQUtELFFBQVE7UUFDckQsSUFBSUUsVUFBVTtZQUNWQyxXQUFXLENBQUMsQ0FBQ3ZCLFFBQVEsTUFBTSxFQUFDLElBQUssTUFBTXVCLFdBQVc7UUFDdEQ7UUFDQSxJQUFJRixVQUFVLENBQUNHLE1BQU1DLE9BQU8sQ0FBQ3pCLFFBQVFBLFFBQVE7WUFDekNBO1NBQ0g7UUFDRCxPQUFPLENBQUNzQixZQUFZRixTQUFTTCxjQUFhLEtBQU0sNkNBQTZDO1FBQzVGTCxDQUFBQSxvQkFBb0JBLGtCQUFrQmdCLE9BQU8sQ0FBQ0gsVUFBVUYsU0FBU3JCLE1BQU0yQixHQUFHLENBQzNFLHVEQUF1RDtRQUN2RCxrREFBa0Q7UUFDbEQsb0NBQW9DO1FBQ3BDLENBQUNDLFVBQVVDLG1CQUFtQkQsVUFBVUUsSUFBSSxDQUFDLE9BQU9ELG1CQUFtQjdCLFdBQVcsR0FBRTtJQUN4RixJQUFJO1FBQ0FVLG9CQUFvQixHQUFHLG1DQUFtQzs7SUFFOUQsdUVBQXVFO0lBQ3ZFLGtEQUFrRDtJQUNsRDtJQUNBLE9BQU87UUFDSE87UUFDQWMsUUFBUXJCO0lBQ1o7QUFDSixFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2ludGVycG9sYXRlLWFzLmpzP2QwZTQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xyXG4gICAgdmFsdWU6IHRydWVcclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVycG9sYXRlQXNcIiwge1xyXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgIGdldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlQXM7XHJcbiAgICB9XHJcbn0pO1xyXG5jb25zdCBfcm91dGVtYXRjaGVyID0gcmVxdWlyZShcIi4vcm91dGUtbWF0Y2hlclwiKTtcclxuY29uc3QgX3JvdXRlcmVnZXggPSByZXF1aXJlKFwiLi9yb3V0ZS1yZWdleFwiKTtcclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVBcyhyb3V0ZSwgYXNQYXRobmFtZSwgcXVlcnkpIHtcclxuICAgIGxldCBpbnRlcnBvbGF0ZWRSb3V0ZSA9IFwiXCI7XHJcbiAgICBjb25zdCBkeW5hbWljUmVnZXggPSAoMCwgX3JvdXRlcmVnZXguZ2V0Um91dGVSZWdleCkocm91dGUpO1xyXG4gICAgY29uc3QgZHluYW1pY0dyb3VwcyA9IGR5bmFtaWNSZWdleC5ncm91cHM7XHJcbiAgICBjb25zdCBkeW5hbWljTWF0Y2hlcyA9IC8vIFRyeSB0byBtYXRjaCB0aGUgZHluYW1pYyByb3V0ZSBhZ2FpbnN0IHRoZSBhc1BhdGhcclxuICAgIChhc1BhdGhuYW1lICE9PSByb3V0ZSA/ICgwLCBfcm91dGVtYXRjaGVyLmdldFJvdXRlTWF0Y2hlcikoZHluYW1pY1JlZ2V4KShhc1BhdGhuYW1lKSA6IFwiXCIpIHx8IC8vIEZhbGwgYmFjayB0byByZWFkaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUgaHJlZlxyXG4gICAgLy8gVE9ETzogc2hvdWxkIHRoaXMgdGFrZSBwcmlvcml0eTsgYWxzbyBuZWVkIHRvIGNoYW5nZSBpbiB0aGUgcm91dGVyLlxyXG4gICAgcXVlcnk7XHJcbiAgICBpbnRlcnBvbGF0ZWRSb3V0ZSA9IHJvdXRlO1xyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmtleXMoZHluYW1pY0dyb3Vwcyk7XHJcbiAgICBpZiAoIXBhcmFtcy5ldmVyeSgocGFyYW0pPT57XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY01hdGNoZXNbcGFyYW1dIHx8IFwiXCI7XHJcbiAgICAgICAgY29uc3QgeyByZXBlYXQsIG9wdGlvbmFsIH0gPSBkeW5hbWljR3JvdXBzW3BhcmFtXTtcclxuICAgICAgICAvLyBzdXBwb3J0IHNpbmdsZS1sZXZlbCBjYXRjaC1hbGxcclxuICAgICAgICAvLyBUT0RPOiBtb3JlIHJvYnVzdCBoYW5kbGluZyBmb3IgdXNlci1lcnJvciAocGFzc2luZyBgL2ApXHJcbiAgICAgICAgbGV0IHJlcGxhY2VkID0gXCJbXCIgKyAocmVwZWF0ID8gXCIuLi5cIiA6IFwiXCIpICsgcGFyYW0gKyBcIl1cIjtcclxuICAgICAgICBpZiAob3B0aW9uYWwpIHtcclxuICAgICAgICAgICAgcmVwbGFjZWQgPSAoIXZhbHVlID8gXCIvXCIgOiBcIlwiKSArIFwiW1wiICsgcmVwbGFjZWQgKyBcIl1cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGVhdCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlID0gW1xyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIChvcHRpb25hbCB8fCBwYXJhbSBpbiBkeW5hbWljTWF0Y2hlcykgJiYgLy8gSW50ZXJwb2xhdGUgZ3JvdXAgaW50byBkYXRhIFVSTCBpZiBwcmVzZW50XHJcbiAgICAgICAgKGludGVycG9sYXRlZFJvdXRlID0gaW50ZXJwb2xhdGVkUm91dGUucmVwbGFjZShyZXBsYWNlZCwgcmVwZWF0ID8gdmFsdWUubWFwKC8vIHRoZXNlIHZhbHVlcyBzaG91bGQgYmUgZnVsbHkgZW5jb2RlZCBpbnN0ZWFkIG9mIGp1c3RcclxuICAgICAgICAvLyBwYXRoIGRlbGltaXRlciBlc2NhcGVkIHNpbmNlIHRoZXkgYXJlIGJlaW5nIGluc2VydGVkXHJcbiAgICAgICAgLy8gaW50byB0aGUgVVJMIGFuZCB3ZSBleHBlY3QgVVJMIGVuY29kZWQgc2VnbWVudHNcclxuICAgICAgICAvLyB3aGVuIHBhcnNpbmcgZHluYW1pYyByb3V0ZSBwYXJhbXNcclxuICAgICAgICAoc2VnbWVudCk9PmVuY29kZVVSSUNvbXBvbmVudChzZWdtZW50KSkuam9pbihcIi9cIikgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKSB8fCBcIi9cIik7XHJcbiAgICB9KSkge1xyXG4gICAgICAgIGludGVycG9sYXRlZFJvdXRlID0gXCJcIiAvLyBkaWQgbm90IHNhdGlzZnkgYWxsIHJlcXVpcmVtZW50c1xyXG4gICAgICAgIDtcclxuICAgIC8vIG4uYi4gV2UgaWdub3JlIHRoaXMgZXJyb3IgYmVjYXVzZSB3ZSBoYW5kbGUgd2FybmluZyBmb3IgdGhpcyBjYXNlIGluXHJcbiAgICAvLyBkZXZlbG9wbWVudCBpbiB0aGUgYDxMaW5rPmAgY29tcG9uZW50IGRpcmVjdGx5LlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgcmVzdWx0OiBpbnRlcnBvbGF0ZWRSb3V0ZVxyXG4gICAgfTtcclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJwb2xhdGUtYXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImludGVycG9sYXRlQXMiLCJfcm91dGVtYXRjaGVyIiwicmVxdWlyZSIsIl9yb3V0ZXJlZ2V4Iiwicm91dGUiLCJhc1BhdGhuYW1lIiwicXVlcnkiLCJpbnRlcnBvbGF0ZWRSb3V0ZSIsImR5bmFtaWNSZWdleCIsImdldFJvdXRlUmVnZXgiLCJkeW5hbWljR3JvdXBzIiwiZ3JvdXBzIiwiZHluYW1pY01hdGNoZXMiLCJnZXRSb3V0ZU1hdGNoZXIiLCJwYXJhbXMiLCJrZXlzIiwiZXZlcnkiLCJwYXJhbSIsInJlcGVhdCIsIm9wdGlvbmFsIiwicmVwbGFjZWQiLCJBcnJheSIsImlzQXJyYXkiLCJyZXBsYWNlIiwibWFwIiwic2VnbWVudCIsImVuY29kZVVSSUNvbXBvbmVudCIsImpvaW4iLCJyZXN1bHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js": /*!**********************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***! \**********************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("// Identify /[param]/ in route string\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\nfunction isDynamicRoute(route) {\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxxQ0FBcUM7QUFDeEI7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtEQUFpRDtJQUM3Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGFBQWE7QUFDbkIsU0FBU0QsZUFBZUUsS0FBSztJQUN6QixPQUFPRCxXQUFXRSxJQUFJLENBQUNEO0FBQzNCLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcz80NmY5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIElkZW50aWZ5IC9bcGFyYW1dLyBpbiByb3V0ZSBzdHJpbmdcclxuXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xyXG4gICAgdmFsdWU6IHRydWVcclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRHluYW1pY1JvdXRlXCIsIHtcclxuICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBpc0R5bmFtaWNSb3V0ZTtcclxuICAgIH1cclxufSk7XHJcbmNvbnN0IFRFU1RfUk9VVEUgPSAvXFwvXFxbW14vXSs/XFxdKD89XFwvfCQpLztcclxuZnVuY3Rpb24gaXNEeW5hbWljUm91dGUocm91dGUpIHtcclxuICAgIHJldHVybiBURVNUX1JPVVRFLnRlc3Qocm91dGUpO1xyXG59XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1keW5hbWljLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpc0R5bmFtaWNSb3V0ZSIsIlRFU1RfUk9VVEUiLCJyb3V0ZSIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js": /*!************************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***! \************************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw4Q0FBNkM7SUFDekNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxTQUFTQyxtQkFBT0EsQ0FBQyxxRkFBYTtBQUNwQyxNQUFNQyxlQUFlRCxtQkFBT0EsQ0FBQyw4R0FBa0M7QUFDL0QsU0FBU0YsV0FBV0ksR0FBRztJQUNuQixnRUFBZ0U7SUFDaEUsSUFBSSxDQUFDLENBQUMsR0FBR0gsT0FBT0ksYUFBYSxFQUFFRCxNQUFNLE9BQU87SUFDNUMsSUFBSTtRQUNBLDREQUE0RDtRQUM1RCxNQUFNRSxpQkFBaUIsQ0FBQyxHQUFHTCxPQUFPTSxpQkFBaUI7UUFDbkQsTUFBTUMsV0FBVyxJQUFJQyxJQUFJTCxLQUFLRTtRQUM5QixPQUFPRSxTQUFTRSxNQUFNLEtBQUtKLGtCQUFrQixDQUFDLEdBQUdILGFBQWFRLFdBQVcsRUFBRUgsU0FBU0ksUUFBUTtJQUNoRyxFQUFFLE9BQU9DLEdBQUc7UUFDUixPQUFPO0lBQ1g7QUFDSixFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWxvY2FsLXVybC5qcz81ZDI4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcclxuICAgIHZhbHVlOiB0cnVlXHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0xvY2FsVVJMXCIsIHtcclxuICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBpc0xvY2FsVVJMO1xyXG4gICAgfVxyXG59KTtcclxuY29uc3QgX3V0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xyXG5jb25zdCBfaGFzYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vY2xpZW50L2hhcy1iYXNlLXBhdGhcIik7XHJcbmZ1bmN0aW9uIGlzTG9jYWxVUkwodXJsKSB7XHJcbiAgICAvLyBwcmV2ZW50IGEgaHlkcmF0aW9uIG1pc21hdGNoIG9uIGhyZWYgZm9yIHVybCB3aXRoIGFuY2hvciByZWZzXHJcbiAgICBpZiAoISgwLCBfdXRpbHMuaXNBYnNvbHV0ZVVybCkodXJsKSkgcmV0dXJuIHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIGFic29sdXRlIHVybHMgY2FuIGJlIGxvY2FsIGlmIHRoZXkgYXJlIG9uIHRoZSBzYW1lIG9yaWdpblxyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uT3JpZ2luID0gKDAsIF91dGlscy5nZXRMb2NhdGlvbk9yaWdpbikoKTtcclxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbk9yaWdpbik7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkLm9yaWdpbiA9PT0gbG9jYXRpb25PcmlnaW4gJiYgKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkocmVzb2x2ZWQucGF0aG5hbWUpO1xyXG4gICAgfSBjYXRjaCAoXykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtbG9jYWwtdXJsLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpc0xvY2FsVVJMIiwiX3V0aWxzIiwicmVxdWlyZSIsIl9oYXNiYXNlcGF0aCIsInVybCIsImlzQWJzb2x1dGVVcmwiLCJsb2NhdGlvbk9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWQiLCJVUkwiLCJvcmlnaW4iLCJoYXNCYXNlUGF0aCIsInBhdGhuYW1lIiwiXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js": /*!****************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/omit.js ***! \****************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n enumerable: true,\n get: function() {\n return omit;\n }\n}));\nfunction omit(object, keys) {\n const omitted = {};\n Object.keys(object).forEach((key)=>{\n if (!keys.includes(key)) {\n omitted[key] = object[key];\n }\n });\n return omitted;\n} //# sourceMappingURL=omit.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsd0NBQXVDO0lBQ25DSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsS0FBS0MsTUFBTSxFQUFFQyxJQUFJO0lBQ3RCLE1BQU1DLFVBQVUsQ0FBQztJQUNqQlQsT0FBT1EsSUFBSSxDQUFDRCxRQUFRRyxPQUFPLENBQUMsQ0FBQ0M7UUFDekIsSUFBSSxDQUFDSCxLQUFLSSxRQUFRLENBQUNELE1BQU07WUFDckJGLE9BQU8sQ0FBQ0UsSUFBSSxHQUFHSixNQUFNLENBQUNJLElBQUk7UUFDOUI7SUFDSjtJQUNBLE9BQU9GO0FBQ1gsRUFFQSxnQ0FBZ0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9vbWl0LmpzP2ZiNzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xyXG4gICAgdmFsdWU6IHRydWVcclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9taXRcIiwge1xyXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgIGdldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG9taXQ7XHJcbiAgICB9XHJcbn0pO1xyXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5cykge1xyXG4gICAgY29uc3Qgb21pdHRlZCA9IHt9O1xyXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChrZXkpPT57XHJcbiAgICAgICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgICAgb21pdHRlZFtrZXldID0gb2JqZWN0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gb21pdHRlZDtcclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b21pdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwib21pdCIsIm9iamVjdCIsImtleXMiLCJvbWl0dGVkIiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js": /*!***********************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/querystring.js ***! \***********************************************************************/ /***/ (function(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 searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n },\n assign: function() {\n return assign;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n searchParams.forEach((value, key)=>{\n if (typeof query[key] === \"undefined\") {\n query[key] = value;\n } else if (Array.isArray(query[key])) {\n query[key].push(value);\n } else {\n query[key] = [\n query[key],\n value\n ];\n }\n });\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === \"string\" || typeof param === \"number\" && !isNaN(param) || typeof param === \"boolean\") {\n return String(param);\n } else {\n return \"\";\n }\n}\nfunction urlQueryToSearchParams(urlQuery) {\n const result = new URLSearchParams();\n Object.entries(urlQuery).forEach((param)=>{\n let [key, value] = param;\n if (Array.isArray(value)) {\n value.forEach((item)=>result.append(key, stringifyUrlQueryParam(item)));\n } else {\n result.set(key, stringifyUrlQueryParam(value));\n }\n });\n return result;\n}\nfunction assign(target) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\n searchParamsList.forEach((searchParams)=>{\n Array.from(searchParams.keys()).forEach((key)=>target.delete(key));\n searchParams.forEach((value, key)=>target.append(key, value));\n });\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLHdCQUF3QjtRQUNwQixPQUFPQTtJQUNYO0lBQ0FDLHdCQUF3QjtRQUNwQixPQUFPQTtJQUNYO0lBQ0FDLFFBQVE7UUFDSixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxTQUFTRix1QkFBdUJTLFlBQVk7SUFDeEMsTUFBTUMsUUFBUSxDQUFDO0lBQ2ZELGFBQWFFLE9BQU8sQ0FBQyxDQUFDYixPQUFPYztRQUN6QixJQUFJLE9BQU9GLEtBQUssQ0FBQ0UsSUFBSSxLQUFLLGFBQWE7WUFDbkNGLEtBQUssQ0FBQ0UsSUFBSSxHQUFHZDtRQUNqQixPQUFPLElBQUllLE1BQU1DLE9BQU8sQ0FBQ0osS0FBSyxDQUFDRSxJQUFJLEdBQUc7WUFDbENGLEtBQUssQ0FBQ0UsSUFBSSxDQUFDRyxJQUFJLENBQUNqQjtRQUNwQixPQUFPO1lBQ0hZLEtBQUssQ0FBQ0UsSUFBSSxHQUFHO2dCQUNURixLQUFLLENBQUNFLElBQUk7Z0JBQ1ZkO2FBQ0g7UUFDTDtJQUNKO0lBQ0EsT0FBT1k7QUFDWDtBQUNBLFNBQVNNLHVCQUF1QkMsS0FBSztJQUNqQyxJQUFJLE9BQU9BLFVBQVUsWUFBWSxPQUFPQSxVQUFVLFlBQVksQ0FBQ0MsTUFBTUQsVUFBVSxPQUFPQSxVQUFVLFdBQVc7UUFDdkcsT0FBT0UsT0FBT0Y7SUFDbEIsT0FBTztRQUNILE9BQU87SUFDWDtBQUNKO0FBQ0EsU0FBU2hCLHVCQUF1Qm1CLFFBQVE7SUFDcEMsTUFBTUMsU0FBUyxJQUFJQztJQUNuQjNCLE9BQU80QixPQUFPLENBQUNILFVBQVVULE9BQU8sQ0FBQyxDQUFDTTtRQUM5QixJQUFJLENBQUNMLEtBQUtkLE1BQU0sR0FBR21CO1FBQ25CLElBQUlKLE1BQU1DLE9BQU8sQ0FBQ2hCLFFBQVE7WUFDdEJBLE1BQU1hLE9BQU8sQ0FBQyxDQUFDYSxPQUFPSCxPQUFPSSxNQUFNLENBQUNiLEtBQUtJLHVCQUF1QlE7UUFDcEUsT0FBTztZQUNISCxPQUFPSyxHQUFHLENBQUNkLEtBQUtJLHVCQUF1QmxCO1FBQzNDO0lBQ0o7SUFDQSxPQUFPdUI7QUFDWDtBQUNBLFNBQVNuQixPQUFPRSxNQUFNO0lBQ2xCLElBQUksSUFBSXVCLE9BQU9DLFVBQVVDLE1BQU0sRUFBRUMsbUJBQW1CLElBQUlqQixNQUFNYyxPQUFPLElBQUlBLE9BQU8sSUFBSSxJQUFJSSxPQUFPLEdBQUdBLE9BQU9KLE1BQU1JLE9BQU87UUFDbEhELGdCQUFnQixDQUFDQyxPQUFPLEVBQUUsR0FBR0gsU0FBUyxDQUFDRyxLQUFLO0lBQ2hEO0lBQ0FELGlCQUFpQm5CLE9BQU8sQ0FBQyxDQUFDRjtRQUN0QkksTUFBTW1CLElBQUksQ0FBQ3ZCLGFBQWF3QixJQUFJLElBQUl0QixPQUFPLENBQUMsQ0FBQ0MsTUFBTVIsT0FBTzhCLE1BQU0sQ0FBQ3RCO1FBQzdESCxhQUFhRSxPQUFPLENBQUMsQ0FBQ2IsT0FBT2MsTUFBTVIsT0FBT3FCLE1BQU0sQ0FBQ2IsS0FBS2Q7SUFDMUQ7SUFDQSxPQUFPTTtBQUNYLEVBRUEsdUNBQXVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanM/MDE0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5OiBudWxsLFxyXG4gICAgdXJsUXVlcnlUb1NlYXJjaFBhcmFtczogbnVsbCxcclxuICAgIGFzc2lnbjogbnVsbFxyXG59KTtcclxuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xyXG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxyXG4gICAgfSk7XHJcbn1cclxuX2V4cG9ydChleHBvcnRzLCB7XHJcbiAgICBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gc2VhcmNoUGFyYW1zVG9VcmxRdWVyeTtcclxuICAgIH0sXHJcbiAgICB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdXJsUXVlcnlUb1NlYXJjaFBhcmFtcztcclxuICAgIH0sXHJcbiAgICBhc3NpZ246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBhc3NpZ247XHJcbiAgICB9XHJcbn0pO1xyXG5mdW5jdGlvbiBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KHNlYXJjaFBhcmFtcykge1xyXG4gICAgY29uc3QgcXVlcnkgPSB7fTtcclxuICAgIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KT0+e1xyXG4gICAgICAgIGlmICh0eXBlb2YgcXVlcnlba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICBxdWVyeVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5W2tleV0pKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5W2tleV0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlba2V5XSA9IFtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5W2tleV0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHF1ZXJ5O1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0ocGFyYW0pIHtcclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHBhcmFtID09PSBcIm51bWJlclwiICYmICFpc05hTihwYXJhbSkgfHwgdHlwZW9mIHBhcmFtID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHVybFF1ZXJ5KSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XHJcbiAgICBPYmplY3QuZW50cmllcyh1cmxRdWVyeSkuZm9yRWFjaCgocGFyYW0pPT57XHJcbiAgICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IHBhcmFtO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChpdGVtKT0+cmVzdWx0LmFwcGVuZChrZXksIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0oaXRlbSkpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgc3RyaW5naWZ5VXJsUXVlcnlQYXJhbSh2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XHJcbiAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzZWFyY2hQYXJhbXNMaXN0ID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xyXG4gICAgICAgIHNlYXJjaFBhcmFtc0xpc3RbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xyXG4gICAgfVxyXG4gICAgc2VhcmNoUGFyYW1zTGlzdC5mb3JFYWNoKChzZWFyY2hQYXJhbXMpPT57XHJcbiAgICAgICAgQXJyYXkuZnJvbShzZWFyY2hQYXJhbXMua2V5cygpKS5mb3JFYWNoKChrZXkpPT50YXJnZXQuZGVsZXRlKGtleSkpO1xyXG4gICAgICAgIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KT0+dGFyZ2V0LmFwcGVuZChrZXksIHZhbHVlKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXJ5c3RyaW5nLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsInNlYXJjaFBhcmFtc1RvVXJsUXVlcnkiLCJ1cmxRdWVyeVRvU2VhcmNoUGFyYW1zIiwiYXNzaWduIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2VhcmNoUGFyYW1zIiwicXVlcnkiLCJmb3JFYWNoIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsInN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0iLCJwYXJhbSIsImlzTmFOIiwiU3RyaW5nIiwidXJsUXVlcnkiLCJyZXN1bHQiLCJVUkxTZWFyY2hQYXJhbXMiLCJlbnRyaWVzIiwiaXRlbSIsImFwcGVuZCIsInNldCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWFyY2hQYXJhbXNMaXN0IiwiX2tleSIsImZyb20iLCJrZXlzIiwiZGVsZXRlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js": /*!*************************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***! \*************************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n enumerable: true,\n get: function() {\n return getRouteMatcher;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nfunction getRouteMatcher(param) {\n let { re, groups } = param;\n return (pathname)=>{\n const routeMatch = re.exec(pathname);\n if (!routeMatch) {\n return false;\n }\n const decode = (param)=>{\n try {\n return decodeURIComponent(param);\n } catch (_) {\n throw new _utils.DecodeError(\"failed to decode param\");\n }\n };\n const params = {};\n Object.keys(groups).forEach((slugName)=>{\n const g = groups[slugName];\n const m = routeMatch[g.pos];\n if (m !== undefined) {\n params[slugName] = ~m.indexOf(\"/\") ? m.split(\"/\").map((entry)=>decode(entry)) : g.repeat ? [\n decode(m)\n ] : decode(m);\n }\n });\n return params;\n };\n} //# sourceMappingURL=route-matcher.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsbURBQWtEO0lBQzlDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsU0FBU0MsbUJBQU9BLENBQUMscUZBQWE7QUFDcEMsU0FBU0YsZ0JBQWdCRyxLQUFLO0lBQzFCLElBQUksRUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQUUsR0FBR0Y7SUFDckIsT0FBTyxDQUFDRztRQUNKLE1BQU1DLGFBQWFILEdBQUdJLElBQUksQ0FBQ0Y7UUFDM0IsSUFBSSxDQUFDQyxZQUFZO1lBQ2IsT0FBTztRQUNYO1FBQ0EsTUFBTUUsU0FBUyxDQUFDTjtZQUNaLElBQUk7Z0JBQ0EsT0FBT08sbUJBQW1CUDtZQUM5QixFQUFFLE9BQU9RLEdBQUc7Z0JBQ1IsTUFBTSxJQUFJVixPQUFPVyxXQUFXLENBQUM7WUFDakM7UUFDSjtRQUNBLE1BQU1DLFNBQVMsQ0FBQztRQUNoQm5CLE9BQU9vQixJQUFJLENBQUNULFFBQVFVLE9BQU8sQ0FBQyxDQUFDQztZQUN6QixNQUFNQyxJQUFJWixNQUFNLENBQUNXLFNBQVM7WUFDMUIsTUFBTUUsSUFBSVgsVUFBVSxDQUFDVSxFQUFFRSxHQUFHLENBQUM7WUFDM0IsSUFBSUQsTUFBTUUsV0FBVztnQkFDakJQLE1BQU0sQ0FBQ0csU0FBUyxHQUFHLENBQUNFLEVBQUVHLE9BQU8sQ0FBQyxPQUFPSCxFQUFFSSxLQUFLLENBQUMsS0FBS0MsR0FBRyxDQUFDLENBQUNDLFFBQVFmLE9BQU9lLFVBQVVQLEVBQUVRLE1BQU0sR0FBRztvQkFDdkZoQixPQUFPUztpQkFDVixHQUFHVCxPQUFPUztZQUNmO1FBQ0o7UUFDQSxPQUFPTDtJQUNYO0FBQ0osRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1tYXRjaGVyLmpzP2M4NmMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xyXG4gICAgdmFsdWU6IHRydWVcclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFJvdXRlTWF0Y2hlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gZ2V0Um91dGVNYXRjaGVyO1xyXG4gICAgfVxyXG59KTtcclxuY29uc3QgX3V0aWxzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xyXG5mdW5jdGlvbiBnZXRSb3V0ZU1hdGNoZXIocGFyYW0pIHtcclxuICAgIGxldCB7IHJlLCBncm91cHMgfSA9IHBhcmFtO1xyXG4gICAgcmV0dXJuIChwYXRobmFtZSk9PntcclxuICAgICAgICBjb25zdCByb3V0ZU1hdGNoID0gcmUuZXhlYyhwYXRobmFtZSk7XHJcbiAgICAgICAgaWYgKCFyb3V0ZU1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVjb2RlID0gKHBhcmFtKT0+e1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXJhbSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbHMuRGVjb2RlRXJyb3IoXCJmYWlsZWQgdG8gZGVjb2RlIHBhcmFtXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goKHNsdWdOYW1lKT0+e1xyXG4gICAgICAgICAgICBjb25zdCBnID0gZ3JvdXBzW3NsdWdOYW1lXTtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJvdXRlTWF0Y2hbZy5wb3NdO1xyXG4gICAgICAgICAgICBpZiAobSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXNbc2x1Z05hbWVdID0gfm0uaW5kZXhPZihcIi9cIikgPyBtLnNwbGl0KFwiL1wiKS5tYXAoKGVudHJ5KT0+ZGVjb2RlKGVudHJ5KSkgOiBnLnJlcGVhdCA/IFtcclxuICAgICAgICAgICAgICAgICAgICBkZWNvZGUobSlcclxuICAgICAgICAgICAgICAgIF0gOiBkZWNvZGUobSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGUtbWF0Y2hlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0Um91dGVNYXRjaGVyIiwiX3V0aWxzIiwicmVxdWlyZSIsInBhcmFtIiwicmUiLCJncm91cHMiLCJwYXRobmFtZSIsInJvdXRlTWF0Y2giLCJleGVjIiwiZGVjb2RlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiXyIsIkRlY29kZUVycm9yIiwicGFyYW1zIiwia2V5cyIsImZvckVhY2giLCJzbHVnTmFtZSIsImciLCJtIiwicG9zIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsInNwbGl0IiwibWFwIiwiZW50cnkiLCJyZXBlYXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js": /*!***********************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/route-regex.js ***! \***********************************************************************/ /***/ (function(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 getRouteRegex: function() {\n return getRouteRegex;\n },\n getNamedRouteRegex: function() {\n return getNamedRouteRegex;\n },\n getNamedMiddlewareRegex: function() {\n return getNamedMiddlewareRegex;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst NEXT_QUERY_PARAM_PREFIX = \"nxtP\";\nconst NEXT_INTERCEPTION_MARKER_PREFIX = \"nxtI\";\n/**\r\n * Parses a given parameter from a route to a data structure that can be used\r\n * to generate the parametrized route. Examples:\r\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\r\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\r\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\r\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\r\n */ function parseParameter(param) {\n const optional = param.startsWith(\"[\") && param.endsWith(\"]\");\n if (optional) {\n param = param.slice(1, -1);\n }\n const repeat = param.startsWith(\"...\");\n if (repeat) {\n param = param.slice(3);\n }\n return {\n key: param,\n repeat,\n optional\n };\n}\nfunction getParametrizedRoute(route) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const groups = {};\n let groupIndex = 1;\n return {\n parameterizedRoute: segments.map((segment)=>{\n const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (markerMatch && paramMatches) {\n const { key, optional, repeat } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\";\n } else if (paramMatches) {\n const { key, repeat, optional } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return repeat ? optional ? \"(?:/(.+?))?\" : \"/(.+?)\" : \"/([^/]+?)\";\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n groups\n };\n}\nfunction getRouteRegex(normalizedRoute) {\n const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute);\n return {\n re: new RegExp(\"^\" + parameterizedRoute + \"(?:/)?$\"),\n groups: groups\n };\n}\n/**\r\n * Builds a function to generate a minimal routeKey using only a-z and minimal\r\n * number of characters.\r\n */ function buildGetSafeRouteKey() {\n let i = 0;\n return ()=>{\n let routeKey = \"\";\n let j = ++i;\n while(j > 0){\n routeKey += String.fromCharCode(97 + (j - 1) % 26);\n j = Math.floor((j - 1) / 26);\n }\n return routeKey;\n };\n}\nfunction getSafeKeyFromSegment(param) {\n let { getSafeRouteKey, segment, routeKeys, keyPrefix } = param;\n const { key, optional, repeat } = parseParameter(segment);\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, \"\");\n if (keyPrefix) {\n cleanedKey = \"\" + keyPrefix + cleanedKey;\n }\n let invalidKey = false;\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true;\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true;\n }\n if (invalidKey) {\n cleanedKey = getSafeRouteKey();\n }\n if (keyPrefix) {\n routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n } else {\n routeKeys[cleanedKey] = \"\" + key;\n }\n return repeat ? optional ? \"(?:/(?<\" + cleanedKey + \">.+?))?\" : \"/(?<\" + cleanedKey + \">.+?)\" : \"/(?<\" + cleanedKey + \">[^/]+?)\";\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const getSafeRouteKey = buildGetSafeRouteKey();\n const routeKeys = {};\n return {\n namedParameterizedRoute: segments.map((segment)=>{\n const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (hasInterceptionMarker && paramMatches) {\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n });\n } else if (paramMatches) {\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n });\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n routeKeys\n };\n}\nfunction getNamedRouteRegex(normalizedRoute, prefixRouteKey) {\n const result = getNamedParametrizedRoute(normalizedRoute, prefixRouteKey);\n return {\n ...getRouteRegex(normalizedRoute),\n namedRegex: \"^\" + result.namedParameterizedRoute + \"(?:/)?$\",\n routeKeys: result.routeKeys\n };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n const { parameterizedRoute } = getParametrizedRoute(normalizedRoute);\n const { catchAll = true } = options;\n if (parameterizedRoute === \"/\") {\n let catchAllRegex = catchAll ? \".*\" : \"\";\n return {\n namedRegex: \"^/\" + catchAllRegex + \"$\"\n };\n }\n const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false);\n let catchAllGroupedRegex = catchAll ? \"(?:(/.*)?)\" : \"\";\n return {\n namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n };\n} //# sourceMappingURL=route-regex.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLGVBQWU7UUFDWCxPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxzQkFBc0JDLG1CQUFPQSxDQUFDLHdKQUF1RDtBQUMzRixNQUFNQyxnQkFBZ0JELG1CQUFPQSxDQUFDLHFHQUFxQjtBQUNuRCxNQUFNRSx1QkFBdUJGLG1CQUFPQSxDQUFDLDhIQUF5QjtBQUM5RCxNQUFNRywwQkFBMEI7QUFDaEMsTUFBTUMsa0NBQWtDO0FBQ3hDOzs7Ozs7O0NBT0MsR0FBRyxTQUFTQyxlQUFlQyxLQUFLO0lBQzdCLE1BQU1DLFdBQVdELE1BQU1FLFVBQVUsQ0FBQyxRQUFRRixNQUFNRyxRQUFRLENBQUM7SUFDekQsSUFBSUYsVUFBVTtRQUNWRCxRQUFRQSxNQUFNSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzVCO0lBQ0EsTUFBTUMsU0FBU0wsTUFBTUUsVUFBVSxDQUFDO0lBQ2hDLElBQUlHLFFBQVE7UUFDUkwsUUFBUUEsTUFBTUksS0FBSyxDQUFDO0lBQ3hCO0lBQ0EsT0FBTztRQUNIRSxLQUFLTjtRQUNMSztRQUNBSjtJQUNKO0FBQ0o7QUFDQSxTQUFTTSxxQkFBcUJDLEtBQUs7SUFD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QkFBdUIsR0FBRztRQUNuRFYsV0FBV2UsT0FBT2YsU0FBUztJQUMvQjtBQUNKO0FBQ0EsU0FBU3JELHdCQUF3QndDLGVBQWUsRUFBRThCLE9BQU87SUFDckQsTUFBTSxFQUFFMUMsa0JBQWtCLEVBQUUsR0FBR1AscUJBQXFCbUI7SUFDcEQsTUFBTSxFQUFFK0IsV0FBVyxJQUFJLEVBQUUsR0FBR0Q7SUFDNUIsSUFBSTFDLHVCQUF1QixLQUFLO1FBQzVCLElBQUk0QyxnQkFBZ0JELFdBQVcsT0FBTztRQUN0QyxPQUFPO1lBQ0hGLFlBQVksT0FBT0csZ0JBQWdCO1FBQ3ZDO0lBQ0o7SUFDQSxNQUFNLEVBQUVULHVCQUF1QixFQUFFLEdBQUdGLDBCQUEwQnJCLGlCQUFpQjtJQUMvRSxJQUFJaUMsdUJBQXVCRixXQUFXLGVBQWU7SUFDckQsT0FBTztRQUNIRixZQUFZLE1BQU1OLDBCQUEwQlUsdUJBQXVCO0lBQ3ZFO0FBQ0osRUFFQSx1Q0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleC5qcz9lYWMyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcclxuICAgIHZhbHVlOiB0cnVlXHJcbn0pO1xyXG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIGdldFJvdXRlUmVnZXg6IG51bGwsXHJcbiAgICBnZXROYW1lZFJvdXRlUmVnZXg6IG51bGwsXHJcbiAgICBnZXROYW1lZE1pZGRsZXdhcmVSZWdleDogbnVsbFxyXG59KTtcclxuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xyXG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxyXG4gICAgfSk7XHJcbn1cclxuX2V4cG9ydChleHBvcnRzLCB7XHJcbiAgICBnZXRSb3V0ZVJlZ2V4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gZ2V0Um91dGVSZWdleDtcclxuICAgIH0sXHJcbiAgICBnZXROYW1lZFJvdXRlUmVnZXg6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBnZXROYW1lZFJvdXRlUmVnZXg7XHJcbiAgICB9LFxyXG4gICAgZ2V0TmFtZWRNaWRkbGV3YXJlUmVnZXg6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBnZXROYW1lZE1pZGRsZXdhcmVSZWdleDtcclxuICAgIH1cclxufSk7XHJcbmNvbnN0IF9pbnRlcmNlcHRpb25yb3V0ZXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vc2VydmVyL2Z1dHVyZS9oZWxwZXJzL2ludGVyY2VwdGlvbi1yb3V0ZXNcIik7XHJcbmNvbnN0IF9lc2NhcGVyZWdleHAgPSByZXF1aXJlKFwiLi4vLi4vZXNjYXBlLXJlZ2V4cFwiKTtcclxuY29uc3QgX3JlbW92ZXRyYWlsaW5nc2xhc2ggPSByZXF1aXJlKFwiLi9yZW1vdmUtdHJhaWxpbmctc2xhc2hcIik7XHJcbmNvbnN0IE5FWFRfUVVFUllfUEFSQU1fUFJFRklYID0gXCJueHRQXCI7XHJcbmNvbnN0IE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVggPSBcIm54dElcIjtcclxuLyoqXHJcbiAqIFBhcnNlcyBhIGdpdmVuIHBhcmFtZXRlciBmcm9tIGEgcm91dGUgdG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGNhbiBiZSB1c2VkXHJcbiAqIHRvIGdlbmVyYXRlIHRoZSBwYXJhbWV0cml6ZWQgcm91dGUuIEV4YW1wbGVzOlxyXG4gKiAgIC0gYFsuLi5zbHVnXWAgLT4gYHsga2V5OiAnc2x1ZycsIHJlcGVhdDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfWBcclxuICogICAtIGAuLi5zbHVnYCAtPiBgeyBrZXk6ICdzbHVnJywgcmVwZWF0OiB0cnVlLCBvcHRpb25hbDogZmFsc2UgfWBcclxuICogICAtIGBbZm9vXWAgLT4gYHsga2V5OiAnZm9vJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IHRydWUgfWBcclxuICogICAtIGBiYXJgIC0+IGB7IGtleTogJ2JhcicsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSB9YFxyXG4gKi8gZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW0pIHtcclxuICAgIGNvbnN0IG9wdGlvbmFsID0gcGFyYW0uc3RhcnRzV2l0aChcIltcIikgJiYgcGFyYW0uZW5kc1dpdGgoXCJdXCIpO1xyXG4gICAgaWYgKG9wdGlvbmFsKSB7XHJcbiAgICAgICAgcGFyYW0gPSBwYXJhbS5zbGljZSgxLCAtMSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXBlYXQgPSBwYXJhbS5zdGFydHNXaXRoKFwiLi4uXCIpO1xyXG4gICAgaWYgKHJlcGVhdCkge1xyXG4gICAgICAgIHBhcmFtID0gcGFyYW0uc2xpY2UoMyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGtleTogcGFyYW0sXHJcbiAgICAgICAgcmVwZWF0LFxyXG4gICAgICAgIG9wdGlvbmFsXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldFBhcmFtZXRyaXplZFJvdXRlKHJvdXRlKSB7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShyb3V0ZSkuc2xpY2UoMSkuc3BsaXQoXCIvXCIpO1xyXG4gICAgY29uc3QgZ3JvdXBzID0ge307XHJcbiAgICBsZXQgZ3JvdXBJbmRleCA9IDE7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMubWFwKChzZWdtZW50KT0+e1xyXG4gICAgICAgICAgICBjb25zdCBtYXJrZXJNYXRjaCA9IF9pbnRlcmNlcHRpb25yb3V0ZXMuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtTWF0Y2hlcyA9IHNlZ21lbnQubWF0Y2goL1xcWygoPzpcXFsuKlxcXSl8LispXFxdLykgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcclxuICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICBpZiAobWFya2VyTWF0Y2ggJiYgcGFyYW1NYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGtleSwgb3B0aW9uYWwsIHJlcGVhdCB9ID0gcGFyc2VQYXJhbWV0ZXIocGFyYW1NYXRjaGVzWzFdKTtcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1trZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvczogZ3JvdXBJbmRleCsrLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIi9cIiArICgwLCBfZXNjYXBlcmVnZXhwLmVzY2FwZVN0cmluZ1JlZ2V4cCkobWFya2VyTWF0Y2gpICsgXCIoW14vXSs/KVwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtTWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBrZXksIHJlcGVhdCwgb3B0aW9uYWwgfSA9IHBhcnNlUGFyYW1ldGVyKHBhcmFtTWF0Y2hlc1sxXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cHNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBwb3M6IGdyb3VwSW5kZXgrKyxcclxuICAgICAgICAgICAgICAgICAgICByZXBlYXQsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwZWF0ID8gb3B0aW9uYWwgPyBcIig/Oi8oLis/KSk/XCIgOiBcIi8oLis/KVwiIDogXCIvKFteL10rPylcIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIi9cIiArICgwLCBfZXNjYXBlcmVnZXhwLmVzY2FwZVN0cmluZ1JlZ2V4cCkoc2VnbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5qb2luKFwiXCIpLFxyXG4gICAgICAgIGdyb3Vwc1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXRSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRSb3V0ZSkge1xyXG4gICAgY29uc3QgeyBwYXJhbWV0ZXJpemVkUm91dGUsIGdyb3VwcyB9ID0gZ2V0UGFyYW1ldHJpemVkUm91dGUobm9ybWFsaXplZFJvdXRlKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmU6IG5ldyBSZWdFeHAoXCJeXCIgKyBwYXJhbWV0ZXJpemVkUm91dGUgKyBcIig/Oi8pPyRcIiksXHJcbiAgICAgICAgZ3JvdXBzOiBncm91cHNcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIEJ1aWxkcyBhIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbWluaW1hbCByb3V0ZUtleSB1c2luZyBvbmx5IGEteiBhbmQgbWluaW1hbFxyXG4gKiBudW1iZXIgb2YgY2hhcmFjdGVycy5cclxuICovIGZ1bmN0aW9uIGJ1aWxkR2V0U2FmZVJvdXRlS2V5KCkge1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgbGV0IHJvdXRlS2V5ID0gXCJcIjtcclxuICAgICAgICBsZXQgaiA9ICsraTtcclxuICAgICAgICB3aGlsZShqID4gMCl7XHJcbiAgICAgICAgICAgIHJvdXRlS2V5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoOTcgKyAoaiAtIDEpICUgMjYpO1xyXG4gICAgICAgICAgICBqID0gTWF0aC5mbG9vcigoaiAtIDEpIC8gMjYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm91dGVLZXk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldFNhZmVLZXlGcm9tU2VnbWVudChwYXJhbSkge1xyXG4gICAgbGV0IHsgZ2V0U2FmZVJvdXRlS2V5LCBzZWdtZW50LCByb3V0ZUtleXMsIGtleVByZWZpeCB9ID0gcGFyYW07XHJcbiAgICBjb25zdCB7IGtleSwgb3B0aW9uYWwsIHJlcGVhdCB9ID0gcGFyc2VQYXJhbWV0ZXIoc2VnbWVudCk7XHJcbiAgICAvLyByZXBsYWNlIGFueSBub24td29yZCBjaGFyYWN0ZXJzIHNpbmNlIHRoZXkgY2FuIGJyZWFrXHJcbiAgICAvLyB0aGUgbmFtZWQgcmVnZXhcclxuICAgIGxldCBjbGVhbmVkS2V5ID0ga2V5LnJlcGxhY2UoL1xcVy9nLCBcIlwiKTtcclxuICAgIGlmIChrZXlQcmVmaXgpIHtcclxuICAgICAgICBjbGVhbmVkS2V5ID0gXCJcIiArIGtleVByZWZpeCArIGNsZWFuZWRLZXk7XHJcbiAgICB9XHJcbiAgICBsZXQgaW52YWxpZEtleSA9IGZhbHNlO1xyXG4gICAgLy8gY2hlY2sgaWYgdGhlIGtleSBpcyBzdGlsbCBpbnZhbGlkIGFuZCBmYWxsYmFjayB0byB1c2luZyBhIGtub3duXHJcbiAgICAvLyBzYWZlIGtleVxyXG4gICAgaWYgKGNsZWFuZWRLZXkubGVuZ3RoID09PSAwIHx8IGNsZWFuZWRLZXkubGVuZ3RoID4gMzApIHtcclxuICAgICAgICBpbnZhbGlkS2V5ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICghaXNOYU4ocGFyc2VJbnQoY2xlYW5lZEtleS5zbGljZSgwLCAxKSkpKSB7XHJcbiAgICAgICAgaW52YWxpZEtleSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoaW52YWxpZEtleSkge1xyXG4gICAgICAgIGNsZWFuZWRLZXkgPSBnZXRTYWZlUm91dGVLZXkoKTtcclxuICAgIH1cclxuICAgIGlmIChrZXlQcmVmaXgpIHtcclxuICAgICAgICByb3V0ZUtleXNbY2xlYW5lZEtleV0gPSBcIlwiICsga2V5UHJlZml4ICsga2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByb3V0ZUtleXNbY2xlYW5lZEtleV0gPSBcIlwiICsga2V5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcGVhdCA/IG9wdGlvbmFsID8gXCIoPzovKD88XCIgKyBjbGVhbmVkS2V5ICsgXCI+Lis/KSk/XCIgOiBcIi8oPzxcIiArIGNsZWFuZWRLZXkgKyBcIj4uKz8pXCIgOiBcIi8oPzxcIiArIGNsZWFuZWRLZXkgKyBcIj5bXi9dKz8pXCI7XHJcbn1cclxuZnVuY3Rpb24gZ2V0TmFtZWRQYXJhbWV0cml6ZWRSb3V0ZShyb3V0ZSwgcHJlZml4Um91dGVLZXlzKSB7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShyb3V0ZSkuc2xpY2UoMSkuc3BsaXQoXCIvXCIpO1xyXG4gICAgY29uc3QgZ2V0U2FmZVJvdXRlS2V5ID0gYnVpbGRHZXRTYWZlUm91dGVLZXkoKTtcclxuICAgIGNvbnN0IHJvdXRlS2V5cyA9IHt9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMubWFwKChzZWdtZW50KT0+e1xyXG4gICAgICAgICAgICBjb25zdCBoYXNJbnRlcmNlcHRpb25NYXJrZXIgPSBfaW50ZXJjZXB0aW9ucm91dGVzLklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLnNvbWUoKG0pPT5zZWdtZW50LnN0YXJ0c1dpdGgobSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbU1hdGNoZXMgPSBzZWdtZW50Lm1hdGNoKC9cXFsoKD86XFxbLipcXF0pfC4rKVxcXS8pIC8vIENoZWNrIGZvciBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgIDtcclxuICAgICAgICAgICAgaWYgKGhhc0ludGVyY2VwdGlvbk1hcmtlciAmJiBwYXJhbU1hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRTYWZlS2V5RnJvbVNlZ21lbnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGdldFNhZmVSb3V0ZUtleSxcclxuICAgICAgICAgICAgICAgICAgICBzZWdtZW50OiBwYXJhbU1hdGNoZXNbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgcm91dGVLZXlzLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleVByZWZpeDogcHJlZml4Um91dGVLZXlzID8gTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1NYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRTYWZlUm91dGVLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudDogcGFyYW1NYXRjaGVzWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlS2V5cyxcclxuICAgICAgICAgICAgICAgICAgICBrZXlQcmVmaXg6IHByZWZpeFJvdXRlS2V5cyA/IE5FWFRfUVVFUllfUEFSQU1fUFJFRklYIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIi9cIiArICgwLCBfZXNjYXBlcmVnZXhwLmVzY2FwZVN0cmluZ1JlZ2V4cCkoc2VnbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5qb2luKFwiXCIpLFxyXG4gICAgICAgIHJvdXRlS2V5c1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXROYW1lZFJvdXRlUmVnZXgobm9ybWFsaXplZFJvdXRlLCBwcmVmaXhSb3V0ZUtleSkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0TmFtZWRQYXJhbWV0cml6ZWRSb3V0ZShub3JtYWxpemVkUm91dGUsIHByZWZpeFJvdXRlS2V5KTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZ2V0Um91dGVSZWdleChub3JtYWxpemVkUm91dGUpLFxyXG4gICAgICAgIG5hbWVkUmVnZXg6IFwiXlwiICsgcmVzdWx0Lm5hbWVkUGFyYW1ldGVyaXplZFJvdXRlICsgXCIoPzovKT8kXCIsXHJcbiAgICAgICAgcm91dGVLZXlzOiByZXN1bHQucm91dGVLZXlzXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldE5hbWVkTWlkZGxld2FyZVJlZ2V4KG5vcm1hbGl6ZWRSb3V0ZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgeyBwYXJhbWV0ZXJpemVkUm91dGUgfSA9IGdldFBhcmFtZXRyaXplZFJvdXRlKG5vcm1hbGl6ZWRSb3V0ZSk7XHJcbiAgICBjb25zdCB7IGNhdGNoQWxsID0gdHJ1ZSB9ID0gb3B0aW9ucztcclxuICAgIGlmIChwYXJhbWV0ZXJpemVkUm91dGUgPT09IFwiL1wiKSB7XHJcbiAgICAgICAgbGV0IGNhdGNoQWxsUmVnZXggPSBjYXRjaEFsbCA/IFwiLipcIiA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZWRSZWdleDogXCJeL1wiICsgY2F0Y2hBbGxSZWdleCArIFwiJFwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgbmFtZWRQYXJhbWV0ZXJpemVkUm91dGUgfSA9IGdldE5hbWVkUGFyYW1ldHJpemVkUm91dGUobm9ybWFsaXplZFJvdXRlLCBmYWxzZSk7XHJcbiAgICBsZXQgY2F0Y2hBbGxHcm91cGVkUmVnZXggPSBjYXRjaEFsbCA/IFwiKD86KC8uKik/KVwiIDogXCJcIjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZWRSZWdleDogXCJeXCIgKyBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZSArIGNhdGNoQWxsR3JvdXBlZFJlZ2V4ICsgXCIkXCJcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJvdXRlLXJlZ2V4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImdldFJvdXRlUmVnZXgiLCJnZXROYW1lZFJvdXRlUmVnZXgiLCJnZXROYW1lZE1pZGRsZXdhcmVSZWdleCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcmNlcHRpb25yb3V0ZXMiLCJyZXF1aXJlIiwiX2VzY2FwZXJlZ2V4cCIsIl9yZW1vdmV0cmFpbGluZ3NsYXNoIiwiTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVgiLCJORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYIiwicGFyc2VQYXJhbWV0ZXIiLCJwYXJhbSIsIm9wdGlvbmFsIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2xpY2UiLCJyZXBlYXQiLCJrZXkiLCJnZXRQYXJhbWV0cml6ZWRSb3V0ZSIsInJvdXRlIiwic2VnbWVudHMiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwic3BsaXQiLCJncm91cHMiLCJncm91cEluZGV4IiwicGFyYW1ldGVyaXplZFJvdXRlIiwibWFwIiwic2VnbWVudCIsIm1hcmtlck1hdGNoIiwiSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMiLCJmaW5kIiwibSIsInBhcmFtTWF0Y2hlcyIsIm1hdGNoIiwicG9zIiwiZXNjYXBlU3RyaW5nUmVnZXhwIiwiam9pbiIsIm5vcm1hbGl6ZWRSb3V0ZSIsInJlIiwiUmVnRXhwIiwiYnVpbGRHZXRTYWZlUm91dGVLZXkiLCJpIiwicm91dGVLZXkiLCJqIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiTWF0aCIsImZsb29yIiwiZ2V0U2FmZUtleUZyb21TZWdtZW50IiwiZ2V0U2FmZVJvdXRlS2V5Iiwicm91dGVLZXlzIiwia2V5UHJlZml4IiwiY2xlYW5lZEtleSIsInJlcGxhY2UiLCJpbnZhbGlkS2V5IiwibGVuZ3RoIiwiaXNOYU4iLCJwYXJzZUludCIsImdldE5hbWVkUGFyYW1ldHJpemVkUm91dGUiLCJwcmVmaXhSb3V0ZUtleXMiLCJuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZSIsImhhc0ludGVyY2VwdGlvbk1hcmtlciIsInNvbWUiLCJ1bmRlZmluZWQiLCJwcmVmaXhSb3V0ZUtleSIsInJlc3VsdCIsIm5hbWVkUmVnZXgiLCJvcHRpb25zIiwiY2F0Y2hBbGwiLCJjYXRjaEFsbFJlZ2V4IiwiY2F0Y2hBbGxHcm91cGVkUmVnZXgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js": /*!*************************************************************************!*\ !*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***! \*************************************************************************/ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSortedRoutes\", ({\n enumerable: true,\n get: function() {\n return getSortedRoutes;\n }\n}));\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split(\"/\").filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = \"/\";\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[]\"), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[...]\"), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[[...]]\"), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get(\"[]\")._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === \"/\" ? \"/\" : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").');\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get(\"[...]\")._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get(\"[[...]]\")._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw new Error(\"Catch-all must be the last part of the URL.\");\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith(\"[\") && nextSegment.endsWith(\"]\")) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith(\"[\") && segmentName.endsWith(\"]\")) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith(\"...\")) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith(\"[\") || segmentName.endsWith(\"]\")) {\n throw new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\");\n }\n if (segmentName.startsWith(\".\")) {\n throw new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\");\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\");\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path');\n }\n if (slug.replace(/\\W/g, \"\") === nextSegment.replace(/\\W/g, \"\")) {\n throw new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path');\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).');\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = \"[[...]]\";\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").');\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = \"[...]\";\n }\n } else {\n if (isOptional) {\n throw new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").');\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = \"[]\";\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n} //# sourceMappingURL=sorted-routes.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvc29ydGVkLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsbURBQWtEO0lBQzlDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUM7SUFDRkMsT0FBT0MsT0FBTyxFQUFFO1FBQ1osSUFBSSxDQUFDQyxPQUFPLENBQUNELFFBQVFFLEtBQUssQ0FBQyxLQUFLQyxNQUFNLENBQUNDLFVBQVUsRUFBRSxFQUFFO0lBQ3pEO0lBQ0FDLFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQ0MsT0FBTztJQUN2QjtJQUNBQSxRQUFRQyxNQUFNLEVBQUU7UUFDWixJQUFJQSxXQUFXLEtBQUssR0FBR0EsU0FBUztRQUNoQyxNQUFNQyxnQkFBZ0I7ZUFDZixJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSTtTQUN4QixDQUFDQyxJQUFJO1FBQ04sSUFBSSxJQUFJLENBQUNDLFFBQVEsS0FBSyxNQUFNO1lBQ3hCSixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxPQUFPO1FBQ3REO1FBQ0EsSUFBSSxJQUFJLENBQUNDLFlBQVksS0FBSyxNQUFNO1lBQzVCUCxjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxVQUFVO1FBQ3pEO1FBQ0EsSUFBSSxJQUFJLENBQUNFLG9CQUFvQixLQUFLLE1BQU07WUFDcENSLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLFlBQVk7UUFDM0Q7UUFDQSxNQUFNRyxTQUFTVCxjQUFjVSxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxJQUFJLENBQUNWLFFBQVEsQ0FBQ2IsR0FBRyxDQUFDdUIsR0FBR2IsT0FBTyxDQUFDLEtBQUtDLFNBQVNZLElBQUksTUFBTUMsTUFBTSxDQUFD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RkFBaUY7UUFDakYsSUFBSSxDQUFDLElBQUksQ0FBQ3hCLFFBQVEsQ0FBQ29DLEdBQUcsQ0FBQ1osY0FBYztZQUNqQyxJQUFJLENBQUN4QixRQUFRLENBQUNxQyxHQUFHLENBQUNiLGFBQWEsSUFBSW5DO1FBQ3ZDO1FBQ0EsSUFBSSxDQUFDVyxRQUFRLENBQUNiLEdBQUcsQ0FBQ3FDLGFBQWFoQyxPQUFPLENBQUM0QixTQUFTSCxLQUFLLENBQUMsSUFBSUksV0FBV0M7SUFDekU7SUFDQWdCLGFBQWE7UUFDVCxJQUFJLENBQUN2QixXQUFXLEdBQUc7UUFDbkIsSUFBSSxDQUFDZixRQUFRLEdBQUcsSUFBSXVDO1FBQ3BCLElBQUksQ0FBQ3BDLFFBQVEsR0FBRztRQUNoQixJQUFJLENBQUNHLFlBQVksR0FBRztRQUNwQixJQUFJLENBQUNDLG9CQUFvQixHQUFHO0lBQ2hDO0FBQ0o7QUFDQSxTQUFTbkIsZ0JBQWdCb0QsZUFBZTtJQUNwQyxrRkFBa0Y7SUFDbEYsNEVBQTRFO0lBQzVFLDJDQUEyQztJQUMzQyx5RUFBeUU7SUFDekUsMkJBQTJCO0lBQzNCLG9DQUFvQztJQUNwQyw4RUFBOEU7SUFDOUUsd0VBQXdFO0lBQ3hFLGdIQUFnSDtJQUNoSCw0RUFBNEU7SUFDNUUsTUFBTUMsT0FBTyxJQUFJcEQ7SUFDakIsNkZBQTZGO0lBQzdGbUQsZ0JBQWdCUCxPQUFPLENBQUMsQ0FBQ1MsV0FBV0QsS0FBS25ELE1BQU0sQ0FBQ29EO0lBQ2hELDRHQUE0RztJQUM1RyxPQUFPRCxLQUFLN0MsTUFBTTtBQUN0QixFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3NvcnRlZC1yb3V0ZXMuanM/MmY3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U29ydGVkUm91dGVzXCIsIHtcclxuICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBnZXRTb3J0ZWRSb3V0ZXM7XHJcbiAgICB9XHJcbn0pO1xyXG5jbGFzcyBVcmxOb2RlIHtcclxuICAgIGluc2VydCh1cmxQYXRoKSB7XHJcbiAgICAgICAgdGhpcy5faW5zZXJ0KHVybFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSwgW10sIGZhbHNlKTtcclxuICAgIH1cclxuICAgIHNtb29zaCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc21vb3NoKCk7XHJcbiAgICB9XHJcbiAgICBfc21vb3NoKHByZWZpeCkge1xyXG4gICAgICAgIGlmIChwcmVmaXggPT09IHZvaWQgMCkgcHJlZml4ID0gXCIvXCI7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5QYXRocyA9IFtcclxuICAgICAgICAgICAgLi4udGhpcy5jaGlsZHJlbi5rZXlzKClcclxuICAgICAgICBdLnNvcnQoKTtcclxuICAgICAgICBpZiAodGhpcy5zbHVnTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoXCJbXVwiKSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoXCJbLi4uXVwiKSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuUGF0aHMuc3BsaWNlKGNoaWxkcmVuUGF0aHMuaW5kZXhPZihcIltbLi4uXV1cIiksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByb3V0ZXMgPSBjaGlsZHJlblBhdGhzLm1hcCgoYyk9PnRoaXMuY2hpbGRyZW4uZ2V0KGMpLl9zbW9vc2goXCJcIiArIHByZWZpeCArIGMgKyBcIi9cIikpLnJlZHVjZSgocHJldiwgY3Vycik9PltcclxuICAgICAgICAgICAgICAgIC4uLnByZXYsXHJcbiAgICAgICAgICAgICAgICAuLi5jdXJyXHJcbiAgICAgICAgICAgIF0sIFtdKTtcclxuICAgICAgICBpZiAodGhpcy5zbHVnTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByb3V0ZXMucHVzaCguLi50aGlzLmNoaWxkcmVuLmdldChcIltdXCIpLl9zbW9vc2gocHJlZml4ICsgXCJbXCIgKyB0aGlzLnNsdWdOYW1lICsgXCJdL1wiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICBjb25zdCByID0gcHJlZml4ID09PSBcIi9cIiA/IFwiL1wiIDogcHJlZml4LnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IGRlZmluZSBhIHJvdXRlIHdpdGggdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgYSBvcHRpb25hbCBjYXRjaC1hbGwgcm91dGUgKFwiJyArIHIgKyAnXCIgYW5kIFwiJyArIHIgKyBcIltbLi4uXCIgKyB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICsgJ11dXCIpLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvdXRlcy51bnNoaWZ0KHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcm91dGVzLnB1c2goLi4udGhpcy5jaGlsZHJlbi5nZXQoXCJbLi4uXVwiKS5fc21vb3NoKHByZWZpeCArIFwiWy4uLlwiICsgdGhpcy5yZXN0U2x1Z05hbWUgKyBcIl0vXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcm91dGVzLnB1c2goLi4udGhpcy5jaGlsZHJlbi5nZXQoXCJbWy4uLl1dXCIpLl9zbW9vc2gocHJlZml4ICsgXCJbWy4uLlwiICsgdGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSArIFwiXV0vXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvdXRlcztcclxuICAgIH1cclxuICAgIF9pbnNlcnQodXJsUGF0aHMsIHNsdWdOYW1lcywgaXNDYXRjaEFsbCkge1xyXG4gICAgICAgIGlmICh1cmxQYXRocy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0NhdGNoQWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhdGNoLWFsbCBtdXN0IGJlIHRoZSBsYXN0IHBhcnQgb2YgdGhlIFVSTC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRoZSBuZXh0IHNlZ21lbnQgaW4gdGhlIHVybFBhdGhzIGxpc3RcclxuICAgICAgICBsZXQgbmV4dFNlZ21lbnQgPSB1cmxQYXRoc1swXTtcclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2VnbWVudCBtYXRjaGVzIGBbc29tZXRoaW5nXWBcclxuICAgICAgICBpZiAobmV4dFNlZ21lbnQuc3RhcnRzV2l0aChcIltcIikgJiYgbmV4dFNlZ21lbnQuZW5kc1dpdGgoXCJdXCIpKSB7XHJcbiAgICAgICAgICAgIC8vIFN0cmlwIGBbYCBhbmQgYF1gLCBsZWF2aW5nIG9ubHkgYHNvbWV0aGluZ2BcclxuICAgICAgICAgICAgbGV0IHNlZ21lbnROYW1lID0gbmV4dFNlZ21lbnQuc2xpY2UoMSwgLTEpO1xyXG4gICAgICAgICAgICBsZXQgaXNPcHRpb25hbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aChcIltcIikgJiYgc2VnbWVudE5hbWUuZW5kc1dpdGgoXCJdXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTdHJpcCBvcHRpb25hbCBgW2AgYW5kIGBdYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXHJcbiAgICAgICAgICAgICAgICBzZWdtZW50TmFtZSA9IHNlZ21lbnROYW1lLnNsaWNlKDEsIC0xKTtcclxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKFwiLi4uXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTdHJpcCBgLi4uYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXHJcbiAgICAgICAgICAgICAgICBzZWdtZW50TmFtZSA9IHNlZ21lbnROYW1lLnN1YnN0cmluZygzKTtcclxuICAgICAgICAgICAgICAgIGlzQ2F0Y2hBbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKFwiW1wiKSB8fCBzZWdtZW50TmFtZS5lbmRzV2l0aChcIl1cIikpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlZ21lbnQgbmFtZXMgbWF5IG5vdCBzdGFydCBvciBlbmQgd2l0aCBleHRyYSBicmFja2V0cyAoJ1wiICsgc2VnbWVudE5hbWUgKyBcIicpLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlZ21lbnQgbmFtZXMgbWF5IG5vdCBzdGFydCB3aXRoIGVycm9uZW91cyBwZXJpb2RzICgnXCIgKyBzZWdtZW50TmFtZSArIFwiJykuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZVNsdWcocHJldmlvdXNTbHVnLCBuZXh0U2x1Zykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU2x1ZyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpYyBzZWdtZW50IGFscmVhZHkgaGFzIGEgc2x1ZyBidXQgdGhlIHNsdWcgaXMgbm90IGBzb21ldGhpbmdgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBjb2xsaXNpb25zIGxpa2U6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFnZXMvW3Bvc3RdL2luZGV4LmpzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFnZXMvW2lkXS9pbmRleC5qc1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgY3VycmVudGx5IG11bHRpcGxlIGR5bmFtaWMgcGFyYW1zIG9uIHRoZSBzYW1lIHNlZ21lbnQgbGV2ZWwgYXJlIG5vdCBzdXBwb3J0ZWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTbHVnICE9PSBuZXh0U2x1Zykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGVycm9yIHNlZW1zIHRvIGJlIGNvbmZ1c2luZyBmb3IgdXNlcnMsIG5lZWRzIGFuIGVycm9yIGxpbmssIHRoZSBkZXNjcmlwdGlvbiBjYW4gYmUgYmFzZWQgb24gYWJvdmUgY29tbWVudC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCB1c2UgZGlmZmVyZW50IHNsdWcgbmFtZXMgZm9yIHRoZSBzYW1lIGR5bmFtaWMgcGF0aCAoJ1wiICsgcHJldmlvdXNTbHVnICsgXCInICE9PSAnXCIgKyBuZXh0U2x1ZyArIFwiJykuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNsdWdOYW1lcy5mb3JFYWNoKChzbHVnKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzbHVnID09PSBuZXh0U2x1Zykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBzbHVnIG5hbWUgXCInICsgbmV4dFNsdWcgKyAnXCIgcmVwZWF0IHdpdGhpbiBhIHNpbmdsZSBkeW5hbWljIHBhdGgnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNsdWcucmVwbGFjZSgvXFxXL2csIFwiXCIpID09PSBuZXh0U2VnbWVudC5yZXBsYWNlKC9cXFcvZywgXCJcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IGhhdmUgdGhlIHNsdWcgbmFtZXMgXCInICsgc2x1ZyArICdcIiBhbmQgXCInICsgbmV4dFNsdWcgKyAnXCIgZGlmZmVyIG9ubHkgYnkgbm9uLXdvcmQgc3ltYm9scyB3aXRoaW4gYSBzaW5nbGUgZHluYW1pYyBwYXRoJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzbHVnTmFtZXMucHVzaChuZXh0U2x1Zyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzQ2F0Y2hBbGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc09wdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHVzZSBib3RoIGFuIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjYXRjaC1hbGwgcm91dGUgYXQgdGhlIHNhbWUgbGV2ZWwgKFwiWy4uLicgKyB0aGlzLnJlc3RTbHVnTmFtZSArICddXCIgYW5kIFwiJyArIHVybFBhdGhzWzBdICsgJ1wiICkuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNsdWcodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSwgc2VnbWVudE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNsdWdOYW1lIGlzIGtlcHQgYXMgaXQgY2FuIG9ubHkgYmUgb25lIHBhcnRpY3VsYXIgc2x1Z05hbWVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lID0gc2VnbWVudE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV4dFNlZ21lbnQgaXMgb3ZlcndyaXR0ZW4gdG8gW1suLi5dXSBzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSBzb3J0ZWQgc3BlY2lmaWNhbGx5XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFNlZ21lbnQgPSBcIltbLi4uXV1cIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgdXNlIGJvdGggYW4gb3B0aW9uYWwgYW5kIHJlcXVpcmVkIGNhdGNoLWFsbCByb3V0ZSBhdCB0aGUgc2FtZSBsZXZlbCAoXCJbWy4uLicgKyB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICsgJ11dXCIgYW5kIFwiJyArIHVybFBhdGhzWzBdICsgJ1wiKS4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2x1Zyh0aGlzLnJlc3RTbHVnTmFtZSwgc2VnbWVudE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNsdWdOYW1lIGlzIGtlcHQgYXMgaXQgY2FuIG9ubHkgYmUgb25lIHBhcnRpY3VsYXIgc2x1Z05hbWVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RTbHVnTmFtZSA9IHNlZ21lbnROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFsuLi5dIHNvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHNvcnRlZCBzcGVjaWZpY2FsbHlcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U2VnbWVudCA9IFwiWy4uLl1cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc09wdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcHRpb25hbCByb3V0ZSBwYXJhbWV0ZXJzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCAoXCInICsgdXJsUGF0aHNbMF0gKyAnXCIpLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaGFuZGxlU2x1Zyh0aGlzLnNsdWdOYW1lLCBzZWdtZW50TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBzbHVnTmFtZSBpcyBrZXB0IGFzIGl0IGNhbiBvbmx5IGJlIG9uZSBwYXJ0aWN1bGFyIHNsdWdOYW1lXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsdWdOYW1lID0gc2VnbWVudE5hbWU7XHJcbiAgICAgICAgICAgICAgICAvLyBuZXh0U2VnbWVudCBpcyBvdmVyd3JpdHRlbiB0byBbXSBzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSBzb3J0ZWQgc3BlY2lmaWNhbGx5XHJcbiAgICAgICAgICAgICAgICBuZXh0U2VnbWVudCA9IFwiW11cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGlzIFVybE5vZGUgZG9lc24ndCBoYXZlIHRoZSBuZXh0U2VnbWVudCB5ZXQgd2UgY3JlYXRlIGEgbmV3IGNoaWxkIFVybE5vZGVcclxuICAgICAgICBpZiAoIXRoaXMuY2hpbGRyZW4uaGFzKG5leHRTZWdtZW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNldChuZXh0U2VnbWVudCwgbmV3IFVybE5vZGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZ2V0KG5leHRTZWdtZW50KS5faW5zZXJ0KHVybFBhdGhzLnNsaWNlKDEpLCBzbHVnTmFtZXMsIGlzQ2F0Y2hBbGwpO1xyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuc2x1Z05hbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVzdFNsdWdOYW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lID0gbnVsbDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRTb3J0ZWRSb3V0ZXMobm9ybWFsaXplZFBhZ2VzKSB7XHJcbiAgICAvLyBGaXJzdCB0aGUgVXJsTm9kZSBpcyBjcmVhdGVkLCBhbmQgZXZlcnkgVXJsTm9kZSBjYW4gaGF2ZSBvbmx5IDEgZHluYW1pYyBzZWdtZW50XHJcbiAgICAvLyBFZyB5b3UgY2FuJ3QgaGF2ZSBwYWdlcy9bcG9zdF0vYWJjLmpzIGFuZCBwYWdlcy9baGVsbG9dL3NvbWV0aGluZy1lbHNlLmpzXHJcbiAgICAvLyBPbmx5IDEgZHluYW1pYyBzZWdtZW50IHBlciBuZXN0aW5nIGxldmVsXHJcbiAgICAvLyBTbyBpbiB0aGUgY2FzZSB0aGF0IGlzIHRlc3QvaW50ZWdyYXRpb24vZHluYW1pYy1yb3V0aW5nIGl0J2xsIGJlIHRoaXM6XHJcbiAgICAvLyBwYWdlcy9bcG9zdF0vY29tbWVudHMuanNcclxuICAgIC8vIHBhZ2VzL2Jsb2cvW3Bvc3RdL2NvbW1lbnQvW2lkXS5qc1xyXG4gICAgLy8gQm90aCBhcmUgZmluZSBiZWNhdXNlIGBwYWdlcy9bcG9zdF1gIGFuZCBgcGFnZXMvYmxvZ2AgYXJlIG9uIHRoZSBzYW1lIGxldmVsXHJcbiAgICAvLyBTbyBpbiB0aGlzIGNhc2UgYFVybE5vZGVgIGNyZWF0ZWQgaGVyZSBoYXMgYHRoaXMuc2x1Z05hbWUgPT09ICdwb3N0J2BcclxuICAgIC8vIEFuZCBzaW5jZSB5b3VyIFBSIHBhc3NlZCB0aHJvdWdoIGBzbHVnTmFtZWAgYXMgYW4gYXJyYXkgYmFzaWNhbGx5IGl0J2QgaW5jbHVkaW5nIGl0IGluIHRvbyBtYW55IHBvc3NpYmlsaXRpZXNcclxuICAgIC8vIEluc3RlYWQgd2hhdCBoYXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggaXMgdGhlIHVwd2FyZHMgcGF0aCdzIGR5bmFtaWMgbmFtZXNcclxuICAgIGNvbnN0IHJvb3QgPSBuZXcgVXJsTm9kZSgpO1xyXG4gICAgLy8gSGVyZSB0aGUgYHJvb3RgIGdldHMgaW5qZWN0ZWQgbXVsdGlwbGUgcGF0aHMsIGFuZCBpbnNlcnQgd2lsbCBicmVhayB0aGVtIHVwIGludG8gc3VibGV2ZWxzXHJcbiAgICBub3JtYWxpemVkUGFnZXMuZm9yRWFjaCgocGFnZVBhdGgpPT5yb290Lmluc2VydChwYWdlUGF0aCkpO1xyXG4gICAgLy8gU21vb3NoIHdpbGwgdGhlbiBzb3J0IHRob3NlIHN1YmxldmVscyB1cCB0byB0aGUgcG9pbnQgd2hlcmUgeW91IGdldCB0aGUgY29ycmVjdCByb3V0ZSBkZWZpbml0aW9uIHByaW9yaXR5XHJcbiAgICByZXR1cm4gcm9vdC5zbW9vc2goKTtcclxufVxyXG5cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c29ydGVkLXJvdXRlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0U29ydGVkUm91dGVzIiwiVXJsTm9kZSIsImluc2VydCIsInVybFBhdGgiLCJfaW5zZXJ0Iiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic21vb3NoIiwiX3Ntb29zaCIsInByZWZpeCIsImNoaWxkcmVuUGF0aHMiLCJjaGlsZHJlbiIsImtleXMiLCJzb3J0Iiwic2x1Z05hbWUiLCJzcGxpY2UiLCJpbmRleE9mIiwicmVzdFNsdWdOYW1lIiwib3B0aW9uYWxSZXN0U2x1Z05hbWUiLCJyb3V0ZXMiLCJtYXAiLCJjIiwicmVkdWNlIiwicHJldiIsImN1cnIiLCJwdXNoIiwicGxhY2Vob2xkZXIiLCJyIiwic2xpY2UiLCJFcnJvciIsInVuc2hpZnQiLCJ1cmxQYXRocyIsInNsdWdOYW1lcyIsImlzQ2F0Y2hBbGwiLCJsZW5ndGgiLCJuZXh0U2VnbWVudCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNlZ21lbnROYW1lIiwiaXNPcHRpb25hbCIsInN1YnN0cmluZyIsImhhbmRsZVNsdWciLCJwcmV2aW91c1NsdWciLCJuZXh0U2x1ZyIsImZvckVhY2giLCJzbHVnIiwicmVwbGFjZSIsImhhcyIsInNldCIsImNvbnN0cnVjdG9yIiwiTWFwIiwibm9ybWFsaXplZFBhZ2VzIiwicm9vdCIsInBhZ2VQYXRoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js": /*!****************************************************!*\ !*** ./node_modules/next/dist/shared/lib/utils.js ***! \****************************************************/ /***/ (function(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 WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n isResSent: function() {\n return isResSent;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n DecodeError: function() {\n return DecodeError;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : \"\");\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === \"string\" ? Component : Component.displayName || Component.name || \"Unknown\";\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split(\"?\");\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, \"/\").replace(/\\/\\/+/g, \"/\") + (urlParts[1] ? \"?\" + urlParts.slice(1).join(\"?\") : \"\");\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw new Error(message);\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw new Error(message);\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== \"undefined\";\nconst ST = SP && [\n \"mark\",\n \"measure\",\n \"getEntriesByName\"\n].every((method)=>typeof performance[method] === \"function\");\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = \"ENOENT\";\n this.name = \"PageNotFoundError\";\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = \"ENOENT\";\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports on update so we can compare the boundary\r\n // signatures.\r\n module.hot.dispose(function (data) {\r\n data.prevExports = currentExports;\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevExports !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevExports !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQWtCTjtBQUNBLFNBQVNrQixRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJeEIsT0FBT0MsY0FBYyxDQUFDc0IsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRcEIsU0FBUztJQUNiRyxZQUFZO1FBQ1IsT0FBT0E7SUFDWDtJQUNBQyxVQUFVO1FBQ04sT0FBT0E7SUFDWDtJQUNBQyxlQUFlO1FBQ1gsT0FBT0E7SUFDWDtJQUNBQyxtQkFBbUI7UUFDZixPQUFPQTtJQUNYO0lBQ0FDLFFBQVE7UUFDSixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsV0FBVztRQUNQLE9BQU9BO0lBQ1g7SUFDQUMsMEJBQTBCO1FBQ3RCLE9BQU9BO0lBQ1g7SUFDQUMscUJBQXFCO1FBQ2pCLE9BQU9BO0lBQ1g7SUFDQUMsSUFBSTtRQUNBLE9BQU9BO0lBQ1g7SUFDQUMsSUFBSTtRQUNBLE9BQU9BO0lBQ1g7SUFDQUMsYUFBYTtRQUNULE9BQU9BO0lBQ1g7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyxtQkFBbUI7UUFDZixPQUFPQTtJQUNYO0lBQ0FDLG1CQUFtQjtRQUNmLE9BQU9BO0lBQ1g7SUFDQUMseUJBQXlCO1FBQ3JCLE9BQU9BO0lBQ1g7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTWhCLGFBQWE7SUFDZjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDSDtBQUNELFNBQVNDLFNBQVNzQixFQUFFO0lBQ2hCLElBQUlD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RUFBRTtZQUM3Q1ksUUFBUUMsSUFBSSxDQUFDLEtBQUsvRCxlQUFlaUQsT0FBTztRQUM1QztJQUNKO0lBQ0EsT0FBT1c7QUFDWDtBQUNBLE1BQU14RCxLQUFLLE9BQU80RCxnQkFBZ0I7QUFDbEMsTUFBTTNELEtBQUtELE1BQU07SUFDYjtJQUNBO0lBQ0E7Q0FDSCxDQUFDNkQsS0FBSyxDQUFDLENBQUNDLFNBQVMsT0FBT0YsV0FBVyxDQUFDRSxPQUFPLEtBQUs7QUFDakQsTUFBTTVELG9CQUFvQm9EO0FBQzFCO0FBQ0EsTUFBTW5ELHVCQUF1Qm1EO0FBQzdCO0FBQ0EsTUFBTWxELDBCQUEwQmtEO0lBQzVCUyxZQUFZQyxJQUFJLENBQUM7UUFDYixLQUFLO1FBQ0wsSUFBSSxDQUFDQyxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUN0RCxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUMwQyxPQUFPLEdBQUcsa0NBQWtDVztJQUNyRDtBQUNKO0FBQ0EsTUFBTTNELDBCQUEwQmlEO0lBQzVCUyxZQUFZQyxJQUFJLEVBQUVYLE9BQU8sQ0FBQztRQUN0QixLQUFLO1FBQ0wsSUFBSSxDQUFDQSxPQUFPLEdBQUcsMENBQTBDVyxPQUFPLE1BQU1YO0lBQzFFO0FBQ0o7QUFDQSxNQUFNL0MsZ0NBQWdDZ0Q7SUFDbENTLGFBQWE7UUFDVCxLQUFLO1FBQ0wsSUFBSSxDQUFDRSxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNaLE9BQU8sR0FBRztJQUNuQjtBQUNKO0FBQ0EsU0FBUzlDLGVBQWUyRCxLQUFLO0lBQ3pCLE9BQU9DLEtBQUtDLFNBQVMsQ0FBQztRQUNsQmYsU0FBU2EsTUFBTWIsT0FBTztRQUN0QmdCLE9BQU9ILE1BQU1HLEtBQUs7SUFDdEI7QUFDSixFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMuanM/ZTdmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XHJcbiAgICB2YWx1ZTogdHJ1ZVxyXG59KTtcclxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBXRUJfVklUQUxTOiBudWxsLFxyXG4gICAgZXhlY09uY2U6IG51bGwsXHJcbiAgICBpc0Fic29sdXRlVXJsOiBudWxsLFxyXG4gICAgZ2V0TG9jYXRpb25PcmlnaW46IG51bGwsXHJcbiAgICBnZXRVUkw6IG51bGwsXHJcbiAgICBnZXREaXNwbGF5TmFtZTogbnVsbCxcclxuICAgIGlzUmVzU2VudDogbnVsbCxcclxuICAgIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlczogbnVsbCxcclxuICAgIGxvYWRHZXRJbml0aWFsUHJvcHM6IG51bGwsXHJcbiAgICBTUDogbnVsbCxcclxuICAgIFNUOiBudWxsLFxyXG4gICAgRGVjb2RlRXJyb3I6IG51bGwsXHJcbiAgICBOb3JtYWxpemVFcnJvcjogbnVsbCxcclxuICAgIFBhZ2VOb3RGb3VuZEVycm9yOiBudWxsLFxyXG4gICAgTWlzc2luZ1N0YXRpY1BhZ2U6IG51bGwsXHJcbiAgICBNaWRkbGV3YXJlTm90Rm91bmRFcnJvcjogbnVsbCxcclxuICAgIHN0cmluZ2lmeUVycm9yOiBudWxsXHJcbn0pO1xyXG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XHJcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGdldDogYWxsW25hbWVdXHJcbiAgICB9KTtcclxufVxyXG5fZXhwb3J0KGV4cG9ydHMsIHtcclxuICAgIFdFQl9WSVRBTFM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBXRUJfVklUQUxTO1xyXG4gICAgfSxcclxuICAgIGV4ZWNPbmNlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gZXhlY09uY2U7XHJcbiAgICB9LFxyXG4gICAgaXNBYnNvbHV0ZVVybDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWJzb2x1dGVVcmw7XHJcbiAgICB9LFxyXG4gICAgZ2V0TG9jYXRpb25PcmlnaW46IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBnZXRMb2NhdGlvbk9yaWdpbjtcclxuICAgIH0sXHJcbiAgICBnZXRVUkw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBnZXRVUkw7XHJcbiAgICB9LFxyXG4gICAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBnZXREaXNwbGF5TmFtZTtcclxuICAgIH0sXHJcbiAgICBpc1Jlc1NlbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBpc1Jlc1NlbnQ7XHJcbiAgICB9LFxyXG4gICAgbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzO1xyXG4gICAgfSxcclxuICAgIGxvYWRHZXRJbml0aWFsUHJvcHM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBsb2FkR2V0SW5pdGlhbFByb3BzO1xyXG4gICAgfSxcclxuICAgIFNQOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gU1A7XHJcbiAgICB9LFxyXG4gICAgU1Q6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBTVDtcclxuICAgIH0sXHJcbiAgICBEZWNvZGVFcnJvcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIERlY29kZUVycm9yO1xyXG4gICAgfSxcclxuICAgIE5vcm1hbGl6ZUVycm9yOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gTm9ybWFsaXplRXJyb3I7XHJcbiAgICB9LFxyXG4gICAgUGFnZU5vdEZvdW5kRXJyb3I6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBQYWdlTm90Rm91bmRFcnJvcjtcclxuICAgIH0sXHJcbiAgICBNaXNzaW5nU3RhdGljUGFnZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIE1pc3NpbmdTdGF0aWNQYWdlO1xyXG4gICAgfSxcclxuICAgIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gTWlkZGxld2FyZU5vdEZvdW5kRXJyb3I7XHJcbiAgICB9LFxyXG4gICAgc3RyaW5naWZ5RXJyb3I6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlFcnJvcjtcclxuICAgIH1cclxufSk7XHJcbmNvbnN0IFdFQl9WSVRBTFMgPSBbXHJcbiAgICBcIkNMU1wiLFxyXG4gICAgXCJGQ1BcIixcclxuICAgIFwiRklEXCIsXHJcbiAgICBcIklOUFwiLFxyXG4gICAgXCJMQ1BcIixcclxuICAgIFwiVFRGQlwiXHJcbl07XHJcbmZ1bmN0aW9uIGV4ZWNPbmNlKGZuKSB7XHJcbiAgICBsZXQgdXNlZCA9IGZhbHNlO1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XHJcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXNlZCkge1xyXG4gICAgICAgICAgICB1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZm4oLi4uYXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG59XHJcbi8vIFNjaGVtZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjFcclxuLy8gQWJzb2x1dGUgVVJMOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuM1xyXG5jb25zdCBBQlNPTFVURV9VUkxfUkVHRVggPSAvXlthLXpBLVpdW2EtekEtWlxcZCtcXC0uXSo/Oi87XHJcbmNvbnN0IGlzQWJzb2x1dGVVcmwgPSAodXJsKT0+QUJTT0xVVEVfVVJMX1JFR0VYLnRlc3QodXJsKTtcclxuZnVuY3Rpb24gZ2V0TG9jYXRpb25PcmlnaW4oKSB7XHJcbiAgICBjb25zdCB7IHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCB9ID0gd2luZG93LmxvY2F0aW9uO1xyXG4gICAgcmV0dXJuIHByb3RvY29sICsgXCIvL1wiICsgaG9zdG5hbWUgKyAocG9ydCA/IFwiOlwiICsgcG9ydCA6IFwiXCIpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFVSTCgpIHtcclxuICAgIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93LmxvY2F0aW9uO1xyXG4gICAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKTtcclxuICAgIHJldHVybiBocmVmLnN1YnN0cmluZyhvcmlnaW4ubGVuZ3RoKTtcclxufVxyXG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZShDb21wb25lbnQpIHtcclxuICAgIHJldHVybiB0eXBlb2YgQ29tcG9uZW50ID09PSBcInN0cmluZ1wiID8gQ29tcG9uZW50IDogQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8IFwiVW5rbm93blwiO1xyXG59XHJcbmZ1bmN0aW9uIGlzUmVzU2VudChyZXMpIHtcclxuICAgIHJldHVybiByZXMuZmluaXNoZWQgfHwgcmVzLmhlYWRlcnNTZW50O1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyh1cmwpIHtcclxuICAgIGNvbnN0IHVybFBhcnRzID0gdXJsLnNwbGl0KFwiP1wiKTtcclxuICAgIGNvbnN0IHVybE5vUXVlcnkgPSB1cmxQYXJ0c1swXTtcclxuICAgIHJldHVybiB1cmxOb1F1ZXJ5Ly8gZmlyc3Qgd2UgcmVwbGFjZSBhbnkgbm9uLWVuY29kZWQgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkXHJcbiAgICAvLyB0aGVuIG5vcm1hbGl6ZSByZXBlYXRlZCBmb3J3YXJkIHNsYXNoZXNcclxuICAgIC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5yZXBsYWNlKC9cXC9cXC8rL2csIFwiL1wiKSArICh1cmxQYXJ0c1sxXSA/IFwiP1wiICsgdXJsUGFydHMuc2xpY2UoMSkuam9pbihcIj9cIikgOiBcIlwiKTtcclxufVxyXG5hc3luYyBmdW5jdGlvbiBsb2FkR2V0SW5pdGlhbFByb3BzKEFwcCwgY3R4KSB7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgdmFyIF9BcHBfcHJvdG90eXBlO1xyXG4gICAgICAgIGlmICgoX0FwcF9wcm90b3R5cGUgPSBBcHAucHJvdG90eXBlKSA9PSBudWxsID8gdm9pZCAwIDogX0FwcF9wcm90b3R5cGUuZ2V0SW5pdGlhbFByb3BzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnXCInICsgZ2V0RGlzcGxheU5hbWUoQXBwKSArICcuZ2V0SW5pdGlhbFByb3BzKClcIiBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAtIHZpc2l0IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dldC1pbml0aWFsLXByb3BzLWFzLWFuLWluc3RhbmNlLW1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gd2hlbiBjYWxsZWQgZnJvbSBfYXBwIGBjdHhgIGlzIG5lc3RlZCBpbiBgY3R4YFxyXG4gICAgY29uc3QgcmVzID0gY3R4LnJlcyB8fCBjdHguY3R4ICYmIGN0eC5jdHgucmVzO1xyXG4gICAgaWYgKCFBcHAuZ2V0SW5pdGlhbFByb3BzKSB7XHJcbiAgICAgICAgaWYgKGN0eC5jdHggJiYgY3R4LkNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHBhZ2VQcm9wcyBkZWZhdWx0XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlUHJvcHM6IGF3YWl0IGxvYWRHZXRJbml0aWFsUHJvcHMoY3R4LkNvbXBvbmVudCwgY3R4LmN0eClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJvcHMgPSBhd2FpdCBBcHAuZ2V0SW5pdGlhbFByb3BzKGN0eCk7XHJcbiAgICBpZiAocmVzICYmIGlzUmVzU2VudChyZXMpKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwcm9wcykge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnXCInICsgZ2V0RGlzcGxheU5hbWUoQXBwKSArICcuZ2V0SW5pdGlhbFByb3BzKClcIiBzaG91bGQgcmVzb2x2ZSB0byBhbiBvYmplY3QuIEJ1dCBmb3VuZCBcIicgKyBwcm9wcyArICdcIiBpbnN0ZWFkLic7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAwICYmICFjdHguY3R4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlwiICsgZ2V0RGlzcGxheU5hbWUoQXBwKSArIFwiIHJldHVybmVkIGFuIGVtcHR5IG9iamVjdCBmcm9tIGBnZXRJbml0aWFsUHJvcHNgLiBUaGlzIGRlLW9wdGltaXplcyBhbmQgcHJldmVudHMgYXV0b21hdGljIHN0YXRpYyBvcHRpbWl6YXRpb24uIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2VtcHR5LW9iamVjdC1nZXRJbml0aWFsUHJvcHNcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3BzO1xyXG59XHJcbmNvbnN0IFNQID0gdHlwZW9mIHBlcmZvcm1hbmNlICE9PSBcInVuZGVmaW5lZFwiO1xyXG5jb25zdCBTVCA9IFNQICYmIFtcclxuICAgIFwibWFya1wiLFxyXG4gICAgXCJtZWFzdXJlXCIsXHJcbiAgICBcImdldEVudHJpZXNCeU5hbWVcIlxyXG5dLmV2ZXJ5KChtZXRob2QpPT50eXBlb2YgcGVyZm9ybWFuY2VbbWV0aG9kXSA9PT0gXCJmdW5jdGlvblwiKTtcclxuY2xhc3MgRGVjb2RlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbn1cclxuY2xhc3MgTm9ybWFsaXplRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbn1cclxuY2xhc3MgUGFnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYWdlKXtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuY29kZSA9IFwiRU5PRU5UXCI7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQYWdlTm90Rm91bmRFcnJvclwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IFwiQ2Fubm90IGZpbmQgbW9kdWxlIGZvciBwYWdlOiBcIiArIHBhZ2U7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgTWlzc2luZ1N0YXRpY1BhZ2UgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYWdlLCBtZXNzYWdlKXtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IFwiRmFpbGVkIHRvIGxvYWQgc3RhdGljIGZpbGUgZm9yIHBhZ2U6IFwiICsgcGFnZSArIFwiIFwiICsgbWVzc2FnZTtcclxuICAgIH1cclxufVxyXG5jbGFzcyBNaWRkbGV3YXJlTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNvZGUgPSBcIkVOT0VOVFwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IFwiQ2Fubm90IGZpbmQgdGhlIG1pZGRsZXdhcmUgbW9kdWxlXCI7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5RXJyb3IoZXJyb3IpIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcclxuICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2tcclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJXRUJfVklUQUxTIiwiZXhlY09uY2UiLCJpc0Fic29sdXRlVXJsIiwiZ2V0TG9jYXRpb25PcmlnaW4iLCJnZXRVUkwiLCJnZXREaXNwbGF5TmFtZSIsImlzUmVzU2VudCIsIm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJTUCIsIlNUIiwiRGVjb2RlRXJyb3IiLCJOb3JtYWxpemVFcnJvciIsIlBhZ2VOb3RGb3VuZEVycm9yIiwiTWlzc2luZ1N0YXRpY1BhZ2UiLCJNaWRkbGV3YXJlTm90Rm91bmRFcnJvciIsInN0cmluZ2lmeUVycm9yIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZm4iLCJ1c2VkIiwicmVzdWx0IiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJBQlNPTFVURV9VUkxfUkVHRVgiLCJ1cmwiLCJ0ZXN0IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInBvcnQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJvcmlnaW4iLCJzdWJzdHJpbmciLCJDb21wb25lbnQiLCJkaXNwbGF5TmFtZSIsInJlcyIsImZpbmlzaGVkIiwiaGVhZGVyc1NlbnQiLCJ1cmxQYXJ0cyIsInNwbGl0IiwidXJsTm9RdWVyeSIsInJlcGxhY2UiLCJzbGljZSIsImpvaW4iLCJBcHAiLCJjdHgiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJfQXBwX3Byb3RvdHlwZSIsInByb3RvdHlwZSIsImdldEluaXRpYWxQcm9wcyIsIm1lc3NhZ2UiLCJFcnJvciIsInBhZ2VQcm9wcyIsInByb3BzIiwia2V5cyIsImNvbnNvbGUiLCJ3YXJuIiwicGVyZm9ybWFuY2UiLCJldmVyeSIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiwicGFnZSIsImNvZGUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFjayJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js": /*!*********************************************************!*\ !*** ./node_modules/next/dist/compiled/buffer/index.js ***! \*********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={675:function(e,r){\"use strict\";r.byteLength=byteLength;r.toByteArray=toByteArray;r.fromByteArray=fromByteArray;var t=[];var f=[];var n=typeof Uint8Array!==\"undefined\"?Uint8Array:Array;var i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(var o=0,u=i.length;o0){throw new Error(\"Invalid string. Length must be a multiple of 4\")}var t=e.indexOf(\"=\");if(t===-1)t=r;var f=t===r?0:4-t%4;return[t,f]}function byteLength(e){var r=getLens(e);var t=r[0];var f=r[1];return(t+f)*3/4-f}function _byteLength(e,r,t){return(r+t)*3/4-t}function toByteArray(e){var r;var t=getLens(e);var i=t[0];var o=t[1];var u=new n(_byteLength(e,i,o));var a=0;var s=o>0?i-4:i;var h;for(h=0;h>16&255;u[a++]=r>>8&255;u[a++]=r&255}if(o===2){r=f[e.charCodeAt(h)]<<2|f[e.charCodeAt(h+1)]>>4;u[a++]=r&255}if(o===1){r=f[e.charCodeAt(h)]<<10|f[e.charCodeAt(h+1)]<<4|f[e.charCodeAt(h+2)]>>2;u[a++]=r>>8&255;u[a++]=r&255}return u}function tripletToBase64(e){return t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[e&63]}function encodeChunk(e,r,t){var f;var n=[];for(var i=r;ia?a:u+o))}if(n===1){r=e[f-1];i.push(t[r>>2]+t[r<<4&63]+\"==\")}else if(n===2){r=(e[f-2]<<8)+e[f-1];i.push(t[r>>10]+t[r>>4&63]+t[r<<2&63]+\"=\")}return i.join(\"\")}},72:function(e,r,t){\"use strict\";\r\n/*!\r\n * The buffer module from node.js, for the browser.\r\n *\r\n * @author Feross Aboukhadijeh \r\n * @license MIT\r\n */var f=t(675);var n=t(783);var i=typeof Symbol===\"function\"&&typeof Symbol.for===\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;r.Buffer=Buffer;r.SlowBuffer=SlowBuffer;r.INSPECT_MAX_BYTES=50;var o=2147483647;r.kMaxLength=o;Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!==\"undefined\"&&typeof console.error===\"function\"){console.error(\"This browser lacks typed array (Uint8Array) support which is required by \"+\"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.\")}function typedArraySupport(){try{var e=new Uint8Array(1);var r={foo:function(){return 42}};Object.setPrototypeOf(r,Uint8Array.prototype);Object.setPrototypeOf(e,r);return e.foo()===42}catch(e){return false}}Object.defineProperty(Buffer.prototype,\"parent\",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.buffer}});Object.defineProperty(Buffer.prototype,\"offset\",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.byteOffset}});function createBuffer(e){if(e>o){throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}var r=new Uint8Array(e);Object.setPrototypeOf(r,Buffer.prototype);return r}function Buffer(e,r,t){if(typeof e===\"number\"){if(typeof r===\"string\"){throw new TypeError('The \"string\" argument must be of type string. Received type number')}return allocUnsafe(e)}return from(e,r,t)}Buffer.poolSize=8192;function from(e,r,t){if(typeof e===\"string\"){return fromString(e,r)}if(ArrayBuffer.isView(e)){return fromArrayLike(e)}if(e==null){throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \"+\"or Array-like Object. Received type \"+typeof e)}if(isInstance(e,ArrayBuffer)||e&&isInstance(e.buffer,ArrayBuffer)){return fromArrayBuffer(e,r,t)}if(typeof SharedArrayBuffer!==\"undefined\"&&(isInstance(e,SharedArrayBuffer)||e&&isInstance(e.buffer,SharedArrayBuffer))){return fromArrayBuffer(e,r,t)}if(typeof e===\"number\"){throw new TypeError('The \"value\" argument must not be of type number. Received type number')}var f=e.valueOf&&e.valueOf();if(f!=null&&f!==e){return Buffer.from(f,r,t)}var n=fromObject(e);if(n)return n;if(typeof Symbol!==\"undefined\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]===\"function\"){return Buffer.from(e[Symbol.toPrimitive](\"string\"),r,t)}throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \"+\"or Array-like Object. Received type \"+typeof e)}Buffer.from=function(e,r,t){return from(e,r,t)};Object.setPrototypeOf(Buffer.prototype,Uint8Array.prototype);Object.setPrototypeOf(Buffer,Uint8Array);function assertSize(e){if(typeof e!==\"number\"){throw new TypeError('\"size\" argument must be of type number')}else if(e<0){throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}}function alloc(e,r,t){assertSize(e);if(e<=0){return createBuffer(e)}if(r!==undefined){return typeof t===\"string\"?createBuffer(e).fill(r,t):createBuffer(e).fill(r)}return createBuffer(e)}Buffer.alloc=function(e,r,t){return alloc(e,r,t)};function allocUnsafe(e){assertSize(e);return createBuffer(e<0?0:checked(e)|0)}Buffer.allocUnsafe=function(e){return allocUnsafe(e)};Buffer.allocUnsafeSlow=function(e){return allocUnsafe(e)};function fromString(e,r){if(typeof r!==\"string\"||r===\"\"){r=\"utf8\"}if(!Buffer.isEncoding(r)){throw new TypeError(\"Unknown encoding: \"+r)}var t=byteLength(e,r)|0;var f=createBuffer(t);var n=f.write(e,r);if(n!==t){f=f.slice(0,n)}return f}function fromArrayLike(e){var r=e.length<0?0:checked(e.length)|0;var t=createBuffer(r);for(var f=0;f=o){throw new RangeError(\"Attempt to allocate Buffer larger than maximum \"+\"size: 0x\"+o.toString(16)+\" bytes\")}return e|0}function SlowBuffer(e){if(+e!=e){e=0}return Buffer.alloc(+e)}Buffer.isBuffer=function isBuffer(e){return e!=null&&e._isBuffer===true&&e!==Buffer.prototype};Buffer.compare=function compare(e,r){if(isInstance(e,Uint8Array))e=Buffer.from(e,e.offset,e.byteLength);if(isInstance(r,Uint8Array))r=Buffer.from(r,r.offset,r.byteLength);if(!Buffer.isBuffer(e)||!Buffer.isBuffer(r)){throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array')}if(e===r)return 0;var t=e.length;var f=r.length;for(var n=0,i=Math.min(t,f);n2&&arguments[2]===true;if(!f&&t===0)return 0;var n=false;for(;;){switch(r){case\"ascii\":case\"latin1\":case\"binary\":return t;case\"utf8\":case\"utf-8\":return utf8ToBytes(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return t*2;case\"hex\":return t>>>1;case\"base64\":return base64ToBytes(e).length;default:if(n){return f?-1:utf8ToBytes(e).length}r=(\"\"+r).toLowerCase();n=true}}}Buffer.byteLength=byteLength;function slowToString(e,r,t){var f=false;if(r===undefined||r<0){r=0}if(r>this.length){return\"\"}if(t===undefined||t>this.length){t=this.length}if(t<=0){return\"\"}t>>>=0;r>>>=0;if(t<=r){return\"\"}if(!e)e=\"utf8\";while(true){switch(e){case\"hex\":return hexSlice(this,r,t);case\"utf8\":case\"utf-8\":return utf8Slice(this,r,t);case\"ascii\":return asciiSlice(this,r,t);case\"latin1\":case\"binary\":return latin1Slice(this,r,t);case\"base64\":return base64Slice(this,r,t);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return utf16leSlice(this,r,t);default:if(f)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase();f=true}}}Buffer.prototype._isBuffer=true;function swap(e,r,t){var f=e[r];e[r]=e[t];e[t]=f}Buffer.prototype.swap16=function swap16(){var e=this.length;if(e%2!==0){throw new RangeError(\"Buffer size must be a multiple of 16-bits\")}for(var r=0;rt)e+=\" ... \";return\"\"};if(i){Buffer.prototype[i]=Buffer.prototype.inspect}Buffer.prototype.compare=function compare(e,r,t,f,n){if(isInstance(e,Uint8Array)){e=Buffer.from(e,e.offset,e.byteLength)}if(!Buffer.isBuffer(e)){throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. '+\"Received type \"+typeof e)}if(r===undefined){r=0}if(t===undefined){t=e?e.length:0}if(f===undefined){f=0}if(n===undefined){n=this.length}if(r<0||t>e.length||f<0||n>this.length){throw new RangeError(\"out of range index\")}if(f>=n&&r>=t){return 0}if(f>=n){return-1}if(r>=t){return 1}r>>>=0;t>>>=0;f>>>=0;n>>>=0;if(this===e)return 0;var i=n-f;var o=t-r;var u=Math.min(i,o);var a=this.slice(f,n);var s=e.slice(r,t);for(var h=0;h2147483647){t=2147483647}else if(t<-2147483648){t=-2147483648}t=+t;if(numberIsNaN(t)){t=n?0:e.length-1}if(t<0)t=e.length+t;if(t>=e.length){if(n)return-1;else t=e.length-1}else if(t<0){if(n)t=0;else return-1}if(typeof r===\"string\"){r=Buffer.from(r,f)}if(Buffer.isBuffer(r)){if(r.length===0){return-1}return arrayIndexOf(e,r,t,f,n)}else if(typeof r===\"number\"){r=r&255;if(typeof Uint8Array.prototype.indexOf===\"function\"){if(n){return Uint8Array.prototype.indexOf.call(e,r,t)}else{return Uint8Array.prototype.lastIndexOf.call(e,r,t)}}return arrayIndexOf(e,[r],t,f,n)}throw new TypeError(\"val must be string, number or Buffer\")}function arrayIndexOf(e,r,t,f,n){var i=1;var o=e.length;var u=r.length;if(f!==undefined){f=String(f).toLowerCase();if(f===\"ucs2\"||f===\"ucs-2\"||f===\"utf16le\"||f===\"utf-16le\"){if(e.length<2||r.length<2){return-1}i=2;o/=2;u/=2;t/=2}}function read(e,r){if(i===1){return e[r]}else{return e.readUInt16BE(r*i)}}var a;if(n){var s=-1;for(a=t;ao)t=o-u;for(a=t;a>=0;a--){var h=true;for(var c=0;cn){f=n}}var i=r.length;if(f>i/2){f=i/2}for(var o=0;o>>0;if(isFinite(t)){t=t>>>0;if(f===undefined)f=\"utf8\"}else{f=t;t=undefined}}else{throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\")}var n=this.length-r;if(t===undefined||t>n)t=n;if(e.length>0&&(t<0||r<0)||r>this.length){throw new RangeError(\"Attempt to write outside buffer bounds\")}if(!f)f=\"utf8\";var i=false;for(;;){switch(f){case\"hex\":return hexWrite(this,e,r,t);case\"utf8\":case\"utf-8\":return utf8Write(this,e,r,t);case\"ascii\":return asciiWrite(this,e,r,t);case\"latin1\":case\"binary\":return latin1Write(this,e,r,t);case\"base64\":return base64Write(this,e,r,t);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return ucs2Write(this,e,r,t);default:if(i)throw new TypeError(\"Unknown encoding: \"+f);f=(\"\"+f).toLowerCase();i=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(e,r,t){if(r===0&&t===e.length){return f.fromByteArray(e)}else{return f.fromByteArray(e.slice(r,t))}}function utf8Slice(e,r,t){t=Math.min(e.length,t);var f=[];var n=r;while(n239?4:i>223?3:i>191?2:1;if(n+u<=t){var a,s,h,c;switch(u){case 1:if(i<128){o=i}break;case 2:a=e[n+1];if((a&192)===128){c=(i&31)<<6|a&63;if(c>127){o=c}}break;case 3:a=e[n+1];s=e[n+2];if((a&192)===128&&(s&192)===128){c=(i&15)<<12|(a&63)<<6|s&63;if(c>2047&&(c<55296||c>57343)){o=c}}break;case 4:a=e[n+1];s=e[n+2];h=e[n+3];if((a&192)===128&&(s&192)===128&&(h&192)===128){c=(i&15)<<18|(a&63)<<12|(s&63)<<6|h&63;if(c>65535&&c<1114112){o=c}}}}if(o===null){o=65533;u=1}else if(o>65535){o-=65536;f.push(o>>>10&1023|55296);o=56320|o&1023}f.push(o);n+=u}return decodeCodePointsArray(f)}var u=4096;function decodeCodePointsArray(e){var r=e.length;if(r<=u){return String.fromCharCode.apply(String,e)}var t=\"\";var f=0;while(ff)t=f;var n=\"\";for(var i=r;it){e=t}if(r<0){r+=t;if(r<0)r=0}else if(r>t){r=t}if(rt)throw new RangeError(\"Trying to access beyond buffer length\")}Buffer.prototype.readUIntLE=function readUIntLE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=this[e];var n=1;var i=0;while(++i>>0;r=r>>>0;if(!t){checkOffset(e,r,this.length)}var f=this[e+--r];var n=1;while(r>0&&(n*=256)){f+=this[e+--r]*n}return f};Buffer.prototype.readUInt8=function readUInt8(e,r){e=e>>>0;if(!r)checkOffset(e,1,this.length);return this[e]};Buffer.prototype.readUInt16LE=function readUInt16LE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);return this[e]|this[e+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);return this[e]<<8|this[e+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};Buffer.prototype.readIntLE=function readIntLE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=this[e];var n=1;var i=0;while(++i=n)f-=Math.pow(2,8*r);return f};Buffer.prototype.readIntBE=function readIntBE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=r;var n=1;var i=this[e+--f];while(f>0&&(n*=256)){i+=this[e+--f]*n}n*=128;if(i>=n)i-=Math.pow(2,8*r);return i};Buffer.prototype.readInt8=function readInt8(e,r){e=e>>>0;if(!r)checkOffset(e,1,this.length);if(!(this[e]&128))return this[e];return(255-this[e]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);var t=this[e]|this[e+1]<<8;return t&32768?t|4294901760:t};Buffer.prototype.readInt16BE=function readInt16BE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);var t=this[e+1]|this[e]<<8;return t&32768?t|4294901760:t};Buffer.prototype.readInt32LE=function readInt32LE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};Buffer.prototype.readFloatLE=function readFloatLE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return n.read(this,e,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return n.read(this,e,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(e,r){e=e>>>0;if(!r)checkOffset(e,8,this.length);return n.read(this,e,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(e,r){e=e>>>0;if(!r)checkOffset(e,8,this.length);return n.read(this,e,false,52,8)};function checkInt(e,r,t,f,n,i){if(!Buffer.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(r>n||re.length)throw new RangeError(\"Index out of range\")}Buffer.prototype.writeUIntLE=function writeUIntLE(e,r,t,f){e=+e;r=r>>>0;t=t>>>0;if(!f){var n=Math.pow(2,8*t)-1;checkInt(this,e,r,t,n,0)}var i=1;var o=0;this[r]=e&255;while(++o>>0;t=t>>>0;if(!f){var n=Math.pow(2,8*t)-1;checkInt(this,e,r,t,n,0)}var i=t-1;var o=1;this[r+i]=e&255;while(--i>=0&&(o*=256)){this[r+i]=e/o&255}return r+t};Buffer.prototype.writeUInt8=function writeUInt8(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,1,255,0);this[r]=e&255;return r+1};Buffer.prototype.writeUInt16LE=function writeUInt16LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,65535,0);this[r]=e&255;this[r+1]=e>>>8;return r+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,65535,0);this[r]=e>>>8;this[r+1]=e&255;return r+2};Buffer.prototype.writeUInt32LE=function writeUInt32LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,4294967295,0);this[r+3]=e>>>24;this[r+2]=e>>>16;this[r+1]=e>>>8;this[r]=e&255;return r+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,4294967295,0);this[r]=e>>>24;this[r+1]=e>>>16;this[r+2]=e>>>8;this[r+3]=e&255;return r+4};Buffer.prototype.writeIntLE=function writeIntLE(e,r,t,f){e=+e;r=r>>>0;if(!f){var n=Math.pow(2,8*t-1);checkInt(this,e,r,t,n-1,-n)}var i=0;var o=1;var u=0;this[r]=e&255;while(++i>0)-u&255}return r+t};Buffer.prototype.writeIntBE=function writeIntBE(e,r,t,f){e=+e;r=r>>>0;if(!f){var n=Math.pow(2,8*t-1);checkInt(this,e,r,t,n-1,-n)}var i=t-1;var o=1;var u=0;this[r+i]=e&255;while(--i>=0&&(o*=256)){if(e<0&&u===0&&this[r+i+1]!==0){u=1}this[r+i]=(e/o>>0)-u&255}return r+t};Buffer.prototype.writeInt8=function writeInt8(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,1,127,-128);if(e<0)e=255+e+1;this[r]=e&255;return r+1};Buffer.prototype.writeInt16LE=function writeInt16LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,32767,-32768);this[r]=e&255;this[r+1]=e>>>8;return r+2};Buffer.prototype.writeInt16BE=function writeInt16BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,32767,-32768);this[r]=e>>>8;this[r+1]=e&255;return r+2};Buffer.prototype.writeInt32LE=function writeInt32LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,2147483647,-2147483648);this[r]=e&255;this[r+1]=e>>>8;this[r+2]=e>>>16;this[r+3]=e>>>24;return r+4};Buffer.prototype.writeInt32BE=function writeInt32BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,2147483647,-2147483648);if(e<0)e=4294967295+e+1;this[r]=e>>>24;this[r+1]=e>>>16;this[r+2]=e>>>8;this[r+3]=e&255;return r+4};function checkIEEE754(e,r,t,f,n,i){if(t+f>e.length)throw new RangeError(\"Index out of range\");if(t<0)throw new RangeError(\"Index out of range\")}function writeFloat(e,r,t,f,i){r=+r;t=t>>>0;if(!i){checkIEEE754(e,r,t,4,34028234663852886e22,-34028234663852886e22)}n.write(e,r,t,f,23,4);return t+4}Buffer.prototype.writeFloatLE=function writeFloatLE(e,r,t){return writeFloat(this,e,r,true,t)};Buffer.prototype.writeFloatBE=function writeFloatBE(e,r,t){return writeFloat(this,e,r,false,t)};function writeDouble(e,r,t,f,i){r=+r;t=t>>>0;if(!i){checkIEEE754(e,r,t,8,17976931348623157e292,-17976931348623157e292)}n.write(e,r,t,f,52,8);return t+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(e,r,t){return writeDouble(this,e,r,true,t)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(e,r,t){return writeDouble(this,e,r,false,t)};Buffer.prototype.copy=function copy(e,r,t,f){if(!Buffer.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(!t)t=0;if(!f&&f!==0)f=this.length;if(r>=e.length)r=e.length;if(!r)r=0;if(f>0&&f=this.length)throw new RangeError(\"Index out of range\");if(f<0)throw new RangeError(\"sourceEnd out of bounds\");if(f>this.length)f=this.length;if(e.length-r=0;--i){e[i+r]=this[i+t]}}else{Uint8Array.prototype.set.call(e,this.subarray(t,f),r)}return n};Buffer.prototype.fill=function fill(e,r,t,f){if(typeof e===\"string\"){if(typeof r===\"string\"){f=r;r=0;t=this.length}else if(typeof t===\"string\"){f=t;t=this.length}if(f!==undefined&&typeof f!==\"string\"){throw new TypeError(\"encoding must be a string\")}if(typeof f===\"string\"&&!Buffer.isEncoding(f)){throw new TypeError(\"Unknown encoding: \"+f)}if(e.length===1){var n=e.charCodeAt(0);if(f===\"utf8\"&&n<128||f===\"latin1\"){e=n}}}else if(typeof e===\"number\"){e=e&255}else if(typeof e===\"boolean\"){e=Number(e)}if(r<0||this.length>>0;t=t===undefined?this.length:t>>>0;if(!e)e=0;var i;if(typeof e===\"number\"){for(i=r;i55295&&t<57344){if(!n){if(t>56319){if((r-=3)>-1)i.push(239,191,189);continue}else if(o+1===f){if((r-=3)>-1)i.push(239,191,189);continue}n=t;continue}if(t<56320){if((r-=3)>-1)i.push(239,191,189);n=t;continue}t=(n-55296<<10|t-56320)+65536}else if(n){if((r-=3)>-1)i.push(239,191,189)}n=null;if(t<128){if((r-=1)<0)break;i.push(t)}else if(t<2048){if((r-=2)<0)break;i.push(t>>6|192,t&63|128)}else if(t<65536){if((r-=3)<0)break;i.push(t>>12|224,t>>6&63|128,t&63|128)}else if(t<1114112){if((r-=4)<0)break;i.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128)}else{throw new Error(\"Invalid code point\")}}return i}function asciiToBytes(e){var r=[];for(var t=0;t>8;n=t%256;i.push(n);i.push(f)}return i}function base64ToBytes(e){return f.toByteArray(base64clean(e))}function blitBuffer(e,r,t,f){for(var n=0;n=r.length||n>=e.length)break;r[n+t]=e[n]}return n}function isInstance(e,r){return e instanceof r||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===r.name}function numberIsNaN(e){return e!==e}var s=function(){var e=\"0123456789abcdef\";var r=new Array(256);for(var t=0;t<16;++t){var f=t*16;for(var n=0;n<16;++n){r[f+n]=e[t]+e[n]}}return r}()},783:function(e,r){\r\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\r\nr.read=function(e,r,t,f,n){var i,o;var u=n*8-f-1;var a=(1<>1;var h=-7;var c=t?n-1:0;var l=t?-1:1;var p=e[r+c];c+=l;i=p&(1<<-h)-1;p>>=-h;h+=u;for(;h>0;i=i*256+e[r+c],c+=l,h-=8){}o=i&(1<<-h)-1;i>>=-h;h+=f;for(;h>0;o=o*256+e[r+c],c+=l,h-=8){}if(i===0){i=1-s}else if(i===a){return o?NaN:(p?-1:1)*Infinity}else{o=o+Math.pow(2,f);i=i-s}return(p?-1:1)*o*Math.pow(2,i-f)};r.write=function(e,r,t,f,n,i){var o,u,a;var s=i*8-n-1;var h=(1<>1;var l=n===23?Math.pow(2,-24)-Math.pow(2,-77):0;var p=f?0:i-1;var y=f?1:-1;var g=r<0||r===0&&1/r<0?1:0;r=Math.abs(r);if(isNaN(r)||r===Infinity){u=isNaN(r)?1:0;o=h}else{o=Math.floor(Math.log(r)/Math.LN2);if(r*(a=Math.pow(2,-o))<1){o--;a*=2}if(o+c>=1){r+=l/a}else{r+=l*Math.pow(2,1-c)}if(r*a>=2){o++;a/=2}if(o+c>=h){u=0;o=h}else if(o+c>=1){u=(r*a-1)*Math.pow(2,n);o=o+c}else{u=r*Math.pow(2,c-1)*Math.pow(2,n);o=0}}for(;n>=8;e[t+p]=u&255,p+=y,u/=256,n-=8){}o=o<0;e[t+p]=o&255,p+=y,o/=256,s-=8){}e[t+p-y]|=g*128}}};var r={};function __nccwpck_require__(t){var f=r[t];if(f!==undefined){return f.exports}var n=r[t]={exports:{}};var i=true;try{e[t](n,n.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return n.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(72);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvYnVmZmVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLE9BQU8sa0JBQWtCLGFBQWEsd0JBQXdCLDBCQUEwQiw4QkFBOEIsU0FBUyxTQUFTLHVEQUF1RCx5RUFBeUUsdUJBQXVCLElBQUksS0FBSyxVQUFVLHFCQUFxQix3QkFBd0Isd0JBQXdCLG9CQUFvQixlQUFlLFVBQVUsa0VBQWtFLHFCQUFxQixjQUFjLG9CQUFvQixZQUFZLHVCQUF1QixpQkFBaUIsV0FBVyxXQUFXLGtCQUFrQiw0QkFBNEIsa0JBQWtCLHdCQUF3QixNQUFNLGlCQUFpQixXQUFXLFdBQVcsZ0NBQWdDLFFBQVEsZ0JBQWdCLE1BQU0sUUFBUSxJQUFJLE1BQU0sK0ZBQStGLGlCQUFpQixnQkFBZ0IsYUFBYSxVQUFVLGdEQUFnRCxhQUFhLFVBQVUseUVBQXlFLGdCQUFnQixhQUFhLFNBQVMsNEJBQTRCLGtEQUFrRCw0QkFBNEIsTUFBTSxTQUFTLFlBQVksSUFBSSxNQUFNLHFEQUFxRCwyQkFBMkIsa0JBQWtCLDBCQUEwQixNQUFNLGVBQWUsVUFBVSxTQUFTLFlBQVksa0JBQWtCLElBQUksTUFBTSxxQ0FBcUMsVUFBVSxTQUFTLGdDQUFnQyxlQUFlLHFCQUFxQiwyQ0FBMkMsbUJBQW1CLG9CQUFvQjtBQUM5ckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixhQUFhLCtHQUErRyxnQkFBZ0Isd0JBQXdCLHVCQUF1QixpQkFBaUIsZUFBZSwrQ0FBK0MsaUdBQWlHLGtLQUFrSyw2QkFBNkIsSUFBSSx3QkFBd0IsT0FBTyxlQUFlLFlBQVksOENBQThDLDJCQUEyQixvQkFBb0IsU0FBUyxjQUFjLGlEQUFpRCwrQkFBK0IsMkNBQTJDLG9CQUFvQixFQUFFLGlEQUFpRCwrQkFBK0IsMkNBQTJDLHdCQUF3QixFQUFFLHlCQUF5QixRQUFRLHVFQUF1RSx3QkFBd0IsMENBQTBDLFNBQVMs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Q0FBK0MsY0FBYyxhQUFhLDRCQUE0QixjQUFjLDJCQUEyQixlQUFlLElBQUksS0FBSyxtQ0FBbUMsMkJBQTJCLElBQUksS0FBSyxXQUFXLE9BQU8sS0FBSyxxQkFBcUIsV0FBVyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksZ0JBQWdCLHdCQUF3QixNQUFNLEtBQUssa0NBQWtDLEtBQUssS0FBSyxLQUFLLGdDQUFnQyxTQUFTLEtBQUssS0FBSyxJQUFJLGdDQUFnQyxtQkFBbUIsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssOEJBQThCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2J1ZmZlci9pbmRleC5qcz9hYzNjIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe3ZhciBlPXs2NzU6ZnVuY3Rpb24oZSxyKXtcInVzZSBzdHJpY3RcIjtyLmJ5dGVMZW5ndGg9Ynl0ZUxlbmd0aDtyLnRvQnl0ZUFycmF5PXRvQnl0ZUFycmF5O3IuZnJvbUJ5dGVBcnJheT1mcm9tQnl0ZUFycmF5O3ZhciB0PVtdO3ZhciBmPVtdO3ZhciBuPXR5cGVvZiBVaW50OEFycmF5IT09XCJ1bmRlZmluZWRcIj9VaW50OEFycmF5OkFycmF5O3ZhciBpPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO2Zvcih2YXIgbz0wLHU9aS5sZW5ndGg7bzx1Oysrbyl7dFtvXT1pW29dO2ZbaS5jaGFyQ29kZUF0KG8pXT1vfWZbXCItXCIuY2hhckNvZGVBdCgwKV09NjI7ZltcIl9cIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiBnZXRMZW5zKGUpe3ZhciByPWUubGVuZ3RoO2lmKHIlND4wKXt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpfXZhciB0PWUuaW5kZXhPZihcIj1cIik7aWYodD09PS0xKXQ9cjt2YXIgZj10PT09cj8wOjQtdCU0O3JldHVyblt0LGZdfWZ1bmN0aW9uIGJ5dGVMZW5ndGgoZSl7dmFyIHI9Z2V0TGVucyhlKTt2YXIgdD1yWzBdO3ZhciBmPXJbMV07cmV0dXJuKHQrZikqMy80LWZ9ZnVuY3Rpb24gX2J5dGVMZW5ndGgoZSxyLHQpe3JldHVybihyK3QpKjMvNC10fWZ1bmN0aW9uIHRvQnl0ZUFycmF5KGUpe3ZhciByO3ZhciB0PWdldExlbnMoZSk7dmFyIGk9dFswXTt2YXIgbz10WzFdO3ZhciB1PW5ldyBuKF9ieXRlTGVuZ3RoKGUsaSxvKSk7dmFyIGE9MDt2YXIgcz1vPjA/aS00Omk7dmFyIGg7Zm9yKGg9MDtoPHM7aCs9NCl7cj1mW2UuY2hhckNvZGVBdChoKV08PDE4fGZbZS5jaGFyQ29kZUF0KGgrMSldPDwxMnxmW2UuY2hhckNvZGVBdChoKzIpXTw8NnxmW2UuY2hhckNvZGVBdChoKzMpXTt1W2ErK109cj4+MTYmMjU1O3VbYSsrXT1yPj44JjI1NTt1W2ErK109ciYyNTV9aWYobz09PTIpe3I9ZltlLmNoYXJDb2RlQXQoaCldPDwyfGZbZS5jaGFyQ29kZUF0KGgrMSldPj40O3VbYSsrXT1yJjI1NX1pZihvPT09MSl7cj1mW2UuY2hhckNvZGVBdChoKV08PDEwfGZbZS5jaGFyQ29kZUF0KGgrMSldPDw0fGZbZS5jaGFyQ29kZUF0KGgrMildPj4yO3VbYSsrXT1yPj44JjI1NTt1W2ErK109ciYyNTV9cmV0dXJuIHV9ZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0KGUpe3JldHVybiB0W2U+PjE4JjYzXSt0W2U+PjEyJjYzXSt0W2U+PjYmNjNdK3RbZSY2M119ZnVuY3Rpb24gZW5jb2RlQ2h1bmsoZSxyLHQpe3ZhciBmO3ZhciBuPVtdO2Zvcih2YXIgaT1yO2k8dDtpKz0zKXtmPShlW2ldPDwxNiYxNjcxMTY4MCkrKGVbaSsxXTw8OCY2NTI4MCkrKGVbaSsyXSYyNTUpO24ucHVzaCh0cmlwbGV0VG9CYXNlNjQoZikpfXJldHVybiBuLmpvaW4oXCJcIil9ZnVuY3Rpb24gZnJvbUJ5dGVBcnJheShlKXt2YXIgcjt2YXIgZj1lLmxlbmd0aDt2YXIgbj1mJTM7dmFyIGk9W107dmFyIG89MTYzODM7Zm9yKHZhciB1PTAsYT1mLW47dTxhO3UrPW8pe2kucHVzaChlbmNvZGVDaHVuayhlLHUsdStvPmE/YTp1K28pKX1pZihuPT09MSl7cj1lW2YtMV07aS5wdXNoKHRbcj4+Ml0rdFtyPDw0JjYzXStcIj09XCIpfWVsc2UgaWYobj09PTIpe3I9KGVbZi0yXTw8OCkrZVtmLTFdO2kucHVzaCh0W3I+PjEwXSt0W3I+PjQmNjNdK3Rbcjw8MiY2M10rXCI9XCIpfXJldHVybiBpLmpvaW4oXCJcIil9fSw3MjpmdW5jdGlvbihlLHIsdCl7XCJ1c2Ugc3RyaWN0XCI7XHJcbi8qIVxyXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cclxuICpcclxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cclxuICogQGxpY2Vuc2UgIE1JVFxyXG4gKi92YXIgZj10KDY3NSk7dmFyIG49dCg3ODMpO3ZhciBpPXR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJnR5cGVvZiBTeW1ib2wuZm9yPT09XCJmdW5jdGlvblwiP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsO3IuQnVmZmVyPUJ1ZmZlcjtyLlNsb3dCdWZmZXI9U2xvd0J1ZmZlcjtyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBvPTIxNDc0ODM2NDc7ci5rTWF4TGVuZ3RoPW87QnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dHlwZWRBcnJheVN1cHBvcnQoKTtpZighQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJnR5cGVvZiBjb25zb2xlIT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIGNvbnNvbGUuZXJyb3I9PT1cImZ1bmN0aW9uXCIpe2NvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgXCIrXCJgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LlwiKX1mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCgpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTt2YXIgcj17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihlLHIpO3JldHVybiBlLmZvbygpPT09NDJ9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmJ1ZmZlcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSk7ZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGUpe2lmKGU+byl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsQnVmZmVyLnByb3RvdHlwZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gQnVmZmVyKGUscix0KXtpZih0eXBlb2YgZT09PVwibnVtYmVyXCIpe2lmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKX1yZXR1cm4gYWxsb2NVbnNhZmUoZSl9cmV0dXJuIGZyb20oZSxyLHQpfUJ1ZmZlci5wb29sU2l6ZT04MTkyO2Z1bmN0aW9uIGZyb20oZSxyLHQpe2lmKHR5cGVvZiBlPT09XCJzdHJpbmdcIil7cmV0dXJuIGZyb21TdHJpbmcoZSxyKX1pZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpe3JldHVybiBmcm9tQXJyYXlMaWtlKGUpfWlmKGU9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBcIitcIm9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBlKX1pZihpc0luc3RhbmNlKGUsQXJyYXlCdWZmZXIpfHxlJiZpc0luc3RhbmNlKGUuYnVmZmVyLEFycmF5QnVmZmVyKSl7cmV0dXJuIGZyb21BcnJheUJ1ZmZlcihlLHIsdCl9aWYodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyIT09XCJ1bmRlZmluZWRcIiYmKGlzSW5zdGFuY2UoZSxTaGFyZWRBcnJheUJ1ZmZlcil8fGUmJmlzSW5zdGFuY2UoZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSl7cmV0dXJuIGZyb21BcnJheUJ1ZmZlcihlLHIsdCl9aWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpfXZhciBmPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYoZiE9bnVsbCYmZiE9PWUpe3JldHVybiBCdWZmZXIuZnJvbShmLHIsdCl9dmFyIG49ZnJvbU9iamVjdChlKTtpZihuKXJldHVybiBuO2lmKHR5cGVvZiBTeW1ib2whPT1cInVuZGVmaW5lZFwiJiZTeW1ib2wudG9QcmltaXRpdmUhPW51bGwmJnR5cGVvZiBlW1N5bWJvbC50b1ByaW1pdGl2ZV09PT1cImZ1bmN0aW9uXCIpe3JldHVybiBCdWZmZXIuZnJvbShlW1N5bWJvbC50b1ByaW1pdGl2ZV0oXCJzdHJpbmdcIikscix0KX10aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgXCIrXCJvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSl9QnVmZmVyLmZyb209ZnVuY3Rpb24oZSxyLHQpe3JldHVybiBmcm9tKGUscix0KX07T2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlci5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsVWludDhBcnJheSk7ZnVuY3Rpb24gYXNzZXJ0U2l6ZShlKXtpZih0eXBlb2YgZSE9PVwibnVtYmVyXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKX1lbHNlIGlmKGU8MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9fWZ1bmN0aW9uIGFsbG9jKGUscix0KXthc3NlcnRTaXplKGUpO2lmKGU8PTApe3JldHVybiBjcmVhdGVCdWZmZXIoZSl9aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHR5cGVvZiB0PT09XCJzdHJpbmdcIj9jcmVhdGVCdWZmZXIoZSkuZmlsbChyLHQpOmNyZWF0ZUJ1ZmZlcihlKS5maWxsKHIpfXJldHVybiBjcmVhdGVCdWZmZXIoZSl9QnVmZmVyLmFsbG9jPWZ1bmN0aW9uKGUscix0KXtyZXR1cm4gYWxsb2MoZSxyLHQpfTtmdW5jdGlvbiBhbGxvY1Vuc2FmZShlKXthc3NlcnRTaXplKGUpO3JldHVybiBjcmVhdGVCdWZmZXIoZTwwPzA6Y2hlY2tlZChlKXwwKX1CdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsbG9jVW5zYWZlKGUpfTtCdWZmZXIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBhbGxvY1Vuc2FmZShlKX07ZnVuY3Rpb24gZnJvbVN0cmluZyhlLHIpe2lmKHR5cGVvZiByIT09XCJzdHJpbmdcInx8cj09PVwiXCIpe3I9XCJ1dGY4XCJ9aWYoIUJ1ZmZlci5pc0VuY29kaW5nKHIpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrcil9dmFyIHQ9Ynl0ZUxlbmd0aChlLHIpfDA7dmFyIGY9Y3JlYXRlQnVmZmVyKHQpO3ZhciBuPWYud3JpdGUoZSxyKTtpZihuIT09dCl7Zj1mLnNsaWNlKDAsbil9cmV0dXJuIGZ9ZnVuY3Rpb24gZnJvbUFycmF5TGlrZShlKXt2YXIgcj1lLmxlbmd0aDwwPzA6Y2hlY2tlZChlLmxlbmd0aCl8MDt2YXIgdD1jcmVhdGVCdWZmZXIocik7Zm9yKHZhciBmPTA7ZjxyO2YrPTEpe3RbZl09ZVtmXSYyNTV9cmV0dXJuIHR9ZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyKGUscix0KXtpZihyPDB8fGUuYnl0ZUxlbmd0aDxyKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKX1pZihlLmJ5dGVMZW5ndGg8cisodHx8MCkpe3Rocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpfXZhciBmO2lmKHI9PT11bmRlZmluZWQmJnQ9PT11bmRlZmluZWQpe2Y9bmV3IFVpbnQ4QXJyYXkoZSl9ZWxzZSBpZih0PT09dW5kZWZpbmVkKXtmPW5ldyBVaW50OEFycmF5KGUscil9ZWxzZXtmPW5ldyBVaW50OEFycmF5KGUscix0KX1PYmplY3Quc2V0UHJvdG90eXBlT2YoZixCdWZmZXIucHJvdG90eXBlKTtyZXR1cm4gZn1mdW5jdGlvbiBmcm9tT2JqZWN0KGUpe2lmKEJ1ZmZlci5pc0J1ZmZlcihlKSl7dmFyIHI9Y2hlY2tlZChlLmxlbmd0aCl8MDt2YXIgdD1jcmVhdGVCdWZmZXIocik7aWYodC5sZW5ndGg9PT0wKXtyZXR1cm4gdH1lLmNvcHkodCwwLDAscik7cmV0dXJuIHR9aWYoZS5sZW5ndGghPT11bmRlZmluZWQpe2lmKHR5cGVvZiBlLmxlbmd0aCE9PVwibnVtYmVyXCJ8fG51bWJlcklzTmFOKGUubGVuZ3RoKSl7cmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKX1yZXR1cm4gZnJvbUFycmF5TGlrZShlKX1pZihlLnR5cGU9PT1cIkJ1ZmZlclwiJiZBcnJheS5pc0FycmF5KGUuZGF0YSkpe3JldHVybiBmcm9tQXJyYXlMaWtlKGUuZGF0YSl9fWZ1bmN0aW9uIGNoZWNrZWQoZSl7aWYoZT49byl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIFwiK1wic2l6ZTogMHhcIitvLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKX1yZXR1cm4gZXwwfWZ1bmN0aW9uIFNsb3dCdWZmZXIoZSl7aWYoK2UhPWUpe2U9MH1yZXR1cm4gQnVmZmVyLmFsbG9jKCtlKX1CdWZmZXIuaXNCdWZmZXI9ZnVuY3Rpb24gaXNCdWZmZXIoZSl7cmV0dXJuIGUhPW51bGwmJmUuX2lzQnVmZmVyPT09dHJ1ZSYmZSE9PUJ1ZmZlci5wcm90b3R5cGV9O0J1ZmZlci5jb21wYXJlPWZ1bmN0aW9uIGNvbXBhcmUoZSxyKXtpZihpc0luc3RhbmNlKGUsVWludDhBcnJheSkpZT1CdWZmZXIuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCk7aWYoaXNJbnN0YW5jZShyLFVpbnQ4QXJyYXkpKXI9QnVmZmVyLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpO2lmKCFCdWZmZXIuaXNCdWZmZXIoZSl8fCFCdWZmZXIuaXNCdWZmZXIocikpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKX1pZihlPT09cilyZXR1cm4gMDt2YXIgdD1lLmxlbmd0aDt2YXIgZj1yLmxlbmd0aDtmb3IodmFyIG49MCxpPU1hdGgubWluKHQsZik7bjxpOysrbil7aWYoZVtuXSE9PXJbbl0pe3Q9ZVtuXTtmPXJbbl07YnJlYWt9fWlmKHQ8ZilyZXR1cm4tMTtpZihmPHQpcmV0dXJuIDE7cmV0dXJuIDB9O0J1ZmZlci5pc0VuY29kaW5nPWZ1bmN0aW9uIGlzRW5jb2RpbmcoZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlfX07QnVmZmVyLmNvbmNhdD1mdW5jdGlvbiBjb25jYXQoZSxyKXtpZighQXJyYXkuaXNBcnJheShlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyl9aWYoZS5sZW5ndGg9PT0wKXtyZXR1cm4gQnVmZmVyLmFsbG9jKDApfXZhciB0O2lmKHI9PT11bmRlZmluZWQpe3I9MDtmb3IodD0wO3Q8ZS5sZW5ndGg7Kyt0KXtyKz1lW3RdLmxlbmd0aH19dmFyIGY9QnVmZmVyLmFsbG9jVW5zYWZlKHIpO3ZhciBuPTA7Zm9yKHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIGk9ZVt0XTtpZihpc0luc3RhbmNlKGksVWludDhBcnJheSkpe2k9QnVmZmVyLmZyb20oaSl9aWYoIUJ1ZmZlci5pc0J1ZmZlcihpKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyl9aS5jb3B5KGYsbik7bis9aS5sZW5ndGh9cmV0dXJuIGZ9O2Z1bmN0aW9uIGJ5dGVMZW5ndGgoZSxyKXtpZihCdWZmZXIuaXNCdWZmZXIoZSkpe3JldHVybiBlLmxlbmd0aH1pZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGlzSW5zdGFuY2UoZSxBcnJheUJ1ZmZlcikpe3JldHVybiBlLmJ5dGVMZW5ndGh9aWYodHlwZW9mIGUhPT1cInN0cmluZ1wiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJytcIlJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpfXZhciB0PWUubGVuZ3RoO3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdPT09dHJ1ZTtpZighZiYmdD09PTApcmV0dXJuIDA7dmFyIG49ZmFsc2U7Zm9yKDs7KXtzd2l0Y2gocil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gdDtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdXRmOFRvQnl0ZXMoZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB0KjI7Y2FzZVwiaGV4XCI6cmV0dXJuIHQ+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBiYXNlNjRUb0J5dGVzKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pe3JldHVybiBmPy0xOnV0ZjhUb0J5dGVzKGUpLmxlbmd0aH1yPShcIlwiK3IpLnRvTG93ZXJDYXNlKCk7bj10cnVlfX19QnVmZmVyLmJ5dGVMZW5ndGg9Ynl0ZUxlbmd0aDtmdW5jdGlvbiBzbG93VG9TdHJpbmcoZSxyLHQpe3ZhciBmPWZhbHNlO2lmKHI9PT11bmRlZmluZWR8fHI8MCl7cj0wfWlmKHI+dGhpcy5sZW5ndGgpe3JldHVyblwiXCJ9aWYodD09PXVuZGVmaW5lZHx8dD50aGlzLmxlbmd0aCl7dD10aGlzLmxlbmd0aH1pZih0PD0wKXtyZXR1cm5cIlwifXQ+Pj49MDtyPj4+PTA7aWYodDw9cil7cmV0dXJuXCJcIn1pZighZSllPVwidXRmOFwiO3doaWxlKHRydWUpe3N3aXRjaChlKXtjYXNlXCJoZXhcIjpyZXR1cm4gaGV4U2xpY2UodGhpcyxyLHQpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiB1dGY4U2xpY2UodGhpcyxyLHQpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIGFzY2lpU2xpY2UodGhpcyxyLHQpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBsYXRpbjFTbGljZSh0aGlzLHIsdCk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMscix0KTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMscix0KTtkZWZhdWx0OmlmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO2U9KGUrXCJcIikudG9Mb3dlckNhc2UoKTtmPXRydWV9fX1CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlcj10cnVlO2Z1bmN0aW9uIHN3YXAoZSxyLHQpe3ZhciBmPWVbcl07ZVtyXT1lW3RdO2VbdF09Zn1CdWZmZXIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbiBzd2FwMTYoKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpfWZvcih2YXIgcj0wO3I8ZTtyKz0yKXtzd2FwKHRoaXMscixyKzEpfXJldHVybiB0aGlzfTtCdWZmZXIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbiBzd2FwMzIoKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPT0wKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpfWZvcih2YXIgcj0wO3I8ZTtyKz00KXtzd2FwKHRoaXMscixyKzMpO3N3YXAodGhpcyxyKzEscisyKX1yZXR1cm4gdGhpc307QnVmZmVyLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24gc3dhcDY0KCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT09MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKX1mb3IodmFyIHI9MDtyPGU7cis9OCl7c3dhcCh0aGlzLHIscis3KTtzd2FwKHRoaXMscisxLHIrNik7c3dhcCh0aGlzLHIrMixyKzUpO3N3YXAodGhpcyxyKzMscis0KX1yZXR1cm4gdGhpc307QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbiB0b1N0cmluZygpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGU9PT0wKXJldHVyblwiXCI7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIHV0ZjhTbGljZSh0aGlzLDAsZSk7cmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O0J1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZztCdWZmZXIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbiBlcXVhbHMoZSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtpZih0aGlzPT09ZSlyZXR1cm4gdHJ1ZTtyZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcyxlKT09PTB9O0J1ZmZlci5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbiBpbnNwZWN0KCl7dmFyIGU9XCJcIjt2YXIgdD1yLklOU1BFQ1RfTUFYX0JZVEVTO2U9dGhpcy50b1N0cmluZyhcImhleFwiLDAsdCkucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpO2lmKHRoaXMubGVuZ3RoPnQpZSs9XCIgLi4uIFwiO3JldHVyblwiPEJ1ZmZlciBcIitlK1wiPlwifTtpZihpKXtCdWZmZXIucHJvdG90eXBlW2ldPUJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdH1CdWZmZXIucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24gY29tcGFyZShlLHIsdCxmLG4pe2lmKGlzSW5zdGFuY2UoZSxVaW50OEFycmF5KSl7ZT1CdWZmZXIuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCl9aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJytcIlJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpfWlmKHI9PT11bmRlZmluZWQpe3I9MH1pZih0PT09dW5kZWZpbmVkKXt0PWU/ZS5sZW5ndGg6MH1pZihmPT09dW5kZWZpbmVkKXtmPTB9aWYobj09PXVuZGVmaW5lZCl7bj10aGlzLmxlbmd0aH1pZihyPDB8fHQ+ZS5sZW5ndGh8fGY8MHx8bj50aGlzLmxlbmd0aCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIil9aWYoZj49biYmcj49dCl7cmV0dXJuIDB9aWYoZj49bil7cmV0dXJuLTF9aWYocj49dCl7cmV0dXJuIDF9cj4+Pj0wO3Q+Pj49MDtmPj4+PTA7bj4+Pj0wO2lmKHRoaXM9PT1lKXJldHVybiAwO3ZhciBpPW4tZjt2YXIgbz10LXI7dmFyIHU9TWF0aC5taW4oaSxvKTt2YXIgYT10aGlzLnNsaWNlKGYsbik7dmFyIHM9ZS5zbGljZShyLHQpO2Zvcih2YXIgaD0wO2g8dTsrK2gpe2lmKGFbaF0hPT1zW2hdKXtpPWFbaF07bz1zW2hdO2JyZWFrfX1pZihpPG8pcmV0dXJuLTE7aWYobzxpKXJldHVybiAxO3JldHVybiAwfTtmdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZihlLHIsdCxmLG4pe2lmKGUubGVuZ3RoPT09MClyZXR1cm4tMTtpZih0eXBlb2YgdD09PVwic3RyaW5nXCIpe2Y9dDt0PTB9ZWxzZSBpZih0PjIxNDc0ODM2NDcpe3Q9MjE0NzQ4MzY0N31lbHNlIGlmKHQ8LTIxNDc0ODM2NDgpe3Q9LTIxNDc0ODM2NDh9dD0rdDtpZihudW1iZXJJc05hTih0KSl7dD1uPzA6ZS5sZW5ndGgtMX1pZih0PDApdD1lLmxlbmd0aCt0O2lmKHQ+PWUubGVuZ3RoKXtpZihuKXJldHVybi0xO2Vsc2UgdD1lLmxlbmd0aC0xfWVsc2UgaWYodDwwKXtpZihuKXQ9MDtlbHNlIHJldHVybi0xfWlmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7cj1CdWZmZXIuZnJvbShyLGYpfWlmKEJ1ZmZlci5pc0J1ZmZlcihyKSl7aWYoci5sZW5ndGg9PT0wKXtyZXR1cm4tMX1yZXR1cm4gYXJyYXlJbmRleE9mKGUscix0LGYsbil9ZWxzZSBpZih0eXBlb2Ygcj09PVwibnVtYmVyXCIpe3I9ciYyNTU7aWYodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9PT1cImZ1bmN0aW9uXCIpe2lmKG4pe3JldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSxyLHQpfWVsc2V7cmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSxyLHQpfX1yZXR1cm4gYXJyYXlJbmRleE9mKGUsW3JdLHQsZixuKX10aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIGFycmF5SW5kZXhPZihlLHIsdCxmLG4pe3ZhciBpPTE7dmFyIG89ZS5sZW5ndGg7dmFyIHU9ci5sZW5ndGg7aWYoZiE9PXVuZGVmaW5lZCl7Zj1TdHJpbmcoZikudG9Mb3dlckNhc2UoKTtpZihmPT09XCJ1Y3MyXCJ8fGY9PT1cInVjcy0yXCJ8fGY9PT1cInV0ZjE2bGVcInx8Zj09PVwidXRmLTE2bGVcIil7aWYoZS5sZW5ndGg8Mnx8ci5sZW5ndGg8Mil7cmV0dXJuLTF9aT0yO28vPTI7dS89Mjt0Lz0yfX1mdW5jdGlvbiByZWFkKGUscil7aWYoaT09PTEpe3JldHVybiBlW3JdfWVsc2V7cmV0dXJuIGUucmVhZFVJbnQxNkJFKHIqaSl9fXZhciBhO2lmKG4pe3ZhciBzPS0xO2ZvcihhPXQ7YTxvO2ErKyl7aWYocmVhZChlLGEpPT09cmVhZChyLHM9PT0tMT8wOmEtcykpe2lmKHM9PT0tMSlzPWE7aWYoYS1zKzE9PT11KXJldHVybiBzKml9ZWxzZXtpZihzIT09LTEpYS09YS1zO3M9LTF9fX1lbHNle2lmKHQrdT5vKXQ9by11O2ZvcihhPXQ7YT49MDthLS0pe3ZhciBoPXRydWU7Zm9yKHZhciBjPTA7Yzx1O2MrKyl7aWYocmVhZChlLGErYykhPT1yZWFkKHIsYykpe2g9ZmFsc2U7YnJlYWt9fWlmKGgpcmV0dXJuIGF9fXJldHVybi0xfUJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24gaW5jbHVkZXMoZSxyLHQpe3JldHVybiB0aGlzLmluZGV4T2YoZSxyLHQpIT09LTF9O0J1ZmZlci5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbiBpbmRleE9mKGUscix0KXtyZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcyxlLHIsdCx0cnVlKX07QnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbiBsYXN0SW5kZXhPZihlLHIsdCl7cmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsZSxyLHQsZmFsc2UpfTtmdW5jdGlvbiBoZXhXcml0ZShlLHIsdCxmKXt0PU51bWJlcih0KXx8MDt2YXIgbj1lLmxlbmd0aC10O2lmKCFmKXtmPW59ZWxzZXtmPU51bWJlcihmKTtpZihmPm4pe2Y9bn19dmFyIGk9ci5sZW5ndGg7aWYoZj5pLzIpe2Y9aS8yfWZvcih2YXIgbz0wO288ZjsrK28pe3ZhciB1PXBhcnNlSW50KHIuc3Vic3RyKG8qMiwyKSwxNik7aWYobnVtYmVySXNOYU4odSkpcmV0dXJuIG87ZVt0K29dPXV9cmV0dXJuIG99ZnVuY3Rpb24gdXRmOFdyaXRlKGUscix0LGYpe3JldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHIsZS5sZW5ndGgtdCksZSx0LGYpfWZ1bmN0aW9uIGFzY2lpV3JpdGUoZSxyLHQsZil7cmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHIpLGUsdCxmKX1mdW5jdGlvbiBsYXRpbjFXcml0ZShlLHIsdCxmKXtyZXR1cm4gYXNjaWlXcml0ZShlLHIsdCxmKX1mdW5jdGlvbiBiYXNlNjRXcml0ZShlLHIsdCxmKXtyZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHIpLGUsdCxmKX1mdW5jdGlvbiB1Y3MyV3JpdGUoZSxyLHQsZil7cmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMocixlLmxlbmd0aC10KSxlLHQsZil9QnVmZmVyLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbiB3cml0ZShlLHIsdCxmKXtpZihyPT09dW5kZWZpbmVkKXtmPVwidXRmOFwiO3Q9dGhpcy5sZW5ndGg7cj0wfWVsc2UgaWYodD09PXVuZGVmaW5lZCYmdHlwZW9mIHI9PT1cInN0cmluZ1wiKXtmPXI7dD10aGlzLmxlbmd0aDtyPTB9ZWxzZSBpZihpc0Zpbml0ZShyKSl7cj1yPj4+MDtpZihpc0Zpbml0ZSh0KSl7dD10Pj4+MDtpZihmPT09dW5kZWZpbmVkKWY9XCJ1dGY4XCJ9ZWxzZXtmPXQ7dD11bmRlZmluZWR9fWVsc2V7dGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIil9dmFyIG49dGhpcy5sZW5ndGgtcjtpZih0PT09dW5kZWZpbmVkfHx0Pm4pdD1uO2lmKGUubGVuZ3RoPjAmJih0PDB8fHI8MCl8fHI+dGhpcy5sZW5ndGgpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIil9aWYoIWYpZj1cInV0ZjhcIjt2YXIgaT1mYWxzZTtmb3IoOzspe3N3aXRjaChmKXtjYXNlXCJoZXhcIjpyZXR1cm4gaGV4V3JpdGUodGhpcyxlLHIsdCk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHV0ZjhXcml0ZSh0aGlzLGUscix0KTtjYXNlXCJhc2NpaVwiOnJldHVybiBhc2NpaVdyaXRlKHRoaXMsZSxyLHQpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBsYXRpbjFXcml0ZSh0aGlzLGUscix0KTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gYmFzZTY0V3JpdGUodGhpcyxlLHIsdCk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIHVjczJXcml0ZSh0aGlzLGUscix0KTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2YpO2Y9KFwiXCIrZikudG9Mb3dlckNhc2UoKTtpPXRydWV9fX07QnVmZmVyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24gdG9KU09OKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGJhc2U2NFNsaWNlKGUscix0KXtpZihyPT09MCYmdD09PWUubGVuZ3RoKXtyZXR1cm4gZi5mcm9tQnl0ZUFycmF5KGUpfWVsc2V7cmV0dXJuIGYuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHIsdCkpfX1mdW5jdGlvbiB1dGY4U2xpY2UoZSxyLHQpe3Q9TWF0aC5taW4oZS5sZW5ndGgsdCk7dmFyIGY9W107dmFyIG49cjt3aGlsZShuPHQpe3ZhciBpPWVbbl07dmFyIG89bnVsbDt2YXIgdT1pPjIzOT80Omk+MjIzPzM6aT4xOTE/MjoxO2lmKG4rdTw9dCl7dmFyIGEscyxoLGM7c3dpdGNoKHUpe2Nhc2UgMTppZihpPDEyOCl7bz1pfWJyZWFrO2Nhc2UgMjphPWVbbisxXTtpZigoYSYxOTIpPT09MTI4KXtjPShpJjMxKTw8NnxhJjYzO2lmKGM+MTI3KXtvPWN9fWJyZWFrO2Nhc2UgMzphPWVbbisxXTtzPWVbbisyXTtpZigoYSYxOTIpPT09MTI4JiYocyYxOTIpPT09MTI4KXtjPShpJjE1KTw8MTJ8KGEmNjMpPDw2fHMmNjM7aWYoYz4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0Mykpe289Y319YnJlYWs7Y2FzZSA0OmE9ZVtuKzFdO3M9ZVtuKzJdO2g9ZVtuKzNdO2lmKChhJjE5Mik9PT0xMjgmJihzJjE5Mik9PT0xMjgmJihoJjE5Mik9PT0xMjgpe2M9KGkmMTUpPDwxOHwoYSY2Myk8PDEyfChzJjYzKTw8NnxoJjYzO2lmKGM+NjU1MzUmJmM8MTExNDExMil7bz1jfX19fWlmKG89PT1udWxsKXtvPTY1NTMzO3U9MX1lbHNlIGlmKG8+NjU1MzUpe28tPTY1NTM2O2YucHVzaChvPj4+MTAmMTAyM3w1NTI5Nik7bz01NjMyMHxvJjEwMjN9Zi5wdXNoKG8pO24rPXV9cmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShmKX12YXIgdT00MDk2O2Z1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheShlKXt2YXIgcj1lLmxlbmd0aDtpZihyPD11KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSl9dmFyIHQ9XCJcIjt2YXIgZj0wO3doaWxlKGY8cil7dCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShmLGYrPXUpKX1yZXR1cm4gdH1mdW5jdGlvbiBhc2NpaVNsaWNlKGUscix0KXt2YXIgZj1cIlwiO3Q9TWF0aC5taW4oZS5sZW5ndGgsdCk7Zm9yKHZhciBuPXI7bjx0Oysrbil7Zis9U3RyaW5nLmZyb21DaGFyQ29kZShlW25dJjEyNyl9cmV0dXJuIGZ9ZnVuY3Rpb24gbGF0aW4xU2xpY2UoZSxyLHQpe3ZhciBmPVwiXCI7dD1NYXRoLm1pbihlLmxlbmd0aCx0KTtmb3IodmFyIG49cjtuPHQ7KytuKXtmKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pfXJldHVybiBmfWZ1bmN0aW9uIGhleFNsaWNlKGUscix0KXt2YXIgZj1lLmxlbmd0aDtpZighcnx8cjwwKXI9MDtpZighdHx8dDwwfHx0PmYpdD1mO3ZhciBuPVwiXCI7Zm9yKHZhciBpPXI7aTx0OysraSl7bis9c1tlW2ldXX1yZXR1cm4gbn1mdW5jdGlvbiB1dGYxNmxlU2xpY2UoZSxyLHQpe3ZhciBmPWUuc2xpY2Uocix0KTt2YXIgbj1cIlwiO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7aSs9Mil7bis9U3RyaW5nLmZyb21DaGFyQ29kZShmW2ldK2ZbaSsxXSoyNTYpfXJldHVybiBufUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24gc2xpY2UoZSxyKXt2YXIgdD10aGlzLmxlbmd0aDtlPX5+ZTtyPXI9PT11bmRlZmluZWQ/dDp+fnI7aWYoZTwwKXtlKz10O2lmKGU8MCllPTB9ZWxzZSBpZihlPnQpe2U9dH1pZihyPDApe3IrPXQ7aWYocjwwKXI9MH1lbHNlIGlmKHI+dCl7cj10fWlmKHI8ZSlyPWU7dmFyIGY9dGhpcy5zdWJhcnJheShlLHIpO09iamVjdC5zZXRQcm90b3R5cGVPZihmLEJ1ZmZlci5wcm90b3R5cGUpO3JldHVybiBmfTtmdW5jdGlvbiBjaGVja09mZnNldChlLHIsdCl7aWYoZSUxIT09MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGUrcj50KXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24gcmVhZFVJbnRMRShlLHIsdCl7ZT1lPj4+MDtyPXI+Pj4wO2lmKCF0KWNoZWNrT2Zmc2V0KGUscix0aGlzLmxlbmd0aCk7dmFyIGY9dGhpc1tlXTt2YXIgbj0xO3ZhciBpPTA7d2hpbGUoKytpPHImJihuKj0yNTYpKXtmKz10aGlzW2UraV0qbn1yZXR1cm4gZn07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uIHJlYWRVSW50QkUoZSxyLHQpe2U9ZT4+PjA7cj1yPj4+MDtpZighdCl7Y2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKX12YXIgZj10aGlzW2UrLS1yXTt2YXIgbj0xO3doaWxlKHI+MCYmKG4qPTI1Nikpe2YrPXRoaXNbZSstLXJdKm59cmV0dXJuIGZ9O0J1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uIHJlYWRVSW50OChlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSwxLHRoaXMubGVuZ3RoKTtyZXR1cm4gdGhpc1tlXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24gcmVhZFVJbnQxNkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdfHRoaXNbZSsxXTw8OH07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24gcmVhZFVJbnQxNkJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdPDw4fHRoaXNbZSsxXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24gcmVhZFVJbnQzMkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybih0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSt0aGlzW2UrM10qMTY3NzcyMTZ9O0J1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uIHJlYWRVSW50MzJCRShlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gdGhpc1tlXSoxNjc3NzIxNisodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX07QnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24gcmVhZEludExFKGUscix0KXtlPWU+Pj4wO3I9cj4+PjA7aWYoIXQpY2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKTt2YXIgZj10aGlzW2VdO3ZhciBuPTE7dmFyIGk9MDt3aGlsZSgrK2k8ciYmKG4qPTI1Nikpe2YrPXRoaXNbZStpXSpufW4qPTEyODtpZihmPj1uKWYtPU1hdGgucG93KDIsOCpyKTtyZXR1cm4gZn07QnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24gcmVhZEludEJFKGUscix0KXtlPWU+Pj4wO3I9cj4+PjA7aWYoIXQpY2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKTt2YXIgZj1yO3ZhciBuPTE7dmFyIGk9dGhpc1tlKy0tZl07d2hpbGUoZj4wJiYobio9MjU2KSl7aSs9dGhpc1tlKy0tZl0qbn1uKj0xMjg7aWYoaT49bilpLT1NYXRoLnBvdygyLDgqcik7cmV0dXJuIGl9O0J1ZmZlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24gcmVhZEludDgoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsMSx0aGlzLmxlbmd0aCk7aWYoISh0aGlzW2VdJjEyOCkpcmV0dXJuIHRoaXNbZV07cmV0dXJuKDI1NS10aGlzW2VdKzEpKi0xfTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uIHJlYWRJbnQxNkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3ZhciB0PXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiB0JjMyNzY4P3R8NDI5NDkwMTc2MDp0fTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uIHJlYWRJbnQxNkJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3ZhciB0PXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiB0JjMyNzY4P3R8NDI5NDkwMTc2MDp0fTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uIHJlYWRJbnQzMkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9O0J1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24gcmVhZEludDMyQkUoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsNCx0aGlzLmxlbmd0aCk7cmV0dXJuIHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbiByZWFkRmxvYXRMRShlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gbi5yZWFkKHRoaXMsZSx0cnVlLDIzLDQpfTtCdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uIHJlYWRGbG9hdEJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybiBuLnJlYWQodGhpcyxlLGZhbHNlLDIzLDQpfTtCdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbiByZWFkRG91YmxlTEUoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsOCx0aGlzLmxlbmd0aCk7cmV0dXJuIG4ucmVhZCh0aGlzLGUsdHJ1ZSw1Miw4KX07QnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24gcmVhZERvdWJsZUJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDgsdGhpcy5sZW5ndGgpO3JldHVybiBuLnJlYWQodGhpcyxlLGZhbHNlLDUyLDgpfTtmdW5jdGlvbiBjaGVja0ludChlLHIsdCxmLG4saSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihyPm58fHI8aSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZih0K2Y+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbiB3cml0ZVVJbnRMRShlLHIsdCxmKXtlPStlO3I9cj4+PjA7dD10Pj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQpLTE7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLDApfXZhciBpPTE7dmFyIG89MDt0aGlzW3JdPWUmMjU1O3doaWxlKCsrbzx0JiYoaSo9MjU2KSl7dGhpc1tyK29dPWUvaSYyNTV9cmV0dXJuIHIrdH07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbiB3cml0ZVVJbnRCRShlLHIsdCxmKXtlPStlO3I9cj4+PjA7dD10Pj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQpLTE7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLDApfXZhciBpPXQtMTt2YXIgbz0xO3RoaXNbcitpXT1lJjI1NTt3aGlsZSgtLWk+PTAmJihvKj0yNTYpKXt0aGlzW3IraV09ZS9vJjI1NX1yZXR1cm4gcit0fTtCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24gd3JpdGVVSW50OChlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDEsMjU1LDApO3RoaXNbcl09ZSYyNTU7cmV0dXJuIHIrMX07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uIHdyaXRlVUludDE2TEUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciwyLDY1NTM1LDApO3RoaXNbcl09ZSYyNTU7dGhpc1tyKzFdPWU+Pj44O3JldHVybiByKzJ9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbiB3cml0ZVVJbnQxNkJFKGUscix0KXtlPStlO3I9cj4+PjA7aWYoIXQpY2hlY2tJbnQodGhpcyxlLHIsMiw2NTUzNSwwKTt0aGlzW3JdPWU+Pj44O3RoaXNbcisxXT1lJjI1NTtyZXR1cm4gcisyfTtCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24gd3JpdGVVSW50MzJMRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsNDI5NDk2NzI5NSwwKTt0aGlzW3IrM109ZT4+PjI0O3RoaXNbcisyXT1lPj4+MTY7dGhpc1tyKzFdPWU+Pj44O3RoaXNbcl09ZSYyNTU7cmV0dXJuIHIrNH07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlVUludDMyQkUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciw0LDQyOTQ5NjcyOTUsMCk7dGhpc1tyXT1lPj4+MjQ7dGhpc1tyKzFdPWU+Pj4xNjt0aGlzW3IrMl09ZT4+Pjg7dGhpc1tyKzNdPWUmMjU1O3JldHVybiByKzR9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbiB3cml0ZUludExFKGUscix0LGYpe2U9K2U7cj1yPj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQtMSk7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLTEsLW4pfXZhciBpPTA7dmFyIG89MTt2YXIgdT0wO3RoaXNbcl09ZSYyNTU7d2hpbGUoKytpPHQmJihvKj0yNTYpKXtpZihlPDAmJnU9PT0wJiZ0aGlzW3IraS0xXSE9PTApe3U9MX10aGlzW3IraV09KGUvbz4+MCktdSYyNTV9cmV0dXJuIHIrdH07QnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uIHdyaXRlSW50QkUoZSxyLHQsZil7ZT0rZTtyPXI+Pj4wO2lmKCFmKXt2YXIgbj1NYXRoLnBvdygyLDgqdC0xKTtjaGVja0ludCh0aGlzLGUscix0LG4tMSwtbil9dmFyIGk9dC0xO3ZhciBvPTE7dmFyIHU9MDt0aGlzW3IraV09ZSYyNTU7d2hpbGUoLS1pPj0wJiYobyo9MjU2KSl7aWYoZTwwJiZ1PT09MCYmdGhpc1tyK2krMV0hPT0wKXt1PTF9dGhpc1tyK2ldPShlL28+PjApLXUmMjU1fXJldHVybiByK3R9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uIHdyaXRlSW50OChlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDEsMTI3LC0xMjgpO2lmKGU8MCllPTI1NStlKzE7dGhpc1tyXT1lJjI1NTtyZXR1cm4gcisxfTtCdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbiB3cml0ZUludDE2TEUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciwyLDMyNzY3LC0zMjc2OCk7dGhpc1tyXT1lJjI1NTt0aGlzW3IrMV09ZT4+Pjg7cmV0dXJuIHIrMn07QnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24gd3JpdGVJbnQxNkJFKGUscix0KXtlPStlO3I9cj4+PjA7aWYoIXQpY2hlY2tJbnQodGhpcyxlLHIsMiwzMjc2NywtMzI3NjgpO3RoaXNbcl09ZT4+Pjg7dGhpc1tyKzFdPWUmMjU1O3JldHVybiByKzJ9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uIHdyaXRlSW50MzJMRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7dGhpc1tyXT1lJjI1NTt0aGlzW3IrMV09ZT4+Pjg7dGhpc1tyKzJdPWU+Pj4xNjt0aGlzW3IrM109ZT4+PjI0O3JldHVybiByKzR9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlSW50MzJCRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7aWYoZTwwKWU9NDI5NDk2NzI5NStlKzE7dGhpc1tyXT1lPj4+MjQ7dGhpc1tyKzFdPWU+Pj4xNjt0aGlzW3IrMl09ZT4+Pjg7dGhpc1tyKzNdPWUmMjU1O3JldHVybiByKzR9O2Z1bmN0aW9uIGNoZWNrSUVFRTc1NChlLHIsdCxmLG4saSl7aWYodCtmPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiB3cml0ZUZsb2F0KGUscix0LGYsaSl7cj0rcjt0PXQ+Pj4wO2lmKCFpKXtjaGVja0lFRUU3NTQoZSxyLHQsNCwzNDAyODIzNDY2Mzg1Mjg4NmUyMiwtMzQwMjgyMzQ2NjM4NTI4ODZlMjIpfW4ud3JpdGUoZSxyLHQsZiwyMyw0KTtyZXR1cm4gdCs0fUJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uIHdyaXRlRmxvYXRMRShlLHIsdCl7cmV0dXJuIHdyaXRlRmxvYXQodGhpcyxlLHIsdHJ1ZSx0KX07QnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24gd3JpdGVGbG9hdEJFKGUscix0KXtyZXR1cm4gd3JpdGVGbG9hdCh0aGlzLGUscixmYWxzZSx0KX07ZnVuY3Rpb24gd3JpdGVEb3VibGUoZSxyLHQsZixpKXtyPStyO3Q9dD4+PjA7aWYoIWkpe2NoZWNrSUVFRTc1NChlLHIsdCw4LDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiwtMTc5NzY5MzEzNDg2MjMxNTdlMjkyKX1uLndyaXRlKGUscix0LGYsNTIsOCk7cmV0dXJuIHQrOH1CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24gd3JpdGVEb3VibGVMRShlLHIsdCl7cmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsZSxyLHRydWUsdCl9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbiB3cml0ZURvdWJsZUJFKGUscix0KXtyZXR1cm4gd3JpdGVEb3VibGUodGhpcyxlLHIsZmFsc2UsdCl9O0J1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbiBjb3B5KGUscix0LGYpe2lmKCFCdWZmZXIuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZighdCl0PTA7aWYoIWYmJmYhPT0wKWY9dGhpcy5sZW5ndGg7aWYocj49ZS5sZW5ndGgpcj1lLmxlbmd0aDtpZighcilyPTA7aWYoZj4wJiZmPHQpZj10O2lmKGY9PT10KXJldHVybiAwO2lmKGUubGVuZ3RoPT09MHx8dGhpcy5sZW5ndGg9PT0wKXJldHVybiAwO2lmKHI8MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpfWlmKHQ8MHx8dD49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoZjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7aWYoZj50aGlzLmxlbmd0aClmPXRoaXMubGVuZ3RoO2lmKGUubGVuZ3RoLXI8Zi10KXtmPWUubGVuZ3RoLXIrdH12YXIgbj1mLXQ7aWYodGhpcz09PWUmJnR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluPT09XCJmdW5jdGlvblwiKXt0aGlzLmNvcHlXaXRoaW4ocix0LGYpfWVsc2UgaWYodGhpcz09PWUmJnQ8ciYmcjxmKXtmb3IodmFyIGk9bi0xO2k+PTA7LS1pKXtlW2krcl09dGhpc1tpK3RdfX1lbHNle1VpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheSh0LGYpLHIpfXJldHVybiBufTtCdWZmZXIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24gZmlsbChlLHIsdCxmKXtpZih0eXBlb2YgZT09PVwic3RyaW5nXCIpe2lmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7Zj1yO3I9MDt0PXRoaXMubGVuZ3RofWVsc2UgaWYodHlwZW9mIHQ9PT1cInN0cmluZ1wiKXtmPXQ7dD10aGlzLmxlbmd0aH1pZihmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZiE9PVwic3RyaW5nXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nXCIpfWlmKHR5cGVvZiBmPT09XCJzdHJpbmdcIiYmIUJ1ZmZlci5pc0VuY29kaW5nKGYpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZil9aWYoZS5sZW5ndGg9PT0xKXt2YXIgbj1lLmNoYXJDb2RlQXQoMCk7aWYoZj09PVwidXRmOFwiJiZuPDEyOHx8Zj09PVwibGF0aW4xXCIpe2U9bn19fWVsc2UgaWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXtlPWUmMjU1fWVsc2UgaWYodHlwZW9mIGU9PT1cImJvb2xlYW5cIil7ZT1OdW1iZXIoZSl9aWYocjwwfHx0aGlzLmxlbmd0aDxyfHx0aGlzLmxlbmd0aDx0KXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKX1pZih0PD1yKXtyZXR1cm4gdGhpc31yPXI+Pj4wO3Q9dD09PXVuZGVmaW5lZD90aGlzLmxlbmd0aDp0Pj4+MDtpZighZSllPTA7dmFyIGk7aWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXtmb3IoaT1yO2k8dDsrK2kpe3RoaXNbaV09ZX19ZWxzZXt2YXIgbz1CdWZmZXIuaXNCdWZmZXIoZSk/ZTpCdWZmZXIuZnJvbShlLGYpO3ZhciB1PW8ubGVuZ3RoO2lmKHU9PT0wKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInK2UrJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpfWZvcihpPTA7aTx0LXI7KytpKXt0aGlzW2krcl09b1tpJXVdfX1yZXR1cm4gdGhpc307dmFyIGE9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBiYXNlNjRjbGVhbihlKXtlPWUuc3BsaXQoXCI9XCIpWzBdO2U9ZS50cmltKCkucmVwbGFjZShhLFwiXCIpO2lmKGUubGVuZ3RoPDIpcmV0dXJuXCJcIjt3aGlsZShlLmxlbmd0aCU0IT09MCl7ZT1lK1wiPVwifXJldHVybiBlfWZ1bmN0aW9uIHV0ZjhUb0J5dGVzKGUscil7cj1yfHxJbmZpbml0eTt2YXIgdDt2YXIgZj1lLmxlbmd0aDt2YXIgbj1udWxsO3ZhciBpPVtdO2Zvcih2YXIgbz0wO288ZjsrK28pe3Q9ZS5jaGFyQ29kZUF0KG8pO2lmKHQ+NTUyOTUmJnQ8NTczNDQpe2lmKCFuKXtpZih0PjU2MzE5KXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNlIGlmKG8rMT09PWYpe2lmKChyLT0zKT4tMSlpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW49dDtjb250aW51ZX1pZih0PDU2MzIwKXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KTtuPXQ7Y29udGludWV9dD0obi01NTI5Njw8MTB8dC01NjMyMCkrNjU1MzZ9ZWxzZSBpZihuKXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KX1uPW51bGw7aWYodDwxMjgpe2lmKChyLT0xKTwwKWJyZWFrO2kucHVzaCh0KX1lbHNlIGlmKHQ8MjA0OCl7aWYoKHItPTIpPDApYnJlYWs7aS5wdXNoKHQ+PjZ8MTkyLHQmNjN8MTI4KX1lbHNlIGlmKHQ8NjU1MzYpe2lmKChyLT0zKTwwKWJyZWFrO2kucHVzaCh0Pj4xMnwyMjQsdD4+NiY2M3wxMjgsdCY2M3wxMjgpfWVsc2UgaWYodDwxMTE0MTEyKXtpZigoci09NCk8MClicmVhaztpLnB1c2godD4+MTh8MjQwLHQ+PjEyJjYzfDEyOCx0Pj42JjYzfDEyOCx0JjYzfDEyOCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIil9fXJldHVybiBpfWZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhlKXt2YXIgcj1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7ci5wdXNoKGUuY2hhckNvZGVBdCh0KSYyNTUpfXJldHVybiByfWZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKGUscil7dmFyIHQsZixuO3ZhciBpPVtdO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKXtpZigoci09Mik8MClicmVhazt0PWUuY2hhckNvZGVBdChvKTtmPXQ+Pjg7bj10JTI1NjtpLnB1c2gobik7aS5wdXNoKGYpfXJldHVybiBpfWZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMoZSl7cmV0dXJuIGYudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oZSkpfWZ1bmN0aW9uIGJsaXRCdWZmZXIoZSxyLHQsZil7Zm9yKHZhciBuPTA7bjxmOysrbil7aWYobit0Pj1yLmxlbmd0aHx8bj49ZS5sZW5ndGgpYnJlYWs7cltuK3RdPWVbbl19cmV0dXJuIG59ZnVuY3Rpb24gaXNJbnN0YW5jZShlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygcnx8ZSE9bnVsbCYmZS5jb25zdHJ1Y3RvciE9bnVsbCYmZS5jb25zdHJ1Y3Rvci5uYW1lIT1udWxsJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT1yLm5hbWV9ZnVuY3Rpb24gbnVtYmVySXNOYU4oZSl7cmV0dXJuIGUhPT1lfXZhciBzPWZ1bmN0aW9uKCl7dmFyIGU9XCIwMTIzNDU2Nzg5YWJjZGVmXCI7dmFyIHI9bmV3IEFycmF5KDI1Nik7Zm9yKHZhciB0PTA7dDwxNjsrK3Qpe3ZhciBmPXQqMTY7Zm9yKHZhciBuPTA7bjwxNjsrK24pe3JbZituXT1lW3RdK2Vbbl19fXJldHVybiByfSgpfSw3ODM6ZnVuY3Rpb24oZSxyKXtcclxuLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cclxuci5yZWFkPWZ1bmN0aW9uKGUscix0LGYsbil7dmFyIGksbzt2YXIgdT1uKjgtZi0xO3ZhciBhPSgxPDx1KS0xO3ZhciBzPWE+PjE7dmFyIGg9LTc7dmFyIGM9dD9uLTE6MDt2YXIgbD10Py0xOjE7dmFyIHA9ZVtyK2NdO2MrPWw7aT1wJigxPDwtaCktMTtwPj49LWg7aCs9dTtmb3IoO2g+MDtpPWkqMjU2K2VbcitjXSxjKz1sLGgtPTgpe31vPWkmKDE8PC1oKS0xO2k+Pj0taDtoKz1mO2Zvcig7aD4wO289byoyNTYrZVtyK2NdLGMrPWwsaC09OCl7fWlmKGk9PT0wKXtpPTEtc31lbHNlIGlmKGk9PT1hKXtyZXR1cm4gbz9OYU46KHA/LTE6MSkqSW5maW5pdHl9ZWxzZXtvPW8rTWF0aC5wb3coMixmKTtpPWktc31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsaS1mKX07ci53cml0ZT1mdW5jdGlvbihlLHIsdCxmLG4saSl7dmFyIG8sdSxhO3ZhciBzPWkqOC1uLTE7dmFyIGg9KDE8PHMpLTE7dmFyIGM9aD4+MTt2YXIgbD1uPT09MjM/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowO3ZhciBwPWY/MDppLTE7dmFyIHk9Zj8xOi0xO3ZhciBnPXI8MHx8cj09PTAmJjEvcjwwPzE6MDtyPU1hdGguYWJzKHIpO2lmKGlzTmFOKHIpfHxyPT09SW5maW5pdHkpe3U9aXNOYU4ocik/MTowO289aH1lbHNle289TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMik7aWYociooYT1NYXRoLnBvdygyLC1vKSk8MSl7by0tO2EqPTJ9aWYobytjPj0xKXtyKz1sL2F9ZWxzZXtyKz1sKk1hdGgucG93KDIsMS1jKX1pZihyKmE+PTIpe28rKzthLz0yfWlmKG8rYz49aCl7dT0wO289aH1lbHNlIGlmKG8rYz49MSl7dT0ociphLTEpKk1hdGgucG93KDIsbik7bz1vK2N9ZWxzZXt1PXIqTWF0aC5wb3coMixjLTEpKk1hdGgucG93KDIsbik7bz0wfX1mb3IoO24+PTg7ZVt0K3BdPXUmMjU1LHArPXksdS89MjU2LG4tPTgpe31vPW88PG58dTtzKz1uO2Zvcig7cz4wO2VbdCtwXT1vJjI1NSxwKz15LG8vPTI1NixzLT04KXt9ZVt0K3AteV18PWcqMTI4fX19O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18odCl7dmFyIGY9clt0XTtpZihmIT09dW5kZWZpbmVkKXtyZXR1cm4gZi5leHBvcnRzfXZhciBuPXJbdF09e2V4cG9ydHM6e319O3ZhciBpPXRydWU7dHJ5e2VbdF0obixuLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7aT1mYWxzZX1maW5hbGx5e2lmKGkpZGVsZXRlIHJbdF19cmV0dXJuIG4uZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIHQ9X19uY2N3cGNrX3JlcXVpcmVfXyg3Mik7bW9kdWxlLmV4cG9ydHM9dH0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js": /*!************************************************************!*\ !*** ./node_modules/next/dist/compiled/process/browser.js ***! \************************************************************/ /***/ (function(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(++a1){for(var r=1;r 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\r\n args[_key2 - 1] = arguments[_key2];\r\n }\r\n\r\n printWarning('error', format, args);\r\n }\r\n }\r\n}\r\n\r\nfunction printWarning(level, format, args) {\r\n // When changing this logic, you might want to also\r\n // update consoleWithStackDev.www.js as well.\r\n {\r\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\n var stack = ReactDebugCurrentFrame.getStackAddendum();\r\n\r\n if (stack !== '') {\r\n format += '%s';\r\n args = args.concat([stack]);\r\n } // eslint-disable-next-line react-internal/safe-string-coercion\r\n\r\n\r\n var argsWithFormat = args.map(function (item) {\r\n return String(item);\r\n }); // Careful: RN currently depends on this prefix\r\n\r\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\r\n // breaks IE9: https://github.com/facebook/react/issues/13610\r\n // eslint-disable-next-line react-internal/no-production-logging\r\n\r\n Function.prototype.apply.call(console[level], console, argsWithFormat);\r\n }\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\r\nvar enableCacheElement = false;\r\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\r\n\r\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\r\n// stuff. Intended to enable React core members to more easily debug scheduling\r\n// issues in DEV builds.\r\n\r\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\r\n\r\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\r\nfunction isValidElementType(type) {\r\n if (typeof type === 'string' || typeof type === 'function') {\r\n return true;\r\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\r\n\r\n\r\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\r\n return true;\r\n }\r\n\r\n if (typeof type === 'object' && type !== null) {\r\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\r\n // types supported by any Flight configuration anywhere since\r\n // we don't know which Flight build this will end up being used\r\n // with.\r\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getWrappedName(outerType, innerType, wrapperName) {\r\n var displayName = outerType.displayName;\r\n\r\n if (displayName) {\r\n return displayName;\r\n }\r\n\r\n var functionName = innerType.displayName || innerType.name || '';\r\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\r\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\r\n\r\n\r\nfunction getContextName(type) {\r\n return type.displayName || 'Context';\r\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\r\n\r\n\r\nfunction getComponentNameFromType(type) {\r\n if (type == null) {\r\n // Host root, text node or just invalid type.\r\n return null;\r\n }\r\n\r\n {\r\n if (typeof type.tag === 'number') {\r\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\r\n }\r\n }\r\n\r\n if (typeof type === 'function') {\r\n return type.displayName || type.name || null;\r\n }\r\n\r\n if (typeof type === 'string') {\r\n return type;\r\n }\r\n\r\n switch (type) {\r\n case REACT_FRAGMENT_TYPE:\r\n return 'Fragment';\r\n\r\n case REACT_PORTAL_TYPE:\r\n return 'Portal';\r\n\r\n case REACT_PROFILER_TYPE:\r\n return 'Profiler';\r\n\r\n case REACT_STRICT_MODE_TYPE:\r\n return 'StrictMode';\r\n\r\n case REACT_SUSPENSE_TYPE:\r\n return 'Suspense';\r\n\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return 'SuspenseList';\r\n\r\n case REACT_CACHE_TYPE:\r\n {\r\n return 'Cache';\r\n }\r\n\r\n }\r\n\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_CONTEXT_TYPE:\r\n var context = type;\r\n return getContextName(context) + '.Consumer';\r\n\r\n case REACT_PROVIDER_TYPE:\r\n var provider = type;\r\n return getContextName(provider._context) + '.Provider';\r\n\r\n case REACT_FORWARD_REF_TYPE:\r\n return getWrappedName(type, type.render, 'ForwardRef');\r\n\r\n case REACT_MEMO_TYPE:\r\n var outerName = type.displayName || null;\r\n\r\n if (outerName !== null) {\r\n return outerName;\r\n }\r\n\r\n return getComponentNameFromType(type.type) || 'Memo';\r\n\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n\r\n try {\r\n return getComponentNameFromType(init(payload));\r\n } catch (x) {\r\n return null;\r\n }\r\n }\r\n\r\n case REACT_SERVER_CONTEXT_TYPE:\r\n {\r\n var context2 = type;\r\n return (context2.displayName || context2._globalName) + '.Provider';\r\n }\r\n\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nvar assign = Object.assign;\r\n\r\n// Helpers to patch console.logs to avoid logging during side-effect free\r\n// replaying on render function. This currently only patches the object\r\n// lazily which won't cover if the log function was extracted eagerly.\r\n// We could also eagerly patch the method.\r\nvar disabledDepth = 0;\r\nvar prevLog;\r\nvar prevInfo;\r\nvar prevWarn;\r\nvar prevError;\r\nvar prevGroup;\r\nvar prevGroupCollapsed;\r\nvar prevGroupEnd;\r\n\r\nfunction disabledLog() {}\r\n\r\ndisabledLog.__reactDisabledLog = true;\r\nfunction disableLogs() {\r\n {\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n prevLog = console.log;\r\n prevInfo = console.info;\r\n prevWarn = console.warn;\r\n prevError = console.error;\r\n prevGroup = console.group;\r\n prevGroupCollapsed = console.groupCollapsed;\r\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\r\n\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n value: disabledLog,\r\n writable: true\r\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\r\n\r\n Object.defineProperties(console, {\r\n info: props,\r\n log: props,\r\n warn: props,\r\n error: props,\r\n group: props,\r\n groupCollapsed: props,\r\n groupEnd: props\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n\r\n disabledDepth++;\r\n }\r\n}\r\nfunction reenableLogs() {\r\n {\r\n disabledDepth--;\r\n\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true\r\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\r\n\r\n Object.defineProperties(console, {\r\n log: assign({}, props, {\r\n value: prevLog\r\n }),\r\n info: assign({}, props, {\r\n value: prevInfo\r\n }),\r\n warn: assign({}, props, {\r\n value: prevWarn\r\n }),\r\n error: assign({}, props, {\r\n value: prevError\r\n }),\r\n group: assign({}, props, {\r\n value: prevGroup\r\n }),\r\n groupCollapsed: assign({}, props, {\r\n value: prevGroupCollapsed\r\n }),\r\n groupEnd: assign({}, props, {\r\n value: prevGroupEnd\r\n })\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n\r\n if (disabledDepth < 0) {\r\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\r\n }\r\n }\r\n}\r\n\r\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\r\nvar prefix;\r\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\r\n {\r\n if (prefix === undefined) {\r\n // Extract the VM specific prefix used by each line.\r\n try {\r\n throw Error();\r\n } catch (x) {\r\n var match = x.stack.trim().match(/\\n( *(at )?)/);\r\n prefix = match && match[1] || '';\r\n }\r\n } // We use the prefix to ensure our stacks line up with native stack frames.\r\n\r\n\r\n return '\\n' + prefix + name;\r\n }\r\n}\r\nvar reentry = false;\r\nvar componentFrameCache;\r\n\r\n{\r\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\r\n componentFrameCache = new PossiblyWeakMap();\r\n}\r\n\r\nfunction describeNativeComponentFrame(fn, construct) {\r\n // If something asked for a stack inside a fake render, it should get ignored.\r\n if (!fn || reentry) {\r\n return '';\r\n }\r\n\r\n {\r\n var frame = componentFrameCache.get(fn);\r\n\r\n if (frame !== undefined) {\r\n return frame;\r\n }\r\n }\r\n\r\n var control;\r\n reentry = true;\r\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\r\n\r\n Error.prepareStackTrace = undefined;\r\n var previousDispatcher;\r\n\r\n {\r\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\r\n // for warnings.\r\n\r\n ReactCurrentDispatcher.current = null;\r\n disableLogs();\r\n }\r\n\r\n try {\r\n // This should throw.\r\n if (construct) {\r\n // Something should be setting the props in the constructor.\r\n var Fake = function () {\r\n throw Error();\r\n }; // $FlowFixMe[prop-missing]\r\n\r\n\r\n Object.defineProperty(Fake.prototype, 'props', {\r\n set: function () {\r\n // We use a throwing setter instead of frozen or non-writable props\r\n // because that won't throw in a non-strict mode function.\r\n throw Error();\r\n }\r\n });\r\n\r\n if (typeof Reflect === 'object' && Reflect.construct) {\r\n // We construct a different control for this case to include any extra\r\n // frames added by the construct call.\r\n try {\r\n Reflect.construct(Fake, []);\r\n } catch (x) {\r\n control = x;\r\n }\r\n\r\n Reflect.construct(fn, [], Fake);\r\n } else {\r\n try {\r\n Fake.call();\r\n } catch (x) {\r\n control = x;\r\n } // $FlowFixMe[prop-missing] found when upgrading Flow\r\n\r\n\r\n fn.call(Fake.prototype);\r\n }\r\n } else {\r\n try {\r\n throw Error();\r\n } catch (x) {\r\n control = x;\r\n } // TODO(luna): This will currently only throw if the function component\r\n // tries to access React/ReactDOM/props. We should probably make this throw\r\n // in simple components too\r\n\r\n\r\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\r\n // component, which we don't yet support. Attach a noop catch handler to\r\n // silence the error.\r\n // TODO: Implement component stacks for async client components?\r\n\r\n if (maybePromise && typeof maybePromise.catch === 'function') {\r\n maybePromise.catch(function () {});\r\n }\r\n }\r\n } catch (sample) {\r\n // This is inlined manually because closure doesn't do it for us.\r\n if (sample && control && typeof sample.stack === 'string') {\r\n // This extracts the first frame from the sample that isn't also in the control.\r\n // Skipping one frame that we assume is the frame that calls the two.\r\n var sampleLines = sample.stack.split('\\n');\r\n var controlLines = control.stack.split('\\n');\r\n var s = sampleLines.length - 1;\r\n var c = controlLines.length - 1;\r\n\r\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\r\n // We expect at least one stack frame to be shared.\r\n // Typically this will be the root most one. However, stack frames may be\r\n // cut off due to maximum stack limits. In this case, one maybe cut off\r\n // earlier than the other. We assume that the sample is longer or the same\r\n // and there for cut off earlier. So we should find the root most frame in\r\n // the sample somewhere in the control.\r\n c--;\r\n }\r\n\r\n for (; s >= 1 && c >= 0; s--, c--) {\r\n // Next we find the first one that isn't the same which should be the\r\n // frame that called our sample function and the control.\r\n if (sampleLines[s] !== controlLines[c]) {\r\n // In V8, the first line is describing the message but other VMs don't.\r\n // If we're about to return the first line, and the control is also on the same\r\n // line, that's a pretty good indicator that our sample threw at same line as\r\n // the control. I.e. before we entered the sample frame. So we ignore this result.\r\n // This can happen if you passed a class to function component, or non-function.\r\n if (s !== 1 || c !== 1) {\r\n do {\r\n s--;\r\n c--; // We may still have similar intermediate frames from the construct call.\r\n // The next one that isn't the same should be our match though.\r\n\r\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\r\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\r\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"\"\r\n // but we have a user-provided \"displayName\"\r\n // splice it in to make the stack more readable.\r\n\r\n\r\n if (fn.displayName && _frame.includes('')) {\r\n _frame = _frame.replace('', fn.displayName);\r\n }\r\n\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, _frame);\r\n }\r\n } // Return the line we found.\r\n\r\n\r\n return _frame;\r\n }\r\n } while (s >= 1 && c >= 0);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n } finally {\r\n reentry = false;\r\n\r\n {\r\n ReactCurrentDispatcher.current = previousDispatcher;\r\n reenableLogs();\r\n }\r\n\r\n Error.prepareStackTrace = previousPrepareStackTrace;\r\n } // Fallback to just using the name if we couldn't make it throw.\r\n\r\n\r\n var name = fn ? fn.displayName || fn.name : '';\r\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\r\n\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, syntheticFrame);\r\n }\r\n }\r\n\r\n return syntheticFrame;\r\n}\r\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\r\n {\r\n return describeNativeComponentFrame(fn, false);\r\n }\r\n}\r\n\r\nfunction shouldConstruct(Component) {\r\n var prototype = Component.prototype;\r\n return !!(prototype && prototype.isReactComponent);\r\n}\r\n\r\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\r\n\r\n if (type == null) {\r\n return '';\r\n }\r\n\r\n if (typeof type === 'function') {\r\n {\r\n return describeNativeComponentFrame(type, shouldConstruct(type));\r\n }\r\n }\r\n\r\n if (typeof type === 'string') {\r\n return describeBuiltInComponentFrame(type);\r\n }\r\n\r\n switch (type) {\r\n case REACT_SUSPENSE_TYPE:\r\n return describeBuiltInComponentFrame('Suspense');\r\n\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return describeBuiltInComponentFrame('SuspenseList');\r\n }\r\n\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_FORWARD_REF_TYPE:\r\n return describeFunctionComponentFrame(type.render);\r\n\r\n case REACT_MEMO_TYPE:\r\n // Memo may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\r\n\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n\r\n try {\r\n // Lazy may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\r\n } catch (x) {}\r\n }\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\n// $FlowFixMe[method-unbinding]\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nvar loggedTypeFailures = {};\r\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\r\n\r\nfunction setCurrentlyValidatingElement$1(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\r\n } else {\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\r\n }\r\n }\r\n}\r\n\r\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\r\n {\r\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\r\n var has = Function.call.bind(hasOwnProperty);\r\n\r\n for (var typeSpecName in typeSpecs) {\r\n if (has(typeSpecs, typeSpecName)) {\r\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\r\n // fail the render phase where it didn't fail before. So we log it.\r\n // After these have been cleaned up, we'll let them throw.\r\n\r\n try {\r\n // This is intentionally an invariant that gets caught. It's the same\r\n // behavior as without this statement except with a better message.\r\n if (typeof typeSpecs[typeSpecName] !== 'function') {\r\n // eslint-disable-next-line react-internal/prod-error-codes\r\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\r\n err.name = 'Invariant Violation';\r\n throw err;\r\n }\r\n\r\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\r\n } catch (ex) {\r\n error$1 = ex;\r\n }\r\n\r\n if (error$1 && !(error$1 instanceof Error)) {\r\n setCurrentlyValidatingElement$1(element);\r\n\r\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\r\n\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n\r\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\r\n // Only monitor this failure once because there tends to be a lot of the\r\n // same error.\r\n loggedTypeFailures[error$1.message] = true;\r\n setCurrentlyValidatingElement$1(element);\r\n\r\n error('Failed %s type: %s', location, error$1.message);\r\n\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\r\n\r\nfunction isArray(a) {\r\n return isArrayImpl(a);\r\n}\r\n\r\n/*\r\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\r\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\r\n *\r\n * The functions in this module will throw an easier-to-understand,\r\n * easier-to-debug exception with a clear errors message message explaining the\r\n * problem. (Instead of a confusing exception thrown inside the implementation\r\n * of the `value` object).\r\n */\r\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\r\nfunction typeName(value) {\r\n {\r\n // toStringTag is needed for namespaced types like Temporal.Instant\r\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\r\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\r\n\r\n return type;\r\n }\r\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\r\n\r\n\r\nfunction willCoercionThrow(value) {\r\n {\r\n try {\r\n testStringCoercion(value);\r\n return false;\r\n } catch (e) {\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nfunction testStringCoercion(value) {\r\n // If you ended up here by following an exception call stack, here's what's\r\n // happened: you supplied an object or symbol value to React (as a prop, key,\r\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\r\n // coerce it to a string using `'' + value`, an exception was thrown.\r\n //\r\n // The most common types that will cause this exception are `Symbol` instances\r\n // and Temporal objects like `Temporal.Instant`. But any object that has a\r\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\r\n // exception. (Library authors do this to prevent users from using built-in\r\n // numeric operators like `+` or comparison operators like `>=` because custom\r\n // methods are needed to perform accurate arithmetic or comparison.)\r\n //\r\n // To fix the problem, coerce this object or symbol value to a string before\r\n // passing it to React. The most reliable way is usually `String(value)`.\r\n //\r\n // To find which value is throwing, check the browser or debugger console.\r\n // Before this exception was thrown, there should be `console.error` output\r\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\r\n // problem and how that type was used: key, atrribute, input value prop, etc.\r\n // In most cases, this console output also shows the component and its\r\n // ancestor components where the exception happened.\r\n //\r\n // eslint-disable-next-line react-internal/safe-string-coercion\r\n return '' + value;\r\n}\r\nfunction checkKeyStringCoercion(value) {\r\n {\r\n if (willCoercionThrow(value)) {\r\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\r\n\r\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\r\n }\r\n }\r\n}\r\n\r\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\r\nvar RESERVED_PROPS = {\r\n key: true,\r\n ref: true,\r\n __self: true,\r\n __source: true\r\n};\r\nvar specialPropKeyWarningShown;\r\nvar specialPropRefWarningShown;\r\nvar didWarnAboutStringRefs;\r\n\r\n{\r\n didWarnAboutStringRefs = {};\r\n}\r\n\r\nfunction hasValidRef(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'ref')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\r\n\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return config.ref !== undefined;\r\n}\r\n\r\nfunction hasValidKey(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'key')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\r\n\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return config.key !== undefined;\r\n}\r\n\r\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\r\n {\r\n if (typeof config.ref === 'string' && ReactCurrentOwner$1.current && self && ReactCurrentOwner$1.current.stateNode !== self) {\r\n var componentName = getComponentNameFromType(ReactCurrentOwner$1.current.type);\r\n\r\n if (!didWarnAboutStringRefs[componentName]) {\r\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner$1.current.type), config.ref);\r\n\r\n didWarnAboutStringRefs[componentName] = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction defineKeyPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingKey = function () {\r\n if (!specialPropKeyWarningShown) {\r\n specialPropKeyWarningShown = true;\r\n\r\n error('%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://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n\r\n warnAboutAccessingKey.isReactWarning = true;\r\n Object.defineProperty(props, 'key', {\r\n get: warnAboutAccessingKey,\r\n configurable: true\r\n });\r\n }\r\n}\r\n\r\nfunction defineRefPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingRef = function () {\r\n if (!specialPropRefWarningShown) {\r\n specialPropRefWarningShown = true;\r\n\r\n error('%s: `ref` 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://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n\r\n warnAboutAccessingRef.isReactWarning = true;\r\n Object.defineProperty(props, 'ref', {\r\n get: warnAboutAccessingRef,\r\n configurable: true\r\n });\r\n }\r\n}\r\n/**\r\n * Factory method to create a new React element. This no longer adheres to\r\n * the class pattern, so do not use new to call it. Also, instanceof check\r\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\r\n * if something is a React Element.\r\n *\r\n * @param {*} type\r\n * @param {*} props\r\n * @param {*} key\r\n * @param {string|object} ref\r\n * @param {*} owner\r\n * @param {*} self A *temporary* helper to detect places where `this` is\r\n * different from the `owner` when React.createElement is called, so that we\r\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\r\n * functions, and as long as `this` and owner are the same, there will be no\r\n * change in behavior.\r\n * @param {*} source An annotation object (added by a transpiler or otherwise)\r\n * indicating filename, line number, and/or other information.\r\n * @internal\r\n */\r\n\r\n\r\nfunction ReactElement(type, key, ref, self, source, owner, props) {\r\n var element = {\r\n // This tag allows us to uniquely identify this as a React Element\r\n $$typeof: REACT_ELEMENT_TYPE,\r\n // Built-in properties that belong on the element\r\n type: type,\r\n key: key,\r\n ref: ref,\r\n props: props,\r\n // Record the component responsible for creating this element.\r\n _owner: owner\r\n };\r\n\r\n {\r\n // The validation flag is currently mutative. We put it on\r\n // an external backing store so that we can freeze the whole object.\r\n // This can be replaced with a WeakMap once they are implemented in\r\n // commonly used development environments.\r\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\r\n // the validation flag non-enumerable (where possible, which should\r\n // include every environment we run tests in), so the test framework\r\n // ignores it.\r\n\r\n Object.defineProperty(element._store, 'validated', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: true,\r\n value: false\r\n }); // self and source are DEV only properties.\r\n\r\n Object.defineProperty(element, '_self', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: self\r\n }); // Two elements created in two different places should be considered\r\n // equal for testing purposes and therefore we hide it from enumeration.\r\n\r\n Object.defineProperty(element, '_source', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: source\r\n });\r\n\r\n if (Object.freeze) {\r\n Object.freeze(element.props);\r\n Object.freeze(element);\r\n }\r\n }\r\n\r\n return element;\r\n}\r\n/**\r\n * https://github.com/reactjs/rfcs/pull/107\r\n * @param {*} type\r\n * @param {object} props\r\n * @param {string} key\r\n */\r\n\r\nfunction jsxDEV$1(type, config, maybeKey, source, self) {\r\n {\r\n var propName; // Reserved names are extracted\r\n\r\n var props = {};\r\n var key = null;\r\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\r\n // issue if key is also explicitly declared (ie.
\r\n // or
). We want to deprecate key spread,\r\n // but as an intermediary step, we will use jsxDEV for everything except\r\n //
, because we aren't currently able to tell if\r\n // key is explicitly declared to be undefined or not.\r\n\r\n if (maybeKey !== undefined) {\r\n {\r\n checkKeyStringCoercion(maybeKey);\r\n }\r\n\r\n key = '' + maybeKey;\r\n }\r\n\r\n if (hasValidKey(config)) {\r\n {\r\n checkKeyStringCoercion(config.key);\r\n }\r\n\r\n key = '' + config.key;\r\n }\r\n\r\n if (hasValidRef(config)) {\r\n ref = config.ref;\r\n warnIfStringRefCannotBeAutoConverted(config, self);\r\n } // Remaining properties are added to a new props object\r\n\r\n\r\n for (propName in config) {\r\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\r\n props[propName] = config[propName];\r\n }\r\n } // Resolve default props\r\n\r\n\r\n if (type && type.defaultProps) {\r\n var defaultProps = type.defaultProps;\r\n\r\n for (propName in defaultProps) {\r\n if (props[propName] === undefined) {\r\n props[propName] = defaultProps[propName];\r\n }\r\n }\r\n }\r\n\r\n if (key || ref) {\r\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\r\n\r\n if (key) {\r\n defineKeyPropWarningGetter(props, displayName);\r\n }\r\n\r\n if (ref) {\r\n defineRefPropWarningGetter(props, displayName);\r\n }\r\n }\r\n\r\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner$1.current, props);\r\n }\r\n}\r\n\r\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\r\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\r\n\r\nfunction setCurrentlyValidatingElement(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\r\n } else {\r\n ReactDebugCurrentFrame.setExtraStackFrame(null);\r\n }\r\n }\r\n}\r\n\r\nvar propTypesMisspellWarningShown;\r\n\r\n{\r\n propTypesMisspellWarningShown = false;\r\n}\r\n/**\r\n * Verifies the object is a ReactElement.\r\n * See https://reactjs.org/docs/react-api.html#isvalidelement\r\n * @param {?object} object\r\n * @return {boolean} True if `object` is a ReactElement.\r\n * @final\r\n */\r\n\r\n\r\nfunction isValidElement(object) {\r\n {\r\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\r\n }\r\n}\r\n\r\nfunction getDeclarationErrorAddendum() {\r\n {\r\n if (ReactCurrentOwner.current) {\r\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\r\n\r\n if (name) {\r\n return '\\n\\nCheck the render method of `' + name + '`.';\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n\r\nfunction getSourceInfoErrorAddendum(source) {\r\n {\r\n if (source !== undefined) {\r\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\r\n var lineNumber = source.lineNumber;\r\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n/**\r\n * Warn if there's no key explicitly set on dynamic arrays of children or\r\n * object keys are not valid. This allows us to keep track of children between\r\n * updates.\r\n */\r\n\r\n\r\nvar ownerHasKeyUseWarning = {};\r\n\r\nfunction getCurrentComponentErrorInfo(parentType) {\r\n {\r\n var info = getDeclarationErrorAddendum();\r\n\r\n if (!info) {\r\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\r\n\r\n if (parentName) {\r\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\r\n }\r\n }\r\n\r\n return info;\r\n }\r\n}\r\n/**\r\n * Warn if the element doesn't have an explicit key assigned to it.\r\n * This element is in an array. The array could grow and shrink or be\r\n * reordered. All children that haven't already been validated are required to\r\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\r\n * will only be shown once.\r\n *\r\n * @internal\r\n * @param {ReactElement} element Element that requires a key.\r\n * @param {*} parentType element's parent's type.\r\n */\r\n\r\n\r\nfunction validateExplicitKey(element, parentType) {\r\n {\r\n if (!element._store || element._store.validated || element.key != null) {\r\n return;\r\n }\r\n\r\n element._store.validated = true;\r\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\r\n\r\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\r\n return;\r\n }\r\n\r\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\r\n // property, it may be the creator of the child that's responsible for\r\n // assigning it a key.\r\n\r\n var childOwner = '';\r\n\r\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\r\n // Give the component that originally created this child.\r\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\r\n }\r\n\r\n setCurrentlyValidatingElement(element);\r\n\r\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\r\n\r\n setCurrentlyValidatingElement(null);\r\n }\r\n}\r\n/**\r\n * Ensure that every element either is passed in a static location, in an\r\n * array with an explicit keys property defined, or in an object literal\r\n * with valid key property.\r\n *\r\n * @internal\r\n * @param {ReactNode} node Statically passed child of any type.\r\n * @param {*} parentType node's parent's type.\r\n */\r\n\r\n\r\nfunction validateChildKeys(node, parentType) {\r\n {\r\n if (typeof node !== 'object' || !node) {\r\n return;\r\n }\r\n\r\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\r\n for (var i = 0; i < node.length; i++) {\r\n var child = node[i];\r\n\r\n if (isValidElement(child)) {\r\n validateExplicitKey(child, parentType);\r\n }\r\n }\r\n } else if (isValidElement(node)) {\r\n // This element was passed in a valid location.\r\n if (node._store) {\r\n node._store.validated = true;\r\n }\r\n } else {\r\n var iteratorFn = getIteratorFn(node);\r\n\r\n if (typeof iteratorFn === 'function') {\r\n // Entry iterators used to provide implicit keys,\r\n // but now we print a separate warning for them later.\r\n if (iteratorFn !== node.entries) {\r\n var iterator = iteratorFn.call(node);\r\n var step;\r\n\r\n while (!(step = iterator.next()).done) {\r\n if (isValidElement(step.value)) {\r\n validateExplicitKey(step.value, parentType);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Given an element, validate that its props follow the propTypes definition,\r\n * provided by the type.\r\n *\r\n * @param {ReactElement} element\r\n */\r\n\r\n\r\nfunction validatePropTypes(element) {\r\n {\r\n var type = element.type;\r\n\r\n if (type === null || type === undefined || typeof type === 'string') {\r\n return;\r\n }\r\n\r\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\r\n return;\r\n }\r\n\r\n var propTypes;\r\n\r\n if (typeof type === 'function') {\r\n propTypes = type.propTypes;\r\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\r\n // Inner props are checked in the reconciler.\r\n type.$$typeof === REACT_MEMO_TYPE)) {\r\n propTypes = type.propTypes;\r\n } else {\r\n return;\r\n }\r\n\r\n if (propTypes) {\r\n // Intentionally inside to avoid triggering lazy initializers:\r\n var name = getComponentNameFromType(type);\r\n checkPropTypes(propTypes, element.props, 'prop', name, element);\r\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\r\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\r\n\r\n var _name = getComponentNameFromType(type);\r\n\r\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\r\n }\r\n\r\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\r\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\r\n }\r\n }\r\n}\r\n/**\r\n * Given a fragment, validate that it can only be provided with fragment props\r\n * @param {ReactElement} fragment\r\n */\r\n\r\n\r\nfunction validateFragmentProps(fragment) {\r\n {\r\n var keys = Object.keys(fragment.props);\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n\r\n if (key !== 'children' && key !== 'key') {\r\n setCurrentlyValidatingElement(fragment);\r\n\r\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\r\n\r\n setCurrentlyValidatingElement(null);\r\n break;\r\n }\r\n }\r\n\r\n if (fragment.ref !== null) {\r\n setCurrentlyValidatingElement(fragment);\r\n\r\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\r\n\r\n setCurrentlyValidatingElement(null);\r\n }\r\n }\r\n}\r\n\r\nvar didWarnAboutKeySpread = {};\r\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\r\n {\r\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\r\n // succeed and there will likely be errors in render.\r\n\r\n if (!validType) {\r\n var info = '';\r\n\r\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\r\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\r\n }\r\n\r\n var sourceInfo = getSourceInfoErrorAddendum(source);\r\n\r\n if (sourceInfo) {\r\n info += sourceInfo;\r\n } else {\r\n info += getDeclarationErrorAddendum();\r\n }\r\n\r\n var typeString;\r\n\r\n if (type === null) {\r\n typeString = 'null';\r\n } else if (isArray(type)) {\r\n typeString = 'array';\r\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\r\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\r\n info = ' Did you accidentally export a JSX literal instead of a component?';\r\n } else {\r\n typeString = typeof type;\r\n }\r\n\r\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\r\n }\r\n\r\n var element = jsxDEV$1(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\r\n // TODO: Drop this when these are no longer allowed as the type argument.\r\n\r\n if (element == null) {\r\n return element;\r\n } // Skip key warning if the type isn't valid since our key validation logic\r\n // doesn't expect a non-string/function type and can throw confusing errors.\r\n // We don't want exception behavior to differ between dev and prod.\r\n // (Rendering will throw with a helpful message and as soon as the type is\r\n // fixed, the key warnings will appear.)\r\n\r\n\r\n if (validType) {\r\n var children = props.children;\r\n\r\n if (children !== undefined) {\r\n if (isStaticChildren) {\r\n if (isArray(children)) {\r\n for (var i = 0; i < children.length; i++) {\r\n validateChildKeys(children[i], type);\r\n }\r\n\r\n if (Object.freeze) {\r\n Object.freeze(children);\r\n }\r\n } else {\r\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\r\n }\r\n } else {\r\n validateChildKeys(children, type);\r\n }\r\n }\r\n }\r\n\r\n if (hasOwnProperty.call(props, 'key')) {\r\n var componentName = getComponentNameFromType(type);\r\n var keys = Object.keys(props).filter(function (k) {\r\n return k !== 'key';\r\n });\r\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\r\n\r\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\r\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\r\n\r\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\r\n\r\n didWarnAboutKeySpread[componentName + beforeExample] = true;\r\n }\r\n }\r\n\r\n if (type === REACT_FRAGMENT_TYPE) {\r\n validateFragmentProps(element);\r\n } else {\r\n validatePropTypes(element);\r\n }\r\n\r\n return element;\r\n }\r\n} // These two functions exist to still get child warnings in dev\r\n\r\nvar jsxDEV = jsxWithValidation ;\r\n\r\nexports.Fragment = REACT_FRAGMENT_TYPE;\r\nexports.jsxDEV = jsxDEV;\r\n })();\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNhO0FBQ2I7QUFDQSxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRztBQUNSO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQztBQUNyQztBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULGlDQUFpQztBQUNqQztBQUNBLFNBQVM7QUFDVCwyQkFBMkI7QUFDM0I7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsOENBQThDLGdEQUFnRCxNQUFNLGFBQWE7QUFDakg7QUFDQTtBQUNBLCtDQUErQyxrQ0FBa0MsT0FBTztBQUN4RjtBQUNBLHVHQUF1RyxjQUFjLFVBQVUsZ0dBQWdHLGtCQUFrQixVQUFVLFVBQVU7QUFDclE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYztBQUNkLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanM/ZmYzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgUmVhY3RcclxuICogcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxyXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gIChmdW5jdGlvbigpIHtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcclxuXHJcbi8vIEFUVEVOVElPTlxyXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXHJcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcclxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXHJcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XHJcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xyXG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XHJcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcclxudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xyXG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XHJcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XHJcbnZhciBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2VydmVyX2NvbnRleHQnKTtcclxudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xyXG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XHJcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XHJcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XHJcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XHJcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xyXG52YXIgUkVBQ1RfQ0FDSEVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNhY2hlJyk7XHJcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XHJcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcclxuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XHJcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcclxuXHJcbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcclxuICB9XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcclxuXHJcbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xyXG4gIHtcclxuICAgIHtcclxuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcclxuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XHJcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXHJcbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXHJcbiAge1xyXG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xyXG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XHJcblxyXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xyXG4gICAgICBmb3JtYXQgKz0gJyVzJztcclxuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xyXG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cclxuXHJcblxyXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcclxuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxyXG5cclxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxyXG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xyXG5cclxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cclxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xyXG52YXIgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgPSBmYWxzZTsgLy8gTm8ga25vd24gYnVncywgYnV0IG5lZWRzIHBlcmZvcm1hbmNlIHRlc3RpbmdcclxuXHJcbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXHJcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcclxuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXHJcblxyXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7IC8vIFRyYWNrIHdoaWNoIEZpYmVyKHMpIHNjaGVkdWxlIHJlbmRlciB3b3JrLlxyXG5cclxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTtcclxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcclxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXHJcblxyXG5cclxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcclxuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxyXG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxyXG4gICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBGbGlnaHQgYnVpbGQgdGhpcyB3aWxsIGVuZCB1cCBiZWluZyB1c2VkXHJcbiAgICAvLyB3aXRoLlxyXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxIHx8IHR5cGUuZ2V0TW9kdWxlSWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XHJcbiAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xyXG5cclxuICBpZiAoZGlzcGxheU5hbWUpIHtcclxuICAgIHJldHVybiBkaXNwbGF5TmFtZTtcclxuICB9XHJcblxyXG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcclxufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XHJcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xyXG59IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cclxuXHJcblxyXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xyXG4gIGlmICh0eXBlID09IG51bGwpIHtcclxuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICB7XHJcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xyXG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiB0eXBlO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XHJcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xyXG5cclxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XHJcbiAgICAgIHJldHVybiAnUG9ydGFsJztcclxuXHJcbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XHJcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xyXG5cclxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcclxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcclxuXHJcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XHJcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xyXG5cclxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxyXG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XHJcblxyXG4gICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxyXG4gICAgICB7XHJcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XHJcbiAgICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcclxuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xyXG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xyXG5cclxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxyXG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XHJcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xyXG5cclxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxyXG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxyXG4gICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ01lbW8nO1xyXG5cclxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xyXG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xyXG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xyXG5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XHJcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfU0VSVkVSX0NPTlRFWFRfVFlQRTpcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YXIgY29udGV4dDIgPSB0eXBlO1xyXG4gICAgICAgICAgcmV0dXJuIChjb250ZXh0Mi5kaXNwbGF5TmFtZSB8fCBjb250ZXh0Mi5fZ2xvYmFsTmFtZSkgKyAnLlByb3ZpZGVyJztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xyXG5cclxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxyXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxyXG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXHJcbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxyXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XHJcbnZhciBwcmV2TG9nO1xyXG52YXIgcHJldkluZm87XHJcbnZhciBwcmV2V2FybjtcclxudmFyIHByZXZFcnJvcjtcclxudmFyIHByZXZHcm91cDtcclxudmFyIHByZXZHcm91cENvbGxhcHNlZDtcclxudmFyIHByZXZHcm91cEVuZDtcclxuXHJcbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cclxuXHJcbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XHJcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xyXG4gIHtcclxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XHJcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xyXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XHJcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xyXG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcclxuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcclxuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcclxuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcclxuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxyXG5cclxuICAgICAgdmFyIHByb3BzID0ge1xyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcclxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxyXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXHJcblxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XHJcbiAgICAgICAgaW5mbzogcHJvcHMsXHJcbiAgICAgICAgbG9nOiBwcm9wcyxcclxuICAgICAgICB3YXJuOiBwcm9wcyxcclxuICAgICAgICBlcnJvcjogcHJvcHMsXHJcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxyXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcclxuICAgICAgICBncm91cEVuZDogcHJvcHNcclxuICAgICAgfSk7XHJcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWREZXB0aCsrO1xyXG4gIH1cclxufVxyXG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XHJcbiAge1xyXG4gICAgZGlzYWJsZWREZXB0aC0tO1xyXG5cclxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XHJcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xyXG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcclxuICAgICAgICB9KSxcclxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XHJcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cclxuICAgICAgICB9KSxcclxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XHJcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cclxuICAgICAgICB9KSxcclxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XHJcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcclxuICAgICAgICB9KSxcclxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xyXG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XHJcbnZhciBwcmVmaXg7XHJcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xyXG4gIHtcclxuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcclxuICAgICAgfSBjYXRjaCAoeCkge1xyXG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XHJcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXHJcblxyXG5cclxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XHJcbiAgfVxyXG59XHJcbnZhciByZWVudHJ5ID0gZmFsc2U7XHJcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xyXG5cclxue1xyXG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XHJcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XHJcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXHJcbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB7XHJcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XHJcblxyXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZyYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFyIGNvbnRyb2w7XHJcbiAgcmVlbnRyeSA9IHRydWU7XHJcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxyXG5cclxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcclxuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xyXG5cclxuICB7XHJcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxyXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxyXG5cclxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XHJcbiAgICBkaXNhYmxlTG9ncygpO1xyXG4gIH1cclxuXHJcbiAgdHJ5IHtcclxuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxyXG4gICAgaWYgKGNvbnN0cnVjdCkge1xyXG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cclxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcclxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXHJcblxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXHJcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXHJcbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XHJcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxyXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcclxuICAgICAgICB9IGNhdGNoICh4KSB7XHJcbiAgICAgICAgICBjb250cm9sID0geDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIEZha2UuY2FsbCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcclxuICAgICAgICAgIGNvbnRyb2wgPSB4O1xyXG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcclxuXHJcblxyXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCk7XHJcbiAgICAgIH0gY2F0Y2ggKHgpIHtcclxuICAgICAgICBjb250cm9sID0geDtcclxuICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxyXG4gICAgICAvLyB0cmllcyB0byBhY2Nlc3MgUmVhY3QvUmVhY3RET00vcHJvcHMuIFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgdGhyb3dcclxuICAgICAgLy8gaW4gc2ltcGxlIGNvbXBvbmVudHMgdG9vXHJcblxyXG5cclxuICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IGZuKCk7IC8vIElmIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcmV0dXJucyBhIHByb21pc2UsIGl0J3MgbGlrZWx5IGFuIGFzeW5jXHJcbiAgICAgIC8vIGNvbXBvbmVudCwgd2hpY2ggd2UgZG9uJ3QgeWV0IHN1cHBvcnQuIEF0dGFjaCBhIG5vb3AgY2F0Y2ggaGFuZGxlciB0b1xyXG4gICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cclxuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGNvbXBvbmVudCBzdGFja3MgZm9yIGFzeW5jIGNsaWVudCBjb21wb25lbnRzP1xyXG5cclxuICAgICAgaWYgKG1heWJlUHJvbWlzZSAmJiB0eXBlb2YgbWF5YmVQcm9taXNlLmNhdGNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xyXG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cclxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxyXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cclxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcclxuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xyXG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XHJcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXHJcbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxyXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXHJcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcclxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxyXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxyXG4gICAgICAgIGMtLTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XHJcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXHJcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXHJcbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcclxuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXHJcbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXHJcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xyXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxyXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cclxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcclxuICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgIHMtLTtcclxuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cclxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cclxuXHJcbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcclxuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxyXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpOyAvLyBJZiBvdXIgY29tcG9uZW50IGZyYW1lIGlzIGxhYmVsZWQgXCI8YW5vbnltb3VzPlwiXHJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAvLyBzcGxpY2UgaXQgaW4gdG8gbWFrZSB0aGUgc3RhY2sgbW9yZSByZWFkYWJsZS5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZuLmRpc3BsYXlOYW1lICYmIF9mcmFtZS5pbmNsdWRlcygnPGFub255bW91cz4nKSkge1xyXG4gICAgICAgICAgICAgICAgICBfZnJhbWUgPSBfZnJhbWUucmVwbGFjZSgnPGFub255bW91cz4nLCBmbi5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIHJlZW50cnkgPSBmYWxzZTtcclxuXHJcbiAgICB7XHJcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcclxuICAgICAgcmVlbmFibGVMb2dzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xyXG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxyXG5cclxuXHJcbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcclxuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcclxuXHJcbiAge1xyXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xyXG59XHJcbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XHJcbiAge1xyXG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcclxuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcclxuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xyXG5cclxuICBpZiAodHlwZSA9PSBudWxsKSB7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHtcclxuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcclxuICB9XHJcblxyXG4gIHN3aXRjaCAodHlwZSkge1xyXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxyXG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XHJcblxyXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XHJcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcclxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxyXG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xyXG5cclxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XHJcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cclxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcclxuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcclxuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcclxuXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxyXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XHJcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiAnJztcclxufVxyXG5cclxuLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxyXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG5cclxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xyXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcclxuXHJcbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xyXG4gIHtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xyXG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xyXG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcclxuICB7XHJcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXHJcbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcclxuXHJcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XHJcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XHJcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXHJcbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxyXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxyXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxyXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xyXG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcclxuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XHJcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xyXG5cclxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcclxuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxyXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cclxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcclxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xyXG5cclxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXHJcblxyXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcclxuICByZXR1cm4gaXNBcnJheUltcGwoYSk7XHJcbn1cclxuXHJcbi8qXHJcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxyXG4gKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxyXG4gKlxyXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXHJcbiAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcclxuICogcHJvYmxlbS4gKEluc3RlYWQgb2YgYSBjb25mdXNpbmcgZXhjZXB0aW9uIHRocm93biBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uXHJcbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXHJcbiAqL1xyXG4vLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxyXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xyXG4gIHtcclxuICAgIC8vIHRvU3RyaW5nVGFnIGlzIG5lZWRlZCBmb3IgbmFtZXNwYWNlZCB0eXBlcyBsaWtlIFRlbXBvcmFsLkluc3RhbnRcclxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xyXG4gICAgdmFyIHR5cGUgPSBoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddIHx8IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCc7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cclxuXHJcbiAgICByZXR1cm4gdHlwZTtcclxuICB9XHJcbn0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cclxuXHJcblxyXG5mdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xyXG4gIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcclxuICAvLyBJZiB5b3UgZW5kZWQgdXAgaGVyZSBieSBmb2xsb3dpbmcgYW4gZXhjZXB0aW9uIGNhbGwgc3RhY2ssIGhlcmUncyB3aGF0J3NcclxuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxyXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cclxuICAvLyBjb2VyY2UgaXQgdG8gYSBzdHJpbmcgdXNpbmcgYCcnICsgdmFsdWVgLCBhbiBleGNlcHRpb24gd2FzIHRocm93bi5cclxuICAvL1xyXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xyXG4gIC8vIGFuZCBUZW1wb3JhbCBvYmplY3RzIGxpa2UgYFRlbXBvcmFsLkluc3RhbnRgLiBCdXQgYW55IG9iamVjdCB0aGF0IGhhcyBhXHJcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXHJcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXHJcbiAgLy8gbnVtZXJpYyBvcGVyYXRvcnMgbGlrZSBgK2Agb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgbGlrZSBgPj1gIGJlY2F1c2UgY3VzdG9tXHJcbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcclxuICAvL1xyXG4gIC8vIFRvIGZpeCB0aGUgcHJvYmxlbSwgY29lcmNlIHRoaXMgb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcclxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXHJcbiAgLy9cclxuICAvLyBUbyBmaW5kIHdoaWNoIHZhbHVlIGlzIHRocm93aW5nLCBjaGVjayB0aGUgYnJvd3NlciBvciBkZWJ1Z2dlciBjb25zb2xlLlxyXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxyXG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcclxuICAvLyBwcm9ibGVtIGFuZCBob3cgdGhhdCB0eXBlIHdhcyB1c2VkOiBrZXksIGF0cnJpYnV0ZSwgaW5wdXQgdmFsdWUgcHJvcCwgZXRjLlxyXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcclxuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXHJcbiAgLy9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cclxuICByZXR1cm4gJycgKyB2YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XHJcbiAge1xyXG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xyXG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xyXG5cclxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xyXG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XHJcbiAga2V5OiB0cnVlLFxyXG4gIHJlZjogdHJ1ZSxcclxuICBfX3NlbGY6IHRydWUsXHJcbiAgX19zb3VyY2U6IHRydWVcclxufTtcclxudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xyXG52YXIgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd247XHJcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xyXG5cclxue1xyXG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XHJcbiAge1xyXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcclxuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xyXG5cclxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xyXG4gIHtcclxuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XHJcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcclxuXHJcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XHJcbiAge1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBzZWxmKSB7XHJcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudC50eXBlKTtcclxuXHJcbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xyXG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSksIGNvbmZpZy5yZWYpO1xyXG5cclxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XHJcbiAge1xyXG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xyXG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XHJcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxyXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XHJcbiAge1xyXG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xyXG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XHJcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxyXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cclxuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcclxuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXHJcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gKiBAcGFyYW0geyp9IHByb3BzXHJcbiAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXHJcbiAqIEBwYXJhbSB7Kn0gb3duZXJcclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXHJcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcclxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcclxuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xyXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXHJcbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxyXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcblxyXG5cclxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xyXG4gIHZhciBlbGVtZW50ID0ge1xyXG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XHJcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxyXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxyXG4gICAgdHlwZTogdHlwZSxcclxuICAgIGtleToga2V5LFxyXG4gICAgcmVmOiByZWYsXHJcbiAgICBwcm9wczogcHJvcHMsXHJcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxyXG4gICAgX293bmVyOiBvd25lclxyXG4gIH07XHJcblxyXG4gIHtcclxuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cclxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXHJcbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXHJcbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cclxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXHJcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXHJcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xyXG4gICAgLy8gaWdub3JlcyBpdC5cclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgdmFsdWU6IGZhbHNlXHJcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiBzZWxmXHJcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcclxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcclxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgdmFsdWU6IHNvdXJjZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcclxuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcclxuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBlbGVtZW50O1xyXG59XHJcbi8qKlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XHJcbiAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIGpzeERFViQxKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xyXG4gIHtcclxuICAgIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxyXG5cclxuICAgIHZhciBwcm9wcyA9IHt9O1xyXG4gICAgdmFyIGtleSA9IG51bGw7XHJcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXHJcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cclxuICAgIC8vIG9yIDxkaXYga2V5PVwiSGlcIiB7Li4ucHJvcHN9IC8+ICkuIFdlIHdhbnQgdG8gZGVwcmVjYXRlIGtleSBzcHJlYWQsXHJcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcclxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXHJcbiAgICAvLyBrZXkgaXMgZXhwbGljaXRseSBkZWNsYXJlZCB0byBiZSB1bmRlZmluZWQgb3Igbm90LlxyXG5cclxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHtcclxuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xyXG4gICAgICB7XHJcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XHJcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XHJcbiAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpO1xyXG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XHJcblxyXG5cclxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XHJcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcclxuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xyXG5cclxuXHJcbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xyXG4gICAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XHJcblxyXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xyXG4gICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoa2V5IHx8IHJlZikge1xyXG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XHJcblxyXG4gICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlZikge1xyXG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCwgcHJvcHMpO1xyXG4gIH1cclxufVxyXG5cclxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XHJcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcclxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7XHJcblxyXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XHJcbiAge1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XHJcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XHJcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xyXG5cclxue1xyXG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XHJcbn1cclxuLyoqXHJcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXHJcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcclxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcclxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cclxuICogQGZpbmFsXHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xyXG4gIHtcclxuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XHJcbiAge1xyXG4gICAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcclxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcclxuXHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XHJcbiAge1xyXG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XHJcbiAgICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XHJcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxyXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cclxuICogdXBkYXRlcy5cclxuICovXHJcblxyXG5cclxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XHJcbiAge1xyXG4gICAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcclxuXHJcbiAgICBpZiAoIWluZm8pIHtcclxuICAgICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XHJcblxyXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xyXG4gICAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbmZvO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxyXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcclxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXHJcbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xyXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cclxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxyXG4gKi9cclxuXHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcclxuICB7XHJcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xyXG5cclxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXHJcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXHJcbiAgICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXHJcblxyXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcclxuXHJcbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xyXG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cclxuICAgICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XHJcblxyXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XHJcblxyXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XHJcbiAgfVxyXG59XHJcbi8qKlxyXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXHJcbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxyXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxyXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcclxuICB7XHJcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobm9kZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSkgOyBlbHNlIGlmIChpc0FycmF5KG5vZGUpKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XHJcblxyXG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcclxuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xyXG4gICAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxyXG4gICAgICBpZiAobm9kZS5fc3RvcmUpIHtcclxuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXHJcbiAgICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXHJcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xyXG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xyXG4gICAgICAgICAgdmFyIHN0ZXA7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxyXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcclxuICovXHJcblxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xyXG4gIHtcclxuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xyXG5cclxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcHJvcFR5cGVzO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cclxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxyXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xyXG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocHJvcFR5cGVzKSB7XHJcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XHJcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xyXG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XHJcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcclxuXHJcbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcclxuXHJcbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XHJcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi8qKlxyXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcclxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xyXG4gIHtcclxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcclxuXHJcbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xyXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcclxuXHJcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xyXG5cclxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcclxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZnJhZ21lbnQpO1xyXG5cclxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XHJcblxyXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcclxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XHJcbiAge1xyXG4gICAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cclxuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXHJcblxyXG4gICAgaWYgKCF2YWxpZFR5cGUpIHtcclxuICAgICAgdmFyIGluZm8gPSAnJztcclxuXHJcbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xyXG5cclxuICAgICAgaWYgKHNvdXJjZUluZm8pIHtcclxuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHR5cGVTdHJpbmc7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xyXG4gICAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcclxuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XHJcbiAgICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZWxlbWVudCA9IGpzeERFViQxKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXHJcbiAgICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXHJcblxyXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcclxuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cclxuICAgIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cclxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXHJcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXHJcblxyXG5cclxuICAgIGlmICh2YWxpZFR5cGUpIHtcclxuICAgICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XHJcblxyXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuW2ldLCB0eXBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgJ2tleScpKSB7XHJcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xyXG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcclxuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgYmVmb3JlRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7a2V5OiBzb21lS2V5LCAnICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7a2V5OiBzb21lS2V5fSc7XHJcblxyXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEtleVNwcmVhZFtjb21wb25lbnROYW1lICsgYmVmb3JlRXhhbXBsZV0pIHtcclxuICAgICAgICB2YXIgYWZ0ZXJFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3snICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7fSc7XHJcblxyXG4gICAgICAgIGVycm9yKCdBIHByb3BzIG9iamVjdCBjb250YWluaW5nIGEgXCJrZXlcIiBwcm9wIGlzIGJlaW5nIHNwcmVhZCBpbnRvIEpTWDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyB7Li4ucHJvcHN9IC8+XFxuJyArICdSZWFjdCBrZXlzIG11c3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIEpTWCB3aXRob3V0IHVzaW5nIHNwcmVhZDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLCBiZWZvcmVFeGFtcGxlLCBjb21wb25lbnROYW1lLCBhZnRlckV4YW1wbGUsIGNvbXBvbmVudE5hbWUpO1xyXG5cclxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XHJcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbGVtZW50O1xyXG4gIH1cclxufSAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGV4aXN0IHRvIHN0aWxsIGdldCBjaGlsZCB3YXJuaW5ncyBpbiBkZXZcclxuXHJcbnZhciBqc3hERVYgPSBqc3hXaXRoVmFsaWRhdGlvbiA7XHJcblxyXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcclxuZXhwb3J0cy5qc3hERVYgPSBqc3hERVY7XHJcbiAgfSkoKTtcclxufVxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.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 ***! \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("/**\r\n * @license React\r\n * react-jsx-runtime.development.js\r\n *\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nif (true) {\r\n (function() {\r\n'use strict';\r\n\r\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\r\n\r\n// ATTENTION\r\n// When adding new symbols to this file,\r\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\r\n// The Symbol used to tag the ReactElement-like types.\r\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\r\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\r\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\r\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\r\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\r\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\r\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\r\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\r\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\r\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\r\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\r\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\r\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\r\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\r\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\r\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\r\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\r\nfunction getIteratorFn(maybeIterable) {\r\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\r\n return null;\r\n }\r\n\r\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\r\n\r\n if (typeof maybeIterator === 'function') {\r\n return maybeIterator;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\r\n\r\nfunction error(format) {\r\n {\r\n {\r\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\r\n args[_key2 - 1] = arguments[_key2];\r\n }\r\n\r\n printWarning('error', format, args);\r\n }\r\n }\r\n}\r\n\r\nfunction printWarning(level, format, args) {\r\n // When changing this logic, you might want to also\r\n // update consoleWithStackDev.www.js as well.\r\n {\r\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\n var stack = ReactDebugCurrentFrame.getStackAddendum();\r\n\r\n if (stack !== '') {\r\n format += '%s';\r\n args = args.concat([stack]);\r\n } // eslint-disable-next-line react-internal/safe-string-coercion\r\n\r\n\r\n var argsWithFormat = args.map(function (item) {\r\n return String(item);\r\n }); // Careful: RN currently depends on this prefix\r\n\r\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\r\n // breaks IE9: https://github.com/facebook/react/issues/13610\r\n // eslint-disable-next-line react-internal/no-production-logging\r\n\r\n Function.prototype.apply.call(console[level], console, argsWithFormat);\r\n }\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\r\nvar enableCacheElement = false;\r\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\r\n\r\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\r\n// stuff. Intended to enable React core members to more easily debug scheduling\r\n// issues in DEV builds.\r\n\r\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\r\n\r\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\r\nfunction isValidElementType(type) {\r\n if (typeof type === 'string' || typeof type === 'function') {\r\n return true;\r\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\r\n\r\n\r\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\r\n return true;\r\n }\r\n\r\n if (typeof type === 'object' && type !== null) {\r\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\r\n // types supported by any Flight configuration anywhere since\r\n // we don't know which Flight build this will end up being used\r\n // with.\r\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getWrappedName(outerType, innerType, wrapperName) {\r\n var displayName = outerType.displayName;\r\n\r\n if (displayName) {\r\n return displayName;\r\n }\r\n\r\n var functionName = innerType.displayName || innerType.name || '';\r\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\r\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\r\n\r\n\r\nfunction getContextName(type) {\r\n return type.displayName || 'Context';\r\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\r\n\r\n\r\nfunction getComponentNameFromType(type) {\r\n if (type == null) {\r\n // Host root, text node or just invalid type.\r\n return null;\r\n }\r\n\r\n {\r\n if (typeof type.tag === 'number') {\r\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\r\n }\r\n }\r\n\r\n if (typeof type === 'function') {\r\n return type.displayName || type.name || null;\r\n }\r\n\r\n if (typeof type === 'string') {\r\n return type;\r\n }\r\n\r\n switch (type) {\r\n case REACT_FRAGMENT_TYPE:\r\n return 'Fragment';\r\n\r\n case REACT_PORTAL_TYPE:\r\n return 'Portal';\r\n\r\n case REACT_PROFILER_TYPE:\r\n return 'Profiler';\r\n\r\n case REACT_STRICT_MODE_TYPE:\r\n return 'StrictMode';\r\n\r\n case REACT_SUSPENSE_TYPE:\r\n return 'Suspense';\r\n\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return 'SuspenseList';\r\n\r\n case REACT_CACHE_TYPE:\r\n {\r\n return 'Cache';\r\n }\r\n\r\n }\r\n\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_CONTEXT_TYPE:\r\n var context = type;\r\n return getContextName(context) + '.Consumer';\r\n\r\n case REACT_PROVIDER_TYPE:\r\n var provider = type;\r\n return getContextName(provider._context) + '.Provider';\r\n\r\n case REACT_FORWARD_REF_TYPE:\r\n return getWrappedName(type, type.render, 'ForwardRef');\r\n\r\n case REACT_MEMO_TYPE:\r\n var outerName = type.displayName || null;\r\n\r\n if (outerName !== null) {\r\n return outerName;\r\n }\r\n\r\n return getComponentNameFromType(type.type) || 'Memo';\r\n\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n\r\n try {\r\n return getComponentNameFromType(init(payload));\r\n } catch (x) {\r\n return null;\r\n }\r\n }\r\n\r\n case REACT_SERVER_CONTEXT_TYPE:\r\n {\r\n var context2 = type;\r\n return (context2.displayName || context2._globalName) + '.Provider';\r\n }\r\n\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nvar assign = Object.assign;\r\n\r\n// Helpers to patch console.logs to avoid logging during side-effect free\r\n// replaying on render function. This currently only patches the object\r\n// lazily which won't cover if the log function was extracted eagerly.\r\n// We could also eagerly patch the method.\r\nvar disabledDepth = 0;\r\nvar prevLog;\r\nvar prevInfo;\r\nvar prevWarn;\r\nvar prevError;\r\nvar prevGroup;\r\nvar prevGroupCollapsed;\r\nvar prevGroupEnd;\r\n\r\nfunction disabledLog() {}\r\n\r\ndisabledLog.__reactDisabledLog = true;\r\nfunction disableLogs() {\r\n {\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n prevLog = console.log;\r\n prevInfo = console.info;\r\n prevWarn = console.warn;\r\n prevError = console.error;\r\n prevGroup = console.group;\r\n prevGroupCollapsed = console.groupCollapsed;\r\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\r\n\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n value: disabledLog,\r\n writable: true\r\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\r\n\r\n Object.defineProperties(console, {\r\n info: props,\r\n log: props,\r\n warn: props,\r\n error: props,\r\n group: props,\r\n groupCollapsed: props,\r\n groupEnd: props\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n\r\n disabledDepth++;\r\n }\r\n}\r\nfunction reenableLogs() {\r\n {\r\n disabledDepth--;\r\n\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true\r\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\r\n\r\n Object.defineProperties(console, {\r\n log: assign({}, props, {\r\n value: prevLog\r\n }),\r\n info: assign({}, props, {\r\n value: prevInfo\r\n }),\r\n warn: assign({}, props, {\r\n value: prevWarn\r\n }),\r\n error: assign({}, props, {\r\n value: prevError\r\n }),\r\n group: assign({}, props, {\r\n value: prevGroup\r\n }),\r\n groupCollapsed: assign({}, props, {\r\n value: prevGroupCollapsed\r\n }),\r\n groupEnd: assign({}, props, {\r\n value: prevGroupEnd\r\n })\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n\r\n if (disabledDepth < 0) {\r\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\r\n }\r\n }\r\n}\r\n\r\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\r\nvar prefix;\r\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\r\n {\r\n if (prefix === undefined) {\r\n // Extract the VM specific prefix used by each line.\r\n try {\r\n throw Error();\r\n } catch (x) {\r\n var match = x.stack.trim().match(/\\n( *(at )?)/);\r\n prefix = match && match[1] || '';\r\n }\r\n } // We use the prefix to ensure our stacks line up with native stack frames.\r\n\r\n\r\n return '\\n' + prefix + name;\r\n }\r\n}\r\nvar reentry = false;\r\nvar componentFrameCache;\r\n\r\n{\r\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\r\n componentFrameCache = new PossiblyWeakMap();\r\n}\r\n\r\nfunction describeNativeComponentFrame(fn, construct) {\r\n // If something asked for a stack inside a fake render, it should get ignored.\r\n if (!fn || reentry) {\r\n return '';\r\n }\r\n\r\n {\r\n var frame = componentFrameCache.get(fn);\r\n\r\n if (frame !== undefined) {\r\n return frame;\r\n }\r\n }\r\n\r\n var control;\r\n reentry = true;\r\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\r\n\r\n Error.prepareStackTrace = undefined;\r\n var previousDispatcher;\r\n\r\n {\r\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\r\n // for warnings.\r\n\r\n ReactCurrentDispatcher.current = null;\r\n disableLogs();\r\n }\r\n\r\n try {\r\n // This should throw.\r\n if (construct) {\r\n // Something should be setting the props in the constructor.\r\n var Fake = function () {\r\n throw Error();\r\n }; // $FlowFixMe[prop-missing]\r\n\r\n\r\n Object.defineProperty(Fake.prototype, 'props', {\r\n set: function () {\r\n // We use a throwing setter instead of frozen or non-writable props\r\n // because that won't throw in a non-strict mode function.\r\n throw Error();\r\n }\r\n });\r\n\r\n if (typeof Reflect === 'object' && Reflect.construct) {\r\n // We construct a different control for this case to include any extra\r\n // frames added by the construct call.\r\n try {\r\n Reflect.construct(Fake, []);\r\n } catch (x) {\r\n control = x;\r\n }\r\n\r\n Reflect.construct(fn, [], Fake);\r\n } else {\r\n try {\r\n Fake.call();\r\n } catch (x) {\r\n control = x;\r\n } // $FlowFixMe[prop-missing] found when upgrading Flow\r\n\r\n\r\n fn.call(Fake.prototype);\r\n }\r\n } else {\r\n try {\r\n throw Error();\r\n } catch (x) {\r\n control = x;\r\n } // TODO(luna): This will currently only throw if the function component\r\n // tries to access React/ReactDOM/props. We should probably make this throw\r\n // in simple components too\r\n\r\n\r\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\r\n // component, which we don't yet support. Attach a noop catch handler to\r\n // silence the error.\r\n // TODO: Implement component stacks for async client components?\r\n\r\n if (maybePromise && typeof maybePromise.catch === 'function') {\r\n maybePromise.catch(function () {});\r\n }\r\n }\r\n } catch (sample) {\r\n // This is inlined manually because closure doesn't do it for us.\r\n if (sample && control && typeof sample.stack === 'string') {\r\n // This extracts the first frame from the sample that isn't also in the control.\r\n // Skipping one frame that we assume is the frame that calls the two.\r\n var sampleLines = sample.stack.split('\\n');\r\n var controlLines = control.stack.split('\\n');\r\n var s = sampleLines.length - 1;\r\n var c = controlLines.length - 1;\r\n\r\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\r\n // We expect at least one stack frame to be shared.\r\n // Typically this will be the root most one. However, stack frames may be\r\n // cut off due to maximum stack limits. In this case, one maybe cut off\r\n // earlier than the other. We assume that the sample is longer or the same\r\n // and there for cut off earlier. So we should find the root most frame in\r\n // the sample somewhere in the control.\r\n c--;\r\n }\r\n\r\n for (; s >= 1 && c >= 0; s--, c--) {\r\n // Next we find the first one that isn't the same which should be the\r\n // frame that called our sample function and the control.\r\n if (sampleLines[s] !== controlLines[c]) {\r\n // In V8, the first line is describing the message but other VMs don't.\r\n // If we're about to return the first line, and the control is also on the same\r\n // line, that's a pretty good indicator that our sample threw at same line as\r\n // the control. I.e. before we entered the sample frame. So we ignore this result.\r\n // This can happen if you passed a class to function component, or non-function.\r\n if (s !== 1 || c !== 1) {\r\n do {\r\n s--;\r\n c--; // We may still have similar intermediate frames from the construct call.\r\n // The next one that isn't the same should be our match though.\r\n\r\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\r\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\r\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"\"\r\n // but we have a user-provided \"displayName\"\r\n // splice it in to make the stack more readable.\r\n\r\n\r\n if (fn.displayName && _frame.includes('')) {\r\n _frame = _frame.replace('', fn.displayName);\r\n }\r\n\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, _frame);\r\n }\r\n } // Return the line we found.\r\n\r\n\r\n return _frame;\r\n }\r\n } while (s >= 1 && c >= 0);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n } finally {\r\n reentry = false;\r\n\r\n {\r\n ReactCurrentDispatcher.current = previousDispatcher;\r\n reenableLogs();\r\n }\r\n\r\n Error.prepareStackTrace = previousPrepareStackTrace;\r\n } // Fallback to just using the name if we couldn't make it throw.\r\n\r\n\r\n var name = fn ? fn.displayName || fn.name : '';\r\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\r\n\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, syntheticFrame);\r\n }\r\n }\r\n\r\n return syntheticFrame;\r\n}\r\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\r\n {\r\n return describeNativeComponentFrame(fn, false);\r\n }\r\n}\r\n\r\nfunction shouldConstruct(Component) {\r\n var prototype = Component.prototype;\r\n return !!(prototype && prototype.isReactComponent);\r\n}\r\n\r\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\r\n\r\n if (type == null) {\r\n return '';\r\n }\r\n\r\n if (typeof type === 'function') {\r\n {\r\n return describeNativeComponentFrame(type, shouldConstruct(type));\r\n }\r\n }\r\n\r\n if (typeof type === 'string') {\r\n return describeBuiltInComponentFrame(type);\r\n }\r\n\r\n switch (type) {\r\n case REACT_SUSPENSE_TYPE:\r\n return describeBuiltInComponentFrame('Suspense');\r\n\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return describeBuiltInComponentFrame('SuspenseList');\r\n }\r\n\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_FORWARD_REF_TYPE:\r\n return describeFunctionComponentFrame(type.render);\r\n\r\n case REACT_MEMO_TYPE:\r\n // Memo may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\r\n\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n\r\n try {\r\n // Lazy may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\r\n } catch (x) {}\r\n }\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\n// $FlowFixMe[method-unbinding]\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nvar loggedTypeFailures = {};\r\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\r\n\r\nfunction setCurrentlyValidatingElement$1(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\r\n } else {\r\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\r\n }\r\n }\r\n}\r\n\r\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\r\n {\r\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\r\n var has = Function.call.bind(hasOwnProperty);\r\n\r\n for (var typeSpecName in typeSpecs) {\r\n if (has(typeSpecs, typeSpecName)) {\r\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\r\n // fail the render phase where it didn't fail before. So we log it.\r\n // After these have been cleaned up, we'll let them throw.\r\n\r\n try {\r\n // This is intentionally an invariant that gets caught. It's the same\r\n // behavior as without this statement except with a better message.\r\n if (typeof typeSpecs[typeSpecName] !== 'function') {\r\n // eslint-disable-next-line react-internal/prod-error-codes\r\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\r\n err.name = 'Invariant Violation';\r\n throw err;\r\n }\r\n\r\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\r\n } catch (ex) {\r\n error$1 = ex;\r\n }\r\n\r\n if (error$1 && !(error$1 instanceof Error)) {\r\n setCurrentlyValidatingElement$1(element);\r\n\r\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\r\n\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n\r\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\r\n // Only monitor this failure once because there tends to be a lot of the\r\n // same error.\r\n loggedTypeFailures[error$1.message] = true;\r\n setCurrentlyValidatingElement$1(element);\r\n\r\n error('Failed %s type: %s', location, error$1.message);\r\n\r\n setCurrentlyValidatingElement$1(null);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\r\n\r\nfunction isArray(a) {\r\n return isArrayImpl(a);\r\n}\r\n\r\n/*\r\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\r\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\r\n *\r\n * The functions in this module will throw an easier-to-understand,\r\n * easier-to-debug exception with a clear errors message message explaining the\r\n * problem. (Instead of a confusing exception thrown inside the implementation\r\n * of the `value` object).\r\n */\r\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\r\nfunction typeName(value) {\r\n {\r\n // toStringTag is needed for namespaced types like Temporal.Instant\r\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\r\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\r\n\r\n return type;\r\n }\r\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\r\n\r\n\r\nfunction willCoercionThrow(value) {\r\n {\r\n try {\r\n testStringCoercion(value);\r\n return false;\r\n } catch (e) {\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nfunction testStringCoercion(value) {\r\n // If you ended up here by following an exception call stack, here's what's\r\n // happened: you supplied an object or symbol value to React (as a prop, key,\r\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\r\n // coerce it to a string using `'' + value`, an exception was thrown.\r\n //\r\n // The most common types that will cause this exception are `Symbol` instances\r\n // and Temporal objects like `Temporal.Instant`. But any object that has a\r\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\r\n // exception. (Library authors do this to prevent users from using built-in\r\n // numeric operators like `+` or comparison operators like `>=` because custom\r\n // methods are needed to perform accurate arithmetic or comparison.)\r\n //\r\n // To fix the problem, coerce this object or symbol value to a string before\r\n // passing it to React. The most reliable way is usually `String(value)`.\r\n //\r\n // To find which value is throwing, check the browser or debugger console.\r\n // Before this exception was thrown, there should be `console.error` output\r\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\r\n // problem and how that type was used: key, atrribute, input value prop, etc.\r\n // In most cases, this console output also shows the component and its\r\n // ancestor components where the exception happened.\r\n //\r\n // eslint-disable-next-line react-internal/safe-string-coercion\r\n return '' + value;\r\n}\r\nfunction checkKeyStringCoercion(value) {\r\n {\r\n if (willCoercionThrow(value)) {\r\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\r\n\r\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\r\n }\r\n }\r\n}\r\n\r\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\r\nvar RESERVED_PROPS = {\r\n key: true,\r\n ref: true,\r\n __self: true,\r\n __source: true\r\n};\r\nvar specialPropKeyWarningShown;\r\nvar specialPropRefWarningShown;\r\nvar didWarnAboutStringRefs;\r\n\r\n{\r\n didWarnAboutStringRefs = {};\r\n}\r\n\r\nfunction hasValidRef(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'ref')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\r\n\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return config.ref !== undefined;\r\n}\r\n\r\nfunction hasValidKey(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'key')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\r\n\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return config.key !== undefined;\r\n}\r\n\r\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\r\n {\r\n if (typeof config.ref === 'string' && ReactCurrentOwner$1.current && self && ReactCurrentOwner$1.current.stateNode !== self) {\r\n var componentName = getComponentNameFromType(ReactCurrentOwner$1.current.type);\r\n\r\n if (!didWarnAboutStringRefs[componentName]) {\r\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner$1.current.type), config.ref);\r\n\r\n didWarnAboutStringRefs[componentName] = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction defineKeyPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingKey = function () {\r\n if (!specialPropKeyWarningShown) {\r\n specialPropKeyWarningShown = true;\r\n\r\n error('%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://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n\r\n warnAboutAccessingKey.isReactWarning = true;\r\n Object.defineProperty(props, 'key', {\r\n get: warnAboutAccessingKey,\r\n configurable: true\r\n });\r\n }\r\n}\r\n\r\nfunction defineRefPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingRef = function () {\r\n if (!specialPropRefWarningShown) {\r\n specialPropRefWarningShown = true;\r\n\r\n error('%s: `ref` 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://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n\r\n warnAboutAccessingRef.isReactWarning = true;\r\n Object.defineProperty(props, 'ref', {\r\n get: warnAboutAccessingRef,\r\n configurable: true\r\n });\r\n }\r\n}\r\n/**\r\n * Factory method to create a new React element. This no longer adheres to\r\n * the class pattern, so do not use new to call it. Also, instanceof check\r\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\r\n * if something is a React Element.\r\n *\r\n * @param {*} type\r\n * @param {*} props\r\n * @param {*} key\r\n * @param {string|object} ref\r\n * @param {*} owner\r\n * @param {*} self A *temporary* helper to detect places where `this` is\r\n * different from the `owner` when React.createElement is called, so that we\r\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\r\n * functions, and as long as `this` and owner are the same, there will be no\r\n * change in behavior.\r\n * @param {*} source An annotation object (added by a transpiler or otherwise)\r\n * indicating filename, line number, and/or other information.\r\n * @internal\r\n */\r\n\r\n\r\nfunction ReactElement(type, key, ref, self, source, owner, props) {\r\n var element = {\r\n // This tag allows us to uniquely identify this as a React Element\r\n $$typeof: REACT_ELEMENT_TYPE,\r\n // Built-in properties that belong on the element\r\n type: type,\r\n key: key,\r\n ref: ref,\r\n props: props,\r\n // Record the component responsible for creating this element.\r\n _owner: owner\r\n };\r\n\r\n {\r\n // The validation flag is currently mutative. We put it on\r\n // an external backing store so that we can freeze the whole object.\r\n // This can be replaced with a WeakMap once they are implemented in\r\n // commonly used development environments.\r\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\r\n // the validation flag non-enumerable (where possible, which should\r\n // include every environment we run tests in), so the test framework\r\n // ignores it.\r\n\r\n Object.defineProperty(element._store, 'validated', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: true,\r\n value: false\r\n }); // self and source are DEV only properties.\r\n\r\n Object.defineProperty(element, '_self', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: self\r\n }); // Two elements created in two different places should be considered\r\n // equal for testing purposes and therefore we hide it from enumeration.\r\n\r\n Object.defineProperty(element, '_source', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: source\r\n });\r\n\r\n if (Object.freeze) {\r\n Object.freeze(element.props);\r\n Object.freeze(element);\r\n }\r\n }\r\n\r\n return element;\r\n}\r\n/**\r\n * https://github.com/reactjs/rfcs/pull/107\r\n * @param {*} type\r\n * @param {object} props\r\n * @param {string} key\r\n */\r\n\r\nfunction jsxDEV(type, config, maybeKey, source, self) {\r\n {\r\n var propName; // Reserved names are extracted\r\n\r\n var props = {};\r\n var key = null;\r\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\r\n // issue if key is also explicitly declared (ie.
\r\n // or
). We want to deprecate key spread,\r\n // but as an intermediary step, we will use jsxDEV for everything except\r\n //
, because we aren't currently able to tell if\r\n // key is explicitly declared to be undefined or not.\r\n\r\n if (maybeKey !== undefined) {\r\n {\r\n checkKeyStringCoercion(maybeKey);\r\n }\r\n\r\n key = '' + maybeKey;\r\n }\r\n\r\n if (hasValidKey(config)) {\r\n {\r\n checkKeyStringCoercion(config.key);\r\n }\r\n\r\n key = '' + config.key;\r\n }\r\n\r\n if (hasValidRef(config)) {\r\n ref = config.ref;\r\n warnIfStringRefCannotBeAutoConverted(config, self);\r\n } // Remaining properties are added to a new props object\r\n\r\n\r\n for (propName in config) {\r\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\r\n props[propName] = config[propName];\r\n }\r\n } // Resolve default props\r\n\r\n\r\n if (type && type.defaultProps) {\r\n var defaultProps = type.defaultProps;\r\n\r\n for (propName in defaultProps) {\r\n if (props[propName] === undefined) {\r\n props[propName] = defaultProps[propName];\r\n }\r\n }\r\n }\r\n\r\n if (key || ref) {\r\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\r\n\r\n if (key) {\r\n defineKeyPropWarningGetter(props, displayName);\r\n }\r\n\r\n if (ref) {\r\n defineRefPropWarningGetter(props, displayName);\r\n }\r\n }\r\n\r\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner$1.current, props);\r\n }\r\n}\r\n\r\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\r\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\r\n\r\nfunction setCurrentlyValidatingElement(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\r\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\r\n } else {\r\n ReactDebugCurrentFrame.setExtraStackFrame(null);\r\n }\r\n }\r\n}\r\n\r\nvar propTypesMisspellWarningShown;\r\n\r\n{\r\n propTypesMisspellWarningShown = false;\r\n}\r\n/**\r\n * Verifies the object is a ReactElement.\r\n * See https://reactjs.org/docs/react-api.html#isvalidelement\r\n * @param {?object} object\r\n * @return {boolean} True if `object` is a ReactElement.\r\n * @final\r\n */\r\n\r\n\r\nfunction isValidElement(object) {\r\n {\r\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\r\n }\r\n}\r\n\r\nfunction getDeclarationErrorAddendum() {\r\n {\r\n if (ReactCurrentOwner.current) {\r\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\r\n\r\n if (name) {\r\n return '\\n\\nCheck the render method of `' + name + '`.';\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n\r\nfunction getSourceInfoErrorAddendum(source) {\r\n {\r\n if (source !== undefined) {\r\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\r\n var lineNumber = source.lineNumber;\r\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n/**\r\n * Warn if there's no key explicitly set on dynamic arrays of children or\r\n * object keys are not valid. This allows us to keep track of children between\r\n * updates.\r\n */\r\n\r\n\r\nvar ownerHasKeyUseWarning = {};\r\n\r\nfunction getCurrentComponentErrorInfo(parentType) {\r\n {\r\n var info = getDeclarationErrorAddendum();\r\n\r\n if (!info) {\r\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\r\n\r\n if (parentName) {\r\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\r\n }\r\n }\r\n\r\n return info;\r\n }\r\n}\r\n/**\r\n * Warn if the element doesn't have an explicit key assigned to it.\r\n * This element is in an array. The array could grow and shrink or be\r\n * reordered. All children that haven't already been validated are required to\r\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\r\n * will only be shown once.\r\n *\r\n * @internal\r\n * @param {ReactElement} element Element that requires a key.\r\n * @param {*} parentType element's parent's type.\r\n */\r\n\r\n\r\nfunction validateExplicitKey(element, parentType) {\r\n {\r\n if (!element._store || element._store.validated || element.key != null) {\r\n return;\r\n }\r\n\r\n element._store.validated = true;\r\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\r\n\r\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\r\n return;\r\n }\r\n\r\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\r\n // property, it may be the creator of the child that's responsible for\r\n // assigning it a key.\r\n\r\n var childOwner = '';\r\n\r\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\r\n // Give the component that originally created this child.\r\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\r\n }\r\n\r\n setCurrentlyValidatingElement(element);\r\n\r\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\r\n\r\n setCurrentlyValidatingElement(null);\r\n }\r\n}\r\n/**\r\n * Ensure that every element either is passed in a static location, in an\r\n * array with an explicit keys property defined, or in an object literal\r\n * with valid key property.\r\n *\r\n * @internal\r\n * @param {ReactNode} node Statically passed child of any type.\r\n * @param {*} parentType node's parent's type.\r\n */\r\n\r\n\r\nfunction validateChildKeys(node, parentType) {\r\n {\r\n if (typeof node !== 'object' || !node) {\r\n return;\r\n }\r\n\r\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\r\n for (var i = 0; i < node.length; i++) {\r\n var child = node[i];\r\n\r\n if (isValidElement(child)) {\r\n validateExplicitKey(child, parentType);\r\n }\r\n }\r\n } else if (isValidElement(node)) {\r\n // This element was passed in a valid location.\r\n if (node._store) {\r\n node._store.validated = true;\r\n }\r\n } else {\r\n var iteratorFn = getIteratorFn(node);\r\n\r\n if (typeof iteratorFn === 'function') {\r\n // Entry iterators used to provide implicit keys,\r\n // but now we print a separate warning for them later.\r\n if (iteratorFn !== node.entries) {\r\n var iterator = iteratorFn.call(node);\r\n var step;\r\n\r\n while (!(step = iterator.next()).done) {\r\n if (isValidElement(step.value)) {\r\n validateExplicitKey(step.value, parentType);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Given an element, validate that its props follow the propTypes definition,\r\n * provided by the type.\r\n *\r\n * @param {ReactElement} element\r\n */\r\n\r\n\r\nfunction validatePropTypes(element) {\r\n {\r\n var type = element.type;\r\n\r\n if (type === null || type === undefined || typeof type === 'string') {\r\n return;\r\n }\r\n\r\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\r\n return;\r\n }\r\n\r\n var propTypes;\r\n\r\n if (typeof type === 'function') {\r\n propTypes = type.propTypes;\r\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\r\n // Inner props are checked in the reconciler.\r\n type.$$typeof === REACT_MEMO_TYPE)) {\r\n propTypes = type.propTypes;\r\n } else {\r\n return;\r\n }\r\n\r\n if (propTypes) {\r\n // Intentionally inside to avoid triggering lazy initializers:\r\n var name = getComponentNameFromType(type);\r\n checkPropTypes(propTypes, element.props, 'prop', name, element);\r\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\r\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\r\n\r\n var _name = getComponentNameFromType(type);\r\n\r\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\r\n }\r\n\r\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\r\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\r\n }\r\n }\r\n}\r\n/**\r\n * Given a fragment, validate that it can only be provided with fragment props\r\n * @param {ReactElement} fragment\r\n */\r\n\r\n\r\nfunction validateFragmentProps(fragment) {\r\n {\r\n var keys = Object.keys(fragment.props);\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n\r\n if (key !== 'children' && key !== 'key') {\r\n setCurrentlyValidatingElement(fragment);\r\n\r\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\r\n\r\n setCurrentlyValidatingElement(null);\r\n break;\r\n }\r\n }\r\n\r\n if (fragment.ref !== null) {\r\n setCurrentlyValidatingElement(fragment);\r\n\r\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\r\n\r\n setCurrentlyValidatingElement(null);\r\n }\r\n }\r\n}\r\n\r\nvar didWarnAboutKeySpread = {};\r\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\r\n {\r\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\r\n // succeed and there will likely be errors in render.\r\n\r\n if (!validType) {\r\n var info = '';\r\n\r\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\r\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\r\n }\r\n\r\n var sourceInfo = getSourceInfoErrorAddendum(source);\r\n\r\n if (sourceInfo) {\r\n info += sourceInfo;\r\n } else {\r\n info += getDeclarationErrorAddendum();\r\n }\r\n\r\n var typeString;\r\n\r\n if (type === null) {\r\n typeString = 'null';\r\n } else if (isArray(type)) {\r\n typeString = 'array';\r\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\r\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\r\n info = ' Did you accidentally export a JSX literal instead of a component?';\r\n } else {\r\n typeString = typeof type;\r\n }\r\n\r\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\r\n }\r\n\r\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\r\n // TODO: Drop this when these are no longer allowed as the type argument.\r\n\r\n if (element == null) {\r\n return element;\r\n } // Skip key warning if the type isn't valid since our key validation logic\r\n // doesn't expect a non-string/function type and can throw confusing errors.\r\n // We don't want exception behavior to differ between dev and prod.\r\n // (Rendering will throw with a helpful message and as soon as the type is\r\n // fixed, the key warnings will appear.)\r\n\r\n\r\n if (validType) {\r\n var children = props.children;\r\n\r\n if (children !== undefined) {\r\n if (isStaticChildren) {\r\n if (isArray(children)) {\r\n for (var i = 0; i < children.length; i++) {\r\n validateChildKeys(children[i], type);\r\n }\r\n\r\n if (Object.freeze) {\r\n Object.freeze(children);\r\n }\r\n } else {\r\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\r\n }\r\n } else {\r\n validateChildKeys(children, type);\r\n }\r\n }\r\n }\r\n\r\n if (hasOwnProperty.call(props, 'key')) {\r\n var componentName = getComponentNameFromType(type);\r\n var keys = Object.keys(props).filter(function (k) {\r\n return k !== 'key';\r\n });\r\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\r\n\r\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\r\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\r\n\r\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\r\n\r\n didWarnAboutKeySpread[componentName + beforeExample] = true;\r\n }\r\n }\r\n\r\n if (type === REACT_FRAGMENT_TYPE) {\r\n validateFragmentProps(element);\r\n } else {\r\n validatePropTypes(element);\r\n }\r\n\r\n return element;\r\n }\r\n} // These two functions exist to still get child warnings in dev\r\n// even with the prod transform. This means that jsxDEV is purely\r\n// opt-in behavior for better messages but that we won't stop\r\n// giving you warnings if you use production apis.\r\n\r\nfunction jsxWithValidationStatic(type, props, key) {\r\n {\r\n return jsxWithValidation(type, props, key, true);\r\n }\r\n}\r\nfunction jsxWithValidationDynamic(type, props, key) {\r\n {\r\n return jsxWithValidation(type, props, key, false);\r\n }\r\n}\r\n\r\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\r\n// for now we can ship identical prod functions\r\n\r\nvar jsxs = jsxWithValidationStatic ;\r\n\r\nexports.Fragment = REACT_FRAGMENT_TYPE;\r\nexports.jsx = jsx;\r\nexports.jsxs = jsxs;\r\n })();\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7QUFDYjtBQUNBLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLHNHQUEwQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUdBQWlHLGVBQWU7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1QsaUNBQWlDO0FBQ2pDO0FBQ0EsU0FBUztBQUNULDJCQUEyQjtBQUMzQjtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdGQUFnRjtBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQsc0JBQXNCLGlCQUFpQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCw4Q0FBOEMsZ0RBQWdELE1BQU0sYUFBYTtBQUNqSDtBQUNBO0FBQ0EsK0NBQStDLGtDQUFrQyxPQUFPO0FBQ3hGO0FBQ0EsdUdBQXVHLGNBQWMsVUFBVSxnR0FBZ0csa0JBQWtCLFVBQVUsVUFBVTtBQUNyUTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixXQUFXO0FBQ1gsWUFBWTtBQUNaLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcz8wOWRiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBSZWFjdFxyXG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxyXG4gKlxyXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcclxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAoZnVuY3Rpb24oKSB7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3RcIik7XHJcblxyXG4vLyBBVFRFTlRJT05cclxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxyXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXHJcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxyXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xyXG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcclxudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xyXG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XHJcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcclxudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xyXG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xyXG52YXIgUkVBQ1RfU0VSVkVSX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnNlcnZlcl9jb250ZXh0Jyk7XHJcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcclxudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xyXG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xyXG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xyXG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xyXG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcclxudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xyXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xyXG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XHJcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xyXG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XHJcblxyXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XHJcblxyXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcclxuICB7XHJcbiAgICB7XHJcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XHJcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xyXG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xyXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxyXG4gIHtcclxuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcclxuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xyXG5cclxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcclxuICAgICAgZm9ybWF0ICs9ICclcyc7XHJcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcclxuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXHJcblxyXG5cclxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XHJcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcclxuXHJcbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcclxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcclxuXHJcbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXHJcbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcclxudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXHJcblxyXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXHJcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxyXG5cclxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cclxuXHJcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDEgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7XHJcbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxyXG5cclxuXHJcbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XHJcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIFRoaXMgbmVlZHMgdG8gaW5jbHVkZSBhbGwgcG9zc2libGUgbW9kdWxlIHJlZmVyZW5jZSBvYmplY3RcclxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcclxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxyXG4gICAgLy8gd2l0aC5cclxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xyXG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcclxuXHJcbiAgaWYgKGRpc3BsYXlOYW1lKSB7XHJcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XHJcbiAgfVxyXG5cclxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xyXG4gIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWU7XHJcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xyXG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0JztcclxufSAvLyBOb3RlIHRoYXQgdGhlIHJlY29uY2lsZXIgcGFja2FnZSBzaG91bGQgZ2VuZXJhbGx5IHByZWZlciB0byB1c2UgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcigpIGluc3RlYWQuXHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcclxuICBpZiAodHlwZSA9PSBudWxsKSB7XHJcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAge1xyXG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcclxuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4gdHlwZTtcclxuICB9XHJcblxyXG4gIHN3aXRjaCAodHlwZSkge1xyXG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxyXG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcclxuXHJcbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxyXG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XHJcblxyXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxyXG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcclxuXHJcbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XHJcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XHJcblxyXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxyXG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcclxuXHJcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcclxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xyXG5cclxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcclxuICAgICAge1xyXG4gICAgICAgIHJldHVybiAnQ2FjaGUnO1xyXG4gICAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xyXG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XHJcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxyXG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcclxuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcclxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xyXG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcclxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XHJcblxyXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcclxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xyXG5cclxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcclxuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcclxuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcclxuXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICBjYXNlIFJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEU6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdmFyIGNvbnRleHQyID0gdHlwZTtcclxuICAgICAgICAgIHJldHVybiAoY29udGV4dDIuZGlzcGxheU5hbWUgfHwgY29udGV4dDIuX2dsb2JhbE5hbWUpICsgJy5Qcm92aWRlcic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcclxuXHJcbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcclxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3RcclxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxyXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cclxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xyXG52YXIgcHJldkxvZztcclxudmFyIHByZXZJbmZvO1xyXG52YXIgcHJldldhcm47XHJcbnZhciBwcmV2RXJyb3I7XHJcbnZhciBwcmV2R3JvdXA7XHJcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XHJcbnZhciBwcmV2R3JvdXBFbmQ7XHJcblxyXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XHJcblxyXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xyXG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcclxuICB7XHJcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xyXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cclxuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcclxuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XHJcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XHJcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XHJcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXHJcbiAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xyXG4gICAgICAgIGluZm86IHByb3BzLFxyXG4gICAgICAgIGxvZzogcHJvcHMsXHJcbiAgICAgICAgd2FybjogcHJvcHMsXHJcbiAgICAgICAgZXJyb3I6IHByb3BzLFxyXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcclxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXHJcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXHJcbiAgICAgIH0pO1xyXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkRGVwdGgrKztcclxuICB9XHJcbn1cclxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xyXG4gIHtcclxuICAgIGRpc2FibGVkRGVwdGgtLTtcclxuXHJcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xyXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cclxuICAgICAgdmFyIHByb3BzID0ge1xyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cclxuXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcclxuICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcclxuICAgICAgICB9KSxcclxuICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7XHJcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcclxuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xyXG52YXIgcHJlZml4O1xyXG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcclxuICB7XHJcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCk7XHJcbiAgICAgIH0gY2F0Y2ggKHgpIHtcclxuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xyXG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xyXG4gICAgICB9XHJcbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxyXG5cclxuXHJcbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xyXG4gIH1cclxufVxyXG52YXIgcmVlbnRyeSA9IGZhbHNlO1xyXG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcclxuXHJcbntcclxuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xyXG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xyXG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxyXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAge1xyXG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xyXG5cclxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBmcmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBjb250cm9sO1xyXG4gIHJlZW50cnkgPSB0cnVlO1xyXG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cclxuXHJcbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XHJcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcclxuXHJcbiAge1xyXG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cclxuICAgIC8vIGZvciB3YXJuaW5ncy5cclxuXHJcbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgZGlzYWJsZUxvZ3MoKTtcclxuICB9XHJcblxyXG4gIHRyeSB7XHJcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cclxuICAgIGlmIChjb25zdHJ1Y3QpIHtcclxuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXHJcbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCk7XHJcbiAgICAgIH07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxyXG5cclxuXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xyXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xyXG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcclxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XHJcbiAgICAgICAgfSBjYXRjaCAoeCkge1xyXG4gICAgICAgICAgY29udHJvbCA9IHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcclxuICAgICAgICB9IGNhdGNoICh4KSB7XHJcbiAgICAgICAgICBjb250cm9sID0geDtcclxuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XHJcblxyXG5cclxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aHJvdyBFcnJvcigpO1xyXG4gICAgICB9IGNhdGNoICh4KSB7XHJcbiAgICAgICAgY29udHJvbCA9IHg7XHJcbiAgICAgIH0gLy8gVE9ETyhsdW5hKTogVGhpcyB3aWxsIGN1cnJlbnRseSBvbmx5IHRocm93IGlmIHRoZSBmdW5jdGlvbiBjb21wb25lbnRcclxuICAgICAgLy8gdHJpZXMgdG8gYWNjZXNzIFJlYWN0L1JlYWN0RE9NL3Byb3BzLiBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIHRocm93XHJcbiAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xyXG5cclxuXHJcbiAgICAgIHZhciBtYXliZVByb21pc2UgPSBmbigpOyAvLyBJZiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHJldHVybnMgYSBwcm9taXNlLCBpdCdzIGxpa2VseSBhbiBhc3luY1xyXG4gICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cclxuICAgICAgLy8gc2lsZW5jZSB0aGUgZXJyb3IuXHJcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCBjb21wb25lbnQgc3RhY2tzIGZvciBhc3luYyBjbGllbnQgY29tcG9uZW50cz9cclxuXHJcbiAgICAgIGlmIChtYXliZVByb21pc2UgJiYgdHlwZW9mIG1heWJlUHJvbWlzZS5jYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGNhdGNoIChzYW1wbGUpIHtcclxuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXHJcbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cclxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXHJcbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XHJcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcclxuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xyXG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxyXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcclxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxyXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXHJcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cclxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cclxuICAgICAgICBjLS07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xyXG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxyXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxyXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XHJcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxyXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxyXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcclxuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cclxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXHJcbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICBzLS07XHJcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXHJcbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXHJcblxyXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cclxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTsgLy8gSWYgb3VyIGNvbXBvbmVudCBmcmFtZSBpcyBsYWJlbGVkIFwiPGFub255bW91cz5cIlxyXG4gICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgYSB1c2VyLXByb3ZpZGVkIFwiZGlzcGxheU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcclxuICAgICAgICAgICAgICAgICAgX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoJzxhbm9ueW1vdXM+JywgZm4uZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZmluYWxseSB7XHJcbiAgICByZWVudHJ5ID0gZmFsc2U7XHJcblxyXG4gICAge1xyXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XHJcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcclxuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cclxuXHJcblxyXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XHJcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XHJcblxyXG4gIHtcclxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcclxufVxyXG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xyXG4gIHtcclxuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XHJcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XHJcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcclxuXHJcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICB7XHJcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcclxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xyXG5cclxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxyXG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xyXG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XHJcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcclxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxyXG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXHJcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XHJcblxyXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XHJcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XHJcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XHJcblxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cclxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJyc7XHJcbn1cclxuXHJcbi8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cclxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxuXHJcbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcclxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XHJcblxyXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcclxuICB7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcclxuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcclxuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XHJcbiAge1xyXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxyXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XHJcblxyXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xyXG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xyXG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xyXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cclxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcclxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cclxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcclxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XHJcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgIGVycm9yJDEgPSBleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xyXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcclxuXHJcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XHJcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcclxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXHJcbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XHJcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcclxuXHJcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxyXG5cclxuZnVuY3Rpb24gaXNBcnJheShhKSB7XHJcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xyXG59XHJcblxyXG4vKlxyXG4gKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcclxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cclxuICpcclxuICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxyXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXHJcbiAqIHByb2JsZW0uIChJbnN0ZWFkIG9mIGEgY29uZnVzaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvblxyXG4gKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxyXG4gKi9cclxuLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cclxuZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcclxuICB7XHJcbiAgICAvLyB0b1N0cmluZ1RhZyBpcyBuZWVkZWQgZm9yIG5hbWVzcGFjZWQgdHlwZXMgbGlrZSBUZW1wb3JhbC5JbnN0YW50XHJcbiAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZztcclxuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXHJcblxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbiAgfVxyXG59IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXHJcblxyXG5cclxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcclxuICB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XHJcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXHJcbiAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcclxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXHJcbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXHJcbiAgLy9cclxuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcclxuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxyXG4gIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xyXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxyXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxyXG4gIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXHJcbiAgLy9cclxuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXHJcbiAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxyXG4gIC8vXHJcbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cclxuICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcclxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXHJcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cclxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXHJcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxyXG4gIC8vXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXHJcbiAgcmV0dXJuICcnICsgdmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xyXG4gIHtcclxuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcclxuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcclxuXHJcbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcclxudmFyIFJFU0VSVkVEX1BST1BTID0ge1xyXG4gIGtleTogdHJ1ZSxcclxuICByZWY6IHRydWUsXHJcbiAgX19zZWxmOiB0cnVlLFxyXG4gIF9fc291cmNlOiB0cnVlXHJcbn07XHJcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcclxudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xyXG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcclxuXHJcbntcclxuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xyXG4gIHtcclxuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XHJcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcclxuXHJcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcclxuICB7XHJcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xyXG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XHJcblxyXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZikge1xyXG4gIHtcclxuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ICYmIHNlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xyXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSk7XHJcblxyXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcclxuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcclxuXHJcbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xyXG4gIHtcclxuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcclxuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xyXG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcclxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xyXG4gIHtcclxuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcclxuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xyXG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcclxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXHJcbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXHJcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xyXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHR5cGVcclxuICogQHBhcmFtIHsqfSBwcm9wc1xyXG4gKiBAcGFyYW0geyp9IGtleVxyXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxyXG4gKiBAcGFyYW0geyp9IG93bmVyXHJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xyXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXHJcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XHJcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cclxuICogY2hhbmdlIGluIGJlaGF2aW9yLlxyXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcclxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcclxuICB2YXIgZWxlbWVudCA9IHtcclxuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxyXG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcclxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcclxuICAgIHR5cGU6IHR5cGUsXHJcbiAgICBrZXk6IGtleSxcclxuICAgIHJlZjogcmVmLFxyXG4gICAgcHJvcHM6IHByb3BzLFxyXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cclxuICAgIF9vd25lcjogb3duZXJcclxuICB9O1xyXG5cclxuICB7XHJcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXHJcbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxyXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxyXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXHJcbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxyXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxyXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcclxuICAgIC8vIGlnbm9yZXMgaXQuXHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xyXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xyXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogc2VsZlxyXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXHJcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgIHZhbHVlOiBzb3VyY2VcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XHJcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XHJcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZWxlbWVudDtcclxufVxyXG4vKipcclxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xyXG4gKiBAcGFyYW0geyp9IHR5cGVcclxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuICovXHJcblxyXG5mdW5jdGlvbiBqc3hERVYodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XHJcbiAge1xyXG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXHJcblxyXG4gICAgdmFyIHByb3BzID0ge307XHJcbiAgICB2YXIga2V5ID0gbnVsbDtcclxuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcclxuICAgIC8vIGlzc3VlIGlmIGtleSBpcyBhbHNvIGV4cGxpY2l0bHkgZGVjbGFyZWQgKGllLiA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPlxyXG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcclxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxyXG4gICAgLy8gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz4sIGJlY2F1c2Ugd2UgYXJlbid0IGN1cnJlbnRseSBhYmxlIHRvIHRlbGwgaWZcclxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXHJcblxyXG4gICAgaWYgKG1heWJlS2V5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAge1xyXG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XHJcbiAgICAgIHtcclxuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcclxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcclxuICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZik7XHJcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcclxuXHJcblxyXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcclxuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xyXG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XHJcbiAgICAgIH1cclxuICAgIH0gLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXHJcblxyXG5cclxuICAgIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XHJcbiAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcclxuXHJcbiAgICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XHJcbiAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZXkgfHwgcmVmKSB7XHJcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcclxuXHJcbiAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVmKSB7XHJcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LCBwcm9wcyk7XHJcbiAgfVxyXG59XHJcblxyXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcclxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xyXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTtcclxuXHJcbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcclxuICB7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcclxuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcclxuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XHJcblxyXG57XHJcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcclxufVxyXG4vKipcclxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cclxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxyXG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxyXG4gKiBAZmluYWxcclxuICovXHJcblxyXG5cclxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XHJcbiAge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcclxuICB7XHJcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xyXG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xyXG5cclxuICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcclxuICB7XHJcbiAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcclxuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcclxuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG59XHJcbi8qKlxyXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXHJcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxyXG4gKiB1cGRhdGVzLlxyXG4gKi9cclxuXHJcblxyXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XHJcblxyXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcclxuICB7XHJcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xyXG5cclxuICAgIGlmICghaW5mbykge1xyXG4gICAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcclxuXHJcbiAgICAgIGlmIChwYXJlbnROYW1lKSB7XHJcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluZm87XHJcbiAgfVxyXG59XHJcbi8qKlxyXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXHJcbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxyXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cclxuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXHJcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxyXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xyXG4gIHtcclxuICAgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XHJcblxyXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcclxuICAgIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cclxuXHJcbiAgICB2YXIgY2hpbGRPd25lciA9ICcnO1xyXG5cclxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XHJcbiAgICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxyXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcclxuXHJcbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcclxuXHJcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cclxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXHJcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXHJcbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cclxuICovXHJcblxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xyXG4gIHtcclxuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgIW5vZGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChub2RlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFKSA7IGVsc2UgaWYgKGlzQXJyYXkobm9kZSkpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcclxuXHJcbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xyXG4gICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XHJcbiAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXHJcbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xyXG4gICAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcclxuICAgICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cclxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XHJcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XHJcbiAgICAgICAgICB2YXIgc3RlcDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXHJcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxyXG4gKi9cclxuXHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XHJcbiAge1xyXG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwcm9wVHlwZXM7XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxyXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXHJcbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XHJcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wVHlwZXMpIHtcclxuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcclxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XHJcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcclxuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcclxuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxyXG5cclxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xyXG5cclxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcclxuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xyXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcclxuICovXHJcblxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XHJcbiAge1xyXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG5cclxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XHJcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZnJhZ21lbnQpO1xyXG5cclxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XHJcblxyXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xyXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XHJcblxyXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcclxuXHJcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxudmFyIGRpZFdhcm5BYm91dEtleVNwcmVhZCA9IHt9O1xyXG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcclxuICB7XHJcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xyXG4gICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cclxuXHJcbiAgICBpZiAoIXZhbGlkVHlwZSkge1xyXG4gICAgICB2YXIgaW5mbyA9ICcnO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSk7XHJcblxyXG4gICAgICBpZiAoc291cmNlSW5mbykge1xyXG4gICAgICAgIGluZm8gKz0gc291cmNlSW5mbztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgdHlwZVN0cmluZztcclxuXHJcbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XHJcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcclxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHR5cGUpKSB7XHJcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xyXG4gICAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcclxuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlcnJvcignUmVhY3QuanN4OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBlbGVtZW50ID0ganN4REVWKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXHJcbiAgICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXHJcblxyXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcclxuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cclxuICAgIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cclxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXHJcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXHJcblxyXG5cclxuICAgIGlmICh2YWxpZFR5cGUpIHtcclxuICAgICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XHJcblxyXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuW2ldLCB0eXBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgJ2tleScpKSB7XHJcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xyXG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcclxuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgYmVmb3JlRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7a2V5OiBzb21lS2V5LCAnICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7a2V5OiBzb21lS2V5fSc7XHJcblxyXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEtleVNwcmVhZFtjb21wb25lbnROYW1lICsgYmVmb3JlRXhhbXBsZV0pIHtcclxuICAgICAgICB2YXIgYWZ0ZXJFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3snICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7fSc7XHJcblxyXG4gICAgICAgIGVycm9yKCdBIHByb3BzIG9iamVjdCBjb250YWluaW5nIGEgXCJrZXlcIiBwcm9wIGlzIGJlaW5nIHNwcmVhZCBpbnRvIEpTWDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyB7Li4ucHJvcHN9IC8+XFxuJyArICdSZWFjdCBrZXlzIG11c3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIEpTWCB3aXRob3V0IHVzaW5nIHNwcmVhZDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLCBiZWZvcmVFeGFtcGxlLCBjb21wb25lbnROYW1lLCBhZnRlckV4YW1wbGUsIGNvbXBvbmVudE5hbWUpO1xyXG5cclxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XHJcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbGVtZW50O1xyXG4gIH1cclxufSAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGV4aXN0IHRvIHN0aWxsIGdldCBjaGlsZCB3YXJuaW5ncyBpbiBkZXZcclxuLy8gZXZlbiB3aXRoIHRoZSBwcm9kIHRyYW5zZm9ybS4gVGhpcyBtZWFucyB0aGF0IGpzeERFViBpcyBwdXJlbHlcclxuLy8gb3B0LWluIGJlaGF2aW9yIGZvciBiZXR0ZXIgbWVzc2FnZXMgYnV0IHRoYXQgd2Ugd29uJ3Qgc3RvcFxyXG4vLyBnaXZpbmcgeW91IHdhcm5pbmdzIGlmIHlvdSB1c2UgcHJvZHVjdGlvbiBhcGlzLlxyXG5cclxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25TdGF0aWModHlwZSwgcHJvcHMsIGtleSkge1xyXG4gIHtcclxuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCB0cnVlKTtcclxuICB9XHJcbn1cclxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25EeW5hbWljKHR5cGUsIHByb3BzLCBrZXkpIHtcclxuICB7XHJcbiAgICByZXR1cm4ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgZmFsc2UpO1xyXG4gIH1cclxufVxyXG5cclxudmFyIGpzeCA9IGpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyA7IC8vIHdlIG1heSB3YW50IHRvIHNwZWNpYWwgY2FzZSBqc3hzIGludGVybmFsbHkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RhdGljIGNoaWxkcmVuLlxyXG4vLyBmb3Igbm93IHdlIGNhbiBzaGlwIGlkZW50aWNhbCBwcm9kIGZ1bmN0aW9uc1xyXG5cclxudmFyIGpzeHMgPSBqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyA7XHJcblxyXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcclxuZXhwb3J0cy5qc3ggPSBqc3g7XHJcbmV4cG9ydHMuanN4cyA9IGpzeHM7XHJcbiAgfSkoKTtcclxufVxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\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/jsx-dev-runtime.js": /*!******************************************************************!*\ !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***! \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\n\r\nif (false) {} else {\r\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsOExBQXNFO0FBQ3hFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzPzdmYmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xyXG59IGVsc2Uge1xyXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js": /*!**************************************************************!*\ !*** ./node_modules/next/dist/compiled/react/jsx-runtime.js ***! \**************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\n\r\nif (false) {} else {\r\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\");\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxzTEFBa0U7QUFDcEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qcz84YjdmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcclxuXHJcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xyXG59IGVsc2Uge1xyXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcclxufVxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/link.js": /*!***********************************!*\ !*** ./node_modules/next/link.js ***! \***********************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval(__webpack_require__.ts("module.exports = __webpack_require__(/*! ./dist/client/link */ \"(app-pages-browser)/./node_modules/next/dist/client/link.js\")\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2xpbmsuanMiLCJtYXBwaW5ncyI6IkFBQUEsNkhBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2xpbmsuanM/NmYyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdC9jbGllbnQvbGluaycpXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/link.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@floating-ui/core/dist/floating-ui.core.mjs": /*!******************************************************************!*\ !*** ./node_modules/@floating-ui/core/dist/floating-ui.core.mjs ***! \******************************************************************/ /***/ (function(__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 */ arrow: function() { return /* binding */ arrow; },\n/* harmony export */ autoPlacement: function() { return /* binding */ autoPlacement; },\n/* harmony export */ computePosition: function() { return /* binding */ computePosition; },\n/* harmony export */ detectOverflow: function() { return /* binding */ detectOverflow; },\n/* harmony export */ flip: function() { return /* binding */ flip; },\n/* harmony export */ hide: function() { return /* binding */ hide; },\n/* harmony export */ inline: function() { return /* binding */ inline; },\n/* harmony export */ limitShift: function() { return /* binding */ limitShift; },\n/* harmony export */ offset: function() { return /* binding */ offset; },\n/* harmony export */ rectToClientRect: function() { return /* reexport safe */ _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect; },\n/* harmony export */ shift: function() { return /* binding */ shift; },\n/* harmony export */ size: function() { return /* binding */ size; }\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/utils */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs\");\n\r\n\r\n\r\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\r\n let {\r\n reference,\r\n floating\r\n } = _ref;\r\n const sideAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement);\r\n const alignmentAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentAxis)(placement);\r\n const alignLength = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAxisLength)(alignmentAxis);\r\n const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement);\r\n const isVertical = sideAxis === 'y';\r\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\r\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\r\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\r\n let coords;\r\n switch (side) {\r\n case 'top':\r\n coords = {\r\n x: commonX,\r\n y: reference.y - floating.height\r\n };\r\n break;\r\n case 'bottom':\r\n coords = {\r\n x: commonX,\r\n y: reference.y + reference.height\r\n };\r\n break;\r\n case 'right':\r\n coords = {\r\n x: reference.x + reference.width,\r\n y: commonY\r\n };\r\n break;\r\n case 'left':\r\n coords = {\r\n x: reference.x - floating.width,\r\n y: commonY\r\n };\r\n break;\r\n default:\r\n coords = {\r\n x: reference.x,\r\n y: reference.y\r\n };\r\n }\r\n switch ((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement)) {\r\n case 'start':\r\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\r\n break;\r\n case 'end':\r\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\r\n break;\r\n }\r\n return coords;\r\n}\r\n\r\n/**\r\n * Computes the `x` and `y` coordinates that will place the floating element\r\n * next to a given reference element.\r\n *\r\n * This export does not have any `platform` interface logic. You will need to\r\n * write one for the platform you are using Floating UI with.\r\n */\r\nconst computePosition = async (reference, floating, config) => {\r\n const {\r\n placement = 'bottom',\r\n strategy = 'absolute',\r\n middleware = [],\r\n platform\r\n } = config;\r\n const validMiddleware = middleware.filter(Boolean);\r\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\r\n let rects = await platform.getElementRects({\r\n reference,\r\n floating,\r\n strategy\r\n });\r\n let {\r\n x,\r\n y\r\n } = computeCoordsFromPlacement(rects, placement, rtl);\r\n let statefulPlacement = placement;\r\n let middlewareData = {};\r\n let resetCount = 0;\r\n for (let i = 0; i < validMiddleware.length; i++) {\r\n const {\r\n name,\r\n fn\r\n } = validMiddleware[i];\r\n const {\r\n x: nextX,\r\n y: nextY,\r\n data,\r\n reset\r\n } = await fn({\r\n x,\r\n y,\r\n initialPlacement: placement,\r\n placement: statefulPlacement,\r\n strategy,\r\n middlewareData,\r\n rects,\r\n platform,\r\n elements: {\r\n reference,\r\n floating\r\n }\r\n });\r\n x = nextX != null ? nextX : x;\r\n y = nextY != null ? nextY : y;\r\n middlewareData = {\r\n ...middlewareData,\r\n [name]: {\r\n ...middlewareData[name],\r\n ...data\r\n }\r\n };\r\n if (reset && resetCount <= 50) {\r\n resetCount++;\r\n if (typeof reset === 'object') {\r\n if (reset.placement) {\r\n statefulPlacement = reset.placement;\r\n }\r\n if (reset.rects) {\r\n rects = reset.rects === true ? await platform.getElementRects({\r\n reference,\r\n floating,\r\n strategy\r\n }) : reset.rects;\r\n }\r\n ({\r\n x,\r\n y\r\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\r\n }\r\n i = -1;\r\n }\r\n }\r\n return {\r\n x,\r\n y,\r\n placement: statefulPlacement,\r\n strategy,\r\n middlewareData\r\n };\r\n};\r\n\r\n/**\r\n * Resolves with an object of overflow side offsets that determine how much the\r\n * element is overflowing a given clipping boundary on each side.\r\n * - positive = overflowing the boundary by that number of pixels\r\n * - negative = how many pixels left before it will overflow\r\n * - 0 = lies flush with the boundary\r\n * @see https://floating-ui.com/docs/detectOverflow\r\n */\r\nasync function detectOverflow(state, options) {\r\n var _await$platform$isEle;\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n const {\r\n x,\r\n y,\r\n platform,\r\n rects,\r\n elements,\r\n strategy\r\n } = state;\r\n const {\r\n boundary = 'clippingAncestors',\r\n rootBoundary = 'viewport',\r\n elementContext = 'floating',\r\n altBoundary = false,\r\n padding = 0\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n const paddingObject = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getPaddingObject)(padding);\r\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\r\n const element = elements[altBoundary ? altContext : elementContext];\r\n const clippingClientRect = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(await platform.getClippingRect({\r\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\r\n boundary,\r\n rootBoundary,\r\n strategy\r\n }));\r\n const rect = elementContext === 'floating' ? {\r\n x,\r\n y,\r\n width: rects.floating.width,\r\n height: rects.floating.height\r\n } : rects.reference;\r\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\r\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\r\n x: 1,\r\n y: 1\r\n } : {\r\n x: 1,\r\n y: 1\r\n };\r\n const elementClientRect = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\r\n elements,\r\n rect,\r\n offsetParent,\r\n strategy\r\n }) : rect);\r\n return {\r\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\r\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\r\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\r\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\r\n };\r\n}\r\n\r\n/**\r\n * Provides data to position an inner element of the floating element so that it\r\n * appears centered to the reference element.\r\n * @see https://floating-ui.com/docs/arrow\r\n */\r\nconst arrow = options => ({\r\n name: 'arrow',\r\n options,\r\n async fn(state) {\r\n const {\r\n x,\r\n y,\r\n placement,\r\n rects,\r\n platform,\r\n elements,\r\n middlewareData\r\n } = state;\r\n // Since `element` is required, we don't Partial<> the type.\r\n const {\r\n element,\r\n padding = 0\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state) || {};\r\n if (element == null) {\r\n return {};\r\n }\r\n const paddingObject = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getPaddingObject)(padding);\r\n const coords = {\r\n x,\r\n y\r\n };\r\n const axis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentAxis)(placement);\r\n const length = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAxisLength)(axis);\r\n const arrowDimensions = await platform.getDimensions(element);\r\n const isYAxis = axis === 'y';\r\n const minProp = isYAxis ? 'top' : 'left';\r\n const maxProp = isYAxis ? 'bottom' : 'right';\r\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\r\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\r\n const startDiff = coords[axis] - rects.reference[axis];\r\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\r\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\r\n\r\n // DOM platform can return `window` as the `offsetParent`.\r\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\r\n clientSize = elements.floating[clientProp] || rects.floating[length];\r\n }\r\n const centerToReference = endDiff / 2 - startDiff / 2;\r\n\r\n // If the padding is large enough that it causes the arrow to no longer be\r\n // centered, modify the padding so that it is centered.\r\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\r\n const minPadding = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(paddingObject[minProp], largestPossiblePadding);\r\n const maxPadding = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(paddingObject[maxProp], largestPossiblePadding);\r\n\r\n // Make sure the arrow doesn't overflow the floating element if the center\r\n // point is outside the floating element's bounds.\r\n const min$1 = minPadding;\r\n const max = clientSize - arrowDimensions[length] - maxPadding;\r\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\r\n const offset = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.clamp)(min$1, center, max);\r\n\r\n // If the reference is small enough that the arrow's padding causes it to\r\n // to point to nothing for an aligned placement, adjust the offset of the\r\n // floating element itself. To ensure `shift()` continues to take action,\r\n // a single reset is performed when this is true.\r\n const shouldAddOffset = !middlewareData.arrow && (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\r\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\r\n return {\r\n [axis]: coords[axis] + alignmentOffset,\r\n data: {\r\n [axis]: offset,\r\n centerOffset: center - offset - alignmentOffset,\r\n ...(shouldAddOffset && {\r\n alignmentOffset\r\n })\r\n },\r\n reset: shouldAddOffset\r\n };\r\n }\r\n});\r\n\r\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\r\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) === alignment), ...allowedPlacements.filter(placement => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) !== alignment)] : allowedPlacements.filter(placement => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement) === placement);\r\n return allowedPlacementsSortedByAlignment.filter(placement => {\r\n if (alignment) {\r\n return (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement) === alignment || (autoAlignment ? (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAlignmentPlacement)(placement) !== placement : false);\r\n }\r\n return true;\r\n });\r\n}\r\n/**\r\n * Optimizes the visibility of the floating element by choosing the placement\r\n * that has the most space available automatically, without needing to specify a\r\n * preferred placement. Alternative to `flip`.\r\n * @see https://floating-ui.com/docs/autoPlacement\r\n */\r\nconst autoPlacement = function (options) {\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n return {\r\n name: 'autoPlacement',\r\n options,\r\n async fn(state) {\r\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\r\n const {\r\n rects,\r\n middlewareData,\r\n placement,\r\n platform,\r\n elements\r\n } = state;\r\n const {\r\n crossAxis = false,\r\n alignment,\r\n allowedPlacements = _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.placements,\r\n autoAlignment = true,\r\n ...detectOverflowOptions\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n const placements$1 = alignment !== undefined || allowedPlacements === _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\r\n const overflow = await detectOverflow(state, detectOverflowOptions);\r\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\r\n const currentPlacement = placements$1[currentIndex];\r\n if (currentPlacement == null) {\r\n return {};\r\n }\r\n const alignmentSides = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentSides)(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\r\n\r\n // Make `computeCoords` start from the right place.\r\n if (placement !== currentPlacement) {\r\n return {\r\n reset: {\r\n placement: placements$1[0]\r\n }\r\n };\r\n }\r\n const currentOverflows = [overflow[(0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\r\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\r\n placement: currentPlacement,\r\n overflows: currentOverflows\r\n }];\r\n const nextPlacement = placements$1[currentIndex + 1];\r\n\r\n // There are more placements to check.\r\n if (nextPlacement) {\r\n return {\r\n data: {\r\n index: currentIndex + 1,\r\n overflows: allOverflows\r\n },\r\n reset: {\r\n placement: nextPlacement\r\n }\r\n };\r\n }\r\n const placementsSortedByMostSpace = allOverflows.map(d => {\r\n const alignment = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(d.placement);\r\n return [d.placement, alignment && crossAxis ?\r\n // Check along the mainAxis and main crossAxis side.\r\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\r\n // Check only the mainAxis.\r\n d.overflows[0], d.overflows];\r\n }).sort((a, b) => a[1] - b[1]);\r\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\r\n // Aligned placements should not check their opposite crossAxis\r\n // side.\r\n (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(d[0]) ? 2 : 3).every(v => v <= 0));\r\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\r\n if (resetPlacement !== placement) {\r\n return {\r\n data: {\r\n index: currentIndex + 1,\r\n overflows: allOverflows\r\n },\r\n reset: {\r\n placement: resetPlacement\r\n }\r\n };\r\n }\r\n return {};\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Optimizes the visibility of the floating element by flipping the `placement`\r\n * in order to keep it in view when the preferred placement(s) will overflow the\r\n * clipping boundary. Alternative to `autoPlacement`.\r\n * @see https://floating-ui.com/docs/flip\r\n */\r\nconst flip = function (options) {\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n return {\r\n name: 'flip',\r\n options,\r\n async fn(state) {\r\n var _middlewareData$arrow, _middlewareData$flip;\r\n const {\r\n placement,\r\n middlewareData,\r\n rects,\r\n initialPlacement,\r\n platform,\r\n elements\r\n } = state;\r\n const {\r\n mainAxis: checkMainAxis = true,\r\n crossAxis: checkCrossAxis = true,\r\n fallbackPlacements: specifiedFallbackPlacements,\r\n fallbackStrategy = 'bestFit',\r\n fallbackAxisSideDirection = 'none',\r\n flipAlignment = true,\r\n ...detectOverflowOptions\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n\r\n // If a reset by the arrow was caused due to an alignment offset being\r\n // added, we should skip any logic now since `flip()` has already done its\r\n // work.\r\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\r\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\r\n return {};\r\n }\r\n const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement);\r\n const initialSideAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(initialPlacement);\r\n const isBasePlacement = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(initialPlacement) === initialPlacement;\r\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\r\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [(0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositePlacement)(initialPlacement)] : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getExpandedPlacements)(initialPlacement));\r\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\r\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\r\n fallbackPlacements.push(...(0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAxisPlacements)(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\r\n }\r\n const placements = [initialPlacement, ...fallbackPlacements];\r\n const overflow = await detectOverflow(state, detectOverflowOptions);\r\n const overflows = [];\r\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\r\n if (checkMainAxis) {\r\n overflows.push(overflow[side]);\r\n }\r\n if (checkCrossAxis) {\r\n const sides = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignmentSides)(placement, rects, rtl);\r\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\r\n }\r\n overflowsData = [...overflowsData, {\r\n placement,\r\n overflows\r\n }];\r\n\r\n // One or more sides is overflowing.\r\n if (!overflows.every(side => side <= 0)) {\r\n var _middlewareData$flip2, _overflowsData$filter;\r\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\r\n const nextPlacement = placements[nextIndex];\r\n if (nextPlacement) {\r\n // Try next placement and re-run the lifecycle.\r\n return {\r\n data: {\r\n index: nextIndex,\r\n overflows: overflowsData\r\n },\r\n reset: {\r\n placement: nextPlacement\r\n }\r\n };\r\n }\r\n\r\n // First, find the candidates that fit on the mainAxis side of overflow,\r\n // then find the placement that fits the best on the main crossAxis side.\r\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\r\n\r\n // Otherwise fallback.\r\n if (!resetPlacement) {\r\n switch (fallbackStrategy) {\r\n case 'bestFit':\r\n {\r\n var _overflowsData$filter2;\r\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\r\n if (hasFallbackAxisSideDirection) {\r\n const currentSideAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(d.placement);\r\n return currentSideAxis === initialSideAxis ||\r\n // Create a bias to the `y` side axis due to horizontal\r\n // reading directions favoring greater width.\r\n currentSideAxis === 'y';\r\n }\r\n return true;\r\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\r\n if (placement) {\r\n resetPlacement = placement;\r\n }\r\n break;\r\n }\r\n case 'initialPlacement':\r\n resetPlacement = initialPlacement;\r\n break;\r\n }\r\n }\r\n if (placement !== resetPlacement) {\r\n return {\r\n reset: {\r\n placement: resetPlacement\r\n }\r\n };\r\n }\r\n }\r\n return {};\r\n }\r\n };\r\n};\r\n\r\nfunction getSideOffsets(overflow, rect) {\r\n return {\r\n top: overflow.top - rect.height,\r\n right: overflow.right - rect.width,\r\n bottom: overflow.bottom - rect.height,\r\n left: overflow.left - rect.width\r\n };\r\n}\r\nfunction isAnySideFullyClipped(overflow) {\r\n return _floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.sides.some(side => overflow[side] >= 0);\r\n}\r\n/**\r\n * Provides data to hide the floating element in applicable situations, such as\r\n * when it is not in the same clipping context as the reference element.\r\n * @see https://floating-ui.com/docs/hide\r\n */\r\nconst hide = function (options) {\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n return {\r\n name: 'hide',\r\n options,\r\n async fn(state) {\r\n const {\r\n rects\r\n } = state;\r\n const {\r\n strategy = 'referenceHidden',\r\n ...detectOverflowOptions\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n switch (strategy) {\r\n case 'referenceHidden':\r\n {\r\n const overflow = await detectOverflow(state, {\r\n ...detectOverflowOptions,\r\n elementContext: 'reference'\r\n });\r\n const offsets = getSideOffsets(overflow, rects.reference);\r\n return {\r\n data: {\r\n referenceHiddenOffsets: offsets,\r\n referenceHidden: isAnySideFullyClipped(offsets)\r\n }\r\n };\r\n }\r\n case 'escaped':\r\n {\r\n const overflow = await detectOverflow(state, {\r\n ...detectOverflowOptions,\r\n altBoundary: true\r\n });\r\n const offsets = getSideOffsets(overflow, rects.floating);\r\n return {\r\n data: {\r\n escapedOffsets: offsets,\r\n escaped: isAnySideFullyClipped(offsets)\r\n }\r\n };\r\n }\r\n default:\r\n {\r\n return {};\r\n }\r\n }\r\n }\r\n };\r\n};\r\n\r\nfunction getBoundingRect(rects) {\r\n const minX = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(...rects.map(rect => rect.left));\r\n const minY = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(...rects.map(rect => rect.top));\r\n const maxX = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(...rects.map(rect => rect.right));\r\n const maxY = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(...rects.map(rect => rect.bottom));\r\n return {\r\n x: minX,\r\n y: minY,\r\n width: maxX - minX,\r\n height: maxY - minY\r\n };\r\n}\r\nfunction getRectsByLine(rects) {\r\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\r\n const groups = [];\r\n let prevRect = null;\r\n for (let i = 0; i < sortedRects.length; i++) {\r\n const rect = sortedRects[i];\r\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\r\n groups.push([rect]);\r\n } else {\r\n groups[groups.length - 1].push(rect);\r\n }\r\n prevRect = rect;\r\n }\r\n return groups.map(rect => (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(getBoundingRect(rect)));\r\n}\r\n/**\r\n * Provides improved positioning for inline reference elements that can span\r\n * over multiple lines, such as hyperlinks or range selections.\r\n * @see https://floating-ui.com/docs/inline\r\n */\r\nconst inline = function (options) {\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n return {\r\n name: 'inline',\r\n options,\r\n async fn(state) {\r\n const {\r\n placement,\r\n elements,\r\n rects,\r\n platform,\r\n strategy\r\n } = state;\r\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\r\n // ClientRect's bounds, despite the event listener being triggered. A\r\n // padding of 2 seems to handle this issue.\r\n const {\r\n padding = 2,\r\n x,\r\n y\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\r\n const clientRects = getRectsByLine(nativeClientRects);\r\n const fallback = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.rectToClientRect)(getBoundingRect(nativeClientRects));\r\n const paddingObject = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getPaddingObject)(padding);\r\n function getBoundingClientRect() {\r\n // There are two rects and they are disjoined.\r\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\r\n // Find the first rect in which the point is fully inside.\r\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\r\n }\r\n\r\n // There are 2 or more connected rects.\r\n if (clientRects.length >= 2) {\r\n if ((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement) === 'y') {\r\n const firstRect = clientRects[0];\r\n const lastRect = clientRects[clientRects.length - 1];\r\n const isTop = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement) === 'top';\r\n const top = firstRect.top;\r\n const bottom = lastRect.bottom;\r\n const left = isTop ? firstRect.left : lastRect.left;\r\n const right = isTop ? firstRect.right : lastRect.right;\r\n const width = right - left;\r\n const height = bottom - top;\r\n return {\r\n top,\r\n bottom,\r\n left,\r\n right,\r\n width,\r\n height,\r\n x: left,\r\n y: top\r\n };\r\n }\r\n const isLeftSide = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement) === 'left';\r\n const maxRight = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(...clientRects.map(rect => rect.right));\r\n const minLeft = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(...clientRects.map(rect => rect.left));\r\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\r\n const top = measureRects[0].top;\r\n const bottom = measureRects[measureRects.length - 1].bottom;\r\n const left = minLeft;\r\n const right = maxRight;\r\n const width = right - left;\r\n const height = bottom - top;\r\n return {\r\n top,\r\n bottom,\r\n left,\r\n right,\r\n width,\r\n height,\r\n x: left,\r\n y: top\r\n };\r\n }\r\n return fallback;\r\n }\r\n const resetRects = await platform.getElementRects({\r\n reference: {\r\n getBoundingClientRect\r\n },\r\n floating: elements.floating,\r\n strategy\r\n });\r\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\r\n return {\r\n reset: {\r\n rects: resetRects\r\n }\r\n };\r\n }\r\n return {};\r\n }\r\n };\r\n};\r\n\r\n// For type backwards-compatibility, the `OffsetOptions` type was also\r\n// Derivable.\r\n\r\nasync function convertValueToCoords(state, options) {\r\n const {\r\n placement,\r\n platform,\r\n elements\r\n } = state;\r\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\r\n const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement);\r\n const alignment = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement);\r\n const isVertical = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement) === 'y';\r\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\r\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\r\n const rawValue = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n\r\n // eslint-disable-next-line prefer-const\r\n let {\r\n mainAxis,\r\n crossAxis,\r\n alignmentAxis\r\n } = typeof rawValue === 'number' ? {\r\n mainAxis: rawValue,\r\n crossAxis: 0,\r\n alignmentAxis: null\r\n } : {\r\n mainAxis: rawValue.mainAxis || 0,\r\n crossAxis: rawValue.crossAxis || 0,\r\n alignmentAxis: rawValue.alignmentAxis\r\n };\r\n if (alignment && typeof alignmentAxis === 'number') {\r\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\r\n }\r\n return isVertical ? {\r\n x: crossAxis * crossAxisMulti,\r\n y: mainAxis * mainAxisMulti\r\n } : {\r\n x: mainAxis * mainAxisMulti,\r\n y: crossAxis * crossAxisMulti\r\n };\r\n}\r\n\r\n/**\r\n * Modifies the placement by translating the floating element along the\r\n * specified axes.\r\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\r\n * object may be passed.\r\n * @see https://floating-ui.com/docs/offset\r\n */\r\nconst offset = function (options) {\r\n if (options === void 0) {\r\n options = 0;\r\n }\r\n return {\r\n name: 'offset',\r\n options,\r\n async fn(state) {\r\n var _middlewareData$offse, _middlewareData$arrow;\r\n const {\r\n x,\r\n y,\r\n placement,\r\n middlewareData\r\n } = state;\r\n const diffCoords = await convertValueToCoords(state, options);\r\n\r\n // If the placement is the same and the arrow caused an alignment offset\r\n // then we don't need to change the positioning coordinates.\r\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\r\n return {};\r\n }\r\n return {\r\n x: x + diffCoords.x,\r\n y: y + diffCoords.y,\r\n data: {\r\n ...diffCoords,\r\n placement\r\n }\r\n };\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Optimizes the visibility of the floating element by shifting it in order to\r\n * keep it in view when it will overflow the clipping boundary.\r\n * @see https://floating-ui.com/docs/shift\r\n */\r\nconst shift = function (options) {\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n return {\r\n name: 'shift',\r\n options,\r\n async fn(state) {\r\n const {\r\n x,\r\n y,\r\n placement\r\n } = state;\r\n const {\r\n mainAxis: checkMainAxis = true,\r\n crossAxis: checkCrossAxis = false,\r\n limiter = {\r\n fn: _ref => {\r\n let {\r\n x,\r\n y\r\n } = _ref;\r\n return {\r\n x,\r\n y\r\n };\r\n }\r\n },\r\n ...detectOverflowOptions\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n const coords = {\r\n x,\r\n y\r\n };\r\n const overflow = await detectOverflow(state, detectOverflowOptions);\r\n const crossAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement));\r\n const mainAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAxis)(crossAxis);\r\n let mainAxisCoord = coords[mainAxis];\r\n let crossAxisCoord = coords[crossAxis];\r\n if (checkMainAxis) {\r\n const minSide = mainAxis === 'y' ? 'top' : 'left';\r\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\r\n const min = mainAxisCoord + overflow[minSide];\r\n const max = mainAxisCoord - overflow[maxSide];\r\n mainAxisCoord = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.clamp)(min, mainAxisCoord, max);\r\n }\r\n if (checkCrossAxis) {\r\n const minSide = crossAxis === 'y' ? 'top' : 'left';\r\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\r\n const min = crossAxisCoord + overflow[minSide];\r\n const max = crossAxisCoord - overflow[maxSide];\r\n crossAxisCoord = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.clamp)(min, crossAxisCoord, max);\r\n }\r\n const limitedCoords = limiter.fn({\r\n ...state,\r\n [mainAxis]: mainAxisCoord,\r\n [crossAxis]: crossAxisCoord\r\n });\r\n return {\r\n ...limitedCoords,\r\n data: {\r\n x: limitedCoords.x - x,\r\n y: limitedCoords.y - y,\r\n enabled: {\r\n [mainAxis]: checkMainAxis,\r\n [crossAxis]: checkCrossAxis\r\n }\r\n }\r\n };\r\n }\r\n };\r\n};\r\n/**\r\n * Built-in `limiter` that will stop `shift()` at a certain point.\r\n */\r\nconst limitShift = function (options) {\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n return {\r\n options,\r\n fn(state) {\r\n const {\r\n x,\r\n y,\r\n placement,\r\n rects,\r\n middlewareData\r\n } = state;\r\n const {\r\n offset = 0,\r\n mainAxis: checkMainAxis = true,\r\n crossAxis: checkCrossAxis = true\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n const coords = {\r\n x,\r\n y\r\n };\r\n const crossAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement);\r\n const mainAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getOppositeAxis)(crossAxis);\r\n let mainAxisCoord = coords[mainAxis];\r\n let crossAxisCoord = coords[crossAxis];\r\n const rawOffset = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(offset, state);\r\n const computedOffset = typeof rawOffset === 'number' ? {\r\n mainAxis: rawOffset,\r\n crossAxis: 0\r\n } : {\r\n mainAxis: 0,\r\n crossAxis: 0,\r\n ...rawOffset\r\n };\r\n if (checkMainAxis) {\r\n const len = mainAxis === 'y' ? 'height' : 'width';\r\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\r\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\r\n if (mainAxisCoord < limitMin) {\r\n mainAxisCoord = limitMin;\r\n } else if (mainAxisCoord > limitMax) {\r\n mainAxisCoord = limitMax;\r\n }\r\n }\r\n if (checkCrossAxis) {\r\n var _middlewareData$offse, _middlewareData$offse2;\r\n const len = mainAxis === 'y' ? 'width' : 'height';\r\n const isOriginSide = ['top', 'left'].includes((0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement));\r\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\r\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\r\n if (crossAxisCoord < limitMin) {\r\n crossAxisCoord = limitMin;\r\n } else if (crossAxisCoord > limitMax) {\r\n crossAxisCoord = limitMax;\r\n }\r\n }\r\n return {\r\n [mainAxis]: mainAxisCoord,\r\n [crossAxis]: crossAxisCoord\r\n };\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Provides data that allows you to change the size of the floating element —\r\n * for instance, prevent it from overflowing the clipping boundary or match the\r\n * width of the reference element.\r\n * @see https://floating-ui.com/docs/size\r\n */\r\nconst size = function (options) {\r\n if (options === void 0) {\r\n options = {};\r\n }\r\n return {\r\n name: 'size',\r\n options,\r\n async fn(state) {\r\n var _state$middlewareData, _state$middlewareData2;\r\n const {\r\n placement,\r\n rects,\r\n platform,\r\n elements\r\n } = state;\r\n const {\r\n apply = () => {},\r\n ...detectOverflowOptions\r\n } = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.evaluate)(options, state);\r\n const overflow = await detectOverflow(state, detectOverflowOptions);\r\n const side = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSide)(placement);\r\n const alignment = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getAlignment)(placement);\r\n const isYAxis = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.getSideAxis)(placement) === 'y';\r\n const {\r\n width,\r\n height\r\n } = rects.floating;\r\n let heightSide;\r\n let widthSide;\r\n if (side === 'top' || side === 'bottom') {\r\n heightSide = side;\r\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\r\n } else {\r\n widthSide = side;\r\n heightSide = alignment === 'end' ? 'top' : 'bottom';\r\n }\r\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\r\n const maximumClippingWidth = width - overflow.left - overflow.right;\r\n const overflowAvailableHeight = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(height - overflow[heightSide], maximumClippingHeight);\r\n const overflowAvailableWidth = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.min)(width - overflow[widthSide], maximumClippingWidth);\r\n const noShift = !state.middlewareData.shift;\r\n let availableHeight = overflowAvailableHeight;\r\n let availableWidth = overflowAvailableWidth;\r\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\r\n availableWidth = maximumClippingWidth;\r\n }\r\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\r\n availableHeight = maximumClippingHeight;\r\n }\r\n if (noShift && !alignment) {\r\n const xMin = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.left, 0);\r\n const xMax = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.right, 0);\r\n const yMin = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.top, 0);\r\n const yMax = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.bottom, 0);\r\n if (isYAxis) {\r\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.left, overflow.right));\r\n } else {\r\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_0__.max)(overflow.top, overflow.bottom));\r\n }\r\n }\r\n await apply({\r\n ...state,\r\n availableWidth,\r\n availableHeight\r\n });\r\n const nextDimensions = await platform.getDimensions(elements.floating);\r\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\r\n return {\r\n reset: {\r\n rects: true\r\n }\r\n };\r\n }\r\n return {};\r\n }\r\n };\r\n};\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBc1U7QUFDaFI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixtQkFBbUIsK0RBQVc7QUFDOUIsd0JBQXdCLG9FQUFnQjtBQUN4QyxzQkFBc0IsaUVBQWE7QUFDbkMsZUFBZSwyREFBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGdFQUFZO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNEJBQTRCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEVBQUUsNERBQVE7QUFDZCx3QkFBd0Isb0VBQWdCO0FBQ3hDO0FBQ0E7QUFDQSw2QkFBNkIsb0VBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG9FQUFnQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sRUFBRSw0REFBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsb0VBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9FQUFnQjtBQUNqQyxtQkFBbUIsaUVBQWE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdURBQUc7QUFDMUIsdUJBQXVCLHVEQUFHO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix5REFBSztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELGdFQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsbUdBQW1HLGdFQUFZLHFFQUFxRSxnRUFBWSxvRUFBb0UsMkRBQU87QUFDM1E7QUFDQTtBQUNBLGFBQWEsZ0VBQVksOENBQThDLGlGQUE2QjtBQUNwRztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwwREFBVTtBQUN0QztBQUNBO0FBQ0EsUUFBUSxFQUFFLDREQUFRO0FBQ2xCLDRFQUE0RSwwREFBVTtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIscUVBQWlCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QywyREFBTztBQUNoRDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0VBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxNQUFNLGdFQUFZO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEVBQUUsNERBQVE7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyREFBTztBQUMxQiw4QkFBOEIsK0RBQVc7QUFDekMsOEJBQThCLDJEQUFPO0FBQ3JDO0FBQ0Esc0dBQXNHLHdFQUFvQixzQkFBc0IseUVBQXFCO0FBQ3JLO0FBQ0E7QUFDQSxtQ0FBbUMsNkVBQXlCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixxRUFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLCtEQUFXO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxxREFBSztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVEsRUFBRSw0REFBUTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1REFBRztBQUNsQixlQUFlLHVEQUFHO0FBQ2xCLGVBQWUsdURBQUc7QUFDbEIsZUFBZSx1REFBRztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsb0VBQWdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsK0JBQStCLEtBQUs7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxFQUFFLDREQUFRO0FBQ2xCO0FBQ0E7QUFDQSx1QkFBdUIsb0VBQWdCO0FBQ3ZDLDRCQUE0QixvRUFBZ0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYywrREFBVztBQUN6QjtBQUNBO0FBQ0EsMEJBQTBCLDJEQUFPO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsMkRBQU87QUFDcEMsMkJBQTJCLHVEQUFHO0FBQzlCLDBCQUEwQix1REFBRztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLGVBQWUsMkRBQU87QUFDdEIsb0JBQW9CLGdFQUFZO0FBQ2hDLHFCQUFxQiwrREFBVztBQUNoQztBQUNBO0FBQ0EsbUJBQW1CLDREQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxFQUFFLDREQUFRO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsK0RBQVcsQ0FBQywyREFBTztBQUMzQyx1QkFBdUIsbUVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseURBQUs7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHlEQUFLO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxFQUFFLDREQUFRO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLCtEQUFXO0FBQ25DLHVCQUF1QixtRUFBZTtBQUN0QztBQUNBO0FBQ0Esd0JBQXdCLDREQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsMkRBQU87QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQSxRQUFRLEVBQUUsNERBQVE7QUFDbEI7QUFDQSxtQkFBbUIsMkRBQU87QUFDMUIsd0JBQXdCLGdFQUFZO0FBQ3BDLHNCQUFzQiwrREFBVztBQUNqQztBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHVEQUFHO0FBQ3pDLHFDQUFxQyx1REFBRztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1REFBRztBQUN4QixxQkFBcUIsdURBQUc7QUFDeEIscUJBQXFCLHVEQUFHO0FBQ3hCLHFCQUFxQix1REFBRztBQUN4QjtBQUNBLGlGQUFpRix1REFBRztBQUNwRixVQUFVO0FBQ1YsbUZBQW1GLHVEQUFHO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcz84YjMyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XHJcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xyXG5cclxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcclxuICBsZXQge1xyXG4gICAgcmVmZXJlbmNlLFxyXG4gICAgZmxvYXRpbmdcclxuICB9ID0gX3JlZjtcclxuICBjb25zdCBzaWRlQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XHJcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcclxuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XHJcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcclxuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcclxuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xyXG4gIGNvbnN0IGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZmxvYXRpbmcuaGVpZ2h0IC8gMjtcclxuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcclxuICBsZXQgY29vcmRzO1xyXG4gIHN3aXRjaCAoc2lkZSkge1xyXG4gICAgY2FzZSAndG9wJzpcclxuICAgICAgY29vcmRzID0ge1xyXG4gICAgICAgIHg6IGNvbW1vblgsXHJcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcclxuICAgICAgfTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICBjb29yZHMgPSB7XHJcbiAgICAgICAgeDogY29tbW9uWCxcclxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcclxuICAgICAgfTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgIGNvb3JkcyA9IHtcclxuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcclxuICAgICAgICB5OiBjb21tb25ZXHJcbiAgICAgIH07XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgIGNvb3JkcyA9IHtcclxuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGZsb2F0aW5nLndpZHRoLFxyXG4gICAgICAgIHk6IGNvbW1vbllcclxuICAgICAgfTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICBjb29yZHMgPSB7XHJcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXHJcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcclxuICAgICAgfTtcclxuICB9XHJcbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xyXG4gICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gLT0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ2VuZCc6XHJcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSArPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XHJcbiAgICAgIGJyZWFrO1xyXG4gIH1cclxuICByZXR1cm4gY29vcmRzO1xyXG59XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxyXG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXHJcbiAqXHJcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXHJcbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cclxuICovXHJcbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcclxuICBjb25zdCB7XHJcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcclxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcclxuICAgIG1pZGRsZXdhcmUgPSBbXSxcclxuICAgIHBsYXRmb3JtXHJcbiAgfSA9IGNvbmZpZztcclxuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcclxuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGZsb2F0aW5nKSk7XHJcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcclxuICAgIHJlZmVyZW5jZSxcclxuICAgIGZsb2F0aW5nLFxyXG4gICAgc3RyYXRlZ3lcclxuICB9KTtcclxuICBsZXQge1xyXG4gICAgeCxcclxuICAgIHlcclxuICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHBsYWNlbWVudCwgcnRsKTtcclxuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XHJcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XHJcbiAgbGV0IHJlc2V0Q291bnQgPSAwO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGZuXHJcbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICB4OiBuZXh0WCxcclxuICAgICAgeTogbmV4dFksXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIHJlc2V0XHJcbiAgICB9ID0gYXdhaXQgZm4oe1xyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXHJcbiAgICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXHJcbiAgICAgIHN0cmF0ZWd5LFxyXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcclxuICAgICAgcmVjdHMsXHJcbiAgICAgIHBsYXRmb3JtLFxyXG4gICAgICBlbGVtZW50czoge1xyXG4gICAgICAgIHJlZmVyZW5jZSxcclxuICAgICAgICBmbG9hdGluZ1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xyXG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XHJcbiAgICBtaWRkbGV3YXJlRGF0YSA9IHtcclxuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXHJcbiAgICAgIFtuYW1lXToge1xyXG4gICAgICAgIC4uLm1pZGRsZXdhcmVEYXRhW25hbWVdLFxyXG4gICAgICAgIC4uLmRhdGFcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XHJcbiAgICAgIHJlc2V0Q291bnQrKztcclxuICAgICAgaWYgKHR5cGVvZiByZXNldCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XHJcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XHJcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcclxuICAgICAgICAgICAgcmVmZXJlbmNlLFxyXG4gICAgICAgICAgICBmbG9hdGluZyxcclxuICAgICAgICAgICAgc3RyYXRlZ3lcclxuICAgICAgICAgIH0pIDogcmVzZXQucmVjdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICh7XHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeVxyXG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGkgPSAtMTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHgsXHJcbiAgICB5LFxyXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcclxuICAgIHN0cmF0ZWd5LFxyXG4gICAgbWlkZGxld2FyZURhdGFcclxuICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcclxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cclxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcclxuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XHJcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcclxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xyXG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuICBjb25zdCB7XHJcbiAgICB4LFxyXG4gICAgeSxcclxuICAgIHBsYXRmb3JtLFxyXG4gICAgcmVjdHMsXHJcbiAgICBlbGVtZW50cyxcclxuICAgIHN0cmF0ZWd5XHJcbiAgfSA9IHN0YXRlO1xyXG4gIGNvbnN0IHtcclxuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcclxuICAgIHJvb3RCb3VuZGFyeSA9ICd2aWV3cG9ydCcsXHJcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXHJcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxyXG4gICAgcGFkZGluZyA9IDBcclxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xyXG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xyXG4gIGNvbnN0IGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/ICdyZWZlcmVuY2UnIDogJ2Zsb2F0aW5nJztcclxuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xyXG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcclxuICAgIGVsZW1lbnQ6ICgoX2F3YWl0JHBsYXRmb3JtJGlzRWxlID0gYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGVsZW1lbnQpKSkgIT0gbnVsbCA/IF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA6IHRydWUpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgKGF3YWl0IChwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudChlbGVtZW50cy5mbG9hdGluZykpKSxcclxuICAgIGJvdW5kYXJ5LFxyXG4gICAgcm9vdEJvdW5kYXJ5LFxyXG4gICAgc3RyYXRlZ3lcclxuICB9KSk7XHJcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xyXG4gICAgeCxcclxuICAgIHksXHJcbiAgICB3aWR0aDogcmVjdHMuZmxvYXRpbmcud2lkdGgsXHJcbiAgICBoZWlnaHQ6IHJlY3RzLmZsb2F0aW5nLmhlaWdodFxyXG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XHJcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XHJcbiAgY29uc3Qgb2Zmc2V0U2NhbGUgPSAoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KG9mZnNldFBhcmVudCkpKSA/IChhd2FpdCAocGxhdGZvcm0uZ2V0U2NhbGUgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldFNjYWxlKG9mZnNldFBhcmVudCkpKSB8fCB7XHJcbiAgICB4OiAxLFxyXG4gICAgeTogMVxyXG4gIH0gOiB7XHJcbiAgICB4OiAxLFxyXG4gICAgeTogMVxyXG4gIH07XHJcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xyXG4gICAgZWxlbWVudHMsXHJcbiAgICByZWN0LFxyXG4gICAgb2Zmc2V0UGFyZW50LFxyXG4gICAgc3RyYXRlZ3lcclxuICB9KSA6IHJlY3QpO1xyXG4gIHJldHVybiB7XHJcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcclxuICAgIGJvdHRvbTogKGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgLyBvZmZzZXRTY2FsZS55LFxyXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxyXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxyXG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cclxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XHJcbiAqL1xyXG5jb25zdCBhcnJvdyA9IG9wdGlvbnMgPT4gKHtcclxuICBuYW1lOiAnYXJyb3cnLFxyXG4gIG9wdGlvbnMsXHJcbiAgYXN5bmMgZm4oc3RhdGUpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgeCxcclxuICAgICAgeSxcclxuICAgICAgcGxhY2VtZW50LFxyXG4gICAgICByZWN0cyxcclxuICAgICAgcGxhdGZvcm0sXHJcbiAgICAgIGVsZW1lbnRzLFxyXG4gICAgICBtaWRkbGV3YXJlRGF0YVxyXG4gICAgfSA9IHN0YXRlO1xyXG4gICAgLy8gU2luY2UgYGVsZW1lbnRgIGlzIHJlcXVpcmVkLCB3ZSBkb24ndCBQYXJ0aWFsPD4gdGhlIHR5cGUuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGVsZW1lbnQsXHJcbiAgICAgIHBhZGRpbmcgPSAwXHJcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xyXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcclxuICAgIGNvbnN0IGNvb3JkcyA9IHtcclxuICAgICAgeCxcclxuICAgICAgeVxyXG4gICAgfTtcclxuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XHJcbiAgICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGF4aXMpO1xyXG4gICAgY29uc3QgYXJyb3dEaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50KTtcclxuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XHJcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xyXG4gICAgY29uc3QgbWF4UHJvcCA9IGlzWUF4aXMgPyAnYm90dG9tJyA6ICdyaWdodCc7XHJcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcclxuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XHJcbiAgICBjb25zdCBzdGFydERpZmYgPSBjb29yZHNbYXhpc10gLSByZWN0cy5yZWZlcmVuY2VbYXhpc107XHJcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XHJcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xyXG5cclxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cclxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xyXG4gICAgICBjbGllbnRTaXplID0gZWxlbWVudHMuZmxvYXRpbmdbY2xpZW50UHJvcF0gfHwgcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xyXG5cclxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXHJcbiAgICAvLyBjZW50ZXJlZCwgbW9kaWZ5IHRoZSBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQuXHJcbiAgICBjb25zdCBsYXJnZXN0UG9zc2libGVQYWRkaW5nID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgLSAxO1xyXG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcclxuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttYXhQcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcclxuICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQncyBib3VuZHMuXHJcbiAgICBjb25zdCBtaW4kMSA9IG1pblBhZGRpbmc7XHJcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xyXG4gICAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcclxuICAgIGNvbnN0IG9mZnNldCA9IGNsYW1wKG1pbiQxLCBjZW50ZXIsIG1heCk7XHJcblxyXG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgYXJyb3cncyBwYWRkaW5nIGNhdXNlcyBpdCB0b1xyXG4gICAgLy8gdG8gcG9pbnQgdG8gbm90aGluZyBmb3IgYW4gYWxpZ25lZCBwbGFjZW1lbnQsIGFkanVzdCB0aGUgb2Zmc2V0IG9mIHRoZVxyXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxyXG4gICAgLy8gYSBzaW5nbGUgcmVzZXQgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBpcyB0cnVlLlxyXG4gICAgY29uc3Qgc2hvdWxkQWRkT2Zmc2V0ID0gIW1pZGRsZXdhcmVEYXRhLmFycm93ICYmIGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9IG51bGwgJiYgY2VudGVyICE9PSBvZmZzZXQgJiYgcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gLyAyIC0gKGNlbnRlciA8IG1pbiQxID8gbWluUGFkZGluZyA6IG1heFBhZGRpbmcpIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIDwgMDtcclxuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgW2F4aXNdOiBjb29yZHNbYXhpc10gKyBhbGlnbm1lbnRPZmZzZXQsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBbYXhpc106IG9mZnNldCxcclxuICAgICAgICBjZW50ZXJPZmZzZXQ6IGNlbnRlciAtIG9mZnNldCAtIGFsaWdubWVudE9mZnNldCxcclxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcclxuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcclxuICAgIH07XHJcbiAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xyXG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcclxuICByZXR1cm4gYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudC5maWx0ZXIocGxhY2VtZW50ID0+IHtcclxuICAgIGlmIChhbGlnbm1lbnQpIHtcclxuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9KTtcclxufVxyXG4vKipcclxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcclxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcclxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxyXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxyXG4gKi9cclxuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogJ2F1dG9QbGFjZW1lbnQnLFxyXG4gICAgb3B0aW9ucyxcclxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XHJcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXV0b1AsIF9taWRkbGV3YXJlRGF0YSRhdXRvUDIsIF9wbGFjZW1lbnRzVGhhdEZpdE9uRTtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHJlY3RzLFxyXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxyXG4gICAgICAgIHBsYWNlbWVudCxcclxuICAgICAgICBwbGF0Zm9ybSxcclxuICAgICAgICBlbGVtZW50c1xyXG4gICAgICB9ID0gc3RhdGU7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBjcm9zc0F4aXMgPSBmYWxzZSxcclxuICAgICAgICBhbGlnbm1lbnQsXHJcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxyXG4gICAgICAgIGF1dG9BbGlnbm1lbnQgPSB0cnVlLFxyXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xyXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xyXG4gICAgICBjb25zdCBwbGFjZW1lbnRzJDEgPSBhbGlnbm1lbnQgIT09IHVuZGVmaW5lZCB8fCBhbGxvd2VkUGxhY2VtZW50cyA9PT0gcGxhY2VtZW50cyA/IGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50IHx8IG51bGwsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSA6IGFsbG93ZWRQbGFjZW1lbnRzO1xyXG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xyXG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4XTtcclxuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xyXG5cclxuICAgICAgLy8gTWFrZSBgY29tcHV0ZUNvb3Jkc2Agc3RhcnQgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXHJcbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcmVzZXQ6IHtcclxuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcclxuICAgICAgY29uc3QgYWxsT3ZlcmZsb3dzID0gWy4uLigoKF9taWRkbGV3YXJlRGF0YSRhdXRvUDIgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QMi5vdmVyZmxvd3MpIHx8IFtdKSwge1xyXG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcclxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcclxuICAgICAgfV07XHJcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XHJcblxyXG4gICAgICAvLyBUaGVyZSBhcmUgbW9yZSBwbGFjZW1lbnRzIHRvIGNoZWNrLlxyXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxyXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJlc2V0OiB7XHJcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlID0gYWxsT3ZlcmZsb3dzLm1hcChkID0+IHtcclxuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xyXG4gICAgICAgIC8vIENoZWNrIGFsb25nIHRoZSBtYWluQXhpcyBhbmQgbWFpbiBjcm9zc0F4aXMgc2lkZS5cclxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxyXG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxyXG4gICAgICAgIGQub3ZlcmZsb3dzWzBdLCBkLm92ZXJmbG93c107XHJcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcclxuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcclxuICAgICAgLy8gQWxpZ25lZCBwbGFjZW1lbnRzIHNob3VsZCBub3QgY2hlY2sgdGhlaXIgb3Bwb3NpdGUgY3Jvc3NBeGlzXHJcbiAgICAgIC8vIHNpZGUuXHJcbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xyXG4gICAgICBjb25zdCByZXNldFBsYWNlbWVudCA9ICgoX3BsYWNlbWVudHNUaGF0Rml0T25FID0gcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX3BsYWNlbWVudHNUaGF0Rml0T25FWzBdKSB8fCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2VbMF1bMF07XHJcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXHJcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVzZXQ6IHtcclxuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxyXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxyXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxyXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxyXG4gKi9cclxuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogJ2ZsaXAnLFxyXG4gICAgb3B0aW9ucyxcclxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XHJcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgcGxhY2VtZW50LFxyXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxyXG4gICAgICAgIHJlY3RzLFxyXG4gICAgICAgIGluaXRpYWxQbGFjZW1lbnQsXHJcbiAgICAgICAgcGxhdGZvcm0sXHJcbiAgICAgICAgZWxlbWVudHNcclxuICAgICAgfSA9IHN0YXRlO1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxyXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlLFxyXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxyXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXHJcbiAgICAgICAgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9ICdub25lJyxcclxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcclxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcclxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcclxuXHJcbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcclxuICAgICAgLy8gYWRkZWQsIHdlIHNob3VsZCBza2lwIGFueSBsb2dpYyBub3cgc2luY2UgYGZsaXAoKWAgaGFzIGFscmVhZHkgZG9uZSBpdHNcclxuICAgICAgLy8gd29yay5cclxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXHJcbiAgICAgIGlmICgoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xyXG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcclxuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcclxuICAgICAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xyXG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xyXG4gICAgICBjb25zdCBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnO1xyXG4gICAgICBpZiAoIXNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyAmJiBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwbGFjZW1lbnRzID0gW2luaXRpYWxQbGFjZW1lbnQsIC4uLmZhbGxiYWNrUGxhY2VtZW50c107XHJcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XHJcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xyXG4gICAgICBsZXQgb3ZlcmZsb3dzRGF0YSA9ICgoX21pZGRsZXdhcmVEYXRhJGZsaXAgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAub3ZlcmZsb3dzKSB8fCBbXTtcclxuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcclxuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XHJcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xyXG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVzWzBdXSwgb3ZlcmZsb3dbc2lkZXNbMV1dKTtcclxuICAgICAgfVxyXG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcclxuICAgICAgICBwbGFjZW1lbnQsXHJcbiAgICAgICAgb3ZlcmZsb3dzXHJcbiAgICAgIH1dO1xyXG5cclxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXHJcbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xyXG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkZmxpcDIsIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjtcclxuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XHJcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcclxuICAgICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xyXG4gICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxyXG4gICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXNldDoge1xyXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXHJcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxyXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcclxuXHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxyXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcclxuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xyXG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkZmlsdGVyMjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2lkZUF4aXMgPT09IGluaXRpYWxTaWRlQXhpcyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcclxuICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIGRpcmVjdGlvbnMgZmF2b3JpbmcgZ3JlYXRlciB3aWR0aC5cclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2lkZUF4aXMgPT09ICd5JztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pLm1hcChkID0+IFtkLnBsYWNlbWVudCwgZC5vdmVyZmxvd3MuZmlsdGVyKG92ZXJmbG93ID0+IG92ZXJmbG93ID4gMCkucmVkdWNlKChhY2MsIG92ZXJmbG93KSA9PiBhY2MgKyBvdmVyZmxvdywgMCldKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnaW5pdGlhbFBsYWNlbWVudCc6XHJcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzZXQ6IHtcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QpIHtcclxuICByZXR1cm4ge1xyXG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcclxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGgsXHJcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxyXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcclxuICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xyXG4gIHJldHVybiBzaWRlcy5zb21lKHNpZGUgPT4gb3ZlcmZsb3dbc2lkZV0gPj0gMCk7XHJcbn1cclxuLyoqXHJcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcclxuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXHJcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXHJcbiAqL1xyXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XHJcbiAgICBvcHRpb25zID0ge307XHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiAnaGlkZScsXHJcbiAgICBvcHRpb25zLFxyXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHJlY3RzXHJcbiAgICAgIH0gPSBzdGF0ZTtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXHJcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXHJcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XHJcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcclxuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XHJcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxyXG4gICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW46IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xyXG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcclxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXHJcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0cykge1xyXG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XHJcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xyXG4gIGNvbnN0IG1heFggPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xyXG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcclxuICByZXR1cm4ge1xyXG4gICAgeDogbWluWCxcclxuICAgIHk6IG1pblksXHJcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXHJcbiAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZXHJcbiAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXRSZWN0c0J5TGluZShyZWN0cykge1xyXG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xyXG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xyXG4gIGxldCBwcmV2UmVjdCA9IG51bGw7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xyXG4gICAgaWYgKCFwcmV2UmVjdCB8fCByZWN0LnkgLSBwcmV2UmVjdC55ID4gcHJldlJlY3QuaGVpZ2h0IC8gMikge1xyXG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5wdXNoKHJlY3QpO1xyXG4gICAgfVxyXG4gICAgcHJldlJlY3QgPSByZWN0O1xyXG4gIH1cclxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XHJcbn1cclxuLyoqXHJcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cclxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXHJcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcclxuICovXHJcbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogJ2lubGluZScsXHJcbiAgICBvcHRpb25zLFxyXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHBsYWNlbWVudCxcclxuICAgICAgICBlbGVtZW50cyxcclxuICAgICAgICByZWN0cyxcclxuICAgICAgICBwbGF0Zm9ybSxcclxuICAgICAgICBzdHJhdGVneVxyXG4gICAgICB9ID0gc3RhdGU7XHJcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcclxuICAgICAgLy8gQ2xpZW50UmVjdCdzIGJvdW5kcywgZGVzcGl0ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYmVpbmcgdHJpZ2dlcmVkLiBBXHJcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHBhZGRpbmcgPSAyLFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeVxyXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xyXG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcclxuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QobmF0aXZlQ2xpZW50UmVjdHMpKTtcclxuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XHJcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcclxuICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlY3RzIGFuZCB0aGV5IGFyZSBkaXNqb2luZWQuXHJcbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxyXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3RzLmZpbmQocmVjdCA9PiB4ID4gcmVjdC5sZWZ0IC0gcGFkZGluZ09iamVjdC5sZWZ0ICYmIHggPCByZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCAmJiB5ID4gcmVjdC50b3AgLSBwYWRkaW5nT2JqZWN0LnRvcCAmJiB5IDwgcmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgfHwgZmFsbGJhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGVyZSBhcmUgMiBvciBtb3JlIGNvbm5lY3RlZCByZWN0cy5cclxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcclxuICAgICAgICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcclxuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcclxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICB0b3AsXHJcbiAgICAgICAgICAgICAgYm90dG9tLFxyXG4gICAgICAgICAgICAgIGxlZnQsXHJcbiAgICAgICAgICAgICAgcmlnaHQsXHJcbiAgICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICAgIHg6IGxlZnQsXHJcbiAgICAgICAgICAgICAgeTogdG9wXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XHJcbiAgICAgICAgICBjb25zdCBtYXhSaWdodCA9IG1heCguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XHJcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xyXG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcclxuICAgICAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XHJcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcclxuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xyXG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcclxuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xyXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wLFxyXG4gICAgICAgICAgICBib3R0b20sXHJcbiAgICAgICAgICAgIGxlZnQsXHJcbiAgICAgICAgICAgIHJpZ2h0LFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICB4OiBsZWZ0LFxyXG4gICAgICAgICAgICB5OiB0b3BcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcclxuICAgICAgICByZWZlcmVuY2U6IHtcclxuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxyXG4gICAgICAgIHN0cmF0ZWd5XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcmVzZXQ6IHtcclxuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xyXG4vLyBEZXJpdmFibGUuXHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xyXG4gIGNvbnN0IHtcclxuICAgIHBsYWNlbWVudCxcclxuICAgIHBsYXRmb3JtLFxyXG4gICAgZWxlbWVudHNcclxuICB9ID0gc3RhdGU7XHJcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xyXG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XHJcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XHJcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcclxuICBjb25zdCBtYWluQXhpc011bHRpID0gWydsZWZ0JywgJ3RvcCddLmluY2x1ZGVzKHNpZGUpID8gLTEgOiAxO1xyXG4gIGNvbnN0IGNyb3NzQXhpc011bHRpID0gcnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDE7XHJcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcclxuICBsZXQge1xyXG4gICAgbWFpbkF4aXMsXHJcbiAgICBjcm9zc0F4aXMsXHJcbiAgICBhbGlnbm1lbnRBeGlzXHJcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XHJcbiAgICBtYWluQXhpczogcmF3VmFsdWUsXHJcbiAgICBjcm9zc0F4aXM6IDAsXHJcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXHJcbiAgfSA6IHtcclxuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxyXG4gICAgY3Jvc3NBeGlzOiByYXdWYWx1ZS5jcm9zc0F4aXMgfHwgMCxcclxuICAgIGFsaWdubWVudEF4aXM6IHJhd1ZhbHVlLmFsaWdubWVudEF4aXNcclxuICB9O1xyXG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XHJcbiAgICBjcm9zc0F4aXMgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gYWxpZ25tZW50QXhpcyAqIC0xIDogYWxpZ25tZW50QXhpcztcclxuICB9XHJcbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XHJcbiAgICB4OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aSxcclxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxyXG4gIH0gOiB7XHJcbiAgICB4OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGksXHJcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxyXG4gKiBzcGVjaWZpZWQgYXhlcy5cclxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxyXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cclxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxyXG4gKi9cclxuY29uc3Qgb2Zmc2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XHJcbiAgICBvcHRpb25zID0gMDtcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6ICdvZmZzZXQnLFxyXG4gICAgb3B0aW9ucyxcclxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XHJcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBwbGFjZW1lbnQsXHJcbiAgICAgICAgbWlkZGxld2FyZURhdGFcclxuICAgICAgfSA9IHN0YXRlO1xyXG4gICAgICBjb25zdCBkaWZmQ29vcmRzID0gYXdhaXQgY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XHJcbiAgICAgIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIHBvc2l0aW9uaW5nIGNvb3JkaW5hdGVzLlxyXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcclxuICAgICAgICB5OiB5ICsgZGlmZkNvb3Jkcy55LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXHJcbiAgICAgICAgICBwbGFjZW1lbnRcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cclxuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXHJcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxyXG4gKi9cclxuY29uc3Qgc2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6ICdzaGlmdCcsXHJcbiAgICBvcHRpb25zLFxyXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBwbGFjZW1lbnRcclxuICAgICAgfSA9IHN0YXRlO1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxyXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSBmYWxzZSxcclxuICAgICAgICBsaW1pdGVyID0ge1xyXG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xyXG4gICAgICAgICAgICBsZXQge1xyXG4gICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgeVxyXG4gICAgICAgICAgICB9ID0gX3JlZjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgIHlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xyXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xyXG4gICAgICBjb25zdCBjb29yZHMgPSB7XHJcbiAgICAgICAgeCxcclxuICAgICAgICB5XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XHJcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XHJcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XHJcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcclxuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XHJcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XHJcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcclxuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcclxuICAgICAgICBjb25zdCBtaW4gPSBtYWluQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XHJcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xyXG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XHJcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XHJcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xyXG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XHJcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcclxuICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGNsYW1wKG1pbiwgY3Jvc3NBeGlzQ29vcmQsIG1heCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xyXG4gICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXHJcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcclxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHksXHJcbiAgICAgICAgICBlbmFibGVkOiB7XHJcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXHJcbiAgICAgICAgICAgIFtjcm9zc0F4aXNdOiBjaGVja0Nyb3NzQXhpc1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG4vKipcclxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXHJcbiAqL1xyXG5jb25zdCBsaW1pdFNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XHJcbiAgICBvcHRpb25zID0ge307XHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBvcHRpb25zLFxyXG4gICAgZm4oc3RhdGUpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBwbGFjZW1lbnQsXHJcbiAgICAgICAgcmVjdHMsXHJcbiAgICAgICAgbWlkZGxld2FyZURhdGFcclxuICAgICAgfSA9IHN0YXRlO1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgb2Zmc2V0ID0gMCxcclxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXHJcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcclxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcclxuICAgICAgY29uc3QgY29vcmRzID0ge1xyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xyXG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xyXG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XHJcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xyXG4gICAgICBjb25zdCByYXdPZmZzZXQgPSBldmFsdWF0ZShvZmZzZXQsIHN0YXRlKTtcclxuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcclxuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxyXG4gICAgICAgIGNyb3NzQXhpczogMFxyXG4gICAgICB9IDoge1xyXG4gICAgICAgIG1haW5BeGlzOiAwLFxyXG4gICAgICAgIGNyb3NzQXhpczogMCxcclxuICAgICAgICAuLi5yYXdPZmZzZXRcclxuICAgICAgfTtcclxuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcclxuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xyXG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcclxuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSAtIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xyXG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcclxuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1haW5BeGlzQ29vcmQgPiBsaW1pdE1heCkge1xyXG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcclxuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xyXG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnd2lkdGgnIDogJ2hlaWdodCc7XHJcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gWyd0b3AnLCAnbGVmdCddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSk7XHJcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xyXG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSArIChpc09yaWdpblNpZGUgPyAwIDogKChfbWlkZGxld2FyZURhdGEkb2Zmc2UyID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlMltjcm9zc0F4aXNdKSB8fCAwKSAtIChpc09yaWdpblNpZGUgPyBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMgOiAwKTtcclxuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xyXG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcclxuICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcclxuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcclxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcclxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxyXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXHJcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXHJcbiAqL1xyXG5jb25zdCBzaXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XHJcbiAgICBvcHRpb25zID0ge307XHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiAnc2l6ZScsXHJcbiAgICBvcHRpb25zLFxyXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcclxuICAgICAgdmFyIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSwgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMjtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHBsYWNlbWVudCxcclxuICAgICAgICByZWN0cyxcclxuICAgICAgICBwbGF0Zm9ybSxcclxuICAgICAgICBlbGVtZW50c1xyXG4gICAgICB9ID0gc3RhdGU7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxyXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xyXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xyXG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xyXG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xyXG4gICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcclxuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHdpZHRoLFxyXG4gICAgICAgIGhlaWdodFxyXG4gICAgICB9ID0gcmVjdHMuZmxvYXRpbmc7XHJcbiAgICAgIGxldCBoZWlnaHRTaWRlO1xyXG4gICAgICBsZXQgd2lkdGhTaWRlO1xyXG4gICAgICBpZiAoc2lkZSA9PT0gJ3RvcCcgfHwgc2lkZSA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgICBoZWlnaHRTaWRlID0gc2lkZTtcclxuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdpZHRoU2lkZSA9IHNpZGU7XHJcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ0hlaWdodCA9IGhlaWdodCAtIG92ZXJmbG93LnRvcCAtIG92ZXJmbG93LmJvdHRvbTtcclxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcclxuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBtaW4oaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV0sIG1heGltdW1DbGlwcGluZ0hlaWdodCk7XHJcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlV2lkdGggPSBtaW4od2lkdGggLSBvdmVyZmxvd1t3aWR0aFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCk7XHJcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XHJcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcclxuICAgICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gb3ZlcmZsb3dBdmFpbGFibGVXaWR0aDtcclxuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XHJcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtYXhpbXVtQ2xpcHBpbmdXaWR0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xyXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG1heGltdW1DbGlwcGluZ0hlaWdodDtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XHJcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcclxuICAgICAgICBjb25zdCB4TWF4ID0gbWF4KG92ZXJmbG93LnJpZ2h0LCAwKTtcclxuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XHJcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xyXG4gICAgICAgIGlmIChpc1lBeGlzKSB7XHJcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSAyICogKHlNaW4gIT09IDAgfHwgeU1heCAhPT0gMCA/IHlNaW4gKyB5TWF4IDogbWF4KG92ZXJmbG93LnRvcCwgb3ZlcmZsb3cuYm90dG9tKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IGFwcGx5KHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcclxuICAgICAgICBhdmFpbGFibGVIZWlnaHRcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XHJcbiAgICAgIGlmICh3aWR0aCAhPT0gbmV4dERpbWVuc2lvbnMud2lkdGggfHwgaGVpZ2h0ICE9PSBuZXh0RGltZW5zaW9ucy5oZWlnaHQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcmVzZXQ6IHtcclxuICAgICAgICAgICAgcmVjdHM6IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSB9O1xyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@floating-ui/core/dist/floating-ui.core.mjs\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs": /*!****************************************************************!*\ !*** ./node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs ***! \****************************************************************/ /***/ (function(__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 */ arrow: function() { return /* binding */ arrow; },\n/* harmony export */ autoPlacement: function() { return /* binding */ autoPlacement; },\n/* harmony export */ autoUpdate: function() { return /* binding */ autoUpdate; },\n/* harmony export */ computePosition: function() { return /* binding */ computePosition; },\n/* harmony export */ detectOverflow: function() { return /* binding */ detectOverflow; },\n/* harmony export */ flip: function() { return /* binding */ flip; },\n/* harmony export */ getOverflowAncestors: function() { return /* reexport safe */ _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getOverflowAncestors; },\n/* harmony export */ hide: function() { return /* binding */ hide; },\n/* harmony export */ inline: function() { return /* binding */ inline; },\n/* harmony export */ limitShift: function() { return /* binding */ limitShift; },\n/* harmony export */ offset: function() { return /* binding */ offset; },\n/* harmony export */ platform: function() { return /* binding */ platform; },\n/* harmony export */ shift: function() { return /* binding */ shift; },\n/* harmony export */ size: function() { return /* binding */ size; }\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/utils */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs\");\n/* harmony import */ var _floating_ui_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @floating-ui/core */ \"(app-pages-browser)/./node_modules/@floating-ui/core/dist/floating-ui.core.mjs\");\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n\r\n\r\n\r\n\r\n\r\nfunction getCssDimensions(element) {\r\n const css = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(element);\r\n // In testing environments, the `width` and `height` properties are empty\r\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\r\n let width = parseFloat(css.width) || 0;\r\n let height = parseFloat(css.height) || 0;\r\n const hasOffset = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element);\r\n const offsetWidth = hasOffset ? element.offsetWidth : width;\r\n const offsetHeight = hasOffset ? element.offsetHeight : height;\r\n const shouldFallback = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.round)(width) !== offsetWidth || (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.round)(height) !== offsetHeight;\r\n if (shouldFallback) {\r\n width = offsetWidth;\r\n height = offsetHeight;\r\n }\r\n return {\r\n width,\r\n height,\r\n $: shouldFallback\r\n };\r\n}\r\n\r\nfunction unwrapElement(element) {\r\n return !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.contextElement : element;\r\n}\r\n\r\nfunction getScale(element) {\r\n const domElement = unwrapElement(element);\r\n if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(domElement)) {\r\n return (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1);\r\n }\r\n const rect = domElement.getBoundingClientRect();\r\n const {\r\n width,\r\n height,\r\n $\r\n } = getCssDimensions(domElement);\r\n let x = ($ ? (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.round)(rect.width) : rect.width) / width;\r\n let y = ($ ? (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.round)(rect.height) : rect.height) / height;\r\n\r\n // 0, NaN, or Infinity should always fallback to 1.\r\n\r\n if (!x || !Number.isFinite(x)) {\r\n x = 1;\r\n }\r\n if (!y || !Number.isFinite(y)) {\r\n y = 1;\r\n }\r\n return {\r\n x,\r\n y\r\n };\r\n}\r\n\r\nconst noOffsets = /*#__PURE__*/(0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0);\r\nfunction getVisualOffsets(element) {\r\n const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)(element);\r\n if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isWebKit)() || !win.visualViewport) {\r\n return noOffsets;\r\n }\r\n return {\r\n x: win.visualViewport.offsetLeft,\r\n y: win.visualViewport.offsetTop\r\n };\r\n}\r\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\r\n if (isFixed === void 0) {\r\n isFixed = false;\r\n }\r\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)(element)) {\r\n return false;\r\n }\r\n return isFixed;\r\n}\r\n\r\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\r\n if (includeScale === void 0) {\r\n includeScale = false;\r\n }\r\n if (isFixedStrategy === void 0) {\r\n isFixedStrategy = false;\r\n }\r\n const clientRect = element.getBoundingClientRect();\r\n const domElement = unwrapElement(element);\r\n let scale = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1);\r\n if (includeScale) {\r\n if (offsetParent) {\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(offsetParent)) {\r\n scale = getScale(offsetParent);\r\n }\r\n } else {\r\n scale = getScale(element);\r\n }\r\n }\r\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0);\r\n let x = (clientRect.left + visualOffsets.x) / scale.x;\r\n let y = (clientRect.top + visualOffsets.y) / scale.y;\r\n let width = clientRect.width / scale.x;\r\n let height = clientRect.height / scale.y;\r\n if (domElement) {\r\n const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)(domElement);\r\n const offsetWin = offsetParent && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(offsetParent) ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)(offsetParent) : offsetParent;\r\n let currentWin = win;\r\n let currentIFrame = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getFrameElement)(currentWin);\r\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\r\n const iframeScale = getScale(currentIFrame);\r\n const iframeRect = currentIFrame.getBoundingClientRect();\r\n const css = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(currentIFrame);\r\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\r\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\r\n x *= iframeScale.x;\r\n y *= iframeScale.y;\r\n width *= iframeScale.x;\r\n height *= iframeScale.y;\r\n x += left;\r\n y += top;\r\n currentWin = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)(currentIFrame);\r\n currentIFrame = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getFrameElement)(currentWin);\r\n }\r\n }\r\n return (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.rectToClientRect)({\r\n width,\r\n height,\r\n x,\r\n y\r\n });\r\n}\r\n\r\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\r\n let {\r\n elements,\r\n rect,\r\n offsetParent,\r\n strategy\r\n } = _ref;\r\n const isFixed = strategy === 'fixed';\r\n const documentElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(offsetParent);\r\n const topLayer = elements ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isTopLayer)(elements.floating) : false;\r\n if (offsetParent === documentElement || topLayer && isFixed) {\r\n return rect;\r\n }\r\n let scroll = {\r\n scrollLeft: 0,\r\n scrollTop: 0\r\n };\r\n let scale = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1);\r\n const offsets = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0);\r\n const isOffsetParentAnElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(offsetParent);\r\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(offsetParent) !== 'body' || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isOverflowElement)(documentElement)) {\r\n scroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeScroll)(offsetParent);\r\n }\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(offsetParent)) {\r\n const offsetRect = getBoundingClientRect(offsetParent);\r\n scale = getScale(offsetParent);\r\n offsets.x = offsetRect.x + offsetParent.clientLeft;\r\n offsets.y = offsetRect.y + offsetParent.clientTop;\r\n }\r\n }\r\n return {\r\n width: rect.width * scale.x,\r\n height: rect.height * scale.y,\r\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\r\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\r\n };\r\n}\r\n\r\nfunction getClientRects(element) {\r\n return Array.from(element.getClientRects());\r\n}\r\n\r\n// If has a CSS width greater than the viewport, then this will be\r\n// incorrect for RTL.\r\nfunction getWindowScrollBarX(element, rect) {\r\n const leftScroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeScroll)(element).scrollLeft;\r\n if (!rect) {\r\n return getBoundingClientRect((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(element)).left + leftScroll;\r\n }\r\n return rect.left + leftScroll;\r\n}\r\n\r\n// Gets the entire size of the scrollable document area, even extending outside\r\n// of the `` and `` rect bounds if horizontally scrollable.\r\nfunction getDocumentRect(element) {\r\n const html = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(element);\r\n const scroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeScroll)(element);\r\n const body = element.ownerDocument.body;\r\n const width = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.max)(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\r\n const height = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.max)(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\r\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\r\n const y = -scroll.scrollTop;\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(body).direction === 'rtl') {\r\n x += (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.max)(html.clientWidth, body.clientWidth) - width;\r\n }\r\n return {\r\n width,\r\n height,\r\n x,\r\n y\r\n };\r\n}\r\n\r\nfunction getViewportRect(element, strategy) {\r\n const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)(element);\r\n const html = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(element);\r\n const visualViewport = win.visualViewport;\r\n let width = html.clientWidth;\r\n let height = html.clientHeight;\r\n let x = 0;\r\n let y = 0;\r\n if (visualViewport) {\r\n width = visualViewport.width;\r\n height = visualViewport.height;\r\n const visualViewportBased = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isWebKit)();\r\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\r\n x = visualViewport.offsetLeft;\r\n y = visualViewport.offsetTop;\r\n }\r\n }\r\n return {\r\n width,\r\n height,\r\n x,\r\n y\r\n };\r\n}\r\n\r\n// Returns the inner client rect, subtracting scrollbars if present.\r\nfunction getInnerBoundingClientRect(element, strategy) {\r\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\r\n const top = clientRect.top + element.clientTop;\r\n const left = clientRect.left + element.clientLeft;\r\n const scale = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) ? getScale(element) : (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(1);\r\n const width = element.clientWidth * scale.x;\r\n const height = element.clientHeight * scale.y;\r\n const x = left * scale.x;\r\n const y = top * scale.y;\r\n return {\r\n width,\r\n height,\r\n x,\r\n y\r\n };\r\n}\r\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\r\n let rect;\r\n if (clippingAncestor === 'viewport') {\r\n rect = getViewportRect(element, strategy);\r\n } else if (clippingAncestor === 'document') {\r\n rect = getDocumentRect((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(element));\r\n } else if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(clippingAncestor)) {\r\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\r\n } else {\r\n const visualOffsets = getVisualOffsets(element);\r\n rect = {\r\n ...clippingAncestor,\r\n x: clippingAncestor.x - visualOffsets.x,\r\n y: clippingAncestor.y - visualOffsets.y\r\n };\r\n }\r\n return (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.rectToClientRect)(rect);\r\n}\r\nfunction hasFixedPositionAncestor(element, stopNode) {\r\n const parentNode = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getParentNode)(element);\r\n if (parentNode === stopNode || !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(parentNode) || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isLastTraversableNode)(parentNode)) {\r\n return false;\r\n }\r\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\r\n}\r\n\r\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\r\n// clipping (or hiding) child elements. This returns all clipping ancestors\r\n// of the given element up the tree.\r\nfunction getClippingElementAncestors(element, cache) {\r\n const cachedResult = cache.get(element);\r\n if (cachedResult) {\r\n return cachedResult;\r\n }\r\n let result = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getOverflowAncestors)(element, [], false).filter(el => (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(el) && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(el) !== 'body');\r\n let currentContainingBlockComputedStyle = null;\r\n const elementIsFixed = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(element).position === 'fixed';\r\n let currentNode = elementIsFixed ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getParentNode)(element) : element;\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\r\n while ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(currentNode) && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isLastTraversableNode)(currentNode)) {\r\n const computedStyle = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(currentNode);\r\n const currentNodeIsContaining = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isContainingBlock)(currentNode);\r\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\r\n currentContainingBlockComputedStyle = null;\r\n }\r\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isOverflowElement)(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\r\n if (shouldDropCurrentNode) {\r\n // Drop non-containing blocks.\r\n result = result.filter(ancestor => ancestor !== currentNode);\r\n } else {\r\n // Record last containing block for next iteration.\r\n currentContainingBlockComputedStyle = computedStyle;\r\n }\r\n currentNode = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getParentNode)(currentNode);\r\n }\r\n cache.set(element, result);\r\n return result;\r\n}\r\n\r\n// Gets the maximum area that the element is visible in due to any number of\r\n// clipping ancestors.\r\nfunction getClippingRect(_ref) {\r\n let {\r\n element,\r\n boundary,\r\n rootBoundary,\r\n strategy\r\n } = _ref;\r\n const elementClippingAncestors = boundary === 'clippingAncestors' ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isTopLayer)(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\r\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\r\n const firstClippingAncestor = clippingAncestors[0];\r\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\r\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\r\n accRect.top = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.max)(rect.top, accRect.top);\r\n accRect.right = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.min)(rect.right, accRect.right);\r\n accRect.bottom = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.min)(rect.bottom, accRect.bottom);\r\n accRect.left = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.max)(rect.left, accRect.left);\r\n return accRect;\r\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\r\n return {\r\n width: clippingRect.right - clippingRect.left,\r\n height: clippingRect.bottom - clippingRect.top,\r\n x: clippingRect.left,\r\n y: clippingRect.top\r\n };\r\n}\r\n\r\nfunction getDimensions(element) {\r\n const {\r\n width,\r\n height\r\n } = getCssDimensions(element);\r\n return {\r\n width,\r\n height\r\n };\r\n}\r\n\r\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\r\n const isOffsetParentAnElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(offsetParent);\r\n const documentElement = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(offsetParent);\r\n const isFixed = strategy === 'fixed';\r\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\r\n let scroll = {\r\n scrollLeft: 0,\r\n scrollTop: 0\r\n };\r\n const offsets = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.createCoords)(0);\r\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(offsetParent) !== 'body' || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isOverflowElement)(documentElement)) {\r\n scroll = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeScroll)(offsetParent);\r\n }\r\n if (isOffsetParentAnElement) {\r\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\r\n offsets.x = offsetRect.x + offsetParent.clientLeft;\r\n offsets.y = offsetRect.y + offsetParent.clientTop;\r\n } else if (documentElement) {\r\n // If the scrollbar appears on the left (e.g. RTL systems). Use\r\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\r\n offsets.x = getWindowScrollBarX(documentElement);\r\n }\r\n }\r\n let htmlX = 0;\r\n let htmlY = 0;\r\n if (documentElement && !isOffsetParentAnElement && !isFixed) {\r\n const htmlRect = documentElement.getBoundingClientRect();\r\n htmlY = htmlRect.top + scroll.scrollTop;\r\n htmlX = htmlRect.left + scroll.scrollLeft -\r\n // RTL scrollbar.\r\n getWindowScrollBarX(documentElement, htmlRect);\r\n }\r\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlX;\r\n const y = rect.top + scroll.scrollTop - offsets.y - htmlY;\r\n return {\r\n x,\r\n y,\r\n width: rect.width,\r\n height: rect.height\r\n };\r\n}\r\n\r\nfunction isStaticPositioned(element) {\r\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(element).position === 'static';\r\n}\r\n\r\nfunction getTrueOffsetParent(element, polyfill) {\r\n if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(element).position === 'fixed') {\r\n return null;\r\n }\r\n if (polyfill) {\r\n return polyfill(element);\r\n }\r\n let rawOffsetParent = element.offsetParent;\r\n\r\n // Firefox returns the element as the offsetParent if it's non-static,\r\n // while Chrome and Safari return the element. The element must\r\n // be used to perform the correct calculations even if the element is\r\n // non-static.\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(element) === rawOffsetParent) {\r\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\r\n }\r\n return rawOffsetParent;\r\n}\r\n\r\n// Gets the closest ancestor positioned element. Handles some edge cases,\r\n// such as table ancestors and cross browser bugs.\r\nfunction getOffsetParent(element, polyfill) {\r\n const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)(element);\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isTopLayer)(element)) {\r\n return win;\r\n }\r\n if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\r\n let svgOffsetParent = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getParentNode)(element);\r\n while (svgOffsetParent && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isLastTraversableNode)(svgOffsetParent)) {\r\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement)(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\r\n return svgOffsetParent;\r\n }\r\n svgOffsetParent = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getParentNode)(svgOffsetParent);\r\n }\r\n return win;\r\n }\r\n let offsetParent = getTrueOffsetParent(element, polyfill);\r\n while (offsetParent && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isTableElement)(offsetParent) && isStaticPositioned(offsetParent)) {\r\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\r\n }\r\n if (offsetParent && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isLastTraversableNode)(offsetParent) && isStaticPositioned(offsetParent) && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isContainingBlock)(offsetParent)) {\r\n return win;\r\n }\r\n return offsetParent || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getContainingBlock)(element) || win;\r\n}\r\n\r\nconst getElementRects = async function (data) {\r\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\r\n const getDimensionsFn = this.getDimensions;\r\n const floatingDimensions = await getDimensionsFn(data.floating);\r\n return {\r\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\r\n floating: {\r\n x: 0,\r\n y: 0,\r\n width: floatingDimensions.width,\r\n height: floatingDimensions.height\r\n }\r\n };\r\n};\r\n\r\nfunction isRTL(element) {\r\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(element).direction === 'rtl';\r\n}\r\n\r\nconst platform = {\r\n convertOffsetParentRelativeRectToViewportRelativeRect,\r\n getDocumentElement: _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement,\r\n getClippingRect,\r\n getOffsetParent,\r\n getElementRects,\r\n getClientRects,\r\n getDimensions,\r\n getScale,\r\n isElement: _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isElement,\r\n isRTL\r\n};\r\n\r\n// https://samthor.au/2021/observing-dom/\r\nfunction observeMove(element, onMove) {\r\n let io = null;\r\n let timeoutId;\r\n const root = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getDocumentElement)(element);\r\n function cleanup() {\r\n var _io;\r\n clearTimeout(timeoutId);\r\n (_io = io) == null || _io.disconnect();\r\n io = null;\r\n }\r\n function refresh(skip, threshold) {\r\n if (skip === void 0) {\r\n skip = false;\r\n }\r\n if (threshold === void 0) {\r\n threshold = 1;\r\n }\r\n cleanup();\r\n const {\r\n left,\r\n top,\r\n width,\r\n height\r\n } = element.getBoundingClientRect();\r\n if (!skip) {\r\n onMove();\r\n }\r\n if (!width || !height) {\r\n return;\r\n }\r\n const insetTop = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.floor)(top);\r\n const insetRight = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.floor)(root.clientWidth - (left + width));\r\n const insetBottom = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.floor)(root.clientHeight - (top + height));\r\n const insetLeft = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.floor)(left);\r\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\r\n const options = {\r\n rootMargin,\r\n threshold: (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.max)(0, (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.min)(1, threshold)) || 1\r\n };\r\n let isFirstUpdate = true;\r\n function handleObserve(entries) {\r\n const ratio = entries[0].intersectionRatio;\r\n if (ratio !== threshold) {\r\n if (!isFirstUpdate) {\r\n return refresh();\r\n }\r\n if (!ratio) {\r\n // If the reference is clipped, the ratio is 0. Throttle the refresh\r\n // to prevent an infinite loop of updates.\r\n timeoutId = setTimeout(() => {\r\n refresh(false, 1e-7);\r\n }, 1000);\r\n } else {\r\n refresh(false, ratio);\r\n }\r\n }\r\n isFirstUpdate = false;\r\n }\r\n\r\n // Older browsers don't support a `document` as the root and will throw an\r\n // error.\r\n try {\r\n io = new IntersectionObserver(handleObserve, {\r\n ...options,\r\n // Handle