32 lines
137 KiB
JavaScript
32 lines
137 KiB
JavaScript
/*
|
|
* 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/).
|
|
*/
|
|
/******/ (() => { // webpackBootstrap
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "./resources/js/service/service.js":
|
|
/*!*****************************************!*\
|
|
!*** ./resources/js/service/service.js ***!
|
|
\*****************************************/
|
|
/***/ (() => {
|
|
|
|
eval("function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n// Global variables - NO SENSITIVE DATA (no tokens)\nvar invoiceId;\nvar invoiceOrdernum;\nvar vmId;\nvar vmHostname;\nvar csrfToken;\n\n// Initialize variables from data attributes or global variables\nfunction initializeVariables() {\n // Get data from meta tags or global variables set in Blade template\n var metaInvoiceId = document.querySelector('meta[name=\"invoice-id\"]');\n var metaInvoiceOrdernum = document.querySelector('meta[name=\"invoice-ordernum\"]');\n var metaVmId = document.querySelector('meta[name=\"vm-id\"]');\n var metaVmHostname = document.querySelector('meta[name=\"vm-hostname\"]');\n var metaCsrfToken = document.querySelector('meta[name=\"csrf-token\"]');\n invoiceId = metaInvoiceId ? metaInvoiceId.getAttribute(\"content\") : window.invoiceId;\n invoiceOrdernum = metaInvoiceOrdernum ? metaInvoiceOrdernum.getAttribute(\"content\") : window.invoiceOrdernum;\n vmId = metaVmId ? metaVmId.getAttribute(\"content\") : window.vmId;\n vmHostname = metaVmHostname ? metaVmHostname.getAttribute(\"content\") : window.vmHostname;\n csrfToken = metaCsrfToken ? metaCsrfToken.getAttribute(\"content\") : window.csrfToken;\n}\n\n// Cấu hình toast nếu có thể\nif (typeof FuiToast !== \"undefined\" && FuiToast.config) {\n FuiToast.config({\n position: \"top-center\"\n });\n}\nfunction showNotification(message) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"success\";\n if (type === \"success\") {\n FuiToast.success(message);\n } else {\n FuiToast.error(message);\n }\n}\nfunction createSnapshot() {\n return _createSnapshot.apply(this, arguments);\n} // Handle snapshot form submission with loading notification\nfunction _createSnapshot() {\n _createSnapshot = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {\n var snapshotBtn, requestBody, headers, snapshotPromise;\n return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (!(snapshotBtn && snapshotBtn.disabled)) {\n _context8.next = 3;\n break;\n }\n return _context8.abrupt(\"return\");\n case 3:\n requestBody = {\n product_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n snapshotPromise = fetch(\"/secure/create-snapshots\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(response) {\n var data, text, errorMessage;\n return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context7.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n if (!response.redirected) {\n _context7.next = 4;\n break;\n }\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 4:\n _context7.prev = 4;\n _context7.next = 7;\n return response.text();\n case 7:\n text = _context7.sent;\n _context7.prev = 8;\n data = JSON.parse(text);\n _context7.next = 20;\n break;\n case 12:\n _context7.prev = 12;\n _context7.t0 = _context7[\"catch\"](8);\n if (!(text.includes(\"success\") || response.ok)) {\n _context7.next = 19;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 19:\n throw new Error(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n case 20:\n _context7.next = 25;\n break;\n case 22:\n _context7.prev = 22;\n _context7.t1 = _context7[\"catch\"](4);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 25:\n if (!(data && !data.error)) {\n _context7.next = 30;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", data.message || \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 30:\n errorMessage = \"Có lỗi xảy ra khi tạo snapshot\";\n if (data && data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data && data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data && data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7, null, [[4, 22], [8, 12]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot... (Quá trình mất 3-5 phút vui lòng giữ trang không tắt!)\",\n success: function success(data) {\n return data;\n },\n error: function error(_error2) {\n console.error(_error2);\n return _error2.message || \"Có lỗi xảy ra khi tạo snapshot\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context8.stop();\n }\n }, _callee8);\n }));\n return _createSnapshot.apply(this, arguments);\n}\nfunction handleSnapshotSubmit(event) {\n event.preventDefault();\n var snapshotPromise = new Promise(function (resolve, reject) {\n var form = document.getElementById(\"snapshotForm\");\n var formData = new FormData(form);\n fetch(form.action, {\n method: \"POST\",\n body: formData,\n headers: {\n \"X-CSRF-TOKEN\": csrfToken\n }\n }).then(function (response) {\n if (response.redirected) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n window.location.href = response.url;\n } else if (response.ok) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n setTimeout(function () {\n window.location.reload();\n }, 2000);\n } else {\n response.text().then(function (text) {\n reject(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n });\n }\n })[\"catch\"](function (error) {\n reject(\"Lỗi kết nối: \" + error.message);\n });\n });\n if (typeof FuiToast !== \"undefined\" && FuiToast.promise) {\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot...\",\n success: function success(data) {\n return data || \"Đã gửi yêu cầu tạo snapshot!\";\n },\n error: function error(_error) {\n return _error || \"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\";\n }\n });\n } else {\n if (typeof FuiToast !== \"undefined\") {\n FuiToast.loading(\"Đang gửi yêu cầu tạo snapshot...\", {\n duration: 0\n });\n } else {\n alert(\"Đang gửi yêu cầu tạo snapshot...\");\n }\n setTimeout(function () {\n document.getElementById(\"snapshotForm\").submit();\n }, 500);\n }\n}\nfunction startVirtualMachine() {\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction _startVirtualMachine() {\n _startVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {\n var startBtn, requestBody, headers, startPromise;\n return _regeneratorRuntime().wrap(function _callee10$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n startBtn = document.getElementById(\"startVMButton\");\n if (!(startBtn && startBtn.disabled)) {\n _context10.next = 3;\n break;\n }\n return _context10.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n startPromise = fetch(\"/api/secure/start-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context9.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context9.prev = 2;\n _context9.next = 5;\n return response.json();\n case 5:\n data = _context9.sent;\n _context9.next = 11;\n break;\n case 8:\n _context9.prev = 8;\n _context9.t0 = _context9[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context9.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context9.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", \"Máy chủ đã được bật\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context9.stop();\n }\n }, _callee9, null, [[2, 8]]);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n FuiToast.promise(startPromise, {\n loading: \"Đang khởi động máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error3) {\n console.error(_error3);\n return _error3.message || \"Có lỗi xảy ra khi khởi động máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee10);\n }));\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction stopVirtualMachine() {\n return _stopVirtualMachine.apply(this, arguments);\n} // DOM ready\nfunction _stopVirtualMachine() {\n _stopVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {\n var stopBtn, requestBody, headers, stopPromise;\n return _regeneratorRuntime().wrap(function _callee12$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n stopBtn = document.getElementById(\"stopVMButton\");\n if (!(stopBtn && stopBtn.disabled)) {\n _context12.next = 3;\n break;\n }\n return _context12.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n stopPromise = fetch(\"/api/secure/stop-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee11$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context11.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context11.prev = 2;\n _context11.next = 5;\n return response.json();\n case 5:\n data = _context11.sent;\n _context11.next = 11;\n break;\n case 8:\n _context11.prev = 8;\n _context11.t0 = _context11[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context11.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context11.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", \"Máy chủ đã được tắt\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context11.stop();\n }\n }, _callee11, null, [[2, 8]]);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }());\n FuiToast.promise(stopPromise, {\n loading: \"Đang dừng máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error4) {\n console.error(_error4);\n return _error4.message || \"Có lỗi xảy ra khi dừng máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context12.stop();\n }\n }, _callee12);\n }));\n return _stopVirtualMachine.apply(this, arguments);\n}\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // Initialize variables\n initializeVariables();\n var startBtn = document.getElementById(\"startVMButton\");\n var stopBtn = document.getElementById(\"stopVMButton\");\n var restartBtn = document.getElementById(\"restartVMButton\");\n var snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (startBtn) {\n startBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n startVirtualMachine();\n });\n }\n if (stopBtn) {\n stopBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n stopVirtualMachine();\n });\n }\n if (restartBtn) {\n restartBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n restartVirtualMachine();\n });\n }\n if (snapshotBtn) {\n snapshotBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n createSnapshot();\n });\n }\n});\n\n// Snapshot Table Management\nfunction snapshotTable() {\n // Constants\n var API_ENDPOINTS = {\n GET_SNAPSHOTS: \"/dich-vu-dang-ky/secure/get-snapshots\",\n REMOVE_SNAPSHOT: \"/dich-vu-dang-ky/secure/remove-snapshot\",\n REVERT_SNAPSHOT: \"/dich-vu-dang-ky/secure/revert-snapshot\"\n };\n var MESSAGES = {\n VM_ID_NOT_FOUND: \"Không tìm thấy ID máy ảo\",\n CONNECTION_ERROR: \"Không thể kết nối đến máy chủ\",\n GENERIC_ERROR: \"Có lỗi xảy ra\",\n DELETE_SUCCESS: \"Xóa snapshot thành công\",\n REVERT_SUCCESS: \"Khôi phục snapshot thành công\"\n };\n return {\n loading: false,\n snapshots: [],\n error: null,\n // Cache để tránh fetch lại không cần thiết\n _lastFetchTime: 0,\n _cacheTimeout: 30000,\n // 30 seconds\n fetchSnapshots: function fetchSnapshots() {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _window$vmId;\n var forceRefresh, now, vmId, data;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n forceRefresh = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : false;\n // Check cache\n now = Date.now();\n if (!(!forceRefresh && _this.snapshots.length > 0 && now - _this._lastFetchTime < _this._cacheTimeout)) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\");\n case 4:\n _this.loading = true;\n _this.error = null;\n vmId = (_window$vmId = window.vmId) === null || _window$vmId === void 0 ? void 0 : _window$vmId.trim();\n if (vmId) {\n _context.next = 10;\n break;\n }\n _this._setError(MESSAGES.VM_ID_NOT_FOUND);\n return _context.abrupt(\"return\");\n case 10:\n _context.prev = 10;\n _context.next = 13;\n return _this._makeRequest(\"\".concat(API_ENDPOINTS.GET_SNAPSHOTS, \"?product_id=\").concat(encodeURIComponent(vmId)));\n case 13:\n data = _context.sent;\n _this._processSnapshotsResponse(data);\n _this._lastFetchTime = now;\n _context.next = 21;\n break;\n case 18:\n _context.prev = 18;\n _context.t0 = _context[\"catch\"](10);\n _this._handleError(\"fetching snapshots\", _context.t0);\n case 21:\n _context.prev = 21;\n _this.loading = false;\n return _context.finish(21);\n case 24:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[10, 18, 21, 24]]);\n }))();\n },\n formatSize: function formatSize(sizeGB, sizeMB) {\n var bytes = this._convertToBytes(sizeGB, sizeMB);\n if (bytes === 0) return \"0 B\";\n return this._formatBytes(bytes);\n },\n deleteSnapshot: function deleteSnapshot(snapshotName) {\n var _this2 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return _this2._confirmAction(\"Xác nhận xóa\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n x\\xF3a snapshot \\\"\".concat(snapshotName, \"\\\"? H\\xE0nh \\u0111\\u1ED9ng n\\xE0y kh\\xF4ng th\\u1EC3 ho\\xE0n t\\xE1c.\"), \"Xóa\");\n case 2:\n if (_context2.sent) {\n _context2.next = 4;\n break;\n }\n return _context2.abrupt(\"return\");\n case 4:\n _context2.next = 6;\n return _this2._executeSnapshotAction(API_ENDPOINTS.REMOVE_SNAPSHOT, snapshotName, MESSAGES.DELETE_SUCCESS, \"deleting snapshot\");\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }))();\n },\n revertSnapshot: function revertSnapshot(snapshotName) {\n var _this3 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this3._confirmAction(\"Xác nhận khôi phục\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n kh\\xF4i ph\\u1EE5c v\\u1EC1 snapshot \\\"\".concat(snapshotName, \"\\\"? T\\u1EA5t c\\u1EA3 d\\u1EEF li\\u1EC7u hi\\u1EC7n t\\u1EA1i s\\u1EBD b\\u1ECB m\\u1EA5t.\"), \"Khôi phục\");\n case 2:\n if (_context3.sent) {\n _context3.next = 4;\n break;\n }\n return _context3.abrupt(\"return\");\n case 4:\n _context3.next = 6;\n return _this3._executeSnapshotAction(API_ENDPOINTS.REVERT_SNAPSHOT, snapshotName, MESSAGES.REVERT_SUCCESS, \"reverting snapshot\", 2000);\n case 6:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }))();\n },\n // Public helper methods\n refreshSnapshots: function refreshSnapshots() {\n return this.fetchSnapshots(true);\n },\n getSnapshotCount: function getSnapshotCount() {\n return this.snapshots.length;\n },\n isLoading: function isLoading() {\n return this.loading;\n },\n hasError: function hasError() {\n return this.error !== null;\n },\n // Private helper methods\n _setError: function _setError(message) {\n this.loading = false;\n this.error = message;\n this.snapshots = [];\n },\n _makeRequest: function _makeRequest(url) {\n var _arguments2 = arguments;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n var options, defaultOptions, response;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n defaultOptions = {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken,\n \"Cache-Control\": \"no-cache\"\n },\n credentials: \"same-origin\"\n };\n _context4.next = 4;\n return fetch(url, _objectSpread(_objectSpread({}, defaultOptions), options));\n case 4:\n response = _context4.sent;\n if (response.ok) {\n _context4.next = 7;\n break;\n }\n throw new Error(\"HTTP error! status: \".concat(response.status));\n case 7:\n return _context4.abrupt(\"return\", response.json());\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }))();\n },\n _processSnapshotsResponse: function _processSnapshotsResponse(data) {\n var _data$data;\n // Handle different response structures\n if (data.error === false && (_data$data = data.data) !== null && _data$data !== void 0 && _data$data.snapshots) {\n this.snapshots = data.data.snapshots;\n } else if (data.error === true) {\n throw new Error(data.message || \"Có lỗi xảy ra khi tải danh sách snapshot\");\n } else if (data.snapshots) {\n this.snapshots = data.snapshots;\n } else {\n this.snapshots = [];\n }\n },\n _convertToBytes: function _convertToBytes(sizeGB, sizeMB) {\n if (sizeGB) {\n return parseFloat(sizeGB) * Math.pow(1024, 3); // GB to bytes\n } else if (sizeMB) {\n return parseFloat(sizeMB) * Math.pow(1024, 2); // MB to bytes\n }\n return 0;\n },\n _formatBytes: function _formatBytes(bytes) {\n var units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var k = 1024;\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n var size = parseFloat((bytes / Math.pow(k, i)).toFixed(2));\n return \"\".concat(size, \" \").concat(units[i]);\n },\n _confirmAction: function _confirmAction(title, text, confirmText) {\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n var result;\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _context5.next = 2;\n return Swal.fire({\n title: title,\n text: text,\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: title.includes(\"xóa\") ? \"#d33\" : \"#3085d6\",\n cancelButtonColor: title.includes(\"xóa\") ? \"#3085d6\" : \"#d33\",\n confirmButtonText: confirmText,\n cancelButtonText: \"Hủy bỏ\",\n reverseButtons: true\n });\n case 2:\n result = _context5.sent;\n return _context5.abrupt(\"return\", result.isConfirmed);\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }))();\n },\n _executeSnapshotAction: function _executeSnapshotAction(endpoint, snapshotName, successMessage, errorContext) {\n var _arguments3 = arguments,\n _this4 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {\n var delay, data;\n return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n delay = _arguments3.length > 4 && _arguments3[4] !== undefined ? _arguments3[4] : 1000;\n _context6.prev = 1;\n _context6.next = 4;\n return _this4._makeRequest(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n },\n body: JSON.stringify({\n product_id: window.vmId,\n snapshot_name: snapshotName\n })\n });\n case 4:\n data = _context6.sent;\n if (!(data.error === false)) {\n _context6.next = 10;\n break;\n }\n showNotification(data.message || successMessage, \"success\");\n setTimeout(function () {\n return _this4.refreshSnapshots();\n }, delay);\n _context6.next = 11;\n break;\n case 10:\n throw new Error(data.message || \"\".concat(MESSAGES.GENERIC_ERROR, \" khi \").concat(errorContext));\n case 11:\n _context6.next = 16;\n break;\n case 13:\n _context6.prev = 13;\n _context6.t0 = _context6[\"catch\"](1);\n _this4._handleError(errorContext, _context6.t0);\n case 16:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, null, [[1, 13]]);\n }))();\n },\n _handleError: function _handleError(context, error) {\n console.error(\"Error \".concat(context, \":\"), error);\n var message = error.message || MESSAGES.CONNECTION_ERROR;\n if (context.includes(\"fetching\")) {\n this._setError(message);\n } else {\n showNotification(message, \"error\");\n }\n }\n };\n}\n\n// Make snapshotTable available globally for Alpine.js\nwindow.snapshotTable = snapshotTable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvc2VydmljZS9zZXJ2aWNlLmpzIiwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsImludm9pY2VJZCIsImludm9pY2VPcmRlcm51bSIsInZtSWQiLCJ2bUhvc3RuYW1lIiwiY3NyZlRva2VuIiwiaW5pdGlhbGl6ZVZhcmlhYmxlcyIsIm1ldGFJbnZvaWNlSWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJtZXRhSW52b2ljZU9yZGVybnVtIiwibWV0YVZtSWQiLCJtZXRhVm1Ib3N0bmFtZSIsIm1ldGFDc3JmVG9rZW4iLCJnZXRBdHRyaWJ1dGUiLCJ3aW5kb3ciLCJGdWlUb2FzdCIsImNvbmZpZyIsInBvc2l0aW9uIiwic2hvd05vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJ1bmRlZmluZWQiLCJzdWNjZXNzIiwiZXJyb3IiLCJjcmVhdGVTbmFwc2hvdCIsIl9jcmVhdGVTbmFwc2hvdCIsIl9jYWxsZWU4Iiwic25hcHNob3RCdG4iLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJzbmFwc2hvdFByb21pc2UiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJnZXRFbGVtZW50QnlJZCIsImRpc2FibGVkIiwicHJvZHVjdF9pZCIsIkFjY2VwdCIsImZldGNoIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjcmVkZW50aWFscyIsIl9yZWYiLCJfY2FsbGVlNyIsInJlc3BvbnNlIiwiZGF0YSIsInRleHQiLCJlcnJvck1lc3NhZ2UiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJyZWRpcmVjdGVkIiwic3RhdHVzIiwicGFyc2UiLCJ0MCIsImluY2x1ZGVzIiwib2siLCJzZXRUaW1lb3V0IiwibG9jYXRpb24iLCJyZWxvYWQiLCJ0MSIsIm1lc3NhZ2VzIiwiZGVmYXVsdF9tZXNzYWdlIiwiZXJyb3JfdHlwZSIsImNvbmNhdCIsInRvU3RyaW5nIiwiX3giLCJwcm9taXNlIiwibG9hZGluZyIsImNvbnNvbGUiLCJpc0Nsb3NlIiwiaGFuZGxlU25hcHNob3RTdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwicmVqZWN0IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhY3Rpb24iLCJocmVmIiwidXJsIiwiZHVyYXRpb24iLCJhbGVydCIsInN1Ym1pdCIsInN0YXJ0VmlydHVhbE1hY2hpbmUiLCJfc3RhcnRWaXJ0dWFsTWFjaGluZSIsIl9jYWxsZWUxMCIsInN0YXJ0QnRuIiwic3RhcnRQcm9taXNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJ2bV9pZCIsIl9yZWYyIiwiX2NhbGxlZTkiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJqc29uIiwiX3gyIiwic3RvcFZpcnR1YWxNYWNoaW5lIiwiX3N0b3BWaXJ0dWFsTWFjaGluZSIsIl9jYWxsZWUxMiIsInN0b3BCdG4iLCJzdG9wUHJvbWlzZSIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3JlZjMiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZXN0YXJ0QnRuIiwic3RvcFByb3BhZ2F0aW9uIiwicmVzdGFydFZpcnR1YWxNYWNoaW5lIiwic25hcHNob3RUYWJsZSIsIkFQSV9FTkRQT0lOVFMiLCJHRVRfU05BUFNIT1RTIiwiUkVNT1ZFX1NOQVBTSE9UIiwiUkVWRVJUX1NOQVBTSE9UIiwiTUVTU0FHRVMiLCJWTV9JRF9OT1RfRk9VTkQiLCJDT05ORUNUSU9OX0VSUk9SIiwiR0VORVJJQ19FUlJPUiIsIkRFTEVURV9TVUNDRVNTIiwiUkVWRVJUX1NVQ0NFU1MiLCJzbmFwc2hvdHMiLCJfbGFzdEZldGNoVGltZSIsIl9jYWNoZVRpbWVvdXQiLCJmZXRjaFNuYXBzaG90cyIsIl9hcmd1bWVudHMiLCJfdGhpcyIsIl9jYWxsZWUiLCJfd2luZG93JHZtSWQiLCJmb3JjZVJlZnJlc2giLCJub3ciLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiRGF0ZSIsInRyaW0iLCJfc2V0RXJyb3IiLCJfbWFrZVJlcXVlc3QiLCJlbmNvZGVVUklDb21wb25lbnQiLCJfcHJvY2Vzc1NuYXBzaG90c1Jlc3BvbnNlIiwiX2hhbmRsZUVycm9yIiwiZm9ybWF0U2l6ZSIsInNpemVHQiIsInNpemVNQiIsImJ5dGVzIiwiX2NvbnZlcnRUb0J5dGVzIiwiX2Zvcm1hdEJ5dGVzIiwiZGVsZXRlU25hcHNob3QiLCJzbmFwc2hvdE5hbWUiLCJfdGhpczIiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9jb25maXJtQWN0aW9uIiwiX2V4ZWN1dGVTbmFwc2hvdEFjdGlvbiIsInJldmVydFNuYXBzaG90IiwiX3RoaXMzIiwiX2NhbGxlZTMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJyZWZyZXNoU25hcHNob3RzIiwiZ2V0U25hcHNob3RDb3VudCIsImlzTG9hZGluZyIsImhhc0Vycm9yIiwiX2FyZ3VtZW50czIiLCJfY2FsbGVlNCIsIm9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIl9vYmplY3RTcHJlYWQiLCJfZGF0YSRkYXRhIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJwb3ciLCJ1bml0cyIsImsiLCJmbG9vciIsImxvZyIsInNpemUiLCJ0b0ZpeGVkIiwidGl0bGUiLCJjb25maXJtVGV4dCIsIl9jYWxsZWU1IiwicmVzdWx0IiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiU3dhbCIsImZpcmUiLCJpY29uIiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNhbmNlbEJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJjYW5jZWxCdXR0b25UZXh0IiwicmV2ZXJzZUJ1dHRvbnMiLCJpc0NvbmZpcm1lZCIsImVuZHBvaW50Iiwic3VjY2Vzc01lc3NhZ2UiLCJlcnJvckNvbnRleHQiLCJfYXJndW1lbnRzMyIsIl90aGlzNCIsIl9jYWxsZWU2IiwiZGVsYXkiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJzbmFwc2hvdF9uYW1lIiwiY29udGV4dCJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NlcnZpY2Uvc2VydmljZS5qcz9jMTVmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEdsb2JhbCB2YXJpYWJsZXMgLSBOTyBTRU5TSVRJVkUgREFUQSAobm8gdG9rZW5zKVxyXG5sZXQgaW52b2ljZUlkO1xyXG5sZXQgaW52b2ljZU9yZGVybnVtO1xyXG5sZXQgdm1JZDtcclxubGV0IHZtSG9zdG5hbWU7XHJcbmxldCBjc3JmVG9rZW47XHJcblxyXG4vLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmcm9tIGRhdGEgYXR0cmlidXRlcyBvciBnbG9iYWwgdmFyaWFibGVzXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVWYXJpYWJsZXMoKSB7XHJcbiAgICAvLyBHZXQgZGF0YSBmcm9tIG1ldGEgdGFncyBvciBnbG9iYWwgdmFyaWFibGVzIHNldCBpbiBCbGFkZSB0ZW1wbGF0ZVxyXG4gICAgY29uc3QgbWV0YUludm9pY2VJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImludm9pY2UtaWRcIl0nKTtcclxuICAgIGNvbnN0IG1ldGFJbnZvaWNlT3JkZXJudW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJpbnZvaWNlLW9yZGVybnVtXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhVm1JZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cInZtLWlkXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhVm1Ib3N0bmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cInZtLWhvc3RuYW1lXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhQ3NyZlRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpO1xyXG5cclxuICAgIGludm9pY2VJZCA9IG1ldGFJbnZvaWNlSWRcclxuICAgICAgICA/IG1ldGFJbnZvaWNlSWQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxyXG4gICAgICAgIDogd2luZG93Lmludm9pY2VJZDtcclxuICAgIGludm9pY2VPcmRlcm51bSA9IG1ldGFJbnZvaWNlT3JkZXJudW1cclxuICAgICAgICA/IG1ldGFJbnZvaWNlT3JkZXJudW0uZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxyXG4gICAgICAgIDogd2luZG93Lmludm9pY2VPcmRlcm51bTtcclxuICAgIHZtSWQgPSBtZXRhVm1JZCA/IG1ldGFWbUlkLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIikgOiB3aW5kb3cudm1JZDtcclxuICAgIHZtSG9zdG5hbWUgPSBtZXRhVm1Ib3N0bmFtZVxyXG4gICAgICAgID8gbWV0YVZtSG9zdG5hbWUuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxyXG4gICAgICAgIDogd2luZG93LnZtSG9zdG5hbWU7XHJcbiAgICBjc3JmVG9rZW4gPSBtZXRhQ3NyZlRva2VuXHJcbiAgICAgICAgPyBtZXRhQ3NyZlRva2VuLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcclxuICAgICAgICA6IHdpbmRvdy5jc3JmVG9rZW47XHJcbn1cclxuXHJcbi8vIEPhuqV1IGjDrG5oIHRvYXN0IG7hur91IGPDsyB0aOG7g1xyXG5pZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIEZ1aVRvYXN0LmNvbmZpZykge1xyXG4gICAgRnVpVG9hc3QuY29uZmlnKHtcclxuICAgICAgICBwb3NpdGlvbjogXCJ0b3AtY2VudGVyXCIsXHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlLCB0eXBlID0gXCJzdWNjZXNzXCIpIHtcclxuICAgIGlmICh0eXBlID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIEZ1aVRvYXN0LnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIEZ1aVRvYXN0LmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTbmFwc2hvdCgpIHtcclxuICAgIGNvbnN0IHNuYXBzaG90QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmVhdGVTbmFwc2hvdEJ1dHRvblwiKTtcclxuICAgIGlmIChzbmFwc2hvdEJ0biAmJiBzbmFwc2hvdEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgIHByb2R1Y3RfaWQ6IHZtSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgLy8gTk8gQXV0aG9yaXphdGlvbiBoZWFkZXIgLSB1c2luZyBzZXNzaW9uIGF1dGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc25hcHNob3RQcm9taXNlID0gZmV0Y2goXCIvc2VjdXJlL2NyZWF0ZS1zbmFwc2hvdHNcIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksXHJcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcclxuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0ZWQgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgXCJQaGnDqm4gxJHEg25nIG5o4bqtcCDEkcOjIGjhur90IGjhuqFuLCB2dWkgbMOybmcgxJHEg25nIG5o4bqtcCBs4bqhaVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiByZXNwb25zZSBpcyByZWRpcmVjdGVkICh0eXBpY2FsIGZvciBMYXJhdmVsIHJlZGlyZWN0IHJlc3BvbnNlcylcclxuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCkge1xyXG4gICAgICAgICAgICAvLyBFeHRyYWN0IG1lc3NhZ2UgZnJvbSBVUkwgaWYgcG9zc2libGUsIG9yIHNob3cgZ2VuZXJpYyBzdWNjZXNzXHJcbiAgICAgICAgICAgIHJldHVybiBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4gUXXDoSB0csOsbmggc+G6vSBt4bqldCAzLTUgcGjDunQsIHZ1aSBsw7JuZyBjaOG7nSDEkeG7o2kuXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIEpTT04gZmlyc3RcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHRleHQpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiBub3QgSlNPTiwgY2hlY2sgZm9yIEhUTUwgd2l0aCBzdWNjZXNzL2Vycm9yIG1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmNsdWRlcyhcInN1Y2Nlc3NcIikgfHwgcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS5cIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTOG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7ryBsaeG7h3UgdOG7qyBtw6F5IGNo4bunXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIEpTT04gcmVzcG9uc2VcclxuICAgICAgICBpZiAoZGF0YSAmJiAhZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LCB2dWkgbMOybmcgY2jhu50gxJHhu6NpLlwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdFwiO1xyXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgIGRhdGEgJiZcclxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgJiZcclxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEudmFsdWUubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmVycm9yID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nKCkgIT09IFwiW29iamVjdCBPYmplY3RdXCJcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHThu6sgaOG7hyB0aOG7kW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIEZ1aVRvYXN0LnByb21pc2UoXHJcbiAgICAgICAgc25hcHNob3RQcm9taXNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGluZzpcclxuICAgICAgICAgICAgICAgIFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLiAoUXXDoSB0csOsbmggbeG6pXQgMy01IHBow7p0IHZ1aSBsw7JuZyBnaeG7ryB0cmFuZyBraMO0bmcgdOG6r3QhKVwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIHThuqFvIHNuYXBzaG90XCI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlzQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxufVxyXG5cclxuLy8gSGFuZGxlIHNuYXBzaG90IGZvcm0gc3VibWlzc2lvbiB3aXRoIGxvYWRpbmcgbm90aWZpY2F0aW9uXHJcbmZ1bmN0aW9uIGhhbmRsZVNuYXBzaG90U3VibWl0KGV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IHNuYXBzaG90UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIik7XHJcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XHJcblxyXG4gICAgICAgIGZldGNoKGZvcm0uYWN0aW9uLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90ISBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS51cmw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QhIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS50ZXh0KCkudGhlbigodGV4dCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIkzhu5dpIGvhur90IG7hu5FpOiBcIiArIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0eXBlb2YgRnVpVG9hc3QgIT09IFwidW5kZWZpbmVkXCIgJiYgRnVpVG9hc3QucHJvbWlzZSkge1xyXG4gICAgICAgIEZ1aVRvYXN0LnByb21pc2Uoc25hcHNob3RQcm9taXNlLCB7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgfHwgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QhXCI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciB8fCBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdFwiO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIEZ1aVRvYXN0LmxvYWRpbmcoXCLEkGFuZyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90Li4uXCIsIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbGVydChcIsSQYW5nIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuLi5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIikuc3VibWl0KCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc3RhcnRWaXJ0dWFsTWFjaGluZSgpIHtcclxuICAgIGNvbnN0IHN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdGFydFZNQnV0dG9uXCIpO1xyXG4gICAgaWYgKHN0YXJ0QnRuICYmIHN0YXJ0QnRuLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgdm1faWQ6IHZtSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgLy8gTk8gQXV0aG9yaXphdGlvbiBoZWFkZXIgLSB1c2luZyBzZXNzaW9uIGF1dGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RhcnRQcm9taXNlID0gZmV0Y2goXCIvYXBpL3NlY3VyZS9zdGFydC12bVwiLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcclxuICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxyXG4gICAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBcIlBoacOqbiDEkcSDbmcgbmjhuq1wIMSRw6MgaOG6v3QgaOG6oW4sIHZ1aSBsw7JuZyDEkcSDbmcgbmjhuq1wIGzhuqFpXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJM4buXaSDEkeG7i25oIGThuqFuZyBk4buvIGxp4buHdSB04burIG3DoXkgY2jhu6dcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZGF0YS50eXBlID09PVxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29tLnZtd2FyZS52YXBpLnN0ZC5lcnJvcnMuYWxyZWFkeV9pbl9kZXNpcmVkX3N0YXRlXCIgfHxcclxuICAgICAgICAgICAgICAgIChkYXRhLm1lc3NhZ2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSA9PT0gXCJBTFJFQURZX0lOX0RFU0lSRURfU1RBVEVcIilcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiTcOheSBjaOG7pyDEkcOjIMSRxrDhu6NjIGLhuq10XCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEubWVzc2FnZS5lcnJvcl90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgTOG7l2k6ICR7ZGF0YS5tZXNzYWdlLmVycm9yX3R5cGV9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHThu6sgaOG7hyB0aOG7kW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZS5tZXNzYWdlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS52YWx1ZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5lcnJvciA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nKCkgIT09IFwiW29iamVjdCBPYmplY3RdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIEZ1aVRvYXN0LnByb21pc2UoXHJcbiAgICAgICAgc3RhcnRQcm9taXNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGluZzogXCLEkGFuZyBraOG7n2kgxJHhu5luZyBtw6F5IOG6o28uLi5cIixcclxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBraOG7n2kgxJHhu5luZyBtw6F5IOG6o29cIjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZSxcclxuICAgICAgICB9XHJcbiAgICApO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdG9wVmlydHVhbE1hY2hpbmUoKSB7XHJcbiAgICBjb25zdCBzdG9wQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdG9wVk1CdXR0b25cIik7XHJcbiAgICBpZiAoc3RvcEJ0biAmJiBzdG9wQnRuLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgdm1faWQ6IHZtSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiBjc3JmVG9rZW4sXHJcbiAgICAgICAgLy8gTk8gQXV0aG9yaXphdGlvbiBoZWFkZXIgLSB1c2luZyBzZXNzaW9uIGF1dGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RvcFByb21pc2UgPSBmZXRjaChcIi9hcGkvc2VjdXJlL3N0b3Atdm1cIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksXHJcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcclxuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0ZWQgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgXCJQaGnDqm4gxJHEg25nIG5o4bqtcCDEkcOjIGjhur90IGjhuqFuLCB2dWkgbMOybmcgxJHEg25nIG5o4bqtcCBs4bqhaVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTOG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7ryBsaeG7h3UgdOG7qyBtw6F5IGNo4bunXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGRhdGEudHlwZSA9PT1cclxuICAgICAgICAgICAgICAgICAgICBcImNvbS52bXdhcmUudmFwaS5zdGQuZXJyb3JzLmFscmVhZHlfaW5fZGVzaXJlZF9zdGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAoZGF0YS5tZXNzYWdlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUgPT09IFwiQUxSRUFEWV9JTl9ERVNJUkVEX1NUQVRFXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIk3DoXkgY2jhu6cgxJHDoyDEkcaw4bujYyB04bqvdFwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEudmFsdWUubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZygpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBGdWlUb2FzdC5wcm9taXNlKFxyXG4gICAgICAgIHN0b3BQcm9taXNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGluZzogXCLEkGFuZyBk4burbmcgbcOheSDhuqNvLi4uXCIsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZOG7q25nIG3DoXkg4bqjb1wiO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpc0Nsb3NlOiB0cnVlLFxyXG4gICAgICAgIH1cclxuICAgICk7XHJcbn1cclxuXHJcblxyXG4vLyBET00gcmVhZHlcclxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXNcclxuICAgIGluaXRpYWxpemVWYXJpYWJsZXMoKTtcclxuXHJcbiAgICBjb25zdCBzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3RhcnRWTUJ1dHRvblwiKTtcclxuICAgIGNvbnN0IHN0b3BCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0b3BWTUJ1dHRvblwiKTtcclxuICAgIGNvbnN0IHJlc3RhcnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3RhcnRWTUJ1dHRvblwiKTtcclxuICAgIGNvbnN0IHNuYXBzaG90QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmVhdGVTbmFwc2hvdEJ1dHRvblwiKTtcclxuXHJcbiAgICBpZiAoc3RhcnRCdG4pIHtcclxuICAgICAgICBzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBzdGFydFZpcnR1YWxNYWNoaW5lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0b3BCdG4pIHtcclxuICAgICAgICBzdG9wQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHN0b3BWaXJ0dWFsTWFjaGluZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN0YXJ0QnRuKSB7XHJcbiAgICAgICAgcmVzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXN0YXJ0VmlydHVhbE1hY2hpbmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc25hcHNob3RCdG4pIHtcclxuICAgICAgICBzbmFwc2hvdEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBjcmVhdGVTbmFwc2hvdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIFNuYXBzaG90IFRhYmxlIE1hbmFnZW1lbnRcclxuZnVuY3Rpb24gc25hcHNob3RUYWJsZSgpIHtcclxuICAgIC8vIENvbnN0YW50c1xyXG4gICAgY29uc3QgQVBJX0VORFBPSU5UUyA9IHtcclxuICAgICAgICBHRVRfU05BUFNIT1RTOiBcIi9kaWNoLXZ1LWRhbmcta3kvc2VjdXJlL2dldC1zbmFwc2hvdHNcIixcclxuICAgICAgICBSRU1PVkVfU05BUFNIT1Q6IFwiL2RpY2gtdnUtZGFuZy1reS9zZWN1cmUvcmVtb3ZlLXNuYXBzaG90XCIsXHJcbiAgICAgICAgUkVWRVJUX1NOQVBTSE9UOiBcIi9kaWNoLXZ1LWRhbmcta3kvc2VjdXJlL3JldmVydC1zbmFwc2hvdFwiLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBNRVNTQUdFUyA9IHtcclxuICAgICAgICBWTV9JRF9OT1RfRk9VTkQ6IFwiS2jDtG5nIHTDrG0gdGjhuqV5IElEIG3DoXkg4bqjb1wiLFxyXG4gICAgICAgIENPTk5FQ1RJT05fRVJST1I6IFwiS2jDtG5nIHRo4buDIGvhur90IG7hu5FpIMSR4bq/biBtw6F5IGNo4bunXCIsXHJcbiAgICAgICAgR0VORVJJQ19FUlJPUjogXCJDw7MgbOG7l2kgeOG6o3kgcmFcIixcclxuICAgICAgICBERUxFVEVfU1VDQ0VTUzogXCJYw7NhIHNuYXBzaG90IHRow6BuaCBjw7RuZ1wiLFxyXG4gICAgICAgIFJFVkVSVF9TVUNDRVNTOiBcIktow7RpIHBo4bulYyBzbmFwc2hvdCB0aMOgbmggY8O0bmdcIixcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICBzbmFwc2hvdHM6IFtdLFxyXG4gICAgICAgIGVycm9yOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBDYWNoZSDEkeG7gyB0csOhbmggZmV0Y2ggbOG6oWkga2jDtG5nIGPhuqduIHRoaeG6v3RcclxuICAgICAgICBfbGFzdEZldGNoVGltZTogMCxcclxuICAgICAgICBfY2FjaGVUaW1lb3V0OiAzMDAwMCwgLy8gMzAgc2Vjb25kc1xyXG5cclxuICAgICAgICBhc3luYyBmZXRjaFNuYXBzaG90cyhmb3JjZVJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBjYWNoZVxyXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhZm9yY2VSZWZyZXNoICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICBub3cgLSB0aGlzLl9sYXN0RmV0Y2hUaW1lIDwgdGhpcy5fY2FjaGVUaW1lb3V0XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZtSWQgPSB3aW5kb3cudm1JZD8udHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIXZtSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKE1FU1NBR0VTLlZNX0lEX05PVF9GT1VORCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fbWFrZVJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFQSV9FTkRQT0lOVFMuR0VUX1NOQVBTSE9UU1xyXG4gICAgICAgICAgICAgICAgICAgIH0/cHJvZHVjdF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudCh2bUlkKX1gXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NTbmFwc2hvdHNSZXNwb25zZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RGZXRjaFRpbWUgPSBub3c7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihcImZldGNoaW5nIHNuYXBzaG90c1wiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGZvcm1hdFNpemUoc2l6ZUdCLCBzaXplTUIpIHtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLl9jb252ZXJ0VG9CeXRlcyhzaXplR0IsIHNpemVNQik7XHJcbiAgICAgICAgICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuIFwiMCBCXCI7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0Qnl0ZXMoYnl0ZXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFzeW5jIGRlbGV0ZVNuYXBzaG90KHNuYXBzaG90TmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhKGF3YWl0IHRoaXMuX2NvbmZpcm1BY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgXCJYw6FjIG5o4bqtbiB4w7NhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYELhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiB4w7NhIHNuYXBzaG90IFwiJHtzbmFwc2hvdE5hbWV9XCI/IEjDoG5oIMSR4buZbmcgbsOgeSBraMO0bmcgdGjhu4MgaG/DoG4gdMOhYy5gLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiWMOzYVwiXHJcbiAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlU25hcHNob3RBY3Rpb24oXHJcbiAgICAgICAgICAgICAgICBBUElfRU5EUE9JTlRTLlJFTU9WRV9TTkFQU0hPVCxcclxuICAgICAgICAgICAgICAgIHNuYXBzaG90TmFtZSxcclxuICAgICAgICAgICAgICAgIE1FU1NBR0VTLkRFTEVURV9TVUNDRVNTLFxyXG4gICAgICAgICAgICAgICAgXCJkZWxldGluZyBzbmFwc2hvdFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgcmV2ZXJ0U25hcHNob3Qoc25hcHNob3ROYW1lKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICEoYXdhaXQgdGhpcy5fY29uZmlybUFjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBcIljDoWMgbmjhuq1uIGtow7RpIHBo4bulY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGBC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga2jDtGkgcGjhu6VjIHbhu4Egc25hcHNob3QgXCIke3NuYXBzaG90TmFtZX1cIj8gVOG6pXQgY+G6oyBk4buvIGxp4buHdSBoaeG7h24gdOG6oWkgc+G6vSBi4buLIG3huqV0LmAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJLaMO0aSBwaOG7pWNcIlxyXG4gICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVNuYXBzaG90QWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgQVBJX0VORFBPSU5UUy5SRVZFUlRfU05BUFNIT1QsXHJcbiAgICAgICAgICAgICAgICBzbmFwc2hvdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBNRVNTQUdFUy5SRVZFUlRfU1VDQ0VTUyxcclxuICAgICAgICAgICAgICAgIFwicmV2ZXJ0aW5nIHNuYXBzaG90XCIsXHJcbiAgICAgICAgICAgICAgICAyMDAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gUHVibGljIGhlbHBlciBtZXRob2RzXHJcbiAgICAgICAgcmVmcmVzaFNuYXBzaG90cygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hTbmFwc2hvdHModHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZ2V0U25hcHNob3RDb3VudCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3RzLmxlbmd0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBpc0xvYWRpbmcoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaGFzRXJyb3IoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yICE9PSBudWxsO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFByaXZhdGUgaGVscGVyIG1ldGhvZHNcclxuICAgICAgICBfc2V0RXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3RzID0gW107XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgX21ha2VSZXF1ZXN0KHVybCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgICAgICAgICAgICAuLi5kZWZhdWx0T3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9wcm9jZXNzU25hcHNob3RzUmVzcG9uc2UoZGF0YSkge1xyXG4gICAgICAgICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IHJlc3BvbnNlIHN0cnVjdHVyZXNcclxuICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlICYmIGRhdGEuZGF0YT8uc25hcHNob3RzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cyA9IGRhdGEuZGF0YS5zbmFwc2hvdHM7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSB8fCBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgdOG6o2kgZGFuaCBzw6FjaCBzbmFwc2hvdFwiXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc25hcHNob3RzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cyA9IGRhdGEuc25hcHNob3RzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9jb252ZXJ0VG9CeXRlcyhzaXplR0IsIHNpemVNQikge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZUdCKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzaXplR0IpICogMTAyNCAqKiAzOyAvLyBHQiB0byBieXRlc1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNpemVNQikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2l6ZU1CKSAqIDEwMjQgKiogMjsgLy8gTUIgdG8gYnl0ZXNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZm9ybWF0Qnl0ZXMoYnl0ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdW5pdHMgPSBbXCJCXCIsIFwiS0JcIiwgXCJNQlwiLCBcIkdCXCIsIFwiVEJcIl07XHJcbiAgICAgICAgICAgIGNvbnN0IGsgPSAxMDI0O1xyXG4gICAgICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgX2NvbmZpcm1BY3Rpb24odGl0bGUsIHRleHQsIGNvbmZpcm1UZXh0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgIHRleHQsXHJcbiAgICAgICAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcclxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IHRpdGxlLmluY2x1ZGVzKFwieMOzYVwiKSA/IFwiI2QzM1wiIDogXCIjMzA4NWQ2XCIsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogdGl0bGUuaW5jbHVkZXMoXCJ4w7NhXCIpID8gXCIjMzA4NWQ2XCIgOiBcIiNkMzNcIixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBjb25maXJtVGV4dCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiSOG7p3kgYuG7j1wiLFxyXG4gICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pc0NvbmZpcm1lZDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhc3luYyBfZXhlY3V0ZVNuYXBzaG90QWN0aW9uKFxyXG4gICAgICAgICAgICBlbmRwb2ludCxcclxuICAgICAgICAgICAgc25hcHNob3ROYW1lLFxyXG4gICAgICAgICAgICBzdWNjZXNzTWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3JDb250ZXh0LFxyXG4gICAgICAgICAgICBkZWxheSA9IDEwMDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLl9tYWtlUmVxdWVzdChlbmRwb2ludCwge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2lkOiB3aW5kb3cudm1JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RfbmFtZTogc25hcHNob3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihkYXRhLm1lc3NhZ2UgfHwgc3VjY2Vzc01lc3NhZ2UsIFwic3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaFNuYXBzaG90cygpLCBkZWxheSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtNRVNTQUdFUy5HRU5FUklDX0VSUk9SfSBraGkgJHtlcnJvckNvbnRleHR9YFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlcnJvckNvbnRleHQsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9oYW5kbGVFcnJvcihjb250ZXh0LCBlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciAke2NvbnRleHR9OmAsIGVycm9yKTtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgfHwgTUVTU0FHRVMuQ09OTkVDVElPTl9FUlJPUjtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmluY2x1ZGVzKFwiZmV0Y2hpbmdcIikpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIE1ha2Ugc25hcHNob3RUYWJsZSBhdmFpbGFibGUgZ2xvYmFsbHkgZm9yIEFscGluZS5qc1xyXG53aW5kb3cuc25hcHNob3RUYWJsZSA9IHNuYXBzaG90VGFibGU7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OytDQUNBLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxR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\n//# sourceURL=webpack-internal:///./resources/js/service/service.js\n");
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/
|
|
/******/ // startup
|
|
/******/ // Load entry module and return exports
|
|
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
|
/******/ var __webpack_exports__ = {};
|
|
/******/ __webpack_modules__["./resources/js/service/service.js"]();
|
|
/******/
|
|
/******/ })()
|
|
; |