32 lines
139 KiB
JavaScript
32 lines
139 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 _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 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 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 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 _callee5() {\n var snapshotBtn, requestBody, headers, snapshotPromise;\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n snapshotBtn = document.getElementById('createSnapshotButton');\n if (!(snapshotBtn && snapshotBtn.disabled)) {\n _context5.next = 3;\n break;\n }\n return _context5.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 _callee4(response) {\n var data, text, errorMessage;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context4.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 _context4.next = 4;\n break;\n }\n return _context4.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 _context4.prev = 4;\n _context4.next = 7;\n return response.text();\n case 7:\n text = _context4.sent;\n _context4.prev = 8;\n data = JSON.parse(text);\n _context4.next = 20;\n break;\n case 12:\n _context4.prev = 12;\n _context4.t0 = _context4[\"catch\"](8);\n if (!(text.includes('success') || response.ok)) {\n _context4.next = 19;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context4.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 _context4.next = 25;\n break;\n case 22:\n _context4.prev = 22;\n _context4.t1 = _context4[\"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 _context4.next = 30;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context4.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 _context4.stop();\n }\n }, _callee4, 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 _context5.stop();\n }\n }, _callee5);\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 _callee7() {\n var startBtn, requestBody, headers, startPromise;\n return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n startBtn = document.getElementById('startVMButton');\n if (!(startBtn && startBtn.disabled)) {\n _context7.next = 3;\n break;\n }\n return _context7.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 _callee6(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context6.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 _context6.prev = 2;\n _context6.next = 5;\n return response.json();\n case 5:\n data = _context6.sent;\n _context6.next = 11;\n break;\n case 8:\n _context6.prev = 8;\n _context6.t0 = _context6[\"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 _context6.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context6.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 _context6.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context6.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 _context6.stop();\n }\n }, _callee6, 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 _context7.stop();\n }\n }, _callee7);\n }));\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction stopVirtualMachine() {\n return _stopVirtualMachine.apply(this, arguments);\n}\nfunction _stopVirtualMachine() {\n _stopVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {\n var stopBtn, requestBody, headers, stopPromise;\n return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n stopBtn = document.getElementById('stopVMButton');\n if (!(stopBtn && stopBtn.disabled)) {\n _context9.next = 3;\n break;\n }\n return _context9.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 _callee8(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context8.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 _context8.prev = 2;\n _context8.next = 5;\n return response.json();\n case 5:\n data = _context8.sent;\n _context8.next = 11;\n break;\n case 8:\n _context8.prev = 8;\n _context8.t0 = _context8[\"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 _context8.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context8.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 _context8.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context8.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 _context8.stop();\n }\n }, _callee8, 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 _context9.stop();\n }\n }, _callee9);\n }));\n return _stopVirtualMachine.apply(this, arguments);\n}\nfunction restartVirtualMachine() {\n return _restartVirtualMachine.apply(this, arguments);\n} // DOM ready\nfunction _restartVirtualMachine() {\n _restartVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {\n var restartBtn, restartPromise;\n return _regeneratorRuntime().wrap(function _callee11$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n restartBtn = document.getElementById('restartVMButton');\n if (!(restartBtn && restartBtn.disabled)) {\n _context11.next = 3;\n break;\n }\n return _context11.abrupt(\"return\");\n case 3:\n restartPromise = fetch(\"/service/\".concat(invoiceId, \"/vm/toggle\"), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-TOKEN': csrfToken\n },\n body: JSON.stringify({\n action: 'restart'\n })\n }).then(/*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee10$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n _context10.prev = 0;\n _context10.next = 3;\n return response.json();\n case 3:\n data = _context10.sent;\n _context10.next = 9;\n break;\n case 6:\n _context10.prev = 6;\n _context10.t0 = _context10[\"catch\"](0);\n throw new Error('Lỗi định dạng dữ liệu từ máy chủ');\n case 9:\n if (!data.success) {\n _context10.next = 14;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context10.abrupt(\"return\", data.message);\n case 14:\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.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 } else if (typeof data === 'string') {\n errorMessage = data;\n }\n throw new Error(errorMessage);\n case 17:\n case \"end\":\n return _context10.stop();\n }\n }, _callee10, null, [[0, 6]]);\n }));\n return function (_x4) {\n return _ref4.apply(this, arguments);\n };\n }());\n FuiToast.promise(restartPromise, {\n loading: 'Đang khởi động lại máy ảo...',\n success: function success(data) {\n return data;\n },\n error: function error(_error5) {\n console.error(_error5);\n return _error5.message || 'Có lỗi xảy ra khi khởi động lại máy ảo';\n }\n }, {\n isClose: true\n });\n case 5:\n case \"end\":\n return _context11.stop();\n }\n }, _callee11);\n }));\n return _restartVirtualMachine.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 return {\n loading: false,\n snapshots: [],\n error: null,\n fetchSnapshots: function fetchSnapshots() {\n var _this = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var vmId, response, data;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _this.loading = true;\n _this.error = null;\n vmId = window.vmId || '';\n if (vmId) {\n _context.next = 7;\n break;\n }\n _this.loading = false;\n _this.error = 'Không tìm thấy ID máy ảo';\n return _context.abrupt(\"return\");\n case 7:\n _context.prev = 7;\n _context.next = 10;\n return fetch(\"/secure/get-snapshots?product_id=\".concat(vmId), {\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 case 10:\n response = _context.sent;\n if (response.ok) {\n _context.next = 13;\n break;\n }\n throw new Error(\"HTTP error! status: \".concat(response.status));\n case 13:\n _context.next = 15;\n return response.json();\n case 15:\n data = _context.sent;\n // Kiểm tra response structure từ API thực tế\n if (data.error === false && data.data && data.data.snapshots) {\n _this.snapshots = data.data.snapshots;\n } else if (data.error === true) {\n _this.error = data.message || 'Có lỗi xảy ra khi tải danh sách snapshot';\n _this.snapshots = [];\n } else if (data.snapshots) {\n // Fallback cho trường hợp data trực tiếp\n _this.snapshots = data.snapshots;\n } else {\n _this.snapshots = [];\n }\n _context.next = 24;\n break;\n case 19:\n _context.prev = 19;\n _context.t0 = _context[\"catch\"](7);\n console.error('Error fetching snapshots:', _context.t0);\n _this.error = 'Không thể kết nối đến máy chủ';\n _this.snapshots = [];\n case 24:\n _context.prev = 24;\n _this.loading = false;\n return _context.finish(24);\n case 27:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[7, 19, 24, 27]]);\n }))();\n },\n formatSize: function formatSize(sizeGB, sizeMB) {\n // Convert to bytes first\n var bytes = 0;\n if (sizeGB) {\n bytes = parseFloat(sizeGB) * 1024 * 1024 * 1024; // GB to bytes\n } else if (sizeMB) {\n bytes = parseFloat(sizeMB) * 1024 * 1024; // MB to bytes\n }\n if (bytes === 0) return '0 B';\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 size + ' ' + units[i];\n },\n deleteSnapshot: function deleteSnapshot(snapshotName) {\n var _this2 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n var result, response, data;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return Swal.fire({\n title: 'Xác nhận xóa',\n text: \"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.\"),\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#d33',\n cancelButtonColor: '#3085d6',\n confirmButtonText: 'Xóa',\n cancelButtonText: 'Hủy bỏ',\n reverseButtons: true\n });\n case 2:\n result = _context2.sent;\n if (result.isConfirmed) {\n _context2.next = 5;\n break;\n }\n return _context2.abrupt(\"return\");\n case 5:\n _context2.prev = 5;\n _context2.next = 8;\n return fetch('/secure/remove-snapshot', {\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 credentials: 'same-origin'\n });\n case 8:\n response = _context2.sent;\n _context2.next = 11;\n return response.json();\n case 11:\n data = _context2.sent;\n if (!(data.error === false)) {\n _context2.next = 17;\n break;\n }\n showNotification(data.message || 'Xóa snapshot thành công', 'success');\n // Refresh snapshot list after successful deletion\n setTimeout(function () {\n return _this2.fetchSnapshots();\n }, 1000);\n _context2.next = 18;\n break;\n case 17:\n throw new Error(data.message || 'Có lỗi xảy ra khi xóa snapshot');\n case 18:\n _context2.next = 24;\n break;\n case 20:\n _context2.prev = 20;\n _context2.t0 = _context2[\"catch\"](5);\n console.error('Error deleting snapshot:', _context2.t0);\n showNotification(_context2.t0.message || 'Có lỗi xảy ra khi xóa snapshot', 'error');\n case 24:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[5, 20]]);\n }))();\n },\n revertSnapshot: function revertSnapshot(snapshotName) {\n var _this3 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n var result, response, data;\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return Swal.fire({\n title: 'Xác nhận khôi phục',\n text: \"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.\"),\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#3085d6',\n cancelButtonColor: '#d33',\n confirmButtonText: 'Khôi phục',\n cancelButtonText: 'Hủy bỏ',\n reverseButtons: true\n });\n case 2:\n result = _context3.sent;\n if (result.isConfirmed) {\n _context3.next = 5;\n break;\n }\n return _context3.abrupt(\"return\");\n case 5:\n _context3.prev = 5;\n _context3.next = 8;\n return fetch('/secure/revert-snapshot', {\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 credentials: 'same-origin'\n });\n case 8:\n response = _context3.sent;\n _context3.next = 11;\n return response.json();\n case 11:\n data = _context3.sent;\n if (!(data.error === false)) {\n _context3.next = 17;\n break;\n }\n showNotification(data.message || 'Khôi phục snapshot thành công', 'success');\n // Refresh snapshot list after successful revert\n setTimeout(function () {\n return _this3.fetchSnapshots();\n }, 2000);\n _context3.next = 18;\n break;\n case 17:\n throw new Error(data.message || 'Có lỗi xảy ra khi khôi phục snapshot');\n case 18:\n _context3.next = 24;\n break;\n case 20:\n _context3.prev = 20;\n _context3.t0 = _context3[\"catch\"](5);\n console.error('Error reverting snapshot:', _context3.t0);\n showNotification(_context3.t0.message || 'Có lỗi xảy ra khi khôi phục snapshot', 'error');\n case 24:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, null, [[5, 20]]);\n }))();\n },\n // Helper method to refresh snapshots\n refreshSnapshots: function refreshSnapshots() {\n this.fetchSnapshots();\n },\n // Helper method to get snapshot count\n getSnapshotCount: function getSnapshotCount() {\n return this.snapshots.length;\n },\n // Helper method to check if snapshots are loading\n isLoading: function isLoading() {\n return this.loading;\n },\n // Helper method to check if there's an error\n hasError: function hasError() {\n return this.error !== null;\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiaW52b2ljZUlkIiwidm1JZCIsInZtSG9zdG5hbWUiLCJjc3JmVG9rZW4iLCJpbml0aWFsaXplVmFyaWFibGVzIiwibWV0YUludm9pY2VJZCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIm1ldGFWbUlkIiwibWV0YVZtSG9zdG5hbWUiLCJtZXRhQ3NyZlRva2VuIiwiZ2V0QXR0cmlidXRlIiwid2luZG93IiwiRnVpVG9hc3QiLCJjb25maWciLCJwb3NpdGlvbiIsInNob3dOb3RpZmljYXRpb24iLCJtZXNzYWdlIiwidW5kZWZpbmVkIiwic3VjY2VzcyIsImVycm9yIiwiY3JlYXRlU25hcHNob3QiLCJfY3JlYXRlU25hcHNob3QiLCJfY2FsbGVlNSIsInNuYXBzaG90QnRuIiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwic25hcHNob3RQcm9taXNlIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXNhYmxlZCIsInByb2R1Y3RfaWQiLCJmZXRjaCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiY3JlZGVudGlhbHMiLCJfcmVmIiwiX2NhbGxlZTQiLCJyZXNwb25zZSIsImRhdGEiLCJ0ZXh0IiwiZXJyb3JNZXNzYWdlIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwicmVkaXJlY3RlZCIsInN0YXR1cyIsInBhcnNlIiwidDAiLCJpbmNsdWRlcyIsIm9rIiwic2V0VGltZW91dCIsImxvY2F0aW9uIiwicmVsb2FkIiwidDEiLCJtZXNzYWdlcyIsImRlZmF1bHRfbWVzc2FnZSIsImVycm9yX3R5cGUiLCJjb25jYXQiLCJ0b1N0cmluZyIsIl94IiwicHJvbWlzZSIsImxvYWRpbmciLCJjb25zb2xlIiwiaXNDbG9zZSIsImhhbmRsZVNuYXBzaG90U3VibWl0IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInJlamVjdCIsImZvcm0iLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYWN0aW9uIiwiaHJlZiIsInVybCIsImR1cmF0aW9uIiwiYWxlcnQiLCJzdWJtaXQiLCJzdGFydFZpcnR1YWxNYWNoaW5lIiwiX3N0YXJ0VmlydHVhbE1hY2hpbmUiLCJfY2FsbGVlNyIsInN0YXJ0QnRuIiwic3RhcnRQcm9taXNlIiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3Iiwidm1faWQiLCJfcmVmMiIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwianNvbiIsIl94MiIsInN0b3BWaXJ0dWFsTWFjaGluZSIsIl9zdG9wVmlydHVhbE1hY2hpbmUiLCJfY2FsbGVlOSIsInN0b3BCdG4iLCJzdG9wUHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsIl9yZWYzIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfeDMiLCJyZXN0YXJ0VmlydHVhbE1hY2hpbmUiLCJfcmVzdGFydFZpcnR1YWxNYWNoaW5lIiwiX2NhbGxlZTExIiwicmVzdGFydEJ0biIsInJlc3RhcnRQcm9taXNlIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfcmVmNCIsIl9jYWxsZWUxMCIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3g0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInN0b3BQcm9wYWdhdGlvbiIsInNuYXBzaG90VGFibGUiLCJzbmFwc2hvdHMiLCJmZXRjaFNuYXBzaG90cyIsIl90aGlzIiwiX2NhbGxlZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJmb3JtYXRTaXplIiwic2l6ZUdCIiwic2l6ZU1CIiwiYnl0ZXMiLCJwYXJzZUZsb2F0IiwidW5pdHMiLCJrIiwiTWF0aCIsImZsb29yIiwibG9nIiwic2l6ZSIsInBvdyIsInRvRml4ZWQiLCJkZWxldGVTbmFwc2hvdCIsInNuYXBzaG90TmFtZSIsIl90aGlzMiIsIl9jYWxsZWUyIiwicmVzdWx0IiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiU3dhbCIsImZpcmUiLCJ0aXRsZSIsImljb24iLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsImNhbmNlbEJ1dHRvblRleHQiLCJyZXZlcnNlQnV0dG9ucyIsImlzQ29uZmlybWVkIiwic25hcHNob3RfbmFtZSIsInJldmVydFNuYXBzaG90IiwiX3RoaXMzIiwiX2NhbGxlZTMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJyZWZyZXNoU25hcHNob3RzIiwiZ2V0U25hcHNob3RDb3VudCIsImlzTG9hZGluZyIsImhhc0Vycm9yIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zZXJ2aWNlL3NlcnZpY2UuanM/YzE1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHbG9iYWwgdmFyaWFibGVzIC0gTk8gU0VOU0lUSVZFIERBVEEgKG5vIHRva2VucylcclxubGV0IGludm9pY2VJZDtcclxubGV0IHZtSWQ7XHJcbmxldCB2bUhvc3RuYW1lO1xyXG5sZXQgY3NyZlRva2VuO1xyXG5cclxuLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMgZnJvbSBkYXRhIGF0dHJpYnV0ZXMgb3IgZ2xvYmFsIHZhcmlhYmxlc1xyXG5mdW5jdGlvbiBpbml0aWFsaXplVmFyaWFibGVzKCkge1xyXG4gICAgLy8gR2V0IGRhdGEgZnJvbSBtZXRhIHRhZ3Mgb3IgZ2xvYmFsIHZhcmlhYmxlcyBzZXQgaW4gQmxhZGUgdGVtcGxhdGVcclxuICAgIGNvbnN0IG1ldGFJbnZvaWNlSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJpbnZvaWNlLWlkXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhVm1JZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cInZtLWlkXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhVm1Ib3N0bmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cInZtLWhvc3RuYW1lXCJdJyk7XHJcbiAgICBjb25zdCBtZXRhQ3NyZlRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpO1xyXG4gICAgXHJcbiAgICBpbnZvaWNlSWQgPSBtZXRhSW52b2ljZUlkID8gbWV0YUludm9pY2VJZC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKSA6IHdpbmRvdy5pbnZvaWNlSWQ7XHJcbiAgICB2bUlkID0gbWV0YVZtSWQgPyBtZXRhVm1JZC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKSA6IHdpbmRvdy52bUlkO1xyXG4gICAgdm1Ib3N0bmFtZSA9IG1ldGFWbUhvc3RuYW1lID8gbWV0YVZtSG9zdG5hbWUuZ2V0QXR0cmlidXRlKCdjb250ZW50JykgOiB3aW5kb3cudm1Ib3N0bmFtZTtcclxuICAgIGNzcmZUb2tlbiA9IG1ldGFDc3JmVG9rZW4gPyBtZXRhQ3NyZlRva2VuLmdldEF0dHJpYnV0ZSgnY29udGVudCcpIDogd2luZG93LmNzcmZUb2tlbjtcclxufVxyXG5cclxuLy8gQ+G6pXUgaMOsbmggdG9hc3QgbuG6v3UgY8OzIHRo4buDXHJcbmlmICh0eXBlb2YgRnVpVG9hc3QgIT09ICd1bmRlZmluZWQnICYmIEZ1aVRvYXN0LmNvbmZpZykge1xyXG4gICAgRnVpVG9hc3QuY29uZmlnKHtcclxuICAgICAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInXHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlLCB0eXBlID0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgRnVpVG9hc3Quc3VjY2VzcyhtZXNzYWdlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgRnVpVG9hc3QuZXJyb3IobWVzc2FnZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNuYXBzaG90KCkge1xyXG4gICAgY29uc3Qgc25hcHNob3RCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3JlYXRlU25hcHNob3RCdXR0b24nKTtcclxuICAgIGlmIChzbmFwc2hvdEJ0biAmJiBzbmFwc2hvdEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgIHByb2R1Y3RfaWQ6IHZtSWRcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdYLUNTUkYtVE9LRU4nOiBjc3JmVG9rZW5cclxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzbmFwc2hvdFByb21pc2UgPSBmZXRjaCgnL3NlY3VyZS9jcmVhdGUtc25hcHNob3RzJywge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxyXG4gICAgICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nXHJcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGlzIHJlZGlyZWN0ZWQgKHR5cGljYWwgZm9yIExhcmF2ZWwgcmVkaXJlY3QgcmVzcG9uc2VzKVxyXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkKSB7XHJcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgbWVzc2FnZSBmcm9tIFVSTCBpZiBwb3NzaWJsZSwgb3Igc2hvdyBnZW5lcmljIHN1Y2Nlc3NcclxuICAgICAgICAgICAgcmV0dXJuICfEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LCB2dWkgbMOybmcgY2jhu50gxJHhu6NpLic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIEpTT04gZmlyc3RcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHRleHQpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiBub3QgSlNPTiwgY2hlY2sgZm9yIEhUTUwgd2l0aCBzdWNjZXNzL2Vycm9yIG1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmNsdWRlcygnc3VjY2VzcycpIHx8IHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnxJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0PDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0zhu5dpIMSR4buLbmggZOG6oW5nIGThu68gbGnhu4d1IHThu6sgbcOheSBjaOG7pycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIEpTT04gcmVzcG9uc2VcclxuICAgICAgICBpZiAoZGF0YSAmJiAhZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEubWVzc2FnZSB8fCAnxJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS4nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdCc7XHJcbiAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubWVzc2FnZS5tZXNzYWdlcyAmJiBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0uZGVmYXVsdF9tZXNzYWdlIHx8IGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0PDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLnZhbHVlICYmIGRhdGEudmFsdWUubWVzc2FnZXMgJiYgZGF0YS52YWx1ZS5tZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLnZhbHVlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yLnRvU3RyaW5nICYmIGRhdGEuZXJyb3IudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmcnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBGdWlUb2FzdC5wcm9taXNlKFxyXG4gICAgICAgIHNuYXBzaG90UHJvbWlzZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6ICfEkGFuZyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90Li4uIChRdcOhIHRyw6xuaCBt4bqldCAzLTUgcGjDunQgdnVpIGzDsm5nIGdp4buvIHRyYW5nIGtow7RuZyB04bqvdCEpJyxcclxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEga2hpIHThuqFvIHNuYXBzaG90JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpc0Nsb3NlOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxufVxyXG5cclxuLy8gSGFuZGxlIHNuYXBzaG90IGZvcm0gc3VibWlzc2lvbiB3aXRoIGxvYWRpbmcgbm90aWZpY2F0aW9uXHJcbmZ1bmN0aW9uIGhhbmRsZVNuYXBzaG90U3VibWl0KGV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICBjb25zdCBzbmFwc2hvdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbmFwc2hvdEZvcm0nKTtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcclxuICAgICAgICBcclxuICAgICAgICBmZXRjaChmb3JtLmFjdGlvbiwge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgYm9keTogZm9ybURhdGEsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiBjc3JmVG9rZW5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnxJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90ISBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dC4nKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVzcG9uc2UudXJsO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCfEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QhIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LicpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS50ZXh0KCkudGhlbih0ZXh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0PDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCgnTOG7l2kga+G6v3QgbuG7kWk6ICcgKyBlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSAndW5kZWZpbmVkJyAmJiBGdWlUb2FzdC5wcm9taXNlKSB7XHJcbiAgICAgICAgRnVpVG9hc3QucHJvbWlzZShzbmFwc2hvdFByb21pc2UsIHtcclxuICAgICAgICAgICAgbG9hZGluZzogJ8SQYW5nIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuLi4nLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgfHwgJ8SQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCEnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgfHwgJ0PDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBGdWlUb2FzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgRnVpVG9hc3QubG9hZGluZygnxJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLicsIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbGVydCgnxJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NuYXBzaG90Rm9ybScpLnN1Ym1pdCgpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0VmlydHVhbE1hY2hpbmUoKSB7XHJcbiAgICBjb25zdCBzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGFydFZNQnV0dG9uJyk7XHJcbiAgICBpZiAoc3RhcnRCdG4gJiYgc3RhcnRCdG4uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICB2bV9pZDogdm1JZFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnWC1DU1JGLVRPS0VOJzogY3NyZlRva2VuXHJcbiAgICAgICAgLy8gTk8gQXV0aG9yaXphdGlvbiBoZWFkZXIgLSB1c2luZyBzZXNzaW9uIGF1dGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RhcnRQcm9taXNlID0gZmV0Y2goJy9hcGkvc2VjdXJlL3N0YXJ0LXZtJywge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxyXG4gICAgICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nXHJcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0zhu5dpIMSR4buLbmggZOG6oW5nIGThu68gbGnhu4d1IHThu6sgbcOheSBjaOG7pycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb20udm13YXJlLnZhcGkuc3RkLmVycm9ycy5hbHJlYWR5X2luX2Rlc2lyZWRfc3RhdGUnIHx8XHJcbiAgICAgICAgICAgICAgICAoZGF0YS5tZXNzYWdlICYmIGRhdGEubWVzc2FnZS5lcnJvcl90eXBlID09PSAnQUxSRUFEWV9JTl9ERVNJUkVEX1NUQVRFJykpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ03DoXkgY2jhu6cgxJHDoyDEkcaw4bujYyBi4bqtdCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ0PDsyBs4buXaSB44bqjeSByYSc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiYgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2UgfHwgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1lc3NhZ2UgfHwgJ0PDsyBs4buXaSB44bqjeSByYSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBM4buXaTogJHtkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0PDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnZhbHVlICYmIGRhdGEudmFsdWUubWVzc2FnZXMgJiYgZGF0YS52YWx1ZS5tZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS52YWx1ZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yLnRvU3RyaW5nICYmIGRhdGEuZXJyb3IudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIEZ1aVRvYXN0LnByb21pc2UoXHJcbiAgICAgICAgc3RhcnRQcm9taXNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbG9hZGluZzogJ8SQYW5nIGto4bufaSDEkeG7mW5nIG3DoXkg4bqjby4uLicsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBraOG7n2kgxJHhu5luZyBtw6F5IOG6o28nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlzQ2xvc2U6IHRydWVcclxuICAgICAgICB9XHJcbiAgICApO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdG9wVmlydHVhbE1hY2hpbmUoKSB7XHJcbiAgICBjb25zdCBzdG9wQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0b3BWTUJ1dHRvbicpO1xyXG4gICAgaWYgKHN0b3BCdG4gJiYgc3RvcEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgIHZtX2lkOiB2bUlkXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdYLUNTUkYtVE9LRU4nOiBjc3JmVG9rZW5cclxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzdG9wUHJvbWlzZSA9IGZldGNoKCcvYXBpL3NlY3VyZS9zdG9wLXZtJywge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxyXG4gICAgICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nXHJcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0zhu5dpIMSR4buLbmggZOG6oW5nIGThu68gbGnhu4d1IHThu6sgbcOheSBjaOG7pycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb20udm13YXJlLnZhcGkuc3RkLmVycm9ycy5hbHJlYWR5X2luX2Rlc2lyZWRfc3RhdGUnIHx8XHJcbiAgICAgICAgICAgICAgICAoZGF0YS5tZXNzYWdlICYmIGRhdGEubWVzc2FnZS5lcnJvcl90eXBlID09PSAnQUxSRUFEWV9JTl9ERVNJUkVEX1NUQVRFJykpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ03DoXkgY2jhu6cgxJHDoyDEkcaw4bujYyB04bqvdCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ0PDsyBs4buXaSB44bqjeSByYSc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiYgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2UgfHwgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1lc3NhZ2UgfHwgJ0PDsyBs4buXaSB44bqjeSByYSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBM4buXaTogJHtkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0PDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnZhbHVlICYmIGRhdGEudmFsdWUubWVzc2FnZXMgJiYgZGF0YS52YWx1ZS5tZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS52YWx1ZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yLnRvU3RyaW5nICYmIGRhdGEuZXJyb3IudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIEZ1aVRvYXN0LnByb21pc2UoXHJcbiAgICAgICAgc3RvcFByb21pc2UsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsb2FkaW5nOiAnxJBhbmcgZOG7q25nIG3DoXkg4bqjby4uLicsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBk4burbmcgbcOheSDhuqNvJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpc0Nsb3NlOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVzdGFydFZpcnR1YWxNYWNoaW5lKCkge1xyXG4gICAgY29uc3QgcmVzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN0YXJ0Vk1CdXR0b24nKTtcclxuICAgIGlmIChyZXN0YXJ0QnRuICYmIHJlc3RhcnRCdG4uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZXN0YXJ0UHJvbWlzZSA9IGZldGNoKGAvc2VydmljZS8ke2ludm9pY2VJZH0vdm0vdG9nZ2xlYCwge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IGNzcmZUb2tlblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBhY3Rpb246ICdyZXN0YXJ0J1xyXG4gICAgICAgIH0pXHJcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0zhu5dpIMSR4buLbmggZOG6oW5nIGThu68gbGnhu4d1IHThu6sgbcOheSBjaOG7pycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ0PDsyBs4buXaSB44bqjeSByYSc7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiYgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fCBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tZXNzYWdlIHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0PDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmVycm9yID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvci50b1N0cmluZyAmJiBkYXRhLmVycm9yLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnQ8OzIGzhu5dpIHjhuqN5IHJhIHThu6sgaOG7hyB0aOG7kW5nJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIEZ1aVRvYXN0LnByb21pc2UoXHJcbiAgICAgICAgcmVzdGFydFByb21pc2UsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsb2FkaW5nOiAnxJBhbmcga2jhu59pIMSR4buZbmcgbOG6oWkgbcOheSDhuqNvLi4uJyxcclxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGto4bufaSDEkeG7mW5nIGzhuqFpIG3DoXkg4bqjbyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICk7XHJcblxyXG5cclxuICAgIFxyXG59XHJcblxyXG4vLyBET00gcmVhZHlcclxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXNcclxuICAgIGluaXRpYWxpemVWYXJpYWJsZXMoKTtcclxuICAgIFxyXG4gICAgY29uc3Qgc3RhcnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhcnRWTUJ1dHRvbicpO1xyXG4gICAgY29uc3Qgc3RvcEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdG9wVk1CdXR0b24nKTsgXHJcbiAgICBjb25zdCByZXN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3RhcnRWTUJ1dHRvbicpO1xyXG4gICAgY29uc3Qgc25hcHNob3RCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3JlYXRlU25hcHNob3RCdXR0b24nKTtcclxuXHJcbiAgICBpZiAoc3RhcnRCdG4pIHtcclxuICAgICAgICBzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBzdGFydFZpcnR1YWxNYWNoaW5lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0b3BCdG4pIHtcclxuICAgICAgICBzdG9wQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHN0b3BWaXJ0dWFsTWFjaGluZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN0YXJ0QnRuKSB7XHJcbiAgICAgICAgcmVzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXN0YXJ0VmlydHVhbE1hY2hpbmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc25hcHNob3RCdG4pIHtcclxuICAgICAgICBzbmFwc2hvdEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBjcmVhdGVTbmFwc2hvdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIFNuYXBzaG90IFRhYmxlIE1hbmFnZW1lbnRcclxuZnVuY3Rpb24gc25hcHNob3RUYWJsZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgc25hcHNob3RzOiBbXSxcclxuICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICBcclxuICAgICAgICBhc3luYyBmZXRjaFNuYXBzaG90cygpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB2bUlkID0gd2luZG93LnZtSWQgfHwgJyc7XHJcbiAgICAgICAgICAgIGlmICghdm1JZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0tow7RuZyB0w6xtIHRo4bqleSBJRCBtw6F5IOG6o28nO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL3NlY3VyZS9nZXQtc25hcHNob3RzP3Byb2R1Y3RfaWQ9JHt2bUlkfWAsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IGNzcmZUb2tlbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIHJlc3BvbnNlIHN0cnVjdHVyZSB04burIEFQSSB0aOG7sWMgdOG6v1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlICYmIGRhdGEuZGF0YSAmJiBkYXRhLmRhdGEuc25hcHNob3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLmRhdGEuc25hcHNob3RzO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGRhdGEubWVzc2FnZSB8fCAnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqjaSBkYW5oIHPDoWNoIHNuYXBzaG90JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnNuYXBzaG90cykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIGNobyB0csaw4budbmcgaOG7o3AgZGF0YSB0cuG7sWMgdGnhur9wXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLnNuYXBzaG90cztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHNuYXBzaG90czonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0tow7RuZyB0aOG7gyBr4bq/dCBu4buRaSDEkeG6v24gbcOheSBjaOG7pyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90cyA9IFtdO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBmb3JtYXRTaXplKHNpemVHQiwgc2l6ZU1CKSB7XHJcbiAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gYnl0ZXMgZmlyc3RcclxuICAgICAgICAgICAgbGV0IGJ5dGVzID0gMDtcclxuICAgICAgICAgICAgaWYgKHNpemVHQikge1xyXG4gICAgICAgICAgICAgICAgYnl0ZXMgPSBwYXJzZUZsb2F0KHNpemVHQikgKiAxMDI0ICogMTAyNCAqIDEwMjQ7IC8vIEdCIHRvIGJ5dGVzXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2l6ZU1CKSB7XHJcbiAgICAgICAgICAgICAgICBieXRlcyA9IHBhcnNlRmxvYXQoc2l6ZU1CKSAqIDEwMjQgKiAxMDI0OyAvLyBNQiB0byBieXRlc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAnMCBCJztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XHJcbiAgICAgICAgICAgIGNvbnN0IGsgPSAxMDI0O1xyXG4gICAgICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzaXplICsgJyAnICsgdW5pdHNbaV07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXN5bmMgZGVsZXRlU25hcHNob3Qoc25hcHNob3ROYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1jDoWMgbmjhuq1uIHjDs2EnLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogYELhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiB4w7NhIHNuYXBzaG90IFwiJHtzbmFwc2hvdE5hbWV9XCI/IEjDoG5oIMSR4buZbmcgbsOgeSBraMO0bmcgdGjhu4MgaG/DoG4gdMOhYy5gLFxyXG4gICAgICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogJyNkMzMnLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6ICcjMzA4NWQ2JyxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnWMOzYScsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnSOG7p3kgYuG7jycsXHJcbiAgICAgICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmlzQ29uZmlybWVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL3NlY3VyZS9yZW1vdmUtc25hcHNob3QnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogY3NyZlRva2VuXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHdpbmRvdy52bUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdF9uYW1lOiBzbmFwc2hvdE5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGRhdGEubWVzc2FnZSB8fCAnWMOzYSBzbmFwc2hvdCB0aMOgbmggY8O0bmcnLCAnc3VjY2VzcycpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggc25hcHNob3QgbGlzdCBhZnRlciBzdWNjZXNzZnVsIGRlbGV0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZldGNoU25hcHNob3RzKCksIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5tZXNzYWdlIHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEga2hpIHjDs2Egc25hcHNob3QnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIHNuYXBzaG90OicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHNob3dOb3RpZmljYXRpb24oZXJyb3IubWVzc2FnZSB8fCAnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB4w7NhIHNuYXBzaG90JywgJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhc3luYyByZXZlcnRTbmFwc2hvdChzbmFwc2hvdE5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgU3dhbC5maXJlKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnWMOhYyBuaOG6rW4ga2jDtGkgcGjhu6VjJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6IGBC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga2jDtGkgcGjhu6VjIHbhu4Egc25hcHNob3QgXCIke3NuYXBzaG90TmFtZX1cIj8gVOG6pXQgY+G6oyBk4buvIGxp4buHdSBoaeG7h24gdOG6oWkgc+G6vSBi4buLIG3huqV0LmAsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiAnIzMwODVkNicsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogJyNkMzMnLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdLaMO0aSBwaOG7pWMnLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0jhu6d5IGLhu48nLFxyXG4gICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0NvbmZpcm1lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9zZWN1cmUvcmV2ZXJ0LXNuYXBzaG90Jywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IGNzcmZUb2tlblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2lkOiB3aW5kb3cudm1JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RfbmFtZTogc25hcHNob3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbidcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihkYXRhLm1lc3NhZ2UgfHwgJ0tow7RpIHBo4bulYyBzbmFwc2hvdCB0aMOgbmggY8O0bmcnLCAnc3VjY2VzcycpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggc25hcHNob3QgbGlzdCBhZnRlciBzdWNjZXNzZnVsIHJldmVydFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mZXRjaFNuYXBzaG90cygpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEubWVzc2FnZSB8fCAnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBraMO0aSBwaOG7pWMgc25hcHNob3QnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJldmVydGluZyBzbmFwc2hvdDonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKGVycm9yLm1lc3NhZ2UgfHwgJ0PDsyBs4buXaSB44bqjeSByYSBraGkga2jDtGkgcGjhu6VjIHNuYXBzaG90JywgJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIHJlZnJlc2ggc25hcHNob3RzXHJcbiAgICAgICAgcmVmcmVzaFNuYXBzaG90cygpIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaFNuYXBzaG90cygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHNuYXBzaG90IGNvdW50XHJcbiAgICAgICAgZ2V0U25hcHNob3RDb3VudCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3RzLmxlbmd0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIHNuYXBzaG90cyBhcmUgbG9hZGluZ1xyXG4gICAgICAgIGlzTG9hZGluZygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW4gZXJyb3JcclxuICAgICAgICBoYXNFcnJvcigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IgIT09IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il0sIm1hcHBpbmdzIjoiOytDQUNBLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUFwQixDQUFBLENBQUFELENBQUEsV0FBQWtCLE1BQUEsbUJBQUFqQixDQUFBLElBQUFpQixNQUFBLFlBQUFB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LGdCQUFnQixDQUFDa0osU0FBQSxDQUFBakgsRUFBQSxDQUFNaEMsT0FBTyxJQUFJLHNDQUFzQyxFQUFFLE9BQU8sQ0FBQztZQUFDO1lBQUE7Y0FBQSxPQUFBaUosU0FBQSxDQUFBL0ssSUFBQTtVQUFBO1FBQUEsR0FBQTZLLFFBQUE7TUFBQTtJQUUzRixDQUFDO0lBRUQ7SUFDQUcsZ0JBQWdCLFdBQWhCQSxnQkFBZ0JBLENBQUEsRUFBRztNQUNmLElBQUksQ0FBQzFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDtJQUNBMkMsZ0JBQWdCLFdBQWhCQSxnQkFBZ0JBLENBQUEsRUFBRztNQUNmLE9BQU8sSUFBSSxDQUFDNUMsU0FBUyxDQUFDdEosTUFBTTtJQUNoQyxDQUFDO0lBRUQ7SUFDQW1NLFNBQVMsV0FBVEEsU0FBU0EsQ0FBQSxFQUFHO01BQ1IsT0FBTyxJQUFJLENBQUN0RyxPQUFPO0lBQ3ZCLENBQUM7SUFFRDtJQUNBdUcsUUFBUSxXQUFSQSxRQUFRQSxDQUFBLEVBQUc7TUFDUCxPQUFPLElBQUksQ0FBQ2xKLEtBQUssS0FBSyxJQUFJO0lBQzlCO0VBQ0osQ0FBQztBQUNMIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9zZXJ2aWNlL3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIn0=\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"]();
|
|
/******/
|
|
/******/ })()
|
|
; |