PageSourceSearch

https://rezervacije.visitkranj.com/static/reactjs/dist/1220.bundle_dd4329dc9f88629762f3.js

js visitkranj.com collected 2026-10-02 06:52:21 UTC 178,106 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkhalki_project=self.webpackChunkhalki_project||[]).push([[1220],{2431:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('{/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(58168);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(98587);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46942);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96540);\n/* harmony import */ var _ThemeProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(36519);\n\n\nvar _excluded = ["bsPrefix", "className", "striped", "bordered", "borderless", "hover", "size", "variant", "responsive"];\n\n\n\nvar Table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.forwardRef(function (_ref, ref) {\n  var bsPrefix = _ref.bsPrefix,\n      className = _ref.className,\n      striped = _ref.striped,\n      bordered = _ref.bordered,\n      borderless = _ref.borderless,\n      hover = _ref.hover,\n      size = _ref.size,\n      variant = _ref.variant,\n      responsive = _ref.responsive,\n      props = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_ref, _excluded);\n\n  var decoratedBsPrefix = (0,_ThemeProvider__WEBPACK_IMPORTED_MODULE_4__/* .useBootstrapPrefix */ .oU)(bsPrefix, \'table\');\n  var classes = classnames__WEBPACK_IMPORTED_MODULE_2___default()(className, decoratedBsPrefix, variant && decoratedBsPrefix + "-" + variant, size && decoratedBsPrefix + "-" + size, striped && decoratedBsPrefix + "-striped", bordered && decoratedBsPrefix + "-bordered", borderless && decoratedBsPrefix + "-borderless", hover && decoratedBsPrefix + "-hover");\n  var table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("table", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)({}, props, {\n    className: classes,\n    ref: ref\n  }));\n\n  if (responsive) {\n    var responsiveClass = decoratedBsPrefix + "-responsive";\n\n    if (typeof responsive === \'string\') {\n      responsiveClass = responsiveClass + "-" + responsive;\n    }\n\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", {\n      className: responsiveClass\n    }, table);\n  }\n\n  return table;\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Table);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2hhbGtpX3Byb2plY3QvLi9ub2RlX21vZHVsZXMvcmVhY3QtYm9vdHN0cmFwL2VzbS9UYWJsZS5qcz8zMDEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiYnNQcmVmaXhcIiwgXCJjbGFzc05hbWVcIiwgXCJzdHJpcGVkXCIsIFwiYm9yZGVyZWRcIiwgXCJib3JkZXJsZXNzXCIsIFwiaG92ZXJcIiwgXCJzaXplXCIsIFwidmFyaWFudFwiLCBcInJlc3BvbnNpdmVcIl07XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VCb290c3RyYXBQcmVmaXggfSBmcm9tICcuL1RoZW1lUHJvdmlkZXInO1xudmFyIFRhYmxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgYnNQcmVmaXggPSBfcmVmLmJzUHJlZml4LFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBzdHJpcGVkID0gX3JlZi5zdHJpcGVkLFxuICAgICAgYm9yZGVyZWQgPSBfcmVmLmJvcmRlcmVkLFxuICAgICAgYm9yZGVybGVzcyA9IF9yZWYuYm9yZGVybGVzcyxcbiAgICAgIGhvdmVyID0gX3JlZi5ob3ZlcixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICB2Y
1XJpYW50ID0gX3JlZi52YXJpYW50LFxuICAgICAgcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZGVjb3JhdGVkQnNQcmVmaXggPSB1c2VCb290c3RyYXBQcmVmaXgoYnNQcmVmaXgsICd0YWJsZScpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCBkZWNvcmF0ZWRCc1ByZWZpeCwgdmFyaWFudCAmJiBkZWNvcmF0ZWRCc1ByZWZpeCArIFwiLVwiICsgdmFyaWFudCwgc2l6ZSAmJiBkZWNvcmF0ZWRCc1ByZWZpeCArIFwiLVwiICsgc2l6ZSwgc3RyaXBlZCAmJiBkZWNvcmF0ZWRCc1ByZWZpeCArIFwiLXN0cmlwZWRcIiwgYm9yZGVyZWQgJiYgZGVjb3JhdGVkQnNQcmVmaXggKyBcIi1ib3JkZXJlZFwiLCBib3JkZXJsZXNzICYmIGRlY29yYXRlZEJzUHJlZml4ICsgXCItYm9yZGVybGVzc1wiLCBob3ZlciAmJiBkZWNvcmF0ZWRCc1ByZWZpeCArIFwiLWhvdmVyXCIpO1xuICB2YXIgdGFibGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInRhYmxlXCIsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHJlZlxuICB9KSk7XG5cbiAgaWYgKHJlc3BvbnNpdmUpIHtcbiAgICB2YXIgcmVzcG9uc2l2ZUNsYXNzID0gZGVjb3JhdGVkQnNQcmVmaXggKyBcIi1yZXNwb25zaXZlXCI7XG5cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNpdmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXNwb25zaXZlQ2xhc3MgPSByZXNwb25zaXZlQ2xhc3MgKyBcIi1cIiArIHJlc3BvbnNpdmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogcmVzcG9uc2l2ZUNsYXNzXG4gICAgfSwgdGFibGUpO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufSk7XG5leHBvcnQgZGVmYXVsdCBUYWJsZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2431\n\n}')},3182:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("{/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96540);\n/* harmony import */ var react_bootstrap_Spinner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70778);\n/*\n * Copyright (C) 2020  Miha Kitič<[email protected]> - All rights reserved!\n */\n\n\n\n\n// import \"../daterangepicker.css\";\n\nvar bg_style = {\n  position: 'fixed',\n  top: '0',\n  left: '0',\n  width: '100vw',\n  height: '100vh',\n  opacity: '0.3',\n  backgroundColor: 'grey',\n  transition: 'all 1.3s',\n  zIndex: '99999'\n};\nvar container_style = {\n  position: 'fixed',\n  top: 'calc(50vh - 70px)',\n  left: 'calc(50vw - 160px)',\n  width: '320px',\n  height: '140px',\n  backgroundColor: 'white',\n  borderRadius: '5px',\n  border: '1px solid greay',\n  textAlign: 'center',\n  opacity: '1.0',\n  transition: 'all 0.3s',\n  zIndex: '100000'\n};\nvar message_style = {\n  marginTop: '30px',\n  marginBottom: '16px'\n};\nvar StandardLoader = function StandardLoader(_ref) {\n  var message = _ref.message,\n    ext_props = _ref.ext_props,\n    children = _ref.children;\n  // When message not provided -> loading\n  var message_imp = !message ? gettext('Loading') : message;\n\n  // Setup effect hook\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {});\n\n  // Render view\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n    style: bg_style\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n    style: container_style\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n    style: message_style\n  }, message_imp), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_bootstrap_Spinner__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A, {\n    animation: \"border\",\n    role: \"status\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", {\n    className: \"sr-only\"\n  }, \"Loading...\"))));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StandardLoader);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE4Mi5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBOztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBRkE7QUFDQTtBQUdBO0FBQ0E7O0F
1BRUE7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUlBO0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9oYWxraV9wcm9qZWN0Ly4vc3JjL3V0aWxpdHkvY29tcG9uZW50cy9TdGFuZGFyZExvYWRlci5qcz8yODEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjAgIE1paGEgS2l0acSNPG1paGEua2l0aWNAbWtzcC5zaT4gLSBBbGwgcmlnaHRzIHJlc2VydmVkIVxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFN1c3BlbnNlLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBTcGlubmVyIGZyb20gJ3JlYWN0LWJvb3RzdHJhcC9TcGlubmVyJztcblxuXG4vLyBpbXBvcnQgXCIuLi9kYXRlcmFuZ2VwaWNrZXIuY3NzXCI7XG5cbmNvbnN0IGJnX3N0eWxlID0ge1xuICAgIHBvc2l0aW9uICAgICAgICA6ICdmaXhlZCcsXG4gICAgdG9wICAgICAgICAgICAgIDogJzAnLFxuICAgIGxlZnQgICAgICAgICAgICA6ICcwJyxcbiAgICB3aWR0aCAgICAgICAgICAgOiAnMTAwdncnLFxuICAgIGhlaWdodCAgICAgICAgICA6ICcxMDB2aCcsXG4gICAgb3BhY2l0eSAgICAgICAgIDogJzAuMycsXG4gICAgYmFja2dyb3VuZENvbG9yIDogJ2dyZXknLFxuICAgIHRyYW5zaXRpb24gICAgICA6ICdhbGwgMS4zcycsXG4gICAgekluZGV4ICAgICAgICAgOiAnOTk5OTknLFxufVxuXG5jb25zdCBjb250YWluZXJfc3R5bGUgPSB7XG4gICAgcG9zaXRpb24gICAgICAgIDogJ2ZpeGVkJyxcbiAgICB0b3AgICAgICAgICAgICAgOiAnY2FsYyg1MHZoIC0gNzBweCknLFxuICAgIGxlZnQgICAgICAgICAgICA6ICdjYWxjKDUwdncgLSAxNjBweCknLFxuICAgIHdpZHRoICAgICAgICAgICA6ICczMjBweCcsXG4gICAgaGVpZ2h0ICAgICAgICAgIDogJzE0MHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IgOiAnd2hpdGUnLFxuICAgIGJvcmRlclJhZGl1cyAgICA6ICc1cHgnLFxuICAgIGJvcmRlciAgICAgICAgICA6ICcxcHggc29saWQgZ3JlYXknLFxuICAgIHRleHRBbGlnbiAgICAgICA6ICdjZW50ZXInLFxuICAgIG9wYWNpdHkgICAgICAgICA6ICcxLjAnLFxuICAgIHRyYW5zaXRpb24gICAgICA6ICdhbGwgMC4zcycsXG4gICAgekluZGV4ICAgICAgICAgOiAnMTAwMDAwJyxcbn1cblxuY29uc3QgbWVzc2FnZV9zdHlsZSA9IHtcbiAgICBtYXJnaW5Ub3AgICAgICAgOiAnMzBweCcsXG4gICAgbWFyZ2luQm90dG9tICAgIDogJzE2cHgnLFxufVxuXG5jb25zdCBTdGFuZGFyZExvYWRlciA9ICh7XG4gICAgbWVzc2FnZSxcbiAgICBleHRfcHJvcHMsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICAvLyBXaGVuIG1lc3NhZ2Ugbm90IHByb3ZpZGVkIC0+IGxvYWRpbmdcbiAgICBsZXQgbWVzc2FnZV9pbXAgPSAhbWVzc2FnZSA/IGdldHRleHQoJ0xvYWRpbmcnKSA6IG1lc3NhZ2U7XG5cbiAgICAvLyBTZXR1cCBlZmZlY3QgaG9va1xuICAgIHVzZUVmZmVjdCAoKCkgPT4ge1xuXG4gICAgfSk7XG5cbiAgICAvLyBSZW5kZXIgdmlld1xuICAgIHJldHVybiAoPD5cbiAgICAgICAgPGRpdiBzdHlsZT17IGJnX3N0eWxlIH0+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBzdHlsZT17IGNvbnRhaW5lcl9zdHlsZSB9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17IG1lc3NhZ2Vfc3R5bGUgfT5cbiAgICAgICAgICAgICAgICB7IG1lc3NhZ2VfaW1wIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPFNwaW5uZXIgYW5pbWF0aW9uPVwiYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgICAgPC9TcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8Lz4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTdGFuZGFyZExvYWRlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3182\n\n}")},31220:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('{// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  "default": () => (/* binding */ app_supervisor_SupervisorReservations)\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(96540);\n// EXTERNAL MODULE: ./node_modules/react-router/dist/index.js\nvar dist = __webpack_require__(47767);\n// EXTERNAL MODULE: ./node_modules/react-router-dom/dist/index.js\nvar react_router_dom_dist = __webpack_require__(84976);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/Button.js\nvar Button = __webpack_require__(25615);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/Dropdown.js + 5 modules\nvar Dropdown = __webpack_require__(49718);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/DropdownButton.js\nvar DropdownButton = __webpack_require__(56102);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/FormControl.js\nvar FormControl = __webpack_require__(71364);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/InputGroup.js\nvar InputGroup = __webpack_require__(15192);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/Form.js + 10 modules\nvar Form = __webpack_require__(81208);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/Navbar.js + 3 modules\nvar Navbar = __webpack_require__(43946);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/ButtonGroup.js\nvar ButtonGroup = __webpack_require__(70616);\n// EXTERNAL MODULE: ./src/utility/components/StandardDropdown.js\nvar StandardDropdown = __webpack_require__(43880);\n// EXTERNAL MODULE: ./src/utility/Utility.js\nvar Utility = __webpack_require__(37753);\n// EXTERNAL MODULE: ./node_modules/moment/moment.js\nvar moment = __webpack_require__(95093);\nvar moment_default = /*#__PURE__*/__webpack_require__.n(moment);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap-daterangepicker/dist/index.es.js\nvar index_es = __webpack_require__(73926);\n// EXTERNAL MODULE: ./src/daterangepicker.css\nvar daterangepicker = __webpack_require__(74341);\n;// ./src/app_supervisor/SupervisorReservations_Toolbar.js\nfunction _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 _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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to de
1structure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/*\n * Copyright (C) 2020-22  Miha Kitič<[email protected]> - All rights reserved!\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar date_cols_list_property = [{\n  value: "CHECKIN",\n  show: gettext("CHECK-IN"),\n  help: gettext(\'List will be filtered by check-in date...\')\n}, {\n  value: "STATUSCHG",\n  show: gettext("STATUS"),\n  help: gettext(\'List will be filtered by status change date...\')\n}];\nvar date_cols_list_exprience = [{\n  value: "EVENT",\n  show: gettext("EVENT"),\n  help: gettext(\'List will be filtered by actual event date...\')\n}, {\n  value: "PURCHASE",\n  show: gettext("PURCH."),\n  help: gettext(\'List will be filtered by purchase date...\')\n}];\nvar SupervisorReservations_ToolbarFilters = function SupervisorReservations_ToolbarFilters(_ref) {\n  var ext_props = _ref.ext_props,\n    view_type = _ref.view_type,\n    children = _ref.children;\n  // Implement hooks\n  var _useSearchParams = (0,react_router_dom_dist.useSearchParams)(),\n    _useSearchParams2 = _slicedToArray(_useSearchParams, 2),\n    search_params = _useSearchParams2[0],\n    setSearchParams = _useSearchParams2[1];\n  var _useState = (0,react.useState)(null),\n    _useState2 = _slicedToArray(_useState, 2),\n    timeout = _useState2[0],\n    setTimeout = _useState2[1];\n  var _useState3 = (0,react.useState)(search_params.get(\'search_phrase\')),\n    _useState4 = _slicedToArray(_useState3, 2),\n    search_phrase = _useState4[0],\n    setSearchPhrase = _useState4[1];\n  var _useState5 = (0,react.useState)(search_params.get(\'search_status\')),\n    _useState6 = _slicedToArray(_useState5, 2),\n    search_status = _useState6[0],\n    setSearchStatus = _useState6[1];\n\n  // Set state for from-till filter\n  var month = moment_default()().format("MM");\n  var year = moment_default()().format("YYYY");\n  var start_date = moment_default()(["01", month, year].join("."), "DD.MM.YYYY");\n  var start_date_url = search_params.get(\'search_from\');\n  var start_date_str = start_date_url ? moment_default()(start_date_url, "YYMMDD").format("DD.MM.YY") : start_date.format("DD.MM.YY");\n  var end_date = moment_default()().endOf("month");\n  var end_date_url = search_params.get(\'search_till\');\n  var end_date_str = end_date_url ? moment_default()(end_date_url, "YYMMDD").format("DD.MM.YY") : end_date.format("DD.MM.YY");\n  var _useState7 = (0,react.useState)(start_date_str),\n    _useState8 = _slicedToArray(_useState7, 2),\n    search_from = _useState8[0],\n    setSearchFrom = _useState8[1];\n  var _useState9 = (0,react.useState)(end_date_str),\n    _useState0 = _slicedToArray(_useState9, 2),\n    search_till = _useState0[0],\n    setSearchTill = _useState0[1];\n  var _useState1 = (0,react.useState)(0),\n    _useState10 = _slicedToArray(_useState1, 2),\n    refresh_time = _useState10[0],\n    setRefreshTime = _useState10[1];\n\n  // Variables\n  var booking_status_list = [{\n    value: "",\n    show: gettext("ALL")\n  },\n  //{ value : "preliminary", show : gettext("PRELIMINARY") },\n  {\n    value: "submitted",\n    show: gettext("SUBMITTED")\n  }, {\n    value: "confirmed",\n    show: gettext("CONFIRMED")\n  }, {\n    value: "canceled",\n    show: gettext("CANCELED")\n  }];\n  console.log(view_type);\n  // Variables\n  //const date_cols_list = view_type == \'property\' ?\n  //[ { value : "CHECKIN",\n  //show  : gettext("CHECK-IN"),\n  //help  : gettext(\'List will be filtered by check-in date...\'),      },\n  //{ value : "STATUSCHG",\n  //show  : gettext("STATUS"),\n  //help  : gettext(\'List will be filtered by status change date...\'), }, ]\n  //: view_type == \'experience\' ?\n  //[ { value : "EVENT",\n  //show  : gettext("EVENT"),\n  //help  : gettext(\'List will be filtered by actual event date...\'),      },\n  //{ value : "PURCHASE",\n  //show  : gettext("PURCHASE"),\n  //help  : gettext(\'List will be filtered by purchase date...\'), }, ]\n  //: [];\n\n  var _useState11 = (0,react.useState)(view_type == \'property\' ? date_cols_list_property : view_type == \'experience\' ? date_cols_list_exprience : []),\n    _useState12 = _slicedToArray(_useState11, 2),\n    date_cols_list = _useState12[0],\n    setDateColsList = _useState12[1];\n  var _useState13 = (0,react.useState)(date_cols_list[0]),\n    _useState14 = _slicedToArray(_useState13, 2),\n    date_sort_col = _useState14[0],\n    setDateSortCol = _useState14[1];\n  (0,react.useEffect)(function () {\n    view_type == \'property\' ? setDateColsList(date_cols_list_property) : view_type == \'experience\' ? setDateColsList(date_cols_list_exprience) : setDateColsList([]);\n  }, [view_type]);\n\n  // One more effect to set setDateColsList\n  (0,react.useEffect)(function () {\n    if (date_cols_list.length >
1 0) {\n      setDateSortCol(date_cols_list[0]);\n    } else {\n      setDateSortCol({});\n    }\n  }, [date_cols_list]);\n  (0,react.useEffect)(function () {\n    // When any of params changes, clear timeout if one exists\n    if (timeout) {\n      clearTimeout(timeout);\n      setTimeout(null);\n    }\n\n    // Set a new timeout of one exists\n    var new_timeout = setTimeout(function () {\n      setRefreshTime(moment_default()().valueOf());\n    }, 500);\n  }, [search_phrase, search_status, search_from, search_till, date_sort_col]);\n  (0,react.useEffect)(function () {\n    var dict = {};\n    if (search_status) {\n      dict[\'search_status\'] = search_status;\n    }\n    if (search_phrase) {\n      dict[\'search_phrase\'] = search_phrase;\n    }\n    if (search_from) {\n      dict[\'search_from\'] = moment_default()(search_from, "DD.MM.YY").format("YYMMDD");\n    }\n    if (search_till) {\n      dict[\'search_till\'] = moment_default()(search_till, "DD.MM.YY").format("YYMMDD");\n    }\n    if (date_sort_col.value) {\n      dict[\'date_filter_col\'] = date_sort_col.value;\n    }\n    setSearchParams(dict);\n  }, [refresh_time]);\n\n  // Rendering...\n  return /*#__PURE__*/react.createElement("div", {\n    className: "SupervisorHotelBookingFilters"\n  }, /*#__PURE__*/react.createElement(Button/* default */.A, {\n    type: "button",\n    variant: "outline-dark",\n    className: "mr-sm-2 mb-2 mb-sm-0",\n    style: {\n      fontSize: \'22px\',\n      padding: \'1px 10px\'\n    },\n    title: gettext(\'Export list of reservation to a CSV file\'),\n    onClick: function onClick() {\n      window.open(ext_props.supervisor_base_url + \'file/\' + view_type + \'/csv/?\' + [\'search_phrase=\' + (search_phrase ? search_phrase : \'\'), \'search_status=\' + (search_status ? search_status : \'\'), \'search_from=\' + moment_default()(search_from, "DD.MM.YY").format("YYMMDD"), \'search_till=\' + moment_default()(search_till, "DD.MM.YY").format("YYMMDD"), \'date_filter_col=\' + date_sort_col.value].join(\'&\'), "_blank");\n    }\n  }, /*#__PURE__*/react.createElement("i", {\n    className: "fas fa-file-csv"\n  })), /*#__PURE__*/react.createElement(FormControl/* default */.A, {\n    type: "search",\n    placeholder: gettext("Filter"),\n    value: !search_phrase ? \'\' : search_phrase,\n    className: "mr-sm-2 mb-2 mb-sm-0",\n    onChange: function onChange(e) {\n      setSearchPhrase(e.currentTarget.value);\n    },\n    onKeyDown: function onKeyDown(e) {\n      if (e.keyCode == 13) {\n        e.preventDefault();\n      }\n    }\n  }), /*#__PURE__*/react.createElement(InputGroup/* default */.A, {\n    className: "mr-sm-2 mb-2 mb-md-0 d-inline-block"\n  }, /*#__PURE__*/react.createElement(DropdownButton/* default */.A, _defineProperty(_defineProperty({\n    as: InputGroup/* default */.A.Prepend,\n    variant: "outline-secondary",\n    title: "Dropdown",\n    id: "id-sort-list-selector"\n  }, "title", date_sort_col.show), "style", {\n    "float": \'left\' /* width: \'106px\' */\n  }), date_cols_list.map(function (item, idx) {\n    return /*#__PURE__*/react.createElement(Dropdown/* default */.A.Item, {\n      eventKey: item.value,\n      key: idx,\n      onClick: function onClick() {\n        setDateSortCol(item);\n      }\n    }, item.show);\n  })), /*#__PURE__*/react.createElement(index_es/* default */.A, {\n    initialSettings: {\n      locale: {\n        format: "DD.MM.YY",\n        applyLabel: gettext(\'Apply\'),\n        cancelLabel: gettext(\'Cancel\')\n      },\n      startDate: moment_default()(search_from, \'DD.MM.YY\'),\n      endDate: moment_default()(search_till, \'DD.MM.YY\'),\n      autoApply: true,\n      drops: \'auto\'\n    },\n    onHide: function onHide(elt, data) {\n      setSearchFrom(data.startDate.format(\'DD.MM.YY\'));\n      setSearchTill(data.endDate.format(\'DD.MM.YY\'));\n    },\n    key: search_from + \'-\' + search_till\n  }, /*#__PURE__*/react.createElement(FormControl/* default */.A, {\n    placeholder: gettext(\'Filter by period\'),\n    "aria-label": \'period\',\n    "aria-describedby": \'period\',\n    type: "search",\n    style: {\
1n      width: \'180px\'\n    }\n  }))), /*#__PURE__*/react.createElement(StandardDropdown/* default */.A, {\n    list: booking_status_list,\n    field_id: "input_status",\n    value: {\n      value: !search_status ? "" : search_status\n    },\n    menu_cbk: function menu_cbk(item, idx) {\n      if (item) {\n        return item.show ? item.show : gettext(\'ALL\');\n      } else {\n        return gettext(\'UNKNOWN\');\n      }\n    },\n    on_click_cbk: function on_click_cbk(name, value) {\n      setSearchStatus(value.value);\n    },\n    errors: null,\n    id_key: "value",\n    show_key: "show",\n    className: ""\n  }));\n};\nvar SupervisorReservations_Toolbar = function SupervisorReservations_Toolbar(_ref2) {\n  var base_reservations_url = _ref2.base_reservations_url,\n    supervisor_pk = _ref2.supervisor_pk,\n    ext_props = _ref2.ext_props,\n    children = _ref2.children;\n  // State hook\n  var _useState15 = (0,react.useState)(\'property\'),\n    _useState16 = _slicedToArray(_useState15, 2),\n    view_type = _useState16[0],\n    setVie
1wType = _useState16[1];\n  var _useState17 = (0,react.useState)(\'\'),\n    _useState18 = _slicedToArray(_useState17, 2),\n    pathname = _useState18[0],\n    setPathName = _useState18[1];\n\n  // Define some hooks\n  var navigate = (0,dist/* useNavigate */.Zp)();\n  var location = (0,dist/* useLocation */.zy)();\n\n  // Define effect hook\n  (0,react.useEffect)(function () {\n    // When path name changes -> recalculate view type\n    if (pathname != location.pathname) {\n      setPathName(location.pathname);\n\n      // TODO :: It may be worth to make a funciton of this\n      var pathname_arr = location.pathname.split(\'/\');\n      var prev_pathname = null;\n      var vt = pathname_arr.filter(function (item) {\n        var ppn = prev_pathname;\n        prev_pathname = item;\n        if (ppn == \'reservations\') {\n          return true;\n        } else {\n          return false;\n        }\n      });\n      setViewType(vt[0]);\n    }\n  });\n\n  // Render view\n  return /*#__PURE__*/react.createElement("div", {\n    className: "SupervisorReservationsToolbar mt-2"\n  }, /*#__PURE__*/react.createElement(Navbar/* default */.A, {\n    className: "bg-light",\n    expand: "md"\n  }, /*#__PURE__*/react.createElement(Navbar/* default */.A.Toggle, {\n    "aria-controls": "prop-owner-navbar-nav",\n    as: "div"\n  }, /*#__PURE__*/react.createElement(Form/* default */.A, {\n    inline: true,\n    style: {\n      "float": \'left\',\n      display: \'inline-block\'\n    }\n  }, /*#__PURE__*/react.createElement("button", {\n    "aria-controls": "prop-owner-navbar-nav",\n    type: "button",\n    "aria-label": "Toggle navigation",\n    className: "navbar-toggler collapsed"\n  }, /*#__PURE__*/react.createElement("span", {\n    className: "navbar-toggler-icon"\n  }))), /*#__PURE__*/react.createElement(Form/* default */.A, {\n    inline: true,\n    style: {\n      "float": \'right\',\n      display: \'inline-block\',\n      paddingTop: \'17px\',\n      fontSize: \'1.25rem\'\n    }\n  }, view_type)), /*#__PURE__*/react.createElement(Navbar/* default */.A.Collapse, {\n    id: "prop-owner-navbar-nav",\n    className: "justify-content-between"\n  }, /*#__PURE__*/react.createElement(Form/* default */.A, {\n    inline: true\n  }, /*#__PURE__*/react.createElement(ButtonGroup/* default */.A, {\n    "aria-label": gettext("Module selector"),\n    className: "mt-2 mt-sm-0"\n  }, /*#__PURE__*/react.createElement(Button/* default */.A, {\n    variant: "outline-secondary",\n    onClick: function onClick(e) {\n      navigate(base_reservations_url + \'property/\' + location.search, {\n        replace: true\n      });\n    },\n    active: view_type == \'property\'\n  }, gettext("Accommodations")), /*#__PURE__*/react.createElement(Button/* default */.A, {\n    variant: "outline-secondary",\n    onClick: function onClick(e) {\n      navigate(base_reservations_url + \'experience/\' + location.search, {\n        replace: true\n      });\n    },\n    active: view_type == \'experience\'\n  }, gettext("Experiences")))), /*#__PURE__*/react.createElement(Form/* default */.A, {\n    inline: true,\n    className: "mt-2 mt-md-0",\n    action: "https://mksp.si"\n  }, /*#__PURE__*/react.createElement(SupervisorReservations_ToolbarFilters, {\n    ext_props: ext_props,\n    view_type: view_type\n  })))));\n};\n/* harmony default export */ const app_supervisor_SupervisorReservations_Toolbar = (SupervisorReservations_Toolbar);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/Alert.js\nvar Alert = __webpack_require__(35677);\n// EXTERNAL MODULE: ./node_modules/react-bootstrap/esm/Table.js\nvar Table = __webpack_require__(2431);\n// EXTERNAL MODULE: ./src/utility/AjaxV2.js\nvar AjaxV2 = __webpack_require__(40247);\n// EXTERNAL MODULE: ./src/utility/components/StandardLoader.js\nvar StandardLoader = __webpack_require__(3182);\n;// ./src/app_supervisor/HolderInfo_Modal.js\nfunction HolderInfo_Modal_typeof(o) { "@babel/helpers - typeof"; return HolderInfo_Modal_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; }, HolderInfo_Modal_typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, HolderInfo_Modal_toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction HolderInfo_Modal_toPropertyKey(t) { var i = HolderInfo_Modal_toPrimitive(t, "string"); return "symbol" == HolderInfo_Modal_typeof(i) ? i : i + ""; }\nfunction HolderInfo_Modal_toPrimitive(t, r) { if ("object" != HolderInfo_Modal_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != HolderInfo_Modal_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == HolderInfo_Modal_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\n\nvar HolderInfo_Modal = /*#__PURE__*/function (_Component) {\n  function HolderInfo_Modal(props) {\n    var _this;\n    _classCallCheck(this, HolderInfo_Modal);\n    _this = _callSuper(this, HolderInfo_Modal, [props]);\n\n    // Initial state\n    _this.state = {\n      isActive: false\n    };\n    return _this;\n  }\n  _inherits(HolderInfo_Modal, _Component);\n  return _createClass(HolderInfo_Modal, [{\n    key: "copyHandler",\n    value: function copyHandler(email) {\n      navigator.clipboard.writeText(email);\n      this.setState(function (prevState) {\n        return {\n          isActive: true\n        };\n      });\n    }\n  }, {\n    key: "render",\n    value: function render() {\n      var _this2 = this;\n      var name = this.props.name;\n      var email = this.props.email;\n      var phone = this.props.phone;\n      return /*#__PURE__*/react.createElement("div", {\n        className: "modal-holder-info"\n      }, /*#__PURE__*/react.createElement("div", {\n        className: "modal-holder-name"\n      }, /*#__PURE__*/react.createElement("strong", null, "Name: "), " ", name), /*#__PURE__*/react.createElement("div", {\n        className: "modal-holder-mail"\n      }, /*#__PURE__*/react.createElement("strong", null, "Email: "), this.state.isActive ? /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("i", {\n        className: "info-email clicked",\n        onClick: function onClick(e) {\n          _this2.copyHandler(email);\n        }\n      }, email), /*#__PURE__*/react.createElement("i", {\n        className: "fa fa-copy mail-icon"\n      }), " ") : /*#__PURE__*/react.createElement("i", {\n        className: "info-email",\n        onClick: function onClick(e) {\n          _this2.copyHandler(email);\n        }\n      }, email)), /*#__PURE__*/react.createElement("div", {\n        className: "modal-holder-phone"\n      }, /*#__PURE__*/react.createElement("strong", null, "Phone: "), " ", phone));\n    }\n  }]);\n}(react.Component);\n/* harmony default export */ const app_supervisor_HolderInfo_Modal = (HolderInfo_Modal);\n// EXTERNAL MODULE: ./src/utility/components/StandardModal.js\nvar StandardModal = __webpack_require__(35512);\n;// ./src/app_supervisor/SupervisorReservations_ByProperty.js\nfunction SupervisorReservations_ByProperty_typeof(o) { "@babel/helpers - typeof"; return SupervisorReservations_ByProperty_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; }, SupervisorReservations_ByProperty_typeof(o); }\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction SupervisorReservations_ByProperty_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction SupervisorReservations_ByProperty_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, SupervisorReservations_ByProperty_toPropertyKey(o.key), o); } }\nfunction SupervisorReservations_ByProperty_createClass(e, r, t) { return r && SupervisorReservations_ByProperty_defineProperties(e.prototype, r), t && SupervisorReservations_ByProperty_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction SupervisorReservations_ByProperty_toPropertyKey(t) { var i = SupervisorReservations_ByProperty_toPrimitive(t, "string"); return "symbol" == SupervisorReservations_ByProperty_typeof(i) ? i : i + ""; }\nfunction SupervisorReservations_ByProperty_toPrimitive(t, r) { if ("object" != SupervisorReservations_ByProperty_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != SupervisorReservations_ByProperty_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction SupervisorReservations_ByProperty_callSuper(t, o, e) { return o = SupervisorReservations_ByProperty_getPrototypeOf(o
1), SupervisorReservations_ByProperty_possibleConstructorReturn(t, SupervisorReservations_ByProperty_isNativeReflectConstruct() ? Reflect.construct(o, e || [], SupervisorReservations_ByProperty_getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction SupervisorReservations_ByProperty_possibleConstructorReturn(t, e) { if (e && ("object" == SupervisorReservations_ByProperty_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return SupervisorReservations_ByProperty_assertThisInitialized(t); }\nfunction SupervisorReservations_ByProperty_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction SupervisorReservations_ByProperty_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (SupervisorReservations_ByProperty_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction SupervisorReservations_ByProperty_getPrototypeOf(t) { return SupervisorReservations_ByProperty_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, SupervisorReservations_ByProperty_getPrototypeOf(t); }\nfunction SupervisorReservations_ByProperty_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && SupervisorReservations_ByProperty_setPrototypeOf(t, e); }\nfunction SupervisorReservations_ByProperty_setPrototypeOf(t, e) { return SupervisorReservations_ByProperty_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, SupervisorReservations_ByProperty_setPrototypeOf(t, e); }\nfunction SupervisorReservations_ByProperty_slicedToArray(r, e) { return SupervisorReservations_ByProperty_arrayWithHoles(r) || SupervisorReservations_ByProperty_iterableToArrayLimit(r, e) || SupervisorReservations_ByProperty_unsupportedIterableToArray(r, e) || SupervisorReservations_ByProperty_nonIterableRest(); }\nfunction SupervisorReservations_ByProperty_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction SupervisorReservations_ByProperty_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return SupervisorReservations_ByProperty_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? SupervisorReservations_ByProperty_arrayLikeToArray(r, a) : void 0; } }\nfunction SupervisorReservations_ByProperty_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction SupervisorReservations_ByProperty_iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction SupervisorReservations_ByProperty_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/*\n * Copyright (C) 2020-22  Miha Kitič<[email protected]> - All rights reserved!\n */\n\n\n\n\n\n\n\n\n\n\nvar SupervisorReservations_ByProperty = function SupervisorReservations_ByProperty(_ref) {\n  var base_reservations_property_url = _ref.base_reservations_property_url,\n    supervisor_pk = _ref.supervisor_pk,\n    ext_props = _ref.ext_props,\n    children = _ref.children;\n  // Set state hooks\n  var _useState = (0,react.useState)(),\n    _useState2 = SupervisorReservations_ByProperty_slicedToArray(_useState, 2),\n    cost_sum = _useState2[0],\n    setCostSum = _useState2[1];\n\n  // Collect some hooks\n  var _useSearchParams = (0,react_router_dom_dist.useSearchParams)(),\n    _useSearchParams2 = SupervisorReservations_ByProperty_slicedToArray(_useSearchParams, 2),\n    search_params = _useSearchParams2[0],\n    setSearchParams = _useSearchParams2[1];
1\n\n  // Prepare FROM - TILL dates for filters\n  var month = moment_default()().format("MM");\n  var year = moment_default()().format("YYYY");\n  var start_date = moment_default()(["01", month, year].join("."), "DD.MM.YYYY");\n  var end_date = moment_default()().endOf("month");\n\n  // Fix params\n  var search_status = search_params.get(\'search_status\');\n  search_status = !search_status ? \'\' : search_status;\n  var search_phrase = search_params.get(\'search_phrase\');\n  search_phrase = !search_phrase ? \'\' : search_phrase;\n  var search_from = search_params.get(\'search_from\');\n  search_from = !search_from ? start_date.format("YYMMDD") : search_from;\n  var search_till = search_params.get(\'search_till\');\n  search_till = !search_till ? end_date.format("YYMMDD") : search_till;\n  var date_filter_col = search_params.get(\'date_filter_col\');\n  date_filter_col = !date_filter_col ? \'\' : date_filter_col;\n\n  // Render view\n  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(SupervisorReservations_ByProperty_list, {\n    base_reservations_property_url: base_reservations_property_url,\n    supervisor_pk: supervisor_pk,\n    publish_fi_cbk: function publish_fi_cbk(cost) {\n      setCostSum(cost.cost_sum);\n    },\n    search_status: search_status,\n    search_phrase: search_phrase,\n    search_from: search_from,\n    search_till: search_till,\n    date_filter_col: date_filter_col,\n    set_search_params_cbk: setSearchParams,\n    ext_props: ext_props\n  }, children));\n};\n\n/**\n * Supervisor booking filters */\nvar SupervisorReservations_ByProperty_list = /*#__PURE__*/function (_Component) {\n  function SupervisorReservations_ByProperty_list(props) {\n    var _this;\n    SupervisorReservations_ByProperty_classCallCheck(this, SupervisorReservations_ByProperty_list);\n    _this = SupervisorReservations_ByProperty_callSuper(this, SupervisorReservations_ByProperty_list, [props]);\n\n    // Class variables\n    _this.filter_reload_tout = null;\n\n    // Initial state\n    _this.state = {\n      booking_list: [],\n      cost_data: {},\n      is_prop_loading: false,\n      is_fi_loading: false,\n      display_modal: false,\n      name: "",\n      email: "",\n      phone: ""\n    };\n\n    // Binded functions section\n    _this.extractFilterValues = _this.extractFilterValues.bind(_this);\n    _this.reloadReservationsData = _this.reloadReservationsData.bind(_this);\n    _this.reloadReservationsDataDelayed = _this.reloadReservationsDataDelayed.bind(_this);\n\n    //\n    // Loading data via AJAX\n    var ctx = _this;\n\n    // Ajax data loaders\n    _this.ajax_bookings_get = new AjaxV2/* default */.A(\'lists/supplier_booking/\', props.ext_props.supervisor_base_url, \'POST\', true, _this.props.ext_props.notify_cbk);\n    _this.ajax_bookings_get.setSuccessCbk(function (response, err_handle) {\n      if (response.data) {\n        ctx.setState({\n          booking_list: response.data,\n          is_prop_loading: false\n        });\n        // ctx.props.publish_results_cbk(response.data);\n      } else {\n        ctx.setState({\n          is_res_loading: false\n        });\n        alert(\'Napaka pri nastavitvi napredovanja!\');\n        console.log(error);\n      }\n    });\n    _this.ajax_bookings_get.setNotifyMsgSuccess(null);\n    _this.ajax_bookings_get.setNotifyMsgFail(gettext(\'Could not load bookings data.\'));\n    _this.ajax_bookings_fi = new AjaxV2/* default */.A(\'lists/supplier_booking/\', props.ext_props.supervisor_base_url, \'PUT\', true, _this.props.ext_props.notify_cbk);\n    _this.ajax_bookings_fi.setSuccessCbk(function (response, err_handle) {\n      if (response.data) {\n        ctx.setState({\n          is_fi_loading: false,\n          cost_data: response.data\n        });\n        ctx.props.publish_fi_cbk(response.data);\n      } else {\n        ctx.setState({\n          is_fi_loading: false\n        });\n        alert(\'Napaka pri nastavitvi napredovanja!\');\n        console.log(error);\n      }\n    });\n    _this.ajax_bookings_fi.setNotifyMsgSuccess(null);\n    _this.ajax_bookings_fi.setNotifyMsgFail(gettext(\'Could not load bookings financial information.\'));\n    return _this;\n  }\n\n  /**\n   * Load experiences reservations when component becomes visible */\n  SupervisorReservations_ByProperty_inherits(SupervisorReservations_ByProperty_list, _Component);\n  return SupervisorReservations_ByProperty_createClass(SupervisorReservations_ByProperty_list, [{\n    key: "componentDidMount",\n    value: function componentDidMount() {\n      this.reloadReservationsData();\n    }\n\n    //\n    // When component updates...\n  }, {\n    key: "componentDidUpdate",\n    value: function componentDidUpdate(prevProps, prevState, snapshot) {\n      // Reload list if filters change\n      if (this.props.search_status != prevProps.search_status || this.props.search_phrase != prevProps.search_phrase || this.props.search_from != prevProps.search_from || this.props.search_till != prevProps.search_till || this.props.date_filter_col != prevProps.date_filter_col) {\n        // Extract filter values will ensure that appropriate\n        // filter values are read into data dict and transmitted\n        this.reloadReservationsDataDelayed();\n      }\n    }\n\n    /**\n     * Delayed reload of reservations data. */\n  }, {\n    key: "reloadReservationsDataDelayed",\n    value: function reloadReservationsDataDelayed() {\n      // Kill previous timeout\n      if (this.filter_reload_tout) {\n        clearTimeout(this.filter_reload_tout);\n        this.filter_reload_tout = null;\n      }\n\n      // Set a new one\n      var ctx = this;\n      this.filter_reload_tout = setTimeout(function () {\n        ctx.reloadReservationsData();\n        ctx.filter_reload_tout = null;\n      }, 500);\n    }\n\n    /**\n     * Function will cause reload of reservations data. */\n  }, {\n    key: "reloadReservationsData",\n    value: function reloadReservationsData() {\
1n      this.setState({\n        is_prop_loading: true,\n        is_fi_loading: true\n      });\n      this.ajax_bookings_get.request(this.extractFilterValues());\n      this.ajax_bookings_fi.request(this.extractFilterValues());\n    }\n  }, {\n    key: "extractFilterValues",\n    value: function extractFilterValues() {\n      return {\n        search_status: this.props.search_status ? this.props.search_status : \'\',\n        search_phrase: this.props.search_phrase,\n        search_from: this.props.search_from,\n        search_till: this.props.search_till,\n        date_filter_col: this.props.date_filter_col\n      };\n    }\n  }, {\n    key: "setDisplayModal",\n    value: function setDisplayModal(booking) {\n      this.setState(function (prevState) {\n        return {\n          display_modal: !prevState.display_modal\n        };\n      });\n      if (booking != null) {\n        this.state.name = booking.name;\n        this.state.email = booking.email;\n        this.state.phone = booking.phone;\n      }\n    }\n\n    // Rendering view\n  }, {\n    key: "render",\n    value: function render() {\n      var _this2 = this;\n      var booking_list = this.state.booking_list;\n      var cost_data = this.state.cost_data;\n      var is_prop_loading = this.state.is_prop_loading;\n      var is_fi_loading = this.state.is_fi_loading;\n\n      // Execute render...\n      return /*#__PURE__*/react.createElement("div", {\n        className: "SupervisorHotelBookingList"\n      }, /*#__PURE__*/react.createElement(StandardModal/* default */.A, _extends({}, this.state, {\n        modal_show: this.state.display_modal,\n        modal_centered: true,\n        modal_title: gettext(\'Holder information\'),\n        modal_component: app_supervisor_HolderInfo_Modal,\n        modal_close_cbk: function modal_close_cbk() {\n          _this2.setDisplayModal();\n        },\n        action_hide: true\n      })), (is_prop_loading || is_fi_loading) && /*#__PURE__*/react.createElement(StandardLoader/* default */.A, {\n        message: gettext(\'Loading reservations by property...\')\n      }), booking_list.length <= 0 ? /*#__PURE__*/react.createElement("div", {\n        className: "text-center pt-5"\n      }, gettext(\'No reservations found for specified filter criteria...\')) : /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Alert/* default */.A, {\n        variant: "secondary",\n        className: "mt-3 mb-2",\n        style: {\n          display: "inline-block",\n          width: "100%"\n        }\n      }, /*#__PURE__*/react.createElement("div", {\n        style: {\n          "float": \'left\',\n          marginTop: "3px",\n          fontSize: "14pt"\n        }\n      }, gettext(\'List of\') + \' \' + gettext(\'properties\')), /*#__PURE__*/react.createElement("div", {\n        style: {\n          "float": \'right\',\n          marginTop: "3px",\n          fontSize: "14pt"\n        }\n      }, gettext(\'Sum overall:\'), " ", cost_data.cost_sum ? cost_data.cost_sum.toFixed(2) : \'\')), /*#__PURE__*/react.createElement(Table/* default */.A, {\n        responsive: true,\n        hover: true\n      }, /*#__PURE__*/react.createElement("thead", null, /*#__PURE__*/react.createElement("tr", null, /*#__PURE__*/react.createElement("th", null, gettext(\'Supplier\')), /*#__PURE__*/react.createElement("th", null, gettext(\'Property\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Booking via\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Check-in\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Check-out\')), /*#__PURE__*/react.createElement("th", null, gettext(\'Holder\')), /*#__PURE__*/react.createElement("th", null, gettext(\'Rooms\')), /*#__PURE__*/react.createElement("th", null, gettext(\'Guests\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'State chg. date\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Status\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Price\')))), /*#__PURE__*/react.createElement("tbody", null, booking_list.map(function (booking, idx) {\n        var owner = booking.supplier_user.first_name + \' \' + booking.supplier_user.last_name;\n        var property = booking.hotel.hotel_name;\n        var booking_via = booking.booking_source;\n        var check_in = booking.check_in;\n        var check_out = booking.check_out;\n        var duration = booking.duration;\n        var holder = booking.name;\n        var email = booking.email;\n        var rooms = booking.rooms;\n        var guests = booking.guests;\n        var status = booking.status;\n        var price = booking.price_overall + " " + booking.currency["short"];\n        var pay_date = moment_default()(booking.status_chg_time, "YYYY-MM-DDTHH:mm:ss.SSS").format("DD.MM.YYYY HH:mm");\n        var phone = booking.phone;\n        return /*#__PURE__*/react.createElement("tr", {\n          key: idx\n        }, /*#__PURE__*/react.createElement("td", null, owner), /*#__PURE__*/react.createElement("td", null, property), /*#__PURE__*/react.createElement("td", {\n          className: "text-center"\n        }, booking_via), /*#__PURE__*/react.createElement("td", null, check_in), /*#__PURE__*/react.createElement("td", null, check_out), /*#__PURE__*/react.createElement("td", {\n          className: "text-left",\n          style: {\
1n            cursor: \'help\'\n          },\n          title: "Email: " + email\n        }, holder, /*#__PURE__*/react.createElement("i", {\n          className: "fas fa-info-circle holder-info",\n          onClick: function onClick(e) {\n            _this2.setDisplayModal(booking);\n          }\n        })), /*#__PURE__*/react.createElement("td", {\n          className: "text-center"\n        }, rooms), /*#__PURE__*/react.createElement("td", {\n          className: "text-center"\n        }, guests), /*#__PURE__*/react.createElement("td", {\n          className: "text-center"\n        }, pay_date), /*#__PURE__*/react.createElement("td", {\n          className: "text-center align-middle item-status"\n        }, /*#__PURE__*/react.createElement("div", {\n          className: String(status).toLowerCase()\n        }, gettext(status))), /*#__PURE__*/react.createElement("td", {\n          className: "text-right"\n        }, price));\n      })))));\n    }\n  }]);\n}(react.Component);\n/* harmony default export */ const app_supervisor_SupervisorReservations_ByProperty = (SupervisorReservations_ByProperty);\n;// ./src/app_supervisor/SupervisorReservations_ByExperience.js\nfunction SupervisorReservations_ByExperience_typeof(o) { "@babel/helpers - typeof"; return SupervisorReservations_ByExperience_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; }, SupervisorReservations_ByExperience_typeof(o); }\nfunction SupervisorReservations_ByExperience_extends() { return SupervisorReservations_ByExperience_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, SupervisorReservations_ByExperience_extends.apply(null, arguments); }\nfunction SupervisorReservations_ByExperience_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction SupervisorReservations_ByExperience_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, SupervisorReservations_ByExperience_toPropertyKey(o.key), o); } }\nfunction SupervisorReservations_ByExperience_createClass(e, r, t) { return r && SupervisorReservations_ByExperience_defineProperties(e.prototype, r), t && SupervisorReservations_ByExperience_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction SupervisorReservations_ByExperience_toPropertyKey(t) { var i = SupervisorReservations_ByExperience_toPrimitive(t, "string"); return "symbol" == SupervisorReservations_ByExperience_typeof(i) ? i : i + ""; }\nfunction SupervisorReservations_ByExperience_toPrimitive(t, r) { if ("object" != SupervisorReservations_ByExperience_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != SupervisorReservations_ByExperience_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction SupervisorReservations_ByExperience_callSuper(t, o, e) { return o = SupervisorReservations_ByExperience_getPrototypeOf(o), SupervisorReservations_ByExperience_possibleConstructorReturn(t, SupervisorReservations_ByExperience_isNativeReflectConstruct() ? Reflect.construct(o, e || [], SupervisorReservations_ByExperience_getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction SupervisorReservations_ByExperience_possibleConstructorReturn(t, e) { if (e && ("object" == SupervisorReservations_ByExperience_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return SupervisorReservations_ByExperience_assertThisInitialized(t); }\nfunction SupervisorReservations_ByExperience_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction SupervisorReservations_ByExperience_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (SupervisorReservations_ByExperience_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction SupervisorReservations_ByExperience_getPrototypeOf(t) { return SupervisorReservations_ByExperience_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, SupervisorReservations_ByExperience_getPrototypeOf(t); }\nfunction SupervisorReservations_ByExperience_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
1 t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && SupervisorReservations_ByExperience_setPrototypeOf(t, e); }\nfunction SupervisorReservations_ByExperience_setPrototypeOf(t, e) { return SupervisorReservations_ByExperience_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, SupervisorReservations_ByExperience_setPrototypeOf(t, e); }\nfunction SupervisorReservations_ByExperience_slicedToArray(r, e) { return SupervisorReservations_ByExperience_arrayWithHoles(r) || SupervisorReservations_ByExperience_iterableToArrayLimit(r, e) || SupervisorReservations_ByExperience_unsupportedIterableToArray(r, e) || SupervisorReservations_ByExperience_nonIterableRest(); }\nfunction SupervisorReservations_ByExperience_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction SupervisorReservations_ByExperience_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return SupervisorReservations_ByExperience_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? SupervisorReservations_ByExperience_arrayLikeToArray(r, a) : void 0; } }\nfunction SupervisorReservations_ByExperience_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction SupervisorReservations_ByExperience_iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction SupervisorReservations_ByExperience_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/*\n * Copyright (C) 2020-23  Miha Kitič<[email protected]> - All rights reserved!\n */\n\n\n\n\n\n\n\n\n\n\nvar SupervisorReservations_ByExperience = function SupervisorReservations_ByExperience(_ref) {\n  var base_reservations_experience_url = _ref.base_reservations_experience_url,\n    supervisor_pk = _ref.supervisor_pk,\n    ext_props = _ref.ext_props,\n    children = _ref.children;\n  // Set state hooks\n  var _useState = (0,react.useState)(),\n    _useState2 = SupervisorReservations_ByExperience_slicedToArray(_useState, 2),\n    cost_sum = _useState2[0],\n    setCostSum = _useState2[1];\n\n  // Collect some hooks\n  var _useSearchParams = (0,react_router_dom_dist.useSearchParams)(),\n    _useSearchParams2 = SupervisorReservations_ByExperience_slicedToArray(_useSearchParams, 2),\n    search_params = _useSearchParams2[0],\n    setSearchParams = _useSearchParams2[1];\n\n  // Prepare FROM - TILL dates for filters\n  var month = moment_default()().format("MM");\n  var year = moment_default()().format("YYYY");\n  var start_date = moment_default()(["01", month, year].join("."), "DD.MM.YYYY");\n  var end_date = moment_default()().endOf("month");\n\n  // Fix params\n  var search_status = search_params.get(\'search_status\');\n  search_status = !search_status ? \'\' : search_status;\n  var search_phrase = search_params.get(\'search_phrase\');\n  search_phrase = !search_phrase ? \'\' : search_phrase;\n  var search_from = search_params.get(\'search_from\');\n  search_from = !search_from ? start_date.format("YYMMDD") : search_from;\n  var search_till = search_params.get(\'search_till\');\n  search_till = !search_till ? end_date.format("YYMMDD") : search_till;
1\n  var date_filter_col = search_params.get(\'date_filter_col\');\n  date_filter_col = !date_filter_col ? \'\' : date_filter_col;\n\n  // Render view\n  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(SupervisorReservations_ByExperience_list, {\n    base_reservations_experience_url: base_reservations_experience_url,\n    supervisor_pk: supervisor_pk,\n    publish_fi_cbk: function publish_fi_cbk(cost) {\n      setCostSum(cost.cost_sum);\n    },\n    search_status: search_status,\n    search_phrase: search_phrase,\n    search_from: search_from,\n    search_till: search_till,\n    date_filter_col: date_filter_col,\n    set_search_params_cbk: setSearchParams,\n    ext_props: ext_props\n  }, children));\n};\n\n/**\n * Supervisor booking filters */\nvar SupervisorReservations_ByExperience_list = /*#__PURE__*/function (_Component) {\n  function SupervisorReservations_ByExperience_list(props) {\n    var _this;\n    SupervisorReservations_ByExperience_classCallCheck(this, SupervisorReservations_ByExperience_list);\n    _this = SupervisorReservations_ByExperience_callSuper(this, SupervisorReservations_ByExperience_list, [props]);\n\n    // Class variables\n    _this.filter_reload_tout = null;\n\n    // Initial state\n    _this.state = {\n      reservation_list: [],\n      cost_data: {},\n      is_res_loading: false,\n      is_fi_loading: false,\n      display_modal: false,\n      name: "",\n      email: "",\n      phone: ""\n    };\n\n    // Binded functions section\n    _this.extractFilterValues = _this.extractFilterValues.bind(_this);\n    _this.reloadReservationsData = _this.reloadReservationsData.bind(_this);\n    _this.reloadReservationsDataDelayed = _this.reloadReservationsDataDelayed.bind(_this);\n\n    //\n    // Loading data via AJAX\n    var ctx = _this;\n\n    // Ajax data loaders\n    _this.ajax_reservations_get = new AjaxV2/* default */.A(\'lists/supplier_reservation/\', props.ext_props.supervisor_base_url, \'POST\', true, _this.props.ext_props.notify_cbk);\n    _this.ajax_reservations_get.setSuccessCbk(function (response, err_handle) {\n      if (response.data) {\n        ctx.setState({\n          reservation_list: response.data,\n          is_res_loading: false\n        });\n        // ctx.props.publish_results_cbk(response.data);\n      } else {\n        ctx.setState({\n          is_res_loading: false\n        });\n        alert(gettext("Error while loading experience reservations!"));\n        console.log(error);\n      }\n    });\n    _this.ajax_reservations_get.setNotifyMsgSuccess(null);\n    _this.ajax_reservations_get.setNotifyMsgFail(gettext(\'Could not load reservations data.\'));\n    _this.ajax_reservations_fi = new AjaxV2/* default */.A(\'lists/supplier_reservation/\', props.ext_props.supervisor_base_url, \'PUT\', true, _this.props.ext_props.notify_cbk);\n    _this.ajax_reservations_fi.setSuccessCbk(function (response, err_handle) {\n      if (response.data) {\n        ctx.setState({\n          is_fi_loading: false,\n          cost_data: response.data\n        });\n        ctx.props.publish_fi_cbk(response.data);\n      } else {\n        ctx.setState({\n          is_fi_loading: false\n        });\n        alert(gettext("Error while loading experience reservations filter data"));\n        console.log(error);\n      }\n    });\n    _this.ajax_reservations_fi.setNotifyMsgSuccess(null);\n    _this.ajax_reservations_fi.setNotifyMsgFail(gettext(\'Could not load experience financial information.\'));\n    return _this;\n  }\n\n  /**\n   * Load experiences reservations when component becomes visible */\n  SupervisorReservations_ByExperience_inherits(SupervisorReservations_ByExperience_list, _Component);\n  return SupervisorReservations_ByExperience_createClass(SupervisorReservations_ByExperience_list, [{\n    key: "componentDidMount",\n    value: function componentDidMount() {\n      this.reloadReservationsData();\n    }\n\n    //\n    // When component updates...\n  }, {\n    key: "componentDidUpdate",\n    value: function componentDidUpdate(prevProps, prevState, snapshot) {\n      // Reload list if filters change\n      if (this.props.search_status != prevProps.search_status || this.props.search_phrase != prevProps.search_phrase || this.props.search_from != prevProps.search_from || this.props.search_till != prevProps.search_till || this.props.date_filter_col != prevProps.date_filter_col) {\n        // Extract filter values will ensure that appropriate\n        // filter values are read into data dict and transmitted\n        this.reloadReservationsDataDelayed();\n      }\n    }\n\n    /**\n     * Delayed reload of reservations data. */\n  }, {\n    key: "reloadReservationsDataDelayed",\n    value: function reloadReservationsDataDelayed() {\n      // Kill previous timeout\n      if (this.filter_reload_tout) {\n        clearTimeout(this.filter_reload_tout);\n        this.filter_reload_tout = null;\n      }\n\n      // Set a new one\n      var ctx = this;\n      this.filter_reload_tout = setTimeout(function () {\n        ctx.reloadReservationsData();\n        ctx.filter_reload_tout = null;\n      }, 500);\n    }\n\n    /**\n     * Function will cause reload of reservations data. */\n  }, {\n    key: "reloadReservationsData",\n    value: function reloadReservationsData() {\
1n      this.setState({\n        is_res_loading: true,\n        is_fi_loading: true\n      });\n      this.ajax_reservations_get.request(this.extractFilterValues());\n      this.ajax_reservations_fi.request(this.extractFilterValues());\n    }\n  }, {\n    key: "extractFilterValues",\n    value: function extractFilterValues() {\n      return {\n        search_status: this.props.search_status ? this.props.search_status : \'\',\n        search_phrase: this.props.search_phrase,\n        search_from: this.props.search_from,\n        search_till: this.props.search_till,\n        date_filter_col: this.props.date_filter_col\n      };\n    }\n  }, {\n    key: "setDisplayModal",\n    value: function setDisplayModal(reservation) {\n      this.setState(function (prevState) {\n        return {\n          display_modal: !prevState.display_modal\n        };\n      });\n      if (reservation != null) {\n        this.state.name = reservation.name;\n        this.state.email = reservation.email;\n        this.state.phone = reservation.phone;\n      }\n    }\n\n    // Rendering view\n  }, {\n    key: "render",\n    value: function render() {\n      var _this2 = this;\n      var reservation_list = this.state.reservation_list;\n      var cost_data = this.state.cost_data;\n      var is_res_loading = this.state.is_res_loading;\n      var is_fi_loading = this.state.is_fi_loading;\n\n      // Execute render...\n      return /*#__PURE__*/react.createElement("div", {\n        className: "SupervisorExperienceReservationList"\n      }, /*#__PURE__*/react.createElement(StandardModal/* default */.A, SupervisorReservations_ByExperience_extends({}, this.state, {\n        modal_show: this.state.display_modal,\n        modal_centered: true,\n        modal_title: gettext(\'Holder information\'),\n        modal_component: app_supervisor_HolderInfo_Modal,\n        modal_close_cbk: function modal_close_cbk() {\n          _this2.setDisplayModal();\n        },\n        action_hide: true\n      })), (is_res_loading || is_fi_loading) && /*#__PURE__*/react.createElement(StandardLoader/* default */.A, {\n        message: gettext(\'Loading reservations by experence...\')\n      }), reservation_list.length <= 0 ? /*#__PURE__*/react.createElement("div", {\n        className: "text-center pt-5"\n      }, gettext(\'No reservations found for specified filter criteria...\')) : /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Alert/* default */.A, {\n        variant: "secondary",\n        className: "mt-3 mb-2",\n        style: {\n          display: "inline-block",\n          width: "100%"\n        }\n      }, /*#__PURE__*/react.createElement("div", {\n        style: {\n          "float": \'left\',\n          marginTop: "3px",\n          fontSize: "14pt"\n        }\n      }, gettext(\'List of\') + \' \' + gettext(\'experiences\')), /*#__PURE__*/react.createElement("div", {\n        style: {\n          "float": \'right\',\n          marginTop: "3px",\n          fontSize: "14pt"\n        }\n      }, gettext(\'Sum overall:\'), " ", cost_data.cost_sum ? cost_data.cost_sum.toFixed(2) : \'\')), /*#__PURE__*/react.createElement(Table/* default */.A, {\n        responsive: "lg",\n        hover: true\n      }, /*#__PURE__*/react.createElement("thead", null, /*#__PURE__*/react.createElement("tr", null, /*#__PURE__*/react.createElement("th", null, gettext(\'Supplier\')), /*#__PURE__*/react.createElement("th", null, gettext(\'Experience\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Event date\')), /*#__PURE__*/react.createElement("th", null, gettext(\'Holder\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'PAX\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Purch. date\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Status\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Pay. Ref.\')), /*#__PURE__*/react.createElement("th", {\n        className: "text-center"\n      }, gettext(\'Price\')))), /*#__PURE__*/react.createElement("tbody", null, reservation_list.map(function (reservation, idx) {\n        var owner = reservation.supplier_user.first_name + \' \' + reservation.supplier_user.last_name;\n        var experience = reservation.experience.title;\n        var start_date = reservation.start_date;\n        var duration = reservation.duration;\n        var holder = reservation.name;\n        var email = reservation.email;\n        var guests = reservation.guests;\n        var status = reservation.status;\n        var stripe_intent = reservation.stripe_payment_intent;\n        var pay_date = reservation.stripe_payment_date;\n        var price = reservation.price_overall + " " + reservation.currency["short"];\n        var phone = reservation.phone;\n        return /*#__PURE__*/react.createElement("tr", {\n          key: idx\n        }, /*#__PURE__*/react.createElement("td", null, owner), /*#__PURE__*/react.createElement("td", null, experience), /*#__PURE__*/react.createElement("td", {\n          className: "text-center"\n        }, start_date), /*#__PURE__*/react.createElement("td", {\n          className: "text-left",\n          style: {\
1n            cursor: \'help\'\n          },\n          title: "Email: " + email\n        }, holder, /*#__PURE__*/react.createElement("i", {\n          className: "fas fa-info-circle holder-info",\n          onClick: function onClick(e) {\n            _this2.setDisplayModal(reservation);\n          }\n        })), /*#__PURE__*/react.createElement("td", {\n          className: "text-center"\n        }, guests), /*#__PURE__*/react.createElement("td", {\n          className: "text-center"\n        }, pay_date), /*#__PURE__*/react.createElement("td", {\n          className: "text-center align-middle item-status"\n        }, /*#__PURE__*/react.createElement("div", {\n          className: String(status).toLowerCase()\n        }, gettext(status))), /*#__PURE__*/react.createElement("td", {\n          className: "text-right"\n        }, stripe_intent), /*#__PURE__*/react.createElement("td", {\n          className: "text-right"\n        }, price));\n      })))));\n    }\n  }]);\n}(react.Component);\n/* harmony default export */ const app_supervisor_SupervisorReservations_ByExperience = (SupervisorReservations_ByExperience);\n;// ./src/app_supervisor/SupervisorReservations.js\nfunction SupervisorReservations_slicedToArray(r, e) { return SupervisorReservations_arrayWithHoles(r) || SupervisorReservations_iterableToArrayLimit(r, e) || SupervisorReservations_unsupportedIterableToArray(r, e) || SupervisorReservations_nonIterableRest(); }\nfunction SupervisorReservations_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction SupervisorReservations_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return SupervisorReservations_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? SupervisorReservations_arrayLikeToArray(r, a) : void 0; } }\nfunction SupervisorReservations_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction SupervisorReservations_iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction SupervisorReservations_arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/*\n * Copyright (C) 2020-22  Miha Kitič<[email protected]> - All rights reserved!\n */\n\n\n\n\n\n\n\n\n\n/**\n * Implementing reservations via function component */\nvar SupervisorReservations = function SupervisorReservations(_ref) {\n  var base_reservations_url = _ref.base_reservations_url,\n    supervisor_pk = _ref.supervisor_pk,\n    ext_props = _ref.ext_props,\n    children = _ref.children;\n  // Setup hook-state\n  var _useState = (0,react.useState)(0.00),\n    _useState2 = SupervisorReservations_slicedToArray(_useState, 2),\n    cost_sum = _useState2[0],\n    setCostSum = _useState2[1];\n  var _useState3 = (0,react.useState)({\n      value: \'\'\n    }),\n    _useState4 = SupervisorReservations_slicedToArray(_useState3, 2),\n    status_filter = _useState4[0],\n    setStatusFilter = _useState4[1];\n\n  // Calculate URLs\n  var base_reservations_property_url = base_reservations_url + \'property\' + \'/\';\n  var base_reservations_experience_url = base_reservations_url + \'experience\' + \'/\';\n\n  // Setup useEffect hook\n  (0,react.useEffect)(function () {});\n\n  // Render view\n  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(app_supervisor_SupervisorReservations_Toolbar, {\n    base_reservations_url: base_reservations_url,\n    supervisor_pk: supervisor_pk,\n    ext_props: ext_props\n  }), /*#__PURE__*/react.createElement(dist/* Routes */.BV, null, /*#__PURE__*/react.createElement(dist/* Route */.qh, {\n    path: "",\n    element: /*#__PURE__*/react.createElement(dist/* Navigate */.C5, {\n      to: base_reservations_property_url\n    })\n  }), /*#__PURE__*/react.createElement(dist/* Route */.qh, {\n    path: \'property/*\',\n    element: /*#__PURE__*/react.createElement(app_supervisor_SupervisorReservations_ByProperty, {\n      base_reservations_property_url: base_reservations_property_url,\n      supervisor_pk: supervisor_pk,\n      ext_props: ext_props\n    })\n  }), /*#__PURE__*/react.createElement(dist/* Route */.qh, {\n    path: \'experience/*\',\n    element: /*#__PURE__*/react.createElement(app_supervisor_SupervisorReservations_ByExperience, {\n      base_reservations_experience_url: base_reservations_experience_url,\n      supervisor_pk: supervisor_pk,\n      ext_props: ext_props\n    })\n  })));\n};\n/* harmony default export */ const app_supervisor_SupervisorReservations = (SupervisorReservations);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzEyMjAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFJQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0F
1BRUE7QUFDQTtBQURBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFBQTtBQUVBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQVFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUVBO0FBS0E7QUFIQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBUUE7QUFDQTtBQUNBO0FBQUE7QUFLQTtBQUNBO0FBQUE7QUFRQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9XQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBS0E7QUFBQTtBQUFBO0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9DQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFLQTtBQUhBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBS0E7O0FBR0E7QUFDQTtBQURBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFBQTtBQUtBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSUE7QUFBQTtBQUVBO0FBTUE7QUFBQTtBQUFBO0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1VUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBS0E7QUFIQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUtBOztBQUVBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0F
1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7O0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQU9BO0FBQUE7QUFLQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBS0E7QUFBQTtBQUFBO0FBR0E7Ozs7Ozs7O0FDclVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUhBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFJQTtBQUdBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaGFsa2lfcHJvamVjdC8uL3NyYy9hcHBfc3VwZXJ2aXNvci9TdXBlcnZpc29yUmVzZXJ2YXRpb25zX1Rvb2xiYXIuanM/NzMwYyIsIndlYnBhY2s6Ly9oYWxraV9wcm9qZWN0Ly4vc3JjL2FwcF9zdXBlcnZpc29yL0hvbGRlckluZm9fTW9kYWwuanM/NjA5ZCIsIndlYnBhY2s6Ly9oYWxraV9wcm9qZWN0Ly4vc3JjL2FwcF9zdXBlcnZpc29yL1N1cGVydmlzb3JSZXNlcnZhdGlvbnNfQnlQcm9wZXJ0eS5qcz81NmQ3Iiwid2VicGFjazovL2hhbGtpX3Byb2plY3QvLi9zcmMvYXBwX3N1cGVydmlzb3IvU3VwZXJ2aXNvclJlc2VydmF0aW9uc19CeUV4cGVyaWVuY2UuanM/Y2MwNiIsIndlYnBhY2s6Ly9oYWxraV9wcm9qZWN0Ly4vc3JjL2FwcF9zdXBlcnZpc29yL1N1cGVydmlzb3JSZXNlcnZhdGlvbnMuanM/N2UxYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDIwLTIyICBNaWhhIEtpdGnEjTxtaWhhLmtpdGljQG1rc3Auc2k+IC0gQWxsIHJpZ2h0cyByZXNlcnZlZCFcbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBTdXNwZW5zZSwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQnJvd3NlclJvdXRlciBhcyBSb3V0ZXIsIFJvdXRlcywgUm91dGUsIHVzZVBhcmFtcywgdXNlTmF2aWdhdGUsIHVzZUxvY2F0aW9uLCB1c2VTZWFyY2hQYXJhbXMgfSBmcm9tIFwicmVhY3Qtcm91dGVyLWRvbVwiO1xuXG5pbXBvcnQgQnV0dG9uICAgICAgICAgZnJvbSAncmVhY3QtYm9vdHN0cmFwL0J1dHRvbic7XG5pbXBvcnQgRHJvcGRvd24gICAgICAgZnJvbSAncmVhY3QtYm9vdHN0cmFwL0Ryb3Bkb3duJztcbmltcG9ydCBEcm9wZG93bkJ1dHRvbiBmcm9tICdyZWFjdC1ib290c3RyYXAvRHJvcGRvd25CdXR0b24nO1xuaW1wb3J0IEZvcm1Db250cm9sICAgIGZyb20gJ3JlYWN0LWJvb3RzdHJhcC9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgSW5wdXRHcm91cCAgICAgZnJvbSAncmVhY3QtYm9vdHN0cmFwL0lucHV0R3JvdXAnO1xuaW1wb3J0IE92ZXJsYXlUcmlnZ2VyIGZyb20gJ3JlYWN0LWJvb3RzdHJhcC9PdmVybGF5VHJpZ2dlcic7XG5cbmltcG9ydCBGb3JtICAgICAgICAgICBmcm9tICdyZWFjdC1ib290c3RyYXAvRm9ybSc7XG5pbXBvcnQgTmF2ICAgICAgICAgICAgZnJvbSAncmVhY3QtYm9vdHN0cmFwL05hdic7XG5pbXBvcnQgTmF2YmFyICAgICAgICAgZnJvbSAncmVhY3QtYm9vdHN0cmFwL05hdmJhcic7XG5pbXBvcnQgQnV0dG9uR3JvdXAgICAgZnJvbSAncmVhY3QtYm9vdHN0cmFwL0J1dHRvbkdyb3VwJztcblxuaW1wb3J0IFN0YW5kYXJkRHJvcGRvd24gICBmcm9tICcuLi91dGlsaXR5L2NvbXBvbmVudHMvU3RhbmRhcmREcm9wZG93bi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVVbmlxdWVJRCB9IGZyb20gJy4uL3V0aWxpdHkvVXRpbGl0eS5qcyc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBEYXRlUmFuZ2VQaWNrZXIgZnJvbSAncmVhY3QtYm9vdHN0cmFwLWRhdGVyYW5nZXBpY2tlcic7XG5cbmltcG9ydCBcIi4uL2RhdGVyYW5nZXBpY2tlci5jc3NcIjtcblxuXG5jb25zdCBkYXRlX2NvbHNfbGlzdF9wcm9wZXJ0eSA9XG4gICAgICAgIFsgeyB2YWx1ZSA6IFwiQ0hFQ0tJTlwiLFxuICAgICAgICAgICAgc2hvdyAgOiBnZXR0ZXh0KFwiQ0hFQ0stSU5cIiksXG4gICAgICAgICAgICBoZWxwICA6IGdldHRleHQoJ0xpc3Qgd2lsbCBiZSBmaWx0ZXJlZCBieSBjaGVjay1pbiBkYXRlLi4uJyksICAgICAgfSxcbiAgICAgICAgICB7IHZhbHVlIDogXCJTVEFUVVNDSEdcIixcbiAgICAgICAgICAgI
1HNob3cgIDogZ2V0dGV4dChcIlNUQVRVU1wiKSxcbiAgICAgICAgICAgIGhlbHAgIDogZ2V0dGV4dCgnTGlzdCB3aWxsIGJlIGZpbHRlcmVkIGJ5IHN0YXR1cyBjaGFuZ2UgZGF0ZS4uLicpLCB9LCBdO1xuXG5jb25zdCBkYXRlX2NvbHNfbGlzdF9leHByaWVuY2UgPVxuICAgICAgICBbIHsgdmFsdWUgOiBcIkVWRU5UXCIsXG4gICAgICAgICAgICBzaG93ICA6IGdldHRleHQoXCJFVkVOVFwiKSxcbiAgICAgICAgICAgIGhlbHAgIDogZ2V0dGV4dCgnTGlzdCB3aWxsIGJlIGZpbHRlcmVkIGJ5IGFjdHVhbCBldmVudCBkYXRlLi4uJyksICB9LFxuICAgICAgICAgIHsgdmFsdWUgOiBcIlBVUkNIQVNFXCIsXG4gICAgICAgICAgICBzaG93ICA6IGdldHRleHQoXCJQVVJDSC5cIiksXG4gICAgICAgICAgICBoZWxwICA6IGdldHRleHQoJ0xpc3Qgd2lsbCBiZSBmaWx0ZXJlZCBieSBwdXJjaGFzZSBkYXRlLi4uJyksIH0sIF07XG5cbmNvbnN0IFN1cGVydmlzb3JSZXNlcnZhdGlvbnNfVG9vbGJhckZpbHRlcnMgPSAoe1xuICAgIGV4dF9wcm9wcyxcbiAgICB2aWV3X3R5cGUsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICAvLyBJbXBsZW1lbnQgaG9va3NcbiAgICBsZXQgW3NlYXJjaF9wYXJhbXMsIHNldFNlYXJjaFBhcmFtc10gPSB1c2VTZWFyY2hQYXJhbXMoKTtcblxuICAgIGNvbnN0IFsgdGltZW91dCwgICAgICAgICBzZXRUaW1lb3V0IF0gICAgICAgPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbIHNlYXJjaF9waHJhc2UsICAgc2V0U2VhcmNoUGhyYXNlIF0gID0gdXNlU3RhdGUoc2VhcmNoX3BhcmFtcy5nZXQoJ3NlYXJjaF9waHJhc2UnKSk7XG4gICAgY29uc3QgWyBzZWFyY2hfc3RhdHVzLCAgIHNldFNlYXJjaFN0YXR1cyBdICA9IHVzZVN0YXRlKHNlYXJjaF9wYXJhbXMuZ2V0KCdzZWFyY2hfc3RhdHVzJykpO1xuXG4gICAgLy8gU2V0IHN0YXRlIGZvciBmcm9tLXRpbGwgZmlsdGVyXG4gICAgY29uc3QgbW9udGggICAgICA9IG1vbWVudCgpLmZvcm1hdChcIk1NXCIpO1xuICAgIGNvbnN0IHllYXIgICAgICAgPSBtb21lbnQoKS5mb3JtYXQoXCJZWVlZXCIpO1xuXG4gICAgY29uc3Qgc3RhcnRfZGF0ZSAgICAgPSBtb21lbnQoW1wiMDFcIiwgbW9udGgsIHllYXJdLmpvaW4oXCIuXCIpLCBcIkRELk1NLllZWVlcIik7XG4gICAgY29uc3Qgc3RhcnRfZGF0ZV91cmwgPSBzZWFyY2hfcGFyYW1zLmdldCgnc2VhcmNoX2Zyb20nKTtcbiAgICBjb25zdCBzdGFydF9kYXRlX3N0ciA9IHN0YXJ0X2RhdGVfdXJsID8gbW9tZW50KHN0YXJ0X2RhdGVfdXJsLCBcIllZTU1ERFwiKS5mb3JtYXQoXCJERC5NTS5ZWVwiKSA6IHN0YXJ0X2RhdGUuZm9ybWF0KFwiREQuTU0uWVlcIik7XG5cbiAgICBjb25zdCBlbmRfZGF0ZSAgICAgICA9IG1vbWVudCgpLmVuZE9mKFwibW9udGhcIik7XG4gICAgY29uc3QgZW5kX2RhdGVfdXJsICAgPSBzZWFyY2hfcGFyYW1zLmdldCgnc2VhcmNoX3RpbGwnKTtcbiAgICBjb25zdCBlbmRfZGF0ZV9zdHIgICA9IGVuZF9kYXRlX3VybCAgID8gbW9tZW50KGVuZF9kYXRlX3VybCwgICBcIllZTU1ERFwiKS5mb3JtYXQoXCJERC5NTS5ZWVwiKSA6IGVuZF9kYXRlLmZvcm1hdChcIkRELk1NLllZXCIpO1xuXG4gICAgY29uc3QgWyBzZWFyY2hfZnJvbSwgc2V0U2VhcmNoRnJvbSBdID0gdXNlU3RhdGUoc3RhcnRfZGF0ZV9zdHIpO1xuICAgIGNvbnN0IFsgc2VhcmNoX3RpbGwsIHNldFNlYXJjaFRpbGwgXSA9IHVzZVN0YXRlKGVuZF9kYXRlX3N0cik7XG5cbiAgICBjb25zdCBbIHJlZnJlc2hfdGltZSwgc2V0UmVmcmVzaFRpbWUgXSA9IHVzZVN0YXRlKDApO1xuXG4gICAgLy8gVmFyaWFibGVzXG4gICAgY29uc3QgYm9va2luZ19zdGF0dXNfbGlzdCA9IFtcbiAgICAgICAgeyB2YWx1ZSA6IFwiXCIsICAgICAgICAgICAgc2hvdyA6IGdldHRleHQoXCJBTExcIikgICAgICAgICB9LFxuICAgICAgLy97IHZhbHVlIDogXCJwcmVsaW1pbmFyeVwiLCBzaG93IDogZ2V0dGV4dChcIlBSRUxJTUlOQVJZXCIpIH0sXG4gICAgICAgIHsgdmFsdWUgOiBcInN1Ym1pdHRlZFwiLCAgIHNob3cgOiBnZXR0ZXh0KFwiU1VCTUlUVEVEXCIpICAgfSxcbiAgICAgICAgeyB2YWx1ZSA6IFwiY29uZmlybWVkXCIsICAgc2hvdyA6IGdldHRleHQoXCJDT05GSVJNRURcIikgICB9LFxuICAgICAgICB7IHZhbHVlIDogXCJjYW5jZWxlZFwiLCAgICBzaG93IDogZ2V0dGV4dChcIkNBTkNFTEVEXCIpICAgIH1cbiAgICBdXG5jb25zb2xlLmxvZyh2aWV3X3R5cGUpO1xuICAgIC8vIFZhcmlhYmxlc1xuICAgIC8vY29uc3QgZGF0ZV9jb2xzX2xpc3QgPSB2aWV3X3R5cGUgPT0gJ3Byb3BlcnR5JyA/XG4gICAgICAgICAgICAvL1sgeyB2YWx1ZSA6IFwiQ0hFQ0tJTlwiLFxuICAgICAgICAgICAgICAgIC8vc2hvdyAgOiBnZXR0ZXh0KFwiQ0hFQ0stSU5cIiksXG4gICAgICAgICAgICAgICAgLy9oZWxwICA6IGdldHRleHQoJ0xpc3Qgd2lsbCBiZSBmaWx0ZXJlZCBieSBjaGVjay1pbiBkYXRlLi4uJyksICAgICAgfSxcbiAgICAgICAgICAgICAgLy97IHZhbHVlIDogXCJTVEFUVVNDSEdcIixcbiAgICAgICAgICAgICAgICAvL3Nob3cgIDogZ2V0dGV4dChcIlNUQVRVU1wiKSxcbiAgICAgICAgICAgICAgICAvL2hlbHAgIDogZ2V0dGV4dCgnTGlzdCB3aWxsIGJlIGZpbHRlcmVkIGJ5IHN0YXR1cyBjaGFuZ2UgZGF0ZS4uLicpLCB9LCBdXG4gICAgICAgIC8vOiB2aWV3X3R5cGUgPT0gJ2V4cGVyaWVuY2UnID9cbiAgICAgICAgICAgIC8vWyB7IHZhbHVlIDogXCJFVkVOVFwiLFxuICAgICAgICAgICAgICAgIC8vc2hvdyAgOiBnZXR0ZXh0KFwiRVZFTlRcIiksXG4gICAgICAgICAgICAgICAgLy9oZWxwICA6IGdldHRleHQoJ0xpc3Qgd2lsbCBiZSBmaWx0ZXJlZCBieSBhY3R1YWwgZXZlbnQgZGF0ZS4uLicpLCAgICAgIH0sXG4gICAgICAgICAgICAgIC8veyB2YWx1ZSA6IFwiUFVSQ0hBU0VcIixcbiAgICAgICAgICAgICAgICAvL3Nob3cgIDogZ2V0dGV4dChcIlBVUkNIQVNFXCIpLFxuICAgICAgICAgICAgICAgIC8vaGVscCAgOiBnZXR0ZXh0KCdMaXN0IHdpbGwgYmUgZmlsdGVyZWQgYnkgcHVyY2hhc2UgZGF0ZS4uLicpLCB9LCBdXG4gICAgICAgIC8vOiBbXTtcblxuICAgIGNvbnN0IFtkYXRlX2NvbHNfbGlzdCwgc2V0RGF0ZUNvbHNMaXN0XSAgPSB1c2VTdGF0ZSh2aWV3X3R5cGUgPT0gJ3Byb3BlcnR5JyAgID8gZGF0ZV9jb2xzX2xpc3RfcHJvcGVydHkgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld190eXBlID09ICdleHBlcmllbmNlJyA/IGRhdGVfY29sc19saXN0X2V4cHJpZW5jZSA6IFtdKSA7XG4gICAgY29uc3QgW2RhdGVfc29ydF9jb2wsICBzZXREYXRlU29ydENvbF0gICA9IHVzZVN0YXRlKGRhdGVfY29sc19saXN0WzBdKSA7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2aWV3X3R5cGUgPT0gJ3Byb3BlcnR5JyAgID8gc2V0RGF0ZUNvbHNMaXN0KGRhdGVfY29sc19saXN0X3Byb3BlcnR5KSAgOlxuICAgICAgICB2aWV3X3R5cGUgPT0gJ2V4cGVyaWVuY2UnID8gc2V0RGF0ZUNvbHNMaXN0KGRhdGVfY29sc19saXN0X2V4cHJpZW5jZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZUNvbHNMaXN0KFtdKSA7XG4gICAgfSwgW3ZpZXdfdHlwZSwgXSk7XG5cbiAgICAvLyBPbmUgbW9yZSBlZmZlY3QgdG8gc2V0IHNldERhdGVDb2xzTGlzdFxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChkYXRlX2NvbHNfbGlzdC5sZW5ndGggPiAwKSB7IHNldERhdGVTb3J0Q29sKGRhdGVfY29sc19saXN0WzBdKTsgfVxuICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzZXREYXRlU29ydENvbCh7fSk7IH1cbiAgICB9LCBbZGF0ZV9jb2xzX2xpc3QsIF0pO1xuXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuXG4gICAgICAgIC8vIFdoZW4gYW55IG9mIHBhcmFtcyBjaGFuZ2VzLCBjbGVhciB0aW1lb3V0IGlmIG9uZSBleGlzdHNcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgI
1HNldFRpbWVvdXQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgYSBuZXcgdGltZW91dCBvZiBvbmUgZXhpc3RzXG4gICAgICAgIGNvbnN0IG5ld190aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRSZWZyZXNoVGltZShtb21lbnQoKS52YWx1ZU9mKCkpO1xuICAgICAgICB9LCA1MDApO1xuXG4gICAgfSwgW3NlYXJjaF9waHJhc2UsIHNlYXJjaF9zdGF0dXMsIHNlYXJjaF9mcm9tLCBzZWFyY2hfdGlsbCwgZGF0ZV9zb3J0X2NvbCxdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxldCBkaWN0ID0ge307XG5cbiAgICAgICAgaWYgKHNlYXJjaF9zdGF0dXMpICAgICAgIHsgZGljdFsnc2VhcmNoX3N0YXR1cyddICAgPSBzZWFyY2hfc3RhdHVzOyB9XG4gICAgICAgIGlmIChzZWFyY2hfcGhyYXNlKSAgICAgICB7IGRpY3RbJ3NlYXJjaF9waHJhc2UnXSAgID0gc2VhcmNoX3BocmFzZTsgfVxuICAgICAgICBpZiAoc2VhcmNoX2Zyb20pICAgICAgICAgeyBkaWN0WydzZWFyY2hfZnJvbSddICAgICA9IG1vbWVudChzZWFyY2hfZnJvbSwgXCJERC5NTS5ZWVwiKS5mb3JtYXQoXCJZWU1NRERcIik7IH1cbiAgICAgICAgaWYgKHNlYXJjaF90aWxsKSAgICAgICAgIHsgZGljdFsnc2VhcmNoX3RpbGwnXSAgICAgPSBtb21lbnQoc2VhcmNoX3RpbGwsIFwiREQuTU0uWVlcIikuZm9ybWF0KFwiWVlNTUREXCIpOyB9XG4gICAgICAgIGlmIChkYXRlX3NvcnRfY29sLnZhbHVlKSB7IGRpY3RbJ2RhdGVfZmlsdGVyX2NvbCddID0gZGF0ZV9zb3J0X2NvbC52YWx1ZTsgfVxuXG4gICAgICAgIHNldFNlYXJjaFBhcmFtcyhkaWN0KTtcbiAgICB9LCBbcmVmcmVzaF90aW1lLCBdKTtcblxuICAgIC8vIFJlbmRlcmluZy4uLlxuICAgIHJldHVybig8ZGl2IGNsYXNzTmFtZT1cIlN1cGVydmlzb3JIb3RlbEJvb2tpbmdGaWx0ZXJzXCI+XG5cbiAgICAgICAgey8qIENTViBleHBvcnQgYnV0dG9uICovfVxuICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lLWRhcmtcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLXNtLTIgbWItMiBtYi1zbS0wXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBmb250U2l6ZTogJzIycHgnLCBwYWRkaW5nOiAnMXB4IDEwcHgnIH19XG4gICAgICAgICAgICAgICAgdGl0bGU9eyBnZXR0ZXh0KCdFeHBvcnQgbGlzdCBvZiByZXNlcnZhdGlvbiB0byBhIENTViBmaWxlJykgfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3Byb3BzLnN1cGVydmlzb3JfYmFzZV91cmxcbiAgICAgICAgICAgICAgICAgICAgICArICdmaWxlLycgKyB2aWV3X3R5cGUgKyAnL2Nzdi8/J1xuICAgICAgICAgICAgICAgICAgICAgICsgWydzZWFyY2hfcGhyYXNlPScgICArIChzZWFyY2hfcGhyYXNlID8gc2VhcmNoX3BocmFzZSA6ICcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2VhcmNoX3N0YXR1cz0nICAgKyAoc2VhcmNoX3N0YXR1cyA/IHNlYXJjaF9zdGF0dXMgOiAnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF9mcm9tPScgICAgICsgbW9tZW50KHNlYXJjaF9mcm9tLCBcIkRELk1NLllZXCIpLmZvcm1hdChcIllZTU1ERFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2VhcmNoX3RpbGw9JyAgICAgKyBtb21lbnQoc2VhcmNoX3RpbGwsIFwiREQuTU0uWVlcIikuZm9ybWF0KFwiWVlNTUREXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRlX2ZpbHRlcl9jb2w9JyArIGRhdGVfc29ydF9jb2wudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJyYnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhcyBmYS1maWxlLWNzdlwiPjwvaT5cbiAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgeyAvKiBQcm9wZXJ0eSBvciBleHBlcmllbmNlIHNlYXJjaCBmaWx0ZXIgKi8gfVxuICAgICAgICA8Rm9ybUNvbnRyb2wgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9eyBnZXR0ZXh0KFwiRmlsdGVyXCIpIH1cbiAgICAgICAgICAgICAgICAgICB2YWx1ZT17ICFzZWFyY2hfcGhyYXNlID8gJycgOiBzZWFyY2hfcGhyYXNlIH1cbiAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtci1zbS0yIG1iLTIgbWItc20tMFwiXG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyBlID0+IHsgc2V0U2VhcmNoUGhyYXNlKGUuY3VycmVudFRhcmdldC52YWx1ZSk7IH19XG4gICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXsgZSA9PiB7IGlmIChlLmtleUNvZGUgPT0gMTMpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9fX1cbiAgICAgICAgLz5cblxuICAgICAgICB7IC8qIFByb3BlcnR5IG9yIGV4cGVyaWVuY2UgZnJvbS10aWxsICovIH1cbiAgICAgICAgPElucHV0R3JvdXAgY2xhc3NOYW1lPXsgXCJtci1zbS0yIG1iLTIgbWItbWQtMCBkLWlubGluZS1ibG9ja1wiIH1cblxuICAgICAgICA+XG4gICAgICAgICAgICA8RHJvcGRvd25CdXR0b25cbiAgICAgICAgICAgICAgICBhcz17SW5wdXRHcm91cC5QcmVwZW5kfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgaWQ9XCJpZC1zb3J0LWxpc3Qtc2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgIHRpdGxlPXsgZGF0ZV9zb3J0X2NvbC5zaG93IH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBmbG9hdCA6
1ICdsZWZ0JywgLyogd2lkdGg6ICcxMDZweCcgKi8gfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7IGRhdGVfY29sc19saXN0Lm1hcCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8RHJvcGRvd24uSXRlbSBldmVudEtleT17IGl0ZW0udmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsgaWR4IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyAoKSA9PiB7IHNldERhdGVTb3J0Q29sKGl0ZW0pOyB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGl0ZW0uc2hvdyB9XG4gICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uSXRlbT5cbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvRHJvcGRvd25CdXR0b24+XG4gICAgICAgICAgICA8RGF0ZVJhbmdlUGlja2VyXG4gICAgICAgICAgICAgICAgaW5pdGlhbFNldHRpbmdzPXt7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJERC5NTS5ZWVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlMYWJlbDogZ2V0dGV4dCgnQXBwbHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbExhYmVsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlIDogbW9tZW50KHNlYXJjaF9mcm9tLCAnREQuTU0uWVknKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSAgIDogbW9tZW50KHNlYXJjaF90aWxsLCAnREQuTU0uWVknKSxcbiAgICAgICAgICAgICAgICAgICAgYXV0b0FwcGx5IDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZHJvcHMgICAgIDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25IaWRlPXsgKGVsdCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWFyY2hGcm9tKGRhdGEuc3RhcnREYXRlLmZvcm1hdCgnREQuTU0uWVknKSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlYXJjaFRpbGwoZGF0YS5lbmREYXRlLmZvcm1hdCgnREQuTU0uWVknKSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBrZXk9eyBzZWFyY2hfZnJvbSArICctJyArIHNlYXJjaF90aWxsIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17IGdldHRleHQoJ0ZpbHRlciBieSBwZXJpb2QnKSB9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17ICdwZXJpb2QnIH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXsgJ3BlcmlvZCcgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3NlYXJjaCdcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aCA6ICcxODBweCcgfX1cbiAgICAgICAgICAgICAgICAvPlxuXG5cbiAgICAgICAgICAgIDwvRGF0ZVJhbmdlUGlja2VyPlxuICAgICAgICA8L0lucHV0R3JvdXA+XG5cbiAgICAgICAgeyAvKiBTdGF0dXMgZmlsdGVyICovIH1cbiAgICAgICAgPFN0YW5kYXJkRHJvcGRvd24gbGlzdD17IGJvb2tpbmdfc3RhdHVzX2xpc3QgfVxuICAgICAgICAgICAgZmllbGRfaWQ9XCJpbnB1dF9zdGF0dXNcIlxuICAgICAgICAgICAgdmFsdWU9e3sgdmFsdWUgOiAhc2VhcmNoX3N0YXR1cyA/IFwiXCIgOiBzZWFyY2hfc3RhdHVzIH19XG4gICAgICAgICAgICBtZW51X2Niaz17IChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkgeyByZXR1cm4gaXRlbS5zaG93ID8gaXRlbS5zaG93IDogZ2V0dGV4dCgnQUxMJyk7IH1cbiAgICAgICAgICAgICAgICBlbHNlICAgICAgeyByZXR1cm4gZ2V0dGV4dCgnVU5LTk9XTicpOyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbl9jbGlja19jYms9eyAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTZWFyY2hTdGF0dXModmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGVycm9ycz17bnVsbH1cbiAgICAgICAgICAgIGlkX2tleT0ndmFsdWUnXG4gICAgICAgICAgICBzaG93X2tleT0nc2hvdydcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIlwiXG4gICAgICAgIC8+XG5cbiAgICA8L2Rpdj4pO1xufVxuXG5jb25zdCBTdXBlcnZpc29yUmVzZXJ2YXRpb25zX1Rvb2xiYXIgPSAoe1xuICAgIGJhc2VfcmVzZXJ2YXRpb25zX3VybCxcbiAgICBzdXBlcnZpc29yX3BrLFxuICAgIGV4dF9wcm9wcyxcbiAgICBjaGlsZHJlbixcbn0pID0+IHtcblxuICAgIC8vIFN0YXRlIGhvb2tcbiAgICBjb25zdCBbIHZpZXdfdHlwZSwgc2V0Vmlld1R5cGUgXSA9IHVzZVN0YXRlKCdwcm9wZXJ0eScpO1xuICAgIGNvbnN0IFsgcGF0aG5hbWUsICBzZXRQYXRoTmFtZSBdID0gdXNlU3RhdGUoJycpO1xuXG4gICAgLy8gRGVmaW5lIHNvbWUgaG9va3NcbiAgICBsZXQgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICAgIGxldCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG5cbiAgICAvLyBEZWZpbmUgZWZmZWN0IGhvb2tcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuXG4gICAgICAgIC8vIFdoZW4gcGF0aCBuYW1lIGNoYW5nZXMgLT4gcmVjYWxjdWxhdGUgdmlldyB0eXBlXG4gICAgICAgIGlmIChwYXRobmFtZSAhPSBsb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgICAgICAgc2V0UGF0aE5hbWUobG9jYXRpb24ucGF0aG5hbWUpO1xuXG4gICAgICAgICAgICAvLyBUT0RPIDo6IEl0IG1heSBiZSB3b3J0aCB0byBtYWtlIGEgZnVuY2l0b24gb2YgdGhpc1xuICAgICAgICAgICAgbGV0IHBhdGhuYW1lX2FyciA9IGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBsZXQgcHJldl9wYXRobmFtZSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdnQgPSBwYXRobmFtZV9hcnIuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBwbiA9IHByZXZfcGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgcHJldl9wYXRobmFtZSA9IGl0ZW07XG5cbiAgICAgICAgICAgICAgICBpZiAocHBuID09ICdyZXNlcnZhdGlvbnMnKSB7IHJldHVybi
1B0cnVlOyAgfVxuICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFZpZXdUeXBlKHZ0WzBdKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVuZGVyIHZpZXdcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwiU3VwZXJ2aXNvclJlc2VydmF0aW9uc1Rvb2xiYXIgbXQtMlwiPlxuXG4gICAgICAgIDxOYXZiYXIgY2xhc3NOYW1lPVwiYmctbGlnaHRcIiBleHBhbmQ9XCJtZFwiPlxuICAgICAgICAgICAgPE5hdmJhci5Ub2dnbGUgYXJpYS1jb250cm9scz1cInByb3Atb3duZXItbmF2YmFyLW5hdlwiIGFzPVwiZGl2XCI+XG4gICAgICAgICAgICAgICAgPEZvcm0gaW5saW5lIHN0eWxlPXt7IGZsb2F0ICAgICAgOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgICAgOiAnaW5saW5lLWJsb2NrJyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBhcmlhLWNvbnRyb2xzPVwicHJvcC1vd25lci1uYXZiYXItbmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVG9nZ2xlIG5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5hdmJhci10b2dnbGVyIGNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvRm9ybT5cblxuICAgICAgICAgICAgICAgIDxGb3JtIGlubGluZSBzdHlsZT17eyBmbG9hdCAgICAgIDogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSAgICA6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wIDogJzE3cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSAgIDogJzEuMjVyZW0nIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7IHZpZXdfdHlwZSB9XG4gICAgICAgICAgICAgICAgPC9Gb3JtPlxuXG4gICAgICAgICAgICA8L05hdmJhci5Ub2dnbGU+XG4gICAgICAgICAgPE5hdmJhci5Db2xsYXBzZSBpZD1cInByb3Atb3duZXItbmF2YmFyLW5hdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvcm0gaW5saW5lPlxuXG4gICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwIGFyaWEtbGFiZWw9eyBnZXR0ZXh0KFwiTW9kdWxlIHNlbGVjdG9yXCIpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMiBtdC1zbS0wXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9yZXNlcnZhdGlvbnNfdXJsICsgJ3Byb3BlcnR5LycgKyBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJlcGxhY2UgOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXsgdmlld190eXBlID09ICdwcm9wZXJ0eScgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGdldHRleHQoXCJBY2NvbW1vZGF0aW9uc1wiKSB9XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9yZXNlcnZhdGlvbnNfdXJsICsgJ2V4cGVyaWVuY2UvJyArIGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmVwbGFjZSA6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU9eyB2aWV3X3R5cGUgPT0gJ2V4cGVyaWVuY2UnIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgeyBnZXR0ZXh0KFwiRXhwZXJpZW5jZXNcIikgfVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICA8L0Zvcm0+XG5cbiAgICAgICAgICAgIDxGb3JtIGlubGluZVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMiBtdC1tZC0wXCJcbiAgICAgICAgICAgICAgICAgIGFjdGlvbj1cImh0dHBzOi8vbWtzcC5zaVwiXG5cbiAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgIDxTdXBlcnZpc29yUmVzZXJ2YXRpb25zX1Rvb2xiYXJGaWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgIGV4dF9wcm9wcz17IGV4dF9wcm9wcyB9XG4gICAgICAgICAgICAgICAgICAgIHZpZXdfdHlwZT17IHZpZXdfdHlwZSB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRm9ybT5cblxuICAgICAgICAgIDwvTmF2YmFyLkNvbGxhcHNlPlxuICAgICAgICA8L05hdmJhcj5cblxuICAgIDwvZGl2Pik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN1cGVydmlzb3JSZXNlcnZhdGlvbnNfVG9vbGJhcjtcblxuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5jbGFzcyBIb2xkZXJJbmZvX01vZGFsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgLy8gSW5pdGlhbCBzdGF0ZVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaXNBY3RpdmUgOiBmYWxzZSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvcHlIYW5kbGVyKGVtYWlsKSB7XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGVtYWlsKVxuICAgICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWVcbiAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGNvbnN0IHsgbmFtZSB9ICAgICAgPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7IGVtYWlsIH0gICAgID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgeyBwaG9uZSB9ICAgICA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhvbGRlci1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhvbGRlci1uYW1lXCI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5OYW1lOiA8L3N0cm9uZz4ge25hbWV9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtaG9sZGVyLW1haWxcIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkVtYWlsOiA8L3N0cm9uZz4gXG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuaXNBY3RpdmUgPyBcbiAgICAgICAgICAgICAgICAoPD48aSBjbGFzc05hbWU9XCJpbmZvLWVtYWlsIGNsaWNrZWRcIiBvbkNsaWNrPXsoZSkgPT4ge3RoaXMuY29weUhhbmRsZXIoZW
11haWwpfX0+e2VtYWlsfTwvaT4gXG4gICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtY29weSBtYWlsLWljb25cIj48L2k+IDwvPilcbiAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiaW5mby1lbWFpbFwiIG9uQ2xpY2s9eyhlKSA9PiB7dGhpcy5jb3B5SGFuZGxlcihlbWFpbCl9fT57ZW1haWx9PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ob2xkZXItcGhvbmVcIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlBob25lOiA8L3N0cm9uZz4ge3Bob25lfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSG9sZGVySW5mb19Nb2RhbDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjIgIE1paGEgS2l0acSNPG1paGEua2l0aWNAbWtzcC5zaT4gLSBBbGwgcmlnaHRzIHJlc2VydmVkIVxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFN1c3BlbnNlLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMsIHVzZU5hdmlnYXRlLCB1c2VMb2NhdGlvbiwgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSBcInJlYWN0LXJvdXRlci1kb21cIjtcblxuaW1wb3J0IEFsZXJ0ICBmcm9tICdyZWFjdC1ib290c3RyYXAvQWxlcnQnO1xuaW1wb3J0IFRhYmxlICBmcm9tICdyZWFjdC1ib290c3RyYXAvVGFibGUnO1xuXG5pbXBvcnQgQWpheFYyICAgICAgICAgZnJvbSAnLi4vdXRpbGl0eS9BamF4VjIuanMnXG5pbXBvcnQgU3RhbmRhcmRMb2FkZXIgZnJvbSAnLi4vdXRpbGl0eS9jb21wb25lbnRzL1N0YW5kYXJkTG9hZGVyLmpzJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgSG9sZGVySW5mb19Nb2RhbCBmcm9tICcuL0hvbGRlckluZm9fTW9kYWwuanMnXG5pbXBvcnQgU3RhbmRhcmRNb2RhbCAgZnJvbSAnLi4vdXRpbGl0eS9jb21wb25lbnRzL1N0YW5kYXJkTW9kYWwuanMnO1xuXG5jb25zdCBTdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5UHJvcGVydHkgPSAoe1xuICAgIGJhc2VfcmVzZXJ2YXRpb25zX3Byb3BlcnR5X3VybCxcbiAgICBzdXBlcnZpc29yX3BrLFxuICAgIGV4dF9wcm9wcyxcbiAgICBjaGlsZHJlbixcbn0pID0+IHtcblxuICAgIC8vIFNldCBzdGF0ZSBob29rc1xuICAgIGNvbnN0IFsgY29zdF9zdW0sICAgICAgc2V0Q29zdFN1bSAgICAgIF0gPSB1c2VTdGF0ZSgpO1xuXG4gICAgLy8gQ29sbGVjdCBzb21lIGhvb2tzXG4gICAgY29uc3QgWyBzZWFyY2hfcGFyYW1zLCBzZXRTZWFyY2hQYXJhbXMgXSA9IHVzZVNlYXJjaFBhcmFtcygpO1xuXG4gICAgLy8gUHJlcGFyZSBGUk9NIC0gVElMTCBkYXRlcyBmb3IgZmlsdGVyc1xuICAgIGNvbnN0IG1vbnRoICAgICAgPSBtb21lbnQoKS5mb3JtYXQoXCJNTVwiKTtcbiAgICBjb25zdCB5ZWFyICAgICAgID0gbW9tZW50KCkuZm9ybWF0KFwiWVlZWVwiKTtcbiAgICBjb25zdCBzdGFydF9kYXRlID0gbW9tZW50KFtcIjAxXCIsIG1vbnRoLCB5ZWFyXS5qb2luKFwiLlwiKSwgXCJERC5NTS5ZWVlZXCIpO1xuICAgIGNvbnN0IGVuZF9kYXRlICAgPSBtb21lbnQoKS5lbmRPZihcIm1vbnRoXCIpO1xuXG5cbiAgICAvLyBGaXggcGFyYW1zXG4gICAgbGV0IHNlYXJjaF9zdGF0dXMgICA9IHNlYXJjaF9wYXJhbXMuZ2V0KCdzZWFyY2hfc3RhdHVzJyk7XG4gICAgICAgIHNlYXJjaF9zdGF0dXMgICA9ICFzZWFyY2hfc3RhdHVzICAgPyAnJyA6IHNlYXJjaF9zdGF0dXM7XG4gICAgbGV0IHNlYXJjaF9waHJhc2UgICA9IHNlYXJjaF9wYXJhbXMuZ2V0KCdzZWFyY2hfcGhyYXNlJyk7XG4gICAgICAgIHNlYXJjaF9waHJhc2UgICA9ICFzZWFyY2hfcGhyYXNlICAgPyAnJyA6IHNlYXJjaF9waHJhc2U7XG4gICAgbGV0IHNlYXJjaF9mcm9tICAgICA9IHNlYXJjaF9wYXJhbXMuZ2V0KCdzZWFyY2hfZnJvbScpO1xuICAgICAgICBzZWFyY2hfZnJvbSAgICAgPSAhc2VhcmNoX2Zyb20gICAgID8gc3RhcnRfZGF0ZS5mb3JtYXQoXCJZWU1NRERcIikgOiBzZWFyY2hfZnJvbTtcbiAgICBsZXQgc2VhcmNoX3RpbGwgICAgID0gc2VhcmNoX3BhcmFtcy5nZXQoJ3NlYXJjaF90aWxsJyk7XG4gICAgICAgIHNlYXJjaF90aWxsICAgICA9ICFzZWFyY2hfdGlsbCAgICAgPyBlbmRfZGF0ZS5mb3JtYXQoXCJZWU1NRERcIikgICA6IHNlYXJjaF90aWxsO1xuICAgIGxldCBkYXRlX2ZpbHRlcl9jb2wgPSBzZWFyY2hfcGFyYW1zLmdldCgnZGF0ZV9maWx0ZXJfY29sJyk7XG4gICAgICAgIGRhdGVfZmlsdGVyX2NvbCA9ICFkYXRlX2ZpbHRlcl9jb2wgPyAnJyA6IGRhdGVfZmlsdGVyX2NvbDtcblxuICAgIC8vIFJlbmRlciB2aWV3XG4gICAgcmV0dXJuICg8PlxuXG4gICAgICAgIDxTdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5UHJvcGVydHlfbGlzdFxuICAgICAgICAgICAgYmFzZV9yZXNlcnZhdGlvbnNfcHJvcGVydHlfdXJsPXsgYmFzZV9yZXNlcnZhdGlvbnNfcHJvcGVydHlfdXJsIH1cbiAgICAgICAgICAgIHN1cGVydmlzb3JfcGs9eyBzdXBlcnZpc29yX3BrIH1cbiAgICAgICAgICAgIHB1Ymxpc2hfZmlfY2JrPXsgKGNvc3QpID0+IHsgc2V0Q29zdFN1bShjb3N0LmNvc3Rfc3VtKTsgfX1cblxuICAgICAgICAgICAgc2VhcmNoX3N0YXR1cz17IHNlYXJjaF9zdGF0dXMgfVxuICAgICAgICAgICAgc2VhcmNoX3BocmFzZT17IHNlYXJjaF9waHJhc2UgfVxuICAgICAgICAgICAgc2VhcmNoX2Zyb209eyBzZWFyY2hfZnJvbSB9XG4gICAgICAgICAgICBzZWFyY2hfdGlsbD17IHNlYXJjaF90aWxsIH1cbiAgICAgICAgICAgIGRhdGVfZmlsdGVyX2NvbD17IGRhdGVfZmlsdGVyX2NvbCB9XG4gICAgICAgICAgICBzZXRfc2VhcmNoX3BhcmFtc19jYms9eyBzZXRTZWFyY2hQYXJhbXMgfVxuXG4gICAgICAgICAgICBleHRfcHJvcHM9eyBleHRfcHJvcHMgfVxuICAgICAgICA+XG4gICAgICAgICAgICB7IGNoaWxkcmVuIH1cbiAgICAgICAgPC9TdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5UHJvcGVydHlfbGlzdD5cbiAgICA8Lz4pO1xufVxuXG5cbi8qKlxuICogU3VwZXJ2aXNvciBib29raW5nIGZpbHRlcnMgKi9cbmNsYXNzIFN1cGVydmlzb3JSZXNlcnZhdGlvbnNfQnlQcm9wZXJ0eV9saXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgLy8gQ2xhc3MgdmFyaWFibGVzXG4gICAgICAgI
1HRoaXMuZmlsdGVyX3JlbG9hZF90b3V0ID0gbnVsbDtcblxuICAgICAgICAvLyBJbml0aWFsIHN0YXRlXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBib29raW5nX2xpc3QgICAgOiBbXSxcbiAgICAgICAgICAgIGNvc3RfZGF0YSAgICAgICA6IHt9LFxuXG4gICAgICAgICAgICBpc19wcm9wX2xvYWRpbmcgOiBmYWxzZSxcbiAgICAgICAgICAgIGlzX2ZpX2xvYWRpbmcgICA6IGZhbHNlLFxuXG4gICAgICAgICAgICBkaXNwbGF5X21vZGFsIDogZmFsc2UsXG4gICAgICAgICAgICBuYW1lIDogXCJcIixcbiAgICAgICAgICAgIGVtYWlsIDogXCJcIiAsXG4gICAgICAgICAgICBwaG9uZSA6IFwiXCIgLFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmluZGVkIGZ1bmN0aW9ucyBzZWN0aW9uXG4gICAgICAgIHRoaXMuZXh0cmFjdEZpbHRlclZhbHVlcyA9IHRoaXMuZXh0cmFjdEZpbHRlclZhbHVlcy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbG9hZFJlc2VydmF0aW9uc0RhdGEgICAgICAgID0gdGhpcy5yZWxvYWRSZXNlcnZhdGlvbnNEYXRhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVsb2FkUmVzZXJ2YXRpb25zRGF0YURlbGF5ZWQgPSB0aGlzLnJlbG9hZFJlc2VydmF0aW9uc0RhdGFEZWxheWVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTG9hZGluZyBkYXRhIHZpYSBBSkFYXG4gICAgICAgIGxldCBjdHggPSB0aGlzO1xuXG4gICAgICAgIC8vIEFqYXggZGF0YSBsb2FkZXJzXG4gICAgICAgIHRoaXMuYWpheF9ib29raW5nc19nZXQgPSBuZXcgQWpheFYyKCdsaXN0cy9zdXBwbGllcl9ib29raW5nLycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmV4dF9wcm9wcy5zdXBlcnZpc29yX2Jhc2VfdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUE9TVCcsIHRydWUsIHRoaXMucHJvcHMuZXh0X3Byb3BzLm5vdGlmeV9jYmspO1xuICAgICAgICB0aGlzLmFqYXhfYm9va2luZ3NfZ2V0LnNldFN1Y2Nlc3NDYmsoKHJlc3BvbnNlLCBlcnJfaGFuZGxlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgIGN0eC5zZXRTdGF0ZSh7IGJvb2tpbmdfbGlzdCAgICA6IHJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcHJvcF9sb2FkaW5nIDogZmFsc2V9KTtcbiAgICAgICAgICAgICAgICAvLyBjdHgucHJvcHMucHVibGlzaF9yZXN1bHRzX2NiayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LnNldFN0YXRlKHsgaXNfcmVzX2xvYWRpbmcgOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICBhbGVydCgnTmFwYWthIHByaSBuYXN0YXZpdHZpIG5hcHJlZG92YW5qYSEnKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFqYXhfYm9va2luZ3NfZ2V0LnNldE5vdGlmeU1zZ1N1Y2Nlc3MobnVsbCk7XG4gICAgICAgIHRoaXMuYWpheF9ib29raW5nc19nZXQuc2V0Tm90aWZ5TXNnRmFpbChnZXR0ZXh0KCdDb3VsZCBub3QgbG9hZCBib29raW5ncyBkYXRhLicpKTtcblxuICAgICAgICB0aGlzLmFqYXhfYm9va2luZ3NfZmkgPSBuZXcgQWpheFYyKCdsaXN0cy9zdXBwbGllcl9ib29raW5nLycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmV4dF9wcm9wcy5zdXBlcnZpc29yX2Jhc2VfdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUFVUJywgdHJ1ZSwgdGhpcy5wcm9wcy5leHRfcHJvcHMubm90aWZ5X2Niayk7XG4gICAgICAgIHRoaXMuYWpheF9ib29raW5nc19maS5zZXRTdWNjZXNzQ2JrKChyZXNwb25zZSwgZXJyX2hhbmRsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBjdHguc2V0U3RhdGUoeyBpc19maV9sb2FkaW5nIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zdF9kYXRhICAgICA6IHJlc3BvbnNlLmRhdGEsIH0pO1xuICAgICAgICAgICAgICAgIGN0eC5wcm9wcy5wdWJsaXNoX2ZpX2NiayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LnNldFN0YXRlKHsgaXNfZmlfbG9hZGluZyA6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGFsZXJ0KCdOYXBha2EgcHJpIG5hc3Rhdml0dmkgbmFwcmVkb3ZhbmphIScpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWpheF9ib29raW5nc19maS5zZXROb3RpZnlNc2dTdWNjZXNzKG51bGwpO1xuICAgICAgICB0aGlzLmFqYXhfYm9va2luZ3NfZmkuc2V0Tm90aWZ5TXNnRmFpbChnZXR0ZXh0KCdDb3VsZCBub3QgbG9hZCBib29raW5ncyBmaW5hbmNpYWwgaW5mb3JtYXRpb24uJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgZXhwZXJpZW5jZXMgcmVzZXJ2YXRpb25zIHdoZW4gY29tcG9uZW50IGJlY29tZXMgdmlzaWJsZSAqL1xuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLnJlbG9hZFJlc2VydmF0aW9uc0RhdGEoKVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gV2hlbiBjb21wb25lbnQgdXBkYXRlcy4uLlxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcblxuICAgICAgICAvLyBSZWxvYWQgbGlzdCBpZiBmaWx0ZXJzIGNoYW5nZVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5zZWFyY2hfc3RhdHVzICAgIT0gcHJldlByb3BzLnNlYXJjaF9zdGF0dXMgICB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hfcGhyYXNlICAgIT0gcHJldlByb3BzLnNlYXJjaF9waHJhc2UgICB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hfZnJvbSAgICAgIT0gcHJldlByb3BzLnNlYXJjaF9mcm9tICAgICB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hfdGlsbCAgICAgIT0gcHJldlByb3BzLnNlYXJjaF90aWxsICAgICB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXRlX2ZpbHRlcl9jb2wgIT0gcHJldlByb3BzLmRh
1dGVfZmlsdGVyX2NvbCApIHtcblxuICAgICAgICAgICAgLy8gRXh0cmFjdCBmaWx0ZXIgdmFsdWVzIHdpbGwgZW5zdXJlIHRoYXQgYXBwcm9wcmlhdGVcbiAgICAgICAgICAgIC8vIGZpbHRlciB2YWx1ZXMgYXJlIHJlYWQgaW50byBkYXRhIGRpY3QgYW5kIHRyYW5zbWl0dGVkXG4gICAgICAgICAgICB0aGlzLnJlbG9hZFJlc2VydmF0aW9uc0RhdGFEZWxheWVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIERlbGF5ZWQgcmVsb2FkIG9mIHJlc2VydmF0aW9ucyBkYXRhLiAqL1xuICAgIHJlbG9hZFJlc2VydmF0aW9uc0RhdGFEZWxheWVkKCkge1xuXG4gICAgICAgIC8vIEtpbGwgcHJldmlvdXMgdGltZW91dFxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfcmVsb2FkX3RvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZpbHRlcl9yZWxvYWRfdG91dCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcl9yZWxvYWRfdG91dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgYSBuZXcgb25lXG4gICAgICAgIGxldCBjdHggPSB0aGlzO1xuICAgICAgICB0aGlzLmZpbHRlcl9yZWxvYWRfdG91dCA9IHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgIGN0eC5yZWxvYWRSZXNlcnZhdGlvbnNEYXRhKCk7XG4gICAgICAgICAgICBjdHguZmlsdGVyX3JlbG9hZF90b3V0ID0gbnVsbDtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB3aWxsIGNhdXNlIHJlbG9hZCBvZiByZXNlcnZhdGlvbnMgZGF0YS4gKi9cbiAgICByZWxvYWRSZXNlcnZhdGlvbnNEYXRhKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzX3Byb3BfbG9hZGluZyA6IHRydWUsXG4gICAgICAgICAgICBpc19maV9sb2FkaW5nICAgOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFqYXhfYm9va2luZ3NfZ2V0LnJlcXVlc3QodGhpcy5leHRyYWN0RmlsdGVyVmFsdWVzKCkpO1xuICAgICAgICB0aGlzLmFqYXhfYm9va2luZ3NfZmkucmVxdWVzdCh0aGlzLmV4dHJhY3RGaWx0ZXJWYWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgZXh0cmFjdEZpbHRlclZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlYXJjaF9zdGF0dXMgOiB0aGlzLnByb3BzLnNlYXJjaF9zdGF0dXMgPyB0aGlzLnByb3BzLnNlYXJjaF9zdGF0dXMgOiAnJyxcbiAgICAgICAgICAgIHNlYXJjaF9waHJhc2UgOiB0aGlzLnByb3BzLnNlYXJjaF9waHJhc2UsXG4gICAgICAgICAgICBzZWFyY2hfZnJvbSAgIDogdGhpcy5wcm9wcy5zZWFyY2hfZnJvbSxcbiAgICAgICAgICAgIHNlYXJjaF90aWxsICAgOiB0aGlzLnByb3BzLnNlYXJjaF90aWxsLFxuICAgICAgICAgICAgZGF0ZV9maWx0ZXJfY29sIDogdGhpcy5wcm9wcy5kYXRlX2ZpbHRlcl9jb2wsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREaXNwbGF5TW9kYWwoYm9va2luZykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgICAgZGlzcGxheV9tb2RhbDogIXByZXZTdGF0ZS5kaXNwbGF5X21vZGFsXG4gICAgICAgICAgfSkpO1xuICAgICAgICBpZihib29raW5nICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubmFtZSA9IGJvb2tpbmcubmFtZVxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5lbWFpbCA9IGJvb2tpbmcuZW1haWxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUucGhvbmUgPSBib29raW5nLnBob25lXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW5kZXJpbmcgdmlld1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBib29raW5nX2xpc3QgfSAgICA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IHsgY29zdF9kYXRhIH0gICAgICAgPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCB7IGlzX3Byb3BfbG9hZGluZyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgeyBpc19maV9sb2FkaW5nIH0gICA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgLy8gRXhlY3V0ZSByZW5kZXIuLi5cbiAgICAgICAgcmV0dXJuKDxkaXYgY2xhc3NOYW1lPVwiU3VwZXJ2aXNvckhvdGVsQm9va2luZ0xpc3RcIj5cblxuICAgICAgICAgICAgPFN0YW5kYXJkTW9kYWwgeyAuLi50aGlzLnN0YXRlIH1cbiAgICAgICAgICAgICAgICBtb2RhbF9zaG93PXsgdGhpcy5zdGF0ZS5kaXNwbGF5X21vZGFsIH1cbiAgICAgICAgICAgICAgICBtb2RhbF9jZW50ZXJlZD17IHRydWUgfVxuICAgICAgICAgICAgICAgIG1vZGFsX3RpdGxlPXsgZ2V0dGV4dCgnSG9sZGVyIGluZm9ybWF0aW9uJykgfVxuICAgICAgICAgICAgICAgIG1vZGFsX2NvbXBvbmVudD17IEhvbGRlckluZm9fTW9kYWwgfVxuICAgICAgICAgICAgICAgIG1vZGFsX2Nsb3NlX2Niaz17ICgpID0+IHt0aGlzLnNldERpc3BsYXlNb2RhbCgpfX1cbiAgICAgICAgICAgICAgICBhY3Rpb25faGlkZT17dHJ1ZX1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAoaXNfcHJvcF9sb2FkaW5nIHx8IGlzX2ZpX2xvYWRpbmcpICYmXG4gICAgICAgICAgICAgICAgPFN0YW5kYXJkTG9hZGVyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9eyBnZXR0ZXh0KCdMb2FkaW5nIHJlc2VydmF0aW9ucyBieSBwcm9wZXJ0eS4uLicpIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7IGJvb2tpbmdfbGlzdC5sZW5ndGggPD0gMCA/XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBwdC01XCI+XG4gICAgICAgICAgICAgICAgICAgIHsgZ2V0dGV4dCgnTm8gcmVzZXJ2YXRpb25zIGZvdW5kIGZvciBzcGVjaWZpZWQgZmlsdGVyIGNyaXRlcmlhLi4uJykgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA6IDw+XG5cbiAgICAgICAgICAgICAgICA8QWxlcnQgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTMgbWItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgI
1HN0eWxlPXt7IGRpc3BsYXkgOiBcImlubGluZS1ibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIDogXCIxMDAlXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZmxvYXQ6J2xlZnQnLCBtYXJnaW5Ub3A6IFwiM3B4XCIsIGZvbnRTaXplOiBcIjE0cHRcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZ2V0dGV4dCgnTGlzdCBvZicpICsgJyAnICsgZ2V0dGV4dCgncHJvcGVydGllcycpIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZmxvYXQ6J3JpZ2h0JywgbWFyZ2luVG9wOiBcIjNweFwiLCBmb250U2l6ZTogXCIxNHB0XCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGdldHRleHQoJ1N1bSBvdmVyYWxsOicpIH0geyBjb3N0X2RhdGEuY29zdF9zdW0gPyBjb3N0X2RhdGEuY29zdF9zdW0udG9GaXhlZCgyKSA6ICcnIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9BbGVydD5cblxuICAgICAgICAgICAgICAgIDxUYWJsZSByZXNwb25zaXZlIGhvdmVyPlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnsgZ2V0dGV4dCgnU3VwcGxpZXInKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+eyBnZXR0ZXh0KCdQcm9wZXJ0eScpIH08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPnsgZ2V0dGV4dCgnQm9va2luZyB2aWEnKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGdldHRleHQoJ0NoZWNrLWluJykgfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+eyBnZXR0ZXh0KCdDaGVjay1vdXQnKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsvKiA8dGg+eyBnZXR0ZXh0KCdEdXJhdGlvbicpIH08L3RoPiAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+eyBnZXR0ZXh0KCdIb2xkZXInKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+eyBnZXR0ZXh0KCdSb29tcycpIH08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57IGdldHRleHQoJ0d1ZXN0cycpIH08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPnsgZ2V0dGV4dCgnU3RhdGUgY2hnLiBkYXRlJykgfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+eyBnZXR0ZXh0KCdTdGF0dXMnKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGdldHRleHQoJ1ByaWNlJykgfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGJvb2tpbmdfbGlzdC5tYXAoKGJvb2tpbmcsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG93bmVyICAgICAgID0gYm9va2luZy5zdXBwbGllcl91c2VyLmZpcnN0X25hbWUgKyAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJvb2tpbmcuc3VwcGxpZXJfdXNlci5sYXN0X25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgICAgPSBib29raW5nLmhvdGVsLmhvdGVsX25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9va2luZ192aWEgPSBib29raW5nLmJvb2tpbmdfc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrX2luICAgID0gYm9va2luZy5jaGVja19pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja19vdXQgICA9IGJvb2tpbmcuY2hlY2tfb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uICAgID0gYm9va2luZy5kdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBob2xkZXIgICAgICA9IGJvb2tpbmcubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWFpbCAgICAgICA9IGJvb2tpbmcuZW1haWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vbXMgICAgICAgPSBib29raW5nLnJvb21zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGd1ZXN0cyAgICAgID0gYm9va2luZy5ndWVzdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzICAgICAgPSBib29raW5nLnN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZSAgICAgICA9IGJvb2tpbmcucHJpY2Vfb3ZlcmFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgXCIgXCIgKyBib29raW5nLmN1cnJlbmN5LnNob3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheV9kYXRlICAgID0gbW9tZW50KGJvb2tpbmcuc3RhdHVzX2NoZ190aW1lLCBcIllZWVktTU0tRERUSEg6bW06c3MuU1NTXCIpLmZvcm1hdChcIkRELk1NLllZWVkgSEg6bW1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGhvbmUgICAgICAgPSBib29raW5nLnBob25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciBrZXk9eyBpZHggfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnsgb3duZXIgfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57IHByb3BlcnR5IH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGJvb2tpbmdfdmlhIH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+eyBjaGVja19pbiB9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnsgY2hlY2tfb3V0IH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1HsvKiA8dGQgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGR1cmF0aW9uIH08L3RkPiAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3IgOiAnaGVscCcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXsgXCJFbWFpbDogXCIgKyBlbWFpbCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaG9sZGVyIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhcyBmYS1pbmZvLWNpcmNsZSBob2xkZXItaW5mb1wiIG9uQ2xpY2s9eyhlKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheU1vZGFsKGJvb2tpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPnsgcm9vbXMgfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPnsgZ3Vlc3RzIH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IHBheV9kYXRlIH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgYWxpZ24tbWlkZGxlIGl0ZW0tc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17IFN0cmluZyhzdGF0dXMpLnRvTG93ZXJDYXNlKCkgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdldHRleHQoc3RhdHVzKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj57IHByaWNlIH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgPC8+fVxuXG4gICAgICAgIDwvZGl2Pik7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5UHJvcGVydHk7XG4iLCIvKlxuICogQ29weXJpZ2h0IChDKSAyMDIwLTIzICBNaWhhIEtpdGnEjTxtaWhhLmtpdGljQG1rc3Auc2k+IC0gQWxsIHJpZ2h0cyByZXNlcnZlZCFcbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBTdXNwZW5zZSwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVBhcmFtcywgdXNlTmF2aWdhdGUsIHVzZUxvY2F0aW9uLCB1c2VTZWFyY2hQYXJhbXMgfSBmcm9tIFwicmVhY3Qtcm91dGVyLWRvbVwiO1xuXG5pbXBvcnQgQWxlcnQgIGZyb20gJ3JlYWN0LWJvb3RzdHJhcC9BbGVydCc7XG5pbXBvcnQgVGFibGUgIGZyb20gJ3JlYWN0LWJvb3RzdHJhcC9UYWJsZSc7XG5cbmltcG9ydCBBamF4VjIgICAgICAgICBmcm9tICcuLi91dGlsaXR5L0FqYXhWMi5qcyc7XG5pbXBvcnQgU3RhbmRhcmRMb2FkZXIgZnJvbSAnLi4vdXRpbGl0eS9jb21wb25lbnRzL1N0YW5kYXJkTG9hZGVyLmpzJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgSG9sZGVySW5mb19Nb2RhbCBmcm9tICcuL0hvbGRlckluZm9fTW9kYWwuanMnXG5pbXBvcnQgU3RhbmRhcmRNb2RhbCAgZnJvbSAnLi4vdXRpbGl0eS9jb21wb25lbnRzL1N0YW5kYXJkTW9kYWwuanMnO1xuXG5jb25zdCBTdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5RXhwZXJpZW5jZSA9ICh7XG4gICAgYmFzZV9yZXNlcnZhdGlvbnNfZXhwZXJpZW5jZV91cmwsXG4gICAgc3VwZXJ2aXNvcl9wayxcbiAgICBleHRfcHJvcHMsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICAvLyBTZXQgc3RhdGUgaG9va3NcbiAgICBjb25zdCBbIGNvc3Rfc3VtLCAgICAgIHNldENvc3RTdW0gICAgICBdID0gdXNlU3RhdGUoKTtcblxuICAgIC8vIENvbGxlY3Qgc29tZSBob29rc1xuICAgIGNvbnN0IFsgc2VhcmNoX3BhcmFtcywgc2V0U2VhcmNoUGFyYW1zIF0gPSB1c2VTZWFyY2hQYXJhbXMoKTtcblxuICAgIC8vIFByZXBhcmUgRlJPTSAtIFRJTEwgZGF0ZXMgZm9yIGZpbHRlcnNcbiAgICBjb25zdCBtb250aCAgICAgID0gbW9tZW50KCkuZm9ybWF0KFwiTU1cIik7XG4gICAgY29uc3QgeWVhciAgICAgICA9IG1vbWVudCgpLmZvcm1hdChcIllZWVlcIik7XG4gICAgY29uc3Qgc3RhcnRfZGF0ZSA9IG1vbWVudChbXCIwMVwiLCBtb250aCwgeWVhcl0uam9pbihcIi5cIiksIFwiREQuTU0uWVlZWVwiKTtcbiAgICBjb25zdCBlbmRfZGF0ZSAgID0gbW9tZW50KCkuZW5kT2YoXCJtb250aFwiKTtcblxuICAgIC8vIEZpeCBwYXJhbXNcbiAgICBsZXQgc2VhcmNoX3N0YXR1cyA9IHNlYXJjaF9wYXJhbXMuZ2V0KCdzZWFyY2hfc3RhdHVzJyk7XG4gICAgICAgIHNlYXJjaF9zdGF0dXMgPSAhc2VhcmNoX3N0YXR1cyA/ICcnIDogc2VhcmNoX3N0YXR1cztcbiAgICBsZXQgc2VhcmNoX3BocmFzZSA9IHNlYXJjaF9wYXJhbXMuZ2V0KCdzZWFyY2hfcGhyYXNlJyk7XG4gICAgICAgIHNlYXJjaF9waHJhc2UgPSAhc2VhcmNoX3BocmFzZSA/ICcnIDogc2VhcmNoX3BocmFzZTtcbiAgICBsZXQgc2VhcmNoX2Zyb20gICA9IHNlYXJjaF9wYXJhbXMuZ2V0KCdzZWFyY2hfZnJvbScpO1xuICAgICAgICBzZWFyY2hfZnJvbSAgID0gIXNlYXJjaF9mcm9tICAgPyBzdGFydF9kYXRlLmZvcm1hdChcIllZTU1ERFwiKSA6IHNlYXJjaF9mcm9tO1xuICAgIGxldCBzZWFyY2hfdGlsbCAgID0gc2VhcmNoX3BhcmFtcy5nZXQoJ3NlYXJjaF90aWxsJyk7XG4gICAgICAgI
1HNlYXJjaF90aWxsICAgPSAhc2VhcmNoX3RpbGwgICA/IGVuZF9kYXRlLmZvcm1hdChcIllZTU1ERFwiKSAgIDogc2VhcmNoX3RpbGw7XG4gICAgbGV0IGRhdGVfZmlsdGVyX2NvbCA9IHNlYXJjaF9wYXJhbXMuZ2V0KCdkYXRlX2ZpbHRlcl9jb2wnKTtcbiAgICAgICAgZGF0ZV9maWx0ZXJfY29sID0gIWRhdGVfZmlsdGVyX2NvbCA/ICcnIDogZGF0ZV9maWx0ZXJfY29sO1xuXG4gICAgLy8gUmVuZGVyIHZpZXdcbiAgICByZXR1cm4gKDw+XG5cbiAgICAgICAgPFN1cGVydmlzb3JSZXNlcnZhdGlvbnNfQnlFeHBlcmllbmNlX2xpc3RcbiAgICAgICAgICAgIGJhc2VfcmVzZXJ2YXRpb25zX2V4cGVyaWVuY2VfdXJsPXsgYmFzZV9yZXNlcnZhdGlvbnNfZXhwZXJpZW5jZV91cmwgfVxuICAgICAgICAgICAgc3VwZXJ2aXNvcl9waz17IHN1cGVydmlzb3JfcGsgfVxuICAgICAgICAgICAgcHVibGlzaF9maV9jYms9eyAoY29zdCkgPT4geyBzZXRDb3N0U3VtKGNvc3QuY29zdF9zdW0pOyB9fVxuXG4gICAgICAgICAgICBzZWFyY2hfc3RhdHVzPXsgc2VhcmNoX3N0YXR1cyB9XG4gICAgICAgICAgICBzZWFyY2hfcGhyYXNlPXsgc2VhcmNoX3BocmFzZSB9XG4gICAgICAgICAgICBzZWFyY2hfZnJvbT17IHNlYXJjaF9mcm9tIH1cbiAgICAgICAgICAgIHNlYXJjaF90aWxsPXsgc2VhcmNoX3RpbGwgfVxuICAgICAgICAgICAgZGF0ZV9maWx0ZXJfY29sPXsgZGF0ZV9maWx0ZXJfY29sIH1cbiAgICAgICAgICAgIHNldF9zZWFyY2hfcGFyYW1zX2Niaz17IHNldFNlYXJjaFBhcmFtcyB9XG5cbiAgICAgICAgICAgIGV4dF9wcm9wcz17IGV4dF9wcm9wcyB9XG4gICAgICAgID5cbiAgICAgICAgICAgIHsgY2hpbGRyZW4gfVxuICAgICAgICA8L1N1cGVydmlzb3JSZXNlcnZhdGlvbnNfQnlFeHBlcmllbmNlX2xpc3Q+XG4gICAgPC8+KTtcbn1cblxuLyoqXG4gKiBTdXBlcnZpc29yIGJvb2tpbmcgZmlsdGVycyAqL1xuY2xhc3MgU3VwZXJ2aXNvclJlc2VydmF0aW9uc19CeUV4cGVyaWVuY2VfbGlzdCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIC8vIENsYXNzIHZhcmlhYmxlc1xuICAgICAgICB0aGlzLmZpbHRlcl9yZWxvYWRfdG91dCA9IG51bGw7XG5cbiAgICAgICAgLy8gSW5pdGlhbCBzdGF0ZVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcmVzZXJ2YXRpb25fbGlzdCA6IFtdLFxuICAgICAgICAgICAgY29zdF9kYXRhICAgICAgICA6IHt9LFxuXG4gICAgICAgICAgICBpc19yZXNfbG9hZGluZyAgIDogZmFsc2UsXG4gICAgICAgICAgICBpc19maV9sb2FkaW5nICAgIDogZmFsc2UsXG5cbiAgICAgICAgICAgIGRpc3BsYXlfbW9kYWwgOiBmYWxzZSxcbiAgICAgICAgICAgIG5hbWUgOiBcIlwiLFxuICAgICAgICAgICAgZW1haWwgOiBcIlwiICxcbiAgICAgICAgICAgIHBob25lIDogXCJcIiAsXG4gICAgICAgIH1cblxuICAgICAgICAvLyBCaW5kZWQgZnVuY3Rpb25zIHNlY3Rpb25cbiAgICAgICAgdGhpcy5leHRyYWN0RmlsdGVyVmFsdWVzICAgICAgICAgICA9IHRoaXMuZXh0cmFjdEZpbHRlclZhbHVlcy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbG9hZFJlc2VydmF0aW9uc0RhdGEgICAgICAgID0gdGhpcy5yZWxvYWRSZXNlcnZhdGlvbnNEYXRhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVsb2FkUmVzZXJ2YXRpb25zRGF0YURlbGF5ZWQgPSB0aGlzLnJlbG9hZFJlc2VydmF0aW9uc0RhdGFEZWxheWVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTG9hZGluZyBkYXRhIHZpYSBBSkFYXG4gICAgICAgIGxldCBjdHggPSB0aGlzO1xuXG4gICAgICAgIC8vIEFqYXggZGF0YSBsb2FkZXJzXG4gICAgICAgIHRoaXMuYWpheF9yZXNlcnZhdGlvbnNfZ2V0ID0gbmV3IEFqYXhWMignbGlzdHMvc3VwcGxpZXJfcmVzZXJ2YXRpb24vJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5leHRfcHJvcHMuc3VwZXJ2aXNvcl9iYXNlX3VybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQT1NUJywgdHJ1ZSwgdGhpcy5wcm9wcy5leHRfcHJvcHMubm90aWZ5X2Niayk7XG4gICAgICAgIHRoaXMuYWpheF9yZXNlcnZhdGlvbnNfZ2V0LnNldFN1Y2Nlc3NDYmsoKHJlc3BvbnNlLCBlcnJfaGFuZGxlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgIGN0eC5zZXRTdGF0ZSh7IHJlc2VydmF0aW9uX2xpc3QgIDogcmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19yZXNfbG9hZGluZyAgICA6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIC8vIGN0eC5wcm9wcy5wdWJsaXNoX3Jlc3VsdHNfY2JrKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguc2V0U3RhdGUoeyBpc19yZXNfbG9hZGluZyA6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGFsZXJ0KGdldHRleHQoXCJFcnJvciB3aGlsZSBsb2FkaW5nIGV4cGVyaWVuY2UgcmVzZXJ2YXRpb25zIVwiKSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hamF4X3Jlc2VydmF0aW9uc19nZXQuc2V0Tm90aWZ5TXNnU3VjY2VzcyhudWxsKTtcbiAgICAgICAgdGhpcy5hamF4X3Jlc2VydmF0aW9uc19nZXQuc2V0Tm90aWZ5TXNnRmFpbChnZXR0ZXh0KCdDb3VsZCBub3QgbG9hZCByZXNlcnZhdGlvbnMgZGF0YS4nKSk7XG5cblxuICAgICAgICB0aGlzLmFqYXhfcmVzZXJ2YXRpb25zX2ZpID0gbmV3IEFqYXhWMignbGlzdHMvc3VwcGxpZXJfcmVzZXJ2YXRpb24vJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmV4dF9wcm9wcy5zdXBlcnZpc29yX2Jhc2VfdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUFVUJywgdHJ1ZSwgdGhpcy5wcm9wcy5leHRfcHJv
1cHMubm90aWZ5X2Niayk7XG4gICAgICAgIHRoaXMuYWpheF9yZXNlcnZhdGlvbnNfZmkuc2V0U3VjY2Vzc0NiaygocmVzcG9uc2UsIGVycl9oYW5kbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgY3R4LnNldFN0YXRlKHsgaXNfZmlfbG9hZGluZyA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc3RfZGF0YSAgICAgOiByZXNwb25zZS5kYXRhLCB9KTtcbiAgICAgICAgICAgICAgICBjdHgucHJvcHMucHVibGlzaF9maV9jYmsocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5zZXRTdGF0ZSh7IGlzX2ZpX2xvYWRpbmcgOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIGFsZXJ0KGdldHRleHQoXCJFcnJvciB3aGlsZSBsb2FkaW5nIGV4cGVyaWVuY2UgcmVzZXJ2YXRpb25zIGZpbHRlciBkYXRhXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFqYXhfcmVzZXJ2YXRpb25zX2ZpLnNldE5vdGlmeU1zZ1N1Y2Nlc3MobnVsbCk7XG4gICAgICAgIHRoaXMuYWpheF9yZXNlcnZhdGlvbnNfZmkuc2V0Tm90aWZ5TXNnRmFpbChnZXR0ZXh0KCdDb3VsZCBub3QgbG9hZCBleHBlcmllbmNlIGZpbmFuY2lhbCBpbmZvcm1hdGlvbi4nKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBleHBlcmllbmNlcyByZXNlcnZhdGlvbnMgd2hlbiBjb21wb25lbnQgYmVjb21lcyB2aXNpYmxlICovXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMucmVsb2FkUmVzZXJ2YXRpb25zRGF0YSgpXG4gICAgfVxuXG5cbiAgICAvL1xuICAgIC8vIFdoZW4gY29tcG9uZW50IHVwZGF0ZXMuLi5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG5cbiAgICAgICAgLy8gUmVsb2FkIGxpc3QgaWYgZmlsdGVycyBjaGFuZ2VcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2VhcmNoX3N0YXR1cyAgICE9IHByZXZQcm9wcy5zZWFyY2hfc3RhdHVzICAgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoX3BocmFzZSAgICE9IHByZXZQcm9wcy5zZWFyY2hfcGhyYXNlICAgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoX2Zyb20gICAgICE9IHByZXZQcm9wcy5zZWFyY2hfZnJvbSAgICAgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoX3RpbGwgICAgICE9IHByZXZQcm9wcy5zZWFyY2hfdGlsbCAgICAgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZGF0ZV9maWx0ZXJfY29sICE9IHByZXZQcm9wcy5kYXRlX2ZpbHRlcl9jb2wgKSB7XG5cbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZmlsdGVyIHZhbHVlcyB3aWxsIGVuc3VyZSB0aGF0IGFwcHJvcHJpYXRlXG4gICAgICAgICAgICAvLyBmaWx0ZXIgdmFsdWVzIGFyZSByZWFkIGludG8gZGF0YSBkaWN0IGFuZCB0cmFuc21pdHRlZFxuICAgICAgICAgICAgdGhpcy5yZWxvYWRSZXNlcnZhdGlvbnNEYXRhRGVsYXllZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsYXllZCByZWxvYWQgb2YgcmVzZXJ2YXRpb25zIGRhdGEuICovXG4gICAgcmVsb2FkUmVzZXJ2YXRpb25zRGF0YURlbGF5ZWQoKSB7XG5cbiAgICAgICAgLy8gS2lsbCBwcmV2aW91cyB0aW1lb3V0XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9yZWxvYWRfdG91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZmlsdGVyX3JlbG9hZF90b3V0KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyX3JlbG9hZF90b3V0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBhIG5ldyBvbmVcbiAgICAgICAgbGV0IGN0eCA9IHRoaXM7XG4gICAgICAgIHRoaXMuZmlsdGVyX3JlbG9hZF90b3V0ID0gc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgY3R4LnJlbG9hZFJlc2VydmF0aW9uc0RhdGEoKTtcbiAgICAgICAgICAgIGN0eC5maWx0ZXJfcmVsb2FkX3RvdXQgPSBudWxsO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHdpbGwgY2F1c2UgcmVsb2FkIG9mIHJlc2VydmF0aW9ucyBkYXRhLiAqL1xuICAgIHJlbG9hZFJlc2VydmF0aW9uc0RhdGEoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfcmVzX2xvYWRpbmcgOiB0cnVlLFxuICAgICAgICAgICAgaXNfZmlfbG9hZGluZyAgOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFqYXhfcmVzZXJ2YXRpb25zX2dldC5yZXF1ZXN0KHRoaXMuZXh0cmFjdEZpbHRlclZhbHVlcygpKTtcbiAgICAgICAgdGhpcy5hamF4X3Jlc2VydmF0aW9uc19maS5yZXF1ZXN0KHRoaXMuZXh0cmFjdEZpbHRlclZhbHVlcygpKTtcbiAgICB9XG5cbiAgICBleHRyYWN0RmlsdGVyVmFsdWVzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VhcmNoX3N0YXR1cyAgIDogdGhpcy5wcm9wcy5zZWFyY2hfc3RhdHVzID8gdGhpcy5wcm9wcy5zZWFyY2hfc3RhdHVzIDogJycsXG4gICAgICAgICAgICBzZWFyY2hfcGhyYXNlICAgOiB0aGlzLnByb3BzLnNlYXJjaF9waHJhc2UsXG4gICAgICAgICAgICBzZWFyY2hfZnJvbSAgICAgOiB0aGlzLnByb3BzLnNlYXJjaF9mcm9tLFxuICAgICAgICAgICAgc2VhcmNoX3RpbGwgICAgIDogdGhpcy5wcm9wcy5zZWFyY2hfdGlsbCxcbiAgICAgICAgICAgIGRhdGVfZmlsdGVyX2NvbCA6IHRoaXMucHJvcHMuZGF0ZV9maWx0ZXJfY29sLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGlzcGxheU1vZGFsKHJlc2VydmF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+ICh7XG4gICAgICAgICAgICBkaXNwbGF5X21vZGFsOiAhcHJldlN0YXRlLmRpc3BsYXlfbW9kYWxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGlmKHJlc2VydmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubmFtZSA9IHJlc2VydmF0aW9uLm5hbWVcbiAgICAgICAgICAgI
1HRoaXMuc3RhdGUuZW1haWwgPSByZXNlcnZhdGlvbi5lbWFpbFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5waG9uZSA9IHJlc2VydmF0aW9uLnBob25lXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW5kZXJpbmcgdmlld1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyByZXNlcnZhdGlvbl9saXN0IH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCB7IGNvc3RfZGF0YSB9ICAgICAgICA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IHsgaXNfcmVzX2xvYWRpbmcgfSAgID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgeyBpc19maV9sb2FkaW5nIH0gICAgPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgcmVuZGVyLi4uXG4gICAgICAgIHJldHVybig8ZGl2IGNsYXNzTmFtZT1cIlN1cGVydmlzb3JFeHBlcmllbmNlUmVzZXJ2YXRpb25MaXN0XCI+XG5cbiAgICAgICAgICAgIDxTdGFuZGFyZE1vZGFsIHsgLi4udGhpcy5zdGF0ZSB9XG4gICAgICAgICAgICAgICAgbW9kYWxfc2hvdz17IHRoaXMuc3RhdGUuZGlzcGxheV9tb2RhbCB9XG4gICAgICAgICAgICAgICAgbW9kYWxfY2VudGVyZWQ9eyB0cnVlIH1cbiAgICAgICAgICAgICAgICBtb2RhbF90aXRsZT17IGdldHRleHQoJ0hvbGRlciBpbmZvcm1hdGlvbicpIH1cbiAgICAgICAgICAgICAgICBtb2RhbF9jb21wb25lbnQ9eyBIb2xkZXJJbmZvX01vZGFsIH1cbiAgICAgICAgICAgICAgICBtb2RhbF9jbG9zZV9jYms9eyAoKSA9PiB7dGhpcy5zZXREaXNwbGF5TW9kYWwoKX19XG4gICAgICAgICAgICAgICAgYWN0aW9uX2hpZGU9e3RydWV9XG4gICAgICAgICAgICAvPlxuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAoaXNfcmVzX2xvYWRpbmcgfHwgaXNfZmlfbG9hZGluZykgJiZcbiAgICAgICAgICAgICAgICA8U3RhbmRhcmRMb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17IGdldHRleHQoJ0xvYWRpbmcgcmVzZXJ2YXRpb25zIGJ5IGV4cGVyZW5jZS4uLicpIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7IHJlc2VydmF0aW9uX2xpc3QubGVuZ3RoIDw9IDAgP1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgcHQtNVwiPlxuICAgICAgICAgICAgICAgICAgICB7IGdldHRleHQoJ05vIHJlc2VydmF0aW9ucyBmb3VuZCBmb3Igc3BlY2lmaWVkIGZpbHRlciBjcml0ZXJpY
1S4uLicpIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgOiA8PlxuXG4gICAgICAgICAgICAgICAgPEFsZXJ0IHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0zIG1iLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5IDogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA6IFwiMTAwJVwiIH19PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZsb2F0OidsZWZ0JywgbWFyZ2luVG9wOiBcIjNweFwiLCBmb250U2l6ZTogXCIxNHB0XCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGdldHRleHQoJ0xpc3Qgb2YnKSArICcgJyArIGdldHRleHQoJ2V4cGVyaWVuY2VzJykgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmbG9hdDoncmlnaHQnLCBtYXJnaW5Ub3A6IFwiM3B4XCIsIGZvbnRTaXplOiBcIjE0cHRcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZ2V0dGV4dCgnU3VtIG92ZXJhbGw6JykgfSB7IGNvc3RfZGF0YS5jb3N0X3N1bSA/IGNvc3RfZGF0YS5jb3N0X3N1bS50b0ZpeGVkKDIpIDogJycgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0FsZXJ0PlxuXG4gICAgICAgICAgICAgICAgPFRhYmxlIHJlc3BvbnNpdmU9XCJsZ1wiIGhvdmVyPlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnsgZ2V0dGV4dCgnU3VwcGxpZXInKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+eyBnZXR0ZXh0KCdFeHBlcmllbmNlJykgfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+eyBnZXR0ZXh0KCdFdmVudCBkYXRlJykgfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogPHRoIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+eyBnZXR0ZXh0KCdEdXJhdGlvbicpIH08L3RoPiAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+eyBnZXR0ZXh0KCdIb2xkZXInKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGdldHRleHQoJ1BBWCcpIH08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPnsgZ2V0dGV4dCgnUHVyY2guIGRhdGUnKSB9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGdldHRleHQoJ1N0YXR1cycpIH08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPnsgZ2V0dGV4dCgnUGF5LiBSZWYuJykgfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+eyBnZXR0ZXh0KCdQcmljZScpIH08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgeyByZXNlcnZhdGlvbl9saXN0Lm1hcCgocmVzZXJ2YXRpb24sIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG93bmVyICAgICAgICAgPSByZXNlcnZhdGlvbi5zdXBwbGllcl91c2VyLmZpcnN0X25hbWUgKyAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcmVzZXJ2YXRpb24uc3VwcGxpZXJfdXNlci5sYXN0X25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZXJpZW5jZSAgICA9IHJlc2VydmF0aW9uLmV4cGVyaWVuY2UudGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRfZGF0ZSAgICA9IHJlc2VydmF0aW9uLnN0YXJ0X2RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gICAgICA9IHJlc2VydmF0aW9uLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvbGRlciAgICAgICAgPSByZXNlcnZhdGlvbi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtYWlsICAgICAgICAgPSByZXNlcnZhdGlvbi5lbWFpbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBndWVzdHMgICAgICAgID0gcmVzZXJ2YXRpb24uZ3Vlc3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1cyAgICAgICAgPSByZXNlcnZhdGlvbi5zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaXBlX2ludGVudCA9IHJlc2VydmF0aW9uLnN0cmlwZV9wYXltZW50X2ludGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlfZGF0ZSAgICAgID0gcmVzZXJ2YXRpb24uc3RyaXBlX3BheW1lbnRfZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZSAgICAgICAgID0gcmVzZXJ2YXRpb24ucHJpY2Vfb3ZlcmFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBcIiBcIiArIHJlc2VydmF0aW9uLmN1cnJlbmN5LnNob3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBob25lICAgICAgID0gcmVzZXJ2YXRpb24ucGhvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIGtleT17IGlkeCB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+eyBvd25lciB9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnsgZXhwZXJpZW5jZSB9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+eyBzdGFydF9kYXRlIH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1HsvKiA8dGQgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGR1cmF0aW9uIH08L3RkPiAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3IgOiAnaGVscCcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXsgXCJFbWFpbDogXCIgKyBlbWFpbCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaG9sZGVyIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhcyBmYS1pbmZvLWNpcmNsZSBob2xkZXItaW5mb1wiIG9uQ2xpY2s9eyhlKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheU1vZGFsKHJlc2VydmF0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj57IGd1ZXN0cyB9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+eyBwYXlfZGF0ZSB9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGFsaWduLW1pZGRsZSBpdGVtLXN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eyBTdHJpbmcoc3RhdHVzKS50b0xvd2VyQ2FzZSgpIH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnZXR0ZXh0KHN0YXR1cykgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+eyBzdHJpcGVfaW50ZW50IH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwidGV4dC1yaWdodFwiPnsgcHJpY2UgfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvVGFibGU+XG4gICAgICAgICAgICA8Lz59XG4gICAgICAgIDwvZGl2Pik7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5RXhwZXJpZW5jZTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjIgIE1paGEgS2l0acSNPG1paGEua2l0aWNAbWtzcC5zaT4gLSBBbGwgcmlnaHRzIHJlc2VydmVkIVxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFN1c3BlbnNlLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYW
1N0XCI7XG5pbXBvcnQgeyBSb3V0ZXMsIFJvdXRlLCB1c2VQYXJhbXMsIE5hdmlnYXRlLCB1c2VOYXZpZ2F0ZSwgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSBcInJlYWN0LXJvdXRlci1kb21cIjtcblxuaW1wb3J0IEFsZXJ0ICBmcm9tICdyZWFjdC1ib290c3RyYXAvQWxlcnQnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdyZWFjdC1ib290c3RyYXAvQnV0dG9uJztcblxuaW1wb3J0IFN1cGVydmlzb3JSZXNlcnZhdGlvbnNfVG9vbGJhciAgICAgIGZyb20gJy4vU3VwZXJ2aXNvclJlc2VydmF0aW9uc19Ub29sYmFyLmpzJztcbmltcG9ydCBTdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5UHJvcGVydHkgICBmcm9tICcuL1N1cGVydmlzb3JSZXNlcnZhdGlvbnNfQnlQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgU3VwZXJ2aXNvclJlc2VydmF0aW9uc19CeUV4cGVyaWVuY2UgZnJvbSAnLi9TdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5RXhwZXJpZW5jZS5qcyc7XG5cbi8qKlxuICogSW1wbGVtZW50aW5nIHJlc2VydmF0aW9ucyB2aWEgZnVuY3Rpb24gY29tcG9uZW50ICovXG5jb25zdCBTdXBlcnZpc29yUmVzZXJ2YXRpb25zID0gKHtcbiAgICBiYXNlX3Jlc2VydmF0aW9uc191cmwsXG4gICAgc3VwZXJ2aXNvcl9wayxcbiAgICBleHRfcHJvcHMsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICAvLyBTZXR1cCBob29rLXN0YXRlXG4gICAgY29uc3QgWyBjb3N0X3N1bSwgICAgICBzZXRDb3N0U3VtIF0gICAgICA9IHVzZVN0YXRlKDAuMDApO1xuICAgIGNvbnN0IFsgc3RhdHVzX2ZpbHRlciwgc2V0U3RhdHVzRmlsdGVyIF0gPSB1c2VTdGF0ZSh7IHZhbHVlIDogJycsIH0pO1xuXG4gICAgLy8gQ2FsY3VsYXRlIFVSTHNcbiAgICBjb25zdCBiYXNlX3Jlc2VydmF0aW9uc19wcm9wZXJ0eV91cmwgICA9IGJhc2VfcmVzZXJ2YXRpb25zX3VybCArICdwcm9wZXJ0eScgICArICcvJztcbiAgICBjb25zdCBiYXNlX3Jlc2VydmF0aW9uc19leHBlcmllbmNlX3VybCA9IGJhc2VfcmVzZXJ2YXRpb25zX3VybCArICdleHBlcmllbmNlJyArICcvJztcblxuICAgIC8vIFNldHVwIHVzZUVmZmVjdCBob29rXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcblxuICAgIH0pXG5cbiAgICAvLyBSZW5kZXIgdmlld1xuICAgIHJldHVybiAoPD5cbiAgICAgICAgPFN1cGVydmlzb3JSZXNlcnZhdGlvbnNfVG9vbGJhclxuICAgICAgICAgICAgYmFzZV9yZXNlcnZhdGlvbnNfdXJsPXsgYmFzZV9yZXNlcnZhdGlvbnNfdXJsIH1cbiAgICAgICAgICAgIHN1cGVydmlzb3JfcGs9eyBzdXBlcnZpc29yX3BrIH1cbiAgICAgICAgICAgIGV4dF9wcm9wcz17IGV4dF9wcm9wcyB9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPFJvdXRlcz5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPScnXG4gICAgICAgICAgICAgICAgICAgZWxlbWVudD17IDxOYXZpZ2F0ZSB0bz17IGJhc2VfcmVzZXJ2YXRpb25zX3Byb3BlcnR5X3VybCB9IC8+IH1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPXsgJ3Byb3BlcnR5LyonIH1cbiAgICAgICAgICAgICAgIGVsZW1lbnQ9e1xuICAgICAgICAgICAgICAgICAgIDxTdXBlcnZpc29yUmVzZXJ2YXRpb25zX0J5UHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfcmVzZXJ2YXRpb25zX3Byb3BlcnR5X3VybD17IGJhc2VfcmVzZXJ2YXRpb25zX3Byb3BlcnR5X3VybCB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBlcnZpc29yX3BrPXsgc3VwZXJ2aXNvcl9wayB9XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRfcHJvcHM9eyBleHRfcHJvcHMgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPXsgJ2V4cGVyaWVuY2UvKicgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnQ9e1xuICAgICAgICAgICAgICAgICAgICA8U3VwZXJ2aXNvclJlc2VydmF0aW9uc19CeUV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfcmVzZXJ2YXRpb25zX2V4cGVyaWVuY2VfdXJsP
1XsgYmFzZV9yZXNlcnZhdGlvbnNfZXhwZXJpZW5jZV91cmwgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJ2aXNvcl9waz17IHN1cGVydmlzb3JfcGsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3Byb3BzPXsgZXh0X3Byb3BzIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICA8L1JvdXRlcz5cbiAgICA8Lz4pO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IFN1cGVydmlzb3JSZXNlcnZhdGlvbnM7XG5cblxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///31220\n\n}')},37753:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('{/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   $W: () => (/* binding */ matchURL),\n/* harmony export */   Aj: () => (/* binding */ detectPropsChange),\n/* harmony export */   KX: () => (/* binding */ generateMD5Hash),\n/* harmony export */   MW: () => (/* binding */ getExtProp),\n/* harmony export */   Nx: () => (/* binding */ copyLanguageFields),\n/* harmony export */   R9: () => (/* binding */ createUniqueID),\n/* harmony export */   WI: () => (/* binding */ langInBracks),\n/* harmony export */   iu: () => (/* binding */ fixBoardOrder),\n/* harmony export */   lJ: () => (/* binding */ detectDictListChanges),\n/* harmony export */   ot: () => (/* binding */ isArrayMember),\n/* harmony export */   pR: () => (/* binding */ capFirstLetter),\n/* harmony export */   tz: () => (/* binding */ generateLocal4DRP)\n/* harmony export */ });\n/* unused harmony export weekdays */\n/* harmony import */ var md5__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83503);\n/* harmony import */ var md5__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(md5__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(95093);\n/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2543);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);\n/**\n * Utility contains various convenience functions that can be\n * used across application.\n *\n * Copyright (C) 2020, 2021  Miha Kitič<[email protected]> */\n\n\n\n\n\n/**\n * This function will help with migration from { ...this.props } to\n * ext_props schema. We do not just randomly wish to pass this.props down\n * the hieararchy as this creates enormous mess with properties. However\n * we also need a way to pass some uniform props down the hierarchy in the\n * meanwhile... */\nfunction getExtProp(field, ext_props, props) {\n  if (field in ext_props) {\n    return ext_props[field];\n  } else if (field in props) {\n    return props[field];\n  } else {\n    console.error(field + " field not found neither in props nor ext_props!");\n    return undefined;\n  }\n}\n\n/**\n * This function will generate MD5 hash based on provided string. Hash is\n * 64 characters long, but can be shortened according to \'length\' parameter. */\nfunction generateMD5Hash(input_str) {\n  var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  // When null is provided as string, try to generate a random hash\n  if (input_str == null) {\n    var time = moment__WEBPACK_IMPORTED_MODULE_1___default()().format(\'x\');\n    var rand = (0,lodash__WEBPACK_IMPORTED_MODULE_2__.random)(0, 50000000).toString();\n    input_str = time + \'_\' + rand;\n  }\n\n  // Convert input string into MD5 hash\n  var md5_str = md5__WEBPACK_IMPORTED_MODULE_0___default()(input_str);\n\n  // If length is provided, extract begining of the string according to\n  // number of characters specified.\n  if (length) {\n    md5_str = md5_str.substring(0, length);\n  }\n\n  // Finally return hashed value\n  return md5_str;\n}\n\n/**\n * This function will generate unique ID for HTML components. It will accept\n * some human-readable string, attach to it a (probably) unique 8-digit\n * hash code and return the resulting identifier.\n *\n * This identifier can then be given to ID element of a component and will\n * most likely not be repeatable throughout application */\nfunction createUniqueID(input_str) {\n  // First we generate a 8-digit ID hash\n  // let hash = generateMD5Hash(input_str, 8);\n\n  // We append this hash to input string and return the resulting value\n  // return hash + \'-\' + input_str;\n  return (0,lodash__WEBPACK_IMPORTED_MODULE_2__.uniqueId)(input_str);\n}\n\n/**\n * Function will check whether the element is a part of array. */\nfunction isArrayMember(arr, elt) {\n  if (!arr) {\n    return false;\n  }\n\n  // Filter array for the element\n  var new_arr = arr.filter(function (item) {\n    return item == elt;\n  });\n  return new_arr.length == 1;\n}\n\n/**\n * Function will parse-out given field for each language and copy it to\n * target_dict. When target dict is not provided (parameter not given,\n * function will create new dictionary and copy fields there.\n * \\param source_dict  Source dictionary from which we copy (text) fields.\n * \\param field        Field name that will be copied. Only this field will\n *                     be used for c
1opy.\n * \\param languages    List of languages that will be copied. Format is\n *                     { short: \'en\', lang: \'English\' }\n * \\param target_dict  Optional. Destination where fields will be copied.\n *\n * \\returns target_dict or newly created dict with copied fields. */\nfunction copyLanguageFields(source_dict, field, languages, target_dict) {\n  // If target dict isn\'t given, create a new one\n  if (!target_dict) {\n    target_dict = {};\n  }\n\n  // Loop over languages\n  languages.forEach(function (item) {\n    var label = field + \'_\' + item["short"];\n\n    // only copy of field with such name exists in the source_dict\n    if (source_dict[label] || source_dict[label] == \'\') {\n      target_dict[label] = source_dict[label];\n    }\n  });\n\n  // Finally returm target dict\n  return target_dict;\n\n  // TODO -> Use this function for HotelDetail...\n}\n\n/**\n * This function will accept 3 params - new props, old props and a list\n * of props that need to be monitored. For now we only check if props on a list\n * yield TRUE. In the future we may need to perform some other checks.\n *\n * \\returns The function will return TRUE when either of props is true and has\n *          changed (relative to old props). */\nfunction detectPropsChange(new_props, old_props, prop_list) {\n  var dbg_name = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n  var result = false;\n\n  // We are going do do double loop over the same list :)\n  prop_list.forEach(function (prop1) {\n    // First we check whether current prop has changed between now and\n    // previous run\n    if (new_props[prop1] != old_props[prop1]) {\n      var all_true = true;\n\n      // If change has been detected, we need to make sure that all\n      // props on the list have TRUE value\n      prop_list.forEach(function (prop2) {\n        if (!new_props[prop2]) {\n          all_true = false;\n        }\n      });\n\n      // If all props were TRUE, then result can be set to TRUE\n      // We could cut the loop here, but we can\'t :)\n      if (all_true) {\n        result = true;\n      }\n    }\n  });\n\n  // If dbg_name has been set, display in console.log()\n  if (dbg_name && result && "production" == "development") // removed by dead control flow\n{}\n\n  // Return the result of processing\n  return result;\n}\n\n/**\n * Function compares 2 lists of dicts by ceratin property. Function will\n * return a list of items that do not exist either in either list.\n * \\param list1     First list that will be matched.\n * \\param list2     Second list that will be matched.\n * \\param id_field  Dict field used to link entries. It is assumed, there is\n *                  only a single instance of each ID.\n * \\returns Dict of two lists - each list contains elements that differe\n *          or are not present in the other list. There is also a field\n *          \'is_diff\' for quick indication of discrepancies. */\nfunction detectDictListChanges(list1, list2, id_field) {\n  var output = {\n    diff1: [],\n    diff2: [],\n    is_diff: false,\n    is_multi: false\n  };\n\n  // Nested function is used so we can execute 2-way comparison\n  function nestedCompare(l1, l2, diff_field) {\n    l1.forEach(function (item1) {\n      var same_item_list = l2.filter(function (item2) {\n        return item1[id_field] == item2[id_field];\n      });\n\n      // make sure that we don\'t have duplicate list\n      if (same_item_list.length > 1) {\n        output.is_multi = true;\n        return;\n      }\n\n      // When no element found, we in indicate diff by pushing item1\n      else if (same_item_list.length <= 0) {\n        output[diff_field].push(item1);\n        output.is_diff = true;\n        return;\n\n        // When single element found -> compare content\n      } else {\n        for (var key in item1) {\n          if (!item1.hasOwnProperty(key)) {\n            continue;\n          }\n          if (key == id_field) {\n            continue;\n          }\n          if (item1[key] != same_item_list[0][key]) {\n            output[diff_field].push(item1);\n            output.is_diff = true;\n            return;\n          }\n        }\n      }\n    });\n  }\n\n  // Execute both compares\n  nestedCompare(list1, list2, \'diff1\');\n  nestedCompare(list2, list1, \'diff2\');\n\n  // Return result\n  return output;\n}\n\n/**\n * Function to capitalize 1st letter - e.g. for title. Function will accept\n * string and return string with capitalized 1st letter. */\nfunction capFirstLetter(str) {\n  str = str.trimStart();\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * When required, this function will insert active language in brackets. */\nfunction langInBracks(lang_code) {\n  var with_spaces = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  var txt = \'(\' + lang_code.toUpperCase() + \')\';\n  if (with_spaces) {\n    return \' \' + txt + \' \';\n  } else {\n    return txt;\n  }\n}\n\n/**\n * Function will generate locale dict for daterangepicker. */\nfunction generateLocal4DRP() {\n  return {\n    "format": "DD.MM.YYYY",\n    "applyLabel": gettext(\'Apply\'),\n    "cancelLabel": gettext(\'Cancel\'),\n    "fromLabel": gettext("From"),\n    "toLabel": gettext("To"),\n    "customRangeLabel": gettext("Custom"),\n    "weekLabel": gettext("Week"),\n    "daysOfWeek": [gettext("Su"), gettext("Mo"), gettext("Tu"), gettext("We"), gettext("Th"), gettext("Fr"), gettext("Sa")],\n    "monthNames": [gettext("January"), gettext("February"), gettext("March"), gettext("April"), gettext("May"), gettext("June"), gettext("July"), gettext("August"), gettext("September"), gettext("October"), gettext("November"), gettext("December")],\n    "firstDay": 1\n  };\n}\n\n/**\n * Const with weekdays */\nvar weekdays = [{\n  "short": gettext(\'MO\'),\n  cnt: 1,\n  full: gettext(\'Monday\')\n}
1, {\n  "short": gettext(\'TU\'),\n  cnt: 2,\n  full: gettext(\'Tuesday\')\n}, {\n  "short": gettext(\'WE\'),\n  cnt: 3,\n  full: gettext(\'Wednesday\')\n}, {\n  "short": gettext(\'TH\'),\n  cnt: 4,\n  full: gettext(\'Thursday\')\n}, {\n  "short": gettext(\'FR\'),\n  cnt: 5,\n  full: gettext(\'Friday\')\n}, {\n  "short": gettext(\'SA\'),\n  cnt: 6,\n  full: gettext(\'Saturday\')\n}, {\n  "short": gettext(\'SU\'),\n  cnt: 7,\n  full: gettext(\'Sunday\')\n}];\n\n/**\n * Function will reorder boards. */\nfunction fixBoardOrder(board_list) {\n  // Sort boards by correct order\n  var board_order = [\'RO\', \'BB\', \'HB\', \'FB\'];\n  board_list.sort(function (aa, bb) {\n    var ax = board_order.indexOf(aa["short"]);\n    var bx = board_order.indexOf(bb["short"]);\n    return ax - bx;\n  });\n}\n\n/**\n * Function to match current URL with provede one - e.g. to determine\n * which link should be highlighted. */\nfunction matchURL(url) {\n  var is_contain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var yes_val = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'active\';\n  var no_val = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : \'\';\n  if (is_contain) {\n    if (window.location.pathname.indexOf(url) >= 0) {\n      return yes_val;\n    } else {\n      return no_val;\n    }\n  } else {\n    if (window.location.pathname == url) {\n      return yes_val;\n    } else {\n      return no_val;\n    }\n  }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc3NTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFjQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9oYWxraV9wcm9qZWN0Ly4vc3JjL3V0aWxpdHkvVXRpbGl0eS5qcz8wYzcxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXRpbGl0eSBjb250YWlucyB2YXJpb3VzIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZVxuICogdXNlZCBhY3Jvc3MgYXBwbGljYXRpb24uXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxICBNaWhhIEtpdGnEjTxtaWhhLmtpdGljQG1rc3Auc2k+ICovXG5cbmltcG9ydCBtZDUgZnJvbSAnbWQ1JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IHJhbmRvbSwgdW5pcXVlSWQgfSBmcm9tIFwibG9kYXNoXCI7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgd2l0aCBtaWdyYXRpb24gZnJvbSB7IC4uLnRoaXMucHJvcHMgfSB0b1xuICogZXh0X3Byb3BzIHNjaGVtYS4gV2UgZG8gbm90IGp1c3QgcmFuZG9tbHkgd2lzaCB0byBwYXNzIHRoaXMucHJvcHMgZG93blxuICogdGhlIGhpZWFyYXJjaHkgYXMgdGhpcyBjcmVhdGVzIGVub3Jtb3VzIG1lc3Mgd2l0aCBwcm9wZXJ0aWVzLiBIb3dldmVyXG4gKiB3ZSBhbHNvIG5lZWQgYSB3YXkgdG8gcGFzcyBzb21lIHVuaWZvcm0gcHJvcHMgZG93biB0aGUgaGllcmFyY2h5IGluIHRoZVxuICogbWVhbndoaWxlLi4uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0UHJvcChmaWVsZCwgZXh0X3Byb3BzLCBwcm9wcykge1xuICAgICAgICAgaWYgKGZpZWxkIGluIGV4dF9wcm9wcykgeyByZXR1cm4gZXh0X3Byb3BzW2ZpZWxkXTsgfVxuICAgIGVsc2UgaWYgKGZpZWxkIGluIHByb3BzKSAgICAgeyByZXR1cm4gcHJvcHNbZmllbGRdOyB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZmllbGQgKyBcIiBmaWVsZCBub3QgZm91bmQgbmVpdGhlciBpbiBwcm9wcyBub3IgZXh0X3Byb3BzIVwiKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRlIE1ENSBoYXNoIGJhc2VkIG9uIHByb3ZpZGVkIHN0cmluZy4gSGFzaCBpc1xuICogNjQgY2hhcmFjdGVycyBsb25nLCBidXQgY2FuIGJlIHNob3J0ZW5lZCBhY2NvcmRpbmcgdG8gJ2xlbmd0aCcgcGFyYW1ldGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTUQ1SGFzaChpbnB1dF9zdHIsIGxlbmd0aD1udWxsKSB7XG5cbiAgICAvLyBXaGVuIG51bGwgaXMgcHJvdmlkZWQgYXMgc3RyaW5nLCB0cnkgdG8gZ2VuZXJhdGUgYSByYW5kb20gaGFzaFxuICAgIGlmIChpbnB1dF9zdHIgPT0gbnVsbCkge1xuICAgICAgICBsZXQgdGltZSAgPSBtb21lbnQoKS5mb3JtYXQoJ3gnKTtcbiAgICAgICAgbGV0IHJhbmQgID0gcmFuZG9tKDAsIDUwMDAwMDAwKS50b1N0cmluZygpO1xuICAgICAgICBpbnB1dF9zdHIgPSB0aW1lICsgJ18nICsgcmFuZDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGlucHV0IHN0cmluZyBpbnRvIE1ENSBoYXNoXG4gICAgbGV0IG1kNV9zdHIgPSBtZDUoaW5wdXRfc3RyKTtcblxuICAgIC8vIElmIGxlbmd0aCBpcyBwcm92aWRlZCwgZXh0cmFjdCBiZWdpbmluZyBvZiB0aGUgc3RyaW5nIGFjY29yZGluZyB0b1xuICAgIC8vIG51bWJlciBvZiBjaGFyYWN0ZXJzIHNwZWNpZmllZC5cbiAgICBpZiAobGVuZ3RoKSB7IG1kNV9zdHIgPSBtZDVfc3RyLnN1YnN0cmluZygwLGxlbmd0aCk7IH1cblxuICAgIC8vIEZpbmFsbHkgcmV0dXJuIGhhc2hlZCB2YWx1ZVxuICAgIHJldHVybi
1BtZDVfc3RyO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSB1bmlxdWUgSUQgZm9yIEhUTUwgY29tcG9uZW50cy4gSXQgd2lsbCBhY2NlcHRcbiAqIHNvbWUgaHVtYW4tcmVhZGFibGUgc3RyaW5nLCBhdHRhY2ggdG8gaXQgYSAocHJvYmFibHkpIHVuaXF1ZSA4LWRpZ2l0XG4gKiBoYXNoIGNvZGUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGlkZW50aWZpZXIuXG4gKlxuICogVGhpcyBpZGVudGlmaWVyIGNhbiB0aGVuIGJlIGdpdmVuIHRvIElEIGVsZW1lbnQgb2YgYSBjb21wb25lbnQgYW5kIHdpbGxcbiAqIG1vc3QgbGlrZWx5IG5vdCBiZSByZXBlYXRhYmxlIHRocm91Z2hvdXQgYXBwbGljYXRpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmlxdWVJRChpbnB1dF9zdHIpIHtcblxuICAgIC8vIEZpcnN0IHdlIGdlbmVyYXRlIGEgOC1kaWdpdCBJRCBoYXNoXG4gICAgLy8gbGV0IGhhc2ggPSBnZW5lcmF0ZU1ENUhhc2goaW5wdXRfc3RyLCA4KTtcblxuICAgIC8vIFdlIGFwcGVuZCB0aGlzIGhhc2ggdG8gaW5wdXQgc3RyaW5nIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyB2YWx1ZVxuICAgIC8vIHJldHVybiBoYXNoICsgJy0nICsgaW5wdXRfc3RyO1xuICAgIHJldHVybiB1bmlxdWVJZChpbnB1dF9zdHIpO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHdpbGwgY2hlY2sgd2hldGhlciB0aGUgZWxlbWVudCBpcyBhIHBhcnQgb2YgYXJyYXkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheU1lbWJlcihhcnIsIGVsdCkge1xuXG4gICAgaWYgKCFhcnIpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICAvLyBGaWx0ZXIgYXJyYXkgZm9yIHRoZSBlbGVtZW50XG4gICAgbGV0IG5ld19hcnIgPSBhcnIuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbSA9PSBlbHQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3X2Fyci5sZW5ndGggPT0gMTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB3aWxsIHBhcnNlLW91dCBnaXZlbiBmaWVsZCBmb3IgZWFjaCBsYW5ndWFnZSBhbmQgY29weSBpdCB0b1xuICogdGFyZ2V0X2RpY3QuIFdoZW4gdGFyZ2V0IGRpY3QgaXMgbm90IHByb3ZpZGVkIChwYXJhbWV0ZXIgbm90IGdpdmVuLFxuICogZnVuY3Rpb24gd2lsbCBjcmVhdGUgbmV3IGRpY3Rpb25hcnkgYW5kIGNvcHkgZmllbGRzIHRoZXJlLlxuICogXFxwYXJhbSBzb3VyY2VfZGljdCAgU291cmNlIGRpY3Rpb25hcnkgZnJvbSB3aGljaCB3ZSBjb3B5ICh0ZXh0KSBmaWVsZHMuXG4gKiBcXHBhcmFtIGZpZWxkICAgICAgICBGaWVsZCBuYW1lIHRoYXQgd2lsbCBiZSBjb3BpZWQuIE9ubHkgdGhpcyBmaWVsZCB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgZm9yIGNvcHkuXG4gKiBcXHBhcmFtIGxhbmd1YWdlcyAgICBMaXN0IG9mIGxhbmd1YWdlcyB0aGF0IHdpbGwgYmUgY29waWVkLiBGb3JtYXQgaXNcbiAqICAgICAgICAgICAgICAgICAgICAgeyBzaG9ydDogJ2VuJywgbGFuZzogJ0VuZ2xpc2gnIH1cbiAqIFxccGFyYW0gdGFyZ2V0X2RpY3QgIE9wdGlvbmFsLiBEZXN0aW5hdGlvbiB3aGVyZSBmaWVsZHMgd2lsbCBiZSBjb3BpZWQuXG4gKlxuICogXFxyZXR1cm5zIHRhcmdldF9kaWN0IG9yIG5ld2x5IGNyZWF0ZWQgZGljdCB3aXRoIGNvcGllZCBmaWVsZHMuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUxhbmd1YWdlRmllbGRzKHNvdXJjZV9kaWN0LCBmaWVsZCwgbGFuZ3VhZ2VzLCB0YXJnZXRfZGljdCkge1xuXG4gICAgLy8gSWYgdGFyZ2V0IGRpY3QgaXNuJ3QgZ2l2ZW4sIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXRhcmdldF9kaWN0KSB7IHRhcmdldF9kaWN0ID0ge307IH1cblxuICAgIC8vIExvb3Agb3ZlciBsYW5ndWFnZXNcbiAgICBsYW5ndWFnZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgbGV0IGxhYmVsID0gZmllbGQgKyAnXycgKyBpdGVtLnNob3J0O1xuXG4gICAgICAgIC8vIG9ubHkgY29weSBvZiBmaWVsZCB3aXRoIHN1Y2ggbmFtZSBleGlzdHMgaW4gdGhlIHNvdXJjZV9kaWN0XG4gICAgICAgIGlmIChzb3VyY2VfZGljdFtsYWJlbF0gfHwgc291cmNlX2RpY3RbbGFiZWxdID09ICcnKSB7XG4gICAgICAgICAgICB0YXJnZXRfZGljdFtsYWJlbF0gPSBzb3VyY2VfZGljdFtsYWJlbF07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZpbmFsbHkgcmV0dXJtIHRhcmdldCBkaWN0XG4gICAgcmV0dXJuIHRhcmdldF9kaWN0O1xuXG4gICAgLy8gVE9ETyAtPiBVc2UgdGhpcyBmdW5jdGlvbiBmb3IgSG90ZWxEZXRhaWwuLi5cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNjZXB0IDMgcGFyYW1zIC0gbmV3IHByb3BzLCBvbGQgcHJvcHMgYW5kIGEgbGlzdFxuICogb2YgcHJvcHMgdGhhdCBuZWVkIHRvIGJlIG1vbml0b3JlZC4gRm9yIG5vdyB3ZSBvbmx5IGNoZWNrIGlmIHByb3BzIG9uIGEgbGlzdFxuICogeWllbGQgVFJVRS4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgbmVlZCB0byBwZXJmb3JtIHNvbWUgb3RoZXIgY2hlY2tzLlxuICpcbiAqIFxccmV0dXJucyBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gVFJVRSB3aGVuIGVpdGhlciBvZiBwcm9wcyBpcyB0cnVlIGFuZCBoYXNcbiAqICAgICAgICAgIGNoYW5nZWQgKHJlbGF0aXZlIHRvIG9sZCBwcm9wcykuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UHJvcHNDaGFuZ2UobmV3X3Byb3BzLCBvbGRfcHJvcHMsIHByb3BfbGlzdCwgZGJnX25hbWU9bnVsbCkge1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcblxuICAgIC8vIFdlIGFyZSBnb2luZyBkbyBkbyBkb3VibGUgbG9vcCBvdmVyIHRoZSBzYW1lIGxpc3QgOilcbiAgICBwcm9wX2xpc3QuZm9yRWFjaChwcm9wMSA9PiB7XG5cbiAgICAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgd2hldGhlciBjdXJyZW50IHByb3AgaGFzIGNoYW5nZWQgYmV0d2VlbiBub3cgYW5kXG4gICAgICAgIC8vIHByZXZpb3VzIHJ1blxuICAgICAgICBpZiAobmV3X3Byb3BzW3Byb3AxXSAhPSBvbGRfcHJvcHNbcHJvcDFdKSB7XG4gICAgICAgICAgICBsZXQgYWxsX3RydWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBJZiBjaGFuZ2UgaGFzIGJlZW4gZGV0ZWN0ZWQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWxsXG4gICAgICAgICAgICAvLyBwcm9wcyBvbiB0aGUgbGlzdCBoYXZlIFRSVUUgdmFsdWVcbiAgICAgICAgICAgI
1HByb3BfbGlzdC5mb3JFYWNoKHByb3AyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW5ld19wcm9wc1twcm9wMl0pIHsgYWxsX3RydWUgPSBmYWxzZTsgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIElmIGFsbCBwcm9wcyB3ZXJlIFRSVUUsIHRoZW4gcmVzdWx0IGNhbiBiZSBzZXQgdG8gVFJVRVxuICAgICAgICAgICAgLy8gV2UgY291bGQgY3V0IHRoZSBsb29wIGhlcmUsIGJ1dCB3ZSBjYW4ndCA6KVxuICAgICAgICAgICAgaWYgKGFsbF90cnVlKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSWYgZGJnX25hbWUgaGFzIGJlZW4gc2V0LCBkaXNwbGF5IGluIGNvbnNvbGUubG9nKClcbiAgICBpZiAoZGJnX25hbWUgJiYgcmVzdWx0ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNvbXBEaWRVcGRhdGUgdHJpZ2dlcjogXCIgKyBkYmdfbmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZ1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gY29tcGFyZXMgMiBsaXN0cyBvZiBkaWN0cyBieSBjZXJhdGluIHByb3BlcnR5LiBGdW5jdGlvbiB3aWxsXG4gKiByZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIHRoYXQgZG8gbm90IGV4aXN0IGVpdGhlciBpbiBlaXRoZXIgbGlzdC5cbiAqIFxccGFyYW0gbGlzdDEgICAgIEZpcnN0IGxpc3QgdGhhdCB3aWxsIGJlIG1hdGNoZWQuXG4gKiBcXHBhcmFtIGxpc3QyICAgICBTZWNvbmQgbGlzdCB0aGF0IHdpbGwgYmUgbWF0Y2hlZC5cbiAqIFxccGFyYW0gaWRfZmllbGQgIERpY3QgZmllbGQgdXNlZCB0byBsaW5rIGVudHJpZXMuIEl0IGlzIGFzc3VtZWQsIHRoZXJlIGlzXG4gKiAgICAgICAgICAgICAgICAgIG9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgZWFjaCBJRC5cbiAqIFxccmV0dXJucyBEaWN0IG9mIHR3byBsaXN0cyAtIGVhY2ggbGlzdCBjb250YWlucyBlbGVtZW50cyB0aGF0IGRpZmZlcmVcbiAqICAgICAgICAgIG9yIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3RoZXIgbGlzdC4gVGhlcmUgaXMgYWxzbyBhIGZpZWxkXG4gKiAgICAgICAgICAnaXNfZGlmZicgZm9yIHF1aWNrIGluZGljYXRpb24gb2YgZGlzY3JlcGFuY2llcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REaWN0TGlzdENoYW5nZXMobGlzdDEsIGxpc3QyLCBpZF9maWVsZCkge1xuICAgIGxldCBvdXRwdXQgPSB7XG4gICAgICAgIGRpZmYxICAgIDogW10sXG4gICAgICAgIGRpZmYyICAgIDogW10sXG4gICAgICAgIGlzX2RpZmYgIDogZmFsc2UsXG4gICAgICAgIGlzX211bHRpIDogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIE5lc3RlZCBmdW5jdGlvbiBpcyB1c2VkIHNvIHdlIGNhbiBleGVjdXRlIDItd2F5IGNvbXBhcmlzb25cbiAgICBmdW5jdGlvbiBuZXN0ZWRDb21wYXJlKGwxLCBsMiwgZGlmZl9maWVsZCkge1xuICAgICAgICBsMS5mb3JFYWNoKGl0ZW0xID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNhbWVfaXRlbV9saXN0ID0gbDIuZmlsdGVyKGl0ZW0yID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTFbaWRfZmllbGRdID09IGl0ZW0yW2lkX2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBoYXZlIGR1cGxpY2F0ZSBsaXN0XG4gICAgICAgICAgICBpZiAoc2FtZV9pdGVtX2xpc3QubGVuZ3RoID4gMSkgeyBvdXRwdXQuaXNfbXVsdGkgPSB0cnVlOyByZXR1cm47IH1cblxuICAgICAgICAgICAgLy8gV2hlbiBubyBlbGVtZW50IGZvdW5kLCB3ZSBpbiBpbmRpY2F0ZSBkaWZmIGJ5IHB1c2hpbmcgaXRlbTFcbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVfaXRlbV9saXN0Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W2RpZmZfZmllbGRdLnB1c2goaXRlbTEpO1xuICAgICAgICAgICAgICAgIG91dHB1dC5pc19kaWZmID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIFdoZW4gc2luZ2xlIGVsZW1lbnQgZm91bmQgLT4gY29tcGFyZSBjb250ZW50XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGl0ZW0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbTEuaGFzT3duUHJvcGVydHkoa2V5KSkgeyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09IGlkX2ZpZWxkKSAgICAgICAgICAgIHsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0xW2tleV0gIT0gc2FtZV9pdGVtX2xpc3RbMF1ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2RpZmZfZmllbGRdLnB1c2goaXRlbTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmlzX2RpZmYgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIGJvdGggY29tcGFyZXNcbiAgICBuZXN0ZWRDb21wYXJlKGxpc3QxLCBsaXN0MiwgJ2RpZmYxJyk7XG4gICAgbmVzdGVkQ29tcGFyZShsaXN0MiwgbGlzdDEsICdkaWZmMicpO1xuXG4gICAgLy8gUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2FwaXRhbGl6ZSAxc3QgbGV0dGVyIC0gZS5nLiBmb3IgdGl0bGUuIEZ1bmN0aW9uIHdpbGwgYWNjZXB0XG4gKiBzdHJpbmcgYW5kIHJldHVybiBzdHJpbmcgd2l0aCBjYXBpdGFsaXplZCAxc3QgbGV0dGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcEZpcnN0TGV0dGVyKHN0cikge1xuICAgIHN0ciA9IHN0ci50cmltU3RhcnQoKTtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIFdoZW4gcmVxdWlyZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYWN0aXZlIGxhbmd1YWdlIGluIGJyYWNrZXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhbmdJbkJyYWNrcyhsYW5nX2NvZGUsIHdpdGhfc3BhY2VzPXRydWUpIHtcbiAgICBsZXQgdHh0ID0gJygnICsgbGFuZ19jb2RlLnRvVXBwZXJDYXNlKCkgKyAnKSc7XG4gICAgaWYgKHdpdGhfc3BhY2VzKSB7IHJldHVybiAnICcgKyB0eHQgKyAnICc7IH1cbiAgICBlbHNlICAgICAgICAgICAgI
1HsgcmV0dXJuICAgICAgIHR4dCAgICAgIDsgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgbG9jYWxlIGRpY3QgZm9yIGRhdGVyYW5nZXBpY2tlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUxvY2FsNERSUCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBcImZvcm1hdFwiICAgICAgOiBcIkRELk1NLllZWVlcIixcbiAgICAgICAgXCJhcHBseUxhYmVsXCIgIDogZ2V0dGV4dCgnQXBwbHknKSxcbiAgICAgICAgXCJjYW5jZWxMYWJlbFwiIDogZ2V0dGV4dCgnQ2FuY2VsJyksXG4gICAgICAgIFwiZnJvbUxhYmVsXCIgICA6IGdldHRleHQoXCJGcm9tXCIpLFxuICAgICAgICBcInRvTGFiZWxcIiAgICAgOiBnZXR0ZXh0KFwiVG9cIiksXG4gICAgICAgIFwiY3VzdG9tUmFuZ2VMYWJlbFwiIDogZ2V0dGV4dChcIkN1c3RvbVwiKSxcbiAgICAgICAgXCJ3ZWVrTGFiZWxcIiAgIDogZ2V0dGV4dChcIldlZWtcIiksXG4gICAgICAgIFwiZGF5c09mV2Vla1wiOiBbXG4gICAgICAgICAgICBnZXR0ZXh0KFwiU3VcIiksXG4gICAgICAgICAgICBnZXR0ZXh0KFwiTW9cIiksXG4gICAgICAgICAgICBnZXR0ZXh0KFwiVHVcIiksXG4gICAgICAgICAgICBnZXR0ZXh0KFwiV2VcIiksXG4gICAgICAgICAgICBnZXR0ZXh0KFwiVGhcIiksXG4gICAgICAgICAgICBnZXR0ZXh0KFwiRnJcIiksXG4gICAgICAgICAgICBnZXR0ZXh0KFwiU2FcIilcbiAgICAgICAgXSxcbiAgICAgICAgXCJtb250aE5hbWVzXCI6IFtcbiAgICAgICAgICAgIGdldHRleHQoXCJKYW51YXJ5XCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIkZlYnJ1YXJ5XCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIk1hcmNoXCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIkFwcmlsXCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIk1heVwiKSxcbiAgICAgICAgICAgIGdldHRleHQoXCJKdW5lXCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIkp1bHlcIiksXG4gICAgICAgICAgICBnZXR0ZXh0KFwiQXVndXN0XCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIlNlcHRlbWJlclwiKSxcbiAgICAgICAgICAgIGdldHRleHQoXCJPY3RvYmVyXCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIk5vdmVtYmVyXCIpLFxuICAgICAgICAgICAgZ2V0dGV4dChcIkRlY2VtYmVyXCIpXG4gICAgICAgIF0sXG4gICAgICAgIFwiZmlyc3REYXlcIjogMVxuICAgIH1cbn1cblxuLyoqXG4gKiBDb25zdCB3aXRoIHdlZWtkYXlzICovXG5leHBvcnQgY29uc3Qgd2Vla2RheXMgPSBbXG4gICAgeyBzaG9ydCA6IGdldHRleHQoJ01PJyksIGNudCA6IDEsIGZ1bGwgOiBnZXR0ZXh0KCdNb25kYXknKSAgICB9LFxuICAgIHsgc2hvcnQgOiBnZXR0ZXh0KCdUVScpLCBjbnQgOiAyLCBmdWxsIDogZ2V0dGV4dCgnVHVlc2RheScpICAgfSxcbiAgICB7IHNob3J0IDogZ2V0dGV4dCgnV0UnKSwgY250IDogMywgZnVsbCA6IGdldHRleHQoJ1dlZG5lc2RheScpIH0sXG4gICAgeyBzaG9ydCA6IGdldHRleHQoJ1RIJyksIGNudCA6IDQsIGZ1bGwgOiBnZXR0ZXh0KCdUaHVyc2RheScpICB9LFxuICAgIHsgc2hvcnQgOiBnZXR0ZXh0KCdGUicpLCBjbnQgOiA1LCBmdWxsIDogZ2V0dGV4dCgnRnJpZGF5JykgICAgfSxcbiAgICB7IHNob3J0IDogZ2V0dGV4dCgnU0EnKSwgY250IDogNiwgZnVsbCA6IGdldHRleHQoJ1NhdHVyZGF5JykgIH0sXG4gICAgeyBzaG9ydCA6IGdldHRleHQoJ1NVJyksIGNudCA6IDcsIGZ1bGwgOiBnZXR0ZXh0KCdTdW5kYXknKSAgICB9LFxuXVxuXG4vKipcbiAqIEZ1bmN0aW9uIHdpbGwgcmVvcmRlciBib2FyZHMuICovXG5leHBvcnQgZnVuY3Rpb24gZml4Qm9hcmRPcmRlcihib2FyZF9saXN0KSB7XG5cbiAgICAvLyBTb3J0IGJvYXJkcyBieSBjb3JyZWN0IG9yZGVyXG4gICAgY29uc3QgYm9hcmRfb3JkZXIgPSBbJ1JPJywgJ0JCJywgJ0hCJywgJ0ZCJ107XG4gICAgYm9hcmRfbGlzdC5zb3J0KChhYSwgYmIpID0+IHtcbiAgICAgICAgbGV0IGF4ID0gYm9hcmRfb3JkZXIuaW5kZXhPZihhYS5zaG9ydCk7XG4gICAgICAgIGxldCBieCA9IGJvYXJkX29yZGVyLmluZGV4T2YoYmIuc2hvcnQpO1xuICAgICAgICByZXR1cm4gYXggLSBieDtcbiAgICB9KVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIG1hdGNoIGN1cnJlbnQgVVJMIHdpdGggcHJvdmVkZSBvbmUgLSBlLmcuIHRvIGRldGVybWluZVxuICogd2hpY2ggbGluayBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hVUkwodXJsLCBpc19jb250YWluPWZhbHNlLCB5ZXNfdmFsPSdhY3RpdmUnLCBub192YWw9JycpIHtcbiAgICBpZiAoaXNfY29udGFpbikge1xuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YodXJsKSA+PSAwKSB7IHJldHVybiB5ZXNfdmFsOyB9XG4gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5vX3ZhbDsgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09IHVybCkgeyByZXR1cm4geWVzX3ZhbDsgfVxuICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbm9fdmFsOyAgfVxuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///37753\n\n}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.