sdc_client 0.57.15 → 0.57.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@
14
14
  \**********************/
15
15
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
16
16
 
17
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* reexport safe */ _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__.AbstractSDC),\n/* harmony export */ allOff: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.allOff),\n/* harmony export */ app: () => (/* reexport safe */ _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.on),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.setEvent),\n/* harmony export */ socketReconnect: () => (/* binding */ socketReconnect),\n/* harmony export */ test_utils: () => (/* binding */ test_utils),\n/* harmony export */ trigger: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.trigger)\n/* harmony export */ });\n/* harmony import */ var _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simpleDomControl/sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./simpleDomControl/AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simpleDomControl/sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__.close;\nconst test_utils = {\n get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.get_controller,\n getCsrfToken: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.getCsrfToken,\n controllerFromTestHtml: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.controllerFromTestHtml\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDVztBQUNpQjtBQUNvQztBQUNuQjtBQUNyQztBQUM4QztBQUV6RyxNQUFNZSxlQUFlLEdBQUdKLHVFQUFLO0FBQzdCLE1BQU1LLFVBQVUsR0FBRztFQUFDSixjQUFjO0VBQUVDLFlBQVk7RUFBRUMsc0JBQXNCQSx5RkFBQUE7QUFBQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9pbmRleC5qcz9iNjM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX21haW4uanMnO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzJztcbmltcG9ydCB7b24sIHRyaWdnZXIsIGFsbE9mZiwgc2V0RXZlbnR9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzJztcbmltcG9ydCB7Y2xlYXJFcnJvcnNJbkZvcm0sIHNldEVycm9yc0luRm9ybSwgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3V0aWxzLmpzJztcbmltcG9ydCB7Y29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHtjbG9zZX0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY19zZXJ2ZXJfY2FsbC5qcydcbmltcG9ydCB7Z2V0X2NvbnRyb2xsZXIsIGdldENzcmZUb2tlbiwgY29udHJvbGxlckZyb21UZXN0SHRtbH0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY190ZXN0X3V0aWxzLmpzJ1xuXG5jb25zdCBzb2NrZXRSZWNvbm5lY3QgPSBjbG9zZVxuY29uc3QgdGVzdF91dGlscyA9IHtnZXRfY29udHJvbGxlciwgZ2V0Q3NyZlRva2VuLCBjb250cm9sbGVyRnJvbVRlc3RIdG1sfTtcblxuZXhwb3J0IHtcbiAgICBhcHAsIEFic3RyYWN0U0RDLCBvbiwgdHJpZ2dlciwgYWxsT2ZmLCBzZXRFdmVudCwgY2xlYXJFcnJvcnNJbkZvcm0sIHNldEVycm9yc0luRm9ybSwgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nLFxuICAgIGNvbnRyb2xsZXJGYWN0b3J5LCBydW5Db250cm9sRmxvd0Z1bmN0aW9ucywgc29ja2V0UmVjb25uZWN0LCB0ZXN0X3V0aWxzXG59XG4iXSwibmFtZXMiOlsiYXBwIiwiQWJzdHJhY3RTREMiLCJvbiIsInRyaWdnZXIiLCJhbGxPZmYiLCJzZXRFdmVudCIsImNsZWFyRXJyb3JzSW5Gb3JtIiwic2V0RXJyb3JzSW5Gb3JtIiwiY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nIiwiY29udHJvbGxlckZhY3RvcnkiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsImNsb3NlIiwiZ2V0X2NvbnRyb2xsZXIiLCJnZXRDc3JmVG9rZW4iLCJjb250cm9sbGVyRnJvbVRlc3RIdG1sIiwic29ja2V0UmVjb25uZWN0IiwidGVzdF91dGlscyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.js\n");
17
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* reexport safe */ _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__.AbstractSDC),\n/* harmony export */ allOff: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.allOff),\n/* harmony export */ app: () => (/* reexport safe */ _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.on),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.setEvent),\n/* harmony export */ socketReconnect: () => (/* binding */ socketReconnect),\n/* harmony export */ test_utils: () => (/* binding */ test_utils),\n/* harmony export */ trigger: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.trigger)\n/* harmony export */ });\n/* harmony import */ var _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simpleDomControl/sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./simpleDomControl/AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simpleDomControl/sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__.close;\nconst test_utils = {\n get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.get_controller,\n getCsrfToken: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.getCsrfToken,\n controllerFromTestHtml: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.controllerFromTestHtml\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDVztBQUNpQjtBQUNvQztBQUNuQjtBQUNyQztBQUM4QztBQUV6RyxNQUFNZSxlQUFlLEdBQUdKLHVFQUFLO0FBQzdCLE1BQU1LLFVBQVUsR0FBRztFQUFDSixjQUFjO0VBQUVDLFlBQVk7RUFBRUMsc0JBQXNCQSx5RkFBQUE7QUFBQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9pbmRleC5qcz9iNjM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX21haW4uanMnO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzJztcbmltcG9ydCB7b24sIHRyaWdnZXIsIGFsbE9mZiwgc2V0RXZlbnR9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzJztcbmltcG9ydCB7Y2xlYXJFcnJvcnNJbkZvcm0sIHNldEVycm9yc0luRm9ybSwgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3V0aWxzLmpzJztcbmltcG9ydCB7Y29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHtjbG9zZX0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY19zZXJ2ZXJfY2FsbC5qcydcbmltcG9ydCB7Z2V0X2NvbnRyb2xsZXIsIGdldENzcmZUb2tlbiwgY29udHJvbGxlckZyb21UZXN0SHRtbH0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY190ZXN0X3V0aWxzLmpzJ1xuXG5jb25zdCBzb2NrZXRSZWNvbm5lY3QgPSBjbG9zZVxuY29uc3QgdGVzdF91dGlscyA9IHtnZXRfY29udHJvbGxlciwgZ2V0Q3NyZlRva2VuLCBjb250cm9sbGVyRnJvbVRlc3RIdG1sfTtcblxuZXhwb3J0IHtcbiAgICBhcHAsIEFic3RyYWN0U0RDLCBvbiwgdHJpZ2dlciwgYWxsT2ZmLCBzZXRFdmVudCwgY2xlYXJFcnJvcnNJbkZvcm0sIHNldEVycm9yc0luRm9ybSwgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nLFxuICAgIGNvbnRyb2xsZXJGYWN0b3J5LCBydW5Db250cm9sRmxvd0Z1bmN0aW9ucywgc29ja2V0UmVjb25uZWN0LCB0ZXN0X3V0aWxzXG59XG4iXSwibmFtZXMiOlsiYXBwIiwiQWJzdHJhY3RTREMiLCJvbiIsInRyaWdnZXIiLCJhbGxPZmYiLCJzZXRFdmVudCIsImNsZWFyRXJyb3JzSW5Gb3JtIiwic2V0RXJyb3JzSW5Gb3JtIiwiY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nIiwiY29udHJvbGxlckZhY3RvcnkiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsImNsb3NlIiwiZ2V0X2NvbnRyb2xsZXIiLCJnZXRDc3JmVG9rZW4iLCJjb250cm9sbGVyRnJvbVRlc3RIdG1sIiwic29ja2V0UmVjb25uZWN0IiwidGVzdF91dGlscyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.js\n\n}");
18
18
 
19
19
  /***/ }),
20
20
 
@@ -24,7 +24,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
24
24
  \*********************************************/
25
25
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
26
26
 
27
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\n this.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn('afterShow is deprecated!!');\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = Object.getPrototypeOf(this)._tagName ?? '';\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === 'function') {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.DEBUG(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle('onLoad', arguments);\n }\n willShow() {\n return this._runLifecycle('willShow', arguments);\n }\n onRefresh() {\n return this._runLifecycle('onRefresh', arguments);\n }\n onRemove() {\n this._runLifecycle('onRemove', arguments);\n return true;\n }\n noOpenModelRequests() {\n return Promise.all(this._models.map(x => x.noOpenRequests()));\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error('To use the serverCall function the contentUrl must be set: ' + this.name);\n return;\n }\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(app[1], this._tagName, this.parsedContentUrl ?? this.contentUrl, methode, args);\n }\n\n /**\n *\n * @param model_name {string | Number}\n * @param model_query {Object}\n * @constructor\n */\n newModel(model_name, model_query = {}) {\n if (model_name instanceof Number && model_name.hasOwnProperty('load')) {\n return model_name.load(this);\n }\n const model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n this._models.push(model);\n return model;\n }\n\n /**\n *\n * @param model_name {string}\n * @param model_query {Object}\n * @param values {Object}\n * @constructor\n */\n updateModel(model_name, model_query = {}, values) {\n let model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n return model.load().then(() => {\n model.values |= values;\n model.save().then(() => {\n model.close();\n return model.values;\n });\n });\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === 'function') {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === 'function') {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n let p_list = [];\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let model = $form.data('model');\n const values = model.syncForm($form);\n for (let instance_value of values) {\n p_list.push(new Promise((resolve, reject) => {\n let prom;\n if (instance_value.pk !== null && instance_value.pk >= 0) {\n prom = model.save(instance_value.pk);\n } else {\n prom = model.create(instance_value);\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.setErrorsInForm)($form, $(data.html));\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n }));\n }\n }\n return Promise.all(p_list).then(res => {\n return Object.assign({}, ...res.flat());\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLE1BQU1TLFVBQVUsSUFBSSxJQUFJLENBQUNkLGtCQUFrQixDQUFDLENBQUMsRUFBRTtjQUMvQ2MsVUFBVSxDQUFDSSx1QkFBdUIsSUFBSUosVUFBVSxDQUFDSSx1QkFBdUIsQ0FBQ2IsSUFBSSxDQUFDO1lBQ2xGO1lBQ0FJLE1BQU0sQ0FBQ0osSUFBSSxDQUFDO1VBQ2hCLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1A7SUFDSjtJQUVBLE9BQU81RSxPQUFPLENBQUNDLEdBQUcsQ0FBQ3dFLE1BQU0sQ0FBQyxDQUFDdkUsSUFBSSxDQUFFc0UsR0FBRyxJQUFLO01BQ3JDLE9BQU96RixNQUFNLENBQUMyRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBR2xCLEdBQUcsQ0FBQ21CLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0VBQ047QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcz9kN2Y3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWxsT2ZmfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7TW9kZWx9IGZyb20gXCIuL3NkY19zb2NrZXQuanNcIjtcbmltcG9ydCB7Y2FsbFNlcnZlcn0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5pbXBvcnQge3V1aWR2NCwgc2V0RXJyb3JzSW5Gb3JtLCBjbGVhckVycm9yc0luRm9ybSwgdGFnTmFtZVRvQ2FtZWxDYXNlLCB0YWdOYW1lVG9SZWFkYWJsZU5hbWV9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTREMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl91dWlkID0gdXVpZHY0KCk7XG4gICAgICAgIHRoaXMuY29udGVudFVybCA9ICcnO1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJzZWRDb250ZW50VXJsID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkX2FzeW5jID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRXZlbnRzU2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50cyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHRoaXMuX21vZGVscyA9IFtdO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBPbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdGhpcy5fY3NzVXJscyA9IFtdO1xuICAgICAgICB0aGlzLmFmdGVyU2hvdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignYWZ0ZXJTaG93IGlzIGRlcHJlY2F0ZWQhIScpXG4gICAgICAgIH07XG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tIEVuZCBvbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzogQWJzdHJhY3RTREN9fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fbWl4aW5zID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl90YWdOYW1lID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl90YWdOYW1lID8/ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9PcGVuTW9kZWxSZXF1ZXN0cyggKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9tb2RlbHMubWFwKHggPT4geC5ub09wZW5SZXF1ZXN0cygpKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gICAgfVxuXG4gICAgcG9zdCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgZ2V0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLmdldCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2VydmVyQ2FsbChtZXRob2RlLCBhcmdzKSB7XG4gICAgICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICAgICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgICAgIGlmICghYXBwIHx8IGFwcC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6ICcgKyB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoYXBwWzFdLCB0aGlzLl90YWdOYW1lLCB0aGlzLnBhcnNlZENvbnRlbnRVcmwgPz8gdGhpcy5jb250ZW50VXJsLCBtZXRob2RlLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmcgfCBOdW1iZXJ9XG4gICAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgbmV3TW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICBpZihtb2RlbF9uYW1lIGluc3RhbmNlb2YgTnVtYmVyICYmIG1vZGVsX25hbWUuaGFzT3duUHJvcGVydHkoJ2xvYWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsX25hbWUubG9hZCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBwYXJhbSB2YWx1ZXMge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB1cGRhdGVNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9LCB2YWx1ZXMpIHtcbiAgICAgICAgbGV0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIG1vZGVsLmxvYWQoKS50aGVuKCgpPT57XG4gICAgICAgICAgICBtb2RlbC52YWx1ZXMgfD0gdmFsdWVzO1xuICAgICAgICAgICAgbW9kZWwuc2F2ZSgpLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWwudmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRhcHRlciB0byB0aGlzLiRjb250YWluZXIuZmluZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb21TZWxlY3RvclxuICAgICAqL1xuICAgIGZpbmQoZG9tU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlZnJlc2godGhpcy4kY29udGFpbmVyLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVsb2FkQ29udHJvbGxlcih0aGlzKTtcbiAgICB9XG5cbiAgICByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVjb25jaWxlKHRoaXMsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgICB9XG5cbiAgICBzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcigkZm9ybSwgZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG5cbiAgICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYyBvZiBfY2hpbGRDb250cm9sbGVyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goLi4uY2MuaXRlcmF0ZUFsbENoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIEZvcm0gRXZlbnRzXG4gICAgICovXG4gICAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgICAgICBsZXQgcF9saXN0ID0gW107XG4gICAgICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCBtb2RlbCA9ICRmb3JtLmRhdGEoJ21vZGVsJyk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtb2RlbC5zeW5jRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbnN0YW5jZV92YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VfdmFsdWUucGsgIT09IG51bGwgJiYgaW5zdGFuY2VfdmFsdWUucGsgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLnNhdmUoaW5zdGFuY2VfdmFsdWUucGspO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLmNyZWF0ZShpbnN0YW5jZV92YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9tLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJFcnJvcnNJbkZvcm0oJGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MocmVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yc0luRm9ybSgkZm9ybSwgJChkYXRhLmh0bWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnJlcy5mbGF0KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59Il0sIm5hbWVzIjpbImFsbE9mZiIsImFwcCIsIk1vZGVsIiwiY2FsbFNlcnZlciIsInV1aWR2NCIsInNldEVycm9yc0luRm9ybSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidGFnTmFtZVRvUmVhZGFibGVOYW1lIiwiQWJzdHJhY3RTREMiLCJjb25zdHJ1Y3RvciIsIl91dWlkIiwiY29udGVudFVybCIsImNvbnRlbnRSZWxvYWQiLCJwYXJzZWRDb250ZW50VXJsIiwiZXZlbnRzIiwibG9hZF9hc3luYyIsIl9pc0V2ZW50c1NldCIsIl9hbGxFdmVudHMiLCJfdXJsUGFyYW1zIiwiX21vZGVscyIsIl9jc3NVcmxzIiwiYWZ0ZXJTaG93IiwiY29uc29sZSIsIndhcm4iLCJfbWl4aW5zIiwiX3RhZ05hbWUiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsIl9vbkxvYWREb25lIiwiJGNvbnRhaW5lciIsIl9pc01peGluIiwiX3J1bkxpZmVjeWNsZSIsIm1ldGhvZCIsImFyZ3MiLCJERUJVRyIsImRlYnVnIiwicmV0dXJuUHJvbWlzc2VzIiwibWl4aW5LZXkiLCJtaXhpbiIsInB1c2giLCJhcHBseSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwib25Jbml0IiwiQXJyYXkiLCJhcmd1bWVudHMiLCJwYXJlbnRDb250cm9sbGVyIiwiY2hpbGRDb250cm9sbGVyIiwib25Mb2FkIiwid2lsbFNob3ciLCJvblJlZnJlc2giLCJvblJlbW92ZSIsIm5vT3Blbk1vZGVsUmVxdWVzdHMiLCJtYXAiLCJ4Iiwibm9PcGVuUmVxdWVzdHMiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIl8iLCJtZXJnZSIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwibmV3TW9kZWwiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJOdW1iZXIiLCJsb2FkIiwidXBkYXRlTW9kZWwiLCJ2YWx1ZXMiLCJzYXZlIiwiZmluZCIsImRvbVNlbGVjdG9yIiwicmVmcmVzaCIsInJlbG9hZCIsInJlbG9hZENvbnRyb2xsZXIiLCJyZWNvbmNpbGUiLCIkdmlydHVhbE5vZGUiLCIkcmVhbE5vZGUiLCJzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvciIsIiRmb3JtIiwiZSIsIl9zdWJtaXRNb2RlbEZvcm0iLCJzdWJtaXRNb2RlbEZvcm0iLCJkZWZhdWx0U3VibWl0TW9kZWxGb3JtIiwiaXRlcmF0ZUFsbENoaWxkcmVuIiwicmVzIiwicF9saXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJkYXRhIiwic3luY0Zvcm0iLCJpbnN0YW5jZV92YWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9tIiwicGsiLCJjcmVhdGUiLCJzdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzIiwiY29udHJvbGxlciIsImNhdGNoIiwiJCIsImh0bWwiLCJzdWJtaXRfbW9kZWxfZm9ybV9lcnJvciIsImFzc2lnbiIsImZsYXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n");
27
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\n this.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn('afterShow is deprecated!!');\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = Object.getPrototypeOf(this)._tagName ?? '';\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === 'function') {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.DEBUG(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle('onLoad', arguments);\n }\n willShow() {\n return this._runLifecycle('willShow', arguments);\n }\n onRefresh() {\n return this._runLifecycle('onRefresh', arguments);\n }\n onRemove() {\n this._runLifecycle('onRemove', arguments);\n return true;\n }\n noOpenModelRequests() {\n return Promise.all(this._models.map(x => x.noOpenRequests()));\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error('To use the serverCall function the contentUrl must be set: ' + this.name);\n return;\n }\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(app[1], this._tagName, this.parsedContentUrl ?? this.contentUrl, methode, args);\n }\n\n /**\n *\n * @param model_name {string | Number}\n * @param model_query {Object}\n * @constructor\n */\n newModel(model_name, model_query = {}) {\n if (model_name instanceof Number && model_name.hasOwnProperty('load')) {\n return model_name.load(this);\n }\n const model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n this._models.push(model);\n return model;\n }\n\n /**\n *\n * @param model_name {string}\n * @param model_query {Object}\n * @param values {Object}\n * @constructor\n */\n updateModel(model_name, model_query = {}, values) {\n let model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n return model.load().then(() => {\n model.values |= values;\n model.save().then(() => {\n model.close();\n return model.values;\n });\n });\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === 'function') {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === 'function') {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n let p_list = [];\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let {\n model,\n form_name\n } = $form.data();\n const values = model.syncForm($form);\n for (let instance_value of values) {\n p_list.push(new Promise((resolve, reject) => {\n let prom;\n if (instance_value.pk !== null && instance_value.pk >= 0) {\n prom = model.save(instance_value.pk, form_name);\n } else {\n prom = model.create(instance_value);\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.setErrorsInForm)($form, $(data.html));\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n }));\n }\n }\n return Promise.all(p_list).then(res => {\n return Object.assign({}, ...res.flat());\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QXVCLENBQUNiLElBQUksQ0FBQztZQUNsRSxLQUFJLE1BQU1TLFVBQVUsSUFBSSxJQUFJLENBQUNmLGtCQUFrQixDQUFDLENBQUMsRUFBRTtjQUMvQ2UsVUFBVSxDQUFDSSx1QkFBdUIsSUFBSUosVUFBVSxDQUFDSSx1QkFBdUIsQ0FBQ2IsSUFBSSxDQUFDO1lBQ2xGO1lBQ0FJLE1BQU0sQ0FBQ0osSUFBSSxDQUFDO1VBQ2hCLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1A7SUFDSjtJQUVBLE9BQU83RSxPQUFPLENBQUNDLEdBQUcsQ0FBQ3dFLE1BQU0sQ0FBQyxDQUFDdkUsSUFBSSxDQUFFc0UsR0FBRyxJQUFLO01BQ3JDLE9BQU96RixNQUFNLENBQUM0RyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBR25CLEdBQUcsQ0FBQ29CLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0VBQ047QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcz9kN2Y3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWxsT2ZmfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7TW9kZWx9IGZyb20gXCIuL3NkY19zb2NrZXQuanNcIjtcbmltcG9ydCB7Y2FsbFNlcnZlcn0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5pbXBvcnQge3V1aWR2NCwgc2V0RXJyb3JzSW5Gb3JtLCBjbGVhckVycm9yc0luRm9ybSwgdGFnTmFtZVRvQ2FtZWxDYXNlLCB0YWdOYW1lVG9SZWFkYWJsZU5hbWV9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTREMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl91dWlkID0gdXVpZHY0KCk7XG4gICAgICAgIHRoaXMuY29udGVudFVybCA9ICcnO1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJzZWRDb250ZW50VXJsID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkX2FzeW5jID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRXZlbnRzU2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50cyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHRoaXMuX21vZGVscyA9IFtdO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBPbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdGhpcy5fY3NzVXJscyA9IFtdO1xuICAgICAgICB0aGlzLmFmdGVyU2hvdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignYWZ0ZXJTaG93IGlzIGRlcHJlY2F0ZWQhIScpXG4gICAgICAgIH07XG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tIEVuZCBvbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzogQWJzdHJhY3RTREN9fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fbWl4aW5zID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl90YWdOYW1lID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl90YWdOYW1lID8/ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9PcGVuTW9kZWxSZXF1ZXN0cyggKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9tb2RlbHMubWFwKHggPT4geC5ub09wZW5SZXF1ZXN0cygpKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gICAgfVxuXG4gICAgcG9zdCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgZ2V0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLmdldCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2VydmVyQ2FsbChtZXRob2RlLCBhcmdzKSB7XG4gICAgICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICAgICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgICAgIGlmICghYXBwIHx8IGFwcC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6ICcgKyB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoYXBwWzFdLCB0aGlzLl90YWdOYW1lLCB0aGlzLnBhcnNlZENvbnRlbnRVcmwgPz8gdGhpcy5jb250ZW50VXJsLCBtZXRob2RlLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmcgfCBOdW1iZXJ9XG4gICAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgbmV3TW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICBpZihtb2RlbF9uYW1lIGluc3RhbmNlb2YgTnVtYmVyICYmIG1vZGVsX25hbWUuaGFzT3duUHJvcGVydHkoJ2xvYWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsX25hbWUubG9hZCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBwYXJhbSB2YWx1ZXMge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB1cGRhdGVNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9LCB2YWx1ZXMpIHtcbiAgICAgICAgbGV0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIG1vZGVsLmxvYWQoKS50aGVuKCgpPT57XG4gICAgICAgICAgICBtb2RlbC52YWx1ZXMgfD0gdmFsdWVzO1xuICAgICAgICAgICAgbW9kZWwuc2F2ZSgpLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWwudmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRhcHRlciB0byB0aGlzLiRjb250YWluZXIuZmluZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb21TZWxlY3RvclxuICAgICAqL1xuICAgIGZpbmQoZG9tU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlZnJlc2godGhpcy4kY29udGFpbmVyLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVsb2FkQ29udHJvbGxlcih0aGlzKTtcbiAgICB9XG5cbiAgICByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVjb25jaWxlKHRoaXMsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgICB9XG5cbiAgICBzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcigkZm9ybSwgZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG5cbiAgICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYyBvZiBfY2hpbGRDb250cm9sbGVyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goLi4uY2MuaXRlcmF0ZUFsbENoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIEZvcm0gRXZlbnRzXG4gICAgICovXG4gICAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgICAgICBsZXQgcF9saXN0ID0gW107XG4gICAgICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCB7bW9kZWwsIGZvcm1fbmFtZX0gPSAkZm9ybS5kYXRhKCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtb2RlbC5zeW5jRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbnN0YW5jZV92YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VfdmFsdWUucGsgIT09IG51bGwgJiYgaW5zdGFuY2VfdmFsdWUucGsgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLnNhdmUoaW5zdGFuY2VfdmFsdWUucGssIGZvcm1fbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tID0gbW9kZWwuY3JlYXRlKGluc3RhbmNlX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByb20udGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yc0luRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JzSW5Gb3JtKCRmb3JtLCAkKGRhdGEuaHRtbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJiB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiYgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgLi4ucmVzLmZsYXQoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0iXSwibmFtZXMiOlsiYWxsT2ZmIiwiYXBwIiwiTW9kZWwiLCJjYWxsU2VydmVyIiwidXVpZHY0Iiwic2V0RXJyb3JzSW5Gb3JtIiwiY2xlYXJFcnJvcnNJbkZvcm0iLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJBYnN0cmFjdFNEQyIsImNvbnN0cnVjdG9yIiwiX3V1aWQiLCJjb250ZW50VXJsIiwiY29udGVudFJlbG9hZCIsInBhcnNlZENvbnRlbnRVcmwiLCJldmVudHMiLCJsb2FkX2FzeW5jIiwiX2lzRXZlbnRzU2V0IiwiX2FsbEV2ZW50cyIsIl91cmxQYXJhbXMiLCJfbW9kZWxzIiwiX2Nzc1VybHMiLCJhZnRlclNob3ciLCJjb25zb2xlIiwid2FybiIsIl9taXhpbnMiLCJfdGFnTmFtZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiX2NoaWxkQ29udHJvbGxlciIsIl9wYXJlbnRDb250cm9sbGVyIiwiX29uTG9hZERvbmUiLCIkY29udGFpbmVyIiwiX2lzTWl4aW4iLCJfcnVuTGlmZWN5Y2xlIiwibWV0aG9kIiwiYXJncyIsIkRFQlVHIiwiZGVidWciLCJyZXR1cm5Qcm9taXNzZXMiLCJtaXhpbktleSIsIm1peGluIiwicHVzaCIsImFwcGx5IiwiUHJvbWlzZSIsImFsbCIsInRoZW4iLCJvbkluaXQiLCJBcnJheSIsImFyZ3VtZW50cyIsInBhcmVudENvbnRyb2xsZXIiLCJjaGlsZENvbnRyb2xsZXIiLCJvbkxvYWQiLCJ3aWxsU2hvdyIsIm9uUmVmcmVzaCIsIm9uUmVtb3ZlIiwibm9PcGVuTW9kZWxSZXF1ZXN0cyIsIm1hcCIsIngiLCJub09wZW5SZXF1ZXN0cyIsInJlbW92ZSIsIm1vZGVsIiwiY2xvc2UiLCJpIiwiaGFzT3duUHJvcGVydHkiLCJjYyIsImNfbmFtZSIsImFyciIsImxlbmd0aCIsInNwbGljZSIsImNvbnRyb2xsZXJfbmFtZSIsImFkZEV2ZW50IiwiZXZlbnQiLCJzZWxlY3RvciIsImhhbmRsZXIiLCJnZXRFdmVudHMiLCJhbGxFdmVudHMiLCJjb25jYXQiLCJpc0FycmF5IiwiXyIsIm1lcmdlIiwicG9zdCIsInVybCIsImdldCIsInN1Ym1pdEZvcm0iLCJmb3JtIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJzZXJ2ZXJDYWxsIiwibWV0aG9kZSIsInJlIiwibWF0Y2giLCJlcnJvciIsIm5hbWUiLCJuZXdNb2RlbCIsIm1vZGVsX25hbWUiLCJtb2RlbF9xdWVyeSIsIk51bWJlciIsImxvYWQiLCJ1cGRhdGVNb2RlbCIsInZhbHVlcyIsInNhdmUiLCJmaW5kIiwiZG9tU2VsZWN0b3IiLCJyZWZyZXNoIiwicmVsb2FkIiwicmVsb2FkQ29udHJvbGxlciIsInJlY29uY2lsZSIsIiR2aXJ0dWFsTm9kZSIsIiRyZWFsTm9kZSIsInN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yIiwiJGZvcm0iLCJlIiwiX3N1Ym1pdE1vZGVsRm9ybSIsInN1Ym1pdE1vZGVsRm9ybSIsImRlZmF1bHRTdWJtaXRNb2RlbEZvcm0iLCJpdGVyYXRlQWxsQ2hpbGRyZW4iLCJyZXMiLCJwX2xpc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImZvcm1fbmFtZSIsImRhdGEiLCJzeW5jRm9ybSIsImluc3RhbmNlX3ZhbHVlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb20iLCJwayIsImNyZWF0ZSIsInN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MiLCJjb250cm9sbGVyIiwiY2F0Y2giLCIkIiwiaHRtbCIsInN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yIiwiYXNzaWduIiwiZmxhdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n\n}");
28
28
 
29
29
  /***/ }),
30
30
 
@@ -34,7 +34,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
34
34
  \************************************************/
35
35
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
36
36
 
37
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ prepareRefreshProcess: () => (/* binding */ prepareRefreshProcess),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList),\n/* harmony export */ updateEventAndTriggerOnRefresh: () => (/* binding */ updateEventAndTriggerOnRefresh)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n\n\n\n\n\nlet Global = [];\nlet controllerList = {};\nfunction tagList() {\n return Object.keys(controllerList);\n}\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n parentController._childController[controllerName].push(controller);\n }\n return controller._parentController = parentController;\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(parentController, $element, tagName, superTagNameList) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(controllerClass, ...mixinControllerClass))();\n controller._tagName = tagName;\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n if (Global.includes(tagName)) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (!window[gTagName]) {\n window[gTagName] = controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n }\n window[gTagName].$container = $element;\n return window[gTagName];\n }\n return controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then(html => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runControlFlowFunctions(controller, process) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller, process);\n }).catch(function ($html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n });\n if (controller.load_async) {\n return Promise.resolve();\n }\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runRefresh(controller, process) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)(null, controller, process);\n}\nfunction getParentList(controller) {\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return controllerList;\n}\n\n/**\n *\n * @param {Object} process - Process object containing the refresh process\n */\nfunction updateEventAndTriggerOnRefresh(process) {\n const parentList = getParentList(process.controller[0]);\n const controllerList = parentList.concat(process.controller.slice(1));\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__.setControllerEvents)(con);\n con.onRefresh(process.controller[0]);\n }\n}\nfunction prepareRefreshProcess(refreshProcess, controller) {\n let isRunningProcess = Boolean(refreshProcess);\n if (!isRunningProcess) {\n refreshProcess = {\n uuids: new Set([controller._uuid]),\n controller: [controller]\n };\n } else if (!refreshProcess.uuids.has(controller._uuid)) {\n refreshProcess.uuids.add(controller._uuid);\n refreshProcess.controller.push(controller);\n }\n return {\n isRunningProcess,\n refreshProcess\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RjtBQU9sRTtBQUVnQztBQUNDO0FBQ3RCO0FBRTNCLElBQUlXLE1BQU0sR0FBRyxFQUFFO0FBQ2YsSUFBSUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2QixTQUFTQyxPQUFPQSxDQUFBLEVBQUc7RUFDdEIsT0FBT0MsTUFBTSxDQUFDQyxJQUFJLENBQUNILGNBQWMsQ0FBQztBQUN0QztBQUdBLFNBQVNJLGFBQWFBLENBQUNDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUU7RUFDOUNELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0UsTUFBTSxDQUFDUCxjQUFjLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RFRCxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUNHLE1BQU0sQ0FBQyxDQUFDQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxLQUFLO0lBQy9ELE9BQU9BLElBQUksQ0FBQ0MsT0FBTyxDQUFDSCxLQUFLLENBQUMsS0FBS0MsS0FBSztFQUN4QyxDQUFDLENBQUM7RUFDRixJQUFJRyxRQUFRLEdBQUcsSUFBSTtFQUNuQixPQUFPQSxRQUFRLEVBQUU7SUFDYkEsUUFBUSxHQUFHLEtBQUs7SUFDaEIsS0FBSyxJQUFJQyxHQUFHLElBQUlULGdCQUFnQixFQUFFO01BQzlCLEtBQUssSUFBSVUsTUFBTSxJQUFJZixjQUFjLENBQUNjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLElBQUksQ0FBQ1QsZ0JBQWdCLENBQUNXLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDLEVBQUU7VUFDcENWLGdCQUFnQixDQUFDWSxJQUFJLENBQUNGLE1BQU0sQ0FBQztVQUM3QkYsUUFBUSxHQUFHLElBQUk7UUFDbkI7TUFDSjtJQUNKO0VBQ0o7RUFDQSxPQUFPUixnQkFBZ0I7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FB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QUFLLENBQUNJLEdBQUcsQ0FBQ3ZELFVBQVUsQ0FBQ3FELEtBQUssQ0FBQztJQUMxQ0wsY0FBYyxDQUFDaEQsVUFBVSxDQUFDSCxJQUFJLENBQUNHLFVBQVUsQ0FBQztFQUM1QztFQUVBLE9BQU87SUFBQ2lELGdCQUFnQjtJQUFFRDtFQUFjLENBQUM7QUFDN0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanM/OGEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3Byb21pc2VEdW1teUZhY3RvcnksIHRhZ05hbWVUb0NhbWVsQ2FzZSwgYWdpbGVBZ2dyZWdhdGlvbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIENPTlRST0xMRVJfQ0xBU1MsXG4gICAgZ2V0Q29udHJvbGxlcixcbiAgICBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcixcbiAgICByZWZyZXNoLFxuICAgIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5pbXBvcnQge3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXJ9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7c2V0Q29udHJvbGxlckV2ZW50c30gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuXG5leHBvcnQgbGV0IEdsb2JhbCA9IFtdO1xuZXhwb3J0IGxldCBjb250cm9sbGVyTGlzdCA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFnTGlzdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJvbGxlckxpc3QpO1xufVxuXG5cbmZ1bmN0aW9uIHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSkge1xuICAgIHN1cGVyVGFnTmFtZUxpc3QgPSBzdXBlclRhZ05hbWVMaXN0LmNvbmNhdChjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXSk7XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuICAgIH0pO1xuICAgIGxldCBoYXNBZGRlZCA9IHRydWU7XG4gICAgd2hpbGUgKGhhc0FkZGVkKSB7XG4gICAgICAgIGhhc0FkZGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IHRhZyBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuZXdUYWcgb2YgY29udHJvbGxlckxpc3RbdGFnXVsxXSkge1xuICAgICAgICAgICAgICAgIGlmICghc3VwZXJUYWdOYW1lTGlzdC5pbmNsdWRlcyhuZXdUYWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyVGFnTmFtZUxpc3QucHVzaChuZXdUYWcpO1xuICAgICAgICAgICAgICAgICAgICBoYXNBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdXBlclRhZ05hbWVMaXN0O1xufVxuXG4vKipcbiAqIHNldFBhcmVudENvbnRyb2xsZXIgc2V0cyB0aGUgcGFyZW50IGNvbnRyb2xsZXIgYXMgcHJvcGVydHk6ICdwYXJlbnRDb250cm9sbGVyJ1xuICogdG8gdGhlIGNoaWxkIGNvbnRyb2xsZXIuIEFsc28sIGl0IGFkZHMgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gdGhlIHByb3BlcnR5IGxpc3Q6XG4gKiAncGFyZW50Q29udHJvbGxlcicgdG8gdGhlIHBhcmVudCBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2UsIGNvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET00gb2YgdGhlIGNvbnRyb2xsZXJzIERPTVxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtIHBhcmVudENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKSB7XG4gICAgaWYgKHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJOYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKGNvbnRyb2xsZXIuX3RhZ05hbWUpO1xuICAgICAgICBpZiAoIXBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0pIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0ucHVzaChjb250cm9sbGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyKVxufVxuXG4vKipcbiAqIHJlc2V0Q2hpbGRyZW4gcmVzZXRzIGFsbCBjaGlsZHJlbiBvZiBhIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDaGlsZHJlbihwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyID0ge307XG4gICAgcGFyZW50Q29udHJvbGxlci5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkdGhpcyk7XG4gICAgICAgIGlmIChjQ29udHJvbGxlciA9PT0gcGFyZW50Q29udHJvbGxlcikge1xuICAgICAgICAgICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIGl0IGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgaW5pdCBwYXJhbWV0ZXIgYnkgdGhlIGRhdGEgdmFsdWVzIG9mIHRoZSBET00uXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgc3VwZXIgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgbGV0IG1peGluQ29udHJvbGxlckNsYXNzID0gW107XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSk7XG4gICAgZm9yIChsZXQgc3VwZXJUYWdOYW1lIG9mIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICAgICAgbWl4aW5Db250cm9sbGVyQ2xhc3MucHVzaChjb250cm9sbGVyTGlzdFtzdXBlclRhZ05hbWVdWzBdKTtcbiAgICB9XG5cbiAgICBsZXQgY29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgKGFnaWxlQWdncmVnYXRpb24oY29udHJvbGxlckNsYXNzLCAuLi5taXhpbkNvbnRyb2xsZXJDbGFzcykpKCk7XG4gICAgY29udHJvbGxlci5fdGFnTmFtZSA9IHRhZ05hbWU7XG5cbiAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lciA9ICRlbGVtZW50O1xuICAgIHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoJGVsZW1lbnQsIGNvbnRyb2xsZXIpO1xuXG5cbiAgICByZXR1cm4gY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeSBpdCBlaXRoZXIgZ2VuZXJhdGVzIGEgY29udHJvbGxlciBvciB0YWtlcyBhIGdsb2JlIGluc3RhbmNlXG4gKiBkZXBlbmRpbmcgaWYgdGhlIGNvbnRyb2xsZXIgaXMgcmVnaXN0ZXJlZCBhcyBhIGdsb2JhbCBjb250cm9sbGVyLiBJdCBzZXRzIHRoZVxuICogJGNvbnRhaW5lciBvYmplY3QgdG8gdGhlIGpRdWVyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFnLlxuICpcbiAqIFJlbWVtYmVyIEdsb2JhbCBjb250cm9sbGVyIGNhbiBub3QgaGF2ZSBhIHN1cGVyIGNvbnRyb2xsZXIhXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIENvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET01cbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudCAtIFRoZSBjdXJyZW50IERPTSBqUXVlcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIC0gdGhlIHJlZ2lzdGVyZWQgdGFnIG5hbWUgb2YgdGhlIGN1cnJlbnQgRE9NXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgaWYgKEdsb2JhbC5pbmNsdWRlcyh0YWdOYW1lKSkge1xuICAgICAgICBsZXQgZ1RhZ05hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSk7XG4gICAgICAgIGlmICghd2luZG93W2dUYWdOYW1lXSkge1xuICAgICAgICAgICAgd2luZG93W2dUYWdOYW1lXSA9IGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93W2dUYWdOYW1lXS4kY29udGFpbmVyID0gJGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB3aW5kb3dbZ1RhZ05hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyU2hvdyBmaXJzdCBydW5zIG9uTG9hZCBhbmQgZmlsbCBjb250ZW50IGZvciBhbGwgc3ViXG4gKiBjb250cm9sbGVyLiBPbmx5IGlmIGFsbCB0aGUgc3ViIGNvbnRyb2xsZXIgYXJlIGxvYWRlZCB0aGUgd2lsbFNob3dcbiAqIGNvbnRyb2wgZmxvdyBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBhcmdzID0gYXJncyB8fCB0cnVlO1xuICAgICAgICBpZiAoY29udHJvbGxlci53aWxsU2hvdykge1xuICAgICAgICAgICAgbGV0IGxvYWRQcm9taXNlT3JDb250ZW50ID0gY29udHJvbGxlci53aWxsU2hvdygpO1xuICAgICAgICAgICAgaWYgKGxvYWRQcm9taXNlT3JDb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkUHJvbWlzZU9yQ29udGVudC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJMb2FkIENhbGxzIHRoZSBvbkxvYWQgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2xsZXIuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgdGhlIEhUTUwgaXMgc2V0IHRvIHRoZSBwYWdlLlxuICogVGhlIHBhcmFtZXRlciBpcyBhIGxpc3Qgb2YgY2hpbGRyZW4gb2YgdGhlIHRhZyBhbmQgdGhlIHJlZ2lzdGVyZWQgdGFnLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2xsZXIub25Mb2FkIHx8IGNvbnRyb2xsZXIuX29uTG9hZERvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgICAgIGxldCBsb2FkUHJvbWlzZSA9IGNvbnRyb2xsZXIub25Mb2FkKGh0bWwpO1xuICAgICAgICByZXR1cm4gKGxvYWRQcm9taXNlIHx8IHByb21pc2VEdW1teUZhY3RvcnkoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMgcnVucyB0aGUgY29udHJvbCBmbG93IGZ1bmN0aW9uczpcbiAqIDEuIG9uTG9hZCgpXG4gKiAyLiBmaWxsIGNvbnRlbnRcbiAqIDMuIHdpbGxTaG93KGRvbSBwYXJhbWV0ZXIpXG4gKiA0LiByZWZyZXNoKClcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MgKSB7XG4gICAgY29uc3QgcHJvbV9jb250cm9sbGVyID0gcnVuQ29udHJvbGxlckxvYWQoY29udHJvbGxlcilcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoJGh0bWwpIHtcbiAgICAgICAgICAgIHJldHVybiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KTtcblxuICAgIGlmIChjb250cm9sbGVyLmxvYWRfYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9tX2NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgICByZXR1cm4gcmVmcmVzaChudWxsLCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50TGlzdChjb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgd2hpbGUgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5faXNFdmVudHNTZXQgPSBmYWxzZTtcbiAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXI7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyTGlzdFxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHByb2Nlc3MpIHtcbiAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChwcm9jZXNzLmNvbnRyb2xsZXJbMF0pO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJMaXN0ID0gcGFyZW50TGlzdC5jb25jYXQocHJvY2Vzcy5jb250cm9sbGVyLnNsaWNlKDEpKTtcblxuICAgIGZvciAobGV0IGNvbiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICBzZXRDb250cm9sbGVyRXZlbnRzKGNvbik7XG4gICAgICAgIGNvbi5vblJlZnJlc2gocHJvY2Vzcy5jb250cm9sbGVyWzBdKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSZWZyZXNoUHJvY2VzcyhyZWZyZXNoUHJvY2VzcywgY29udHJvbGxlcikge1xuICAgIGxldCBpc1J1bm5pbmdQcm9jZXNzID0gQm9vbGVhbihyZWZyZXNoUHJvY2Vzcyk7XG5cbiAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgIHJlZnJlc2hQcm9jZXNzID0ge3V1aWRzOiBuZXcgU2V0KFtjb250cm9sbGVyLl91dWlkXSksIGNvbnRyb2xsZXI6IFtjb250cm9sbGVyXX07XG4gICAgfSBlbHNlIGlmICghcmVmcmVzaFByb2Nlc3MudXVpZHMuaGFzKGNvbnRyb2xsZXIuX3V1aWQpKSB7XG4gICAgICByZWZyZXNoUHJvY2Vzcy51dWlkcy5hZGQoY29udHJvbGxlci5fdXVpZCk7XG4gICAgICByZWZyZXNoUHJvY2Vzcy5jb250cm9sbGVyLnB1c2goY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtpc1J1bm5pbmdQcm9jZXNzLCByZWZyZXNoUHJvY2Vzc307XG59XG5cbiJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiYWdpbGVBZ2dyZWdhdGlvbiIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJyZWZyZXNoIiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwicnVuT25Jbml0V2l0aFBhcmFtZXRlciIsInNldENvbnRyb2xsZXJFdmVudHMiLCJhcHAiLCJHbG9iYWwiLCJjb250cm9sbGVyTGlzdCIsInRhZ0xpc3QiLCJPYmplY3QiLCJrZXlzIiwicHJlcGFyZU1peGlucyIsInN1cGVyVGFnTmFtZUxpc3QiLCJ0YWdOYW1lIiwiY29uY2F0IiwiZmlsdGVyIiwidmFsdWUiLCJpbmRleCIsInNlbGYiLCJpbmRleE9mIiwiaGFzQWRkZWQiLCJ0YWciLCJuZXdUYWciLCJpbmNsdWRlcyIsInB1c2giLCJzZXRQYXJlbnRDb250cm9sbGVyIiwicGFyZW50Q29udHJvbGxlciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyTmFtZSIsIl90YWdOYW1lIiwiX2NoaWxkQ29udHJvbGxlciIsIl9wYXJlbnRDb250cm9sbGVyIiwicmVzZXRDaGlsZHJlbiIsImZpbmQiLCJlYWNoIiwiJHRoaXMiLCIkIiwiY0NvbnRyb2xsZXIiLCJjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIiwiJGVsZW1lbnQiLCJtaXhpbkNvbnRyb2xsZXJDbGFzcyIsInN1cGVyVGFnTmFtZSIsImNvbnRyb2xsZXJDbGFzcyIsIiRjb250YWluZXIiLCJjb250cm9sbGVyRmFjdG9yeSIsImdUYWdOYW1lIiwid2luZG93IiwicnVuQ29udHJvbGxlclNob3ciLCIkaHRtbCIsInRoZW4iLCJhcmdzIiwid2lsbFNob3ciLCJsb2FkUHJvbWlzZU9yQ29udGVudCIsIlByb21pc2UiLCJydW5Db250cm9sbGVyTG9hZCIsImh0bWwiLCJvbkxvYWQiLCJfb25Mb2FkRG9uZSIsImxvYWRQcm9taXNlIiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJwcm9jZXNzIiwicHJvbV9jb250cm9sbGVyIiwicnVuUmVmcmVzaCIsImNhdGNoIiwibG9hZF9hc3luYyIsInJlc29sdmUiLCJnZXRQYXJlbnRMaXN0IiwiX2lzRXZlbnRzU2V0IiwidW5zaGlmdCIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInBhcmVudExpc3QiLCJzbGljZSIsImNvbiIsIm9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsInJlZnJlc2hQcm9jZXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIkJvb2xlYW4iLCJ1dWlkcyIsIlNldCIsIl91dWlkIiwiaGFzIiwiYWRkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n");
37
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ prepareRefreshProcess: () => (/* binding */ prepareRefreshProcess),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList),\n/* harmony export */ updateEventAndTriggerOnRefresh: () => (/* binding */ updateEventAndTriggerOnRefresh)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n\n\n\n\n\nlet Global = [];\nlet controllerList = {};\nfunction tagList() {\n return Object.keys(controllerList);\n}\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n parentController._childController[controllerName].push(controller);\n }\n return controller._parentController = parentController;\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(parentController, $element, tagName, superTagNameList) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(controllerClass, ...mixinControllerClass))();\n controller._tagName = tagName;\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n if (Global.includes(tagName)) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (!window[gTagName]) {\n window[gTagName] = controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n }\n window[gTagName].$container = $element;\n return window[gTagName];\n }\n return controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then(html => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runControlFlowFunctions(controller, process) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller, process);\n }).catch(function ($html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n });\n if (controller.load_async) {\n return Promise.resolve();\n }\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runRefresh(controller, process) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)(null, controller, process);\n}\nfunction getParentList(controller) {\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return controllerList;\n}\n\n/**\n *\n * @param {Object} process - Process object containing the refresh process\n */\nfunction updateEventAndTriggerOnRefresh(process) {\n const parentList = getParentList(process.controller[0]);\n const controllerList = parentList.concat(process.controller.slice(1));\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__.setControllerEvents)(con);\n con.onRefresh(process.controller[0]);\n }\n}\nfunction prepareRefreshProcess(refreshProcess, controller) {\n let isRunningProcess = Boolean(refreshProcess);\n if (!isRunningProcess) {\n refreshProcess = {\n uuids: new Set([controller._uuid]),\n controller: [controller]\n };\n } else if (!refreshProcess.uuids.has(controller._uuid)) {\n refreshProcess.uuids.add(controller._uuid);\n refreshProcess.controller.push(controller);\n }\n return {\n isRunningProcess,\n refreshProcess\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RjtBQU9sRTtBQUVnQztBQUNDO0FBQ3RCO0FBRTNCLElBQUlXLE1BQU0sR0FBRyxFQUFFO0FBQ2YsSUFBSUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2QixTQUFTQyxPQUFPQSxDQUFBLEVBQUc7RUFDdEIsT0FBT0MsTUFBTSxDQUFDQyxJQUFJLENBQUNILGNBQWMsQ0FBQztBQUN0QztBQUdBLFNBQVNJLGFBQWFBLENBQUNDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUU7RUFDOUNELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0UsTUFBTSxDQUFDUCxjQUFjLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RFRCxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUNHLE1BQU0sQ0FBQyxDQUFDQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxLQUFLO0lBQy9ELE9BQU9BLElBQUksQ0FBQ0MsT0FBTyxDQUFDSCxLQUFLLENBQUMsS0FBS0MsS0FBSztFQUN4QyxDQUFDLENBQUM7RUFDRixJQUFJRyxRQUFRLEdBQUcsSUFBSTtFQUNuQixPQUFPQSxRQUFRLEVBQUU7SUFDYkEsUUFBUSxHQUFHLEtBQUs7SUFDaEIsS0FBSyxJQUFJQyxHQUFHLElBQUlULGdCQUFnQixFQUFFO01BQzlCLEtBQUssSUFBSVUsTUFBTSxJQUFJZixjQUFjLENBQUNjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLElBQUksQ0FBQ1QsZ0JBQWdCLENBQUNXLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDLEVBQUU7VUFDcENWLGdCQUFnQixDQUFDWSxJQUFJLENBQUNGLE1BQU0sQ0FBQztVQUM3QkYsUUFBUSxHQUFHLElBQUk7UUFDbkI7TUFDSjtJQUNKO0VBQ0o7RUFDQSxPQUFPUixnQkFBZ0I7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FB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QUFLLENBQUNJLEdBQUcsQ0FBQ3ZELFVBQVUsQ0FBQ3FELEtBQUssQ0FBQztJQUMxQ0wsY0FBYyxDQUFDaEQsVUFBVSxDQUFDSCxJQUFJLENBQUNHLFVBQVUsQ0FBQztFQUM1QztFQUVBLE9BQU87SUFBQ2lELGdCQUFnQjtJQUFFRDtFQUFjLENBQUM7QUFDN0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanM/OGEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3Byb21pc2VEdW1teUZhY3RvcnksIHRhZ05hbWVUb0NhbWVsQ2FzZSwgYWdpbGVBZ2dyZWdhdGlvbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIENPTlRST0xMRVJfQ0xBU1MsXG4gICAgZ2V0Q29udHJvbGxlcixcbiAgICBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcixcbiAgICByZWZyZXNoLFxuICAgIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5pbXBvcnQge3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXJ9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7c2V0Q29udHJvbGxlckV2ZW50c30gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuXG5leHBvcnQgbGV0IEdsb2JhbCA9IFtdO1xuZXhwb3J0IGxldCBjb250cm9sbGVyTGlzdCA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFnTGlzdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJvbGxlckxpc3QpO1xufVxuXG5cbmZ1bmN0aW9uIHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSkge1xuICAgIHN1cGVyVGFnTmFtZUxpc3QgPSBzdXBlclRhZ05hbWVMaXN0LmNvbmNhdChjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXSk7XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuICAgIH0pO1xuICAgIGxldCBoYXNBZGRlZCA9IHRydWU7XG4gICAgd2hpbGUgKGhhc0FkZGVkKSB7XG4gICAgICAgIGhhc0FkZGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IHRhZyBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuZXdUYWcgb2YgY29udHJvbGxlckxpc3RbdGFnXVsxXSkge1xuICAgICAgICAgICAgICAgIGlmICghc3VwZXJUYWdOYW1lTGlzdC5pbmNsdWRlcyhuZXdUYWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyVGFnTmFtZUxpc3QucHVzaChuZXdUYWcpO1xuICAgICAgICAgICAgICAgICAgICBoYXNBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdXBlclRhZ05hbWVMaXN0O1xufVxuXG4vKipcbiAqIHNldFBhcmVudENvbnRyb2xsZXIgc2V0cyB0aGUgcGFyZW50IGNvbnRyb2xsZXIgYXMgcHJvcGVydHk6ICdwYXJlbnRDb250cm9sbGVyJ1xuICogdG8gdGhlIGNoaWxkIGNvbnRyb2xsZXIuIEFsc28sIGl0IGFkZHMgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gdGhlIHByb3BlcnR5IGxpc3Q6XG4gKiAncGFyZW50Q29udHJvbGxlcicgdG8gdGhlIHBhcmVudCBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2UsIGNvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET00gb2YgdGhlIGNvbnRyb2xsZXJzIERPTVxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtIHBhcmVudENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKSB7XG4gICAgaWYgKHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJOYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKGNvbnRyb2xsZXIuX3RhZ05hbWUpO1xuICAgICAgICBpZiAoIXBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0pIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0ucHVzaChjb250cm9sbGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyKVxufVxuXG4vKipcbiAqIHJlc2V0Q2hpbGRyZW4gcmVzZXRzIGFsbCBjaGlsZHJlbiBvZiBhIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDaGlsZHJlbihwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyID0ge307XG4gICAgcGFyZW50Q29udHJvbGxlci5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkdGhpcyk7XG4gICAgICAgIGlmIChjQ29udHJvbGxlciA9PT0gcGFyZW50Q29udHJvbGxlcikge1xuICAgICAgICAgICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIGl0IGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgaW5pdCBwYXJhbWV0ZXIgYnkgdGhlIGRhdGEgdmFsdWVzIG9mIHRoZSBET00uXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgc3VwZXIgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgbGV0IG1peGluQ29udHJvbGxlckNsYXNzID0gW107XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSk7XG4gICAgZm9yIChsZXQgc3VwZXJUYWdOYW1lIG9mIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICAgICAgbWl4aW5Db250cm9sbGVyQ2xhc3MucHVzaChjb250cm9sbGVyTGlzdFtzdXBlclRhZ05hbWVdWzBdKTtcbiAgICB9XG5cbiAgICBsZXQgY29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgKGFnaWxlQWdncmVnYXRpb24oY29udHJvbGxlckNsYXNzLCAuLi5taXhpbkNvbnRyb2xsZXJDbGFzcykpKCk7XG4gICAgY29udHJvbGxlci5fdGFnTmFtZSA9IHRhZ05hbWU7XG5cbiAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lciA9ICRlbGVtZW50O1xuICAgIHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoJGVsZW1lbnQsIGNvbnRyb2xsZXIpO1xuXG5cbiAgICByZXR1cm4gY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeSBpdCBlaXRoZXIgZ2VuZXJhdGVzIGEgY29udHJvbGxlciBvciB0YWtlcyBhIGdsb2JlIGluc3RhbmNlXG4gKiBkZXBlbmRpbmcgaWYgdGhlIGNvbnRyb2xsZXIgaXMgcmVnaXN0ZXJlZCBhcyBhIGdsb2JhbCBjb250cm9sbGVyLiBJdCBzZXRzIHRoZVxuICogJGNvbnRhaW5lciBvYmplY3QgdG8gdGhlIGpRdWVyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFnLlxuICpcbiAqIFJlbWVtYmVyIEdsb2JhbCBjb250cm9sbGVyIGNhbiBub3QgaGF2ZSBhIHN1cGVyIGNvbnRyb2xsZXIhXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIENvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET01cbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudCAtIFRoZSBjdXJyZW50IERPTSBqUXVlcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIC0gdGhlIHJlZ2lzdGVyZWQgdGFnIG5hbWUgb2YgdGhlIGN1cnJlbnQgRE9NXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgaWYgKEdsb2JhbC5pbmNsdWRlcyh0YWdOYW1lKSkge1xuICAgICAgICBsZXQgZ1RhZ05hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSk7XG4gICAgICAgIGlmICghd2luZG93W2dUYWdOYW1lXSkge1xuICAgICAgICAgICAgd2luZG93W2dUYWdOYW1lXSA9IGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93W2dUYWdOYW1lXS4kY29udGFpbmVyID0gJGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB3aW5kb3dbZ1RhZ05hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyU2hvdyBmaXJzdCBydW5zIG9uTG9hZCBhbmQgZmlsbCBjb250ZW50IGZvciBhbGwgc3ViXG4gKiBjb250cm9sbGVyLiBPbmx5IGlmIGFsbCB0aGUgc3ViIGNvbnRyb2xsZXIgYXJlIGxvYWRlZCB0aGUgd2lsbFNob3dcbiAqIGNvbnRyb2wgZmxvdyBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBhcmdzID0gYXJncyB8fCB0cnVlO1xuICAgICAgICBpZiAoY29udHJvbGxlci53aWxsU2hvdykge1xuICAgICAgICAgICAgbGV0IGxvYWRQcm9taXNlT3JDb250ZW50ID0gY29udHJvbGxlci53aWxsU2hvdygpO1xuICAgICAgICAgICAgaWYgKGxvYWRQcm9taXNlT3JDb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkUHJvbWlzZU9yQ29udGVudC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJMb2FkIENhbGxzIHRoZSBvbkxvYWQgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2xsZXIuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgdGhlIEhUTUwgaXMgc2V0IHRvIHRoZSBwYWdlLlxuICogVGhlIHBhcmFtZXRlciBpcyBhIGxpc3Qgb2YgY2hpbGRyZW4gb2YgdGhlIHRhZyBhbmQgdGhlIHJlZ2lzdGVyZWQgdGFnLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2xsZXIub25Mb2FkIHx8IGNvbnRyb2xsZXIuX29uTG9hZERvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgICAgIGxldCBsb2FkUHJvbWlzZSA9IGNvbnRyb2xsZXIub25Mb2FkKGh0bWwpO1xuICAgICAgICByZXR1cm4gKGxvYWRQcm9taXNlIHx8IHByb21pc2VEdW1teUZhY3RvcnkoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMgcnVucyB0aGUgY29udHJvbCBmbG93IGZ1bmN0aW9uczpcbiAqIDEuIG9uTG9hZCgpXG4gKiAyLiBmaWxsIGNvbnRlbnRcbiAqIDMuIHdpbGxTaG93KGRvbSBwYXJhbWV0ZXIpXG4gKiA0LiByZWZyZXNoKClcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MgKSB7XG4gICAgY29uc3QgcHJvbV9jb250cm9sbGVyID0gcnVuQ29udHJvbGxlckxvYWQoY29udHJvbGxlcilcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoJGh0bWwpIHtcbiAgICAgICAgICAgIHJldHVybiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KTtcblxuICAgIGlmIChjb250cm9sbGVyLmxvYWRfYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9tX2NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgICByZXR1cm4gcmVmcmVzaChudWxsLCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50TGlzdChjb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgd2hpbGUgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5faXNFdmVudHNTZXQgPSBmYWxzZTtcbiAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXI7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyTGlzdFxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHByb2Nlc3MpIHtcbiAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChwcm9jZXNzLmNvbnRyb2xsZXJbMF0pO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJMaXN0ID0gcGFyZW50TGlzdC5jb25jYXQocHJvY2Vzcy5jb250cm9sbGVyLnNsaWNlKDEpKTtcblxuICAgIGZvciAobGV0IGNvbiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICBzZXRDb250cm9sbGVyRXZlbnRzKGNvbik7XG4gICAgICAgIGNvbi5vblJlZnJlc2gocHJvY2Vzcy5jb250cm9sbGVyWzBdKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSZWZyZXNoUHJvY2VzcyhyZWZyZXNoUHJvY2VzcywgY29udHJvbGxlcikge1xuICAgIGxldCBpc1J1bm5pbmdQcm9jZXNzID0gQm9vbGVhbihyZWZyZXNoUHJvY2Vzcyk7XG5cbiAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgIHJlZnJlc2hQcm9jZXNzID0ge3V1aWRzOiBuZXcgU2V0KFtjb250cm9sbGVyLl91dWlkXSksIGNvbnRyb2xsZXI6IFtjb250cm9sbGVyXX07XG4gICAgfSBlbHNlIGlmICghcmVmcmVzaFByb2Nlc3MudXVpZHMuaGFzKGNvbnRyb2xsZXIuX3V1aWQpKSB7XG4gICAgICByZWZyZXNoUHJvY2Vzcy51dWlkcy5hZGQoY29udHJvbGxlci5fdXVpZCk7XG4gICAgICByZWZyZXNoUHJvY2Vzcy5jb250cm9sbGVyLnB1c2goY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtpc1J1bm5pbmdQcm9jZXNzLCByZWZyZXNoUHJvY2Vzc307XG59XG5cbiJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiYWdpbGVBZ2dyZWdhdGlvbiIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJyZWZyZXNoIiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwicnVuT25Jbml0V2l0aFBhcmFtZXRlciIsInNldENvbnRyb2xsZXJFdmVudHMiLCJhcHAiLCJHbG9iYWwiLCJjb250cm9sbGVyTGlzdCIsInRhZ0xpc3QiLCJPYmplY3QiLCJrZXlzIiwicHJlcGFyZU1peGlucyIsInN1cGVyVGFnTmFtZUxpc3QiLCJ0YWdOYW1lIiwiY29uY2F0IiwiZmlsdGVyIiwidmFsdWUiLCJpbmRleCIsInNlbGYiLCJpbmRleE9mIiwiaGFzQWRkZWQiLCJ0YWciLCJuZXdUYWciLCJpbmNsdWRlcyIsInB1c2giLCJzZXRQYXJlbnRDb250cm9sbGVyIiwicGFyZW50Q29udHJvbGxlciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyTmFtZSIsIl90YWdOYW1lIiwiX2NoaWxkQ29udHJvbGxlciIsIl9wYXJlbnRDb250cm9sbGVyIiwicmVzZXRDaGlsZHJlbiIsImZpbmQiLCJlYWNoIiwiJHRoaXMiLCIkIiwiY0NvbnRyb2xsZXIiLCJjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIiwiJGVsZW1lbnQiLCJtaXhpbkNvbnRyb2xsZXJDbGFzcyIsInN1cGVyVGFnTmFtZSIsImNvbnRyb2xsZXJDbGFzcyIsIiRjb250YWluZXIiLCJjb250cm9sbGVyRmFjdG9yeSIsImdUYWdOYW1lIiwid2luZG93IiwicnVuQ29udHJvbGxlclNob3ciLCIkaHRtbCIsInRoZW4iLCJhcmdzIiwid2lsbFNob3ciLCJsb2FkUHJvbWlzZU9yQ29udGVudCIsIlByb21pc2UiLCJydW5Db250cm9sbGVyTG9hZCIsImh0bWwiLCJvbkxvYWQiLCJfb25Mb2FkRG9uZSIsImxvYWRQcm9taXNlIiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJwcm9jZXNzIiwicHJvbV9jb250cm9sbGVyIiwicnVuUmVmcmVzaCIsImNhdGNoIiwibG9hZF9hc3luYyIsInJlc29sdmUiLCJnZXRQYXJlbnRMaXN0IiwiX2lzRXZlbnRzU2V0IiwidW5zaGlmdCIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInBhcmVudExpc3QiLCJzbGljZSIsImNvbiIsIm9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsInJlZnJlc2hQcm9jZXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIkJvb2xlYW4iLCJ1dWlkcyIsIlNldCIsIl91dWlkIiwiaGFzIiwiYWRkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n\n}");
38
38
 
39
39
  /***/ }),
40
40
 
@@ -44,7 +44,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
44
44
  \************************************************/
45
45
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
46
46
 
47
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\nconst STD_EVENT_BLACK_LIST = ['onbeforeunload', 'onunload'];\nconst STD_EVENT_LIST = Object.keys(window).filter(key => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key)).map(x => x.slice(2));\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (event.hasOwnProperty('namespace') && event.namespace && event.namespace.length) ev_type += `.${event.namespace}`;\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => is_last_elem = true;\n event.stopPropagation = () => is_last_elem = is_done = true;\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(' ').forEach(attr => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === 'function') {\n handler = attr;\n } else if (typeof controller[attr] === 'function') {\n handler = controller[attr];\n } else if (typeof attr === 'string' && attr.startsWith('this.event_')) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice('this.event_'.length)];\n if (!handler) {\n return;\n }\n }\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n return {\n res: true\n };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach(ev_type => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];else event_list = event_list.split(' ');\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(' '));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LElBQUksSUFBSTtZQUN6RCxJQUFJLENBQUNvQyxVQUFVLEVBQUVBLFVBQVUsR0FBRyxFQUFFLENBQUMsS0FDNUJBLFVBQVUsR0FBR0EsVUFBVSxDQUFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN2QyxNQUFNc0IsT0FBTyxHQUFHLGNBQWNMLFdBQVcsRUFBRTtZQUMzQyxJQUFJSSxVQUFVLENBQUNFLE9BQU8sQ0FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Y0FDcENELFVBQVUsQ0FBQ0csSUFBSSxDQUFDRixPQUFPLENBQUM7Y0FDeEJGLFNBQVMsQ0FBQ3JCLElBQUksQ0FBQyxPQUFPZCxPQUFPLEVBQUUsRUFBRW9DLFVBQVUsQ0FBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFEO1VBRUosQ0FBQyxDQUFDO1FBQ047TUFDSjtJQUNKO0VBQ0o7RUFDQTtFQUNBO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2RvbV9ldmVudHMuanM/NDMzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldENvbnRyb2xsZXJ9IGZyb20gJy4vc2RjX3ZpZXcuanMnO1xuXG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0JMQUNLX0xJU1QgPSBbJ29uYmVmb3JldW5sb2FkJywgJ29udW5sb2FkJ107XG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0xJU1QgPSBPYmplY3Qua2V5cyh3aW5kb3cpLmZpbHRlcihrZXkgPT4gL15vbi8udGVzdChrZXkpICYmICFTVERfRVZFTlRfQkxBQ0tfTElTVC5pbmNsdWRlcyhrZXkpKS5tYXAoeCA9PiB4LnNsaWNlKDIpKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50SGFuZGxlcihldmVudCkge1xuICAgIGxldCBldl90eXBlID0gZXZlbnQudHlwZTtcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ25hbWVzcGFjZScpICYmIGV2ZW50Lm5hbWVzcGFjZSAmJiBldmVudC5uYW1lc3BhY2UubGVuZ3RoKSBldl90eXBlICs9IGAuJHtldmVudC5uYW1lc3BhY2V9YDtcblxuICAgIGxldCAkZWxtID0gJChldmVudC50YXJnZXQpO1xuICAgIGxldCBjb250cm9sbGVyID0gbnVsbDtcbiAgICBsZXQgaXNfZG9uZSA9IGZhbHNlO1xuICAgIGxldCBpc19sYXN0X2VsZW0gPSBmYWxzZTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiBpc19sYXN0X2VsZW0gPSB0cnVlO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9ICgpID0+IGlzX2xhc3RfZWxlbSA9IGlzX2RvbmUgPSB0cnVlO1xuICAgIHdoaWxlICgkZWxtLmxlbmd0aCkge1xuICAgICAgICBsZXQgYXR0cnMgPSAkZWxtLmF0dHIoYHNkY18ke2V2X3R5cGV9YCk7XG4gICAgICAgIGlmIChhdHRycykge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGVsbSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGF0dHJzLnNwbGl0KCcgJykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGF0dHI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRyb2xsZXJbYXR0cl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdHRyID09PSAnc3RyaW5nJyAmJiBhdHRyLnN0YXJ0c1dpdGgoJ3RoaXMuZXZlbnRfJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyLmdldEV2ZW50cygpW2V2X3R5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJbYXR0ci5zbGljZSgndGhpcy5ldmVudF8nLmxlbmd0aCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyLmNhbGwoY29udHJvbGxlciwgJGVsbSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc19sYXN0X2VsZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlclxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc19kb25lKSByZXR1cm47XG4gICAgICAgICRlbG0gPSAkZWxtLnBhcmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiB7cmVzOiB0cnVlfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdEV2ZW50cygpIHtcbiAgICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICAgIFNURF9FVkVOVF9MSVNULmZvckVhY2goZXZfdHlwZSA9PiB7XG4gICAgICAgICR3aW5kb3cub2ZmKGV2X3R5cGUpLm9uKGV2X3R5cGUsIHdpbmRvd0V2ZW50SGFuZGxlcik7XG4gICAgfSk7XG59XG5cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udHJvbGxlckV2ZW50cyhjb250cm9sbGVyKSB7XG5cbiAgICBpZiAoY29udHJvbGxlci5faXNFdmVudHNTZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IGNvbnRyb2xsZXIuZ2V0RXZlbnRzKCk7XG4gICAgZm9yIChsZXQgZXZfdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldl90eXBlKSkge1xuICAgICAgICAgICAgbGV0IGV2ZW50TGlzdCA9IGV2ZW50c1tldl90eXBlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGRvbVNlbGVjdG9yIGluIGV2ZW50TGlzdCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudExpc3QuaGFzT3duUHJvcGVydHkoZG9tU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZmluZChkb21TZWxlY3RvcikuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgJGVsZW1lbnRzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVudF9saXN0ID0gJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnRfbGlzdCkgZXZlbnRfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBldmVudF9saXN0ID0gZXZlbnRfbGlzdC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3X2tleSA9IGB0aGlzLmV2ZW50XyR7ZG9tU2VsZWN0b3J9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudF9saXN0LmluZGV4T2YobmV3X2tleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdC5wdXNoKG5ld19rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50cy5hdHRyKGBzZGNfJHtldl90eXBlfWAsIGV2ZW50X2xpc3Quam9pbignICcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUT0RPOiBJcyBpdCBuZWVkZWRcbiAgICAvL2NvbnRyb2xsZXIuX2lzRXZlbnRzU2V0ID0gdHJ1ZTtcbn0iXSwibmFtZXMiOlsiZ2V0Q29udHJvbGxlciIsIlNURF9FVkVOVF9CTEFDS19MSVNUIiwiU1REX0VWRU5UX0xJU1QiLCJPYmplY3QiLCJrZXlzIiwid2luZG93IiwiZmlsdGVyIiwia2V5IiwidGVzdCIsImluY2x1ZGVzIiwibWFwIiwieCIsInNsaWNlIiwid2luZG93RXZlbnRIYW5kbGVyIiwiZXZlbnQiLCJldl90eXBlIiwidHlwZSIsImhhc093blByb3BlcnR5IiwibmFtZXNwYWNlIiwibGVuZ3RoIiwiJGVsbSIsIiQiLCJ0YXJnZXQiLCJjb250cm9sbGVyIiwiaXNfZG9uZSIsImlzX2xhc3RfZWxlbSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImF0dHJzIiwiYXR0ciIsInNwbGl0IiwiZm9yRWFjaCIsImhhbmRsZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXZlbnRzIiwiY2FsbCIsIl9wYXJlbnRDb250cm9sbGVyIiwicGFyZW50IiwicmVzIiwiaW5pdEV2ZW50cyIsIiR3aW5kb3ciLCJvZmYiLCJvbiIsInNldENvbnRyb2xsZXJFdmVudHMiLCJfaXNFdmVudHNTZXQiLCJldmVudHMiLCJldmVudExpc3QiLCJkb21TZWxlY3RvciIsImZpbmQiLCJlYWNoIiwiJGVsZW1lbnRzIiwiZXZlbnRfbGlzdCIsIm5ld19rZXkiLCJpbmRleE9mIiwicHVzaCIsImpvaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n");
47
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\nconst STD_EVENT_BLACK_LIST = ['onbeforeunload', 'onunload'];\nconst STD_EVENT_LIST = Object.keys(window).filter(key => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key)).map(x => x.slice(2));\nfunction checkIfEventFits(ev_type, e, target) {\n let elementUnderMouse;\n switch (ev_type) {\n case \"mouseleave\":\n case \"mouseout\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n case \"mouseenter\":\n case \"mousein\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n default:\n return true;\n }\n ;\n}\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (event.hasOwnProperty('namespace') && event.namespace && event.namespace.length) ev_type += `.${event.namespace}`;\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => is_last_elem = true;\n event.stopPropagation = () => is_last_elem = is_done = true;\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs && checkIfEventFits(ev_type, event, $elm[0])) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(' ').forEach(attr => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === 'function') {\n handler = attr;\n } else if (typeof controller[attr] === 'function') {\n handler = controller[attr];\n } else if (typeof attr === 'string' && attr.startsWith('this.event_')) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice('this.event_'.length)];\n if (!handler) {\n return;\n }\n }\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n return {\n res: true\n };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach(ev_type => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];else event_list = event_list.split(' ');\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(' '));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZG9tX2V2ZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBNEM7QUFFckMsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUM7QUFDM0QsTUFBTUMsY0FBYyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsR0FBRyxJQUFJLEtBQUssQ0FBQ0MsSUFBSSxDQUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDTixvQkFBb0IsQ0FBQ1EsUUFBUSxDQUFDRixHQUFHLENBQUMsQ0FBQyxDQUFDRyxHQUFHLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUksU0FBU0MsZ0JBQWdCQSxDQUFDQyxPQUFPLEVBQUVDLENBQUMsRUFBRUMsTUFBTSxFQUFFO0VBQzFDLElBQUlDLGlCQUFpQjtFQUNyQixRQUFRSCxPQUFPO0lBQ1gsS0FBSyxZQUFZO0lBQ2pCLEtBQUssVUFBVTtNQUNYRyxpQkFBaUIsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQ0osQ0FBQyxDQUFDSyxPQUFPLEVBQUVMLENBQUMsQ0FBQ00sT0FBTyxDQUFDO01BQ25FLE9BQU9MLE1BQU0sS0FBS0MsaUJBQWlCLElBQUksQ0FBQ0QsTUFBTSxDQUFDTSxRQUFRLENBQUNMLGlCQUFpQixDQUFDO0lBQzlFLEtBQUssWUFBWTtJQUNqQixLQUFLLFNBQVM7TUFDVkEsaUJBQWlCLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUNKLENBQUMsQ0FBQ0ssT0FBTyxFQUFFTCxDQUFDLENBQUNNLE9BQU8sQ0FBQztNQUNuRSxPQUFPTCxNQUFNLEtBQUtDLGlCQUFpQixJQUFJLENBQUNELE1BQU0sQ0FBQ00sUUFBUSxDQUFDTCxpQkFBaUIsQ0FBQztJQUM5RTtNQUNJLE9BQU8sSUFBSTtFQUNuQjtFQUFDO0FBQ0w7QUFFTyxTQUFTTSxrQkFB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Q0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFEO1VBRUosQ0FBQyxDQUFDO1FBQ047TUFDSjtJQUNKO0VBQ0o7RUFDQTtFQUNBO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2RvbV9ldmVudHMuanM/NDMzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldENvbnRyb2xsZXJ9IGZyb20gJy4vc2RjX3ZpZXcuanMnO1xuXG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0JMQUNLX0xJU1QgPSBbJ29uYmVmb3JldW5sb2FkJywgJ29udW5sb2FkJ107XG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0xJU1QgPSBPYmplY3Qua2V5cyh3aW5kb3cpLmZpbHRlcihrZXkgPT4gL15vbi8udGVzdChrZXkpICYmICFTVERfRVZFTlRfQkxBQ0tfTElTVC5pbmNsdWRlcyhrZXkpKS5tYXAoeCA9PiB4LnNsaWNlKDIpKTtcblxuZnVuY3Rpb24gY2hlY2tJZkV2ZW50Rml0cyhldl90eXBlLCBlLCB0YXJnZXQpIHtcbiAgICBsZXQgZWxlbWVudFVuZGVyTW91c2U7XG4gICAgc3dpdGNoIChldl90eXBlKSB7XG4gICAgICAgIGNhc2UgXCJtb3VzZWxlYXZlXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgICAgZWxlbWVudFVuZGVyTW91c2UgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgIT09IGVsZW1lbnRVbmRlck1vdXNlICYmICF0YXJnZXQuY29udGFpbnMoZWxlbWVudFVuZGVyTW91c2UpO1xuICAgICAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgICAgICBjYXNlIFwibW91c2VpblwiOlxuICAgICAgICAgICAgZWxlbWVudFVuZGVyTW91c2UgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgIT09IGVsZW1lbnRVbmRlck1vdXNlICYmICF0YXJnZXQuY29udGFpbnMoZWxlbWVudFVuZGVyTW91c2UpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50SGFuZGxlcihldmVudCkge1xuICAgIGxldCBldl90eXBlID0gZXZlbnQudHlwZTtcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ25hbWVzcGFjZScpICYmIGV2ZW50Lm5hbWVzcGFjZSAmJiBldmVudC5uYW1lc3BhY2UubGVuZ3RoKSBldl90eXBlICs9IGAuJHtldmVudC5uYW1lc3BhY2V9YDtcblxuICAgIGxldCAkZWxtID0gJChldmVudC50YXJnZXQpO1xuICAgIGxldCBjb250cm9sbGVyID0gbnVsbDtcbiAgICBsZXQgaXNfZG9uZSA9IGZhbHNlO1xuICAgIGxldCBpc19sYXN0X2VsZW0gPSBmYWxzZTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiBpc19sYXN0X2VsZW0gPSB0cnVlO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9ICgpID0+IGlzX2xhc3RfZWxlbSA9IGlzX2RvbmUgPSB0cnVlO1xuICAgIHdoaWxlICgkZWxtLmxlbmd0aCkge1xuICAgICAgICBsZXQgYXR0cnMgPSAkZWxtLmF0dHIoYHNkY18ke2V2X3R5cGV9YCk7XG4gICAgICAgIGlmIChhdHRycyAmJiBjaGVja0lmRXZlbnRGaXRzKGV2X3R5cGUsIGV2ZW50LCAkZWxtWzBdKSkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGVsbSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGF0dHJzLnNwbGl0KCcgJykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGF0dHI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRyb2xsZXJbYXR0cl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdHRyID09PSAnc3RyaW5nJyAmJiBhdHRyLnN0YXJ0c1dpdGgoJ3RoaXMuZXZlbnRfJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyLmdldEV2ZW50cygpW2V2X3R5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJbYXR0ci5zbGljZSgndGhpcy5ldmVudF8nLmxlbmd0aCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyLmNhbGwoY29udHJvbGxlciwgJGVsbSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc19sYXN0X2VsZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlclxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc19kb25lKSByZXR1cm47XG4gICAgICAgICRlbG0gPSAkZWxtLnBhcmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiB7cmVzOiB0cnVlfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdEV2ZW50cygpIHtcbiAgICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICAgIFNURF9FVkVOVF9MSVNULmZvckVhY2goZXZfdHlwZSA9PiB7XG4gICAgICAgICR3aW5kb3cub2ZmKGV2X3R5cGUpLm9uKGV2X3R5cGUsIHdpbmRvd0V2ZW50SGFuZGxlcik7XG4gICAgfSk7XG59XG5cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udHJvbGxlckV2ZW50cyhjb250cm9sbGVyKSB7XG5cbiAgICBpZiAoY29udHJvbGxlci5faXNFdmVudHNTZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IGNvbnRyb2xsZXIuZ2V0RXZlbnRzKCk7XG4gICAgZm9yIChsZXQgZXZfdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldl90eXBlKSkge1xuICAgICAgICAgICAgbGV0IGV2ZW50TGlzdCA9IGV2ZW50c1tldl90eXBlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGRvbVNlbGVjdG9yIGluIGV2ZW50TGlzdCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudExpc3QuaGFzT3duUHJvcGVydHkoZG9tU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZmluZChkb21TZWxlY3RvcikuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgJGVsZW1lbnRzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVudF9saXN0ID0gJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnRfbGlzdCkgZXZlbnRfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBldmVudF9saXN0ID0gZXZlbnRfbGlzdC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3X2tleSA9IGB0aGlzLmV2ZW50XyR7ZG9tU2VsZWN0b3J9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudF9saXN0LmluZGV4T2YobmV3X2tleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdC5wdXNoKG5ld19rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50cy5hdHRyKGBzZGNfJHtldl90eXBlfWAsIGV2ZW50X2xpc3Quam9pbignICcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUT0RPOiBJcyBpdCBuZWVkZWRcbiAgICAvL2NvbnRyb2xsZXIuX2lzRXZlbnRzU2V0ID0gdHJ1ZTtcbn0iXSwibmFtZXMiOlsiZ2V0Q29udHJvbGxlciIsIlNURF9FVkVOVF9CTEFDS19MSVNUIiwiU1REX0VWRU5UX0xJU1QiLCJPYmplY3QiLCJrZXlzIiwid2luZG93IiwiZmlsdGVyIiwia2V5IiwidGVzdCIsImluY2x1ZGVzIiwibWFwIiwieCIsInNsaWNlIiwiY2hlY2tJZkV2ZW50Rml0cyIsImV2X3R5cGUiLCJlIiwidGFyZ2V0IiwiZWxlbWVudFVuZGVyTW91c2UiLCJkb2N1bWVudCIsImVsZW1lbnRGcm9tUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsImNvbnRhaW5zIiwid2luZG93RXZlbnRIYW5kbGVyIiwiZXZlbnQiLCJ0eXBlIiwiaGFzT3duUHJvcGVydHkiLCJuYW1lc3BhY2UiLCJsZW5ndGgiLCIkZWxtIiwiJCIsImNvbnRyb2xsZXIiLCJpc19kb25lIiwiaXNfbGFzdF9lbGVtIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwiYXR0cnMiLCJhdHRyIiwic3BsaXQiLCJmb3JFYWNoIiwiaGFuZGxlciIsInN0YXJ0c1dpdGgiLCJnZXRFdmVudHMiLCJjYWxsIiwiX3BhcmVudENvbnRyb2xsZXIiLCJwYXJlbnQiLCJyZXMiLCJpbml0RXZlbnRzIiwiJHdpbmRvdyIsIm9mZiIsIm9uIiwic2V0Q29udHJvbGxlckV2ZW50cyIsIl9pc0V2ZW50c1NldCIsImV2ZW50cyIsImV2ZW50TGlzdCIsImRvbVNlbGVjdG9yIiwiZmluZCIsImVhY2giLCIkZWxlbWVudHMiLCJldmVudF9saXN0IiwibmV3X2tleSIsImluZGV4T2YiLCJwdXNoIiwiam9pbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n\n}");
48
48
 
49
49
  /***/ }),
50
50
 
@@ -54,7 +54,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
54
54
  \********************************************/
55
55
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
56
56
 
57
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ allOff: () => (/* binding */ allOff),\n/* harmony export */ on: () => (/* binding */ on),\n/* harmony export */ setEvent: () => (/* binding */ setEvent),\n/* harmony export */ trigger: () => (/* binding */ trigger)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n/**\n * A list of handler (controller) for the registered events.\n * @type {{}}\n */\nlet handlerList = {};\n\n/**\n * eventList is a map connection the event to a responsing function name.\n * @type {{}}\n */\nlet eventList = {};\n\n/**\n * on is a function to register a controller to a event. The controller has to\n * implement the the handler function. The handler functions by default has the same\n * name as the event. You can use the app.events.setEvent function to register a\n * event with a different named function.\n *\n * @param {string} name - the event name String\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction on(name, controller) {\n setEvent(name);\n if (!eventList.hasOwnProperty(name)) {\n return console.log('No event: ' + name, controller);\n }\n let funcName = eventList[name];\n if (!controller[funcName]) {\n return console.log('No event handler: ' + name, controller);\n }\n handlerList[name].push(controller);\n}\n\n/**\n * setEvent allows you to register a event with a function with a different\n * name as the event.\n *\n * @param {string} name - event name\n * @param {string} functionName - function name\n */\nfunction setEvent(name, functionName) {\n if (!functionName) {\n functionName = name;\n }\n if (!eventList[name]) {\n eventList[name] = functionName;\n handlerList[name] = [];\n }\n}\n\n/**\n * allOff is to remove all events of the controller instance\n * ! important before destroying the instance.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction allOff(controller) {\n for (let eventName in handlerList) {\n if (handlerList.hasOwnProperty(eventName)) {\n for (let i = handlerList[eventName].length; i >= 0; i--) {\n if (controller === handlerList[eventName][i]) {\n handlerList[eventName].splice(i, 1);\n }\n }\n }\n }\n}\n\n/**\n * trigger triggers the event. The handler function of all registered\n * controller gets called. The returned Promise returns a list with all\n * returned values.\n *\n * @param {string} name - event name\n * @returns {Promise<object>} - waits to return all return values of the handler\n */\nfunction trigger(name) {\n let args = Array.apply(null, arguments);\n name = args.shift();\n if (!handlerList.hasOwnProperty(name) || !eventList.hasOwnProperty(name)) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let handler = handlerList[name];\n let funcName = eventList[name];\n let list = [];\n for (let i = 0; i < handler.length; i++) {\n let return_val = handler[i][funcName].apply(handler[i], args);\n if (typeof return_val !== \"undefined\") {\n list.push(return_val);\n }\n }\n return Promise.all(list);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsR0FBR1MsT0FBTyxDQUFDUixNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3JDLElBQUlXLFVBQVUsR0FBR0YsT0FBTyxDQUFDVCxDQUFDLENBQUMsQ0FBQ0wsUUFBUSxDQUFDLENBQUNXLEtBQUssQ0FBQ0csT0FBTyxDQUFDVCxDQUFDLENBQUMsRUFBRUksSUFBSSxDQUFDO0lBQzdELElBQUksT0FBT08sVUFBVSxLQUFLLFdBQVcsRUFBRTtNQUNuQ0QsSUFBSSxDQUFDZCxJQUFJLENBQUNlLFVBQVUsQ0FBQztJQUN6QjtFQUNKO0VBRUEsT0FBT0MsT0FBTyxDQUFDQyxHQUFHLENBQUNILElBQUksQ0FBQztBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzPzhiODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwcm9taXNlRHVtbXlGYWN0b3J5fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuXG4vKipcbiAqIEEgbGlzdCBvZiBoYW5kbGVyIChjb250cm9sbGVyKSBmb3IgdGhlIHJlZ2lzdGVyZWQgZXZlbnRzLlxuICogQHR5cGUge3t9fVxuICovXG5sZXQgaGFuZGxlckxpc3QgPSB7fTtcblxuLyoqXG4gKiBldmVudExpc3QgaXMgYSBtYXAgY29ubmVjdGlvbiB0aGUgZXZlbnQgdG8gYSByZXNwb25zaW5nIGZ1bmN0aW9uIG5hbWUuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBldmVudExpc3QgPSB7fTtcblxuLyoqXG4gKiBvbiBpcyBhIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGEgY29udHJvbGxlciB0byBhIGV2ZW50LiBUaGUgY29udHJvbGxlciBoYXMgdG9cbiAqIGltcGxlbWVudCB0aGUgdGhlIGhhbmRsZXIgZnVuY3Rpb24uIFRoZSBoYW5kbGVyIGZ1bmN0aW9ucyBieSBkZWZhdWx0IGhhcyB0aGUgc2FtZVxuICogbmFtZSBhcyB0aGUgZXZlbnQuIFlvdSBjYW4gdXNlIHRoZSBhcHAuZXZlbnRzLnNldEV2ZW50IGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGFcbiAqIGV2ZW50IHdpdGggYSBkaWZmZXJlbnQgbmFtZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSB0aGUgZXZlbnQgbmFtZSBTdHJpbmdcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSAgYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbihuYW1lLCBjb250cm9sbGVyKSB7XG4gICAgc2V0RXZlbnQobmFtZSk7XG4gICAgaWYgKCFldmVudExpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdObyBldmVudDogJyArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIGxldCBmdW5jTmFtZSA9IGV2ZW50TGlzdFtuYW1lXTtcbiAgICBpZiAoIWNvbnRyb2xsZXJbZnVuY05hbWVdKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmxvZygnTm8gZXZlbnQgaGFuZGxlcjogJyArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIGhhbmRsZXJMaXN0W25hbWVdLnB1c2goY29udHJvbGxlcik7XG59XG5cbi8qKlxuICogc2V0RXZlbnQgYWxsb3dzIHlvdSB0byByZWdpc3RlciBhIGV2ZW50IHdpdGggYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50XG4gKiBuYW1lIGFzIHRoZSBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUgLSBmdW5jdGlvbiBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFdmVudChuYW1lLCBmdW5jdGlvbk5hbWUpIHtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgICBmdW5jdGlvbk5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIGlmICghZXZlbnRMaXN0W25hbWVdKSB7XG4gICAgICAgIGV2ZW50TGlzdFtuYW1lXSA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgICAgaGFuZGxlckxpc3RbbmFtZV0gPSBbXTtcbiAgICB9XG59XG5cbi8qKlxuICogYWxsT2ZmIGlzIHRvIHJlbW92ZSBhbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sbGVyIGluc3RhbmNlXG4gKiAhIGltcG9ydGFudCBiZWZvcmUgZGVzdHJveWluZyB0aGUgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsT2ZmKGNvbnRyb2xsZXIpIHtcbiAgICBmb3IgKGxldCBldmVudE5hbWUgaW4gaGFuZGxlckxpc3QpIHtcbiAgICAgICAgaWYgKGhhbmRsZXJMaXN0Lmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBoYW5kbGVyTGlzdFtldmVudE5hbWVdLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PT0gaGFuZGxlckxpc3RbZXZlbnROYW1lXVtpXSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTGlzdFtldmVudE5hbWVdLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogdHJpZ2dlciB0cmlnZ2VycyB0aGUgZXZlbnQuIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIG9mIGFsbCByZWdpc3RlcmVkXG4gKiBjb250cm9sbGVyIGdldHMgY2FsbGVkLiBUaGUgcmV0dXJuZWQgUHJvbWlzZSByZXR1cm5zIGEgbGlzdCB3aXRoIGFsbFxuICogcmV0dXJuZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnQgbmFtZVxuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gLSB3YWl0cyB0byByZXR1cm4gYWxsIHJldHVybiB2YWx1ZXMgb2YgdGhlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXIobmFtZSkge1xuICAgIGxldCBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBuYW1lID0gYXJncy5zaGlmdCgpO1xuICAgIGlmKCFoYW5kbGVyTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlRHVtbXlGYWN0b3J5KCk7XG4gICAgfVxuICAgIGxldCBoYW5kbGVyID0gaGFuZGxlckxpc3RbbmFtZV07XG4gICAgbGV0IGZ1bmNOYW1lID0gZXZlbnRMaXN0W25hbWVdO1xuXG4gICAgbGV0IGxpc3QgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcmV0dXJuX3ZhbCA9IGhhbmRsZXJbaV1bZnVuY05hbWVdLmFwcGx5KGhhbmRsZXJbaV0sIGFyZ3MpO1xuICAgICAgICBpZiAodHlwZW9mIHJldHVybl92YWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGxpc3QucHVzaChyZXR1cm5fdmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChsaXN0KTtcbn0iXSwibmFtZXMiOlsicHJvbWlzZUR1bW15RmFjdG9yeSIsImhhbmRsZXJMaXN0IiwiZXZlbnRMaXN0Iiwib24iLCJuYW1lIiwiY29udHJvbGxlciIsInNldEV2ZW50IiwiaGFzT3duUHJvcGVydHkiLCJjb25zb2xlIiwibG9nIiwiZnVuY05hbWUiLCJwdXNoIiwiZnVuY3Rpb25OYW1lIiwiYWxsT2ZmIiwiZXZlbnROYW1lIiwiaSIsImxlbmd0aCIsInNwbGljZSIsInRyaWdnZXIiLCJhcmdzIiwiQXJyYXkiLCJhcHBseSIsImFyZ3VtZW50cyIsInNoaWZ0IiwiaGFuZGxlciIsImxpc3QiLCJyZXR1cm5fdmFsIiwiUHJvbWlzZSIsImFsbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_events.js\n");
57
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ allOff: () => (/* binding */ allOff),\n/* harmony export */ on: () => (/* binding */ on),\n/* harmony export */ setEvent: () => (/* binding */ setEvent),\n/* harmony export */ trigger: () => (/* binding */ trigger)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n/**\n * A list of handler (controller) for the registered events.\n * @type {{}}\n */\nlet handlerList = {};\n\n/**\n * eventList is a map connection the event to a responsing function name.\n * @type {{}}\n */\nlet eventList = {};\n\n/**\n * on is a function to register a controller to a event. The controller has to\n * implement the the handler function. The handler functions by default has the same\n * name as the event. You can use the app.events.setEvent function to register a\n * event with a different named function.\n *\n * @param {string} name - the event name String\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction on(name, controller) {\n setEvent(name);\n if (!eventList.hasOwnProperty(name)) {\n return console.log('No event: ' + name, controller);\n }\n let funcName = eventList[name];\n if (!controller[funcName]) {\n return console.log('No event handler: ' + name, controller);\n }\n handlerList[name].push(controller);\n}\n\n/**\n * setEvent allows you to register a event with a function with a different\n * name as the event.\n *\n * @param {string} name - event name\n * @param {string} functionName - function name\n */\nfunction setEvent(name, functionName) {\n if (!functionName) {\n functionName = name;\n }\n if (!eventList[name]) {\n eventList[name] = functionName;\n handlerList[name] = [];\n }\n}\n\n/**\n * allOff is to remove all events of the controller instance\n * ! important before destroying the instance.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction allOff(controller) {\n for (let eventName in handlerList) {\n if (handlerList.hasOwnProperty(eventName)) {\n for (let i = handlerList[eventName].length; i >= 0; i--) {\n if (controller === handlerList[eventName][i]) {\n handlerList[eventName].splice(i, 1);\n }\n }\n }\n }\n}\n\n/**\n * trigger triggers the event. The handler function of all registered\n * controller gets called. The returned Promise returns a list with all\n * returned values.\n *\n * @param {string} name - event name\n * @returns {Promise<object>} - waits to return all return values of the handler\n */\nfunction trigger(name) {\n let args = Array.apply(null, arguments);\n name = args.shift();\n if (!handlerList.hasOwnProperty(name) || !eventList.hasOwnProperty(name)) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let handler = handlerList[name];\n let funcName = eventList[name];\n let list = [];\n for (let i = 0; i < handler.length; i++) {\n let return_val = handler[i][funcName].apply(handler[i], args);\n if (typeof return_val !== \"undefined\") {\n list.push(return_val);\n }\n }\n return Promise.all(list);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsR0FBR1MsT0FBTyxDQUFDUixNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3JDLElBQUlXLFVBQVUsR0FBR0YsT0FBTyxDQUFDVCxDQUFDLENBQUMsQ0FBQ0wsUUFBUSxDQUFDLENBQUNXLEtBQUssQ0FBQ0csT0FBTyxDQUFDVCxDQUFDLENBQUMsRUFBRUksSUFBSSxDQUFDO0lBQzdELElBQUksT0FBT08sVUFBVSxLQUFLLFdBQVcsRUFBRTtNQUNuQ0QsSUFBSSxDQUFDZCxJQUFJLENBQUNlLFVBQVUsQ0FBQztJQUN6QjtFQUNKO0VBRUEsT0FBT0MsT0FBTyxDQUFDQyxHQUFHLENBQUNILElBQUksQ0FBQztBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzPzhiODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwcm9taXNlRHVtbXlGYWN0b3J5fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuXG4vKipcbiAqIEEgbGlzdCBvZiBoYW5kbGVyIChjb250cm9sbGVyKSBmb3IgdGhlIHJlZ2lzdGVyZWQgZXZlbnRzLlxuICogQHR5cGUge3t9fVxuICovXG5sZXQgaGFuZGxlckxpc3QgPSB7fTtcblxuLyoqXG4gKiBldmVudExpc3QgaXMgYSBtYXAgY29ubmVjdGlvbiB0aGUgZXZlbnQgdG8gYSByZXNwb25zaW5nIGZ1bmN0aW9uIG5hbWUuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBldmVudExpc3QgPSB7fTtcblxuLyoqXG4gKiBvbiBpcyBhIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGEgY29udHJvbGxlciB0byBhIGV2ZW50LiBUaGUgY29udHJvbGxlciBoYXMgdG9cbiAqIGltcGxlbWVudCB0aGUgdGhlIGhhbmRsZXIgZnVuY3Rpb24uIFRoZSBoYW5kbGVyIGZ1bmN0aW9ucyBieSBkZWZhdWx0IGhhcyB0aGUgc2FtZVxuICogbmFtZSBhcyB0aGUgZXZlbnQuIFlvdSBjYW4gdXNlIHRoZSBhcHAuZXZlbnRzLnNldEV2ZW50IGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGFcbiAqIGV2ZW50IHdpdGggYSBkaWZmZXJlbnQgbmFtZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSB0aGUgZXZlbnQgbmFtZSBTdHJpbmdcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSAgYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbihuYW1lLCBjb250cm9sbGVyKSB7XG4gICAgc2V0RXZlbnQobmFtZSk7XG4gICAgaWYgKCFldmVudExpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdObyBldmVudDogJyArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIGxldCBmdW5jTmFtZSA9IGV2ZW50TGlzdFtuYW1lXTtcbiAgICBpZiAoIWNvbnRyb2xsZXJbZnVuY05hbWVdKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmxvZygnTm8gZXZlbnQgaGFuZGxlcjogJyArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIGhhbmRsZXJMaXN0W25hbWVdLnB1c2goY29udHJvbGxlcik7XG59XG5cbi8qKlxuICogc2V0RXZlbnQgYWxsb3dzIHlvdSB0byByZWdpc3RlciBhIGV2ZW50IHdpdGggYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50XG4gKiBuYW1lIGFzIHRoZSBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUgLSBmdW5jdGlvbiBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFdmVudChuYW1lLCBmdW5jdGlvbk5hbWUpIHtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgICBmdW5jdGlvbk5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIGlmICghZXZlbnRMaXN0W25hbWVdKSB7XG4gICAgICAgIGV2ZW50TGlzdFtuYW1lXSA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgICAgaGFuZGxlckxpc3RbbmFtZV0gPSBbXTtcbiAgICB9XG59XG5cbi8qKlxuICogYWxsT2ZmIGlzIHRvIHJlbW92ZSBhbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sbGVyIGluc3RhbmNlXG4gKiAhIGltcG9ydGFudCBiZWZvcmUgZGVzdHJveWluZyB0aGUgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsT2ZmKGNvbnRyb2xsZXIpIHtcbiAgICBmb3IgKGxldCBldmVudE5hbWUgaW4gaGFuZGxlckxpc3QpIHtcbiAgICAgICAgaWYgKGhhbmRsZXJMaXN0Lmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBoYW5kbGVyTGlzdFtldmVudE5hbWVdLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PT0gaGFuZGxlckxpc3RbZXZlbnROYW1lXVtpXSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTGlzdFtldmVudE5hbWVdLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogdHJpZ2dlciB0cmlnZ2VycyB0aGUgZXZlbnQuIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIG9mIGFsbCByZWdpc3RlcmVkXG4gKiBjb250cm9sbGVyIGdldHMgY2FsbGVkLiBUaGUgcmV0dXJuZWQgUHJvbWlzZSByZXR1cm5zIGEgbGlzdCB3aXRoIGFsbFxuICogcmV0dXJuZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnQgbmFtZVxuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gLSB3YWl0cyB0byByZXR1cm4gYWxsIHJldHVybiB2YWx1ZXMgb2YgdGhlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXIobmFtZSkge1xuICAgIGxldCBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBuYW1lID0gYXJncy5zaGlmdCgpO1xuICAgIGlmKCFoYW5kbGVyTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlRHVtbXlGYWN0b3J5KCk7XG4gICAgfVxuICAgIGxldCBoYW5kbGVyID0gaGFuZGxlckxpc3RbbmFtZV07XG4gICAgbGV0IGZ1bmNOYW1lID0gZXZlbnRMaXN0W25hbWVdO1xuXG4gICAgbGV0IGxpc3QgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcmV0dXJuX3ZhbCA9IGhhbmRsZXJbaV1bZnVuY05hbWVdLmFwcGx5KGhhbmRsZXJbaV0sIGFyZ3MpO1xuICAgICAgICBpZiAodHlwZW9mIHJldHVybl92YWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGxpc3QucHVzaChyZXR1cm5fdmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChsaXN0KTtcbn0iXSwibmFtZXMiOlsicHJvbWlzZUR1bW15RmFjdG9yeSIsImhhbmRsZXJMaXN0IiwiZXZlbnRMaXN0Iiwib24iLCJuYW1lIiwiY29udHJvbGxlciIsInNldEV2ZW50IiwiaGFzT3duUHJvcGVydHkiLCJjb25zb2xlIiwibG9nIiwiZnVuY05hbWUiLCJwdXNoIiwiZnVuY3Rpb25OYW1lIiwiYWxsT2ZmIiwiZXZlbnROYW1lIiwiaSIsImxlbmd0aCIsInNwbGljZSIsInRyaWdnZXIiLCJhcmdzIiwiQXJyYXkiLCJhcHBseSIsImFyZ3VtZW50cyIsInNoaWZ0IiwiaGFuZGxlciIsImxpc3QiLCJyZXR1cm5fdmFsIiwiUHJvbWlzZSIsImFsbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_events.js\n\n}");
58
58
 
59
59
  /***/ }),
60
60
 
@@ -64,7 +64,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
64
64
  \******************************************/
65
65
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
66
66
 
67
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n 'classname': 'class'\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === 'string') {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data('handler', element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith('on')) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass('_bind_to_update_handler _with_handler');\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return '';\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || '',\n LANGUAGE_CODE: window.LANGUAGE_CODE || 'en',\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || '0.0',\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n globalRootController: null,\n _isInit: false,\n _origin_trigger: null,\n _globalControllerClasses: [],\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n app.globalRootController = app.globalRootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n const $globalDiv = $('<div></div>');\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.forEach(tagName => {\n const ControllerClass = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][0];\n $globalDiv.append(`<${ControllerClass.prototype._tagName}></${ControllerClass.prototype._tagName}>`);\n });\n const {\n refreshProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(null, app.rootController);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $globalDiv, app.globalRootController, refreshProcess).then(() => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController, refreshProcess).then(res => {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n return res;\n });\n });\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, '');\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n app.register(Controller);\n let tagName = Controller.prototype._tagName;\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.push(tagName);\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, params, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || 'api';\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a['url-link']) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n window.location.href = a['url'];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container, controller);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n return app.reconcile(controller, $html);\n });\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n * @param {Object} process - Process object containing the refresh process\n */\n reconcile: (controller, $virtualNode, $realNode = null, process = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n $realNode = $realNode ?? controller.$container;\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(process, controller);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($virtualNode, controller, refreshProcess).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @return {Promise<void>}\n */\n refresh: ($dom, leafController) => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($dom, leafController);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUl3QjtBQU1EO0FBQ3NCO0FBUWhCO0FBQ3NEO0FBQzNDO0FBQ0E7QUFDZ0I7QUFFeEQsTUFBTXdCLGlCQUFpQixHQUFHO0VBQUMsV0FBVyxFQUFFO0FBQU8sQ0FBQztBQUVoRCxJQUFJQyxjQUFjLEdBQUcsU0FBQUEsQ0FBVUMsT0FBTyxFQUFFQyxLQUFLLEVBQUU7RUFDN0MsSUFBSUMsU0FBUztJQUFFQyxPQUFPLEdBQUcsS0FBSztFQUM5QixJQUFJLE9BQU9ILE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFDL0JFLFNBQVMsR0FBR0UsQ0FBQyxDQUFDQyxRQUFRLENBQUNDLGFBQWEsQ0FBQ04sT0FBTyxDQUFDLENBQUM7RUFDaEQsQ0FBQyxNQUFNO0lBQ0wsTUFBTU8sT0FBTyxHQUFHLFFBQVFQLE9BQU8sQ0FBQ1EsSUFBSSxFQUFFO0lBQ3RDTixTQUFTLEdBQUdFLENBQUMsQ0FBQ0MsUUFBUSxDQUFDQyxhQUFhLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDTCxTQUFTLENBQUNPLElBQUksQ0FBQyxTQUFTLEVBQUVULE9BQU8sQ0FBQztJQUNsQ0csT0FBTyxHQUFHLElBQUk7RUFDaEI7RUFHQSxJQUFJRixLQUFLLEVBQUU7SUFDVFMsTUFBTSxDQUFDQyxPQUFPLENBQUNWLEtBQUssQ0FBQyxDQUFDVyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxDQUFDLEVBQUVDLENBQUMsQ0FBQyxLQUFLO01BQ3hDLElBQUlELENBQUMsQ0FBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RCYixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNjLGdCQUFnQixDQUFDSCxDQUFDLENBQUNJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsRUFBRUosQ0FBQyxDQUFDO01BQ2hFLENBQUMsTUFBTTtRQUNMLElBQUloQixpQkFBaUIsQ0FBQ2UsQ0FBQyxDQUFDSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDdENMLENBQUMsR0FBR2YsaUJBQWlCLENBQUNlLENBQUMsQ0FBQ0ssV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4QztRQUNBaEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDaUIsWUFBWSxDQUFDTixDQUFDLEVBQUVDLENBQUMsQ0FBQztNQUNqQztJQUNGLENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBSVgsT0FBTyxFQUFFO0lBQ1hELFNBQVMsQ0FBQ2tCLFFBQVEsQ0FBQyx1Q0FBdUMsQ0FBQztFQUM3RDtFQUVBLE9BQU9sQixTQUFTO0FBQ2xCLENBQUM7QUFFRG1CLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHLFVBQVVmLE9BQU8sRUFBRU4sS0FBSyxFQUFFLEdBQUdzQixRQUFRLEVBQUU7RUFDckQsSUFBSSxDQUFDaEIsT0FBTyxFQUFFO0lBQ1osT0FBTyxFQUFFO0VBQ1g7RUFDQSxNQUFNTCxTQUFTLEdBQUdILGNBQWMsQ0FBQ1EsT0FBTyxFQUFFTixLQUFLLENBQUM7RUFDaEQsS0FBSyxNQUFNdUIsQ0FBQyxJQUFJRCxRQUFRLEVBQUU7SUFDeEJyQixTQUFTLENBQUN1QixNQUFNLENBQUNELENBQUMsQ0FBQztFQUNyQjtFQUNBLE9BQU90QixTQUFTO0FBRWxCLENBQUM7QUFFTSxJQUFJd0IsR0FBRyxHQUFHO0VBQ2ZDLFVBQVUsRUFBRU4sTUFBTSxDQUFDTSxVQUFVLElBQUksRUFBRTtFQUNuQ0MsYUFBYSxFQUFFUCxNQUFNLENBQUNPLGFBQWEsSUFBSSxJQUFJO0VBQzNDQyxLQUFLLEVBQUVSLE1BQU0sQ0FBQ1EsS0FBSyxJQUFJLEtBQUs7RUFDNUJDLE9BQU8sRUFBRVQsTUFBTSxDQUFDUyxPQUFPLElBQUksS0FBSztFQUNoQ0MsUUFBUSxFQUFFLEVBQUU7RUFDWjlDLE1BQU0sRUFBRUEsc0RBQU07RUFDZCtDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxvQkFBb0IsRUFBRSxJQUFJO0VBQzFCQyxPQUFPLEVBQUUsS0FBSztFQUNkQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsd0JBQXdCLEVBQUUsRUFBRTtFQUU1QkMsUUFBUSxFQUFFQSxDQUFBLEtBQU07SUFDZCxJQUFJLENBQUNYLEdBQUcsQ0FBQ1EsT0FBTyxFQUFFO01BQ2hCUixHQUFHLENBQUNRLE9BQU8sR0FBRyxJQUFJO01BQ2xCLElBQUksQ0FBQ1IsR0FBRyxDQUFDUyxlQUFlLEVBQUU7UUFDeEJULEdBQUcsQ0FBQ1MsZUFBZSxHQUFHL0IsQ0FBQyxDQUFDa0MsRUFBRSxDQUFDM0MsT0FBTztRQUNsQ1MsQ0FBQyxDQUFDa0MsRUFBRSxDQUFDM0MsT0FBTyxHQUFHLFVBQVU0QyxLQUFLLEVBQUU7VUFDOUIsTUFBTUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHQSxLQUFLLENBQUNJLElBQUksR0FBR0osS0FBSztVQUMxRSxJQUFJLENBQUMvQyw4REFBYyxDQUFDb0QsUUFBUSxDQUFDSixPQUFPLENBQUMsRUFBRTtZQUNyQ2hELDhEQUFjLENBQUNxRCxJQUFJLENBQUNMLE9BQU8sQ0FBQztZQUM1QnBDLENBQUMsQ0FBQ2lCLE1BQU0sQ0FBQyxDQUFDeUIsRUFBRSxDQUFDTixPQUFPLEVBQUUvQyxrRUFBa0IsQ0FBQztVQUMzQztVQUNBLE9BQU9pQyxHQUFHLENBQUNTLGVBQWUsQ0FBQ08sSUFBSSxDQUFDLElBQUksRUFBRUgsS0FBSyxDQUFDO1FBQzlDLENBQUM7UUFFRGIsR0FBRyxDQUFDcUIsWUFBWSxDQUFDLENBQUM7TUFDcEIsQ0FBQyxNQUFNO1FBQ0xsRCwwREFBSyxDQUFDLENBQUM7TUFDVDtNQUVBRCxnRUFBVyxDQUFDLENBQUM7TUFFYkwsOERBQVUsQ0FBQyxDQUFDO01BRVptQyxHQUFHLENBQUNNLGNBQWMsR0FBR04sR0FBRyxDQUFDTSxjQUFjLElBQUksSUFBSWhELHdEQUFXLENBQUMsQ0FBQztNQUM1RDBDLEdBQUcsQ0FBQ08sb0JBQW9CLEdBQUdQLEdBQUcsQ0FBQ08sb0JBQW9CLElBQUksSUFBSWpELHdEQUFXLENBQUMsQ0FBQztJQUMxRTtJQUVBMEMsR0FBRyxDQUFDSyxRQUFRLEdBQUc1QywyREFBTyxDQUFDLENBQUM7SUFFeEIsTUFBTTZELFVBQVUsR0FBRzVDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDbkNuQixzREFBTSxDQUFDMkIsT0FBTyxDQUFFTCxPQUFPLElBQUs7TUFDMUIsTUFBTTBDLGVBQWUsR0FBRy9ELDhEQUFjLENBQUNxQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbER5QyxVQUFVLENBQUN2QixNQUFNLENBQUMsSUFBSXdCLGVBQWUsQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLE1BQU1GLGVBQWUsQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLEdBQUcsQ0FBQztJQUN0RyxDQUFDLENBQUM7SUFFRixNQUFNO01BQUNDO0lBQWMsQ0FBQyxHQUFHOUQseUVBQXFCLENBQUMsSUFBSSxFQUFFb0MsR0FBRyxDQUFDTSxjQUFjLENBQUM7SUFFeEUsT0FBT3ZELDJFQUE2QixDQUFDaUQsR0FBRyxDQUFDSyxRQUFRLEVBQUVpQixVQUFVLEVBQUV0QixHQUFHLENBQUNPLG9CQUFvQixFQUFFbUIsY0FBYyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQ2xILE9BQU81RSwyRUFBNkIsQ0FBQ2lELEdBQUcsQ0FBQ0ssUUFBUSxFQUFFeEQsc0RBQU8sQ0FBQyxDQUFDLEVBQUVtRCxHQUFHLENBQUNNLGNBQWMsRUFBRW9CLGNBQWMsQ0FBQyxDQUFDQyxJQUFJLENBQUVDLEdBQUcsSUFBSztRQUM5R2pFLGtGQUE4QixDQUFDK0QsY0FBYyxDQUFDO1FBQzlDLE9BQU9FLEdBQUc7TUFDWixDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7RUFDSixDQUFDO0VBRURQLFlBQVksRUFBRUEsQ0FBQSxLQUFNO0lBQ2xCM0MsQ0FBQyxDQUFDa0MsRUFBRSxDQUFDaUIsV0FBVyxHQUFHLFVBQVVDLEtBQUssRUFBRTtNQUNsQyxPQUFPOUIsR0FBRyxDQUFDNkIsV0FBVyxDQUFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFb0QsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFDRHBELENBQUMsQ0FBQ2tDLEVBQUUsQ0FBQ21CLFNBQVMsR0FBRyxZQUFZO01BQzNCLE9BQU8vQixHQUFHLENBQUMrQixTQUFTLENBQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNEQSxDQUFDLENBQUNrQyxFQUFFLENBQUNvQixVQUFVLEdBQUcsWUFBWTtNQUM1QixPQUFPaEMsR0FBRyxDQUFDZ0MsVUFBVSxDQUFDdEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7RUFDSCxDQUFDO0VBRUR1RCxlQUFlLEVBQUdDLFVBQVUsSUFBSztJQUMvQixJQUFJckQsT0FBTyxHQUFHakMsaUVBQWtCLENBQUNzRixVQUFVLENBQUNwRCxJQUFJLENBQUM7SUFDakQsT0FBT0QsT0FBTyxDQUFDc0QsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7RUFDNUMsQ0FBQztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0VBQ0VDLGNBQWMsRUFBR0YsVUFBVSxJQUFLO0lBQzlCbEMsR0FBRyxDQUFDcUMsUUFBUSxDQUFDSCxVQUFVLENBQUM7SUFDeEIsSUFBSXJELE9BQU8sR0FBR3FELFVBQVUsQ0FBQ1YsU0FBUyxDQUFDQyxRQUFRO0lBQzNDbEUsc0RBQU0sQ0FBQzRELElBQUksQ0FBQ3RDLE9BQU8sQ0FBQztFQUN0QixDQUFDO0VBRUR6QixVQUFVLEVBQUVBLENBQUEsS0FBTTtJQUNoQkEsd0RBQVUsQ0FBQyxDQUFDO0VBQ2QsQ0FBQztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0VBQ0VpRixRQUFRLEVBQUdILFVBQVUsSUFBSztJQUN4QixJQUFJckQsT0FBTyxHQUFHbUIsR0FBRyxDQUFDaUMsZUFBZSxDQUFDQyxVQUFVLENBQUM7SUFDN0MxRSw4REFBYyxDQUFDcUIsT0FBTyxDQUFDLEdBQUcsQ0FBQ3FELFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDMUNBLFVBQVUsQ0FBQ1YsU0FBUyxDQUFDQyxRQUFRLEdBQUc1QyxPQUFPO0lBQ3ZDLE9BQU87TUFDTDtBQUNOO0FBQ0E7QUFDQTtNQUNNeUQsUUFBUSxFQUFFQSxDQUFDLEdBQUdDLE1BQU0sS0FBSztRQUN2QixLQUFLLElBQUlDLEtBQUssSUFBSUQsTUFBTSxFQUFFO1VBQ3hCLElBQUlFLFNBQVM7VUFDYixJQUFJLE9BQU9ELEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0JDLFNBQVMsR0FBRzdGLGlFQUFrQixDQUFDNEYsS0FBSyxDQUFDO1VBQ3ZDLENBQUMsTUFBTSxJQUFJQSxLQUFLLEVBQUU7WUFDaEJDLFNBQVMsR0FBR3pDLEdBQUcsQ0FBQ2lDLGVBQWUsQ0FBQ08sS0FBSyxDQUFDO1VBQ3hDO1VBQ0FoRiw4REFBYyxDQUFDcUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzQyxJQUFJLENBQUNzQixTQUFTLENBQUM7UUFDNUM7TUFDRjtJQUNGLENBQUM7RUFDSCxDQUFDO0VBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsSUFBSSxFQUFFQSxDQUFDQyxVQUFVLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxLQUFLO0lBQy9CLElBQUksQ0FBQ0EsSUFBSSxFQUFFO01BQ1RBLElBQUksR0FBRyxDQUFDLENBQUM7SUFDWDtJQUVBQSxJQUFJLENBQUM1QyxVQUFVLEdBQUdELEdBQUcsQ0FBQ0MsVUFBVTtJQUNoQyxPQUFPRCxHQUFHLENBQUM4QyxJQUFJLENBQUNILFVBQVUsRUFBRUMsR0FBRyxFQUFFRyxNQUFNLEVBQUVyRSxDQUFDLENBQUNnRSxJQUFJLENBQUM7RUFDbEQsQ0FBQztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VNLEdBQUcsRUFBRUEsQ0FBQ0wsVUFBVSxFQUFFQyxHQUFHLEVBQUVDLElBQUksS0FBSztJQUM5QixPQUFPN0MsR0FBRyxDQUFDOEMsSUFBSSxDQUFDSCxVQUFVLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFbkUsQ0FBQyxDQUFDc0UsR0FBRyxDQUFDO0VBQy9DLENBQUM7RUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VGLElBQUksRUFBRUEsQ0FBQ0gsVUFBVSxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRUksTUFBTSxLQUFLO0lBQ3ZDLElBQUksQ0FBQ0osSUFBSSxFQUFFO01BQ1RBLElBQUksR0FBRyxDQUFDLENBQUM7SUFDWDtJQUVBQSxJQUFJLENBQUN6QyxPQUFPLEdBQUdKLEdBQUcsQ0FBQ0ksT0FBTztJQUMxQnlDLElBQUksQ0FBQ0ssT0FBTyxHQUFHTCxJQUFJLENBQUNLLE9BQU8sSUFBSSxLQUFLO0lBRXBDLE1BQU1DLENBQUMsR0FBRyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDekMsT0FBT0wsTUFBTSxDQUFDTCxHQUFHLEVBQUVDLElBQUksQ0FBQyxDQUFDbEIsSUFBSSxDQUFDLENBQUM0QixDQUFDLEVBQUVDLENBQUMsRUFBRTFELENBQUMsS0FBSztRQUN6Q3VELE9BQU8sQ0FBQ0UsQ0FBQyxFQUFFQyxDQUFDLEVBQUUxRCxDQUFDLENBQUM7UUFDaEIsSUFBSXlELENBQUMsQ0FBQ0UsTUFBTSxLQUFLLFVBQVUsRUFBRTtVQUMzQnhGLHVEQUFPLENBQUMsV0FBVyxFQUFFc0YsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsTUFBTTtVQUNMSixDQUFDLENBQUN4QixJQUFJLENBQUMsTUFBTTtZQUNYM0IsR0FBRyxDQUFDM0MsT0FBTyxDQUFDc0YsVUFBVSxDQUFDZSxVQUFVLENBQUM7VUFDcEMsQ0FBQyxDQUFDO1FBQ0o7TUFDRixDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDTCxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBRUYsT0FBT0gsQ0FBQztFQUNWLENBQUM7RUFFRFMsdUJBQXVCLEVBQUVBLENBQUNqQixVQUFVLEVBQUVrQixJQUFJLEVBQUVqQixHQUFHLEVBQUVLLE1BQU0sS0FBSztJQUMxRCxJQUFJYSxRQUFRLEdBQUcsSUFBSUMsUUFBUSxDQUFDRixJQUFJLENBQUM7SUFDakMsTUFBTUcsVUFBVSxHQUFJVCxDQUFDLElBQUs7TUFDeEIsSUFBSUEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ2pCdEYsdURBQU8sQ0FBQyxXQUFXLEVBQUVzRixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDckMsQ0FBQyxNQUFNO1FBQ0w1RCxNQUFNLENBQUNzRSxRQUFRLENBQUNDLElBQUksR0FBR1gsQ0FBQyxDQUFDLEtBQUssQ0FBQztNQUNqQztJQUVGLENBQUM7SUFFRCxNQUFNSixDQUFDLEdBQUcsSUFBSUMsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3pDeEcsaUVBQWtCLENBQUNnSCxRQUFRLEVBQUdsQixHQUFHLElBQUlpQixJQUFJLENBQUNNLE1BQU0sRUFBSWxCLE1BQU0sSUFBSVksSUFBSSxDQUFDWixNQUFPLENBQUMsQ0FDeEV0QixJQUFJLENBQUMsQ0FBQzRCLENBQUMsRUFBRUMsQ0FBQyxFQUFFMUQsQ0FBQyxLQUFLO1FBQ2pCdUQsT0FBTyxDQUFDRSxDQUFDLEVBQUVDLENBQUMsRUFBRTFELENBQUMsQ0FBQztRQUNoQixJQUFJeUQsQ0FBQyxDQUFDRSxNQUFNLEtBQUssVUFBVSxFQUFFO1VBQzNCTyxVQUFVLENBQUNULENBQUMsQ0FBQztRQUNmLENBQUMsTUFBTTtVQUNMSixDQUFDLENBQUN4QixJQUFJLENBQUMsTUFBTTtZQUNYM0IsR0FBRyxDQUFDM0MsT0FBTyxDQUFDc0YsVUFBVSxDQUFDZSxVQUFVLEVBQUVmLFVBQVUsQ0FBQztVQUNoRCxDQUFDLENBQUM7UUFDSjtNQUNGLENBQUMsQ0FBQyxDQUNEZ0IsS0FBSyxDQUFDLENBQUNKLENBQUMsRUFBRUMsQ0FBQyxFQUFFMUQsQ0FBQyxLQUFLO1FBQ2xCLElBQUl5RCxDQUFDLENBQUNFLE1BQU0sS0FBSyxHQUFHLEVBQUU7VUFDcEJGLENBQUMsR0FBR0EsQ0FBQyxDQUFDYSxZQUFZO1VBQ2xCSixVQUFVLENBQUNULENBQUMsQ0FBQztVQUNiRixPQUFPLENBQUNFLENBQUMsRUFBRUMsQ0FBQyxFQUFFMUQsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsTUFBTTtVQUNMd0QsTUFBTSxDQUFDQyxDQUFDLEVBQUVDLENBQUMsRUFBRTFELENBQUMsQ0FBQztRQUNqQjtNQUNGLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLE9BQU9xRCxDQUFDO0VBRVYsQ0FBQztFQUVEa0IsVUFBVSxFQUFFQSxDQUFDUixJQUFJLEVBQUVqQixHQUFHLEVBQUVLLE1BQU0sS0FBSztJQUNqQyxJQUFJYSxRQUFRLEdBQUcsSUFBSUMsUUFBUSxDQUFDRixJQUFJLENBQUM7SUFDakMsT0FBTyxJQUFJVCxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDdEN4RyxpRUFBa0IsQ0FBQ2dILFFBQVEsRUFBR2xCLEdBQUcsSUFBSWlCLElBQUksQ0FBQ00sTUFBTSxFQUFJbEIsTUFBTSxJQUFJWSxJQUFJLENBQUNaLE1BQU8sQ0FBQyxDQUN4RXRCLElBQUksQ0FBQzBCLE9BQU8sQ0FBQyxDQUFDTSxLQUFLLENBQUNMLE1BQU0sQ0FBQztJQUNoQyxDQUFDLENBQUM7RUFDSixDQUFDO0VBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFbkcsYUFBYSxFQUFHMkUsS0FBSyxJQUFLM0UsMkRBQWEsQ0FBQzJFLEtBQUssQ0FBQztFQUU5QztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsU0FBUyxFQUFHRCxLQUFLLElBQUs7SUFDcEIsSUFBSXdDLFNBQVMsR0FBR3hDLEtBQUssQ0FBQ2pDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDeUUsU0FBUyxDQUFDQyxJQUFJLENBQUMsVUFBVUMsQ0FBQyxFQUFFbEcsT0FBTyxFQUFFO01BQ25DLElBQUltRyxRQUFRLEdBQUcvRixDQUFDLENBQUNKLE9BQU8sQ0FBQztNQUN6QjBCLEdBQUcsQ0FBQ2dDLFVBQVUsQ0FBQ3lDLFFBQVEsQ0FBQztJQUMxQixDQUFDLENBQUM7SUFFRixPQUFPM0MsS0FBSztFQUNkLENBQUM7RUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFRCxXQUFXLEVBQUVBLENBQUNDLEtBQUssRUFBRTRDLElBQUksS0FBSztJQUM1QkEsSUFBSSxDQUFDQyxZQUFZLENBQUM3QyxLQUFLLENBQUM7SUFDeEIsT0FBTzlCLEdBQUcsQ0FBQ2dDLFVBQVUsQ0FBQ0YsS0FBSyxDQUFDO0VBQzlCLENBQUM7RUFHRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0VFLFVBQVUsRUFBR0YsS0FBSyxJQUFLO0lBQ3JCQSxLQUFLLENBQUN5QyxJQUFJLENBQUMsWUFBWTtNQUNyQixJQUFJSyxLQUFLLEdBQUdsRyxDQUFDLENBQUMsSUFBSSxDQUFDO01BQ25CLElBQUlrRyxLQUFLLENBQUM3RixJQUFJLENBQUMsR0FBRzlCLDZEQUFtQixFQUFFLENBQUMsRUFBRTtRQUN4QzJILEtBQUssQ0FBQzdGLElBQUksQ0FBQyxHQUFHOUIsNkRBQW1CLEVBQUUsQ0FBQyxDQUFDNEgsTUFBTSxDQUFDLENBQUM7TUFDL0M7SUFDRixDQUFDLENBQUM7SUFFRi9DLEtBQUssQ0FBQ2dELElBQUksQ0FBQyxJQUFJNUgsMERBQWdCLEVBQUUsQ0FBQyxDQUFDcUgsSUFBSSxDQUFDLFlBQVk7TUFDbEQsTUFBTTVCLFVBQVUsR0FBR2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ0ssSUFBSSxDQUFDLEdBQUc5Qiw2REFBbUIsRUFBRSxDQUFDO01BQ3pEMEYsVUFBVSxJQUFJQSxVQUFVLENBQUNrQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFFRixPQUFPL0MsS0FBSyxDQUFDK0MsTUFBTSxDQUFDLENBQUM7RUFDdkIsQ0FBQztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRUUsZ0JBQWdCLEVBQUdwQyxVQUFVLElBQUs7SUFDaEMsT0FBTzNGLGtFQUFvQixDQUFDMkYsVUFBVSxDQUFDLENBQUNoQixJQUFJLENBQUVxRCxJQUFJLElBQUs7TUFDckQsSUFBSUMsS0FBSyxHQUFHdkcsQ0FBQyxDQUFDc0csSUFBSSxDQUFDO01BQ25CLE9BQU9oRixHQUFHLENBQUNoQyxTQUFTLENBQUMyRSxVQUFVLEVBQUVzQyxLQUFLLENBQUM7SUFDekMsQ0FBQyxDQUFDO0VBQ0osQ0FBQztFQUdEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VqSCxTQUFTLEVBQUVBLENBQUMyRSxVQUFVLEVBQUV1QyxZQUFZLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUVDLE9BQU8sR0FBRyxJQUFJLEtBQUs7SUFDekUsSUFBSSxDQUFDRCxTQUFTLEVBQUU7TUFDZCxJQUFJRSxLQUFLLEdBQUcxQyxVQUFVLENBQUNlLFVBQVUsQ0FBQzRCLEtBQUssQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDO01BQ2pERixLQUFLLENBQUN0RyxJQUFJLENBQUM5Qiw2REFBbUIsRUFBRSxJQUFJLENBQUM7TUFDckNvSSxLQUFLLENBQUNHLFdBQVcsQ0FBQ3RJLDBEQUFnQixDQUFDO01BQ25DbUksS0FBSyxDQUFDdEYsTUFBTSxDQUFDbUYsWUFBWSxDQUFDO01BQzFCQSxZQUFZLEdBQUdHLEtBQUs7SUFDdEI7SUFFQUYsU0FBUyxHQUFHQSxTQUFTLElBQUl4QyxVQUFVLENBQUNlLFVBQVU7SUFFOUMsTUFBTTtNQUFDaEMsY0FBYztNQUFFK0Q7SUFBZ0IsQ0FBQyxHQUFHN0gseUVBQXFCLENBQUN3SCxPQUFPLEVBQUV6QyxVQUFVLENBQUM7SUFFckYsT0FBT3RGLHFEQUFPLENBQUM2SCxZQUFZLEVBQUV2QyxVQUFVLEVBQUVqQixjQUFjLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDbEUzRCx1REFBUyxDQUFDa0gsWUFBWSxFQUFFQyxTQUFTLENBQUM7TUFDbEN6SCxpRUFBYSxDQUFDaUYsVUFBVSxDQUFDO01BQ3pCLElBQUksQ0FBQzhDLGdCQUFnQixFQUFFO1FBQ3JCOUgsa0ZBQThCLENBQUMrRCxjQUFjLENBQUM7TUFDaEQ7TUFDQSxPQUFPaUIsVUFBVTtJQUNuQixDQUFDLENBQUM7RUFFSixDQUFDO0VBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0V0RixPQUFPLEVBQUVBLENBQUNxSSxJQUFJLEVBQUVDLGNBQWMsS0FBSztJQUNqQyxPQUFPdEkscURBQU8sQ0FBQ3FJLElBQUksRUFBRUMsY0FBYyxDQUFDO0VBQ3RDO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcz8wOGZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgZ2V0Qm9keSxcbiAgdXBsb2FkRmlsZUZvcm1EYXRhLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICByZWxvYWRIVE1MQ29udHJvbGxlcixcbiAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVmcmVzaFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7XG4gIEdsb2JhbCxcbiAgY29udHJvbGxlckxpc3QsXG4gIHRhZ0xpc3QsXG4gIHJlc2V0Q2hpbGRyZW4sXG4gIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge2luaXRFdmVudHMsIFNURF9FVkVOVF9MSVNULCB3aW5kb3dFdmVudEhhbmRsZXJ9IGZyb20gXCIuL3NkY19kb21fZXZlbnRzLmpzXCI7XG5pbXBvcnQge3JlY29uY2lsZX0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHtpc0Nvbm5lY3RlZCwgY2xvc2V9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gIGxldCAkbmV3X2VsZW0sIGlzX3NlbGYgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICRuZXdfZWxlbSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGB0aGlzLiR7ZWxlbWVudC5uYW1lfWA7XG4gICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAkbmV3X2VsZW0uZGF0YSgnaGFuZGxlcicsIGVsZW1lbnQpO1xuICAgIGlzX3NlbGYgPSB0cnVlXG4gIH1cblxuXG4gIGlmIChwcm9wcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ29uJykpIHtcbiAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoUFJPUEVSVElFU19VUERBVEVbay50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIGsgPSBQUk9QRVJUSUVTX1VQREFURVtrLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNfc2VsZikge1xuICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICB9XG5cbiAgcmV0dXJuICRuZXdfZWxlbTtcbn1cblxud2luZG93LnNkY0RvbSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBwcm9wcywgLi4uY2hpbGRyZW4pIHtcbiAgaWYgKCF0YWdOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0ICRuZXdfZWxlbSA9IHNkY0RvbUZyYWdtZW50KHRhZ05hbWUsIHByb3BzKTtcbiAgZm9yIChjb25zdCBjIG9mIGNoaWxkcmVuKSB7XG4gICAgJG5ld19lbGVtLmFwcGVuZChjKTtcbiAgfVxuICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICBDU1JGX1RPS0VOOiB3aW5kb3cuQ1NSRl9UT0tFTiB8fCAnJyxcbiAgTEFOR1VBR0VfQ09ERTogd2luZG93LkxBTkdVQUdFX0NPREUgfHwgJ2VuJyxcbiAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgVkVSU0lPTjogd2luZG93LlZFUlNJT04gfHwgJzAuMCcsXG4gIHRhZ05hbWVzOiBbXSxcbiAgR2xvYmFsOiBHbG9iYWwsXG4gIHJvb3RDb250cm9sbGVyOiBudWxsLFxuICBnbG9iYWxSb290Q29udHJvbGxlcjogbnVsbCxcbiAgX2lzSW5pdDogZmFsc2UsXG4gIF9vcmlnaW5fdHJpZ2dlcjogbnVsbCxcbiAgX2dsb2JhbENvbnRyb2xsZXJDbGFzc2VzOiBbXSxcblxuICBpbml0X3NkYzogKCkgPT4ge1xuICAgIGlmICghYXBwLl9pc0luaXQpIHtcbiAgICAgIGFwcC5faXNJbml0ID0gdHJ1ZTtcbiAgICAgIGlmICghYXBwLl9vcmlnaW5fdHJpZ2dlcikge1xuICAgICAgICBhcHAuX29yaWdpbl90cmlnZ2VyID0gJC5mbi50cmlnZ2VyO1xuICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBldl90eXBlID0ge30uaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgXCJ0eXBlXCIpID8gZXZlbnQudHlwZSA6IGV2ZW50O1xuICAgICAgICAgIGlmICghU1REX0VWRU5UX0xJU1QuaW5jbHVkZXMoZXZfdHlwZSkpIHtcbiAgICAgICAgICAgIFNURF9FVkVOVF9MSVNULnB1c2goZXZfdHlwZSk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFwcC5fb3JpZ2luX3RyaWdnZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgIGFwcC5nbG9iYWxSb290Q29udHJvbGxlciA9IGFwcC5nbG9iYWxSb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICB9XG5cbiAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICBjb25zdCAkZ2xvYmFsRGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcbiAgICBHbG9iYWwuZm9yRWFjaCgodGFnTmFtZSkgPT4ge1xuICAgICAgY29uc3QgQ29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgICAkZ2xvYmFsRGl2LmFwcGVuZChgPCR7Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZS5fdGFnTmFtZX0+PC8ke0NvbnRyb2xsZXJDbGFzcy5wcm90b3R5cGUuX3RhZ05hbWV9PmApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qge3JlZnJlc2hQcm9jZXNzfSA9IHByZXBhcmVSZWZyZXNoUHJvY2VzcyhudWxsLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGdsb2JhbERpdiwgYXBwLmdsb2JhbFJvb3RDb250cm9sbGVyLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCBnZXRCb2R5KCksIGFwcC5yb290Q29udHJvbGxlciwgcmVmcmVzaFByb2Nlc3MpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocmVmcmVzaFByb2Nlc3MpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlSnF1ZXJ5OiAoKSA9PiB7XG4gICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgfVxuICAgICQuZm4uc2FmZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlRW1wdHkoJCh0aGlzKSk7XG4gICAgfVxuICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgcmV0dXJuIHRhZ05hbWUucmVwbGFjZSgvLWNvbnRyb2xsZXIkLywgJycpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3Rlckdsb2JhbDogKENvbnRyb2xsZXIpID0+IHtcbiAgICBhcHAucmVnaXN0ZXIoQ29udHJvbGxlcik7XG4gICAgbGV0IHRhZ05hbWUgPSBDb250cm9sbGVyLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICBHbG9iYWwucHVzaCh0YWdOYW1lKTtcbiAgfSxcblxuICBjbGVhbkNhY2hlOiAoKSA9PiB7XG4gICAgY2xlYW5DYWNoZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3RlcjogKENvbnRyb2xsZXIpID0+IHtcbiAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV0gPSBbQ29udHJvbGxlciwgW11dO1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lID0gdGFnTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAqL1xuICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XG4gICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1peGluID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBtaXhpbk5hbWUgPSBjYW1lbENhc2VUb1RhZ05hbWUobWl4aW4pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4pIHtcbiAgICAgICAgICAgIG1peGluTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcobWl4aW4pXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdLnB1c2gobWl4aW5OYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBwb3N0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICBhcmdzID0ge307XG4gICAgfVxuXG4gICAgYXJncy5DU1JGX1RPS0VOID0gYXBwLkNTUkZfVE9LRU47XG4gICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zLCAkLnBvc3QpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCAkLmdldCBvciAkLnBvc3RcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGFqYXg6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MsIG1ldGhvZCkgPT4ge1xuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gbWV0aG9kKHVybCwgYXJncykudGhlbigoYSwgYiwgYykgPT4ge1xuICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICBpZiAoYVsndXJsLWxpbmsnXSkge1xuICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYVsndXJsJ107XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGFwcC5yZWZyZXNoKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoYSwgYiwgYykgPT4ge1xuICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBhID0gYS5yZXNwb25zZUpTT047XG4gICAgICAgICAgICByZWRpcmVjdG9yKGEpO1xuICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGEsIGIsIGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcDtcblxuICB9LFxuXG4gIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICovXG4gIGdldENvbnRyb2xsZXI6ICgkZWxlbSkgPT4gZ2V0Q29udHJvbGxlcigkZWxlbSksXG5cbiAgLyoqXG4gICAqIHNhZmVFbXB0eSByZW1vdmVzIGFsbCBjb250ZW50IG9mIGEgZG9tXG4gICAqIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERPTSBjb250YWluZXIgdG8gYmUgZW1wdHllZFxuICAgKi9cbiAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICBsZXQgJGNoaWxkcmVuID0gJGVsZW0uY2hpbGRyZW4oKTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGFwcC5zYWZlUmVtb3ZlKCRlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogc2FmZVJlcGxhY2UgcmVtb3ZlcyBhbGwgY29udGVudCBvZiBhIGRvbVxuICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBET00gdG8gYmUgcmVwbGVhY2VkXG4gICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAqL1xuICBzYWZlUmVwbGFjZTogKCRlbGVtLCAkbmV3KSA9PiB7XG4gICAgJG5ldy5pbnNlcnRCZWZvcmUoJGVsZW0pO1xuICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gIH0sXG5cblxuICAvKipcbiAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERvbVxuICAgKi9cbiAgc2FmZVJlbW92ZTogKCRlbGVtKSA9PiB7XG4gICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAkdGhpcy5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCkucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkZWxlbS5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9ICQodGhpcykuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xuICAgICAgY29udHJvbGxlciAmJiBjb250cm9sbGVyLnJlbW92ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8alF1ZXJ5Pn1cbiAgICovXG4gIHJlbG9hZENvbnRyb2xsZXI6IChjb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgfSk7XG4gIH0sXG5cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJHZpcnR1YWxOb2RlXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkcmVhbE5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAgICovXG4gIHJlY29uY2lsZTogKGNvbnRyb2xsZXIsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlID0gbnVsbCwgcHJvY2VzcyA9IG51bGwpID0+IHtcbiAgICBpZiAoISRyZWFsTm9kZSkge1xuICAgICAgbGV0ICR0ZW1wID0gY29udHJvbGxlci4kY29udGFpbmVyLmNsb25lKCkuZW1wdHkoKTtcbiAgICAgICR0ZW1wLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICAkdGVtcC5yZW1vdmVDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgICAgICR0ZW1wLmFwcGVuZCgkdmlydHVhbE5vZGUpO1xuICAgICAgJHZpcnR1YWxOb2RlID0gJHRlbXA7XG4gICAgfVxuXG4gICAgJHJlYWxOb2RlID0gJHJlYWxOb2RlID8/IGNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHtyZWZyZXNoUHJvY2VzcywgaXNSdW5uaW5nUHJvY2Vzc30gPSBwcmVwYXJlUmVmcmVzaFByb2Nlc3MocHJvY2VzcywgY29udHJvbGxlcik7XG5cbiAgICByZXR1cm4gcmVmcmVzaCgkdmlydHVhbE5vZGUsIGNvbnRyb2xsZXIsIHJlZnJlc2hQcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSk7XG4gICAgICByZXNldENoaWxkcmVuKGNvbnRyb2xsZXIpO1xuICAgICAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgICAgIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaChyZWZyZXNoUHJvY2Vzcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgICB9KTtcblxuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJGRvbVxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBsZWFmQ29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcmVmcmVzaDogKCRkb20sIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlZnJlc2goJGRvbSwgbGVhZkNvbnRyb2xsZXIpO1xuICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJEQVRBX0NPTlRST0xMRVJfS0VZIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJjbGVhbkNhY2hlIiwicmVmcmVzaCIsIkFic3RyYWN0U0RDIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwicmVzZXRDaGlsZHJlbiIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsImluaXRFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsImdsb2JhbFJvb3RDb250cm9sbGVyIiwiX2lzSW5pdCIsIl9vcmlnaW5fdHJpZ2dlciIsIl9nbG9iYWxDb250cm9sbGVyQ2xhc3NlcyIsImluaXRfc2RjIiwiZm4iLCJldmVudCIsImV2X3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlIiwiaW5jbHVkZXMiLCJwdXNoIiwib24iLCJ1cGRhdGVKcXVlcnkiLCIkZ2xvYmFsRGl2IiwiQ29udHJvbGxlckNsYXNzIiwicHJvdG90eXBlIiwiX3RhZ05hbWUiLCJyZWZyZXNoUHJvY2VzcyIsInRoZW4iLCJyZXMiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJyZWdpc3RlciIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwiY29udHJvbGxlciIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImEiLCJiIiwic3RhdHVzIiwiJGNvbnRhaW5lciIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwicHJvY2VzcyIsIiR0ZW1wIiwiY2xvbmUiLCJlbXB0eSIsInJlbW92ZUNsYXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIiRkb20iLCJsZWFmQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n");
67
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n 'classname': 'class'\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === 'string') {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data('handler', element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith('on')) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass('_bind_to_update_handler _with_handler');\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return '';\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || '',\n LANGUAGE_CODE: window.LANGUAGE_CODE || 'en',\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || '0.0',\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n globalRootController: null,\n _isInit: false,\n _origin_trigger: null,\n _globalControllerClasses: [],\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n app.globalRootController = app.globalRootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n const $globalDiv = $('<div></div>');\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.forEach(tagName => {\n const ControllerClass = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][0];\n $globalDiv.append(`<${ControllerClass.prototype._tagName}></${ControllerClass.prototype._tagName}>`);\n });\n const {\n refreshProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(null, app.rootController);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $globalDiv, app.globalRootController, refreshProcess).then(() => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController, refreshProcess).then(res => {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n return res;\n });\n });\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, '');\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n app.register(Controller);\n let tagName = Controller.prototype._tagName;\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.push(tagName);\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, params, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || 'api';\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a['url-link']) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n window.location.href = a['url'];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container, controller);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n return app.reconcile(controller, $html);\n });\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n * @param {Object} process - Process object containing the refresh process\n */\n reconcile: (controller, $virtualNode, $realNode = null, process = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n $realNode = $realNode ?? controller.$container;\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(process, controller);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($virtualNode, controller, refreshProcess).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @return {Promise<void>}\n */\n refresh: ($dom, leafController) => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($dom, leafController);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPLEVBQUVBLENBQUNxSSxJQUFJLEVBQUVDLGNBQWMsS0FBSztJQUNqQyxPQUFPdEkscURBQU8sQ0FBQ3FJLElBQUksRUFBRUMsY0FBYyxDQUFDO0VBQ3RDO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcz8wOGZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgZ2V0Qm9keSxcbiAgdXBsb2FkRmlsZUZvcm1EYXRhLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICByZWxvYWRIVE1MQ29udHJvbGxlcixcbiAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVmcmVzaFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7XG4gIEdsb2JhbCxcbiAgY29udHJvbGxlckxpc3QsXG4gIHRhZ0xpc3QsXG4gIHJlc2V0Q2hpbGRyZW4sXG4gIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge2luaXRFdmVudHMsIFNURF9FVkVOVF9MSVNULCB3aW5kb3dFdmVudEhhbmRsZXJ9IGZyb20gXCIuL3NkY19kb21fZXZlbnRzLmpzXCI7XG5pbXBvcnQge3JlY29uY2lsZX0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHtpc0Nvbm5lY3RlZCwgY2xvc2V9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gIGxldCAkbmV3X2VsZW0sIGlzX3NlbGYgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICRuZXdfZWxlbSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGB0aGlzLiR7ZWxlbWVudC5uYW1lfWA7XG4gICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAkbmV3X2VsZW0uZGF0YSgnaGFuZGxlcicsIGVsZW1lbnQpO1xuICAgIGlzX3NlbGYgPSB0cnVlXG4gIH1cblxuXG4gIGlmIChwcm9wcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ29uJykpIHtcbiAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoUFJPUEVSVElFU19VUERBVEVbay50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIGsgPSBQUk9QRVJUSUVTX1VQREFURVtrLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNfc2VsZikge1xuICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICB9XG5cbiAgcmV0dXJuICRuZXdfZWxlbTtcbn1cblxud2luZG93LnNkY0RvbSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBwcm9wcywgLi4uY2hpbGRyZW4pIHtcbiAgaWYgKCF0YWdOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0ICRuZXdfZWxlbSA9IHNkY0RvbUZyYWdtZW50KHRhZ05hbWUsIHByb3BzKTtcbiAgZm9yIChjb25zdCBjIG9mIGNoaWxkcmVuKSB7XG4gICAgJG5ld19lbGVtLmFwcGVuZChjKTtcbiAgfVxuICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICBDU1JGX1RPS0VOOiB3aW5kb3cuQ1NSRl9UT0tFTiB8fCAnJyxcbiAgTEFOR1VBR0VfQ09ERTogd2luZG93LkxBTkdVQUdFX0NPREUgfHwgJ2VuJyxcbiAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgVkVSU0lPTjogd2luZG93LlZFUlNJT04gfHwgJzAuMCcsXG4gIHRhZ05hbWVzOiBbXSxcbiAgR2xvYmFsOiBHbG9iYWwsXG4gIHJvb3RDb250cm9sbGVyOiBudWxsLFxuICBnbG9iYWxSb290Q29udHJvbGxlcjogbnVsbCxcbiAgX2lzSW5pdDogZmFsc2UsXG4gIF9vcmlnaW5fdHJpZ2dlcjogbnVsbCxcbiAgX2dsb2JhbENvbnRyb2xsZXJDbGFzc2VzOiBbXSxcblxuICBpbml0X3NkYzogKCkgPT4ge1xuICAgIGlmICghYXBwLl9pc0luaXQpIHtcbiAgICAgIGFwcC5faXNJbml0ID0gdHJ1ZTtcbiAgICAgIGlmICghYXBwLl9vcmlnaW5fdHJpZ2dlcikge1xuICAgICAgICBhcHAuX29yaWdpbl90cmlnZ2VyID0gJC5mbi50cmlnZ2VyO1xuICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBldl90eXBlID0ge30uaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgXCJ0eXBlXCIpID8gZXZlbnQudHlwZSA6IGV2ZW50O1xuICAgICAgICAgIGlmICghU1REX0VWRU5UX0xJU1QuaW5jbHVkZXMoZXZfdHlwZSkpIHtcbiAgICAgICAgICAgIFNURF9FVkVOVF9MSVNULnB1c2goZXZfdHlwZSk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFwcC5fb3JpZ2luX3RyaWdnZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgIGFwcC5nbG9iYWxSb290Q29udHJvbGxlciA9IGFwcC5nbG9iYWxSb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICB9XG5cbiAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICBjb25zdCAkZ2xvYmFsRGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcbiAgICBHbG9iYWwuZm9yRWFjaCgodGFnTmFtZSkgPT4ge1xuICAgICAgY29uc3QgQ29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgICAkZ2xvYmFsRGl2LmFwcGVuZChgPCR7Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZS5fdGFnTmFtZX0+PC8ke0NvbnRyb2xsZXJDbGFzcy5wcm90b3R5cGUuX3RhZ05hbWV9PmApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qge3JlZnJlc2hQcm9jZXNzfSA9IHByZXBhcmVSZWZyZXNoUHJvY2VzcyhudWxsLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGdsb2JhbERpdiwgYXBwLmdsb2JhbFJvb3RDb250cm9sbGVyLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCBnZXRCb2R5KCksIGFwcC5yb290Q29udHJvbGxlciwgcmVmcmVzaFByb2Nlc3MpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocmVmcmVzaFByb2Nlc3MpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlSnF1ZXJ5OiAoKSA9PiB7XG4gICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgfVxuICAgICQuZm4uc2FmZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlRW1wdHkoJCh0aGlzKSk7XG4gICAgfVxuICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgcmV0dXJuIHRhZ05hbWUucmVwbGFjZSgvLWNvbnRyb2xsZXIkLywgJycpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3Rlckdsb2JhbDogKENvbnRyb2xsZXIpID0+IHtcbiAgICBhcHAucmVnaXN0ZXIoQ29udHJvbGxlcik7XG4gICAgbGV0IHRhZ05hbWUgPSBDb250cm9sbGVyLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICBHbG9iYWwucHVzaCh0YWdOYW1lKTtcbiAgfSxcblxuICBjbGVhbkNhY2hlOiAoKSA9PiB7XG4gICAgY2xlYW5DYWNoZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3RlcjogKENvbnRyb2xsZXIpID0+IHtcbiAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV0gPSBbQ29udHJvbGxlciwgW11dO1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lID0gdGFnTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAqL1xuICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XG4gICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1peGluID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBtaXhpbk5hbWUgPSBjYW1lbENhc2VUb1RhZ05hbWUobWl4aW4pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4pIHtcbiAgICAgICAgICAgIG1peGluTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcobWl4aW4pXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdLnB1c2gobWl4aW5OYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBwb3N0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICBhcmdzID0ge307XG4gICAgfVxuXG4gICAgYXJncy5DU1JGX1RPS0VOID0gYXBwLkNTUkZfVE9LRU47XG4gICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zLCAkLnBvc3QpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCAkLmdldCBvciAkLnBvc3RcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGFqYXg6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MsIG1ldGhvZCkgPT4ge1xuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gbWV0aG9kKHVybCwgYXJncykudGhlbigoYSwgYiwgYykgPT4ge1xuICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICBpZiAoYVsndXJsLWxpbmsnXSkge1xuICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYVsndXJsJ107XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGFwcC5yZWZyZXNoKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoYSwgYiwgYykgPT4ge1xuICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBhID0gYS5yZXNwb25zZUpTT047XG4gICAgICAgICAgICByZWRpcmVjdG9yKGEpO1xuICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGEsIGIsIGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcDtcblxuICB9LFxuXG4gIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICovXG4gIGdldENvbnRyb2xsZXI6ICgkZWxlbSkgPT4gZ2V0Q29udHJvbGxlcigkZWxlbSksXG5cbiAgLyoqXG4gICAqIHNhZmVFbXB0eSByZW1vdmVzIGFsbCBjb250ZW50IG9mIGEgZG9tXG4gICAqIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERPTSBjb250YWluZXIgdG8gYmUgZW1wdHllZFxuICAgKi9cbiAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICBsZXQgJGNoaWxkcmVuID0gJGVsZW0uY2hpbGRyZW4oKTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGFwcC5zYWZlUmVtb3ZlKCRlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogc2FmZVJlcGxhY2UgcmVtb3ZlcyBhbGwgY29udGVudCBvZiBhIGRvbVxuICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBET00gdG8gYmUgcmVwbGVhY2VkXG4gICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAqL1xuICBzYWZlUmVwbGFjZTogKCRlbGVtLCAkbmV3KSA9PiB7XG4gICAgJG5ldy5pbnNlcnRCZWZvcmUoJGVsZW0pO1xuICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gIH0sXG5cblxuICAvKipcbiAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERvbVxuICAgKi9cbiAgc2FmZVJlbW92ZTogKCRlbGVtKSA9PiB7XG4gICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAkdGhpcy5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCkucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkZWxlbS5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9ICQodGhpcykuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xuICAgICAgY29udHJvbGxlciAmJiBjb250cm9sbGVyLnJlbW92ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8alF1ZXJ5Pn1cbiAgICovXG4gIHJlbG9hZENvbnRyb2xsZXI6IChjb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgfSk7XG4gIH0sXG5cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJHZpcnR1YWxOb2RlXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkcmVhbE5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAgICovXG4gIHJlY29uY2lsZTogKGNvbnRyb2xsZXIsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlID0gbnVsbCwgcHJvY2VzcyA9IG51bGwpID0+IHtcbiAgICBpZiAoISRyZWFsTm9kZSkge1xuICAgICAgbGV0ICR0ZW1wID0gY29udHJvbGxlci4kY29udGFpbmVyLmNsb25lKCkuZW1wdHkoKTtcbiAgICAgICR0ZW1wLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICAkdGVtcC5yZW1vdmVDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgICAgICR0ZW1wLmFwcGVuZCgkdmlydHVhbE5vZGUpO1xuICAgICAgJHZpcnR1YWxOb2RlID0gJHRlbXA7XG4gICAgfVxuXG4gICAgJHJlYWxOb2RlID0gJHJlYWxOb2RlID8/IGNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHtyZWZyZXNoUHJvY2VzcywgaXNSdW5uaW5nUHJvY2Vzc30gPSBwcmVwYXJlUmVmcmVzaFByb2Nlc3MocHJvY2VzcywgY29udHJvbGxlcik7XG5cbiAgICByZXR1cm4gcmVmcmVzaCgkdmlydHVhbE5vZGUsIGNvbnRyb2xsZXIsIHJlZnJlc2hQcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSk7XG4gICAgICByZXNldENoaWxkcmVuKGNvbnRyb2xsZXIpO1xuICAgICAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgICAgIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaChyZWZyZXNoUHJvY2Vzcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgICB9KTtcblxuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJGRvbVxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBsZWFmQ29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcmVmcmVzaDogKCRkb20sIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlZnJlc2goJGRvbSwgbGVhZkNvbnRyb2xsZXIpO1xuICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJEQVRBX0NPTlRST0xMRVJfS0VZIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJjbGVhbkNhY2hlIiwicmVmcmVzaCIsIkFic3RyYWN0U0RDIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwicmVzZXRDaGlsZHJlbiIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsImluaXRFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsImdsb2JhbFJvb3RDb250cm9sbGVyIiwiX2lzSW5pdCIsIl9vcmlnaW5fdHJpZ2dlciIsIl9nbG9iYWxDb250cm9sbGVyQ2xhc3NlcyIsImluaXRfc2RjIiwiZm4iLCJldmVudCIsImV2X3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlIiwiaW5jbHVkZXMiLCJwdXNoIiwib24iLCJ1cGRhdGVKcXVlcnkiLCIkZ2xvYmFsRGl2IiwiQ29udHJvbGxlckNsYXNzIiwicHJvdG90eXBlIiwiX3RhZ05hbWUiLCJyZWZyZXNoUHJvY2VzcyIsInRoZW4iLCJyZXMiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJyZWdpc3RlciIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwiY29udHJvbGxlciIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImEiLCJiIiwic3RhdHVzIiwiJGNvbnRhaW5lciIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwicHJvY2VzcyIsIiR0ZW1wIiwiY2xvbmUiLCJlbXB0eSIsInJlbW92ZUNsYXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIiRkb20iLCJsZWFmQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n\n}");
68
68
 
69
69
  /***/ }),
70
70
 
@@ -74,7 +74,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
74
74
  \********************************************/
75
75
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
76
76
 
77
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getUrlParam: () => (/* binding */ getUrlParam),\n/* harmony export */ runOnInitWithParameter: () => (/* binding */ runOnInitWithParameter)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\n\nfunction getParamList(paramNameList, $element) {\n let returnList;\n if (!paramNameList) {\n paramNameList = [];\n }\n let data = $element.data();\n let restdata = {};\n for (let a in data) {\n if (data.hasOwnProperty(a) && a !== _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY && !paramNameList.includes(a)) {\n restdata[a] = data[a];\n }\n }\n returnList = [];\n for (let i = 0; i < paramNameList.length; i++) {\n let data_name = paramNameList[i];\n if (data.hasOwnProperty(data_name)) {\n returnList.push(data[data_name]);\n } else {\n returnList.push('undefined');\n }\n }\n returnList.push(restdata);\n return returnList;\n}\nfunction parseParamNameList(list, controller = null) {\n let values = [];\n for (let i = 0; i < list.length; i++) {\n let tempValue = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.checkIfParamNumberBoolOrString)(list[i], controller);\n values.push(tempValue);\n }\n return values;\n}\nfunction getDomTagParamsWithList(paramNameList, $element, controller = null) {\n let paramList = getParamList(paramNameList, $element);\n return parseParamNameList(paramList, controller);\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $element\n * @param applyController\n * @returns {boolean}\n */\nfunction reg_runOnInitWithParameter(controller, $element, applyController) {\n if (!controller) {\n return false;\n } else if (typeof controller.onInit !== 'function') {\n return false;\n }\n let paramNameList;\n if (typeof controller._on_init_params === 'function') {\n paramNameList = controller._on_init_params();\n } else {\n paramNameList = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getParamsNameOfFunction)(controller.onInit);\n }\n let initParams = getDomTagParamsWithList(paramNameList, $element, applyController._parentController);\n controller.onInit.apply(applyController, initParams);\n if (applyController === controller) {\n for (let mixinKey in controller._mixins) {\n reg_runOnInitWithParameter(controller._mixins[mixinKey], $element, applyController);\n }\n }\n}\nfunction runOnInitWithParameter($element, controller) {\n reg_runOnInitWithParameter(controller, $element, controller);\n}\nfunction getUrlParam(controller, $element) {\n return getDomTagParamsWithList(controller._urlParams, $element);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQ2pCLGFBQWEsRUFBRUMsUUFBUSxFQUFFbUIsZUFBZSxDQUFDSSxpQkFBaUIsQ0FBQztFQUNwR1YsVUFBVSxDQUFDTyxNQUFNLENBQUNJLEtBQUssQ0FBQ0wsZUFBZSxFQUFFRyxVQUFVLENBQUM7RUFDcEQsSUFBR0gsZUFBZSxLQUFLTixVQUFVLEVBQUU7SUFDL0IsS0FBSyxJQUFJWSxRQUFRLElBQUlaLFVBQVUsQ0FBQ2EsT0FBTyxFQUFFO01BQ3JDUiwwQkFBMEIsQ0FBQ0wsVUFBVSxDQUFDYSxPQUFPLENBQUNELFFBQVEsQ0FBQyxFQUFFekIsUUFBUSxFQUFFbUIsZUFBZSxDQUFDO0lBQ3ZGO0VBQ0o7QUFDSjtBQUVPLFNBQVNRLHNCQUFzQkEsQ0FBQzNCLFFBQVEsRUFBRWEsVUFBVSxFQUFFO0VBQ3pESywwQkFBMEIsQ0FBQ0wsVUFBVSxFQUFFYixRQUFRLEVBQUVhLFVBQVUsQ0FBQztBQUNoRTtBQUVPLFNBQVNlLFdBQVdBLENBQUNmLFVBQVUsRUFBRWIsUUFBUSxFQUFFO0VBQzlDLE9BQU9nQix1QkFBdUIsQ0FBQ0gsVUFBVSxDQUFDZ0IsVUFBVSxFQUFFN0IsUUFBUSxDQUFDO0FBQ25FIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19wYXJhbXMuanM/ZTRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldFBhcmFtc05hbWVPZkZ1bmN0aW9uLCBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmd9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtEQVRBX0NPTlRST0xMRVJfS0VZfSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5cblxuXG5mdW5jdGlvbiBnZXRQYXJhbUxpc3QocGFyYW1OYW1lTGlzdCwgJGVsZW1lbnQpIHtcbiAgICBsZXQgcmV0dXJuTGlzdDtcbiAgICBpZiAoIXBhcmFtTmFtZUxpc3QpIHtcbiAgICAgICAgcGFyYW1OYW1lTGlzdCA9IFtdO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gJGVsZW1lbnQuZGF0YSgpO1xuICAgIGxldCByZXN0ZGF0YSA9IHt9O1xuICAgIGZvcihsZXQgYSBpbiBkYXRhKSB7XG4gICAgICAgIGlmKGRhdGEuaGFzT3duUHJvcGVydHkoYSkgJiYgYSAhPT0gREFUQV9DT05UUk9MTEVSX0tFWSAmJiAhcGFyYW1OYW1lTGlzdC5pbmNsdWRlcyhhKSkge1xuICAgICAgICAgICAgcmVzdGRhdGFbYV0gPSBkYXRhW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuTGlzdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1OYW1lTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZGF0YV9uYW1lID0gcGFyYW1OYW1lTGlzdFtpXTtcblxuICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShkYXRhX25hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm5MaXN0LnB1c2goZGF0YVtkYXRhX25hbWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybkxpc3QucHVzaCgndW5kZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm5MaXN0LnB1c2gocmVzdGRhdGEpXG4gICAgcmV0dXJuIHJldHVybkxpc3Q7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1OYW1lTGlzdChsaXN0LCBjb250cm9sbGVyID0gbnVsbCkge1xuICAgIGxldCB2YWx1ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgdGVtcFZhbHVlID0gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKGxpc3RbaV0sIGNvbnRyb2xsZXIpO1xuICAgICAgICB2YWx1ZXMucHVzaCh0ZW1wVmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGdldERvbVRhZ1BhcmFtc1dpdGhMaXN0KHBhcmFtTmFtZUxpc3QsICRlbGVtZW50LCBjb250cm9sbGVyPW51bGwpIHtcbiAgICBsZXQgcGFyYW1MaXN0ID0gZ2V0UGFyYW1MaXN0KHBhcmFtTmFtZUxpc3QsICRlbGVtZW50KTtcbiAgICByZXR1cm4gcGFyc2VQYXJhbU5hbWVMaXN0KHBhcmFtTGlzdCwgY29udHJvbGxlcik7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIGFwcGx5Q29udHJvbGxlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIsICRlbGVtZW50LCBhcHBseUNvbnRyb2xsZXIpIHtcbiAgICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29udHJvbGxlci5vbkluaXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGxldCBwYXJhbU5hbWVMaXN0O1xuICAgIGlmKHR5cGVvZiBjb250cm9sbGVyLl9vbl9pbml0X3BhcmFtcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwYXJhbU5hbWVMaXN0ID0gY29udHJvbGxlci5fb25faW5pdF9wYXJhbXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVMaXN0ID0gZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24oY29udHJvbGxlci5vbkluaXQpO1xuICAgIH1cblxuXG4gICAgbGV0IGluaXRQYXJhbXMgPSBnZXREb21UYWdQYXJhbXNXaXRoTGlzdChwYXJhbU5hbWVMaXN0LCAkZWxlbWVudCwgYXBwbHlDb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLm9uSW5pdC5hcHBseShhcHBseUNvbnRyb2xsZXIsIGluaXRQYXJhbXMpO1xuICAgIGlmKGFwcGx5Q29udHJvbGxlciA9PT0gY29udHJvbGxlcikge1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiBjb250cm9sbGVyLl9taXhpbnMpIHtcbiAgICAgICAgICAgIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIuX21peGluc1ttaXhpbktleV0sICRlbGVtZW50LCBhcHBseUNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuT25Jbml0V2l0aFBhcmFtZXRlcigkZWxlbWVudCwgY29udHJvbGxlcikge1xuICAgIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIsICRlbGVtZW50LCBjb250cm9sbGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVybFBhcmFtKGNvbnRyb2xsZXIsICRlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldERvbVRhZ1BhcmFtc1dpdGhMaXN0KGNvbnRyb2xsZXIuX3VybFBhcmFtcywgJGVsZW1lbnQpO1xufSJdLCJuYW1lcyI6WyJnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbiIsImNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyIsIkRBVEFfQ09OVFJPTExFUl9LRVkiLCJnZXRQYXJhbUxpc3QiLCJwYXJhbU5hbWVMaXN0IiwiJGVsZW1lbnQiLCJyZXR1cm5MaXN0IiwiZGF0YSIsInJlc3RkYXRhIiwiYSIsImhhc093blByb3BlcnR5IiwiaW5jbHVkZXMiLCJpIiwibGVuZ3RoIiwiZGF0YV9uYW1lIiwicHVzaCIsInBhcnNlUGFyYW1OYW1lTGlzdCIsImxpc3QiLCJjb250cm9sbGVyIiwidmFsdWVzIiwidGVtcFZhbHVlIiwiZ2V0RG9tVGFnUGFyYW1zV2l0aExpc3QiLCJwYXJhbUxpc3QiLCJyZWdfcnVuT25Jbml0V2l0aFBhcmFtZXRlciIsImFwcGx5Q29udHJvbGxlciIsIm9uSW5pdCIsIl9vbl9pbml0X3BhcmFtcyIsImluaXRQYXJhbXMiLCJfcGFyZW50Q29udHJvbGxlciIsImFwcGx5IiwibWl4aW5LZXkiLCJfbWl4aW5zIiwicnVuT25Jbml0V2l0aFBhcmFtZXRlciIsImdldFVybFBhcmFtIiwiX3VybFBhcmFtcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_params.js\n");
77
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getUrlParam: () => (/* binding */ getUrlParam),\n/* harmony export */ prepareData: () => (/* binding */ prepareData),\n/* harmony export */ runOnInitWithParameter: () => (/* binding */ runOnInitWithParameter)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\n\nfunction prepareData(data, paramNameList = []) {\n const data_json_key = 'SDC_JSON_MODEL=[';\n return Object.fromEntries(Object.entries(data).filter(([key, element]) => {\n return key !== _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY && !paramNameList.includes(key);\n }).map(([key, element]) => {\n if (typeof element === 'string' && element.startsWith(data_json_key)) {\n try {\n const {\n pk,\n fields\n } = JSON.parse(element.slice(data_json_key.length, -1));\n return [key, {\n ...fields,\n id: pk,\n pk\n }];\n } catch {}\n }\n return [key, element];\n }));\n}\nfunction getParamList(paramNameList, $element) {\n let returnList;\n if (!paramNameList) {\n paramNameList = [];\n }\n let data = $element.data();\n let restData = prepareData(data, paramNameList);\n returnList = [];\n for (let i = 0; i < paramNameList.length; i++) {\n let data_name = paramNameList[i];\n if (data.hasOwnProperty(data_name)) {\n returnList.push(data[data_name]);\n } else {\n returnList.push('undefined');\n }\n }\n returnList.push(restData);\n return returnList;\n}\nfunction parseParamNameList(list, controller = null) {\n let values = [];\n for (let i = 0; i < list.length; i++) {\n let tempValue = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.checkIfParamNumberBoolOrString)(list[i], controller);\n values.push(tempValue);\n }\n return values;\n}\nfunction getDomTagParamsWithList(paramNameList, $element, controller = null) {\n let paramList = getParamList(paramNameList, $element);\n return parseParamNameList(paramList, controller);\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $element\n * @param applyController\n * @returns {boolean}\n */\nfunction reg_runOnInitWithParameter(controller, $element, applyController) {\n if (!controller) {\n return false;\n } else if (typeof controller.onInit !== 'function') {\n return false;\n }\n let paramNameList;\n if (typeof controller._on_init_params === 'function') {\n paramNameList = controller._on_init_params();\n } else {\n paramNameList = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getParamsNameOfFunction)(controller.onInit);\n }\n let initParams = getDomTagParamsWithList(paramNameList, $element, applyController._parentController);\n controller.onInit.apply(applyController, initParams);\n if (applyController === controller) {\n for (let mixinKey in controller._mixins) {\n reg_runOnInitWithParameter(controller._mixins[mixinKey], $element, applyController);\n }\n }\n}\nfunction runOnInitWithParameter($element, controller) {\n reg_runOnInitWithParameter(controller, $element, controller);\n}\nfunction getUrlParam(controller, $element) {\n return getDomTagParamsWithList(controller._urlParams, $element);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMzREssMEJBQTBCLENBQUNMLFVBQVUsRUFBRVQsUUFBUSxFQUFFUyxVQUFVLENBQUM7QUFDOUQ7QUFFTyxTQUFTZSxXQUFXQSxDQUFDZixVQUFVLEVBQUVULFFBQVEsRUFBRTtFQUNoRCxPQUFPWSx1QkFBdUIsQ0FBQ0gsVUFBVSxDQUFDZ0IsVUFBVSxFQUFFekIsUUFBUSxDQUFDO0FBQ2pFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19wYXJhbXMuanM/ZTRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldFBhcmFtc05hbWVPZkZ1bmN0aW9uLCBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmd9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtEQVRBX0NPTlRST0xMRVJfS0VZfSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRGF0YShkYXRhLCBwYXJhbU5hbWVMaXN0ID0gW10pIHtcbiAgY29uc3QgZGF0YV9qc29uX2tleSA9ICdTRENfSlNPTl9NT0RFTD1bJ1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGRhdGEpLmZpbHRlcigoW2tleSwgZWxlbWVudF0pID0+IHtcbiAgICAgIHJldHVybiBrZXkgIT09IERBVEFfQ09OVFJPTExFUl9LRVkgJiYgIXBhcmFtTmFtZUxpc3QuaW5jbHVkZXMoa2V5KTtcbiAgICB9KS5tYXAoKFtrZXksIGVsZW1lbnRdKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnICYmIGVsZW1lbnQuc3RhcnRzV2l0aChkYXRhX2pzb25fa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHtwaywgZmllbGRzfSA9IEpTT04ucGFyc2UoZWxlbWVudC5zbGljZShkYXRhX2pzb25fa2V5Lmxlbmd0aCwgLTEpKTtcbiAgICAgICAgICByZXR1cm4gW2tleSwge1xuICAgICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgICAgaWQ6IHBrLFxuICAgICAgICAgICAgcGtcbiAgICAgICAgICB9XTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBba2V5LCBlbGVtZW50XTtcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbUxpc3QocGFyYW1OYW1lTGlzdCwgJGVsZW1lbnQpIHtcbiAgbGV0IHJldHVybkxpc3Q7XG4gIGlmICghcGFyYW1OYW1lTGlzdCkge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBbXTtcbiAgfVxuXG4gIGxldCBkYXRhID0gJGVsZW1lbnQuZGF0YSgpO1xuICBsZXQgcmVzdERhdGEgPSBwcmVwYXJlRGF0YShkYXRhLCBwYXJhbU5hbWVMaXN0KTtcblxuICByZXR1cm5MaXN0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1OYW1lTGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGxldCBkYXRhX25hbWUgPSBwYXJhbU5hbWVMaXN0W2ldO1xuXG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoZGF0YV9uYW1lKSkge1xuICAgICAgcmV0dXJuTGlzdC5wdXNoKGRhdGFbZGF0YV9uYW1lXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkxpc3QucHVzaCgndW5kZWZpbmVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuTGlzdC5wdXNoKHJlc3REYXRhKVxuICByZXR1cm4gcmV0dXJuTGlzdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbU5hbWVMaXN0KGxpc3QsIGNvbnRyb2xsZXIgPSBudWxsKSB7XG4gIGxldCB2YWx1ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdGVtcFZhbHVlID0gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKGxpc3RbaV0sIGNvbnRyb2xsZXIpO1xuICAgIHZhbHVlcy5wdXNoKHRlbXBWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5mdW5jdGlvbiBnZXREb21UYWdQYXJhbXNXaXRoTGlzdChwYXJhbU5hbWVMaXN0LCAkZWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgbGV0IHBhcmFtTGlzdCA9IGdldFBhcmFtTGlzdChwYXJhbU5hbWVMaXN0LCAkZWxlbWVudCk7XG4gIHJldHVybiBwYXJzZVBhcmFtTmFtZUxpc3QocGFyYW1MaXN0LCBjb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50XG4gKiBAcGFyYW0gYXBwbHlDb250cm9sbGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmVnX3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoY29udHJvbGxlciwgJGVsZW1lbnQsIGFwcGx5Q29udHJvbGxlcikge1xuICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29udHJvbGxlci5vbkluaXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBsZXQgcGFyYW1OYW1lTGlzdDtcbiAgaWYgKHR5cGVvZiBjb250cm9sbGVyLl9vbl9pbml0X3BhcmFtcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBjb250cm9sbGVyLl9vbl9pbml0X3BhcmFtcygpO1xuICB9IGVsc2Uge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihjb250cm9sbGVyLm9uSW5pdCk7XG4gIH1cblxuXG4gIGxldCBpbml0UGFyYW1zID0gZ2V0RG9tVGFnUGFyYW1zV2l0aExpc3QocGFyYW1OYW1lTGlzdCwgJGVsZW1lbnQsIGFwcGx5Q29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlcik7XG4gIGNvbnRyb2xsZXIub25Jbml0LmFwcGx5KGFwcGx5Q29udHJvbGxlciwgaW5pdFBhcmFtcyk7XG4gIGlmIChhcHBseUNvbnRyb2xsZXIgPT09IGNvbnRyb2xsZXIpIHtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiBjb250cm9sbGVyLl9taXhpbnMpIHtcbiAgICAgIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIuX21peGluc1ttaXhpbktleV0sICRlbGVtZW50LCBhcHBseUNvbnRyb2xsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuT25Jbml0V2l0aFBhcmFtZXRlcigkZWxlbWVudCwgY29udHJvbGxlcikge1xuICByZWdfcnVuT25Jbml0V2l0aFBhcmFtZXRlcihjb250cm9sbGVyLCAkZWxlbWVudCwgY29udHJvbGxlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxQYXJhbShjb250cm9sbGVyLCAkZWxlbWVudCkge1xuICByZXR1cm4gZ2V0RG9tVGFnUGFyYW1zV2l0aExpc3QoY29udHJvbGxlci5fdXJsUGFyYW1zLCAkZWxlbWVudCk7XG59Il0sIm5hbWVzIjpbImdldFBhcmFtc05hbWVPZkZ1bmN0aW9uIiwiY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsInByZXBhcmVEYXRhIiwiZGF0YSIsInBhcmFtTmFtZUxpc3QiLCJkYXRhX2pzb25fa2V5IiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiZmlsdGVyIiwia2V5IiwiZWxlbWVudCIsImluY2x1ZGVzIiwibWFwIiwic3RhcnRzV2l0aCIsInBrIiwiZmllbGRzIiwiSlNPTiIsInBhcnNlIiwic2xpY2UiLCJsZW5ndGgiLCJpZCIsImdldFBhcmFtTGlzdCIsIiRlbGVtZW50IiwicmV0dXJuTGlzdCIsInJlc3REYXRhIiwiaSIsImRhdGFfbmFtZSIsImhhc093blByb3BlcnR5IiwicHVzaCIsInBhcnNlUGFyYW1OYW1lTGlzdCIsImxpc3QiLCJjb250cm9sbGVyIiwidmFsdWVzIiwidGVtcFZhbHVlIiwiZ2V0RG9tVGFnUGFyYW1zV2l0aExpc3QiLCJwYXJhbUxpc3QiLCJyZWdfcnVuT25Jbml0V2l0aFBhcmFtZXRlciIsImFwcGx5Q29udHJvbGxlciIsIm9uSW5pdCIsIl9vbl9pbml0X3BhcmFtcyIsImluaXRQYXJhbXMiLCJfcGFyZW50Q29udHJvbGxlciIsImFwcGx5IiwibWl4aW5LZXkiLCJfbWl4aW5zIiwicnVuT25Jbml0V2l0aFBhcmFtZXRlciIsImdldFVybFBhcmFtIiwiX3VybFBhcmFtcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_params.js\n\n}");
78
78
 
79
79
  /***/ }),
80
80
 
@@ -84,7 +84,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
84
84
  \*************************************************/
85
85
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
86
86
 
87
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nlet OPEN_REQUESTS = {};\nfunction callServer(app, controller, parsedContentUrl, funcName, args) {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketCallServer(app, controller, funcName, args);\n } else {\n return postCallServer(parsedContentUrl, funcName, args);\n }\n}\nfunction isConnected() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketIsConnected();\n } else {\n return Promise.resolve(true);\n }\n}\nfunction close() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n socketClose();\n }\n}\nfunction postCallServer(parsedContentUrl, funcName, args) {\n if (typeof args !== 'object' && Array.isArray(args) && args === null) {\n args = {\n 'arg0': args\n };\n }\n args = {\n 'data': JSON.stringify(args),\n '_sdc_func_name': funcName,\n '_method': 'sdc_server_call'\n };\n return $.post({\n url: parsedContentUrl,\n data: args,\n beforeSend: function (xhr, settings) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }).then(res => {\n const data = res['_return_data'];\n _handle_response(data);\n return data;\n }).catch(res => {\n const data = res.responseJSON;\n data.is_error = true;\n _handle_response(data);\n throw res;\n });\n}\nfunction socketCallServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: 'sdc_call',\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n _handle_response(data);\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error('SDC Socket closed unexpectedly');\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error('Socket encountered error: ', err.message, 'Closing socket');\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction _handle_response(data) {\n if (!data) {\n data = {};\n }\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type && data.type === 'sdc_recall') {\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === 'sdc_event') {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === 'sdc_redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('onNavLink', data.link);\n }\n }\n}\nfunction socketClose() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n}\nfunction socketIsConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0M7QUFDRTtBQUV4QyxJQUFJRSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJQyxhQUFhLEdBQUcsS0FBSztBQUN6QixJQUFJQyxVQUFVLEdBQUcsSUFBSTtBQUNyQixJQUFJQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRWYsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFQyxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUMxRSxJQUFJQyxNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9DLGdCQUFnQixDQUFDUCxHQUFHLEVBQUVDLFVBQVUsRUFBRUUsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDNUQsQ0FBQyxNQUFNO0lBQ0gsT0FBT0ksY0FBYyxDQUFDTixnQkFBZ0IsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDM0Q7QUFFSjtBQUVPLFNBQVNLLFdBQVdBLENBQUEsRUFBRztFQUMxQixJQUFJSixNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9JLGlCQUFpQixDQUFDLENBQUM7RUFDOUIsQ0FBQyxNQUFNO0lBQ0gsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ2hDO0FBQ0o7QUFFTyxTQUFTQyxLQUFLQSxDQUFBLEVBQUc7RUFDcEIsSUFBSVIsTUFBTSxDQUFDQywwQkFBMEIsRUFBRTtJQUNuQ1EsV0FBVyxDQUFDLENBQUM7RUFDakI7QUFDSjtBQUVBLFNBQVNOLGNBQWNBLENBQUNOLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUN0RCxJQUFHLE9BQU9BLElBQUksS0FBSyxRQUFRLElBQUlXLEtBQUssQ0FBQ0MsT0FBTyxDQUFDWixJQUFJLENBQUMsSUFBSUEsSUFBSSxLQUFLLElBQUksRUFBRTtJQUNqRUEsSUFBSSxHQUFHO01B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LElBQUksQ0FBQ3VDLElBQUksS0FBSyxjQUFjLEVBQUU7TUFDbERuRSx1REFBTyxDQUFDLFdBQVcsRUFBRTRCLElBQUksQ0FBQ3lDLElBQUksQ0FBQztJQUNuQztFQUNKO0FBQ0o7QUFFQSxTQUFTakQsV0FBV0EsQ0FBQSxFQUFHO0VBQ25CLElBQUluQixZQUFZLEVBQUU7SUFDZEEsWUFBWSxHQUFHLEtBQUs7SUFDcEIsSUFBSTtNQUNBRSxVQUFVLENBQUNnQixLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsT0FBT2dDLENBQUMsRUFBRSxDQUVaO0VBRUo7QUFDSjtBQUVBLFNBQVNuQyxpQkFBaUJBLENBQUEsRUFBRztFQUV6QixPQUFPLElBQUlDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzVCLElBQUlqQixZQUFZLEVBQUU7TUFDZCxPQUFPaUIsT0FBTyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxNQUFNLElBQUloQixhQUFhLEVBQUU7TUFDdEIwRCxVQUFVLENBQUMsTUFBTTtRQUNiN0MsV0FBVyxDQUFDLENBQUMsQ0FBQ21CLElBQUksQ0FBQyxNQUFNO1VBQ3JCaEIsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUM7TUFDTixDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ1gsQ0FBQyxNQUFNO01BQ0gsT0FBT0EsT0FBTyxDQUFDMkIsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5QjtFQUNKLENBQUMsQ0FBQztBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19zZXJ2ZXJfY2FsbC5qcz9jM2UzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsXG5sZXQgT1BFTl9SRVFVRVNUUyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKSB7XG4gICAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgICAgICByZXR1cm4gc29ja2V0Q2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIGZ1bmNOYW1lLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcG9zdENhbGxTZXJ2ZXIocGFyc2VkQ29udGVudFVybCwgZnVuY05hbWUsIGFyZ3MpO1xuICAgIH1cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25uZWN0ZWQoKSB7XG4gICAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgICAgICByZXR1cm4gc29ja2V0SXNDb25uZWN0ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICAgICAgc29ja2V0Q2xvc2UoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RDYWxsU2VydmVyKHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKSB7XG4gICAgaWYodHlwZW9mIGFyZ3MgIT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncyA9PT0gbnVsbCkge1xuICAgICAgICBhcmdzID0geydhcmcwJzogYXJnc31cbiAgICB9XG4gICAgYXJncyA9IHtcbiAgICAgICAgJ2RhdGEnOiBKU09OLnN0cmluZ2lmeShhcmdzKSxcbiAgICAgICAgJ19zZGNfZnVuY19uYW1lJzogZnVuY05hbWUsICdfbWV0aG9kJzogJ3NkY19zZXJ2ZXJfY2FsbCdcbiAgICB9XG4gICAgcmV0dXJuICQucG9zdCh7XG4gICAgICAgIHVybDogcGFyc2VkQ29udGVudFVybCxcbiAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiWC1DU1JGVG9rZW5cIiwgd2luZG93LkNTUkZfVE9LRU4pO1xuICAgICAgICB9XG4gICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXNbJ19yZXR1cm5fZGF0YSddO1xuICAgICAgICBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXMucmVzcG9uc2VKU09OO1xuICAgICAgICBkYXRhLmlzX2Vycm9yID0gdHJ1ZTtcbiAgICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgICAgdGhyb3cgcmVzO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzb2NrZXRDYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcblxuICAgIGxldCBpZCA9IHV1aWR2NCgpO1xuICAgIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgIFNEQ19TT0NLRVQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ3NkY19jYWxsJyxcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgT1BFTl9SRVFVRVNUU1tpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2Nvbm5lY3QoKSB7XG4gICAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTRENfU09DS0VUID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIFNEQ19TT0NLRVQub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU0RDIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE9QRU5fUkVRVUVTVFMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbMV0oe30pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2tleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9jb25uZWN0KCk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTb2NrZXQgZW5jb3VudGVyZWQgZXJyb3I6ICcsIGVyci5tZXNzYWdlLCAnQ2xvc2luZyBzb2NrZXQnKTtcbiAgICAgICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBTRENfU09DS0VULmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIFNEQ19TT0NLRVQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgSVNfQ09OTkVDVEVEID0gdHJ1ZTtcbiAgICAgICAgICAgIElTX0NPTk5FQ1RJTkcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIF9oYW5kbGVfcmVzcG9uc2UoZGF0YSkge1xuICAgIGlmKCFkYXRhKSB7XG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmlkICYmIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMV0oZGF0YS5kYXRhIHx8IG51bGwpO1xuICAgICAgICAgICAgZGVsZXRlIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSAmJiBkYXRhLnR5cGUgPT09ICdzZGNfcmVjYWxsJykge1xuICAgICAgICAgICAgaWYgKGRhdGEuaWQgJiYgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXSkge1xuICAgICAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMF0oZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX2V2ZW50Jykge1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gZGF0YS5ldmVudDtcbiAgICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoZXZlbnQsIGRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgZGF0YS5saW5rKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ja2V0Q2xvc2UoKSB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ja2V0SXNDb25uZWN0ZWQoKSB7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChJU19DT05ORUNUSU5HKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoX2Nvbm5lY3QoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0iXSwibmFtZXMiOlsidXVpZHY0IiwidHJpZ2dlciIsIklTX0NPTk5FQ1RFRCIsIklTX0NPTk5FQ1RJTkciLCJTRENfU09DS0VUIiwiT1BFTl9SRVFVRVNUUyIsImNhbGxTZXJ2ZXIiLCJhcHAiLCJjb250cm9sbGVyIiwicGFyc2VkQ29udGVudFVybCIsImZ1bmNOYW1lIiwiYXJncyIsIndpbmRvdyIsIlNFUlZFUl9DQUxMX1ZJQV9XRUJfU09DS0VUIiwic29ja2V0Q2FsbFNlcnZlciIsInBvc3RDYWxsU2VydmVyIiwiaXNDb25uZWN0ZWQiLCJzb2NrZXRJc0Nvbm5lY3RlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2xvc2UiLCJzb2NrZXRDbG9zZSIsIkFycmF5IiwiaXNBcnJheSIsIkpTT04iLCJzdHJpbmdpZnkiLCIkIiwicG9zdCIsInVybCIsImRhdGEiLCJiZWZvcmVTZW5kIiwieGhyIiwic2V0dGluZ3MiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiQ1NSRl9UT0tFTiIsInRoZW4iLCJyZXMiLCJfaGFuZGxlX3Jlc3BvbnNlIiwiY2F0Y2giLCJyZXNwb25zZUpTT04iLCJpc19lcnJvciIsImlkIiwic2VuZCIsImV2ZW50IiwiZnVuY3Rpb24iLCJyZWplY3QiLCJfY29ubmVjdCIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiZSIsInBhcnNlIiwib25jbG9zZSIsImNvbnNvbGUiLCJlcnJvciIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsInNldFRpbWVvdXQiLCJvbmVycm9yIiwiZXJyIiwibWVzc2FnZSIsIm9ub3BlbiIsIm1zZyIsImhlYWRlciIsInR5cGUiLCJwYXlsb2FkIiwibGluayJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_server_call.js\n");
87
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nlet OPEN_REQUESTS = {};\nfunction callServer(app, controller, parsedContentUrl, funcName, args) {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketCallServer(app, controller, funcName, args);\n } else {\n return postCallServer(parsedContentUrl, funcName, args);\n }\n}\nfunction isConnected() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketIsConnected();\n } else {\n return Promise.resolve(true);\n }\n}\nfunction close() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n socketClose();\n }\n}\nfunction postCallServer(parsedContentUrl, funcName, args) {\n if (typeof args !== 'object' && Array.isArray(args) && args === null) {\n args = {\n 'arg0': args\n };\n }\n args = {\n 'data': JSON.stringify(args),\n '_sdc_func_name': funcName,\n '_method': 'sdc_server_call'\n };\n return $.post({\n url: parsedContentUrl,\n data: args,\n beforeSend: function (xhr, settings) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }).then(res => {\n const data = res['_return_data'];\n _handle_response(data);\n return data;\n }).catch(res => {\n const data = res.responseJSON;\n data.is_error = true;\n _handle_response(data);\n throw res;\n });\n}\nfunction socketCallServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: 'sdc_call',\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n _handle_response(data);\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error('SDC Socket closed unexpectedly');\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error('Socket encountered error: ', err.message, 'Closing socket');\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction _handle_response(data) {\n if (!data) {\n data = {};\n }\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type && data.type === 'sdc_recall') {\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === 'sdc_event') {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === 'sdc_redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('onNavLink', data.link);\n }\n }\n}\nfunction socketClose() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n}\nfunction socketIsConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0M7QUFDRTtBQUV4QyxJQUFJRSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJQyxhQUFhLEdBQUcsS0FBSztBQUN6QixJQUFJQyxVQUFVLEdBQUcsSUFBSTtBQUNyQixJQUFJQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRWYsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFQyxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUMxRSxJQUFJQyxNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9DLGdCQUFnQixDQUFDUCxHQUFHLEVBQUVDLFVBQVUsRUFBRUUsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDNUQsQ0FBQyxNQUFNO0lBQ0gsT0FBT0ksY0FBYyxDQUFDTixnQkFBZ0IsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDM0Q7QUFFSjtBQUVPLFNBQVNLLFdBQVdBLENBQUEsRUFBRztFQUMxQixJQUFJSixNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9JLGlCQUFpQixDQUFDLENBQUM7RUFDOUIsQ0FBQyxNQUFNO0lBQ0gsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ2hDO0FBQ0o7QUFFTyxTQUFTQyxLQUFLQSxDQUFBLEVBQUc7RUFDcEIsSUFBSVIsTUFBTSxDQUFDQywwQkFBMEIsRUFBRTtJQUNuQ1EsV0FBVyxDQUFDLENBQUM7RUFDakI7QUFDSjtBQUVBLFNBQVNOLGNBQWNBLENBQUNOLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUN0RCxJQUFHLE9BQU9BLElBQUksS0FBSyxRQUFRLElBQUlXLEtBQUssQ0FBQ0MsT0FBTyxDQUFDWixJQUFJLENBQUMsSUFBSUEsSUFBSSxLQUFLLElBQUksRUFBRTtJQUNqRUEsSUFBSSxHQUFHO01BQUMsTUFBTSxFQUFFQTtJQUFJLENBQUM7RUFDekI7RUFDQUEsSUFBSSxHQUFHO0lBQ0gsTUFBTSxFQUFFYSxJQUFJLENBQUNDLFNBQVMsQ0FBQ2QsSUFBSSxDQUFDO0lBQzVCLGdCQUFnQixFQUFFRCxRQUFRO0lBQUUsU0FBUyxFQUFFO0VBQzNDLENBQUM7RUFDRCxPQUFPZ0IsQ0FBQyxDQUFDQyxJQUFJLENBQUM7SUFDVkMsR0FBRyxFQUFFbkIsZ0JBQWdCO0lBQ3JCb0IsSUFBSSxFQUFFbEIsSUFBSTtJQUNWbUIsVUFBVSxFQUFFLFNBQUFBLENBQVVDLEdBQUcsRUFBRUMsUUFBUSxFQUFFO01BQ2pDRCxHQUFHLENBQUNFLGdCQUFnQixDQUFDLGFBQWEsRUFBRXJCLE1BQU0sQ0FBQ3NCLFVBQVUsQ0FBQztJQUMxRDtFQUNKLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUVDLEdBQUcsSUFBSztJQUNiLE1BQU1QLElBQUksR0FBR08sR0FBRyxDQUFDLGNBQWMsQ0FBQztJQUNoQ0MsZ0JBQWdCLENBQUNSLElBQUksQ0FBQztJQUN0QixPQUFPQSxJQUFJO0VBQ2YsQ0FBQyxDQUFDLENBQUNTLEtBQUssQ0FBRUYsR0FBRyxJQUFLO0lBQ2QsTUFBTVAsSUFBSSxHQUFHTyxHQUFHLENBQUNHLFlBQVk7SUFDN0JWLElBQUksQ0FBQ1csUUFBUSxHQUFHLElBQUk7SUFDcEJILGdCQUFnQixDQUFDUixJQUFJLENBQUM7SUFDdEIsTUFBTU8sR0FBRztFQUNiLENBQUMsQ0FBQztBQUNOO0FBRUEsU0FBU3RCLGdCQUFnQkEsQ0FBQ1AsR0FBRyxFQUFFQyxVQUFVLEVBQUVFLFFBQVEsRUFBRUMsSUFBSSxFQUFFO0VBRXZELElBQUk4QixFQUFFLEdBQUd6QyxxREFBTSxDQUFDLENBQUM7RUFDakJnQixXQUFXLENBQUMsQ0FBQyxDQUFDbUIsSUFBSSxDQUFDLE1BQU07SUFDckIvQixVQUFVLENBQUNzQyxJQUFJLENBQUNsQixJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUMzQmtCLEtBQUssRUFBRSxVQUFVO01BQ2pCRixFQUFFLEVBQUVBLEVBQUU7TUFDTmpDLFVBQVUsRUFBRUEsVUFBVTtNQUN0QkQsR0FBRyxFQUFFQSxHQUFHO01BQ1JxQyxRQUFRLEVBQUVsQyxRQUFRO01BQ2xCQyxJQUFJLEVBQUVBO0lBQ1YsQ0FBQyxDQUFDLENBQUM7RUFDUCxDQUFDLENBQUM7RUFFRixPQUFPLElBQUlPLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUUwQixNQUFNLEtBQUs7SUFDcEN4QyxhQUFhLENBQUNvQyxFQUFFLENBQUMsR0FBRyxDQUFDdEIsT0FBTyxFQUFFMEIsTUFBTSxDQUFDO0VBQ3pDLENBQUMsQ0FBQztBQUNOO0FBRUEsU0FBU0MsUUFBUUEsQ0FBQSxFQUFHO0VBQ2hCM0MsYUFBYSxHQUFHLElBQUk7RUFDcEIsT0FBTyxJQUFJZSxPQUFPLENBQUVDLE9BQU8sSUFBSztJQUM1QixJQUFJUCxNQUFNLENBQUNtQyxRQUFRLENBQUNDLFFBQVEsS0FBSyxRQUFRLEVBQUU7TUFDdkM1QyxVQUFVLEdBQUcsSUFBSTZDLFNBQVMsQ0FBQyxTQUFTckMsTUFBTSxDQUFDbUMsUUFBUSxDQUFDRyxJQUFJLGFBQWEsQ0FBQztJQUMxRSxDQUFDLE1BQU07TUFDSDlDLFVBQVUsR0FBRyxJQUFJNkMsU0FBUyxDQUFDLFFBQVFyQyxNQUFNLENBQUNtQyxRQUFRLENBQUNHLElBQUksYUFBYSxDQUFDO0lBQ3pFO0lBR0E5QyxVQUFVLENBQUMrQyxTQUFTLEdBQUcsVUFBVUMsQ0FBQyxFQUFFO01BQ2hDLElBQUl2QixJQUFJLEdBQUdMLElBQUksQ0FBQzZCLEtBQUssQ0FBQ0QsQ0FBQyxDQUFDdkIsSUFBSSxDQUFDO01BQzdCUSxnQkFBZ0IsQ0FBQ1IsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRHpCLFVBQVUsQ0FBQ2tELE9BQU8sR0FBRyxZQUFZO01BQzdCLElBQUlwRCxZQUFZLEVBQUU7UUFDZHFELE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLGdDQUFnQyxDQUFDO01BQ25EO01BQ0F0RCxZQUFZLEdBQUcsS0FBSztNQUNwQixLQUFLLE1BQU0sQ0FBQ3VELEdBQUcsRUFBRUMsS0FBSyxDQUFDLElBQUlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDdkQsYUFBYSxDQUFDLEVBQUU7UUFDdERxRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixPQUFPckQsYUFBYSxDQUFDb0QsR0FBRyxDQUFDO01BQzdCO01BRUFJLFVBQVUsQ0FBQyxNQUFNO1FBQ2JmLFFBQVEsQ0FBQyxDQUFDO01BQ2QsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUNaLENBQUM7SUFFRDFDLFVBQVUsQ0FBQzBELE9BQU8sR0FBRyxVQUFVQyxHQUFHLEVBQUU7TUFDaENSLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDRCQUE0QixFQUFFTyxHQUFHLENBQUNDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQztNQUMxRSxJQUFJOUQsWUFBWSxFQUFFO1FBQ2QsSUFBSTtVQUNBRSxVQUFVLENBQUNnQixLQUFLLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsT0FBT2dDLENBQUMsRUFBRSxDQUVaO01BQ0o7SUFDSixDQUFDO0lBRURoRCxVQUFVLENBQUM2RCxNQUFNLEdBQUcsWUFBWTtNQUM1Qi9ELFlBQVksR0FBRyxJQUFJO01BQ25CQyxhQUFhLEdBQUcsS0FBSztNQUNyQmdCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztFQUNMLENBQUMsQ0FBQztBQUNOO0FBRUEsU0FBU2tCLGdCQUFnQkEsQ0FBQ1IsSUFBSSxFQUFFO0VBQzVCLElBQUcsQ0FBQ0EsSUFBSSxFQUFFO0lBQ05BLElBQUksR0FBRyxDQUFDLENBQUM7RUFDYjtFQUNBLElBQUlBLElBQUksQ0FBQ1csUUFBUSxFQUFFO0lBQ2YsSUFBSVgsSUFBSSxDQUFDcUMsR0FBRyxJQUFJckMsSUFBSSxDQUFDc0MsTUFBTSxFQUFFO01BQ3pCbEUsdURBQU8sQ0FBQyxjQUFjLEVBQUU0QixJQUFJLENBQUNzQyxNQUFNLElBQUksRUFBRSxFQUFFdEMsSUFBSSxDQUFDcUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUM5RDtJQUNBLElBQUlyQyxJQUFJLENBQUNZLEVBQUUsSUFBSXBDLGFBQWEsQ0FBQ3dCLElBQUksQ0FBQ1ksRUFBRSxDQUFDLEVBQUU7TUFDbkNwQyxhQUFhLENBQUN3QixJQUFJLENBQUNZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDWixJQUFJLENBQUNBLElBQUksSUFBSSxJQUFJLENBQUM7TUFDNUMsT0FBT3hCLGFBQWEsQ0FBQ3dCLElBQUksQ0FBQ1ksRUFBRSxDQUFDO0lBQ2pDO0VBQ0osQ0FBQyxNQUFNO0lBQ0gsSUFBSVosSUFBSSxDQUFDcUMsR0FBRyxJQUFJckMsSUFBSSxDQUFDc0MsTUFBTSxFQUFFO01BQ3pCbEUsdURBQU8sQ0FBQyxTQUFTLEVBQUU0QixJQUFJLENBQUNzQyxNQUFNLElBQUksRUFBRSxFQUFFdEMsSUFBSSxDQUFDcUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUN6RDtJQUVBLElBQUlyQyxJQUFJLENBQUN1QyxJQUFJLElBQUl2QyxJQUFJLENBQUN1QyxJQUFJLEtBQUssWUFBWSxFQUFFO01BQ3pDLElBQUl2QyxJQUFJLENBQUNZLEVBQUUsSUFBSXBDLGFBQWEsQ0FBQ3dCLElBQUksQ0FBQ1ksRUFBRSxDQUFDLEVBQUU7UUFDbkNwQyxhQUFhLENBQUN3QixJQUFJLENBQUNZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDWixJQUFJLENBQUNBLElBQUksQ0FBQztRQUNwQyxPQUFPeEIsYUFBYSxDQUFDd0IsSUFBSSxDQUFDWSxFQUFFLENBQUM7TUFDakM7SUFDSixDQUFDLE1BQU0sSUFBSVosSUFBSSxDQUFDdUMsSUFBSSxJQUFJdkMsSUFBSSxDQUFDdUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtNQUMvQyxJQUFJekIsS0FBSyxHQUFHZCxJQUFJLENBQUNjLEtBQUs7TUFDdEIsSUFBSUEsS0FBSyxFQUFFO1FBQ1AxQyx1REFBTyxDQUFDMEMsS0FBSyxFQUFFZCxJQUFJLENBQUN3QyxPQUFPLENBQUM7TUFDaEM7SUFFSixDQUFDLE1BQU0sSUFBSXhDLElBQUksQ0FBQ3VDLElBQUksSUFBSXZDLElBQUksQ0FBQ3VDLElBQUksS0FBSyxjQUFjLEVBQUU7TUFDbERuRSx1REFBTyxDQUFDLFdBQVcsRUFBRTRCLElBQUksQ0FBQ3lDLElBQUksQ0FBQztJQUNuQztFQUNKO0FBQ0o7QUFFQSxTQUFTakQsV0FBV0EsQ0FBQSxFQUFHO0VBQ25CLElBQUluQixZQUFZLEVBQUU7SUFDZEEsWUFBWSxHQUFHLEtBQUs7SUFDcEIsSUFBSTtNQUNBRSxVQUFVLENBQUNnQixLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsT0FBT2dDLENBQUMsRUFBRSxDQUVaO0VBRUo7QUFDSjtBQUVBLFNBQVNuQyxpQkFBaUJBLENBQUEsRUFBRztFQUV6QixPQUFPLElBQUlDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzVCLElBQUlqQixZQUFZLEVBQUU7TUFDZCxPQUFPaUIsT0FBTyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxNQUFNLElBQUloQixhQUFhLEVBQUU7TUFDdEIwRCxVQUFVLENBQUMsTUFBTTtRQUNiN0MsV0FBVyxDQUFDLENBQUMsQ0FBQ21CLElBQUksQ0FBQyxNQUFNO1VBQ3JCaEIsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUM7TUFDTixDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ1gsQ0FBQyxNQUFNO01BQ0gsT0FBT0EsT0FBTyxDQUFDMkIsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5QjtFQUNKLENBQUMsQ0FBQztBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19zZXJ2ZXJfY2FsbC5qcz9jM2UzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsXG5sZXQgT1BFTl9SRVFVRVNUUyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKSB7XG4gICAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgICAgICByZXR1cm4gc29ja2V0Q2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIGZ1bmNOYW1lLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcG9zdENhbGxTZXJ2ZXIocGFyc2VkQ29udGVudFVybCwgZnVuY05hbWUsIGFyZ3MpO1xuICAgIH1cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25uZWN0ZWQoKSB7XG4gICAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgICAgICByZXR1cm4gc29ja2V0SXNDb25uZWN0ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICAgICAgc29ja2V0Q2xvc2UoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RDYWxsU2VydmVyKHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKSB7XG4gICAgaWYodHlwZW9mIGFyZ3MgIT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncyA9PT0gbnVsbCkge1xuICAgICAgICBhcmdzID0geydhcmcwJzogYXJnc31cbiAgICB9XG4gICAgYXJncyA9IHtcbiAgICAgICAgJ2RhdGEnOiBKU09OLnN0cmluZ2lmeShhcmdzKSxcbiAgICAgICAgJ19zZGNfZnVuY19uYW1lJzogZnVuY05hbWUsICdfbWV0aG9kJzogJ3NkY19zZXJ2ZXJfY2FsbCdcbiAgICB9XG4gICAgcmV0dXJuICQucG9zdCh7XG4gICAgICAgIHVybDogcGFyc2VkQ29udGVudFVybCxcbiAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiWC1DU1JGVG9rZW5cIiwgd2luZG93LkNTUkZfVE9LRU4pO1xuICAgICAgICB9XG4gICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXNbJ19yZXR1cm5fZGF0YSddO1xuICAgICAgICBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXMucmVzcG9uc2VKU09OO1xuICAgICAgICBkYXRhLmlzX2Vycm9yID0gdHJ1ZTtcbiAgICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgICAgdGhyb3cgcmVzO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzb2NrZXRDYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcblxuICAgIGxldCBpZCA9IHV1aWR2NCgpO1xuICAgIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgIFNEQ19TT0NLRVQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ3NkY19jYWxsJyxcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgT1BFTl9SRVFVRVNUU1tpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2Nvbm5lY3QoKSB7XG4gICAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTRENfU09DS0VUID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIFNEQ19TT0NLRVQub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU0RDIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE9QRU5fUkVRVUVTVFMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbMV0oe30pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2tleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9jb25uZWN0KCk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTb2NrZXQgZW5jb3VudGVyZWQgZXJyb3I6ICcsIGVyci5tZXNzYWdlLCAnQ2xvc2luZyBzb2NrZXQnKTtcbiAgICAgICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBTRENfU09DS0VULmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIFNEQ19TT0NLRVQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgSVNfQ09OTkVDVEVEID0gdHJ1ZTtcbiAgICAgICAgICAgIElTX0NPTk5FQ1RJTkcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIF9oYW5kbGVfcmVzcG9uc2UoZGF0YSkge1xuICAgIGlmKCFkYXRhKSB7XG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmlkICYmIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMV0oZGF0YS5kYXRhIHx8IG51bGwpO1xuICAgICAgICAgICAgZGVsZXRlIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSAmJiBkYXRhLnR5cGUgPT09ICdzZGNfcmVjYWxsJykge1xuICAgICAgICAgICAgaWYgKGRhdGEuaWQgJiYgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXSkge1xuICAgICAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMF0oZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX2V2ZW50Jykge1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gZGF0YS5ldmVudDtcbiAgICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoZXZlbnQsIGRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgZGF0YS5saW5rKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ja2V0Q2xvc2UoKSB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ja2V0SXNDb25uZWN0ZWQoKSB7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChJU19DT05ORUNUSU5HKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoX2Nvbm5lY3QoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0iXSwibmFtZXMiOlsidXVpZHY0IiwidHJpZ2dlciIsIklTX0NPTk5FQ1RFRCIsIklTX0NPTk5FQ1RJTkciLCJTRENfU09DS0VUIiwiT1BFTl9SRVFVRVNUUyIsImNhbGxTZXJ2ZXIiLCJhcHAiLCJjb250cm9sbGVyIiwicGFyc2VkQ29udGVudFVybCIsImZ1bmNOYW1lIiwiYXJncyIsIndpbmRvdyIsIlNFUlZFUl9DQUxMX1ZJQV9XRUJfU09DS0VUIiwic29ja2V0Q2FsbFNlcnZlciIsInBvc3RDYWxsU2VydmVyIiwiaXNDb25uZWN0ZWQiLCJzb2NrZXRJc0Nvbm5lY3RlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2xvc2UiLCJzb2NrZXRDbG9zZSIsIkFycmF5IiwiaXNBcnJheSIsIkpTT04iLCJzdHJpbmdpZnkiLCIkIiwicG9zdCIsInVybCIsImRhdGEiLCJiZWZvcmVTZW5kIiwieGhyIiwic2V0dGluZ3MiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiQ1NSRl9UT0tFTiIsInRoZW4iLCJyZXMiLCJfaGFuZGxlX3Jlc3BvbnNlIiwiY2F0Y2giLCJyZXNwb25zZUpTT04iLCJpc19lcnJvciIsImlkIiwic2VuZCIsImV2ZW50IiwiZnVuY3Rpb24iLCJyZWplY3QiLCJfY29ubmVjdCIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiZSIsInBhcnNlIiwib25jbG9zZSIsImNvbnNvbGUiLCJlcnJvciIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsInNldFRpbWVvdXQiLCJvbmVycm9yIiwiZXJyIiwibWVzc2FnZSIsIm9ub3BlbiIsIm1zZyIsImhlYWRlciIsInR5cGUiLCJwYXlsb2FkIiwibGluayJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_server_call.js\n\n}");
88
88
 
89
89
  /***/ }),
90
90
 
@@ -94,7 +94,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
94
94
  \********************************************/
95
95
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
96
96
 
97
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nclass SubModel {\n constructor(pk, model) {\n this.pk = pk;\n this._model = model;\n }\n\n /**\n * SDC Model Name\n * @param {string} model\n */\n set model(model) {\n this._model = model;\n }\n get model() {\n return this._model;\n }\n\n /**\n * Load the sub model.\n *\n * @param {AbstractSDC} controller\n * @returns {Model}\n */\n load(controller) {\n if (!this._model) {\n throw new TypeError(\"Model is not set!!\");\n }\n return controller.newModel(this._model, {\n pk: this.pk\n });\n }\n}\nconst ModelProxyHandler = {\n get(target, key) {\n const value = target[key] ?? undefined;\n if (value instanceof SubModel) {\n if (!value.pk && value.pk !== 0) {\n return null;\n }\n const newVal = new Number(value.pk);\n newVal.load = value.load.bind(value);\n return newVal;\n }\n return value;\n },\n set(target, key, value) {\n if (key in target) {\n const oldVal = target[key];\n if (oldVal instanceof SubModel) {\n if (value.hasOwnProperty('pk')) {\n oldVal.pk = value.pk;\n } else {\n oldVal.pk = value;\n }\n } else {\n target[key] = value;\n }\n } else {\n target[key] = value;\n }\n return true;\n }\n};\nfunction parse_hidden_inputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === 'true';\n } else if (value === 'undefined') {\n return undefined;\n } else if (value.toLowerCase() === 'none') {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\n this._onNoOpenRequests = [];\n this.values_list = [];\n this.values = {};\n this.model_name = model_name;\n this.model_query = model_query;\n this._is_connected = false;\n this._is_conneting_process = false;\n this._auto_reconnect = true;\n this.socket = null;\n this.open_request = {};\n this.on_update = () => {};\n this.on_create = () => {};\n this.form_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.values_list.length) {\n return {\n value: this.values_list[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n length() {\n return this.values_list.length;\n }\n byPk(pk) {\n if (pk !== null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let elem = this.values_list.find(elm => elm.pk === pk);\n if (!elem) {\n elem = new Proxy({\n pk: pk\n }, ModelProxyHandler);\n this.values_list.push(elem);\n }\n return elem;\n }\n return {\n pk: pk\n };\n }\n filter(model_query) {\n this.model_query = Object.assign({}, this.model_query, model_query);\n return this;\n }\n load() {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'load',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n listView(filter = {}, cb_resolve = null, cb_reject = null, template_context = {}) {\n let $div_list = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'list_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n filter,\n template_context\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n detailView(pk = null, cb_resolve = null, cb_reject = null, template_context = {}) {\n pk = pk ?? -1;\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let $div_list = $('<div class=\"container-fluid\">');\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n load_promise.then(() => {\n if (pk === -1) {\n pk = this.values_list[0].pk;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'detail_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk,\n template_context\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n syncModelToForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n let self = this;\n $forms.each(function () {\n if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\n } else {\n $(form_item).val(instance[name]);\n }\n }\n }\n });\n }\n syncForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n const self = this;\n let instances = [];\n $forms.each(function () {\n let $form = $(this);\n let pk = $form.data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'hidden') {\n instance[name] = parse_hidden_inputs($(form_item).val());\n } else if (form_item.type === 'checkbox') {\n instance[name] = form_item.checked;\n } else if (form_item.type === 'file') {\n instance[name] = form_item.files[0];\n } else {\n instance[name] = $(form_item).val();\n }\n }\n }\n instances.push(instance);\n return instance;\n });\n if (this.values_list.length <= 1 && instances.length > 0) {\n this.values = instances.at(-1);\n }\n return instances;\n }\n createForm(cb_resolve = null, cb_reject = null) {\n let $div_form = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n this._getForm(null, 'create_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n editForm(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'edit_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n namedForm(pk = -1, formName, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'named_form', formName, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n _getForm(pk, event_type, formName, $div_form, cb_resolve, cb_reject) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: event_type,\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk,\n form_name: formName\n }\n }));\n const className = pk === null || pk === -1 ? 'create' : 'edit';\n this.open_request[id] = [data => {\n $div_form.append(data.html);\n let $form = $div_form.closest('form').addClass(`sdc-model-${className}-form sdc-model-form ${this.form_id}`).data('model', this).data('model_pk', pk);\n if ($form.length > 0 && !$form[0].hasAttribute('sdc_submit')) {\n $form.attr('sdc_submit', 'submitModelFormDistributor');\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_form);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n }\n new() {\n return new Promise((resolve, reject) => {\n const $form = $('<form>').append(this.createForm(() => {\n this.syncFormToModel($form);\n resolve();\n }, reject));\n });\n }\n save(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n return this.isConnected().then(() => {\n let elem_list;\n if (pk > -1) {\n elem_list = [this.byPk(pk)];\n } else {\n elem_list = this.values_list;\n }\n let p_list = [];\n elem_list.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n p_list.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'save',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: elem,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(p_list);\n });\n }\n create(values = this.values) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(values).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'create',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: values,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n delete(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n if (pk === -1) pk = this.values?.pk;\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'delete',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._is_connected) {\n resolve();\n } else if (!this._is_conneting_process) {\n this._is_conneting_process = true;\n this.open_request['_connecting_process'] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolve_origin, reject_origin] = this.open_request['_connecting_process'];\n this.open_request['_connecting_process'] = [() => {\n resolve_origin();\n resolve();\n }, () => {\n reject_origin();\n reject();\n }];\n }\n });\n }\n close() {\n if (this.socket) {\n this._auto_reconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this['socket'];\n }\n }\n clean() {\n this.values_list = [];\n this.values = {};\n return this;\n }\n _readFiles(elem) {\n let to_solve = [];\n let files = {};\n for (const [key, value] of Object.entries(elem)) {\n if (value instanceof File) {\n to_solve.push(new Promise((resolve, reject) => {\n ((key, value) => {\n let reader = new FileReader();\n reader.onload = e => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.open_request[id] = [resolve, reject];\n let result = e.target.result;\n let number_of_chunks = parseInt(Math.ceil(result.length / MAX_FILE_UPLOAD));\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < number_of_chunks; ++i) {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'upload',\n event_id: id,\n args: {\n chunk: result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)),\n idx: i,\n number_of_chunks: number_of_chunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n }\n };\n reader.onerror = () => {\n reject();\n };\n reader.readAsBinaryString(value);\n })(key, value);\n }));\n }\n }\n return Promise.all(to_solve).then(() => {\n return files;\n });\n }\n _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][1](data);\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this.open_request['_connecting_process'][1](data);\n this._closeOpenRequest('_connecting_process');\n this._auto_reconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this._is_connected = true;\n this._is_conneting_process = false;\n this.open_request['_connecting_process'][0](data);\n this._closeOpenRequest('_connecting_process');\n } else if (data.type === 'load') {\n const json_res = JSON.parse(data.args.data);\n this.values_list = [];\n data.args.data = this._parseServerRes(json_res);\n } else if (data.type === 'on_update' || data.type === 'on_create') {\n const json_res = JSON.parse(data.args.data);\n let obj = this._parseServerRes(json_res);\n let cb;\n if (data.type === 'on_create') {\n cb = this.on_create;\n } else {\n cb = this.on_update;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n noOpenRequests() {\n return new Promise(resolve => {\n if (Object.keys(this.open_request).length === 0) {\n return resolve();\n }\n this._onNoOpenRequests.push(resolve);\n });\n }\n _closeOpenRequest(event_id) {\n delete this.open_request[event_id];\n if (Object.keys(this.open_request).length === 0) {\n this._onNoOpenRequests.forEach(x => x());\n this._onNoOpenRequests = [];\n }\n }\n _connectToServer() {\n return new Promise(resolve => {\n const model_identifier = `${this.model_name}` + (this.model_id > 0 ? `/${this.model_id}` : '');\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${model_identifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${model_identifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.model_name}, ${this.model_id}) Socket closed unexpectedly`);\n this._is_connected = false;\n for (const [_key, value] of Object.entries(this.open_request)) {\n value[1](e);\n }\n this.open_request = {};\n setTimeout(() => {\n if (this._auto_reconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._is_connected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'connect',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n }\n _parseServerRes(res) {\n let updated = [];\n for (let json_data of res) {\n const pk = json_data.pk;\n const obj = this.byPk(pk);\n for (const [k, v] of Object.entries(json_data.fields)) {\n if (v && typeof v === 'object' && v['__is_sdc_model__']) {\n obj[k] = new SubModel(v['pk'], v['model']);\n } else {\n obj[k] = v;\n }\n }\n updated.push(obj);\n }\n if (this.values_list.length === 1) {\n this.values = this.values_list.at(-1);\n } else {\n this.values = {};\n }\n return updated;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDTTtBQUNGO0FBRXRDLE1BQU1HLGVBQWUsR0FBRyxLQUFLO0FBRzdCLE1BQU1DLFFBQVEsQ0FBQztFQUVYQyxXQUFXQSxDQUFDQyxFQUFFLEVBQUVDLEtBQUssRUFBRTtJQUNuQixJQUFJLENBQUNELEVBQUUsR0FBR0EsRUFBRTtJQUNaLElBQUksQ0FBQ0UsTUFBTSxHQUFHRCxLQUFLO0VBQ3ZCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUEsS0FBS0EsQ0FBQ0EsS0FBSyxFQUFFO0lBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdELEtBQUs7RUFDdkI7RUFFQSxJQUFJQSxLQUFLQSxDQUFBLEVBQUc7SUFDUixPQUFPLElBQUksQ0FBQ0MsTUFBTTtFQUN0Qjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsSUFBSUEsQ0FBQ0MsVUFBVSxFQUFFO0lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQ0YsTUFBTSxFQUFFO01BQ2QsTUFBTSxJQUFJRyxTQUFTLENBQUMsb0JBQW9CLENBQUM7SUFDN0M7SUFDQSxPQUFPRCxVQUFVLENBQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUNKLE1BQU0sRUFBRTtNQUFDRixFQUFFLEVBQUUsSUFBSSxDQUFDQTtJQUFFLENBQUMsQ0FBQztFQUMxRDtBQUNKO0FBRUEsTUFBTU8saUJBQWlCLEdBQUc7RUFDdEJDLEdBQUdBLENBQUNDLE1BQU0sRUFBRUMsR0FBRyxFQUFFO0lBQ2IsTUFBTUMsS0FBSyxHQUFHRixNQUFNLENBQUNDLEdBQUcsQ0FBQyxJQUFJRSxTQUFTO0lBQ3RDLElBQUlELEtBQUssWUFBWWIsUUFBUSxFQUFFO01BQzNCLElBQUksQ0FBQ2EsS0FBSyxDQUFDWCxFQUFFLElBQUlXLEtBQUssQ0FBQ1gsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUM3QixPQUFPLElBQUk7TUFDZjtNQUNBLE1BQU1hLE1BQU0sR0FBRyxJQUFJQyxNQUFNLENBQUNILEtBQUssQ0FBQ1gsRUFBRSxDQUFDO01BQ25DYSxNQUFNLENBQUNWLElBQUksR0FBR1EsS0FBSyxDQUFDUixJQUFJLENBQUNZLElBQUksQ0FBQ0osS0FBSyxDQUFDO01BQ3BDLE9BQU9FLE1BQU07SUFDakI7SUFDQSxPQUFPRixLQUFLO0VBQ2hCLENBQUM7RUFDREssR0FBR0EsQ0FBQ1AsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRTtJQUNwQixJQUFJRCxHQUFHLElBQUlELE1BQU0sRUFBRTtNQUNmLE1BQU1RLE1BQU0sR0FBR1IsTUFBTSxDQUFDQyxHQUFHLENBQUM7TUFDMUIsSUFBSU8sTUFBTSxZQUFZbkIsUUFBUSxFQUFFO1FBQzVCLElBQUlhLEtBQUssQ0FBQ08sY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQzVCRCxNQUFNLENBQUNqQixFQUFFLEdBQUdXLEtBQUssQ0FBQ1gsRUFBRTtRQUN4QixDQUFDLE1BQU07VUFDSGlCLE1BQU0sQ0FBQ2pCLEVBQUUsR0FBR1csS0FBSztRQUNyQjtNQUNKLENBQUMsTUFBTTtRQUNIRixNQUFNLENBQUNDLEdBQUcsQ0FBQyxHQUFHQyxLQUFLO01BQ3ZCO0lBQ0osQ0FBQyxNQUFNO01BQ0hGLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEdBQUdDLEtBQUs7SUFDdkI7SUFDQSxPQUFPLElBQUk7RUFDZjtBQUNKLENBQUM7QUFHRCxTQUFTUSxtQkFBbUJBLENBQUNSLEtBQUssRUFBRTtFQUVoQyxJQUFJUyxVQUFVLEdBQUcsZUFBZTtFQUNoQyxJQUFJQyxRQUFRLEdBQUcsU0FBUztFQUN4QixJQUFJQyxTQUFTLEdBQUcsZ0JBQWdCO0VBQ2hDLElBQUlDLFdBQVcsR0FBRywrQkFBK0I7RUFHakQsSUFBSVosS0FBSyxDQUFDYSxXQUFXLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUNILFNBQVMsQ0FBQyxFQUFFO0lBQ3RDLE9BQU9YLEtBQUssQ0FBQ2EsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNO0VBQ3pDLENBQUMsTUFBTSxJQUFJYixLQUFLLEtBQUssV0FBVyxFQUFFO0lBQzlCLE9BQU9DLFNBQVM7RUFDcEIsQ0FBQyxNQUFNLElBQUlELEtBQUssQ0FBQ2EsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7SUFDdkMsT0FBTyxJQUFJO0VBQ2YsQ0FBQyxNQUFNLElBQUliLEtBQUssQ0FBQ2MsS0FBSyxDQUFDSixRQUFRLENBQUMsRUFBRTtJQUM5QixPQUFPSyxRQUFRLENBQUNmLEtBQUssQ0FBQztFQUMxQixDQUFDLE1BQU0sSUFBSUEsS0FBSyxDQUFDYyxLQUFLLENBQUNMLFVBQVUsQ0FBQyxFQUFFO0lBQ2hDLE9BQU9PLFVBQVUsQ0FBQ2hCLEtBQUssQ0FBQztFQUM1QixDQUFDLE1BQU0sSUFBSUEsS0FBSyxDQUFDYyxLQUFLLENBQUNGLFdBQVcsQ0FBQyxFQUFFO0lBQ2pDLE9BQU9aLEtBQUssQ0FBQ2lCLFNBQVMsQ0FBQyxDQUFDLEVBQUVqQixLQUFLLENBQUNrQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQy9DO0VBQ0EsT0FBT2xCLEtBQUs7QUFDaEI7QUFHTyxNQUFNbUIsS0FBSyxDQUFDO0VBQ2Y7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJL0IsV0FBV0EsQ0FBQ2dDLFVBQVUsRUFBRUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RDLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsRUFBRTtJQUMzQixJQUFJLENBQUNDLFdBQVcsR0FBRyxFQUFFO0lBQ3JCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUNKLFVBQVUsR0FBR0EsVUFBVTtJQUM1QixJQUFJLENBQUNDLFdBQVcsR0FBR0EsV0FBVztJQUM5QixJQUFJLENBQUNJLGFBQWEsR0FBRyxLQUFLO0lBQzFCLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsS0FBSztJQUNsQyxJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJO0lBQzNCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksQ0FBQ0MsU0FBUyxHQUFHLE1BQU0sQ0FDdkIsQ0FBQztJQUNELElBQUksQ0FBQ0MsU0FBUyxHQUFHLE1BQU0sQ0FDdkIsQ0FBQztJQUVELElBQUksQ0FBQ0MsT0FBTyxHQUFHL0MscURBQU0sQ0FBQyxDQUFDO0VBQzNCO0VBRUEsQ0FBQ2dELE1BQU0sQ0FBQ0MsUUFBUSxJQUFJO0lBQ2hCLElBQUlDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPO01BQ0hDLElBQUksRUFBRUEsQ0FBQSxLQUFNO1FBQ1IsRUFBRUQsR0FBRztRQUNMLElBQUlBLEdBQUcsR0FBRyxJQUFJLENBQUNaLFdBQVcsQ0FBQ0wsTUFBTSxFQUFFO1VBQy9CLE9BQU87WUFBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUN1QixXQUFXLENBQUNZLEdBQUcsQ0FBQztZQUFFRSxJQUFJLEVBQUU7VUFBSyxDQUFDO1FBQ3REO1FBQ0EsT0FBTztVQUFDckMsS0FBSyxFQUFFLElBQUk7VUFBRXFDLElBQUksRUFBRTtRQUFJLENBQUM7TUFDcEM7SUFDSixDQUFDO0VBQ0w7RUFFQW5CLE1BQU1BLENBQUEsRUFBRztJQUNMLE9BQU8sSUFBSSxDQUFDSyxXQUFXLENBQUNMLE1BQU07RUFDbEM7RUFFQW9CLElBQUlBLENBQUNqRCxFQUFFLEVBQUU7SUFDTCxJQUFJQSxFQUFFLEtBQUssSUFBSSxFQUFFO01BQ2JBLEVBQUUsR0FBRzBCLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztNQUNqQixJQUFJa0QsS0FBSyxDQUFDbEQsRUFBRSxDQUFDLEVBQUU7UUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNYO01BQ0EsSUFBSW1ELElBQUksR0FBRyxJQUFJLENBQUNqQixXQUFXLENBQUNrQixJQUFJLENBQUNDLEdBQUcsSUFBSUEsR0FBRyxDQUFDckQsRUFBRSxLQUFLQSxFQUFFLENBQUM7TUFDdEQsSUFBSSxDQUFDbUQsSUFBSSxFQUFFO1FBQ1BBLElBQUksR0FBRyxJQUFJRyxLQUFLLENBQUM7VUFBQ3RELEVBQUUsRUFBRUE7UUFBRSxDQUFDLEVBQUVPLGlCQUFpQixDQUFDO1FBQzdDLElBQUksQ0FBQzJCLFdBQVcsQ0FBQ3FCLElBQUksQ0FBQ0osSUFBSSxDQUFDO01BQy9CO01BQ0EsT0FBT0EsSUFBSTtJQUNmO0lBQ0EsT0FBTztNQUFDbkQsRUFBRSxFQUFFQTtJQUFFLENBQUM7RUFFbkI7RUFFQXdELE1BQU1BLENBQUN4QixXQUFXLEVBQUU7SUFDaEIsSUFBSSxDQUFDQSxXQUFXLEdBQUd5QixNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMxQixXQUFXLEVBQUVBLFdBQVcsQ0FBQztJQUNuRSxPQUFPLElBQUk7RUFDZjtFQUVBN0IsSUFBSUEsQ0FBQSxFQUFHO0lBQ0gsT0FBTyxJQUFJLENBQUN3RCxXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtNQUNqQyxNQUFNQyxFQUFFLEdBQUdqRSxxREFBTSxDQUFDLENBQUM7TUFDbkIsT0FBTyxJQUFJa0UsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQ3BDLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7VUFDNUJDLEtBQUssRUFBRSxPQUFPO1VBQ2RDLFVBQVUsRUFBRSxNQUFNO1VBQ2xCQyxRQUFRLEVBQUVULEVBQUU7VUFDWlUsSUFBSSxFQUFFO1lBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1lBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQTtVQUN0QjtRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDUSxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFDRSxPQUFPLEVBQUVDLE1BQU0sQ0FBQztNQUM3QyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBUSxRQUFRQSxDQUFDaEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFaUIsVUFBVSxHQUFHLElBQUksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDOUUsSUFBSUMsU0FBUyxHQUFHQyxDQUFDLENBQUMsK0JBQStCLENBQUM7SUFDbEQsSUFBSSxDQUFDbEIsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDMUIsTUFBTUMsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO01BQ25CLElBQUksQ0FBQzJDLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7UUFDNUJDLEtBQUssRUFBRSxPQUFPO1FBQ2RDLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCQyxRQUFRLEVBQUVULEVBQUU7UUFDWlUsSUFBSSxFQUFFO1VBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1VBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1VBQzdCd0IsTUFBTTtVQUNObUI7UUFDSjtNQUNKLENBQUMsQ0FBQyxDQUFDO01BRUgsSUFBSSxDQUFDbkMsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBRWlCLElBQUksSUFBSztRQUMvQkYsU0FBUyxDQUFDRyxNQUFNLENBQUNELElBQUksQ0FBQ0UsSUFBSSxDQUFDO1FBQzNCdEYsNkNBQUcsQ0FBQ3VGLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDO1FBQ3RCSCxVQUFVLElBQUlBLFVBQVUsQ0FBQ0ssSUFBSSxDQUFDO01BQ2xDLENBQUMsRUFBR0ksR0FBRyxJQUFLO1FBQ1JSLFNBQVMsSUFBSUEsU0FBUyxDQUFDUSxHQUFHLENBQUM7TUFDL0IsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0lBRUYsT0FBT04sU0FBUztFQUNwQjtFQUVBTyxVQUFVQSxDQUFDbkYsRUFBRSxHQUFHLElBQUksRUFBRXlFLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUVDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQzlFM0UsRUFBRSxHQUFHQSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2JBLEVBQUUsR0FBRzBCLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztJQUNqQixJQUFJa0QsS0FBSyxDQUFDbEQsRUFBRSxDQUFDLEVBQUU7TUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYO0lBQ0EsSUFBSTRFLFNBQVMsR0FBR0MsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBRWxELElBQUlPLFlBQVk7SUFDaEIsSUFBSSxJQUFJLENBQUNsRCxXQUFXLENBQUNMLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDL0J1RCxZQUFZLEdBQUcsSUFBSSxDQUFDekIsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQyxNQUFNO01BQ0h5QixZQUFZLEdBQUcsSUFBSSxDQUFDakYsSUFBSSxDQUFDLENBQUM7SUFDOUI7SUFFQWlGLFlBQVksQ0FBQ3hCLElBQUksQ0FBQyxNQUFNO01BQ3BCLElBQUk1RCxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDWEEsRUFBRSxHQUFHLElBQUksQ0FBQ2tDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xDLEVBQUU7TUFDL0I7TUFDQSxNQUFNNkQsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO01BQ25CLElBQUksQ0FBQzJDLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7UUFDNUJDLEtBQUssRUFBRSxPQUFPO1FBQ2RDLFVBQVUsRUFBRSxhQUFhO1FBQ3pCQyxRQUFRLEVBQUVULEVBQUU7UUFDWlUsSUFBSSxFQUFFO1VBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1VBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1VBQzdCaEMsRUFBRTtVQUNGMkU7UUFDSjtNQUNKLENBQUMsQ0FBQyxDQUFDO01BRUgsSUFBSSxDQUFDbkMsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBRWlCLElBQUksSUFBSztRQUMvQkYsU0FBUyxDQUFDRyxNQUFNLENBQUNELElBQUksQ0FBQ0UsSUFBSSxDQUFDO1FBQzNCdEYsNkNBQUcsQ0FBQ3VGLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDO1FBQ3RCSCxVQUFVLElBQUlBLFVBQVUsQ0FBQ0ssSUFBSSxDQUFDO01BQ2xDLENBQUMsRUFBR0ksR0FBRyxJQUFLO1FBQ1JSLFNBQVMsSUFBSUEsU0FBUyxDQUFDUSxHQUFHLENBQUM7TUFDL0IsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0lBRUYsT0FBT04sU0FBUztFQUNwQjtFQUVBUyxlQUFlQSxDQUFDQyxNQUFNLEVBQUU7SUFDcEIsT0FBTyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDO0VBQ2hDO0VBRUFFLGVBQWVBLENBQUNGLE1BQU0sRUFBRTtJQUNwQixJQUFJLENBQUNBLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNHLFFBQVEsQ0FBQyxJQUFJLENBQUM5QyxPQUFPLENBQUMsRUFBRTtNQUMzQzJDLE1BQU0sR0FBR1QsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDbEMsT0FBTyxFQUFFLENBQUM7SUFDbEM7SUFFQSxJQUFJK0MsSUFBSSxHQUFHLElBQUk7SUFDZkosTUFBTSxDQUFDSyxJQUFJLENBQUMsWUFBWTtNQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDQyxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDckM7TUFDSjtNQUNBLElBQUk1RixFQUFFLEdBQUc2RSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFVLENBQUM7TUFDakMsSUFBSWUsUUFBUSxHQUFHSCxJQUFJLENBQUN6QyxJQUFJLENBQUNqRCxFQUFFLENBQUM7TUFDNUIsS0FBSyxJQUFJOEYsU0FBUyxJQUFJLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1FBQ2pDLElBQUlDLElBQUksR0FBR0YsU0FBUyxDQUFDRSxJQUFJO1FBQ3pCLElBQUlBLElBQUksSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRTtVQUNyQixJQUFJRixTQUFTLENBQUNHLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDL0JILFNBQVMsQ0FBQ0ksT0FBTyxHQUFHTCxRQUFRLENBQUNHLElBQUksQ0FBQztVQUN0QyxDQUFDLE1BQU0sSUFBSUYsU0FBUyxDQUFDRyxJQUFJLEtBQUssTUFBTSxJQUFJSixRQUFRLENBQUNHLElBQUksQ0FBQyxZQUFZRyxJQUFJLEVBQUU7WUFDcEUsSUFBSUMsU0FBUyxHQUFHLElBQUlDLFlBQVksQ0FBQyxDQUFDO1lBQ2xDRCxTQUFTLENBQUNFLEtBQUssQ0FBQ0MsR0FBRyxDQUFDVixRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDO1lBQ25DRixTQUFTLENBQUNVLEtBQUssR0FBR0osU0FBUztVQUMvQixDQUFDLE1BQU07WUFDSHZCLENBQUMsQ0FBQ2lCLFNBQVMsQ0FBQyxDQUFDVyxHQUFHLENBQUNaLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLENBQUM7VUFDcEM7UUFDSjtNQUNKO0lBQ0osQ0FBQyxDQUFDO0VBRU47RUFFQVQsUUFBUUEsQ0FBQ0QsTUFBTSxFQUFFO0lBQ2IsSUFBSSxDQUFDQSxNQUFNLElBQUksQ0FBQ0EsTUFBTSxDQUFDRyxRQUFRLENBQUMsSUFBSSxDQUFDOUMsT0FBTyxDQUFDLEVBQUU7TUFDM0MyQyxNQUFNLEdBQUdULENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDO0lBRUEsTUFBTStDLElBQUksR0FBRyxJQUFJO0lBQ2pCLElBQUlnQixTQUFTLEdBQUcsRUFBRTtJQUVsQnBCLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLFlBQVk7TUFDcEIsSUFBSWdCLEtBQUssR0FBRzlCLENBQUMsQ0FBQyxJQUFJLENBQUM7TUFDbkIsSUFBSTdFLEVBQUUsR0FBRzJHLEtBQUssQ0FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUM7TUFDL0IsSUFBSWUsUUFBUSxHQUFHSCxJQUFJLENBQUN6QyxJQUFJLENBQUNqRCxFQUFFLENBQUM7TUFDNUIsS0FBSyxJQUFJOEYsU0FBUyxJQUFJLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1FBQ2pDLElBQUlDLElBQUksR0FBR0YsU0FBUyxDQUFDRSxJQUFJO1FBQ3pCLElBQUlBLElBQUksSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRTtVQUNyQixJQUFJRixTQUFTLENBQUNHLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDN0JKLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEdBQUc3RSxtQkFBbUIsQ0FBQzBELENBQUMsQ0FBQ2lCLFNBQVMsQ0FBQyxDQUFDVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQzVELENBQUMsTUFBTSxJQUFJWCxTQUFTLENBQUNHLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDdENKLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEdBQUdGLFNBQVMsQ0FBQ0ksT0FBTztVQUN0QyxDQUFDLE1BQU0sSUFBSUosU0FBUyxDQUFDRyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ2xDSixRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHRixTQUFTLENBQUNVLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDdkMsQ0FBQyxNQUFNO1lBQ0hYLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEdBQUduQixDQUFDLENBQUNpQixTQUFTLENBQUMsQ0FBQ1csR0FBRyxDQUFDLENBQUM7VUFDdkM7UUFDSjtNQUNKO01BRUFDLFNBQVMsQ0FBQ25ELElBQUksQ0FBQ3NDLFFBQVEsQ0FBQztNQUN4QixPQUFPQSxRQUFRO0lBQ25CLENBQUMsQ0FBQztJQUVGLElBQUksSUFBSSxDQUFDM0QsV0FBVyxDQUFDTCxNQUFNLElBQUksQ0FBQyxJQUFJNkUsU0FBUyxDQUFDN0UsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0RCxJQUFJLENBQUNNLE1BQU0sR0FBR3VFLFNBQVMsQ0FBQ0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDO0lBRUEsT0FBT0YsU0FBUztFQUVwQjtFQUVBRyxVQUFVQSxDQUFDcEMsVUFBVSxHQUFHLElBQUksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRTtJQUM1QyxJQUFJb0MsU0FBUyxHQUFHakMsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBQ2xELElBQUksQ0FBQ2xCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQzFCLElBQUksQ0FBQ21ELFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRUQsU0FBUyxFQUFFckMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDOUUsQ0FBQyxDQUFDO0lBRUYsT0FBT29DLFNBQVM7RUFDcEI7RUFFQUUsUUFBUUEsQ0FBQ2hILEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRXlFLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUU7SUFDbkQxRSxFQUFFLEdBQUcwQixRQUFRLENBQUMxQixFQUFFLENBQUM7SUFDakIsSUFBSWtELEtBQUssQ0FBQ2xELEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLElBQUlvRixZQUFZO0lBQ2hCLElBQUksSUFBSSxDQUFDbEQsV0FBVyxDQUFDTCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQy9CdUQsWUFBWSxHQUFHLElBQUksQ0FBQ3pCLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsTUFBTTtNQUNIeUIsWUFBWSxHQUFHLElBQUksQ0FBQ2pGLElBQUksQ0FBQyxDQUFDO0lBQzlCO0lBRUEsSUFBSTJHLFNBQVMsR0FBR2pDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUVuRE8sWUFBWSxDQUFDeEIsSUFBSSxDQUFDLE1BQU07TUFDcEIsSUFBSTVELEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNWQSxFQUFFLEdBQUcsSUFBSSxDQUFDa0MsV0FBVyxDQUFDMEUsRUFBRSxDQUFDNUcsRUFBRSxDQUFDLENBQUNBLEVBQUU7TUFDbkM7TUFFQSxJQUFJLENBQUMrRyxRQUFRLENBQUMvRyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRThHLFNBQVMsRUFBRXJDLFVBQVUsRUFBRUMsU0FBUyxDQUFDO0lBQzFFLENBQUMsQ0FBQztJQUVGLE9BQU9vQyxTQUFTO0VBQ3BCO0VBRUFHLFNBQVNBLENBQUNqSCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUVrSCxRQUFRLEVBQUV6QyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxTQUFTLEdBQUcsSUFBSSxFQUFFO0lBQzlEMUUsRUFBRSxHQUFHMEIsUUFBUSxDQUFDMUIsRUFBRSxDQUFDO0lBQ2pCLElBQUlrRCxLQUFLLENBQUNsRCxFQUFFLENBQUMsRUFBRTtNQUNYQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1g7SUFDQSxJQUFJb0YsWUFBWTtJQUNoQixJQUFJLElBQUksQ0FBQ2xELFdBQVcsQ0FBQ0wsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMvQnVELFlBQVksR0FBRyxJQUFJLENBQUN6QixXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDLE1BQU07TUFDSHlCLFlBQVksR0FBRyxJQUFJLENBQUNqRixJQUFJLENBQUMsQ0FBQztJQUM5QjtJQUVBLElBQUkyRyxTQUFTLEdBQUdqQyxDQUFDLENBQUMsZ0NBQWdDLENBQUM7SUFFbkRPLFlBQVksQ0FBQ3hCLElBQUksQ0FBQyxNQUFNO01BQ3BCLElBQUk1RCxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDVkEsRUFBRSxHQUFHLElBQUksQ0FBQ2tDLFdBQVcsQ0FBQzBFLEVBQUUsQ0FBQzVHLEVBQUUsQ0FBQyxDQUFDQSxFQUFFO01BQ25DO01BRUEsSUFBSSxDQUFDK0csUUFBUSxDQUFDL0csRUFBRSxFQUFFLFlBQVksRUFBRWtILFFBQVEsRUFBRUosU0FBUyxFQUFFckMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0lBRUYsT0FBT29DLFNBQVM7RUFDcEI7RUFHQUMsUUFBUUEsQ0FBQy9HLEVBQUUsRUFBRXFFLFVBQVUsRUFBRTZDLFFBQVEsRUFBRUosU0FBUyxFQUFFckMsVUFBVSxFQUFFQyxTQUFTLEVBQUU7SUFDakUxRSxFQUFFLEdBQUcwQixRQUFRLENBQUMxQixFQUFFLENBQUM7SUFDakIsSUFBSWtELEtBQUssQ0FBQ2xELEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLE1BQU02RCxFQUFFLEdBQUdqRSxxREFBTSxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDMkMsTUFBTSxDQUFDMEIsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUM1QkMsS0FBSyxFQUFFLE9BQU87TUFDZEMsVUFBVSxFQUFFQSxVQUFVO01BQ3RCQyxRQUFRLEVBQUVULEVBQUU7TUFDWlUsSUFBSSxFQUFFO1FBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1FBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1FBQzdCaEMsRUFBRSxFQUFFQSxFQUFFO1FBQ05tSCxTQUFTLEVBQUVEO01BQ2Y7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU1FLFNBQVMsR0FBR3BILEVBQUUsS0FBSyxJQUFJLElBQUlBLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsTUFBTTtJQUU5RCxJQUFJLENBQUN3QyxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFFaUIsSUFBSSxJQUFLO01BQy9CZ0MsU0FBUyxDQUFDL0IsTUFBTSxDQUFDRCxJQUFJLENBQUNFLElBQUksQ0FBQztNQUMzQixJQUFJMkIsS0FBSyxHQUFHRyxTQUFTLENBQUNPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLGFBQWFGLFNBQVMsd0JBQXdCLElBQUksQ0FBQ3pFLE9BQU8sRUFBRSxDQUFDLENBQUNtQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDQSxJQUFJLENBQUMsVUFBVSxFQUFFOUUsRUFBRSxDQUFDO01BQ3JKLElBQUkyRyxLQUFLLENBQUM5RSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM4RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNmLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUMxRGUsS0FBSyxDQUFDWSxJQUFJLENBQUMsWUFBWSxFQUFFLDRCQUE0QixDQUFDO01BQzFEO01BRUE3SCw2Q0FBRyxDQUFDdUYsT0FBTyxDQUFDNkIsU0FBUyxDQUFDO01BQ3RCckMsVUFBVSxJQUFJQSxVQUFVLENBQUNLLElBQUksQ0FBQztJQUNsQyxDQUFDLEVBQUdJLEdBQUcsSUFBSztNQUNSUixTQUFTLElBQUlBLFNBQVMsQ0FBQ1EsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQztFQUNOO0VBRUFzQyxHQUFHQSxDQUFBLEVBQUc7SUFDRixPQUFPLElBQUkxRCxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEMsTUFBTTJDLEtBQUssR0FBRzlCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQzhCLFVBQVUsQ0FBQyxNQUFNO1FBQ25ELElBQUksQ0FBQ3hCLGVBQWUsQ0FBQ3NCLEtBQUssQ0FBQztRQUMzQjVDLE9BQU8sQ0FBQyxDQUFDO01BQ2IsQ0FBQyxFQUFFQyxNQUFNLENBQUMsQ0FBQztJQUNmLENBQUMsQ0FBQztFQUNOO0VBRUF5RCxJQUFJQSxDQUFDekgsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ1ZBLEVBQUUsR0FBRzBCLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztJQUNqQixJQUFJa0QsS0FBSyxDQUFDbEQsRUFBRSxDQUFDLEVBQUU7TUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYO0lBQ0EsT0FBTyxJQUFJLENBQUMyRCxXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtNQUNqQyxJQUFJOEQsU0FBUztNQUNiLElBQUkxSCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDVDBILFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQ3pFLElBQUksQ0FBQ2pELEVBQUUsQ0FBQyxDQUFDO01BQy9CLENBQUMsTUFBTTtRQUNIMEgsU0FBUyxHQUFHLElBQUksQ0FBQ3hGLFdBQVc7TUFDaEM7TUFDQSxJQUFJeUYsTUFBTSxHQUFHLEVBQUU7TUFDZkQsU0FBUyxDQUFDRSxPQUFPLENBQUV6RSxJQUFJLElBQUs7UUFDeEIsTUFBTVUsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO1FBQ25CK0gsTUFBTSxDQUFDcEUsSUFBSSxDQUFDLElBQUlPLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztVQUN6QyxJQUFJLENBQUM2RCxVQUFVLENBQUMxRSxJQUFJLENBQUMsQ0FBQ1MsSUFBSSxDQUFFNEMsS0FBSyxJQUFLO1lBQ2xDLElBQUksQ0FBQ2pFLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7Y0FDNUJDLEtBQUssRUFBRSxPQUFPO2NBQ2RDLFVBQVUsRUFBRSxNQUFNO2NBQ2xCQyxRQUFRLEVBQUVULEVBQUU7Y0FDWlUsSUFBSSxFQUFFO2dCQUNGeEMsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVTtnQkFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7Z0JBQzdCOEMsSUFBSSxFQUFFM0IsSUFBSTtnQkFDVnFELEtBQUssRUFBRUE7Y0FDWDtZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDaEUsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBRXFCLEdBQUcsSUFBSztjQUM5QixJQUFJSixJQUFJLEdBQUcsT0FBT0ksR0FBRyxDQUFDSixJQUFJLENBQUNlLFFBQVEsS0FBSyxRQUFRLEdBQUczQixJQUFJLENBQUM0RCxLQUFLLENBQUM1QyxHQUFHLENBQUNKLElBQUksQ0FBQ2UsUUFBUSxDQUFDLEdBQUdYLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZSxRQUFRO2NBQ3BHWCxHQUFHLENBQUNKLElBQUksQ0FBQ2UsUUFBUSxHQUFHLElBQUksQ0FBQ2tDLGVBQWUsQ0FBQ2pELElBQUksQ0FBQztjQUM5Q2YsT0FBTyxDQUFDbUIsR0FBRyxDQUFDO1lBQ2hCLENBQUMsRUFBRWxCLE1BQU0sQ0FBQztVQUNkLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1AsQ0FBQyxDQUFDO01BRUYsT0FBT0YsT0FBTyxDQUFDa0UsR0FBRyxDQUFDTCxNQUFNLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0VBQ047RUFFQU0sTUFBTUEsQ0FBQzlGLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU0sRUFBRTtJQUN6QixNQUFNMEIsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sSUFBSSxDQUFDK0QsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDakMsT0FBTyxJQUFJRSxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDcEMsSUFBSSxDQUFDNkQsVUFBVSxDQUFDMUYsTUFBTSxDQUFDLENBQUN5QixJQUFJLENBQUU0QyxLQUFLLElBQUs7VUFDcEMsSUFBSSxDQUFDakUsTUFBTSxDQUFDMEIsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztZQUM1QkMsS0FBSyxFQUFFLE9BQU87WUFDZEMsVUFBVSxFQUFFLFFBQVE7WUFDcEJDLFFBQVEsRUFBRVQsRUFBRTtZQUNaVSxJQUFJLEVBQUU7Y0FDRnhDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7Y0FDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7Y0FDN0I4QyxJQUFJLEVBQUUzQyxNQUFNO2NBQ1pxRSxLQUFLLEVBQUVBO1lBQ1g7VUFDSixDQUFDLENBQUMsQ0FBQztVQUVILElBQUksQ0FBQ2hFLFlBQVksQ0FBQ3FCLEVBQUUsQ0FBQyxHQUFHLENBQUVxQixHQUFHLElBQUs7WUFDOUIsSUFBSUosSUFBSSxHQUFHLE9BQU9JLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZSxRQUFRLEtBQUssUUFBUSxHQUFHM0IsSUFBSSxDQUFDNEQsS0FBSyxDQUFDNUMsR0FBRyxDQUFDSixJQUFJLENBQUNlLFFBQVEsQ0FBQyxHQUFHWCxHQUFHLENBQUNKLElBQUksQ0FBQ2UsUUFBUTtZQUNwR1gsR0FBRyxDQUFDSixJQUFJLENBQUNlLFFBQVEsR0FBRyxJQUFJLENBQUNrQyxlQUFlLENBQUNqRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakRmLE9BQU8sQ0FBQ21CLEdBQUcsQ0FBQztVQUNoQixDQUFDLEVBQUVsQixNQUFNLENBQUM7UUFDZCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBa0UsTUFBTUEsQ0FBQ2xJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNaQSxFQUFFLEdBQUcwQixRQUFRLENBQUMxQixFQUFFLENBQUM7SUFDakIsSUFBSWtELEtBQUssQ0FBQ2xELEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLElBQUlBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRUEsRUFBRSxHQUFHLElBQUksQ0FBQ21DLE1BQU0sRUFBRW5DLEVBQUU7SUFDbkMsTUFBTTZELEVBQUUsR0FBR2pFLHFEQUFNLENBQUMsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQytELFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQ2pDLE9BQU8sSUFBSUUsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQ3BDLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7VUFDNUJDLEtBQUssRUFBRSxPQUFPO1VBQ2RDLFVBQVUsRUFBRSxRQUFRO1VBQ3BCQyxRQUFRLEVBQUVULEVBQUU7VUFDWlUsSUFBSSxFQUFFO1lBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1lBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1lBQzdCaEMsRUFBRSxFQUFFQTtVQUNSO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUN3QyxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFDRSxPQUFPLEVBQUVDLE1BQU0sQ0FBQztNQUM3QyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBTCxXQUFXQSxDQUFBLEVBQUc7SUFDVixPQUFPLElBQUlHLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUNwQyxJQUFJLElBQUksQ0FBQzVCLGFBQWEsRUFBRTtRQUNwQjJCLE9BQU8sQ0FBQyxDQUFDO01BQ2IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMxQixxQkFBcUIsRUFBRTtRQUNwQyxJQUFJLENBQUNBLHFCQUFxQixHQUFHLElBQUk7UUFDakMsSUFBSSxDQUFDRyxZQUFZLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDbEQsQ0FBQyxFQUFFLE1BQU0sQ0FDVCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMyRixnQkFBZ0IsQ0FBQyxDQUFDLENBQUN2RSxJQUFJLENBQUMsTUFBTTtVQUMvQkcsT0FBTyxDQUFDLElBQUksQ0FBQ3FFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUM7TUFDTixDQUFDLE1BQU07UUFDSCxNQUFNLENBQUNDLGNBQWMsRUFBRUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDOUYsWUFBWSxDQUFDLHFCQUFxQixDQUFDO1FBQ2hGLElBQUksQ0FBQ0EsWUFBWSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FDdkMsTUFBTTtVQUNGNkYsY0FBYyxDQUFDLENBQUM7VUFDaEJ0RSxPQUFPLENBQUMsQ0FBQztRQUNiLENBQUMsRUFDRCxNQUFNO1VBQ0Z1RSxhQUFhLENBQUMsQ0FBQztVQUNmdEUsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDLENBQ0o7TUFDTDtJQUNKLENBQUMsQ0FBQztFQUNOO0VBRUF1RSxLQUFLQSxDQUFBLEVBQUc7SUFDSixJQUFJLElBQUksQ0FBQ2hHLE1BQU0sRUFBRTtNQUNiLElBQUksQ0FBQ0QsZUFBZSxHQUFHLEtBQUs7TUFDNUIsSUFBSSxDQUFDQyxNQUFNLENBQUNpRyxPQUFPLEdBQUcsTUFBTSxDQUM1QixDQUFDO01BQ0QsSUFBSSxDQUFDakcsTUFBTSxDQUFDZ0csS0FBSyxDQUFDLENBQUM7TUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCO0VBQ0o7RUFFQUUsS0FBS0EsQ0FBQSxFQUFHO0lBQ0osSUFBSSxDQUFDdkcsV0FBVyxHQUFHLEVBQUU7SUFDckIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sSUFBSTtFQUNmO0VBRUEwRixVQUFVQSxDQUFDMUUsSUFBSSxFQUFFO0lBQ2IsSUFBSXVGLFFBQVEsR0FBRyxFQUFFO0lBQ2pCLElBQUlsQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxNQUFNLENBQUM5RixHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJOEMsTUFBTSxDQUFDa0YsT0FBTyxDQUFDeEYsSUFBSSxDQUFDLEVBQUU7TUFDN0MsSUFBSXhDLEtBQUssWUFBWXdGLElBQUksRUFBRTtRQUN2QnVDLFFBQVEsQ0FBQ25GLElBQUksQ0FBQyxJQUFJTyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7VUFDM0MsQ0FBQyxDQUFDdEQsR0FBRyxFQUFFQyxLQUFLLEtBQUs7WUFDYixJQUFJaUksTUFBTSxHQUFHLElBQUlDLFVBQVUsQ0FBQyxDQUFDO1lBQzdCRCxNQUFNLENBQUNFLE1BQU0sR0FBR0MsQ0FBQyxJQUFJO2NBQ2pCLE1BQU1sRixFQUFFLEdBQUdqRSxxREFBTSxDQUFDLENBQUM7Y0FDbkIsSUFBSSxDQUFDNEMsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQ0UsT0FBTyxFQUFFQyxNQUFNLENBQUM7Y0FFekMsSUFBSWdGLE1BQU0sR0FBR0QsQ0FBQyxDQUFDdEksTUFBTSxDQUFDdUksTUFBTTtjQUM1QixJQUFJQyxnQkFBZ0IsR0FBR3ZILFFBQVEsQ0FBQ3dILElBQUksQ0FBQ0MsSUFBSSxDQUFDSCxNQUFNLENBQUNuSCxNQUFNLEdBQUdoQyxlQUFlLENBQUMsQ0FBQztjQUMzRTJHLEtBQUssQ0FBQzlGLEdBQUcsQ0FBQyxHQUFHO2dCQUNUbUQsRUFBRSxFQUFFQSxFQUFFO2dCQUNOdUYsU0FBUyxFQUFFekksS0FBSyxDQUFDcUYsSUFBSTtnQkFDckJxRCxVQUFVLEVBQUUzSSxHQUFHO2dCQUNmNEksY0FBYyxFQUFFM0ksS0FBSyxDQUFDNEk7Y0FDMUIsQ0FBQztjQUNELEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHUCxnQkFBZ0IsRUFBRSxFQUFFTyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQ2pILE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7a0JBQzVCQyxLQUFLLEVBQUUsT0FBTztrQkFDZEMsVUFBVSxFQUFFLFFBQVE7a0JBQ3BCQyxRQUFRLEVBQUVULEVBQUU7a0JBQ1pVLElBQUksRUFBRTtvQkFDRmtGLEtBQUssRUFBRVQsTUFBTSxDQUFDVSxLQUFLLENBQUM3SixlQUFlLEdBQUcySixDQUFDLEVBQUUzSixlQUFlLElBQUkySixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ25FMUcsR0FBRyxFQUFFMEcsQ0FBQztvQkFDTlAsZ0JBQWdCLEVBQUVBLGdCQUFnQjtvQkFDbENHLFNBQVMsRUFBRXpJLEtBQUssQ0FBQ3FGLElBQUk7b0JBQ3JCcUQsVUFBVSxFQUFFM0ksR0FBRztvQkFDZjRJLGNBQWMsRUFBRTNJLEtBQUssQ0FBQzRJLElBQUk7b0JBQzFCSSxZQUFZLEVBQUVoSixLQUFLLENBQUNzRixJQUFJO29CQUN4QmxFLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7b0JBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQTtrQkFDdEI7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Y0FDUDtZQUNKLENBQUM7WUFDRDRHLE1BQU0sQ0FBQ2dCLE9BQU8sR0FBRyxNQUFNO2NBQ25CNUYsTUFBTSxDQUFDLENBQUM7WUFDWixDQUFDO1lBQ0Q0RSxNQUFNLENBQUNpQixrQkFBa0IsQ0FBQ2xKLEtBQUssQ0FBQztVQUNwQyxDQUFDLEVBQUVELEdBQUcsRUFBRUMsS0FBSyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO01BQ1A7SUFDSjtJQUVBLE9BQU9tRCxPQUFPLENBQUNrRSxHQUFHLENBQUNVLFFBQVEsQ0FBQyxDQUFDOUUsSUFBSSxDQUFDLE1BQU07TUFDcEMsT0FBTzRDLEtBQUs7SUFDaEIsQ0FBQyxDQUFDO0VBQ047RUFFQXNELFVBQVVBLENBQUNmLENBQUMsRUFBRTtJQUNWLElBQUlqRSxJQUFJLEdBQUdaLElBQUksQ0FBQzRELEtBQUssQ0FBQ2lCLENBQUMsQ0FBQ2pFLElBQUksQ0FBQztJQUM3QixJQUFJQSxJQUFJLENBQUNpRixRQUFRLEVBQUU7TUFDZixJQUFJLElBQUksQ0FBQ3ZILFlBQVksQ0FBQ3RCLGNBQWMsQ0FBQzRELElBQUksQ0FBQ1IsUUFBUSxDQUFDLEVBQUU7UUFDakQsSUFBSSxDQUFDOUIsWUFBWSxDQUFDc0MsSUFBSSxDQUFDUixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQ2tGLGlCQUFpQixDQUFDbEYsSUFBSSxDQUFDUixRQUFRLENBQUM7TUFDekM7TUFDQSxJQUFJUSxJQUFJLENBQUNtRixHQUFHLElBQUluRixJQUFJLENBQUNvRixNQUFNLEVBQUU7UUFDekJ2Syx1REFBTyxDQUFDLGNBQWMsRUFBRW1GLElBQUksQ0FBQ29GLE1BQU0sSUFBSSxFQUFFLEVBQUVwRixJQUFJLENBQUNtRixHQUFHLElBQUksRUFBRSxDQUFDO01BQzlEO01BRUEsSUFBSW5GLElBQUksQ0FBQ21CLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxDQUFDekQsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzQyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDa0YsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFDN0MsSUFBSSxDQUFDMUgsZUFBZSxHQUFHLEtBQUs7UUFDNUIsSUFBSSxDQUFDQyxNQUFNLENBQUNnRyxLQUFLLENBQUMsQ0FBQztNQUN2QjtJQUNKLENBQUMsTUFBTTtNQUVILElBQUl6RCxJQUFJLENBQUNtRixHQUFHLElBQUluRixJQUFJLENBQUNvRixNQUFNLEVBQUU7UUFDekJ2Syx1REFBTyxDQUFDLFNBQVMsRUFBRW1GLElBQUksQ0FBQ29GLE1BQU0sSUFBSSxFQUFFLEVBQUVwRixJQUFJLENBQUNtRixHQUFHLElBQUksRUFBRSxDQUFDO01BQ3pEO01BRUEsSUFBSW5GLElBQUksQ0FBQ21CLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxDQUFDN0QsYUFBYSxHQUFHLElBQUk7UUFDekIsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxLQUFLO1FBQ2xDLElBQUksQ0FBQ0csWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzQyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDa0YsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7TUFDakQsQ0FBQyxNQUFNLElBQUlsRixJQUFJLENBQUNtQixJQUFJLEtBQUssTUFBTSxFQUFFO1FBQzdCLE1BQU1rRSxRQUFRLEdBQUdqRyxJQUFJLENBQUM0RCxLQUFLLENBQUNoRCxJQUFJLENBQUNQLElBQUksQ0FBQ08sSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQzVDLFdBQVcsR0FBRyxFQUFFO1FBQ3JCNEMsSUFBSSxDQUFDUCxJQUFJLENBQUNPLElBQUksR0FBRyxJQUFJLENBQUNpRCxlQUFlLENBQUNvQyxRQUFRLENBQUM7TUFFbkQsQ0FBQyxNQUFNLElBQUlyRixJQUFJLENBQUNtQixJQUFJLEtBQUssV0FBVyxJQUFJbkIsSUFBSSxDQUFDbUIsSUFBSSxLQUFLLFdBQVcsRUFBRTtRQUMvRCxNQUFNa0UsUUFBUSxHQUFHakcsSUFBSSxDQUFDNEQsS0FBSyxDQUFDaEQsSUFBSSxDQUFDUCxJQUFJLENBQUNPLElBQUksQ0FBQztRQUUzQyxJQUFJc0YsR0FBRyxHQUFHLElBQUksQ0FBQ3JDLGVBQWUsQ0FBQ29DLFFBQVEsQ0FBQztRQUN4QyxJQUFJRSxFQUFFO1FBRU4sSUFBSXZGLElBQUksQ0FBQ21CLElBQUksS0FBSyxXQUFXLEVBQUU7VUFDM0JvRSxFQUFFLEdBQUcsSUFBSSxDQUFDM0gsU0FBUztRQUN2QixDQUFDLE1BQU07VUFDSDJILEVBQUUsR0FBRyxJQUFJLENBQUM1SCxTQUFTO1FBQ3ZCO1FBRUE0SCxFQUFFLENBQUNELEdBQUcsQ0FBQztRQUNQdEYsSUFBSSxDQUFDUCxJQUFJLENBQUNPLElBQUksR0FBR3NGLEdBQUc7TUFFeEI7TUFFQSxJQUFJdkUsUUFBUSxHQUFHZixJQUFJLENBQUNBLElBQUksRUFBRWUsUUFBUTtNQUNsQyxJQUFJQSxRQUFRLEVBQUU7UUFDVmYsSUFBSSxDQUFDQSxJQUFJLENBQUNlLFFBQVEsR0FBRzNCLElBQUksQ0FBQzRELEtBQUssQ0FBQ2hELElBQUksQ0FBQ0EsSUFBSSxDQUFDZSxRQUFRLENBQUM7TUFDdkQ7TUFFQSxJQUFJLElBQUksQ0FBQ3JELFlBQVksQ0FBQ3RCLGNBQWMsQ0FBQzRELElBQUksQ0FBQ1IsUUFBUSxDQUFDLEVBQUU7UUFDakQsSUFBSSxDQUFDOUIsWUFBWSxDQUFDc0MsSUFBSSxDQUFDUixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQ2tGLGlCQUFpQixDQUFDbEYsSUFBSSxDQUFDUixRQUFRLENBQUM7TUFDekM7SUFDSjtFQUNKO0VBRUFnRyxjQUFjQSxDQUFBLEVBQUc7SUFDYixPQUFPLElBQUl4RyxPQUFPLENBQUNDLE9BQU8sSUFBSTtNQUMxQixJQUFJTixNQUFNLENBQUM4RyxJQUFJLENBQUMsSUFBSSxDQUFDL0gsWUFBWSxDQUFDLENBQUNYLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0MsT0FBT2tDLE9BQU8sQ0FBQyxDQUFDO01BQ3BCO01BRUEsSUFBSSxDQUFDOUIsaUJBQWlCLENBQUNzQixJQUFJLENBQUNRLE9BQU8sQ0FBQztJQUN4QyxDQUFDLENBQUM7RUFDTjtFQUVBaUcsaUJBQWlCQSxDQUFDMUYsUUFBUSxFQUFFO0lBQ3hCLE9BQU8sSUFBSSxDQUFDOUIsWUFBWSxDQUFDOEIsUUFBUSxDQUFDO0lBQ2xDLElBQUliLE1BQU0sQ0FBQzhHLElBQUksQ0FBQyxJQUFJLENBQUMvSCxZQUFZLENBQUMsQ0FBQ1gsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUM3QyxJQUFJLENBQUNJLGlCQUFpQixDQUFDMkYsT0FBTyxDQUFDNEMsQ0FBQyxJQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3hDLElBQUksQ0FBQ3ZJLGlCQUFpQixHQUFHLEVBQUU7SUFDL0I7RUFFSjtFQUVBa0csZ0JBQWdCQSxDQUFBLEVBQUc7SUFDZixPQUFPLElBQUlyRSxPQUFPLENBQUVDLE9BQU8sSUFBSztNQUU1QixNQUFNMEcsZ0JBQWdCLEdBQUcsR0FBRyxJQUFJLENBQUMxSSxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMySSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDQSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDOUYsSUFBSUMsTUFBTSxDQUFDQyxRQUFRLENBQUNDLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDdkMsSUFBSSxDQUFDdEksTUFBTSxHQUFHLElBQUl1SSxTQUFTLENBQUMsU0FBU0gsTUFBTSxDQUFDQyxRQUFRLENBQUNHLElBQUksaUJBQWlCTixnQkFBZ0IsRUFBRSxDQUFDO01BQ2pHLENBQUMsTUFBTTtRQUNILElBQUksQ0FBQ2xJLE1BQU0sR0FBRyxJQUFJdUksU0FBUyxDQUFDLFFBQVFILE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRyxJQUFJLGlCQUFpQk4sZ0JBQWdCLEVBQUUsQ0FBQztNQUNoRztNQUdBLElBQUksQ0FBQ2xJLE1BQU0sQ0FBQ3lJLFNBQVMsR0FBRyxJQUFJLENBQUNsQixVQUFVLENBQUMvSSxJQUFJLENBQUMsSUFBSSxDQUFDO01BRWxELElBQUksQ0FBQ3dCLE1BQU0sQ0FBQ2lHLE9BQU8sR0FBSU8sQ0FBQyxJQUFLO1FBQ3pCa0MsT0FBTyxDQUFDQyxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUNuSixVQUFVLEtBQUssSUFBSSxDQUFDMkksUUFBUSw4QkFBOEIsQ0FBQztRQUM1RixJQUFJLENBQUN0SSxhQUFhLEdBQUcsS0FBSztRQUMxQixLQUFLLE1BQU0sQ0FBQytJLElBQUksRUFBRXhLLEtBQUssQ0FBQyxJQUFJOEMsTUFBTSxDQUFDa0YsT0FBTyxDQUFDLElBQUksQ0FBQ25HLFlBQVksQ0FBQyxFQUFFO1VBQzNEN0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDb0ksQ0FBQyxDQUFDO1FBQ2Y7UUFDQSxJQUFJLENBQUN2RyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXRCNEksVUFBVSxDQUFDLE1BQU07VUFDYixJQUFJLElBQUksQ0FBQzlJLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUM2RixnQkFBZ0IsQ0FBQyxDQUFDLENBQUN2RSxJQUFJLENBQUMsTUFBTSxDQUNuQyxDQUFDLENBQUM7VUFDTjtRQUNKLENBQUMsRUFBRSxJQUFJLENBQUM7TUFDWixDQUFDO01BRUQsSUFBSSxDQUFDckIsTUFBTSxDQUFDcUgsT0FBTyxHQUFJeUIsR0FBRyxJQUFLO1FBQzNCSixPQUFPLENBQUNDLEtBQUssQ0FBQyxtQ0FBbUNHLEdBQUcsaUJBQWlCLENBQUM7UUFDdEUsSUFBSSxJQUFJLENBQUNqSixhQUFhLEVBQUU7VUFDcEIsSUFBSTtZQUNBLElBQUksQ0FBQ0csTUFBTSxDQUFDZ0csS0FBSyxDQUFDLENBQUM7VUFDdkIsQ0FBQyxDQUFDLE9BQU9RLENBQUMsRUFBRSxDQUVaO1FBQ0o7TUFDSixDQUFDO01BR0QsSUFBSSxDQUFDeEcsTUFBTSxDQUFDK0ksTUFBTSxHQUFHLE1BQU07UUFDdkJ2SCxPQUFPLENBQUMsQ0FBQztNQUNiLENBQUM7SUFDTCxDQUFDLENBQUM7RUFFTjtFQUVBcUUsZ0JBQWdCQSxDQUFBLEVBQUc7SUFDZixNQUFNdkUsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sSUFBSWtFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUNwQyxJQUFJLENBQUN6QixNQUFNLENBQUMwQixJQUFJLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO1FBQzVCQyxLQUFLLEVBQUUsT0FBTztRQUNkQyxVQUFVLEVBQUUsU0FBUztRQUNyQkMsUUFBUSxFQUFFVCxFQUFFO1FBQ1pVLElBQUksRUFBRTtVQUNGeEMsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVTtVQUMzQkMsV0FBVyxFQUFFLElBQUksQ0FBQ0E7UUFDdEI7TUFDSixDQUFDLENBQUMsQ0FBQztNQUVILElBQUksQ0FBQ1EsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQ0UsT0FBTyxFQUFFQyxNQUFNLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0VBQ047RUFFQStELGVBQWVBLENBQUM3QyxHQUFHLEVBQUU7SUFDakIsSUFBSXFHLE9BQU8sR0FBRyxFQUFFO0lBQ2hCLEtBQUssSUFBSUMsU0FBUyxJQUFJdEcsR0FBRyxFQUFFO01BQ3ZCLE1BQU1sRixFQUFFLEdBQUd3TCxTQUFTLENBQUN4TCxFQUFFO01BQ3ZCLE1BQU1vSyxHQUFHLEdBQUcsSUFBSSxDQUFDbkgsSUFBSSxDQUFDakQsRUFBRSxDQUFDO01BQ3pCLEtBQUssTUFBTSxDQUFDeUwsQ0FBQyxFQUFFQyxDQUFDLENBQUMsSUFBSWpJLE1BQU0sQ0FBQ2tGLE9BQU8sQ0FBQzZDLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLEVBQUU7UUFDbkQsSUFBSUQsQ0FBQyxJQUFJLE9BQU9BLENBQUMsS0FBSyxRQUFRLElBQUlBLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1VBQ3JEdEIsR0FBRyxDQUFDcUIsQ0FBQyxDQUFDLEdBQUcsSUFBSTNMLFFBQVEsQ0FBQzRMLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUMsTUFBTTtVQUNIdEIsR0FBRyxDQUFDcUIsQ0FBQyxDQUFDLEdBQUdDLENBQUM7UUFDZDtNQUNKO01BRUFILE9BQU8sQ0FBQ2hJLElBQUksQ0FBQzZHLEdBQUcsQ0FBQztJQUNyQjtJQUVBLElBQUksSUFBSSxDQUFDbEksV0FBVyxDQUFDTCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQy9CLElBQUksQ0FBQ00sTUFBTSxHQUFHLElBQUksQ0FBQ0QsV0FBVyxDQUFDMEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsTUFBTTtNQUNILElBQUksQ0FBQ3pFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEI7SUFFQSxPQUFPb0osT0FBTztFQUVsQjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19zb2NrZXQuanM/YWRiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcyc7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuY29uc3QgTUFYX0ZJTEVfVVBMT0FEID0gMjUwMDA7XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gICAgY29uc3RydWN0b3IocGssIG1vZGVsKSB7XG4gICAgICAgIHRoaXMucGsgPSBwaztcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTREMgTW9kZWwgTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgICAqL1xuICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAgICovXG4gICAgbG9hZChjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIubmV3TW9kZWwodGhpcy5fbW9kZWwsIHtwazogdGhpcy5wa30pO1xuICAgIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5wayAmJiB2YWx1ZS5wayAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBuZXcgTnVtYmVyKHZhbHVlLnBrKTtcbiAgICAgICAgICAgIG5ld1ZhbC5sb2FkID0gdmFsdWUubG9hZC5iaW5kKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3BrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG5cbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge2pzb259XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICAgICAgdGhpcy5tb2RlbF9xdWVyeSA9IG1vZGVsX3F1ZXJ5O1xuICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgICAgIHRoaXMub25fdXBkYXRlID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICsraWR4O1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLnZhbHVlc19saXN0W2lkeF0sIGRvbmU6IGZhbHNlfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYnlQayhwaykge1xuICAgICAgICBpZiAocGsgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdC5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwazogcGt9O1xuXG4gICAgfVxuXG4gICAgZmlsdGVyKG1vZGVsX3F1ZXJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsLCB0ZW1wbGF0ZV9jb250ZXh0ID0ge30pIHtcbiAgICAgICAgbGV0ICRkaXZfbGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsaXN0X3ZpZXcnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfY29udGV4dFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgICAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1dO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2xpc3Q7XG4gICAgfVxuXG4gICAgZGV0YWlsVmlldyhwayA9IG51bGwsIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsLCB0ZW1wbGF0ZV9jb250ZXh0ID0ge30pIHtcbiAgICAgICAgcGsgPSBwayA/PyAtMTtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0ICRkaXZfbGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdFswXS5wa1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZXRhaWxfdmlldycsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgcGssXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX2NvbnRleHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgICB9XG5cbiAgICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW1vZGVsX3BrJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JtX2l0ZW0pLnZhbChpbnN0YW5jZVtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBpbnN0YW5jZXMgPSBbXTtcblxuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHBrID0gJGZvcm0uZGF0YSgnbW9kZWxfcGsnKTtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHNlbGYuYnlQayhwayk7XG4gICAgICAgICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZm9ybV9pdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1faXRlbS50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBwYXJzZV9oaWRkZW5faW5wdXRzKCQoZm9ybV9pdGVtKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9ICQoZm9ybV9pdGVtKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcblxuICAgIH1cblxuICAgIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShudWxsLCAnY3JlYXRlX2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgZWRpdEZvcm0ocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0LmF0KHBrKS5waztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShwaywgJ25hbWVkX2Zvcm0nLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuXG4gICAgX2dldEZvcm0ocGssIGV2ZW50X3R5cGUsIGZvcm1OYW1lLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRfdHlwZSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgcGs6IHBrLFxuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/ICdjcmVhdGUnIDogJ2VkaXQnO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKS5hZGRDbGFzcyhgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7dGhpcy5mb3JtX2lkfWApLmRhdGEoJ21vZGVsJywgdGhpcykuZGF0YSgnbW9kZWxfcGsnLCBwayk7XG4gICAgICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKCdzZGNfc3VibWl0JykpIHtcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicpLmFwcGVuZCh0aGlzLmNyZWF0ZUZvcm0oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlKHBrID0gLTEpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtX2xpc3Q7XG4gICAgICAgICAgICBpZiAocGsgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IFt0aGlzLmJ5UGsocGspXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZSh2YWx1ZXMgPSB0aGlzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRmlsZXModmFsdWVzKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwayA9PT0gLTEpIHBrID0gdGhpcy52YWx1ZXM/LnBrO1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc19jb25uZXRpbmdfcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvbHZlX29yaWdpbiwgcmVqZWN0X29yaWdpbl0gPSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF9vcmlnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbJ3NvY2tldCddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW4oKSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgICAgIGxldCB0b19zb2x2ZSA9IFtdO1xuICAgICAgICBsZXQgZmlsZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyX29mX2NodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogcmVzdWx0LnNsaWNlKE1BWF9GSUxFX1VQTE9BRCAqIGksIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfY2h1bmtzOiBudW1iZXJfb2ZfY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9vbk1lc3NhZ2UoZSkge1xuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5fcmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoJ19jb25uZWN0aW5nX3Byb2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KCdfY29ubmVjdGluZ19wcm9jZXNzJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnb25fdXBkYXRlJyB8fCBkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX2NyZWF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYiA9IHRoaXMub25fdXBkYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNiKG9iaik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZVxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbm9PcGVuUmVxdWVzdHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5fcmVxdWVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5wdXNoKHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfY2xvc2VPcGVuUmVxdWVzdChldmVudF9pZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZXZlbnRfaWRdO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5vcGVuX3JlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5mb3JFYWNoKHggPT4geCgpKTtcbiAgICAgICAgICAgIHRoaXMuX29uTm9PcGVuUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsX2lkZW50aWZpZXIgPSBgJHt0aGlzLm1vZGVsX25hbWV9YCArICh0aGlzLm1vZGVsX2lkID4gMCA/IGAvJHt0aGlzLm1vZGVsX2lkfWAgOiAnJyk7XG4gICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxfaWRlbnRpZmllcn1gKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU0RDIE1vZGVsICgke3RoaXMubW9kZWxfbmFtZX0sICR7dGhpcy5tb2RlbF9pZH0pIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbX2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3Blbl9yZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3QgPSB7fTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXV0b19yZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgICAgIGxldCB1cGRhdGVkID0gW107XG4gICAgICAgIGZvciAobGV0IGpzb25fZGF0YSBvZiByZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBrID0ganNvbl9kYXRhLnBrO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25fZGF0YS5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHZbJ19faXNfc2RjX21vZGVsX18nXSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBuZXcgU3ViTW9kZWwodlsncGsnXSwgdlsnbW9kZWwnXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZC5wdXNoKG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgICB9XG59Il0sIm5hbWVzIjpbImFwcCIsInRyaWdnZXIiLCJ1dWlkdjQiLCJNQVhfRklMRV9VUExPQUQiLCJTdWJNb2RlbCIsImNvbnN0cnVjdG9yIiwicGsiLCJtb2RlbCIsIl9tb2RlbCIsImxvYWQiLCJjb250cm9sbGVyIiwiVHlwZUVycm9yIiwibmV3TW9kZWwiLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwiTnVtYmVyIiwiYmluZCIsInNldCIsIm9sZFZhbCIsImhhc093blByb3BlcnR5IiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwiX29uTm9PcGVuUmVxdWVzdHMiLCJ2YWx1ZXNfbGlzdCIsInZhbHVlcyIsIl9pc19jb25uZWN0ZWQiLCJfaXNfY29ubmV0aW5nX3Byb2Nlc3MiLCJfYXV0b19yZWNvbm5lY3QiLCJzb2NrZXQiLCJvcGVuX3JlcXVlc3QiLCJvbl91cGRhdGUiLCJvbl9jcmVhdGUiLCJmb3JtX2lkIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpZHgiLCJuZXh0IiwiZG9uZSIsImJ5UGsiLCJpc05hTiIsImVsZW0iLCJmaW5kIiwiZWxtIiwiUHJveHkiLCJwdXNoIiwiZmlsdGVyIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNDb25uZWN0ZWQiLCJ0aGVuIiwiaWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJldmVudF90eXBlIiwiZXZlbnRfaWQiLCJhcmdzIiwibGlzdFZpZXciLCJjYl9yZXNvbHZlIiwiY2JfcmVqZWN0IiwidGVtcGxhdGVfY29udGV4dCIsIiRkaXZfbGlzdCIsIiQiLCJkYXRhIiwiYXBwZW5kIiwiaHRtbCIsInJlZnJlc2giLCJyZXMiLCJkZXRhaWxWaWV3IiwibG9hZF9wcm9taXNlIiwic3luY0Zvcm1Ub01vZGVsIiwiJGZvcm1zIiwic3luY0Zvcm0iLCJzeW5jTW9kZWxUb0Zvcm0iLCJoYXNDbGFzcyIsInNlbGYiLCJlYWNoIiwiaGFzQXR0cmlidXRlIiwiaW5zdGFuY2UiLCJmb3JtX2l0ZW0iLCJlbGVtZW50cyIsIm5hbWUiLCJ0eXBlIiwiY2hlY2tlZCIsIkZpbGUiLCJjb250YWluZXIiLCJEYXRhVHJhbnNmZXIiLCJpdGVtcyIsImFkZCIsImZpbGVzIiwidmFsIiwiaW5zdGFuY2VzIiwiJGZvcm0iLCJhdCIsImNyZWF0ZUZvcm0iLCIkZGl2X2Zvcm0iLCJfZ2V0Rm9ybSIsImVkaXRGb3JtIiwibmFtZWRGb3JtIiwiZm9ybU5hbWUiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCJjbG9zZXN0IiwiYWRkQ2xhc3MiLCJhdHRyIiwibmV3Iiwic2F2ZSIsImVsZW1fbGlzdCIsInBfbGlzdCIsImZvckVhY2giLCJfcmVhZEZpbGVzIiwicGFyc2UiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJjcmVhdGUiLCJkZWxldGUiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVfb3JpZ2luIiwicmVqZWN0X29yaWdpbiIsImNsb3NlIiwib25jbG9zZSIsImNsZWFuIiwidG9fc29sdmUiLCJlbnRyaWVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwic2xpY2UiLCJjb250ZW50X3R5cGUiLCJvbmVycm9yIiwicmVhZEFzQmluYXJ5U3RyaW5nIiwiX29uTWVzc2FnZSIsImlzX2Vycm9yIiwiX2Nsb3NlT3BlblJlcXVlc3QiLCJtc2ciLCJoZWFkZXIiLCJqc29uX3JlcyIsIm9iaiIsImNiIiwibm9PcGVuUmVxdWVzdHMiLCJrZXlzIiwieCIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiY29uc29sZSIsImVycm9yIiwiX2tleSIsInNldFRpbWVvdXQiLCJlcnIiLCJvbm9wZW4iLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
97
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nclass SubModel {\n constructor(pk, model) {\n this.pk = pk;\n this._model = model;\n }\n\n /**\n * SDC Model Name\n * @param {string} model\n */\n set model(model) {\n this._model = model;\n }\n get model() {\n return this._model;\n }\n\n /**\n * Load the sub model.\n *\n * @param {AbstractSDC} controller\n * @returns {Model}\n */\n load(controller) {\n if (!this._model) {\n throw new TypeError(\"Model is not set!!\");\n }\n if (this.pk instanceof Array) {\n return controller.newModel(this._model, {\n pk__in: this.pk\n });\n }\n return controller.newModel(this._model, {\n pk: this.pk\n });\n }\n}\nconst ModelProxyHandler = {\n get(target, key) {\n const value = target[key] ?? undefined;\n if (value instanceof SubModel) {\n if (!value.pk && value.pk !== 0) {\n return null;\n }\n let newVal;\n if (value.pk instanceof Array) {\n newVal = value.pk.slice();\n } else {\n newVal = new Number(value.pk);\n }\n newVal.load = value.load.bind(value);\n return newVal;\n }\n return value;\n },\n set(target, key, value) {\n if (key in target) {\n const oldVal = target[key];\n if (oldVal instanceof SubModel) {\n if (value.hasOwnProperty('pk')) {\n oldVal.pk = value.pk;\n } else {\n try {\n oldVal.pk = JSON.parse(value);\n } catch {\n oldVal.pk = value;\n }\n }\n } else {\n target[key] = value;\n }\n } else {\n target[key] = value;\n }\n return true;\n }\n};\nfunction parse_hidden_inputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === 'true';\n } else if (value === 'undefined') {\n return undefined;\n } else if (value.toLowerCase() === 'none') {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\n this._onNoOpenRequests = [];\n this.values_list = [];\n this.values = {};\n this.model_name = model_name;\n this.model_query = model_query;\n this._is_connected = false;\n this._is_conneting_process = false;\n this._auto_reconnect = true;\n this.socket = null;\n this.open_request = {};\n this.on_update = () => {};\n this.on_create = () => {};\n this.form_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.values_list.length) {\n return {\n value: this.values_list[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n length() {\n return this.values_list.length;\n }\n byPk(pk) {\n if (pk !== null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let elem = this.values_list.find(elm => elm.pk === pk);\n if (!elem) {\n elem = new Proxy({\n pk: pk\n }, ModelProxyHandler);\n this.values_list.push(elem);\n }\n return elem;\n }\n return {\n pk: pk\n };\n }\n filter(model_query) {\n this.model_query = Object.assign({}, this.model_query, model_query);\n return this;\n }\n load() {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'load',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n listView(filter = {}, cbResolve = null, cbReject = null, templateContext = {}) {\n return this.view({\n filter,\n cbResolve,\n cbReject,\n templateContext\n });\n }\n view({\n viewName = 'html_list_template',\n filter = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n let $div_list = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'named_view',\n event_id: id,\n args: {\n view_name: viewName,\n model_name: this.model_name,\n model_query: this.model_query,\n filter,\n template_context: templateContext\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n });\n return $div_list;\n }\n detailView(pk = null, cb_resolve = null, cb_reject = null, template_context = {}) {\n pk = pk ?? -1;\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let $div_list = $('<div class=\"container-fluid\">');\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n load_promise.then(() => {\n if (pk === -1) {\n pk = this.values_list[0].pk;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'detail_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk,\n template_context\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n syncModelToForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n let self = this;\n $forms.each(function () {\n if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\n } else {\n $(form_item).val(instance[name]);\n }\n }\n }\n });\n }\n syncForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n const self = this;\n let instances = [];\n $forms.each(function () {\n let $form = $(this);\n let pk = $form.data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'hidden') {\n instance[name] = parse_hidden_inputs($(form_item).val());\n } else if (form_item.type === 'checkbox') {\n instance[name] = form_item.checked;\n } else if (form_item.type === 'file') {\n instance[name] = form_item.files[0];\n } else {\n instance[name] = $(form_item).val();\n }\n }\n }\n instances.push(instance);\n return instance;\n });\n if (this.values_list.length <= 1 && instances.length > 0) {\n this.values = instances.at(-1);\n }\n return instances;\n }\n createForm(cb_resolve = null, cb_reject = null) {\n let $div_form = $('<div>');\n this.isConnected().then(() => {\n this._getForm(null, 'create_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n editForm(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div>');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'edit_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n namedForm(pk = -1, formName, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'named_form', formName, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n _getForm(pk, event_type, formName, $div_form, cb_resolve, cb_reject) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: event_type,\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk,\n form_name: formName\n }\n }));\n const className = pk === null || pk === -1 ? 'create' : 'edit';\n this.open_request[id] = [data => {\n $div_form.append(data.html);\n let $form = $div_form.closest('form').addClass(`sdc-model-${className}-form sdc-model-form ${this.form_id}`).data('model', this).data('model_pk', pk).data('form_name', formName);\n if ($form.length > 0 && !$form[0].hasAttribute('sdc_submit')) {\n $form.attr('sdc_submit', 'submitModelFormDistributor');\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_form);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n }\n new() {\n return new Promise((resolve, reject) => {\n const $form = $('<form>').append(this.createForm(() => {\n this.syncFormToModel($form);\n resolve();\n }, reject));\n });\n }\n save(pk = -1, fromName = 'edit_form') {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n return this.isConnected().then(() => {\n let elem_list;\n if (pk > -1) {\n elem_list = [this.byPk(pk)];\n } else {\n elem_list = this.values_list;\n }\n let p_list = [];\n elem_list.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n p_list.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'save',\n event_id: id,\n args: {\n form_name: fromName,\n model_name: this.model_name,\n model_query: this.model_query,\n data: elem,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(p_list);\n });\n }\n create(values = this.values) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(values).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'create',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: values,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n if (this.values?.pk === -1) {\n this.values_list = [];\n this.values = null;\n }\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n delete(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n if (pk === -1) pk = this.values?.pk;\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'delete',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._is_connected) {\n resolve();\n } else if (!this._is_conneting_process) {\n this._is_conneting_process = true;\n this.open_request['_connecting_process'] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolve_origin, reject_origin] = this.open_request['_connecting_process'];\n this.open_request['_connecting_process'] = [() => {\n resolve_origin();\n resolve();\n }, () => {\n reject_origin();\n reject();\n }];\n }\n });\n }\n close() {\n if (this.socket) {\n this._auto_reconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this['socket'];\n }\n }\n clean() {\n this.values_list = [];\n this.values = {};\n return this;\n }\n _readFiles(elem) {\n let to_solve = [];\n 100;\n let files = {};\n for (const [key, value] of Object.entries(elem)) {\n if (value instanceof File) {\n to_solve.push(new Promise((resolve, reject) => {\n ((key, value) => {\n let reader = new FileReader();\n reader.onload = e => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.open_request[id] = [resolve, reject];\n let result = e.target.result;\n let number_of_chunks = parseInt(Math.ceil(result.length / MAX_FILE_UPLOAD));\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < number_of_chunks; ++i) {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'upload',\n event_id: id,\n args: {\n chunk: result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)),\n idx: i,\n number_of_chunks: number_of_chunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n }\n };\n reader.onerror = () => {\n reject();\n };\n reader.readAsBinaryString(value);\n })(key, value);\n }));\n }\n }\n return Promise.all(to_solve).then(() => {\n return files;\n });\n }\n _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][1](data);\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this.open_request['_connecting_process'][1](data);\n this._closeOpenRequest('_connecting_process');\n this._auto_reconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this._is_connected = true;\n this._is_conneting_process = false;\n this.open_request['_connecting_process'][0](data);\n this._closeOpenRequest('_connecting_process');\n } else if (['load', 'named_view', 'detail_view'].includes(data.type)) {\n const json_res = JSON.parse(data.args.data);\n this.values_list = [];\n data.args.data = this._parseServerRes(json_res);\n } else if (data.type === 'on_update' || data.type === 'on_create') {\n const json_res = JSON.parse(data.args.data);\n let obj = this._parseServerRes(json_res);\n let cb;\n if (data.type === 'on_create') {\n cb = this.on_create;\n } else {\n cb = this.on_update;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n noOpenRequests() {\n return new Promise(resolve => {\n if (Object.keys(this.open_request).length === 0) {\n return resolve();\n }\n this._onNoOpenRequests.push(resolve);\n });\n }\n _closeOpenRequest(event_id) {\n delete this.open_request[event_id];\n if (Object.keys(this.open_request).length === 0) {\n this._onNoOpenRequests.forEach(x => x());\n this._onNoOpenRequests = [];\n }\n }\n _connectToServer() {\n return new Promise(resolve => {\n const model_identifier = `${this.model_name}` + (this.model_id > 0 ? `/${this.model_id}` : '');\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${model_identifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${model_identifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.model_name}, ${this.model_id}) Socket closed unexpectedly`);\n this._is_connected = false;\n for (const [_key, value] of Object.entries(this.open_request)) {\n value[1](e);\n }\n this.open_request = {};\n setTimeout(() => {\n if (this._auto_reconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._is_connected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'connect',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n }\n _parseServerRes(res) {\n let updated = [];\n for (let json_data of res) {\n const pk = json_data.pk;\n const obj = this.byPk(pk);\n for (const [k, v] of Object.entries(json_data.fields)) {\n if (v && typeof v === 'object' && v['__is_sdc_model__']) {\n obj[k] = new SubModel(v['pk'], v['model']);\n } else {\n obj[k] = v;\n }\n }\n updated.push(obj);\n }\n if (this.values_list.length === 1) {\n this.values = this.values_list.at(-1);\n } else {\n this.values = {};\n }\n return updated;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDO0lBQ3ZDLENBQUMsTUFBTTtNQUNMLElBQUksQ0FBQzlFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEI7SUFFQSxPQUFPeUosT0FBTztFQUVoQjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19zb2NrZXQuanM/YWRiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcyc7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuY29uc3QgTUFYX0ZJTEVfVVBMT0FEID0gMjUwMDA7XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gIGNvbnN0cnVjdG9yKHBrLCBtb2RlbCkge1xuICAgIHRoaXMucGsgPSBwaztcbiAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNEQyBNb2RlbCBOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgKi9cbiAgc2V0IG1vZGVsKG1vZGVsKSB7XG4gICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgfVxuXG4gIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgc3ViIG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEByZXR1cm5zIHtNb2RlbH1cbiAgICovXG4gIGxvYWQoY29udHJvbGxlcikge1xuICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLnBrIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiBjb250cm9sbGVyLm5ld01vZGVsKHRoaXMuX21vZGVsLCB7cGtfX2luOiB0aGlzLnBrfSk7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyLm5ld01vZGVsKHRoaXMuX21vZGVsLCB7cGs6IHRoaXMucGt9KTtcbiAgfVxufVxuXG5jb25zdCBNb2RlbFByb3h5SGFuZGxlciA9IHtcbiAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXRba2V5XSA/PyB1bmRlZmluZWQ7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgIGlmICghdmFsdWUucGsgJiYgdmFsdWUucGsgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGxldCBuZXdWYWw7XG4gICAgICBpZiAodmFsdWUucGsgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBuZXdWYWwgPSB2YWx1ZS5way5zbGljZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsID0gbmV3IE51bWJlcih2YWx1ZS5wayk7XG4gICAgICB9XG4gICAgICBuZXdWYWwubG9hZCA9IHZhbHVlLmxvYWQuYmluZCh2YWx1ZSk7XG4gICAgICByZXR1cm4gbmV3VmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIHNldCh0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdwaycpKSB7XG4gICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9sZFZhbC5wayA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gIGxldCBpc0Zsb2F0UmVnID0gL14tP1xcZCtcXC4/XFxkKyQvO1xuICBsZXQgaXNJbnRSZWcgPSAvXi0/XFxkKyQvO1xuICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgbGV0IGlzU3RyaW5nUmVnID0gL14oWyddW14nXSpbJ10pfChbXCJdW15cIl0qW1wiXSkkLztcblxuXG4gIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpLm1hdGNoKGlzQm9vbFJlZykpIHtcbiAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNJbnRSZWcpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc1N0cmluZ1JlZykpIHtcbiAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtqc29ufVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgIHRoaXMuX29uTm9PcGVuUmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICB0aGlzLm1vZGVsX25hbWUgPSBtb2RlbF9uYW1lO1xuICAgIHRoaXMubW9kZWxfcXVlcnkgPSBtb2RlbF9xdWVyeTtcbiAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc19jb25uZXRpbmdfcHJvY2VzcyA9IGZhbHNlO1xuICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgdGhpcy5vcGVuX3JlcXVlc3QgPSB7fTtcbiAgICB0aGlzLm9uX3VwZGF0ZSA9ICgpID0+IHtcbiAgICB9O1xuICAgIHRoaXMub25fY3JlYXRlID0gKCkgPT4ge1xuICAgIH07XG5cbiAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIGxldCBpZHggPSAtMTtcbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICArK2lkeDtcbiAgICAgICAgaWYgKGlkeCA8IHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy52YWx1ZXNfbGlzdFtpZHhdLCBkb25lOiBmYWxzZX07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gIH1cblxuICBieVBrKHBrKSB7XG4gICAgaWYgKHBrICE9PSBudWxsKSB7XG4gICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgcGsgPSAtMTtcbiAgICAgIH1cbiAgICAgIGxldCBlbGVtID0gdGhpcy52YWx1ZXNfbGlzdC5maW5kKGVsbSA9PiBlbG0ucGsgPT09IHBrKTtcbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QucHVzaChlbGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtO1xuICAgIH1cbiAgICByZXR1cm4ge3BrOiBwa307XG5cbiAgfVxuXG4gIGZpbHRlcihtb2RlbF9xdWVyeSkge1xuICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgZXZlbnRfdHlwZTogJ2xvYWQnLFxuICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsaXN0VmlldyhmaWx0ZXIgPSB7fSwgY2JSZXNvbHZlID0gbnVsbCwgY2JSZWplY3QgPSBudWxsLCB0ZW1wbGF0ZUNvbnRleHQgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnZpZXcoe2ZpbHRlciwgY2JSZXNvbHZlLCBjYlJlamVjdCwgdGVtcGxhdGVDb250ZXh0fSlcbiAgfVxuXG4gIHZpZXcoe3ZpZXdOYW1lID0gJ2h0bWxfbGlzdF90ZW1wbGF0ZScsIGZpbHRlciA9IHt9LCBjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGwsIHRlbXBsYXRlQ29udGV4dCA9IHt9fSkge1xuICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgZXZlbnRfdHlwZTogJ25hbWVkX3ZpZXcnLFxuICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICB2aWV3X25hbWU6IHZpZXdOYW1lLFxuICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgdGVtcGxhdGVfY29udGV4dDogdGVtcGxhdGVDb250ZXh0XG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9saXN0KTtcbiAgICAgICAgY2JSZXNvbHZlICYmIGNiUmVzb2x2ZShkYXRhKTtcbiAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgY2JSZWplY3QgJiYgY2JSZWplY3QocmVzKTtcbiAgICAgIH1dO1xuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdl9saXN0O1xuICB9XG5cbiAgZGV0YWlsVmlldyhwayA9IG51bGwsIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsLCB0ZW1wbGF0ZV9jb250ZXh0ID0ge30pIHtcbiAgICBwayA9IHBrID8/IC0xO1xuICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgIHBrID0gLTE7XG4gICAgfVxuICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAocGsgPT09IC0xKSB7XG4gICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdFswXS5wa1xuICAgICAgfVxuICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgZXZlbnRfdHlwZTogJ2RldGFpbF92aWV3JyxcbiAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgIHBrLFxuICAgICAgICAgIHRlbXBsYXRlX2NvbnRleHRcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKGRhdGEpID0+IHtcbiAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICBjYl9yZXNvbHZlICYmIGNiX3Jlc29sdmUoZGF0YSk7XG4gICAgICB9LCAocmVzKSA9PiB7XG4gICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgIH1dO1xuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdl9saXN0O1xuICB9XG5cbiAgc3luY0Zvcm1Ub01vZGVsKCRmb3Jtcykge1xuICAgIHJldHVybiB0aGlzLnN5bmNGb3JtKCRmb3Jtcyk7XG4gIH1cblxuICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgaWYgKCEkZm9ybXMgfHwgISRmb3Jtcy5oYXNDbGFzcyh0aGlzLmZvcm1faWQpKSB7XG4gICAgICAkZm9ybXMgPSAkKGAuJHt0aGlzLmZvcm1faWR9YCk7XG4gICAgfVxuXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICRmb3Jtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9kZWxfcGsnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmb3JtX2l0ZW0ubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGZvcm1faXRlbS5jaGVja2VkID0gaW5zdGFuY2VbbmFtZV07XG4gICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKGZvcm1faXRlbSkudmFsKGluc3RhbmNlW25hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgaWYgKCEkZm9ybXMgfHwgISRmb3Jtcy5oYXNDbGFzcyh0aGlzLmZvcm1faWQpKSB7XG4gICAgICAkZm9ybXMgPSAkKGAuJHt0aGlzLmZvcm1faWR9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGluc3RhbmNlcyA9IFtdO1xuXG4gICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0ICRmb3JtID0gJCh0aGlzKTtcbiAgICAgIGxldCBwayA9ICRmb3JtLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmb3JtX2l0ZW0ubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9IHBhcnNlX2hpZGRlbl9pbnB1dHMoJChmb3JtX2l0ZW0pLnZhbCgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1faXRlbS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9IGZvcm1faXRlbS5jaGVja2VkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gJChmb3JtX2l0ZW0pLnZhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZXM7XG5cbiAgfVxuXG4gIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICBsZXQgJGRpdl9mb3JtID0gJCgnPGRpdj4nKTtcbiAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9nZXRGb3JtKG51bGwsICdjcmVhdGVfZm9ybScsIG51bGwsICRkaXZfZm9ybSwgY2JfcmVzb2x2ZSwgY2JfcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZGl2X2Zvcm07XG4gIH1cblxuICBlZGl0Rm9ybShwayA9IC0xLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgIHBrID0gLTE7XG4gICAgfVxuICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2PicpO1xuXG4gICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdl9mb3JtO1xuICB9XG5cbiAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgIHBrID0gLTE7XG4gICAgfVxuICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2dldEZvcm0ocGssICduYW1lZF9mb3JtJywgZm9ybU5hbWUsICRkaXZfZm9ybSwgY2JfcmVzb2x2ZSwgY2JfcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZGl2X2Zvcm07XG4gIH1cblxuXG4gIF9nZXRGb3JtKHBrLCBldmVudF90eXBlLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpIHtcbiAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICBwayA9IC0xO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICBldmVudF90eXBlOiBldmVudF90eXBlLFxuICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgYXJnczoge1xuICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICBwazogcGssXG4gICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSBwayA9PT0gbnVsbCB8fCBwayA9PT0gLTEgPyAnY3JlYXRlJyA6ICdlZGl0JztcblxuICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKVxuICAgICAgICAuYWRkQ2xhc3MoYHNkYy1tb2RlbC0ke2NsYXNzTmFtZX0tZm9ybSBzZGMtbW9kZWwtZm9ybSAke3RoaXMuZm9ybV9pZH1gKVxuICAgICAgICAuZGF0YSgnbW9kZWwnLCB0aGlzKVxuICAgICAgICAuZGF0YSgnbW9kZWxfcGsnLCBwaylcbiAgICAgICAgLmRhdGEoJ2Zvcm1fbmFtZScsIGZvcm1OYW1lKTtcbiAgICAgIGlmICgkZm9ybS5sZW5ndGggPiAwICYmICEkZm9ybVswXS5oYXNBdHRyaWJ1dGUoJ3NkY19zdWJtaXQnKSkge1xuICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgIH1cblxuICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICB9LCAocmVzKSA9PiB7XG4gICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgfV07XG4gIH1cblxuICBuZXcoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJCgnPGZvcm0+JykuYXBwZW5kKHRoaXMuY3JlYXRlRm9ybSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgcmVqZWN0KSk7XG4gICAgfSlcbiAgfVxuXG4gIHNhdmUocGsgPSAtMSwgZnJvbU5hbWUgPSAnZWRpdF9mb3JtJykge1xuICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgIHBrID0gLTE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBsZXQgZWxlbV9saXN0O1xuICAgICAgaWYgKHBrID4gLTEpIHtcbiAgICAgICAgZWxlbV9saXN0ID0gW3RoaXMuYnlQayhwayldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgIH1cbiAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgcF9saXN0LnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlYWRGaWxlcyhlbGVtKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZnJvbU5hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgIGRhdGE6IGVsZW0sXG4gICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhyZXMpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0eXBlb2YgcmVzLmRhdGEuaW5zdGFuY2UgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMuZGF0YS5pbnN0YW5jZSkgOiByZXMuZGF0YS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlKHZhbHVlcyA9IHRoaXMudmFsdWVzKSB7XG4gICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5fcmVhZEZpbGVzKHZhbHVlcykudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhyZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXM/LnBrID09PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5kYXRhLmluc3RhbmNlID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoZGF0YSlbMF07XG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlKHBrID0gLTEpIHtcbiAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICBwayA9IC0xO1xuICAgIH1cbiAgICBpZiAocGsgPT09IC0xKSBwayA9IHRoaXMudmFsdWVzPy5waztcbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICBldmVudF90eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICBwazogcGtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNDb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICB9XVxuICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2NoZWNrQ29ubmVjdGlvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbcmVzb2x2ZV9vcmlnaW4sIHJlamVjdF9vcmlnaW5dID0gdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXTtcbiAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXSA9IFtcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlX29yaWdpbigpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0X29yaWdpbigpO1xuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgfTtcbiAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICBkZWxldGUgdGhpc1snc29ja2V0J107XG4gICAgfVxuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy52YWx1ZXNfbGlzdCA9IFtdO1xuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfcmVhZEZpbGVzKGVsZW0pIHtcbiAgICBsZXQgdG9fc29sdmUgPSBbXTtcbiAgICAxMDBcbiAgICBsZXQgZmlsZXMgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW0pKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICgoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuXG4gICAgICAgICAgICAgIGxldCByZXN1bHQgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgZmlsZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgZmlsZV9uYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIGZpZWxkX25hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJfb2ZfY2h1bmtzOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rOiByZXN1bHQuc2xpY2UoTUFYX0ZJTEVfVVBMT0FEICogaSwgTUFYX0ZJTEVfVVBMT0FEICogKGkgKyAxKSksXG4gICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2NodW5rczogbnVtYmVyX29mX2NodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIH0pKGtleSwgdmFsdWUpO1xuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbGVzXG4gICAgfSk7XG4gIH1cblxuICBfb25NZXNzYWdlKGUpIHtcbiAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICBpZiAoZGF0YS5pc19lcnJvcikge1xuICAgICAgaWYgKHRoaXMub3Blbl9yZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgIHRyaWdnZXIoJ3B1c2hFcnJvck1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KCdfY29ubmVjdGluZ19wcm9jZXNzJyk7XG4gICAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXVswXShkYXRhKTtcbiAgICAgICAgdGhpcy5fY2xvc2VPcGVuUmVxdWVzdCgnX2Nvbm5lY3RpbmdfcHJvY2VzcycpO1xuICAgICAgfSBlbHNlIGlmIChbJ2xvYWQnLCAnbmFtZWRfdmlldycsICdkZXRhaWxfdmlldyddLmluY2x1ZGVzKGRhdGEudHlwZSkpIHtcbiAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgdGhpcy52YWx1ZXNfbGlzdCA9IFtdO1xuICAgICAgICBkYXRhLmFyZ3MuZGF0YSA9IHRoaXMuX3BhcnNlU2VydmVyUmVzKGpzb25fcmVzKTtcblxuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdvbl91cGRhdGUnIHx8IGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICBsZXQgb2JqID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoanNvbl9yZXMpO1xuICAgICAgICBsZXQgY2I7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICBjYiA9IHRoaXMub25fY3JlYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiID0gdGhpcy5vbl91cGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjYihvYmopO1xuICAgICAgICBkYXRhLmFyZ3MuZGF0YSA9IG9iajtcblxuICAgICAgfVxuXG4gICAgICBsZXQgaW5zdGFuY2UgPSBkYXRhLmRhdGE/Lmluc3RhbmNlXG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF1bMF0oZGF0YSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbm9PcGVuUmVxdWVzdHMoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMub3Blbl9yZXF1ZXN0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5wdXNoKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgX2Nsb3NlT3BlblJlcXVlc3QoZXZlbnRfaWQpIHtcbiAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZXZlbnRfaWRdO1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5fcmVxdWVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzLmZvckVhY2goeCA9PiB4KCkpO1xuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cyA9IFtdO1xuICAgIH1cblxuICB9XG5cbiAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblxuICAgICAgY29uc3QgbW9kZWxfaWRlbnRpZmllciA9IGAke3RoaXMubW9kZWxfbmFtZX1gICsgKHRoaXMubW9kZWxfaWQgPiAwID8gYC8ke3RoaXMubW9kZWxfaWR9YCA6ICcnKTtcbiAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy9tb2RlbC8ke21vZGVsX2lkZW50aWZpZXJ9YCk7XG4gICAgICB9XG5cblxuICAgICAgdGhpcy5zb2NrZXQub25tZXNzYWdlID0gdGhpcy5fb25NZXNzYWdlLmJpbmQodGhpcyk7XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBTREMgTW9kZWwgKCR7dGhpcy5tb2RlbF9uYW1lfSwgJHt0aGlzLm1vZGVsX2lkfSkgU29ja2V0IGNsb3NlZCB1bmV4cGVjdGVkbHlgKTtcbiAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW19rZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm9wZW5fcmVxdWVzdCkpIHtcbiAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdCA9IHt9O1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9hdXRvX3JlY29ubmVjdCkge1xuICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzX2Nvbm5lY3RlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuXG4gICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgX2NoZWNrQ29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgIGV2ZW50X3R5cGU6ICdjb25uZWN0JyxcbiAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgfSk7XG4gIH1cblxuICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgbGV0IHVwZGF0ZWQgPSBbXTtcbiAgICBmb3IgKGxldCBqc29uX2RhdGEgb2YgcmVzKSB7XG4gICAgICBjb25zdCBwayA9IGpzb25fZGF0YS5waztcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuYnlQayhwayk7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhqc29uX2RhdGEuZmllbGRzKSkge1xuICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdlsnX19pc19zZGNfbW9kZWxfXyddKSB7XG4gICAgICAgICAgb2JqW2tdID0gbmV3IFN1Yk1vZGVsKHZbJ3BrJ10sIHZbJ21vZGVsJ10pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2tdID0gdjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVkLnB1c2gob2JqKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgfVxufSJdLCJuYW1lcyI6WyJhcHAiLCJ0cmlnZ2VyIiwidXVpZHY0IiwiTUFYX0ZJTEVfVVBMT0FEIiwiU3ViTW9kZWwiLCJjb25zdHJ1Y3RvciIsInBrIiwibW9kZWwiLCJfbW9kZWwiLCJsb2FkIiwiY29udHJvbGxlciIsIlR5cGVFcnJvciIsIkFycmF5IiwibmV3TW9kZWwiLCJwa19faW4iLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwic2xpY2UiLCJOdW1iZXIiLCJiaW5kIiwic2V0Iiwib2xkVmFsIiwiaGFzT3duUHJvcGVydHkiLCJKU09OIiwicGFyc2UiLCJwYXJzZV9oaWRkZW5faW5wdXRzIiwiaXNGbG9hdFJlZyIsImlzSW50UmVnIiwiaXNCb29sUmVnIiwiaXNTdHJpbmdSZWciLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiTW9kZWwiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJfb25Ob09wZW5SZXF1ZXN0cyIsInZhbHVlc19saXN0IiwidmFsdWVzIiwiX2lzX2Nvbm5lY3RlZCIsIl9pc19jb25uZXRpbmdfcHJvY2VzcyIsIl9hdXRvX3JlY29ubmVjdCIsInNvY2tldCIsIm9wZW5fcmVxdWVzdCIsIm9uX3VwZGF0ZSIsIm9uX2NyZWF0ZSIsImZvcm1faWQiLCJTeW1ib2wiLCJpdGVyYXRvciIsImlkeCIsIm5leHQiLCJkb25lIiwiYnlQayIsImlzTmFOIiwiZWxlbSIsImZpbmQiLCJlbG0iLCJQcm94eSIsInB1c2giLCJmaWx0ZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nvbm5lY3RlZCIsInRoZW4iLCJpZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2VuZCIsInN0cmluZ2lmeSIsImV2ZW50IiwiZXZlbnRfdHlwZSIsImV2ZW50X2lkIiwiYXJncyIsImxpc3RWaWV3IiwiY2JSZXNvbHZlIiwiY2JSZWplY3QiLCJ0ZW1wbGF0ZUNvbnRleHQiLCJ2aWV3Iiwidmlld05hbWUiLCIkZGl2X2xpc3QiLCIkIiwidmlld19uYW1lIiwidGVtcGxhdGVfY29udGV4dCIsImRhdGEiLCJhcHBlbmQiLCJodG1sIiwicmVmcmVzaCIsInJlcyIsImRldGFpbFZpZXciLCJjYl9yZXNvbHZlIiwiY2JfcmVqZWN0IiwibG9hZF9wcm9taXNlIiwic3luY0Zvcm1Ub01vZGVsIiwiJGZvcm1zIiwic3luY0Zvcm0iLCJzeW5jTW9kZWxUb0Zvcm0iLCJoYXNDbGFzcyIsInNlbGYiLCJlYWNoIiwiaGFzQXR0cmlidXRlIiwiaW5zdGFuY2UiLCJmb3JtX2l0ZW0iLCJlbGVtZW50cyIsIm5hbWUiLCJ0eXBlIiwiY2hlY2tlZCIsIkZpbGUiLCJjb250YWluZXIiLCJEYXRhVHJhbnNmZXIiLCJpdGVtcyIsImFkZCIsImZpbGVzIiwidmFsIiwiaW5zdGFuY2VzIiwiJGZvcm0iLCJhdCIsImNyZWF0ZUZvcm0iLCIkZGl2X2Zvcm0iLCJfZ2V0Rm9ybSIsImVkaXRGb3JtIiwibmFtZWRGb3JtIiwiZm9ybU5hbWUiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCJjbG9zZXN0IiwiYWRkQ2xhc3MiLCJhdHRyIiwibmV3Iiwic2F2ZSIsImZyb21OYW1lIiwiZWxlbV9saXN0IiwicF9saXN0IiwiZm9yRWFjaCIsIl9yZWFkRmlsZXMiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJjcmVhdGUiLCJkZWxldGUiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVfb3JpZ2luIiwicmVqZWN0X29yaWdpbiIsImNsb3NlIiwib25jbG9zZSIsImNsZWFuIiwidG9fc29sdmUiLCJlbnRyaWVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwiY29udGVudF90eXBlIiwib25lcnJvciIsInJlYWRBc0JpbmFyeVN0cmluZyIsIl9vbk1lc3NhZ2UiLCJpc19lcnJvciIsIl9jbG9zZU9wZW5SZXF1ZXN0IiwibXNnIiwiaGVhZGVyIiwiaW5jbHVkZXMiLCJqc29uX3JlcyIsIm9iaiIsImNiIiwibm9PcGVuUmVxdWVzdHMiLCJrZXlzIiwieCIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiY29uc29sZSIsImVycm9yIiwiX2tleSIsInNldFRpbWVvdXQiLCJlcnIiLCJvbm9wZW4iLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n\n}");
98
98
 
99
99
  /***/ }),
100
100
 
@@ -104,7 +104,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
104
104
  \************************************************/
105
105
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
106
106
 
107
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ controllerFromTestHtml: () => (/* binding */ controllerFromTestHtml),\n/* harmony export */ getCsrfToken: () => (/* binding */ getCsrfToken),\n/* harmony export */ get_controller: () => (/* binding */ get_controller)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/**\n * @jest-environment jsdom\n */\n;\n\nlet spy = [],\n _originAjax;\nfunction setDefaults() {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (spy.length === 0) {\n _originAjax = $.ajax.bind($);\n spy.push(jest.spyOn($, 'ajax'));\n spy[0].mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n}\nfunction getCookie(name) {\n let cookieValue = null;\n if (document.cookie && document.cookie !== '') {\n const cookies = document.cookie.split(';');\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n // Does this cookie string begin with the name we want?\n if (cookie.substring(0, name.length + 1) === name + '=') {\n return decodeURIComponent(cookie.substring(name.length + 1));\n }\n }\n }\n return '';\n}\n\n/**\n * Returns the CSRF token\n */\nfunction getCsrfToken() {\n return getCookie('csrftoken');\n}\n\n/**\n *\n * @param html{string} HTML: .\n * @param afterLifecycle{bool} Lifecycle Methode -> Reruns the controller after the root controller has run the \"onRefresh\" methode. This is optional.\n * @returns {Promise<Array<{AbstractSDC}>>}\n */\nasync function controllerFromTestHtml(html, afterLifecycle = null) {\n setDefaults();\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty().append(html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n let children = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.rootController.iterateAllChildren();\n if (!afterLifecycle) {\n return children;\n }\n const origenRefresh = children[0].onRefresh;\n const refreshSpy = jest.spyOn(children[0], 'onRefresh');\n return new Promise(resolve => {\n refreshSpy.mockImplementation(function () {\n refreshSpy.mockRestore();\n const res = origenRefresh.apply(children[0], arguments);\n resolve(children);\n return res;\n });\n });\n}\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = '') {\n setDefaults();\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $('<div></div>').append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQzJCLE1BQU0sQ0FBQ29CLFdBQVcsQ0FBQztFQUUxRHZCLEtBQUssQ0FBQ0csTUFBTSxDQUFDMEIsYUFBYSxDQUFDO0VBQzNCNUQsNkNBQUcsQ0FBQ21DLE9BQU8sR0FBRyxLQUFLO0VBQ25CbkMsNkNBQUcsQ0FBQ29DLFVBQVUsQ0FBQyxDQUFDO0VBQ2hCLE1BQU1wQyw2Q0FBRyxDQUFDcUMsUUFBUSxDQUFDLENBQUM7RUFDcEIsT0FBT3JDLDZDQUFHLENBQUM2RCxhQUFhLENBQUNQLFdBQVcsQ0FBQztBQUN6QyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcz9hNDM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGplc3QtZW52aXJvbm1lbnQganNkb21cbiAqL1xuO1xuXG5pbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcydcblxubGV0IHNweSA9IFtdLCBfb3JpZ2luQWpheDtcblxuZnVuY3Rpb24gc2V0RGVmYXVsdHMoKSB7XG4gICAgaWYgKCFqZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJKRVNUIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIGlmIChzcHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5LnB1c2goamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKSk7XG4gICAgICAgIHNweVswXS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBfb3JpZ2luQWpheChhKS50aGVuKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KS5jYXRjaCgoaHRtbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSkge1xuICAgIGxldCBjb29raWVWYWx1ZSA9IG51bGw7XG4gICAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb29raWUgPSBjb29raWVzW2ldLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb29raWUgc3RyaW5nIGJlZ2luIHdpdGggdGhlIG5hbWUgd2Ugd2FudD9cbiAgICAgICAgICAgIGlmIChjb29raWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoICsgMSkgPT09IChuYW1lICsgJz0nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llLnN1YnN0cmluZyhuYW1lLmxlbmd0aCArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1NSRiB0b2tlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NyZlRva2VuKCkge1xuICAgIHJldHVybiBnZXRDb29raWUoJ2NzcmZ0b2tlbicpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gaHRtbHtzdHJpbmd9IEhUTUw6IC5cbiAqIEBwYXJhbSBhZnRlckxpZmVjeWNsZXtib29sfSBMaWZlY3ljbGUgTWV0aG9kZSAtPiBSZXJ1bnMgdGhlIGNvbnRyb2xsZXIgYWZ0ZXIgdGhlIHJvb3QgY29udHJvbGxlciBoYXMgcnVuIHRoZSBcIm9uUmVmcmVzaFwiIG1ldGhvZGUuIFRoaXMgaXMgb3B0aW9uYWwuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7QWJzdHJhY3RTREN9Pj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb250cm9sbGVyRnJvbVRlc3RIdG1sKGh0bWwsIGFmdGVyTGlmZWN5Y2xlID0gbnVsbCkge1xuICAgIHNldERlZmF1bHRzKCk7XG4gICAgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgYXBwLnVwZGF0ZUpxdWVyeSgpO1xuICAgICRib2R5LnNhZmVFbXB0eSgpLmFwcGVuZChodG1sKTtcbiAgICBhcHAuX2lzSW5pdCA9IGZhbHNlO1xuICAgIGFwcC5jbGVhbkNhY2hlKCk7XG4gICAgYXdhaXQgYXBwLmluaXRfc2RjKCk7XG5cblxuICAgIGxldCBjaGlsZHJlbiA9IGFwcC5yb290Q29udHJvbGxlci5pdGVyYXRlQWxsQ2hpbGRyZW4oKTtcblxuICAgIGlmICghYWZ0ZXJMaWZlY3ljbGUpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2VuUmVmcmVzaCA9IGNoaWxkcmVuWzBdLm9uUmVmcmVzaDtcblxuICAgIGNvbnN0IHJlZnJlc2hTcHkgPSBqZXN0LnNweU9uKFxuICAgICAgICBjaGlsZHJlblswXSxcbiAgICAgICAgJ29uUmVmcmVzaCdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHJlZnJlc2hTcHkubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlZnJlc2hTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG9yaWdlblJlZnJlc2guYXBwbHkoY2hpbGRyZW5bMF0sIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXNvbHZlKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb250cm9sbGVyLiBUaGlzIGNvbnRyb2xsZXIgaGFzIGJlZW4gY3JlYXRlZCBieSB0aGUgdXNpbmcgdGhlIG5vcm1hbCBTREMgbGlmZSBjeWNsZS5cbiAqXG4gKiBAcGFyYW0gdGFnX25hbWV7c3RyaW5nfSBDb250cm9sbGVyIHRhZyBuYW1lIChzbmFrZS1jYXNlKVxuICogQHBhcmFtIGluaXRfYXJndW1lbnRze29iamVjdH0gb2JqZWN0OiBNb2NrZWRzIHRoZSB0YWcgZGF0YSBhcmd1bWVudHMuXG4gKiBAcGFyYW0gb3JpZ2VuX2h0bWx7c3RyaW5nfSBIVE1MOiBNb2NrZWQgY29udGVudCBvZiB0aGUgY29udGVudCBpbiB5b3VyIHRhcmdldCBIVE1MIGNvbnRhaW5lci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHtBYnN0cmFjdFNEQ30+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0X2NvbnRyb2xsZXIodGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBzZXREZWZhdWx0cygpO1xuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsInNldERlZmF1bHRzIiwiamVzdCIsIkVycm9yIiwibGVuZ3RoIiwiJCIsImFqYXgiLCJiaW5kIiwicHVzaCIsInNweU9uIiwibW9ja0ltcGxlbWVudGF0aW9uIiwiYSIsInRoZW4iLCJodG1sIiwiY2F0Y2giLCJnZXRDb29raWUiLCJuYW1lIiwiY29va2llVmFsdWUiLCJkb2N1bWVudCIsImNvb2tpZSIsImNvb2tpZXMiLCJzcGxpdCIsImkiLCJ0cmltIiwic3Vic3RyaW5nIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZ2V0Q3NyZlRva2VuIiwiY29udHJvbGxlckZyb21UZXN0SHRtbCIsImFmdGVyTGlmZWN5Y2xlIiwiJGJvZHkiLCJ1cGRhdGVKcXVlcnkiLCJzYWZlRW1wdHkiLCJhcHBlbmQiLCJfaXNJbml0IiwiY2xlYW5DYWNoZSIsImluaXRfc2RjIiwiY2hpbGRyZW4iLCJyb290Q29udHJvbGxlciIsIml0ZXJhdGVBbGxDaGlsZHJlbiIsIm9yaWdlblJlZnJlc2giLCJvblJlZnJlc2giLCJyZWZyZXNoU3B5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJtb2NrUmVzdG9yZSIsInJlcyIsImFwcGx5IiwiYXJndW1lbnRzIiwiZ2V0X2NvbnRyb2xsZXIiLCJ0YWdfbmFtZSIsImluaXRfYXJndW1lbnRzIiwib3JpZ2VuX2h0bWwiLCIkY29udHJvbGxlciIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsImRhdGEiLCIkZGl2Q29udGFpbmVyIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n");
107
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ controllerFromTestHtml: () => (/* binding */ controllerFromTestHtml),\n/* harmony export */ getCsrfToken: () => (/* binding */ getCsrfToken),\n/* harmony export */ get_controller: () => (/* binding */ get_controller)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/**\n * @jest-environment jsdom\n */\n;\n\nlet spy = [],\n _originAjax;\nfunction setDefaults() {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (spy.length === 0) {\n _originAjax = $.ajax.bind($);\n spy.push(jest.spyOn($, 'ajax'));\n spy[0].mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n}\nfunction getCookie(name) {\n let cookieValue = null;\n if (document.cookie && document.cookie !== '') {\n const cookies = document.cookie.split(';');\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n // Does this cookie string begin with the name we want?\n if (cookie.substring(0, name.length + 1) === name + '=') {\n return decodeURIComponent(cookie.substring(name.length + 1));\n }\n }\n }\n return '';\n}\n\n/**\n * Returns the CSRF token\n */\nfunction getCsrfToken() {\n return getCookie('csrftoken');\n}\n\n/**\n *\n * @param html{string} HTML: .\n * @param afterLifecycle{bool} Lifecycle Methode -> Reruns the controller after the root controller has run the \"onRefresh\" methode. This is optional.\n * @returns {Promise<Array<{AbstractSDC}>>}\n */\nasync function controllerFromTestHtml(html, afterLifecycle = null) {\n setDefaults();\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty().append(html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n let children = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.rootController.iterateAllChildren();\n if (!afterLifecycle) {\n return children;\n }\n const origenRefresh = children[0].onRefresh;\n const refreshSpy = jest.spyOn(children[0], 'onRefresh');\n return new Promise(resolve => {\n refreshSpy.mockImplementation(function () {\n refreshSpy.mockRestore();\n const res = origenRefresh.apply(children[0], arguments);\n resolve(children);\n return res;\n });\n });\n}\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = '') {\n setDefaults();\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $('<div></div>').append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFaUM7QUFFakMsSUFBSUMsR0FBRyxHQUFHLEVBQUU7RUFBRUMsV0FBVztBQUV6QixTQUFTQyxXQUFXQSxDQUFBLEVBQUc7RUFDbkIsSUFBSSxDQUFDQyxJQUFJLEVBQUUsTUFBTSxJQUFJQyxLQUFLLENBQUMscUJBQXFCLENBQUM7RUFDakQsSUFBSUosR0FBRyxDQUFDSyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ2xCSixXQUFXLEdBQUdLLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyxJQUFJLENBQUNGLENBQUMsQ0FBQztJQUU1Qk4sR0FBRyxDQUFDUyxJQUFJLENBQUNOLElBQUksQ0FBQ08sS0FBSyxDQUNmSixDQUFDLEVBQ0QsTUFDSixDQUFDLENBQUM7SUFDRk4sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDVyxrQkFBa0IsQ0FBQyxVQUFVQyxDQUFDLEVBQUU7TUFDbkMsT0FBT1gsV0FBVyxDQUFDVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFQyxJQUFJLElBQUs7UUFDakMsT0FBT0EsSUFBSTtNQUNmLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUVELElBQUksSUFBSztRQUNmLE9BQU9BLElBQUk7TUFDZixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtBQUNKO0FBR0EsU0FBU0UsU0FBU0EsQ0FBQ0MsSUFBSSxFQUFFO0VBQ3JCLElBQUlDLFdBQVcsR0FBRyxJQUFJO0VBQ3RCLElBQUlDLFFBQVEsQ0FBQ0MsTUFBTSxJQUFJRCxRQUFRLENBQUNDLE1BQU0sS0FBSyxFQUFFLEVBQUU7SUFDM0MsTUFBTUMsT0FBTyxHQUFHRixRQUFRLENBQUNDLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUMxQyxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsT0FBTyxDQUFDaEIsTUFBTSxFQUFFa0IsQ0FBQyxFQUFFLEVBQUU7TUFDckMsTUFBTUgsTUFBTSxHQUFHQyxPQUFPLENBQUNFLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQztNQUNoQztNQUNBLElBQUlKLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDLENBQUMsRUFBRVIsSUFBSSxDQUFDWixNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQU1ZLElBQUksR0FBRyxHQUFJLEVBQUU7UUFDdkQsT0FBT1Msa0JBQWtCLENBQUNOLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDUixJQUFJLENBQUNaLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNoRTtJQUNKO0VBQ0o7RUFDQSxPQUFPLEVBQUU7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTc0IsWUFBWUEsQ0FBQSxFQUFHO0VBQzNCLE9BQU9YLFNBQVMsQ0FBQyxXQUFXLENBQUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZUFBZVksc0JBQXNCQSxDQUFDZCxJQUFJLEVBQUVlLGNBQWMsR0FBRyxJQUFJLEVBQUU7RUFDdEUzQixXQUFXLENBQUMsQ0FBQztFQUNiLE1BQU00QixLQUFLLEdBQUd4QixDQUFDLENBQUMsTUFBTSxDQUFDO0VBQ3ZCUCw2Q0FBRyxDQUFDZ0MsWUFBWSxDQUFDLENBQUM7RUFDbEJELEtBQUssQ0FBQ0UsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDbkIsSUFBSSxDQUFDO0VBQzlCZiw2Q0FBRyxDQUFDbUMsT0FBTyxHQUFHLEtBQUs7RUFDbkJuQyw2Q0FBRyxDQUFDb0MsVUFBVSxDQUFDLENBQUM7RUFDaEIsTUFBTXBDLDZDQUFHLENBQUNxQyxRQUFRLENBQUMsQ0FBQztFQUdwQixJQUFJQyxRQUFRLEdBQUd0Qyw2Q0FBRyxDQUFDdUMsY0FBYyxDQUFDQyxrQkFBa0IsQ0FBQyxDQUFDO0VBRXRELElBQUksQ0FBQ1YsY0FBYyxFQUFFO0lBQ2pCLE9BQU9RLFFBQVE7RUFDbkI7RUFFQSxNQUFNRyxhQUFhLEdBQUdILFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksU0FBUztFQUUzQyxNQUFNQyxVQUFVLEdBQUd2QyxJQUFJLENBQUNPLEtBQUssQ0FDekIyQixRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ1gsV0FDSixDQUFDO0VBRUQsT0FBTyxJQUFJTSxPQUFPLENBQUVDLE9BQU8sSUFBSztJQUM1QkYsVUFBVSxDQUFDL0Isa0JBQWtCLENBQUMsWUFBWTtNQUN0QytCLFVBQVUsQ0FBQ0csV0FBVyxDQUFDLENBQUM7TUFDeEIsTUFBTUMsR0FBRyxHQUFHTixhQUFhLENBQUNPLEtBQUssQ0FBQ1YsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFVyxTQUFTLENBQUM7TUFDdkRKLE9BQU8sQ0FBQ1AsUUFBUSxDQUFDO01BQ2pCLE9BQU9TLEdBQUc7SUFDZCxDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZUFBZUcsY0FBY0EsQ0FBQ0MsUUFBUSxFQUFFQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLFdBQVcsR0FBRyxFQUFFLEVBQUU7RUFDbEZsRCxXQUFXLENBQUMsQ0FBQztFQUNiLE1BQU00QixLQUFLLEdBQUd4QixDQUFDLENBQUMsTUFBTSxDQUFDO0VBQ3ZCUCw2Q0FBRyxDQUFDZ0MsWUFBWSxDQUFDLENBQUM7RUFFbEJELEtBQUssQ0FBQ0UsU0FBUyxDQUFDLENBQUM7RUFFakIsTUFBTXFCLFdBQVcsR0FBRy9DLENBQUMsQ0FBQyxJQUFJNEMsUUFBUSxJQUFJRSxXQUFXLEtBQUtGLFFBQVEsR0FBRyxDQUFDO0VBQ2xFLEtBQUssTUFBTSxDQUFDSSxHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ04sY0FBYyxDQUFDLEVBQUU7SUFDdkRFLFdBQVcsQ0FBQ0ssSUFBSSxDQUFDSixHQUFHLEVBQUVDLEtBQUssQ0FBQztFQUNoQztFQUNBLE1BQU1JLGFBQWEsR0FBR3JELENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQzJCLE1BQU0sQ0FBQ29CLFdBQVcsQ0FBQztFQUUxRHZCLEtBQUssQ0FBQ0csTUFBTSxDQUFDMEIsYUFBYSxDQUFDO0VBQzNCNUQsNkNBQUcsQ0FBQ21DLE9BQU8sR0FBRyxLQUFLO0VBQ25CbkMsNkNBQUcsQ0FBQ29DLFVBQVUsQ0FBQyxDQUFDO0VBQ2hCLE1BQU1wQyw2Q0FBRyxDQUFDcUMsUUFBUSxDQUFDLENBQUM7RUFDcEIsT0FBT3JDLDZDQUFHLENBQUM2RCxhQUFhLENBQUNQLFdBQVcsQ0FBQztBQUN6QyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcz9hNDM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGplc3QtZW52aXJvbm1lbnQganNkb21cbiAqL1xuO1xuXG5pbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcydcblxubGV0IHNweSA9IFtdLCBfb3JpZ2luQWpheDtcblxuZnVuY3Rpb24gc2V0RGVmYXVsdHMoKSB7XG4gICAgaWYgKCFqZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJKRVNUIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIGlmIChzcHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5LnB1c2goamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKSk7XG4gICAgICAgIHNweVswXS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBfb3JpZ2luQWpheChhKS50aGVuKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KS5jYXRjaCgoaHRtbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSkge1xuICAgIGxldCBjb29raWVWYWx1ZSA9IG51bGw7XG4gICAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb29raWUgPSBjb29raWVzW2ldLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb29raWUgc3RyaW5nIGJlZ2luIHdpdGggdGhlIG5hbWUgd2Ugd2FudD9cbiAgICAgICAgICAgIGlmIChjb29raWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoICsgMSkgPT09IChuYW1lICsgJz0nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llLnN1YnN0cmluZyhuYW1lLmxlbmd0aCArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1NSRiB0b2tlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NyZlRva2VuKCkge1xuICAgIHJldHVybiBnZXRDb29raWUoJ2NzcmZ0b2tlbicpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gaHRtbHtzdHJpbmd9IEhUTUw6IC5cbiAqIEBwYXJhbSBhZnRlckxpZmVjeWNsZXtib29sfSBMaWZlY3ljbGUgTWV0aG9kZSAtPiBSZXJ1bnMgdGhlIGNvbnRyb2xsZXIgYWZ0ZXIgdGhlIHJvb3QgY29udHJvbGxlciBoYXMgcnVuIHRoZSBcIm9uUmVmcmVzaFwiIG1ldGhvZGUuIFRoaXMgaXMgb3B0aW9uYWwuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7QWJzdHJhY3RTREN9Pj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb250cm9sbGVyRnJvbVRlc3RIdG1sKGh0bWwsIGFmdGVyTGlmZWN5Y2xlID0gbnVsbCkge1xuICAgIHNldERlZmF1bHRzKCk7XG4gICAgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgYXBwLnVwZGF0ZUpxdWVyeSgpO1xuICAgICRib2R5LnNhZmVFbXB0eSgpLmFwcGVuZChodG1sKTtcbiAgICBhcHAuX2lzSW5pdCA9IGZhbHNlO1xuICAgIGFwcC5jbGVhbkNhY2hlKCk7XG4gICAgYXdhaXQgYXBwLmluaXRfc2RjKCk7XG5cblxuICAgIGxldCBjaGlsZHJlbiA9IGFwcC5yb290Q29udHJvbGxlci5pdGVyYXRlQWxsQ2hpbGRyZW4oKTtcblxuICAgIGlmICghYWZ0ZXJMaWZlY3ljbGUpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2VuUmVmcmVzaCA9IGNoaWxkcmVuWzBdLm9uUmVmcmVzaDtcblxuICAgIGNvbnN0IHJlZnJlc2hTcHkgPSBqZXN0LnNweU9uKFxuICAgICAgICBjaGlsZHJlblswXSxcbiAgICAgICAgJ29uUmVmcmVzaCdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHJlZnJlc2hTcHkubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlZnJlc2hTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG9yaWdlblJlZnJlc2guYXBwbHkoY2hpbGRyZW5bMF0sIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXNvbHZlKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb250cm9sbGVyLiBUaGlzIGNvbnRyb2xsZXIgaGFzIGJlZW4gY3JlYXRlZCBieSB0aGUgdXNpbmcgdGhlIG5vcm1hbCBTREMgbGlmZSBjeWNsZS5cbiAqXG4gKiBAcGFyYW0gdGFnX25hbWV7c3RyaW5nfSBDb250cm9sbGVyIHRhZyBuYW1lIChzbmFrZS1jYXNlKVxuICogQHBhcmFtIGluaXRfYXJndW1lbnRze29iamVjdH0gb2JqZWN0OiBNb2NrZWRzIHRoZSB0YWcgZGF0YSBhcmd1bWVudHMuXG4gKiBAcGFyYW0gb3JpZ2VuX2h0bWx7c3RyaW5nfSBIVE1MOiBNb2NrZWQgY29udGVudCBvZiB0aGUgY29udGVudCBpbiB5b3VyIHRhcmdldCBIVE1MIGNvbnRhaW5lci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHtBYnN0cmFjdFNEQ30+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0X2NvbnRyb2xsZXIodGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBzZXREZWZhdWx0cygpO1xuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsInNldERlZmF1bHRzIiwiamVzdCIsIkVycm9yIiwibGVuZ3RoIiwiJCIsImFqYXgiLCJiaW5kIiwicHVzaCIsInNweU9uIiwibW9ja0ltcGxlbWVudGF0aW9uIiwiYSIsInRoZW4iLCJodG1sIiwiY2F0Y2giLCJnZXRDb29raWUiLCJuYW1lIiwiY29va2llVmFsdWUiLCJkb2N1bWVudCIsImNvb2tpZSIsImNvb2tpZXMiLCJzcGxpdCIsImkiLCJ0cmltIiwic3Vic3RyaW5nIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZ2V0Q3NyZlRva2VuIiwiY29udHJvbGxlckZyb21UZXN0SHRtbCIsImFmdGVyTGlmZWN5Y2xlIiwiJGJvZHkiLCJ1cGRhdGVKcXVlcnkiLCJzYWZlRW1wdHkiLCJhcHBlbmQiLCJfaXNJbml0IiwiY2xlYW5DYWNoZSIsImluaXRfc2RjIiwiY2hpbGRyZW4iLCJyb290Q29udHJvbGxlciIsIml0ZXJhdGVBbGxDaGlsZHJlbiIsIm9yaWdlblJlZnJlc2giLCJvblJlZnJlc2giLCJyZWZyZXNoU3B5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJtb2NrUmVzdG9yZSIsInJlcyIsImFwcGx5IiwiYXJndW1lbnRzIiwiZ2V0X2NvbnRyb2xsZXIiLCJ0YWdfbmFtZSIsImluaXRfYXJndW1lbnRzIiwib3JpZ2VuX2h0bWwiLCIkY29udHJvbGxlciIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsImRhdGEiLCIkZGl2Q29udGFpbmVyIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n\n}");
108
108
 
109
109
  /***/ }),
110
110
 
@@ -114,7 +114,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
114
114
  \*******************************************/
115
115
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
116
116
 
117
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /([^\\s,]+)/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $('body');\n }\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, '');\n var result = fnstr.slice(fnstr.indexOf('(') + 1, fnstr.indexOf(')')).match(arg_names_reg);\n if (!result) {\n return [];\n }\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, number => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, letter => `${letter[1].toUpperCase()}`);\n return str;\n}\nfunction tagNameToReadableName(str) {\n str = str.replace(/-./g, letter => ` ${letter[1].toUpperCase()}`).replace(/^./g, letter => `${letter.toUpperCase()}`);\n return str;\n}\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(targetClass.prototype).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== '') {\n Object.getOwnPropertyNames(source.prototype).concat(Object.getOwnPropertySymbols(source.prototype)).forEach(prop => {\n if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {\n return;\n }\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(targetClass.prototype, prop, Object.getOwnPropertyDescriptor(source.prototype, prop));\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {typeof AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach(mixin => {\n let newMixin;\n Object.assign(this, newMixin = new mixin());\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n static get name() {\n return baseClass.name;\n }\n static className() {\n return this.name;\n }\n get mixins() {\n return this._mixins;\n }\n }\n }[baseClass.name];\n copyProps(base, baseClass);\n mixins.forEach(mixin => {\n copyProps(base, mixin);\n });\n return base;\n}\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url,\n //Server script to process data\n type: method || 'POST',\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }\n });\n}\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round(e.loaded / e.total * 100);\n var $progressContainer = $('.progress-container');\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n percentVal += '%';\n $progressContainer.find('.progress-bar').css({\n 'width': percentVal\n }).text(percentVal);\n }\n}\nfunction checkIfParamNumberBoolOrString(paramElement, controller = null) {\n if (typeof paramElement !== 'string') {\n return paramElement;\n }\n if (controller && typeof controller[paramElement] !== 'undefined') {\n if (typeof controller[paramElement] === 'function') {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (paramElement.match(isBoolReg)) {\n return paramElement === 'true';\n } else if (paramElement === 'undefined') {\n return undefined;\n } else if (paramElement.toLowerCase() === 'none') {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n return paramElement;\n}\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\nfunction clearErrorsInForm($form) {\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').remove();\n $form.find('.non-field-errors').remove();\n}\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $('<div>').append($resForm);\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').safeRemove();\n $form.find('.non-field-errors').safeRemove();\n let $file_container = $resForm.find('input[type=file]').parent();\n $form.find('input[type=file]').parent().each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n let hasNoError = $resForm.find('.non-field-errors').insertAfter($form.find('.hidden-form-fields')).length === 0;\n $resForm.find('.has-error').each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data('auto-id');\n let $errorField = $form.find('.form-group.' + className);\n $errorField.addClass('has-error');\n $errorField.find('.form-input-container').append($resErrorField.find('.alert-danger'));\n });\n return hasNoError;\n}\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQztFQUMxRixDQUFDLENBQUM7RUFFRixPQUFPa0MsVUFBVTtBQUNyQjtBQUVPLFNBQVNLLGNBQWNBLENBQUNDLFVBQVUsRUFBRVIsS0FBSyxFQUFFUyxXQUFXLEVBQUU7RUFDM0QsSUFBSUMsU0FBUyxHQUFHRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDO0VBQzVDLElBQUlaLEtBQUssR0FBR1UsU0FBUyxFQUFFO0lBQ25CRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNFLEVBQUUsQ0FBQ2IsS0FBSyxDQUFDLENBQUNjLE1BQU0sQ0FBQ0wsV0FBVyxDQUFDO0VBQ3ZELENBQUMsTUFBTTtJQUNIRCxVQUFVLENBQUNiLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDO0VBQ2xDO0VBQ0EsT0FBTyxJQUFJO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3V0aWxzLmpzP2QwZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIEhUTUwgYm9keS5cbiAqIEB0eXBlIHsqfGpRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBfJGJvZHk7XG5jb25zdCBhcmdfbmFtZXNfcmVnID0gLyhbXlxccyxdKykvZztcbmNvbnN0IGNvbW1lbmRfcmVnID0gLygoXFwvXFwvLiokKXwoXFwvXFwqW1xcc1xcU10qP1xcKlxcLykpL21nO1xuXG4vKipcbiAqIGdldEJvZHkgcmV0dXJucyB0aGUgJGJvZHkgalF1ZXJ5IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9IC0gYm9keSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgIGlmICghXyRib2R5KSB7XG4gICAgICAgIF8kYm9keSA9ICQoJ2JvZHknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXyRib2R5O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNcbiAqIEByZXR1cm5zIHtSZWdFeHBNYXRjaEFycmF5fCpbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtc05hbWVPZkZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgZm5zdHIgPSBmdW5jLnRvU3RyaW5nKCkucmVwbGFjZShjb21tZW5kX3JlZywgJycpO1xuICAgIHZhciByZXN1bHQgPSBmbnN0ci5zbGljZShmbnN0ci5pbmRleE9mKCcoJykgKyAxLCBmbnN0ci5pbmRleE9mKCcpJykpLm1hdGNoKGFyZ19uYW1lc19yZWcpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIHByb21pc2VEdW1teUZhY3RvcnkgZ2VuZXJhdGVzIGEgc2ltcGxlIHByb21pc2Ugd2hpY2ggcmV0dXJucyBpbnN0YW50bHkuXG4gKiBAcmV0dXJuIHtQcm9taXNlfSB3aW5kb3cudXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VEdW1teUZhY3RvcnkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvVGFnTmFtZShzdHIpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvW0EtWl0vZywgbGV0dGVyID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvWzAtOV0rL2csIG51bWJlciA9PiBgLSR7bnVtYmVyfWApO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlstXS9nLCBgYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9DYW1lbENhc2Uoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgJHtsZXR0ZXJbMV0udG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCAke2xldHRlclsxXS50b1VwcGVyQ2FzZSgpfWApLnJlcGxhY2UoL14uL2csIGxldHRlciA9PiBgJHtsZXR0ZXIudG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5jb25zdCBjb3B5UHJvcHMgPSAodGFyZ2V0Q2xhc3MsIHNvdXJjZUNsYXNzKSA9PiB7XG4gICAgbGV0IHNvdXJjZSA9IHNvdXJjZUNsYXNzO1xuICAgIGxldCBwcm9wTmFtZXNUYXJnZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXRDbGFzcy5wcm90b3R5cGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldENsYXNzLnByb3RvdHlwZSkpXG4gICAgd2hpbGUgKHNvdXJjZS5uYW1lICE9PSAnJykge1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UucHJvdG90eXBlKVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZS5wcm90b3R5cGUpKVxuICAgICAgICAgICAgLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcC5tYXRjaCgvXig/OmNvbnN0cnVjdG9yfHByb3RvdHlwZXxhcmd1bWVudHN8Y2FsbGVyfG5hbWV8YmluZHxjYWxsfGFwcGx5fHRvU3RyaW5nfGxlbmd0aCkkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcHJvcE5hbWVzVGFyZ2V0LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lc1RhcmdldC5wdXNoKHByb3ApO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q2xhc3MucHJvdG90eXBlLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZS5wcm90b3R5cGUsIHByb3ApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgc291cmNlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gYmFzZUNsYXNzXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7dHlwZW9mIEFic3RyYWN0U0RDfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdpbGVBZ2dyZWdhdGlvbihiYXNlQ2xhc3MsIC4uLm1peGlucykge1xuXG4gICAgbGV0IGJhc2UgPSB7XG4gICAgICAgIFtiYXNlQ2xhc3MubmFtZV06IGNsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7XG4gICAgICAgICAgICAgICAgbGV0IF9taXhpbnMgPSB7fTtcbiAgICAgICAgICAgICAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld01peGluO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIChuZXdNaXhpbiA9IG5ldyBtaXhpbigpKSk7XG4gICAgICAgICAgICAgICAgICAgIG5ld01peGluLl90YWdOYW1lID0gbWl4aW4ucHJvdG90eXBlLl90YWdOYW1lO1xuICAgICAgICAgICAgICAgICAgICBuZXdNaXhpbi5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIF9taXhpbnNbbWl4aW4ubmFtZV0gPSBuZXdNaXhpbjtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IGJhc2VDbGFzcygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taXhpbnMgPSBfbWl4aW5zO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHN0YXRpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzLm5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRpYyBjbGFzc05hbWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgbWl4aW5zKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9taXhpbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9W2Jhc2VDbGFzcy5uYW1lXTtcblxuICAgIGNvcHlQcm9wcyhiYXNlLCBiYXNlQ2xhc3MpO1xuXG4gICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgIGNvcHlQcm9wcyhiYXNlLCBtaXhpbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmFzZTtcblxufVxuXG5mdW5jdGlvbiBjc3JmU2FmZU1ldGhvZChtZXRob2QpIHtcbiAgICAvLyB0aGVzZSBIVFRQIG1ldGhvZHMgZG8gbm90IHJlcXVpcmUgQ1NSRiBwcm90ZWN0aW9uXG4gICAgcmV0dXJuICgvXihHRVR8SEVBRHxPUFRJT05TfFRSQUNFKSQvLnRlc3QobWV0aG9kKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsIHVybCwgbWV0aG9kKSB7XG4gICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgIHVybDogdXJsLCAgLy9TZXJ2ZXIgc2NyaXB0IHRvIHByb2Nlc3MgZGF0YVxuICAgICAgICB0eXBlOiBtZXRob2QgfHwgJ1BPU1QnLFxuICAgICAgICB4aHI6IGZ1bmN0aW9uICgpIHsgIC8vIEN1c3RvbSBYTUxIdHRwUmVxdWVzdFxuICAgICAgICAgICAgdmFyIG15WGhyID0gJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICAgICAgICBpZiAobXlYaHIudXBsb2FkKSB7IC8vIENoZWNrIGlmIHVwbG9hZCBwcm9wZXJ0eSBleGlzdHNcbiAgICAgICAgICAgICAgICBteVhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24sIGZhbHNlKTsgLy8gRm9yIGhhbmRsaW5nIHRoZSBwcm9ncmVzcyBvZiB0aGUgdXBsb2FkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbXlYaHI7XG4gICAgICAgIH0sXG4gICAgICAgIC8vRm9ybSBkYXRhXG4gICAgICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICAgICAvL09wdGlvbnMgdG8gdGVsbCBqUXVlcnkgbm90IHRvIHByb2Nlc3MgZGF0YSBvciB3b3JyeSBhYm91dCBjb250ZW50LXR5cGUuXG4gICAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICh4aHIsIHNldHRpbmdzKSB7XG4gICAgICAgICAgICBpZiAoIWNzcmZTYWZlTWV0aG9kKHNldHRpbmdzLnR5cGUpICYmICF0aGlzLmNyb3NzRG9tYWluKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uKGUpIHtcbiAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHZhciBwZXJjZW50VmFsID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHZhciAkcHJvZ3Jlc3NDb250YWluZXIgPSAkKCcucHJvZ3Jlc3MtY29udGFpbmVyJyk7XG4gICAgICAgIGlmIChwZXJjZW50VmFsID09PSAxMDApIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY2VudFZhbCArPSAnJSc7XG5cbiAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmZpbmQoJy5wcm9ncmVzcy1iYXInKS5jc3Moeyd3aWR0aCc6IHBlcmNlbnRWYWx9KS50ZXh0KHBlcmNlbnRWYWwpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKHBhcmFtRWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtRWxlbWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbGxlciAmJiB0eXBlb2YgY29udHJvbGxlcltwYXJhbUVsZW1lbnRdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XS5iaW5kKGNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF07XG4gICAgfVxuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG4gICAgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJhbUVsZW1lbnQgPT09ICd0cnVlJztcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNJbnRSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChwYXJhbUVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzRmxvYXRSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHBhcmFtRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJhbUVsZW1lbnQuc3Vic3RyKDEsIHBhcmFtRWxlbWVudC5sZW5ndGggLSAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1FbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXVpZHY0KCkge1xuICAgIHJldHVybiAoWzFlN10gKyAtMWUzICsgLTRlMyArIC04ZTMgKyAtMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PlxuICAgICAgICAoYyBeIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgMTUgPj4gYyAvIDQpLnRvU3RyaW5nKDE2KVxuICAgICk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKSB7XG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykucmVtb3ZlKCk7XG4gICAgJGZvcm0uZmluZCgnLm5vbi1maWVsZC1lcnJvcnMnKS5yZW1vdmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yc0luRm9ybSgkZm9ybSwgJHJlc0Zvcm0pIHtcbiAgICAkcmVzRm9ybSA9ICQoJzxkaXY+JykuYXBwZW5kKCRyZXNGb3JtKTtcblxuICAgICRmb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJykuZmluZCgnLmFsZXJ0LWRhbmdlcicpLnNhZmVSZW1vdmUoKTtcbiAgICAkZm9ybS5maW5kKCcubm9uLWZpZWxkLWVycm9ycycpLnNhZmVSZW1vdmUoKTtcbiAgICBsZXQgJGZpbGVfY29udGFpbmVyID0gJHJlc0Zvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpO1xuICAgICRmb3JtLmZpbmQoJ2lucHV0W3R5cGU9ZmlsZV0nKS5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKCRmaWxlX2NvbnRhaW5lcltpbmRleF0pO1xuICAgIH0pO1xuXG4gICAgbGV0IGhhc05vRXJyb3IgPSAkcmVzRm9ybS5maW5kKCcubm9uLWZpZWxkLWVycm9ycycpLmluc2VydEFmdGVyKCRmb3JtLmZpbmQoJy5oaWRkZW4tZm9ybS1maWVsZHMnKSkubGVuZ3RoID09PSAwO1xuICAgICRyZXNGb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFzTm9FcnJvciA9IGZhbHNlO1xuICAgICAgICBsZXQgJHJlc0Vycm9yRmllbGQgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gJHJlc0Vycm9yRmllbGQuZGF0YSgnYXV0by1pZCcpO1xuICAgICAgICBsZXQgJGVycm9yRmllbGQgPSAkZm9ybS5maW5kKCcuZm9ybS1ncm91cC4nICsgY2xhc3NOYW1lKTtcbiAgICAgICAgJGVycm9yRmllbGQuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpO1xuICAgICAgICAkZXJyb3JGaWVsZC5maW5kKCcuZm9ybS1pbnB1dC1jb250YWluZXInKS5hcHBlbmQoJHJlc0Vycm9yRmllbGQuZmluZCgnLmFsZXJ0LWRhbmdlcicpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBoYXNOb0Vycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganF1ZXJ5SW5zZXJ0QXQoJGNvbnRhaW5lciwgaW5kZXgsICRuZXdFbGVtZW50KSB7XG4gICAgbGV0IGxhc3RJbmRleCA9ICRjb250YWluZXIuY2hpbGRyZW4oKS5zaXplKCk7XG4gICAgaWYgKGluZGV4IDwgbGFzdEluZGV4KSB7XG4gICAgICAgICRjb250YWluZXIuY2hpbGRyZW4oKS5lcShpbmRleCkuYmVmb3JlKCRuZXdFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkY29udGFpbmVyLmFwcGVuZCgkbmV3RWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufVxuIl0sIm5hbWVzIjpbIl8kYm9keSIsImFyZ19uYW1lc19yZWciLCJjb21tZW5kX3JlZyIsImdldEJvZHkiLCIkIiwiZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24iLCJmdW5jIiwiZm5zdHIiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZXN1bHQiLCJzbGljZSIsImluZGV4T2YiLCJtYXRjaCIsInByb21pc2VEdW1teUZhY3RvcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbWVsQ2FzZVRvVGFnTmFtZSIsInN0ciIsImxldHRlciIsInRvTG93ZXJDYXNlIiwibnVtYmVyIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidG9VcHBlckNhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJjb3B5UHJvcHMiLCJ0YXJnZXRDbGFzcyIsInNvdXJjZUNsYXNzIiwic291cmNlIiwicHJvcE5hbWVzVGFyZ2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsImNvbmNhdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5hbWUiLCJmb3JFYWNoIiwicHJvcCIsImluY2x1ZGVzIiwicHVzaCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiYmFzZUNsYXNzIiwibWl4aW5zIiwiYmFzZSIsImNvbnN0cnVjdG9yIiwiX2FyZ3MiLCJfbWl4aW5zIiwibWl4aW4iLCJuZXdNaXhpbiIsImFzc2lnbiIsIl90YWdOYW1lIiwiX2lzTWl4aW4iLCJjbGFzc05hbWUiLCJjc3JmU2FmZU1ldGhvZCIsIm1ldGhvZCIsInRlc3QiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJmb3JtRGF0YSIsInVybCIsImFqYXgiLCJ0eXBlIiwieGhyIiwibXlYaHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwicHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uIiwiZGF0YSIsImNhY2hlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJzZXR0aW5ncyIsImNyb3NzRG9tYWluIiwic2V0UmVxdWVzdEhlYWRlciIsIndpbmRvdyIsIkNTUkZfVE9LRU4iLCJlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInBlcmNlbnRWYWwiLCJNYXRoIiwicm91bmQiLCJsb2FkZWQiLCJ0b3RhbCIsIiRwcm9ncmVzc0NvbnRhaW5lciIsImhpZGUiLCJzaG93IiwiZmluZCIsImNzcyIsInRleHQiLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJwYXJhbUVsZW1lbnQiLCJjb250cm9sbGVyIiwiYmluZCIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidW5kZWZpbmVkIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyIiwibGVuZ3RoIiwidXVpZHY0IiwiYyIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQ4QXJyYXkiLCJjbGVhckVycm9yc0luRm9ybSIsIiRmb3JtIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJzZXRFcnJvcnNJbkZvcm0iLCIkcmVzRm9ybSIsImFwcGVuZCIsInNhZmVSZW1vdmUiLCIkZmlsZV9jb250YWluZXIiLCJwYXJlbnQiLCJlYWNoIiwiaW5kZXgiLCJyZXBsYWNlV2l0aCIsImhhc05vRXJyb3IiLCJpbnNlcnRBZnRlciIsIiRyZXNFcnJvckZpZWxkIiwiJGVycm9yRmllbGQiLCJhZGRDbGFzcyIsImpxdWVyeUluc2VydEF0IiwiJGNvbnRhaW5lciIsIiRuZXdFbGVtZW50IiwibGFzdEluZGV4IiwiY2hpbGRyZW4iLCJzaXplIiwiZXEiLCJiZWZvcmUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n");
117
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /((?<=^|,\\s*)[^\\s,]+)/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $('body');\n }\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, '');\n var result = fnstr.slice(fnstr.indexOf('(') + 1, fnstr.indexOf(')')).match(arg_names_reg);\n if (!result) {\n return [];\n }\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, number => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, letter => `${letter[1].toUpperCase()}`);\n return str;\n}\nfunction tagNameToReadableName(str) {\n str = str.replace(/-./g, letter => ` ${letter[1].toUpperCase()}`).replace(/^./g, letter => `${letter.toUpperCase()}`);\n return str;\n}\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(targetClass.prototype).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== '') {\n Object.getOwnPropertyNames(source.prototype).concat(Object.getOwnPropertySymbols(source.prototype)).forEach(prop => {\n if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {\n return;\n }\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(targetClass.prototype, prop, Object.getOwnPropertyDescriptor(source.prototype, prop));\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {typeof AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach(mixin => {\n let newMixin;\n Object.assign(this, newMixin = new mixin());\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n static get name() {\n return baseClass.name;\n }\n static className() {\n return this.name;\n }\n get mixins() {\n return this._mixins;\n }\n }\n }[baseClass.name];\n copyProps(base, baseClass);\n mixins.forEach(mixin => {\n copyProps(base, mixin);\n });\n return base;\n}\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url,\n //Server script to process data\n type: method || 'POST',\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }\n });\n}\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round(e.loaded / e.total * 100);\n var $progressContainer = $('.progress-container');\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n percentVal += '%';\n $progressContainer.find('.progress-bar').css({\n 'width': percentVal\n }).text(percentVal);\n }\n}\nfunction checkIfParamNumberBoolOrString(paramElement, controller = null) {\n if (typeof paramElement !== 'string') {\n return paramElement;\n }\n if (controller && typeof controller[paramElement] !== 'undefined') {\n if (typeof controller[paramElement] === 'function') {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (paramElement.match(isBoolReg)) {\n return paramElement === 'true';\n } else if (paramElement === 'undefined') {\n return undefined;\n } else if (paramElement.toLowerCase() === 'none') {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n return paramElement;\n}\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\nfunction clearErrorsInForm($form) {\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').remove();\n $form.find('.non-field-errors').remove();\n}\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $('<div>').append($resForm);\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').safeRemove();\n $form.find('.non-field-errors').safeRemove();\n let $file_container = $resForm.find('input[type=file]').parent();\n $form.find('input[type=file]').parent().each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n let hasNoError = $resForm.find('.non-field-errors').insertAfter($form.find('.hidden-form-fields')).length === 0;\n $resForm.find('.has-error').each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data('auto-id');\n let $errorField = $form.find('.form-group.' + className);\n $errorField.addClass('has-error');\n $errorField.find('.form-input-container').append($resErrorField.find('.alert-danger'));\n });\n return hasNoError;\n}\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxNQUFNO0FBQ1YsTUFBTUMsYUFBYSxHQUFHLHVCQUF1QjtBQUM3QyxNQUFNQyxXQUFXLEdBQUcsa0NBQWtDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsT0FBT0EsQ0FBQSxFQUFHO0VBQ3RCLElBQUksQ0FBQ0gsTUFBTSxFQUFFO0lBQ1RBLE1BQU0sR0FBR0ksQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN0QjtFQUVBLE9BQU9KLE1BQU07QUFDakI7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNLLHVCQUF1QkEsQ0FBQ0MsSUFBSSxFQUFFO0VBQzFDLElBQUlDLEtBQUssR0FBR0QsSUFBSSxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUNQLFdBQVcsRUFBRSxFQUFFLENBQUM7RUFDcEQsSUFBSVEsTUFBTSxHQUFHSCxLQUFLLENBQUNJLEtBQUssQ0FBQ0osS0FBSyxDQUFDSyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFTCxLQUFLLENBQUNLLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUNaLGFBQWEsQ0FBQztFQUN6RixJQUFJLENBQUNTLE1BQU0sRUFBRTtJQUNULE9BQU8sRUFBRTtFQUNiO0VBRUEsT0FBT0EsTUFBTTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNJLG1CQUFtQkEsQ0FBQSxFQUFHO0VBQ2xDLE9BQU8sSUFBSUMsT0FBTyxDQUFDLFVBQVVDLE9BQU8sRUFBRTtJQUNsQ0EsT0FBTyxDQUFDLENBQUM7RUFDYixDQUFDLENBQUM7QUFDTjtBQUVPLFNBQVNDLGtCQUFrQkEsQ0FBQ0MsR0FBRyxFQUFFO0VBQ3BDQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLFFBQVEsRUFBRVUsTUFBTSxJQUFJLElBQUlBLE1BQU0sQ0FBQ0MsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ2pFRixHQUFHLEdBQUdBLEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLFNBQVMsRUFBRVksTUFBTSxJQUFJLElBQUlBLE1BQU0sRUFBRSxDQUFDO0VBQ3BELE9BQU9ILEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkM7QUFFTyxTQUFTYSxrQkFBa0JBLENBQUNKLEdBQUcsRUFBRTtFQUNwQ0EsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUVVLE1BQU0sSUFBSSxHQUFHQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNoRSxPQUFPTCxHQUFHO0FBQ2Q7QUFFTyxTQUFTTSxxQkFBcUJBLENBQUNOLEdBQUcsRUFBRTtFQUN2Q0EsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUVVLE1BQU0sSUFBSSxJQUFJQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDZCxPQUFPLENBQUMsS0FBSyxFQUFFVSxNQUFNLElBQUksR0FBR0EsTUFBTSxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckgsT0FBT0wsR0FBRztBQUNkO0FBRUEsTUFBTU8sU0FBUyxHQUFHQSxDQUFDQyxXQUFXLEVBQUVDLFdBQVcsS0FBSztFQUM1QyxJQUFJQyxNQUFNLEdBQUdELFdBQVc7RUFDeEIsSUFBSUUsZUFBZSxHQUFHQyxNQUFNLENBQUNDLG1CQUFtQixDQUFDTCxXQUFXLENBQUNNLFNBQVMsQ0FBQyxDQUFDQyxNQUFNLENBQUNILE1BQU0sQ0FBQ0kscUJBQXFCLENBQUNSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDLENBQUM7RUFDbkksT0FBT0osTUFBTSxDQUFDTyxJQUFJLEtBQUssRUFBRSxFQUFFO0lBQ3ZCTCxNQUFNLENBQUNDLG1CQUFtQixDQUFDSCxNQUFNLENBQUNJLFNBQVMsQ0FBQyxDQUN2Q0MsTUFBTSxDQUFDSCxNQUFNLENBQUNJLHFCQUFxQixDQUFDTixNQUFNLENBQUNJLFNBQVMsQ0FBQyxDQUFDLENBQ3RESSxPQUFPLENBQUVDLElBQUksSUFBSztNQUNmLElBQUlBLElBQUksQ0FBQ3hCLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxFQUFFO1FBQ2pHO01BQ0o7TUFFQSxJQUFJLENBQUNnQixlQUFlLENBQUNTLFFBQVEsQ0FBQ0QsSUFBSSxDQUFDLEVBQUU7UUFDakNSLGVBQWUsQ0FBQ1UsSUFBSSxDQUFDRixJQUFJLENBQUM7UUFDMUJQLE1BQU0sQ0FBQ1UsY0FBYyxDQUFDZCxXQUFXLENBQUNNLFNBQVMsRUFBRUssSUFBSSxFQUFFUCxNQUFNLENBQUNXLHdCQUF3QixDQUFDYixNQUFNLENBQUNJLFNBQVMsRUFBRUssSUFBSSxDQUFDLENBQUM7TUFDL0c7SUFDSixDQUFDLENBQUM7SUFDTlQsTUFBTSxHQUFHRSxNQUFNLENBQUNZLGNBQWMsQ0FBQ2QsTUFBTSxDQUFDO0VBQzFDO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZSxnQkFBZ0JBLENBQUNDLFNBQVMsRUFBRSxHQUFHQyxNQUFNLEVBQUU7RUFFbkQsSUFBSUMsSUFBSSxHQUFHO0lBQ1AsQ0FBQ0YsU0FBUyxDQUFDVCxJQUFJLEdBQUcsTUFBTTtNQUNwQlksV0FBV0EsQ0FBQyxHQUFHQyxLQUFLLEVBQUU7UUFDbEIsSUFBSUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQkosTUFBTSxDQUFDVCxPQUFPLENBQUVjLEtBQUssSUFBSztVQUN0QixJQUFJQyxRQUFRO1VBQ1pyQixNQUFNLENBQUNzQixNQUFNLENBQUMsSUFBSSxFQUFHRCxRQUFRLEdBQUcsSUFBSUQsS0FBSyxDQUFDLENBQUUsQ0FBQztVQUM3Q0MsUUFBUSxDQUFDRSxRQUFRLEdBQUdILEtBQUssQ0FBQ2xCLFNBQVMsQ0FBQ3FCLFFBQVE7VUFDNUNGLFFBQVEsQ0FBQ0csUUFBUSxHQUFHLElBQUk7VUFDeEJMLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDZixJQUFJLENBQUMsR0FBR2dCLFFBQVE7UUFDbEMsQ0FBQyxDQUFDO1FBRUZyQixNQUFNLENBQUNzQixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUlSLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDSyxPQUFPLEdBQUdBLE9BQU87TUFDMUI7TUFHQSxXQUFXZCxJQUFJQSxDQUFBLEVBQUc7UUFDZCxPQUFPUyxTQUFTLENBQUNULElBQUk7TUFDekI7TUFFQSxPQUFPb0IsU0FBU0EsQ0FBQSxFQUFHO1FBQ2YsT0FBTyxJQUFJLENBQUNwQixJQUFJO01BQ3BCO01BRUEsSUFBSVUsTUFBTUEsQ0FBQSxFQUFHO1FBQ1QsT0FBTyxJQUFJLENBQUNJLE9BQU87TUFDdkI7SUFDSjtFQUNKLENBQUMsQ0FBQ0wsU0FBUyxDQUFDVCxJQUFJLENBQUM7RUFFakJWLFNBQVMsQ0FBQ3FCLElBQUksRUFBRUYsU0FBUyxDQUFDO0VBRTFCQyxNQUFNLENBQUNULE9BQU8sQ0FBRWMsS0FBSyxJQUFLO0lBQ3RCekIsU0FBUyxDQUFDcUIsSUFBSSxFQUFFSSxLQUFLLENBQUM7RUFDMUIsQ0FBQyxDQUFDO0VBRUYsT0FBT0osSUFBSTtBQUVmO0FBRUEsU0FBU1UsY0FBY0EsQ0FBQ0MsTUFBTSxFQUFFO0VBQzVCO0VBQ0EsT0FBUSw0QkFBNEIsQ0FBQ0MsSUFBSSxDQUFDRCxNQUFNLENBQUM7QUFDckQ7QUFFTyxTQUFTRSxrQkFBa0JBLENBQUNDLFFBQVEsRUFBRUMsR0FBRyxFQUFFSixNQUFNLEVBQUU7RUFDdEQsT0FBT3JELENBQUMsQ0FBQzBELElBQUksQ0FBQztJQUNWRCxHQUFHLEVBQUVBLEdBQUc7SUFBRztJQUNYRSxJQUFJLEVBQUVOLE1BQU0sSUFBSSxNQUFNO0lBQ3RCTyxHQUFHLEVBQUUsU0FBQUEsQ0FBQSxFQUFZO01BQUc7TUFDaEIsSUFBSUMsS0FBSyxHQUFHN0QsQ0FBQyxDQUFDOEQsWUFBWSxDQUFDRixHQUFHLENBQUMsQ0FBQztNQUNoQyxJQUFJQyxLQUFLLENBQUNFLE1BQU0sRUFBRTtRQUFFO1FBQ2hCRixLQUFLLENBQUNFLE1BQU0sQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ2hGO01BQ0EsT0FBT0osS0FBSztJQUNoQixDQUFDO0lBQ0Q7SUFDQUssSUFBSSxFQUFFVixRQUFRO0lBQ2Q7SUFDQVcsS0FBSyxFQUFFLEtBQUs7SUFDWkMsV0FBVyxFQUFFLEtBQUs7SUFDbEJDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCQyxVQUFVLEVBQUUsU0FBQUEsQ0FBVVYsR0FBRyxFQUFFVyxRQUFRLEVBQUU7TUFDakMsSUFBSSxDQUFDbkIsY0FBYyxDQUFDbUIsUUFBUSxDQUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ2EsV0FBVyxFQUFFO1FBQ3JEWixHQUFHLENBQUNhLGdCQUFnQixDQUFDLGFBQWEsRUFBRUMsTUFBTSxDQUFDQyxVQUFVLENBQUM7TUFDMUQ7SUFDSjtFQUNKLENBQUMsQ0FBQztBQUNOO0FBRUEsU0FBU1Ysd0JBQXdCQSxDQUFDVyxDQUFDLEVBQUU7RUFDakMsSUFBSUEsQ0FBQyxDQUFDQyxnQkFBZ0IsRUFBRTtJQUNwQixJQUFJQyxVQUFVLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFFSixDQUFDLENBQUNLLE1BQU0sR0FBR0wsQ0FBQyxDQUFDTSxLQUFLLEdBQUksR0FBRyxDQUFDO0lBQ3ZELElBQUlDLGtCQUFrQixHQUFHbkYsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQ2pELElBQUk4RSxVQUFVLEtBQUssR0FBRyxFQUFFO01BQ3BCSyxrQkFBa0IsQ0FBQ0MsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxNQUFNO01BQ0hELGtCQUFrQixDQUFDRSxJQUFJLENBQUMsQ0FBQztJQUM3QjtJQUVBUCxVQUFVLElBQUksR0FBRztJQUVqQkssa0JBQWtCLENBQUNHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ0MsR0FBRyxDQUFDO01BQUMsT0FBTyxFQUFFVDtJQUFVLENBQUMsQ0FBQyxDQUFDVSxJQUFJLENBQUNWLFVBQVUsQ0FBQztFQUN4RjtBQUNKO0FBR08sU0FBU1csOEJBQThCQSxDQUFDQyxZQUFZLEVBQUVDLFVBQVUsR0FBRyxJQUFJLEVBQUU7RUFDNUUsSUFBSSxPQUFPRCxZQUFZLEtBQUssUUFBUSxFQUFFO0lBQ2xDLE9BQU9BLFlBQVk7RUFDdkI7RUFFQSxJQUFJQyxVQUFVLElBQUksT0FBT0EsVUFBVSxDQUFDRCxZQUFZLENBQUMsS0FBSyxXQUFXLEVBQUU7SUFDL0QsSUFBSSxPQUFPQyxVQUFVLENBQUNELFlBQVksQ0FBQyxLQUFLLFVBQVUsRUFBRTtNQUNoRCxPQUFPQyxVQUFVLENBQUNELFlBQVksQ0FBQyxDQUFDRSxJQUFJLENBQUNELFVBQVUsQ0FBQztJQUNwRDtJQUNBLE9BQU9BLFVBQVUsQ0FBQ0QsWUFBWSxDQUFDO0VBQ25DO0VBRUEsSUFBSUcsVUFBVSxHQUFHLGVBQWU7RUFDaEMsSUFBSUMsUUFBUSxHQUFHLFNBQVM7RUFDeEIsSUFBSUMsU0FBUyxHQUFHLGdCQUFnQjtFQUNoQyxJQUFJQyxXQUFXLEdBQUcsK0JBQStCO0VBRWpELElBQUlOLFlBQVksQ0FBQ2pGLEtBQUssQ0FBQ3NGLFNBQVMsQ0FBQyxFQUFFO0lBQy9CLE9BQU9MLFlBQVksS0FBSyxNQUFNO0VBQ2xDLENBQUMsTUFBTSxJQUFJQSxZQUFZLEtBQUssV0FBVyxFQUFFO0lBQ3JDLE9BQU9PLFNBQVM7RUFDcEIsQ0FBQyxNQUFNLElBQUlQLFlBQVksQ0FBQzFFLFdBQVcsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO0lBQzlDLE9BQU8sSUFBSTtFQUNmLENBQUMsTUFBTSxJQUFJMEUsWUFBWSxDQUFDakYsS0FBSyxDQUFDcUYsUUFBUSxDQUFDLEVBQUU7SUFDckMsT0FBT0ksUUFBUSxDQUFDUixZQUFZLENBQUM7RUFDakMsQ0FBQyxNQUFNLElBQUlBLFlBQVksQ0FBQ2pGLEtBQUssQ0FBQ29GLFVBQVUsQ0FBQyxFQUFFO0lBQ3ZDLE9BQU9NLFVBQVUsQ0FBQ1QsWUFBWSxDQUFDO0VBQ25DLENBQUMsTUFBTSxJQUFJQSxZQUFZLENBQUNqRixLQUFLLENBQUN1RixXQUFXLENBQUMsRUFBRTtJQUN4QyxPQUFPTixZQUFZLENBQUNVLE1BQU0sQ0FBQyxDQUFDLEVBQUVWLFlBQVksQ0FBQ1csTUFBTSxHQUFHLENBQUMsQ0FBQztFQUMxRDtFQUVBLE9BQU9YLFlBQVk7QUFDdkI7QUFFTyxTQUFTWSxNQUFNQSxDQUFBLEVBQUc7RUFDckIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUVqRyxPQUFPLENBQUMsUUFBUSxFQUFFa0csQ0FBQyxJQUMzRCxDQUFDQSxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0MsZUFBZSxDQUFDLElBQUlDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSUgsQ0FBQyxHQUFHLENBQUMsRUFBRW5HLFFBQVEsQ0FBQyxFQUFFLENBQ2hGLENBQUM7QUFDTDtBQUdPLFNBQVN1RyxpQkFBaUJBLENBQUNDLEtBQUssRUFBRTtFQUNyQ0EsS0FBSyxDQUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDdUIsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDd0IsTUFBTSxDQUFDLENBQUM7RUFDaEZGLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDd0IsTUFBTSxDQUFDLENBQUM7QUFDNUM7QUFFTyxTQUFTQyxlQUFlQSxDQUFDSCxLQUFLLEVBQUVJLFFBQVEsRUFBRTtFQUM3Q0EsUUFBUSxHQUFHaEgsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDaUgsTUFBTSxDQUFDRCxRQUFRLENBQUM7RUFFdENKLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQ3VCLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzRCLFVBQVUsQ0FBQyxDQUFDO0VBQ3BGTixLQUFLLENBQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzRCLFVBQVUsQ0FBQyxDQUFDO0VBQzVDLElBQUlDLGVBQWUsR0FBR0gsUUFBUSxDQUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM4QixNQUFNLENBQUMsQ0FBQztFQUNoRVIsS0FBSyxDQUFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM4QixNQUFNLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsVUFBVUMsS0FBSyxFQUFFO0lBQzFEdEgsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDdUgsV0FBVyxDQUFDSixlQUFlLENBQUNHLEtBQUssQ0FBQyxDQUFDO0VBQy9DLENBQUMsQ0FBQztFQUVGLElBQUlFLFVBQVUsR0FBR1IsUUFBUSxDQUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUNtQyxXQUFXLENBQUNiLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNlLE1BQU0sS0FBSyxDQUFDO0VBQy9HVyxRQUFRLENBQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMrQixJQUFJLENBQUMsWUFBWTtJQUN6Q0csVUFBVSxHQUFHLEtBQUs7SUFDbEIsSUFBSUUsY0FBYyxHQUFHMUgsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1QixJQUFJbUQsU0FBUyxHQUFHdUUsY0FBYyxDQUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM5QyxJQUFJeUQsV0FBVyxHQUFHZixLQUFLLENBQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHbkMsU0FBUyxDQUFDO0lBQ3hEd0UsV0FBVyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ2pDRCxXQUFXLENBQUNyQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzJCLE1BQU0sQ0FBQ1MsY0FBYyxDQUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0VBQzFGLENBQUMsQ0FBQztFQUVGLE9BQU9rQyxVQUFVO0FBQ3JCO0FBRU8sU0FBU0ssY0FBY0EsQ0FBQ0MsVUFBVSxFQUFFUixLQUFLLEVBQUVTLFdBQVcsRUFBRTtFQUMzRCxJQUFJQyxTQUFTLEdBQUdGLFVBQVUsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUM7RUFDNUMsSUFBSVosS0FBSyxHQUFHVSxTQUFTLEVBQUU7SUFDbkJGLFVBQVUsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQ0UsRUFBRSxDQUFDYixLQUFLLENBQUMsQ0FBQ2MsTUFBTSxDQUFDTCxXQUFXLENBQUM7RUFDdkQsQ0FBQyxNQUFNO0lBQ0hELFVBQVUsQ0FBQ2IsTUFBTSxDQUFDYyxXQUFXLENBQUM7RUFDbEM7RUFDQSxPQUFPLElBQUk7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanM/ZDBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlZmVyZW5jZSB0byB0aGUgSFRNTCBib2R5LlxuICogQHR5cGUgeyp8alF1ZXJ5fEhUTUxFbGVtZW50fVxuICogQHByaXZhdGVcbiAqL1xubGV0IF8kYm9keTtcbmNvbnN0IGFyZ19uYW1lc19yZWcgPSAvKCg/PD1efCxcXHMqKVteXFxzLF0rKS9nO1xuY29uc3QgY29tbWVuZF9yZWcgPSAvKChcXC9cXC8uKiQpfChcXC9cXCpbXFxzXFxTXSo/XFwqXFwvKSkvbWc7XG5cbi8qKlxuICogZ2V0Qm9keSByZXR1cm5zIHRoZSAkYm9keSBqUXVlcnkgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIHsqfGpRdWVyeXxIVE1MRWxlbWVudH0gLSBib2R5IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvZHkoKSB7XG4gICAgaWYgKCFfJGJvZHkpIHtcbiAgICAgICAgXyRib2R5ID0gJCgnYm9keScpO1xuICAgIH1cblxuICAgIHJldHVybiBfJGJvZHk7XG59XG5cblxuLyoqXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1xuICogQHJldHVybnMge1JlZ0V4cE1hdGNoQXJyYXl8KltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBmbnN0ciA9IGZ1bmMudG9TdHJpbmcoKS5yZXBsYWNlKGNvbW1lbmRfcmVnLCAnJyk7XG4gICAgdmFyIHJlc3VsdCA9IGZuc3RyLnNsaWNlKGZuc3RyLmluZGV4T2YoJygnKSArIDEsIGZuc3RyLmluZGV4T2YoJyknKSkubWF0Y2goYXJnX25hbWVzX3JlZyk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogcHJvbWlzZUR1bW15RmFjdG9yeSBnZW5lcmF0ZXMgYSBzaW1wbGUgcHJvbWlzZSB3aGljaCByZXR1cm5zIGluc3RhbnRseS5cbiAqIEByZXR1cm4ge1Byb21pc2V9IHdpbmRvdy51dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUR1bW15RmFjdG9yeSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FtZWxDYXNlVG9UYWdOYW1lKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9bQS1aXS9nLCBsZXR0ZXIgPT4gYC0ke2xldHRlci50b0xvd2VyQ2FzZSgpfWApO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9bMC05XSsvZywgbnVtYmVyID0+IGAtJHtudW1iZXJ9YCk7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eWy1dL2csIGBgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ05hbWVUb0NhbWVsQ2FzZShzdHIpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS4vZywgbGV0dGVyID0+IGAke2xldHRlclsxXS50b1VwcGVyQ2FzZSgpfWApO1xuICAgIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgICR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCkucmVwbGFjZSgvXi4vZywgbGV0dGVyID0+IGAke2xldHRlci50b1VwcGVyQ2FzZSgpfWApO1xuICAgIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGNvcHlQcm9wcyA9ICh0YXJnZXRDbGFzcywgc291cmNlQ2xhc3MpID0+IHtcbiAgICBsZXQgc291cmNlID0gc291cmNlQ2xhc3M7XG4gICAgbGV0IHByb3BOYW1lc1RhcmdldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldENsYXNzLnByb3RvdHlwZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0Q2xhc3MucHJvdG90eXBlKSlcbiAgICB3aGlsZSAoc291cmNlLm5hbWUgIT09ICcnKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZS5wcm90b3R5cGUpXG4gICAgICAgICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlLnByb3RvdHlwZSkpXG4gICAgICAgICAgICAuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wLm1hdGNoKC9eKD86Y29uc3RydWN0b3J8cHJvdG90eXBlfGFyZ3VtZW50c3xjYWxsZXJ8bmFtZXxiaW5kfGNhbGx8YXBwbHl8dG9TdHJpbmd8bGVuZ3RoKSQvKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wTmFtZXNUYXJnZXQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWVzVGFyZ2V0LnB1c2gocHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDbGFzcy5wcm90b3R5cGUsIHByb3AsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLnByb3RvdHlwZSwgcHJvcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICBzb3VyY2UgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7dHlwZW9mIEFic3RyYWN0U0RDfSBiYXNlQ2xhc3NcbiAqIEBwYXJhbSB7dHlwZW9mIEFic3RyYWN0U0RDfSBtaXhpbnNcbiAqIEByZXR1cm5zIHt0eXBlb2YgQWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG5cbiAgICBsZXQgYmFzZSA9IHtcbiAgICAgICAgW2Jhc2VDbGFzcy5uYW1lXTogY2xhc3Mge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoLi4uX2FyZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgX21peGlucyA9IHt9O1xuICAgICAgICAgICAgICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3TWl4aW47XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgKG5ld01peGluID0gbmV3IG1peGluKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWl4aW4uX3RhZ05hbWUgPSBtaXhpbi5wcm90b3R5cGUuX3RhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld01peGluLl9pc01peGluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgX21peGluc1ttaXhpbi5uYW1lXSA9IG5ld01peGluO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBuZXcgYmFzZUNsYXNzKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21peGlucyA9IF9taXhpbnM7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgc3RhdGljIGdldCBuYW1lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MubmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhdGljIGNsYXNzTmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldCBtaXhpbnMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1bYmFzZUNsYXNzLm5hbWVdO1xuXG4gICAgY29weVByb3BzKGJhc2UsIGJhc2VDbGFzcyk7XG5cbiAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgICAgY29weVByb3BzKGJhc2UsIG1peGluKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBiYXNlO1xuXG59XG5cbmZ1bmN0aW9uIGNzcmZTYWZlTWV0aG9kKG1ldGhvZCkge1xuICAgIC8vIHRoZXNlIEhUVFAgbWV0aG9kcyBkbyBub3QgcmVxdWlyZSBDU1JGIHByb3RlY3Rpb25cbiAgICByZXR1cm4gKC9eKEdFVHxIRUFEfE9QVElPTlN8VFJBQ0UpJC8udGVzdChtZXRob2QpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgdXJsLCBtZXRob2QpIHtcbiAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmwsICAvL1NlcnZlciBzY3JpcHQgdG8gcHJvY2VzcyBkYXRhXG4gICAgICAgIHR5cGU6IG1ldGhvZCB8fCAnUE9TVCcsXG4gICAgICAgIHhocjogZnVuY3Rpb24gKCkgeyAgLy8gQ3VzdG9tIFhNTEh0dHBSZXF1ZXN0XG4gICAgICAgICAgICB2YXIgbXlYaHIgPSAkLmFqYXhTZXR0aW5ncy54aHIoKTtcbiAgICAgICAgICAgIGlmIChteVhoci51cGxvYWQpIHsgLy8gQ2hlY2sgaWYgdXBsb2FkIHByb3BlcnR5IGV4aXN0c1xuICAgICAgICAgICAgICAgIG15WGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbiwgZmFsc2UpOyAvLyBGb3IgaGFuZGxpbmcgdGhlIHByb2dyZXNzIG9mIHRoZSB1cGxvYWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBteVhocjtcbiAgICAgICAgfSxcbiAgICAgICAgLy9Gb3JtIGRhdGFcbiAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgIC8vT3B0aW9ucyB0byB0ZWxsIGpRdWVyeSBub3QgdG8gcHJvY2VzcyBkYXRhIG9yIHdvcnJ5IGFib3V0IGNvbnRlbnQtdHlwZS5cbiAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGlmICghY3NyZlNhZmVNZXRob2Qoc2V0dGluZ3MudHlwZSkgJiYgIXRoaXMuY3Jvc3NEb21haW4pIHtcbiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlgtQ1NSRlRva2VuXCIsIHdpbmRvdy5DU1JGX1RPS0VOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24oZSkge1xuICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBNYXRoLnJvdW5kKChlLmxvYWRlZCAvIGUudG90YWwpICogMTAwKTtcbiAgICAgICAgdmFyICRwcm9ncmVzc0NvbnRhaW5lciA9ICQoJy5wcm9ncmVzcy1jb250YWluZXInKTtcbiAgICAgICAgaWYgKHBlcmNlbnRWYWwgPT09IDEwMCkge1xuICAgICAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJjZW50VmFsICs9ICclJztcblxuICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuZmluZCgnLnByb2dyZXNzLWJhcicpLmNzcyh7J3dpZHRoJzogcGVyY2VudFZhbH0pLnRleHQocGVyY2VudFZhbCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmcocGFyYW1FbGVtZW50LCBjb250cm9sbGVyID0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcGFyYW1FbGVtZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50O1xuICAgIH1cblxuICAgIGlmIChjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udHJvbGxlcltwYXJhbUVsZW1lbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdLmJpbmQoY29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XTtcbiAgICB9XG5cbiAgICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgICBsZXQgaXNJbnRSZWcgPSAvXi0/XFxkKyQvO1xuICAgIGxldCBpc0Jvb2xSZWcgPSAvXih0cnVlfGZhbHNlKSQvO1xuICAgIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cbiAgICBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzQm9vbFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudCA9PT0gJ3RydWUnO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50LnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0ludFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHBhcmFtRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyYW1FbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc1N0cmluZ1JlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudC5zdWJzdHIoMSwgcGFyYW1FbGVtZW50Lmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbUVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7XG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XG4gICAgICAgIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpXG4gICAgKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcnNJbkZvcm0oJGZvcm0pIHtcbiAgICAkZm9ybS5maW5kKCcuaGFzLWVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpLmZpbmQoJy5hbGVydC1kYW5nZXInKS5yZW1vdmUoKTtcbiAgICAkZm9ybS5maW5kKCcubm9uLWZpZWxkLWVycm9ycycpLnJlbW92ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RXJyb3JzSW5Gb3JtKCRmb3JtLCAkcmVzRm9ybSkge1xuICAgICRyZXNGb3JtID0gJCgnPGRpdj4nKS5hcHBlbmQoJHJlc0Zvcm0pO1xuXG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykuc2FmZVJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuc2FmZVJlbW92ZSgpO1xuICAgIGxldCAkZmlsZV9jb250YWluZXIgPSAkcmVzRm9ybS5maW5kKCdpbnB1dFt0eXBlPWZpbGVdJykucGFyZW50KCk7XG4gICAgJGZvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJGZpbGVfY29udGFpbmVyW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICBsZXQgaGFzTm9FcnJvciA9ICRyZXNGb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuaW5zZXJ0QWZ0ZXIoJGZvcm0uZmluZCgnLmhpZGRlbi1mb3JtLWZpZWxkcycpKS5sZW5ndGggPT09IDA7XG4gICAgJHJlc0Zvcm0uZmluZCgnLmhhcy1lcnJvcicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNOb0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCAkcmVzRXJyb3JGaWVsZCA9ICQodGhpcyk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKCdhdXRvLWlkJyk7XG4gICAgICAgIGxldCAkZXJyb3JGaWVsZCA9ICRmb3JtLmZpbmQoJy5mb3JtLWdyb3VwLicgKyBjbGFzc05hbWUpO1xuICAgICAgICAkZXJyb3JGaWVsZC5hZGRDbGFzcygnaGFzLWVycm9yJyk7XG4gICAgICAgICRlcnJvckZpZWxkLmZpbmQoJy5mb3JtLWlucHV0LWNvbnRhaW5lcicpLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKCcuYWxlcnQtZGFuZ2VyJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhc05vRXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqcXVlcnlJbnNlcnRBdCgkY29udGFpbmVyLCBpbmRleCwgJG5ld0VsZW1lbnQpIHtcbiAgICBsZXQgbGFzdEluZGV4ID0gJGNvbnRhaW5lci5jaGlsZHJlbigpLnNpemUoKTtcbiAgICBpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgJGNvbnRhaW5lci5jaGlsZHJlbigpLmVxKGluZGV4KS5iZWZvcmUoJG5ld0VsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRjb250YWluZXIuYXBwZW5kKCRuZXdFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOlsiXyRib2R5IiwiYXJnX25hbWVzX3JlZyIsImNvbW1lbmRfcmVnIiwiZ2V0Qm9keSIsIiQiLCJnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbiIsImZ1bmMiLCJmbnN0ciIsInRvU3RyaW5nIiwicmVwbGFjZSIsInJlc3VsdCIsInNsaWNlIiwiaW5kZXhPZiIsIm1hdGNoIiwicHJvbWlzZUR1bW15RmFjdG9yeSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2FtZWxDYXNlVG9UYWdOYW1lIiwic3RyIiwibGV0dGVyIiwidG9Mb3dlckNhc2UiLCJudW1iZXIiLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJ0b1VwcGVyQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsImNvcHlQcm9wcyIsInRhcmdldENsYXNzIiwic291cmNlQ2xhc3MiLCJzb3VyY2UiLCJwcm9wTmFtZXNUYXJnZXQiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvdG90eXBlIiwiY29uY2F0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibmFtZSIsImZvckVhY2giLCJwcm9wIiwiaW5jbHVkZXMiLCJwdXNoIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXRQcm90b3R5cGVPZiIsImFnaWxlQWdncmVnYXRpb24iLCJiYXNlQ2xhc3MiLCJtaXhpbnMiLCJiYXNlIiwiY29uc3RydWN0b3IiLCJfYXJncyIsIl9taXhpbnMiLCJtaXhpbiIsIm5ld01peGluIiwiYXNzaWduIiwiX3RhZ05hbWUiLCJfaXNNaXhpbiIsImNsYXNzTmFtZSIsImNzcmZTYWZlTWV0aG9kIiwibWV0aG9kIiwidGVzdCIsInVwbG9hZEZpbGVGb3JtRGF0YSIsImZvcm1EYXRhIiwidXJsIiwiYWpheCIsInR5cGUiLCJ4aHIiLCJteVhociIsImFqYXhTZXR0aW5ncyIsInVwbG9hZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24iLCJkYXRhIiwiY2FjaGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInNldHRpbmdzIiwiY3Jvc3NEb21haW4iLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2luZG93IiwiQ1NSRl9UT0tFTiIsImUiLCJsZW5ndGhDb21wdXRhYmxlIiwicGVyY2VudFZhbCIsIk1hdGgiLCJyb3VuZCIsImxvYWRlZCIsInRvdGFsIiwiJHByb2dyZXNzQ29udGFpbmVyIiwiaGlkZSIsInNob3ciLCJmaW5kIiwiY3NzIiwidGV4dCIsImNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyIsInBhcmFtRWxlbWVudCIsImNvbnRyb2xsZXIiLCJiaW5kIiwiaXNGbG9hdFJlZyIsImlzSW50UmVnIiwiaXNCb29sUmVnIiwiaXNTdHJpbmdSZWciLCJ1bmRlZmluZWQiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJzdWJzdHIiLCJsZW5ndGgiLCJ1dWlkdjQiLCJjIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwiJGZvcm0iLCJyZW1vdmVDbGFzcyIsInJlbW92ZSIsInNldEVycm9yc0luRm9ybSIsIiRyZXNGb3JtIiwiYXBwZW5kIiwic2FmZVJlbW92ZSIsIiRmaWxlX2NvbnRhaW5lciIsInBhcmVudCIsImVhY2giLCJpbmRleCIsInJlcGxhY2VXaXRoIiwiaGFzTm9FcnJvciIsImluc2VydEFmdGVyIiwiJHJlc0Vycm9yRmllbGQiLCIkZXJyb3JGaWVsZCIsImFkZENsYXNzIiwianF1ZXJ5SW5zZXJ0QXQiLCIkY29udGFpbmVyIiwiJG5ld0VsZW1lbnQiLCJsYXN0SW5kZXgiLCJjaGlsZHJlbiIsInNpemUiLCJlcSIsImJlZm9yZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n\n}");
118
118
 
119
119
  /***/ }),
120
120
 
@@ -124,7 +124,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
124
124
  \******************************************/
125
125
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
126
126
 
127
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ refresh: () => (/* binding */ refresh),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\nconst DATA_CONTROLLER_KEY = '_controller_';\nconst CONTROLLER_CLASS = '_sdc_controller_';\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {jquery} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop('tagName').toLowerCase().split('_');\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element\n });\n } else if (tagName[0].startsWith('this.')) {\n $element.addClass(`_bind_to_update_handler sdc_uuid_${parentController._uuid}`);\n } else {\n emptyList = emptyList.concat(findSdcTgs($element, tagNameList, parentController));\n }\n });\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n url = url.replace(re, \"\" + urlValues.shift());\n }\n }\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param path - a content URL from the controller.\n * @param {object} args - get args.\n * @param tag - a normalized tag-name as string.\n * @param hardReload - true if the file has to be reloaded every time.\n * @returns {Promise<Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(path, args, tag, hardReload) {\n if (!path) {\n return Promise.resolve(false);\n } else if (htmlFiles[tag]) {\n return Promise.resolve(htmlFiles[tag]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = 'content';\n return $.get(path, args).then(function (data) {\n if (!hardReload) {\n htmlFiles[tag] = data;\n }\n return data;\n }).catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('_RedirectOnView', data['url-link']);\n }\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('navLoaded', {\n 'controller_name': () => err.status\n });\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceAllTagElementsInContainer($container, parentController, process = null) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController, process);\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {string} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while (matches = re.exec(url)) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n let params = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n controller.parsedContentUrl = url;\n return {\n url: url,\n args: params[params.length - 1]\n };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = {\n args: {}\n };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller, controller.contentUrl);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload)]).then(function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $('<div></div>').append(htmlFile);\n }\n }\n return null;\n });\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller, controller.contentUrl);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload);\n }\n return new Promise(resolve => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @param {Object} process - Process object containing the refresh process\n * @returns {Promise}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController, process) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller, process);\n }\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(parentController, $element, tagName, superTagNameList);\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, process);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html, process = null) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, '');\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, '');\n }\n controller.$container.append($html);\n }\n return replaceAllTagElementsInContainer(controller.$container, controller, process);\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceTagElementsInContainer(tagList, $container, parentController, process) {\n return new Promise(resolve => {\n let tagDescriptionElements = findSdcTgs($container, tagList, parentController);\n let tagCount = tagDescriptionElements.length;\n if (tagCount === 0) {\n return resolve();\n }\n for (let elementIndex = 0; elementIndex < tagDescriptionElements.length; elementIndex++) {\n runReplaceTagElementsInContainer(tagDescriptionElements[elementIndex].dom, tagDescriptionElements[elementIndex].tag, tagDescriptionElements[elementIndex].super, parentController, process).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container, process) {\n return _reloadMethodHTML(controller, $container ?? controller.$container, process);\n}\nfunction _reloadMethodHTML(controller, $dom, process) {\n const plist = [];\n $dom.find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`).each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data('handler');\n } else {\n let controller_handler = this.tagName.toLowerCase().replace(/^this./, '');\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n if (typeof result === 'function') {\n result = result.bind(controller)($this.data());\n }\n if (result !== undefined) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n if ($this.html() === '') {\n $this.append('<div></div>');\n }\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.reconcile(controller, $newContent, $this.children(), process);\n }));\n }\n });\n return Promise.all(plist);\n}\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === 'INPUT') {\n [['name', ''], ['type', 'text'], ['id', '']].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join('__');\n}\nfunction reconcileTree({\n $element,\n id = [],\n parent = null\n}) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join('::'),\n depth: id.length,\n idx: 0,\n getRealParent: () => parent,\n getIdx: function () {\n this.idx = (this.getRealParent()?.getIdx() ?? -1) + $element.index() + 1;\n return this.idx;\n },\n op: null,\n parent\n };\n obj.getIdx.bind(obj);\n return [obj].concat($element.contents().toArray().map(x => reconcileTree({\n $element: $(x),\n id: id.slice(),\n parent: obj\n })).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree({\n $element: $realNode\n });\n const $new = reconcileTree({\n $element: $virtualNode\n });\n $old.map((x, i) => x.idx = i);\n $new.map((x, i) => x.idx = i);\n const depth = Math.max(...$new.concat($old).map(x => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let toRemove = [];\n window.MAIN = $realNode;\n window.OPS = op_steps;\n op_steps.forEach((op_step, i) => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === 'keep_counterpart') {\n let cIdx = op.counterpart.getIdx();\n if (cIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n toRemove.push($element);\n } else if (op.type === 'delete') {\n $element.safeRemove();\n } else if (op.type === 'insert') {\n const {\n after,\n target\n } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n toRemove.forEach($element => $element.safeRemove());\n}\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach(attr => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach(attr => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n $real.removeData();\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes.filter(x => x.depth === depth && !x.op).forEach(newNode => {\n const oldNode = oldNodes.find(tempOldNode => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = {\n type: 'keep',\n idx: newNode.idx\n };\n newNode.op = {\n type: 'keep_counterpart',\n counterpart: oldNode\n };\n oldNode = oldNode.parent;\n newNode = newNode.parent;\n if (!oldNode || oldNode.op || newNode?.op) {\n return;\n }\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = {\n type: 'delete',\n idx\n };\n }\n });\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === 'keep_counterpart' ? element.parent.op.counterpart : element.parent;\n }\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 1 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === 'keep_counterpart' ? element.op.counterpart : element;\n }\n }\n return null;\n }\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === 'insert' ? 'insert_ignore' : 'insert';\n x.op = {\n type,\n target,\n after: x.getBefore()\n };\n }\n });\n const tagged = [...oldNodes, ...newNodes];\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n return aVal - bVal;\n });\n}\n\n/**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise<void>}\n */\n\nfunction refresh($dom, leafController, process = null) {\n if (!leafController) {\n leafController = getController($dom);\n }\n if (!leafController) {\n return Promise.resolve();\n }\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.prepareRefreshProcess)(process, leafController);\n $dom ??= leafController.$container;\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $dom, leafController, process).then(() => {\n reloadMethodHTML(leafController, $dom, refreshProcess).then(() => {\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3ZpZXcuanM/MjRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb250cm9sbGVyRmFjdG9yeSxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzLFxuICBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyxcbiAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge2dldFVybFBhcmFtfSBmcm9tIFwiLi9zZGNfcGFyYW1zLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG4vKipcbiAqIExpc3Qgb2YgSFRNTCBmaWxlcy5cbiAqIEB0eXBlIHt7fX1cbiAqL1xubGV0IGh0bWxGaWxlcyA9IHt9O1xuXG5leHBvcnQgY29uc3QgREFUQV9DT05UUk9MTEVSX0tFWSA9ICdfY29udHJvbGxlcl8nO1xuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfQ0xBU1MgPSAnX3NkY19jb250cm9sbGVyXyc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQ2FjaGUoKSB7XG4gIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gIGlmICghJGNvbnRhaW5lcikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgJGNoaWxkcmVuID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBsZXQgdGFnTmFtZSA9ICRlbGVtZW50LnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCdfJyk7XG4gICAgaWYgKCQuaW5BcnJheSh0YWdOYW1lWzBdLCB0YWdOYW1lTGlzdCkgPj0gMCkge1xuICAgICAgZW1wdHlMaXN0LnB1c2goe1xuICAgICAgICB0YWc6IHRhZ05hbWVbMF0sXG4gICAgICAgIHN1cGVyOiB0YWdOYW1lLnNwbGljZSgxKSB8fCBbXSxcbiAgICAgICAgZG9tOiAkZWxlbWVudFxuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aCgndGhpcy4nKSkge1xuICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbXB0eUxpc3QgPSBlbXB0eUxpc3QuY29uY2F0KGZpbmRTZGNUZ3MoJGVsZW1lbnQsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSlcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgZm9yIChsZXQga2V5X2lkeCBpbiBjb250cm9sbGVyLl91cmxQYXJhbXMpIHtcbiAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCBcIlwiICsgdXJsVmFsdWVzLnNoaWZ0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogbG9hZEhUTUxGaWxlIGxvYWRzIHRoZSBIVE1MIGNvbnRlbnQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdmlhIGFqYXggcmVxdWVzdC5cbiAqXG4gKiBJZiB0aGUgSFRNTCBmaWxlIGlzIGxvYWRlZCBhbHJlYWR5IHRoZSBmdW5jdGlvbiB0YWtlcyBubyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHBhdGggLSBhIGNvbnRlbnQgVVJMIGZyb20gdGhlIGNvbnRyb2xsZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIGdldCBhcmdzLlxuICogQHBhcmFtIHRhZyAtIGEgbm9ybWFsaXplZCB0YWctbmFtZSBhcyBzdHJpbmcuXG4gKiBAcGFyYW0gaGFyZFJlbG9hZCAtIHRydWUgaWYgdGhlIGZpbGUgaGFzIHRvIGJlIHJlbG9hZGVkIGV2ZXJ5IHRpbWUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gLSB3YWl0cyBmb3IgdGhlIGZpbGUgdG8gYmUgbG9hZGVkLlxuICovXG5mdW5jdGlvbiBsb2FkSFRNTEZpbGUocGF0aCwgYXJncywgdGFnLCBoYXJkUmVsb2FkKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9IGVsc2UgaWYgKGh0bWxGaWxlc1t0YWddKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShodG1sRmlsZXNbdGFnXSlcbiAgfVxuXG4gIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICBhcmdzLl9tZXRob2QgPSAnY29udGVudCc7XG5cbiAgcmV0dXJuICQuZ2V0KHBhdGgsIGFyZ3MpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoIWhhcmRSZWxvYWQpIHtcbiAgICAgIGh0bWxGaWxlc1t0YWddID0gZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBlcnIucmVzcG9uc2VKU09OO1xuICAgICAgdHJpZ2dlcignX1JlZGlyZWN0T25WaWV3JywgZGF0YVsndXJsLWxpbmsnXSk7XG4gICAgfVxuICAgIHRyaWdnZXIoJ25hdkxvYWRlZCcsIHsnY29udHJvbGxlcl9uYW1lJzogKCkgPT4gZXJyLnN0YXR1c30pO1xuXG4gICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICB9KTtcbn1cblxuLyoqXG4gKiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciByZXBsYWNlcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGJ5IHRoZSBjb250cm9sbGVyLlxuICogSW4gdGhpcyBzdGVwIHRoZSBsaWZlLWN5Y2xlIHN0YXJ0cy5cbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGNvbnRhaW5lciAtIGdpdmVuIGNvbnRhaW5lclxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIHBhcmVudCBjb250b2xsZXIgc3Vycm91bmRlZCB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5mdW5jdGlvbiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzID0gbnVsbCkge1xuICBwYXJlbnRDb250cm9sbGVyID0gcGFyZW50Q29udHJvbGxlciB8fCAkY29udGFpbmVyLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSk7XG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihhcHAudGFnTmFtZXMsICRjb250YWluZXIsIHBhcmVudENvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG4vKipcbiAqIHBhcnNlQ29udGVudFVybCB1c2VzIHRoZSBjb250ZW50IFVSTCBwcmVmaXggdG8gbWFyZ2UgdGhlXG4gKiBjb3JyZWN0IFVSTC4gQWxzbyBwYXJzZXMgdGhlIHVybCBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gY29udHJvbGxlciBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGNvcnJlY3QgVVJMIHdpdGggcHJlZml4LlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRlbnRVcmwoY29udHJvbGxlcikge1xuICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgIGxldCBtYXRjaGVzO1xuICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcyA9IFtdO1xuICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgcGFyYW1zID0gZ2V0VXJsUGFyYW0oY29udHJvbGxlciwgY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgaWYgKGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGgpIHtcbiAgICB1cmwgPSByZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyKGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zKTtcbiAgfVxuXG4gIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICByZXR1cm4ge3VybDogdXJsLCBhcmdzOiBwYXJhbXNbcGFyYW1zLmxlbmd0aCAtIDFdfTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcigkZWxlbSkge1xuICBpZiAoJGVsZW0uaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICByZXR1cm4gJGVsZW0uZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xuICB9XG4gIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gIGxldCBnZXRFbGVtZW50cyA9IHthcmdzOiB7fX07XG4gIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyLCBjb250cm9sbGVyLmNvbnRlbnRVcmwpO1xuICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIuY29udGVudFVybCwgZ2V0RWxlbWVudHMuYXJncywgY29udHJvbGxlci5fdGFnTmFtZSwgY29udHJvbGxlci5jb250ZW50UmVsb2FkKVxuICBdKS50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgbGV0IGh0bWxGaWxlID0gcmVzdWx0c1swXTtcbiAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxGaWxlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoaHRtbEZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcbn1cblxuLyoqXG4gKiByZWxvYWRIVE1MQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgaWYgKGNvbnRyb2xsZXIuY29udGVudFVybCkge1xuICAgIGxldCBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyLCBjb250cm9sbGVyLmNvbnRlbnRVcmwpO1xuICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICByZXR1cm4gbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIuY29udGVudFVybCwgZ2V0RWxlbWVudHMuYXJncywgY29udHJvbGxlci5fdGFnTmFtZSwgY29udHJvbGxlci5jb250ZW50UmVsb2FkKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICByZXNvbHZlKCQoKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHN1cGVyVGFnTmFtZUxpc3RcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICBpZiAoY29udHJvbGxlcikge1xuICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlciwgcHJvY2Vzcyk7XG4gIH1cblxuICBjb250cm9sbGVyID0gY29udHJvbGxlckZhY3RvcnkocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpO1xuICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAkZWxlbWVudC5hZGRDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgcmV0dXJuIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG5cbi8qKlxuICogcnVuQ29udHJvbGxlckZpbGxDb250ZW50IGVtcHRpZXMgdGhlIHJlZ2lzdGVyZWQgdGFnIGFuZCByZXBsYWNlcyBpdCBieSB0aGUgY29udHJvbGxlclxuICogY29udGVudC4gSXQgc2V0cyB0aGUgQ1NTIHRhZ3MgZm9yIHRoZSByZWxhdGlvbiB3aXRoIHRoZSBDU1MgZmlsZXMuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkaHRtbCAtIGpRdWVyeSBsb2FkZWQgY29udGVudFxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwsIHByb2Nlc3MgPSBudWxsKSB7XG4gIGlmICgkaHRtbCAmJiAkaHRtbC5sZW5ndGggPiAwKSB7XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyLmF0dHIoY29udHJvbGxlci5fdGFnTmFtZSwgJycpO1xuICAgIGZvciAobGV0IG1peGluS2V5IGluIGNvbnRyb2xsZXIuX21peGlucykge1xuICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmF0dHIoY29udHJvbGxlci5fbWl4aW5zW21peGluS2V5XS5fdGFnTmFtZSwgJycpO1xuICAgIH1cbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcihjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG5cbi8qKlxuICogcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEZvciBlYWNoIHJlZ2lzdGVyZWQgdGFnIGl0IGxvYWRzIHRoZSBjb250ZW50LlxuICogQWZ0ZXJ3YXJkcyBpdCBzdGFydHMgdGhlIGxpZmUgY3ljbGUgb2YgdGhlIGNvbnRyb2xsZXIuIEkgdGhlIG5leHQgc3RlcCBpdCBzdGFydHMgdGhlXG4gKiBwcm9jZWR1cmUgZm9yIHRoZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgY29udHJvbGxlciB0YWcuXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB0YWdMaXN0IC0gbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCB0YWdzXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGNvbnRhaW5lciAtIGpRdWVyeSBjb250YWluZXIgdG8gZmluZCB0aGUgdGFnc1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGNvbnRyb2xsZXIgaW4gc3Vycm91bmRpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdMaXN0LCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMgPSBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ0xpc3QsIHBhcmVudENvbnRyb2xsZXIpO1xuICAgIGxldCB0YWdDb3VudCA9IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMubGVuZ3RoOyBlbGVtZW50SW5kZXgrKykge1xuICAgICAgcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLmRvbSxcbiAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnRhZyxcbiAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGFnQ291bnQtLTtcbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lciwgcHJvY2Vzcykge1xuICByZXR1cm4gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lciA/PyBjb250cm9sbGVyLiRjb250YWluZXIsIHByb2Nlc3MpXG59XG5cbmZ1bmN0aW9uIF9yZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRkb20sIHByb2Nlc3MpIHtcbiAgY29uc3QgcGxpc3QgPSBbXTtcblxuICAkZG9tLmZpbmQoYC5fYmluZF90b191cGRhdGVfaGFuZGxlci5zZGNfdXVpZF8ke2NvbnRyb2xsZXIuX3V1aWR9YCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGxldCByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCR0aGlzLmhhc0NsYXNzKGBfd2l0aF9oYW5kbGVyYCkpIHtcbiAgICAgIHJlc3VsdCA9ICR0aGlzLmRhdGEoJ2hhbmRsZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRyb2xsZXJfaGFuZGxlciA9IHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL150aGlzLi8sICcnKTtcbiAgICAgIGlmIChjb250cm9sbGVyW2NvbnRyb2xsZXJfaGFuZGxlcl0pIHtcbiAgICAgICAgcmVzdWx0ID0gY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5iaW5kKGNvbnRyb2xsZXIpKCR0aGlzLmRhdGEoKSk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGxpc3QucHVzaChQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKCh4KSA9PiB7XG4gICAgICAgIGxldCAkbmV3Q29udGVudCA9ICQoYDxkaXY+PC9kaXY+YCk7XG4gICAgICAgICRuZXdDb250ZW50LmFwcGVuZCh4KTtcblxuICAgICAgICBpZiAoJHRoaXMuaHRtbCgpID09PSAnJykge1xuICAgICAgICAgICR0aGlzLmFwcGVuZCgnPGRpdj48L2Rpdj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcHAucmVjb25jaWxlKGNvbnRyb2xsZXIsICRuZXdDb250ZW50LCAkdGhpcy5jaGlsZHJlbigpLCBwcm9jZXNzKTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKHBsaXN0KTtcbn1cblxuXG5mdW5jdGlvbiBnZXROb2RlS2V5KG5vZGUpIHtcbiAgaWYgKG5vZGVbMF0ubm9kZVR5cGUgPT09IDMpIHtcbiAgICByZXR1cm4gYFRFWFRfXyR7bm9kZVswXS5ub2RlVmFsdWV9YDtcbiAgfVxuICBjb25zdCByZXMgPSBbbm9kZVswXS50YWdOYW1lXTtcbiAgaWYgKG5vZGVbMF0ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICBbWyduYW1lJywgJyddLCBbJ3R5cGUnLCAndGV4dCddLCBbJ2lkJywgJyddXS5mb3JFYWNoKChba2V5LCBkZWZhdWx0VmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gbm9kZS5hdHRyKGtleSkgPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlcy5qb2luKCdfXycpO1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVUcmVlKHskZWxlbWVudCwgaWQgPSBbXSwgcGFyZW50ID0gbnVsbH0pIHtcbiAgaWQucHVzaChnZXROb2RlS2V5KCRlbGVtZW50KSk7XG4gIGNvbnN0IG9iaiA9IHtcbiAgICAkZWxlbWVudCxcbiAgICBpZDogaWQuam9pbignOjonKSxcbiAgICBkZXB0aDogaWQubGVuZ3RoLFxuICAgIGlkeDogMCxcbiAgICBnZXRSZWFsUGFyZW50OiAoKSA9PiBwYXJlbnQsXG4gICAgZ2V0SWR4OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmlkeCA9ICh0aGlzLmdldFJlYWxQYXJlbnQoKT8uZ2V0SWR4KCkgPz8gLTEpICsgJGVsZW1lbnQuaW5kZXgoKSArIDE7XG4gICAgICByZXR1cm4gdGhpcy5pZHg7XG4gICAgfSxcbiAgICBvcDogbnVsbCxcbiAgICBwYXJlbnRcbiAgfTtcbiAgb2JqLmdldElkeC5iaW5kKG9iaik7XG4gIHJldHVybiBbb2JqXS5jb25jYXQoJGVsZW1lbnQuY29udGVudHMoKS50b0FycmF5KCkubWFwKCh4KSA9PiByZWNvbmNpbGVUcmVlKHtcbiAgICAkZWxlbWVudDogJCh4KSxcbiAgICBpZDogaWQuc2xpY2UoKSxcbiAgICBwYXJlbnQ6IG9ialxuICB9KSkuZmxhdCgpKTtcblxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUpIHtcblxuICBjb25zdCAkb2xkID0gcmVjb25jaWxlVHJlZSh7JGVsZW1lbnQ6ICRyZWFsTm9kZX0pO1xuICBjb25zdCAkbmV3ID0gcmVjb25jaWxlVHJlZSh7JGVsZW1lbnQ6ICR2aXJ0dWFsTm9kZX0pO1xuICAkb2xkLm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgJG5ldy5tYXAoKHgsIGkpID0+IHguaWR4ID0gaSk7XG4gIGNvbnN0IGRlcHRoID0gTWF0aC5tYXgoLi4uJG5ldy5jb25jYXQoJG9sZCkubWFwKHggPT4geC5kZXB0aCkpO1xuICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICBsZXQgdG9SZW1vdmUgPSBbXTtcbiAgd2luZG93Lk1BSU4gPSAkcmVhbE5vZGU7XG4gIHdpbmRvdy5PUFMgPSBvcF9zdGVwcztcblxuICBvcF9zdGVwcy5mb3JFYWNoKChvcF9zdGVwLCBpKSA9PiB7XG4gICAgY29uc3Qge29wLCAkZWxlbWVudCwgaWR4fSA9IG9wX3N0ZXA7XG5cbiAgICBpZiAob3AudHlwZSA9PT0gJ2tlZXBfY291bnRlcnBhcnQnKSB7XG4gICAgICBsZXQgY0lkeCA9IG9wLmNvdW50ZXJwYXJ0LmdldElkeCgpO1xuICAgICAgaWYgKGNJZHggIT09IGlkeCkge1xuICAgICAgICBjb25zdCBlbGVtQmVmb3JlID0gb3Bfc3RlcC5nZXRCZWZvcmUoKTtcbiAgICAgICAgaWYgKCFlbGVtQmVmb3JlKSB7XG4gICAgICAgICAgb3Bfc3RlcC5nZXRSZWFsUGFyZW50KCkuJGVsZW1lbnQucHJlcGVuZChvcC5jb3VudGVycGFydC4kZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3AuY291bnRlcnBhcnQuJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIoZWxlbUJlZm9yZS4kZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3luY0F0dHJpYnV0ZXMob3AuY291bnRlcnBhcnQuJGVsZW1lbnQsICRlbGVtZW50KTtcbiAgICAgIGlmICgkZWxlbWVudC5oYXNDbGFzcyhDT05UUk9MTEVSX0NMQVNTKSkge1xuICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpLiRjb250YWluZXIgPSBvcC5jb3VudGVycGFydC4kZWxlbWVudDtcbiAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdG9SZW1vdmUucHVzaCgkZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChvcC50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgJGVsZW1lbnQuc2FmZVJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gJ2luc2VydCcpIHtcbiAgICAgIGNvbnN0IHthZnRlciwgdGFyZ2V0fSA9IG9wX3N0ZXAub3A7XG4gICAgICBpZiAoYWZ0ZXIpIHtcbiAgICAgICAgJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIoYWZ0ZXIuJGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LiRlbGVtZW50LnByZXBlbmQoJGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgfVxuICB9KTtcblxuICB0b1JlbW92ZS5mb3JFYWNoKCgkZWxlbWVudCkgPT4gJGVsZW1lbnQuc2FmZVJlbW92ZSgpKTtcbn1cblxuZnVuY3Rpb24gc3luY0F0dHJpYnV0ZXMoJHJlYWwsICR2aXJ0dWFsKSB7XG4gIGNvbnN0IHJlYWxBdHRycyA9ICRyZWFsWzBdLmF0dHJpYnV0ZXMgPz8gW107XG4gIGNvbnN0IHZpcnR1YWxBdHRycyA9ICR2aXJ0dWFsWzBdLmF0dHJpYnV0ZXMgPz8gW107XG4gIC8vIFJlbW92ZSBtaXNzaW5nIGF0dHJzXG4gIFsuLi5yZWFsQXR0cnNdLmZvckVhY2goYXR0ciA9PiB7XG4gICAgaWYgKCEkdmlydHVhbC5pcyhgWyR7YXR0ci5uYW1lfV1gKSkge1xuICAgICAgJHJlYWwucmVtb3ZlQXR0cihhdHRyLm5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQWRkIG9yIHVwZGF0ZVxuICBbLi4udmlydHVhbEF0dHJzXS5mb3JFYWNoKGF0dHIgPT4ge1xuICAgIGlmICghYXR0ci5uYW1lLnN0YXJ0c1dpdGgoYGRhdGFgKSAmJiAkcmVhbC5hdHRyKGF0dHIubmFtZSkgIT09IGF0dHIudmFsdWUpIHtcbiAgICAgICRyZWFsLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gICRyZWFsLnJlbW92ZURhdGEoKTtcbiAgT2JqZWN0LmVudHJpZXMoJHZpcnR1YWwuZGF0YSgpKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBMQ0IgKExvbmdlc3QgQ29tbW9uIEJyYW5jaCkgZmluZHMgbWF0Y2hpbmcgYnJhbmNoZXMgYW5kIHJlc2VydmVzIHRoZW0hXG4gKlxuICogQHBhcmFtIG9sZE5vZGVzXG4gKiBAcGFyYW0gbmV3Tm9kZXNcbiAqIEBwYXJhbSBkZXB0aFxuICogQHJldHVybnMgeyp8KltdfVxuICovXG5mdW5jdGlvbiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGgpIHtcbiAgbmV3Tm9kZXMuZmlsdGVyKHggPT4geC5kZXB0aCA9PT0gZGVwdGggJiYgIXgub3ApLmZvckVhY2goKG5ld05vZGUpID0+IHtcbiAgICBjb25zdCBvbGROb2RlID0gb2xkTm9kZXMuZmluZCgodGVtcE9sZE5vZGUpID0+IHtcbiAgICAgIHJldHVybiAhdGVtcE9sZE5vZGUub3AgJiYgdGVtcE9sZE5vZGUuaWQgPT09IG5ld05vZGUuaWQ7XG4gICAgfSk7XG5cbiAgICBpZiAob2xkTm9kZSkge1xuICAgICAgY29uc3Qga2VlcFRyZWVCcmFuY2ggPSAob2xkTm9kZSwgbmV3Tm9kZSkgPT4ge1xuICAgICAgICBvbGROb2RlLm9wID0ge3R5cGU6ICdrZWVwJywgaWR4OiBuZXdOb2RlLmlkeH07XG4gICAgICAgIG5ld05vZGUub3AgPSB7dHlwZTogJ2tlZXBfY291bnRlcnBhcnQnLCBjb3VudGVycGFydDogb2xkTm9kZX07XG4gICAgICAgIG9sZE5vZGUgPSBvbGROb2RlLnBhcmVudDtcbiAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50O1xuICAgICAgICBpZiAoIW9sZE5vZGUgfHwgb2xkTm9kZS5vcCB8fCBuZXdOb2RlPy5vcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBrZWVwVHJlZUJyYW5jaChvbGROb2RlLCBuZXdOb2RlKTtcblxuICAgICAgfVxuICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG4gICAgfVxuICB9KTtcbiAgaWYgKGRlcHRoID4gMSkge1xuICAgIHJldHVybiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGggLSAxKTtcbiAgfVxuXG4gIG9sZE5vZGVzLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICBpZiAoIXgub3ApIHtcbiAgICAgIGNvbnN0IGlkeCA9IChvbGROb2Rlc1tpIC0gMV0/Lm9wLmlkeCA/PyAtMSkgKyAxO1xuICAgICAgeC5vcCA9IHt0eXBlOiAnZGVsZXRlJywgaWR4fVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0UmVhbFBhcmVudChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5vcC50eXBlID09PSAna2VlcF9jb3VudGVycGFydCcgPyBlbGVtZW50LnBhcmVudC5vcC5jb3VudGVycGFydCA6IGVsZW1lbnQucGFyZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmVmb3JlKGVsZW1lbnQsIGlkeCkge1xuICAgIGNvbnN0IHN0YXJ0RGVwdGggPSBlbGVtZW50LmRlcHRoO1xuICAgIHdoaWxlIChpZHggPj0gMSAmJiBlbGVtZW50LmRlcHRoID49IHN0YXJ0RGVwdGgpIHtcbiAgICAgIGlkeCAtPSAxO1xuICAgICAgZWxlbWVudCA9IG5ld05vZGVzW2lkeF07XG4gICAgICBpZiAoZWxlbWVudC5kZXB0aCA9PT0gc3RhcnREZXB0aCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5vcC50eXBlID09PSAna2VlcF9jb3VudGVycGFydCcgPyBlbGVtZW50Lm9wLmNvdW50ZXJwYXJ0IDogZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuXG4gIH1cblxuICBuZXdOb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgeC5nZXRCZWZvcmUgPSAoKSA9PiBnZXRCZWZvcmUoeCwgaSk7XG4gICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgIGlmICgheC5vcCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0geC5nZXRSZWFsUGFyZW50KCk7XG4gICAgICBjb25zdCB0eXBlID0gdGFyZ2V0Py5vcC50eXBlID09PSAnaW5zZXJ0JyA/ICdpbnNlcnRfaWdub3JlJyA6ICdpbnNlcnQnO1xuICAgICAgeC5vcCA9IHt0eXBlLCB0YXJnZXQsIGFmdGVyOiB4LmdldEJlZm9yZSgpfVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGFnZ2VkID0gW1xuICAgIC4uLm9sZE5vZGVzLFxuICAgIC4uLm5ld05vZGVzLFxuICBdO1xuXG5cbiAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVZhbCA9IGEub3A/LmlkeCA/PyBhLmlkeDtcbiAgICBjb25zdCBiVmFsID0gYi5vcD8uaWR4ID8/IGIuaWR4O1xuXG4gICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRkb21cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGxlYWZDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaCgkZG9tLCBsZWFmQ29udHJvbGxlciwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCFsZWFmQ29udHJvbGxlcikge1xuICAgIGxlYWZDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkZG9tKTtcbiAgfVxuXG4gIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjb25zdCB7cmVmcmVzaFByb2Nlc3MsIGlzUnVubmluZ1Byb2Nlc3N9ID0gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKHByb2Nlc3MsIGxlYWZDb250cm9sbGVyKTtcblxuICAkZG9tID8/PSBsZWFmQ29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihhcHAudGFnTmFtZXMsICRkb20sIGxlYWZDb250cm9sbGVyLCBwcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICByZWxvYWRNZXRob2RIVE1MKGxlYWZDb250cm9sbGVyLCAkZG9tLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9KTtcbn0iXSwibmFtZXMiOlsiY29udHJvbGxlckZhY3RvcnkiLCJwcmVwYXJlUmVmcmVzaFByb2Nlc3MiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsImdldFVybFBhcmFtIiwiYXBwIiwidHJpZ2dlciIsImh0bWxGaWxlcyIsIkRBVEFfQ09OVFJPTExFUl9LRVkiLCJDT05UUk9MTEVSX0NMQVNTIiwiY2xlYW5DYWNoZSIsImZpbmRTZGNUZ3MiLCIkY29udGFpbmVyIiwidGFnTmFtZUxpc3QiLCJwYXJlbnRDb250cm9sbGVyIiwiJGNoaWxkcmVuIiwiY2hpbGRyZW4iLCJlbXB0eUxpc3QiLCJlYWNoIiwiXyIsImVsZW1lbnQiLCIkZWxlbWVudCIsIiQiLCJ0YWdOYW1lIiwicHJvcCIsInRvTG93ZXJDYXNlIiwic3BsaXQiLCJpbkFycmF5IiwicHVzaCIsInRhZyIsInN1cGVyIiwic3BsaWNlIiwiZG9tIiwic3RhcnRzV2l0aCIsImFkZENsYXNzIiwiX3V1aWQiLCJjb25jYXQiLCJyZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyIiwiY29udHJvbGxlciIsInVybCIsInVybFZhbHVlcyIsImtleV9pZHgiLCJfdXJsUGFyYW1zIiwiaGFzT3duUHJvcGVydHkiLCJrZXkiLCJyZSIsIlJlZ0V4cCIsInJlcGxhY2UiLCJzaGlmdCIsImxvYWRIVE1MRmlsZSIsInBhdGgiLCJhcmdzIiwiaGFyZFJlbG9hZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiVkVSU0lPTiIsIl9tZXRob2QiLCJnZXQiLCJ0aGVuIiwiZGF0YSIsImNhdGNoIiwiZXJyIiwic3RhdHVzIiwicmVzcG9uc2VKU09OIiwiY29udHJvbGxlcl9uYW1lIiwicmVzcG9uc2VUZXh0IiwicmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJwcm9jZXNzIiwicmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJ0YWdOYW1lcyIsInBhcnNlQ29udGVudFVybCIsImNvbnRlbnRVcmwiLCJsZW5ndGgiLCJtYXRjaGVzIiwiZXhlYyIsImNvbnRlbnRSZWxvYWQiLCJwYXJhbXMiLCJwYXJzZWRDb250ZW50VXJsIiwiZ2V0Q29udHJvbGxlciIsIiRlbGVtIiwiaGFzQ2xhc3MiLCJjbG9zZXN0IiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJnZXRFbGVtZW50cyIsImFsbCIsIl90YWdOYW1lIiwicmVzdWx0cyIsImh0bWxGaWxlIiwiYXBwZW5kIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInN1cGVyVGFnTmFtZUxpc3QiLCJydW5Db250cm9sbGVyRmlsbENvbnRlbnQiLCIkaHRtbCIsImVtcHR5IiwiYXR0ciIsIm1peGluS2V5IiwiX21peGlucyIsInRhZ0xpc3QiLCJ0YWdEZXNjcmlwdGlvbkVsZW1lbnRzIiwidGFnQ291bnQiLCJlbGVtZW50SW5kZXgiLCJyZWxvYWRNZXRob2RIVE1MIiwiX3JlbG9hZE1ldGhvZEhUTUwiLCIkZG9tIiwicGxpc3QiLCJmaW5kIiwiJHRoaXMiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJjb250cm9sbGVyX2hhbmRsZXIiLCJiaW5kIiwieCIsIiRuZXdDb250ZW50IiwiaHRtbCIsInJlY29uY2lsZSIsImdldE5vZGVLZXkiLCJub2RlIiwibm9kZVR5cGUiLCJub2RlVmFsdWUiLCJyZXMiLCJub2RlTmFtZSIsImZvckVhY2giLCJkZWZhdWx0VmFsdWUiLCJqb2luIiwicmVjb25jaWxlVHJlZSIsImlkIiwicGFyZW50Iiwib2JqIiwiZGVwdGgiLCJpZHgiLCJnZXRSZWFsUGFyZW50IiwiZ2V0SWR4IiwiaW5kZXgiLCJvcCIsImNvbnRlbnRzIiwidG9BcnJheSIsIm1hcCIsInNsaWNlIiwiZmxhdCIsIiR2aXJ0dWFsTm9kZSIsIiRyZWFsTm9kZSIsIiRvbGQiLCIkbmV3IiwiaSIsIk1hdGgiLCJtYXgiLCJvcF9zdGVwcyIsImxjYkRpZmYiLCJ0b1JlbW92ZSIsIndpbmRvdyIsIk1BSU4iLCJPUFMiLCJvcF9zdGVwIiwidHlwZSIsImNJZHgiLCJjb3VudGVycGFydCIsImVsZW1CZWZvcmUiLCJnZXRCZWZvcmUiLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJzeW5jQXR0cmlidXRlcyIsInNhZmVSZW1vdmUiLCJhZnRlciIsInRhcmdldCIsIiRyZWFsIiwiJHZpcnR1YWwiLCJyZWFsQXR0cnMiLCJhdHRyaWJ1dGVzIiwidmlydHVhbEF0dHJzIiwiaXMiLCJuYW1lIiwicmVtb3ZlQXR0ciIsInZhbHVlIiwicmVtb3ZlRGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJvbGROb2RlcyIsIm5ld05vZGVzIiwiZmlsdGVyIiwibmV3Tm9kZSIsIm9sZE5vZGUiLCJ0ZW1wT2xkTm9kZSIsImtlZXBUcmVlQnJhbmNoIiwic3RhcnREZXB0aCIsInRhZ2dlZCIsInNvcnQiLCJhIiwiYiIsImFWYWwiLCJiVmFsIiwicmVmcmVzaCIsImxlYWZDb250cm9sbGVyIiwicmVmcmVzaFByb2Nlc3MiLCJpc1J1bm5pbmdQcm9jZXNzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n");
127
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ refresh: () => (/* binding */ refresh),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\nconst DATA_CONTROLLER_KEY = '_controller_';\nconst CONTROLLER_CLASS = '_sdc_controller_';\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {jquery} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop('tagName').toLowerCase().split('_');\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element\n });\n } else if (tagName[0].startsWith('this.')) {\n $element.addClass(`_bind_to_update_handler sdc_uuid_${parentController._uuid}`);\n } else {\n emptyList = emptyList.concat(findSdcTgs($element, tagNameList, parentController));\n }\n });\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n url = url.replace(re, \"\" + urlValues.shift());\n }\n }\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param path - a content URL from the controller.\n * @param {object} args - get args.\n * @param tag - a normalized tag-name as string.\n * @param hardReload - true if the file has to be reloaded every time.\n * @returns {Promise<jQuery|Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(path, args, tag, hardReload) {\n if (!path) {\n return Promise.resolve(false);\n } else if (htmlFiles[tag]) {\n return Promise.resolve(htmlFiles[tag]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = 'content';\n return $.get(path, args).then(function (data) {\n if (!hardReload) {\n htmlFiles[tag] = data;\n }\n return data;\n }).catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('_RedirectOnView', data['url-link']);\n }\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('navLoaded', {\n 'controller_name': () => err.status\n });\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceAllTagElementsInContainer($container, parentController, process = null) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController, process);\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {{url: String, args: Array}} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while (matches = re.exec(url)) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n let params = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n controller.parsedContentUrl = url;\n return {\n url: url,\n args: params[params.length - 1]\n };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = {\n args: {}\n };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload)]).then(function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $('<div></div>').append(htmlFile);\n }\n }\n return null;\n });\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload);\n }\n return new Promise(resolve => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @param {Object} process - Process object containing the refresh process\n * @returns {Promise}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController, process) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller, process);\n }\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(parentController, $element, tagName, superTagNameList);\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, process);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html, process = null) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, '');\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, '');\n }\n controller.$container.append($html);\n }\n return replaceAllTagElementsInContainer(controller.$container, controller, process);\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceTagElementsInContainer(tagList, $container, parentController, process) {\n return new Promise(resolve => {\n let tagDescriptionElements = findSdcTgs($container, tagList, parentController);\n let tagCount = tagDescriptionElements.length;\n if (tagCount === 0) {\n return resolve();\n }\n for (let elementIndex = 0; elementIndex < tagDescriptionElements.length; elementIndex++) {\n runReplaceTagElementsInContainer(tagDescriptionElements[elementIndex].dom, tagDescriptionElements[elementIndex].tag, tagDescriptionElements[elementIndex].super, parentController, process).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container, process) {\n return _reloadMethodHTML(controller, $container ?? controller.$container, process);\n}\nfunction _reloadMethodHTML(controller, $dom, process) {\n const plist = [];\n $dom.find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`).each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data('handler');\n } else {\n let controller_handler = this.tagName.toLowerCase().replace(/^this./, '');\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n if (typeof result === 'function') {\n const newData = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.prepareData)($this.data());\n result = result.bind(controller)(newData);\n }\n if (result) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n if ($this.html() === '') {\n $this.append('<div></div>');\n }\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.reconcile(controller, $newContent, $this.children(), process);\n }));\n }\n });\n return Promise.all(plist);\n}\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === 'INPUT') {\n [['name', ''], ['type', 'text'], ['id', '']].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join('__');\n}\nfunction reconcileTree({\n $element,\n id = [],\n parent = null\n}) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join('::'),\n depth: id.length,\n idx: 0,\n getRealParent: () => parent,\n getIdx: function () {\n this.idx = Math.max(0, (this.getRealParent()?.getIdx() ?? -1) + $element.index() + 1);\n return this.idx;\n },\n op: null,\n parent\n };\n obj.getIdx.bind(obj);\n return [obj].concat($element.contents().toArray().map(x => reconcileTree({\n $element: $(x),\n id: id.slice(),\n parent: obj\n })).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree({\n $element: $realNode\n });\n const $new = reconcileTree({\n $element: $virtualNode\n });\n $old.map((x, i) => x.idx = i);\n $new.map((x, i) => x.idx = i);\n const depth = Math.max(...$new.concat($old).map(x => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let toRemove = [];\n window.MAIN = $realNode;\n window.OPS = op_steps;\n op_steps.forEach((op_step, i) => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === 'keep_counterpart') {\n let cIdx = op.counterpart.getIdx();\n if (cIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n toRemove.push($element);\n } else if (op.type === 'delete') {\n $element.safeRemove();\n } else if (op.type === 'insert') {\n const {\n after,\n target\n } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n toRemove.forEach($element => $element.safeRemove());\n}\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach(attr => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach(attr => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n $real.removeData();\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes.filter(x => x.depth === depth && !x.op).forEach(newNode => {\n const oldNode = oldNodes.find(tempOldNode => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = {\n type: 'keep',\n idx: newNode.idx\n };\n newNode.op = {\n type: 'keep_counterpart',\n counterpart: oldNode\n };\n oldNode = oldNode.parent;\n newNode = newNode.parent;\n if (!oldNode || oldNode.op || newNode?.op) {\n return;\n }\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = {\n type: 'delete',\n idx\n };\n }\n });\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === 'keep_counterpart' ? element.parent.op.counterpart : element.parent;\n }\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 1 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === 'keep_counterpart' ? element.op.counterpart : element;\n }\n }\n return null;\n }\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === 'insert' ? 'insert_ignore' : 'insert';\n x.op = {\n type,\n target,\n after: x.getBefore()\n };\n }\n });\n const tagged = [...oldNodes, ...newNodes];\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n return aVal - bVal;\n });\n}\n\n/**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise<void>}\n */\n\nfunction refresh($dom, leafController, process = null) {\n if (!leafController) {\n leafController = getController($dom);\n }\n if (!leafController) {\n return Promise.resolve();\n }\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.prepareRefreshProcess)(process, leafController);\n $dom ??= leafController.$container;\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $dom, leafController, process).then(() => {\n return reloadMethodHTML(leafController, $dom, refreshProcess).then(() => {\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUVKLENBQUMsQ0FBQztBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY192aWV3LmpzPzI0YjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY29udHJvbGxlckZhY3RvcnksXG4gIHByZXBhcmVSZWZyZXNoUHJvY2VzcyxcbiAgcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMsXG4gIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaFxufSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtnZXRVcmxQYXJhbSwgcHJlcGFyZURhdGF9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5cbi8qKlxuICogTGlzdCBvZiBIVE1MIGZpbGVzLlxuICogQHR5cGUge3t9fVxuICovXG5sZXQgaHRtbEZpbGVzID0ge307XG5cbmV4cG9ydCBjb25zdCBEQVRBX0NPTlRST0xMRVJfS0VZID0gJ19jb250cm9sbGVyXyc7XG5leHBvcnQgY29uc3QgQ09OVFJPTExFUl9DTEFTUyA9ICdfc2RjX2NvbnRyb2xsZXJfJztcblxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5DYWNoZSgpIHtcbiAgaHRtbEZpbGVzID0ge307XG59XG5cbi8qKlxuICogZmluZFNkY1RncyBGaW5kcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGluIGEgY29udGFpbmVyLiBCdXQgaXQgaWdub3Jlc1xuICogcmVnaXN0ZXJlZCB0YWdzIGluIHJlZ2lzdGVyZWQgdGFncy4gSXQgY29sbGVjdHMgYWxsIHRob3NlXG4gKiBkb21zIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBvYmplY3RzIGNvbnRhaW5pbmcgYWxzbyB0aGUgdGFnIG5hbWUgdGhlIGRvbSBhbmQgdGhlIHRhZ1xuICogbmFtZXMgb2YgdGhlIHN1cGVyIGNvbnRyb2xsZXJcbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGNvbnRhaW5lciAtIGpRdWVyeSBjb250YWluZXJcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdGFnTmFtZUxpc3QgLSBhIHN0cmluZyBsaXN0IHdpdGggdGFnIG5hbWVzLlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGNvbnRyb2xsZXIgaW4gc3Vycm91bmRpbmdcbiAqIEByZXR1cm4ge0FycmF5fSAtIGEgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGFsbCByZWdpc3RlciB0YWdzIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGZpbmRTZGNUZ3MoJGNvbnRhaW5lciwgdGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIpIHtcbiAgaWYgKCEkY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGxldCAkY2hpbGRyZW4gPSAkY29udGFpbmVyLmNoaWxkcmVuKCk7XG4gIGxldCBlbXB0eUxpc3QgPSBbXTtcbiAgJGNoaWxkcmVuLmVhY2goZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHtcbiAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIGxldCB0YWdOYW1lID0gJGVsZW1lbnQucHJvcCgndGFnTmFtZScpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ18nKTtcbiAgICBpZiAoJC5pbkFycmF5KHRhZ05hbWVbMF0sIHRhZ05hbWVMaXN0KSA+PSAwKSB7XG4gICAgICBlbXB0eUxpc3QucHVzaCh7XG4gICAgICAgIHRhZzogdGFnTmFtZVswXSxcbiAgICAgICAgc3VwZXI6IHRhZ05hbWUuc3BsaWNlKDEpIHx8IFtdLFxuICAgICAgICBkb206ICRlbGVtZW50XG4gICAgICB9KTtcblxuICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXS5zdGFydHNXaXRoKCd0aGlzLicpKSB7XG4gICAgICAkZWxlbWVudC5hZGRDbGFzcyhgX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgc2RjX3V1aWRfJHtwYXJlbnRDb250cm9sbGVyLl91dWlkfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGVtcHR5TGlzdCA9IGVtcHR5TGlzdC5jb25jYXQoZmluZFNkY1RncygkZWxlbWVudCwgdGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIpKVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVtcHR5TGlzdDtcbn1cblxuLyoqXG4gKiByZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyIGZpbGxzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIGNvbnRlbnRcbiAqIHVybCB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHRhZyBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcGFyYW0gdXJsIC0gdGhlIG9yaWdpbiBjb250ZW50IFVSTFxuICogQHBhcmFtIHVybFZhbHVlcyAtIHZhbHVlcyBmb3IgdGhlIHVybCBwbGFjZWhvbGRlci4gSW4gc2FtZSBvcmRlciEhXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlcihjb250cm9sbGVyLCB1cmwsIHVybFZhbHVlcykge1xuICBmb3IgKGxldCBrZXlfaWR4IGluIGNvbnRyb2xsZXIuX3VybFBhcmFtcykge1xuICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5X2lkeCkpIHtcbiAgICAgIGxldCBrZXkgPSBjb250cm9sbGVyLl91cmxQYXJhbXNba2V5X2lkeF07XG4gICAgICBsZXQgcmUgPSBSZWdFeHAoXCIlXFxcXChcIiArIGtleSArIFwiXFxcXClcXFxcd1wiLCBcImdtXCIpO1xuICAgICAgdXJsID0gdXJsLnJlcGxhY2UocmUsIFwiXCIgKyB1cmxWYWx1ZXMuc2hpZnQoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBsb2FkSFRNTEZpbGUgbG9hZHMgdGhlIEhUTUwgY29udGVudCBmaWxlIGZyb20gdGhlIHNlcnZlciB2aWEgYWpheCByZXF1ZXN0LlxuICpcbiAqIElmIHRoZSBIVE1MIGZpbGUgaXMgbG9hZGVkIGFscmVhZHkgdGhlIGZ1bmN0aW9uIHRha2VzIG5vIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIGEgY29udGVudCBVUkwgZnJvbSB0aGUgY29udHJvbGxlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gZ2V0IGFyZ3MuXG4gKiBAcGFyYW0gdGFnIC0gYSBub3JtYWxpemVkIHRhZy1uYW1lIGFzIHN0cmluZy5cbiAqIEBwYXJhbSBoYXJkUmVsb2FkIC0gdHJ1ZSBpZiB0aGUgZmlsZSBoYXMgdG8gYmUgcmVsb2FkZWQgZXZlcnkgdGltZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeXxCb29sZWFuPn0gLSB3YWl0cyBmb3IgdGhlIGZpbGUgdG8gYmUgbG9hZGVkLlxuICovXG5mdW5jdGlvbiBsb2FkSFRNTEZpbGUocGF0aCwgYXJncywgdGFnLCBoYXJkUmVsb2FkKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9IGVsc2UgaWYgKGh0bWxGaWxlc1t0YWddKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShodG1sRmlsZXNbdGFnXSlcbiAgfVxuXG4gIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICBhcmdzLl9tZXRob2QgPSAnY29udGVudCc7XG5cbiAgcmV0dXJuICQuZ2V0KHBhdGgsIGFyZ3MpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoIWhhcmRSZWxvYWQpIHtcbiAgICAgIGh0bWxGaWxlc1t0YWddID0gZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBlcnIucmVzcG9uc2VKU09OO1xuICAgICAgdHJpZ2dlcignX1JlZGlyZWN0T25WaWV3JywgZGF0YVsndXJsLWxpbmsnXSk7XG4gICAgfVxuICAgIHRyaWdnZXIoJ25hdkxvYWRlZCcsIHsnY29udHJvbGxlcl9uYW1lJzogKCkgPT4gZXJyLnN0YXR1c30pO1xuXG4gICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICB9KTtcbn1cblxuLyoqXG4gKiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciByZXBsYWNlcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGJ5IHRoZSBjb250cm9sbGVyLlxuICogSW4gdGhpcyBzdGVwIHRoZSBsaWZlLWN5Y2xlIHN0YXJ0cy5cbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGNvbnRhaW5lciAtIGdpdmVuIGNvbnRhaW5lclxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIHBhcmVudCBjb250b2xsZXIgc3Vycm91bmRlZCB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5mdW5jdGlvbiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzID0gbnVsbCkge1xuICBwYXJlbnRDb250cm9sbGVyID0gcGFyZW50Q29udHJvbGxlciB8fCAkY29udGFpbmVyLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSk7XG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihhcHAudGFnTmFtZXMsICRjb250YWluZXIsIHBhcmVudENvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG4vKipcbiAqIHBhcnNlQ29udGVudFVybCB1c2VzIHRoZSBjb250ZW50IFVSTCBwcmVmaXggdG8gbWFyZ2UgdGhlXG4gKiBjb3JyZWN0IFVSTC4gQWxzbyBwYXJzZXMgdGhlIHVybCBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gY29udHJvbGxlciBvYmplY3RcbiAqIEByZXR1cm5zIHt7dXJsOiBTdHJpbmcsIGFyZ3M6IEFycmF5fX0gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29udGVudFVybChjb250cm9sbGVyKSB7XG4gIGxldCB1cmwgPSBjb250cm9sbGVyLmNvbnRlbnRVcmw7XG4gIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICBsZXQgcmUgPSAvJVxcKChbXildKylcXClcXHcvZ207XG4gICAgbGV0IG1hdGNoZXM7XG4gICAgY29udHJvbGxlci5fdXJsUGFyYW1zID0gW107XG4gICAgd2hpbGUgKChtYXRjaGVzID0gcmUuZXhlYyh1cmwpKSkge1xuICAgICAgY29udHJvbGxlci5fdXJsUGFyYW1zLnB1c2gobWF0Y2hlc1sxXSk7XG4gICAgICBjb250cm9sbGVyLmNvbnRlbnRSZWxvYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBwYXJhbXMgPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmxlbmd0aCkge1xuICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICB9XG5cbiAgY29udHJvbGxlci5wYXJzZWRDb250ZW50VXJsID0gdXJsO1xuXG4gIHJldHVybiB7dXJsOiB1cmwsIGFyZ3M6IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV19O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gIGlmICgkZWxlbS5oYXNDbGFzcyhDT05UUk9MTEVSX0NMQVNTKSkge1xuICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gIH1cbiAgcmV0dXJuICRlbGVtLmNsb3Nlc3QoYC4ke0NPTlRST0xMRVJfQ0xBU1N9YCkuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xufVxuXG4vKipcbiAqIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICogVGhlIGNvbnRlbnQgaXMgc2F2ZWQgYXMgalF1ZXJ5IG9iamVjdCB0byB0aGUgY29udHJvbGxlci4kY29udGVudCBwcm9wZXJ0eSBvZlxuICogdGhlIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgbGV0IGdldEVsZW1lbnRzID0ge2FyZ3M6IHt9fTtcbiAgaWYgKGNvbnRyb2xsZXIuY29udGVudFVybCkge1xuICAgIGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIuY29udGVudFVybCwgZ2V0RWxlbWVudHMuYXJncywgY29udHJvbGxlci5fdGFnTmFtZSwgY29udHJvbGxlci5jb250ZW50UmVsb2FkKVxuICBdKS50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgbGV0IGh0bWxGaWxlID0gcmVzdWx0c1swXTtcbiAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxGaWxlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoaHRtbEZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcbn1cblxuLyoqXG4gKiByZWxvYWRIVE1MQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgaWYgKGNvbnRyb2xsZXIuY29udGVudFVybCkge1xuICAgIGxldCBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLmNvbnRlbnRVcmwgPSBnZXRFbGVtZW50cy51cmw7XG4gICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLmNvbnRlbnRVcmwsIGdldEVsZW1lbnRzLmFyZ3MsIGNvbnRyb2xsZXIuX3RhZ05hbWUsIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmVzb2x2ZSgkKCkpO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBzdXBlclRhZ05hbWVMaXN0XG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKCRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKSB7XG4gIGxldCBjb250cm9sbGVyID0gJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKTtcbiAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGVsZW1lbnQsIGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xuICB9XG5cbiAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJGYWN0b3J5KHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbiAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBjb250cm9sbGVyKTtcbiAgJGVsZW1lbnQuYWRkQ2xhc3MoQ09OVFJPTExFUl9DTEFTUyk7XG4gIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudCBlbXB0aWVzIHRoZSByZWdpc3RlcmVkIHRhZyBhbmQgcmVwbGFjZXMgaXQgYnkgdGhlIGNvbnRyb2xsZXJcbiAqIGNvbnRlbnQuIEl0IHNldHMgdGhlIENTUyB0YWdzIGZvciB0aGUgcmVsYXRpb24gd2l0aCB0aGUgQ1NTIGZpbGVzLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGh0bWwgLSBqUXVlcnkgbG9hZGVkIGNvbnRlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sLCBwcm9jZXNzID0gbnVsbCkge1xuICBpZiAoJGh0bWwgJiYgJGh0bWwubGVuZ3RoID4gMCkge1xuICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5lbXB0eSgpO1xuICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX3RhZ05hbWUsICcnKTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiBjb250cm9sbGVyLl9taXhpbnMpIHtcbiAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX21peGluc1ttaXhpbktleV0uX3RhZ05hbWUsICcnKTtcbiAgICB9XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyLmFwcGVuZCgkaHRtbCk7XG4gIH1cblxuICByZXR1cm4gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoY29udHJvbGxlci4kY29udGFpbmVyLCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuXG4vKipcbiAqIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIEZpbmRzIGFsbCByZWdpc3RlcmVkIHRhZ3MgaW4gYSBjb250YWluZXIuIEJ1dCBpdCBpZ25vcmVzXG4gKiByZWdpc3RlcmVkIHRhZ3MgaW4gcmVnaXN0ZXJlZCB0YWdzLiBGb3IgZWFjaCByZWdpc3RlcmVkIHRhZyBpdCBsb2FkcyB0aGUgY29udGVudC5cbiAqIEFmdGVyd2FyZHMgaXQgc3RhcnRzIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSBjb250cm9sbGVyLiBJIHRoZSBuZXh0IHN0ZXAgaXQgc3RhcnRzIHRoZVxuICogcHJvY2VkdXJlIGZvciB0aGUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGNvbnRyb2xsZXIgdGFnLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdGFnTGlzdCAtIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdGFnc1xuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyIHRvIGZpbmQgdGhlIHRhZ3NcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnTGlzdCwgJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlciwgcHJvY2Vzcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblxuICAgIGxldCB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzID0gZmluZFNkY1RncygkY29udGFpbmVyLCB0YWdMaXN0LCBwYXJlbnRDb250cm9sbGVyKTtcbiAgICBsZXQgdGFnQ291bnQgPSB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmICh0YWdDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzLmxlbmd0aDsgZWxlbWVudEluZGV4KyspIHtcbiAgICAgIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5kb20sXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5zdXBlcixcbiAgICAgICAgcGFyZW50Q29udHJvbGxlciwgcHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgIGlmICh0YWdDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRjb250YWluZXIsIHByb2Nlc3MpIHtcbiAgcmV0dXJuIF9yZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRjb250YWluZXIgPz8gY29udHJvbGxlci4kY29udGFpbmVyLCBwcm9jZXNzKVxufVxuXG5mdW5jdGlvbiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCAkZG9tLCBwcm9jZXNzKSB7XG4gIGNvbnN0IHBsaXN0ID0gW107XG5cbiAgJGRvbS5maW5kKGAuX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIuc2RjX3V1aWRfJHtjb250cm9sbGVyLl91dWlkfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIGlmICgkdGhpcy5oYXNDbGFzcyhgX3dpdGhfaGFuZGxlcmApKSB7XG4gICAgICByZXN1bHQgPSAkdGhpcy5kYXRhKCdoYW5kbGVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250cm9sbGVyX2hhbmRsZXIgPSB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9edGhpcy4vLCAnJyk7XG4gICAgICBpZiAoY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBuZXdEYXRhID0gcHJlcGFyZURhdGEoJHRoaXMuZGF0YSgpKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5iaW5kKGNvbnRyb2xsZXIpKG5ld0RhdGEpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBwbGlzdC5wdXNoKFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4oKHgpID0+IHtcbiAgICAgICAgbGV0ICRuZXdDb250ZW50ID0gJChgPGRpdj48L2Rpdj5gKTtcbiAgICAgICAgJG5ld0NvbnRlbnQuYXBwZW5kKHgpO1xuXG4gICAgICAgIGlmICgkdGhpcy5odG1sKCkgPT09ICcnKSB7XG4gICAgICAgICAgJHRoaXMuYXBwZW5kKCc8ZGl2PjwvZGl2PicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFwcC5yZWNvbmNpbGUoY29udHJvbGxlciwgJG5ld0NvbnRlbnQsICR0aGlzLmNoaWxkcmVuKCksIHByb2Nlc3MpO1xuICAgICAgfSkpO1xuICAgIH1cblxuICB9KTtcblxuICByZXR1cm4gUHJvbWlzZS5hbGwocGxpc3QpO1xufVxuXG5cbmZ1bmN0aW9uIGdldE5vZGVLZXkobm9kZSkge1xuICBpZiAobm9kZVswXS5ub2RlVHlwZSA9PT0gMykge1xuICAgIHJldHVybiBgVEVYVF9fJHtub2RlWzBdLm5vZGVWYWx1ZX1gO1xuICB9XG4gIGNvbnN0IHJlcyA9IFtub2RlWzBdLnRhZ05hbWVdO1xuICBpZiAobm9kZVswXS5ub2RlTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgIFtbJ25hbWUnLCAnJ10sIFsndHlwZScsICd0ZXh0J10sIFsnaWQnLCAnJ11dLmZvckVhY2goKFtrZXksIGRlZmF1bHRWYWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IGF0dHIgPSBub2RlLmF0dHIoa2V5KSA/PyBkZWZhdWx0VmFsdWU7XG4gICAgICBpZiAoYXR0cikge1xuICAgICAgICByZXMucHVzaChhdHRyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzLmpvaW4oJ19fJyk7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRyZWUoeyRlbGVtZW50LCBpZCA9IFtdLCBwYXJlbnQgPSBudWxsfSkge1xuICBpZC5wdXNoKGdldE5vZGVLZXkoJGVsZW1lbnQpKTtcbiAgY29uc3Qgb2JqID0ge1xuICAgICRlbGVtZW50LFxuICAgIGlkOiBpZC5qb2luKCc6OicpLFxuICAgIGRlcHRoOiBpZC5sZW5ndGgsXG4gICAgaWR4OiAwLFxuICAgIGdldFJlYWxQYXJlbnQ6ICgpID0+IHBhcmVudCxcbiAgICBnZXRJZHg6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuaWR4ID0gTWF0aC5tYXgoMCwgKHRoaXMuZ2V0UmVhbFBhcmVudCgpPy5nZXRJZHgoKSA/PyAtMSkgKyAkZWxlbWVudC5pbmRleCgpICsgMSk7XG4gICAgICByZXR1cm4gdGhpcy5pZHg7XG4gICAgfSxcbiAgICBvcDogbnVsbCxcbiAgICBwYXJlbnRcbiAgfTtcbiAgb2JqLmdldElkeC5iaW5kKG9iaik7XG4gIHJldHVybiBbb2JqXS5jb25jYXQoJGVsZW1lbnQuY29udGVudHMoKS50b0FycmF5KCkubWFwKCh4KSA9PiByZWNvbmNpbGVUcmVlKHtcbiAgICAkZWxlbWVudDogJCh4KSxcbiAgICBpZDogaWQuc2xpY2UoKSxcbiAgICBwYXJlbnQ6IG9ialxuICB9KSkuZmxhdCgpKTtcblxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUpIHtcblxuICBjb25zdCAkb2xkID0gcmVjb25jaWxlVHJlZSh7JGVsZW1lbnQ6ICRyZWFsTm9kZX0pO1xuICBjb25zdCAkbmV3ID0gcmVjb25jaWxlVHJlZSh7JGVsZW1lbnQ6ICR2aXJ0dWFsTm9kZX0pO1xuICAkb2xkLm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgJG5ldy5tYXAoKHgsIGkpID0+IHguaWR4ID0gaSk7XG4gIGNvbnN0IGRlcHRoID0gTWF0aC5tYXgoLi4uJG5ldy5jb25jYXQoJG9sZCkubWFwKHggPT4geC5kZXB0aCkpO1xuICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICBsZXQgdG9SZW1vdmUgPSBbXTtcbiAgd2luZG93Lk1BSU4gPSAkcmVhbE5vZGU7XG4gIHdpbmRvdy5PUFMgPSBvcF9zdGVwcztcblxuICBvcF9zdGVwcy5mb3JFYWNoKChvcF9zdGVwLCBpKSA9PiB7XG4gICAgICBjb25zdCB7b3AsICRlbGVtZW50LCBpZHh9ID0gb3Bfc3RlcDtcblxuICAgICAgaWYgKG9wLnR5cGUgPT09ICdrZWVwX2NvdW50ZXJwYXJ0Jykge1xuICAgICAgICBsZXQgY0lkeCA9IG9wLmNvdW50ZXJwYXJ0LmdldElkeCgpO1xuICAgICAgICBpZiAoY0lkeCAhPT0gaWR4KSB7XG4gICAgICAgICAgY29uc3QgZWxlbUJlZm9yZSA9IG9wX3N0ZXAuZ2V0QmVmb3JlKCk7XG4gICAgICAgICAgaWYgKCFlbGVtQmVmb3JlKSB7XG4gICAgICAgICAgICBvcF9zdGVwLmdldFJlYWxQYXJlbnQoKS4kZWxlbWVudC5wcmVwZW5kKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3AuY291bnRlcnBhcnQuJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIoZWxlbUJlZm9yZS4kZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3luY0F0dHJpYnV0ZXMob3AuY291bnRlcnBhcnQuJGVsZW1lbnQsICRlbGVtZW50KTtcbiAgICAgICAgaWYgKCRlbGVtZW50Lmhhc0NsYXNzKENPTlRST0xMRVJfQ0xBU1MpKSB7XG4gICAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKS4kY29udGFpbmVyID0gb3AuY291bnRlcnBhcnQuJGVsZW1lbnQ7XG4gICAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvUmVtb3ZlLnB1c2goJGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAkZWxlbWVudC5zYWZlUmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09ICdpbnNlcnQnKSB7XG4gICAgICAgIGNvbnN0IHthZnRlciwgdGFyZ2V0fSA9IG9wX3N0ZXAub3A7XG4gICAgICAgIGlmIChhZnRlcikge1xuICAgICAgICAgICRlbGVtZW50Lmluc2VydEFmdGVyKGFmdGVyLiRlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXQuJGVsZW1lbnQucHJlcGVuZCgkZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgKVxuICA7XG5cbiAgdG9SZW1vdmUuZm9yRWFjaCgoJGVsZW1lbnQpID0+ICRlbGVtZW50LnNhZmVSZW1vdmUoKSk7XG59XG5cbmZ1bmN0aW9uIHN5bmNBdHRyaWJ1dGVzKCRyZWFsLCAkdmlydHVhbCkge1xuICBjb25zdCByZWFsQXR0cnMgPSAkcmVhbFswXS5hdHRyaWJ1dGVzID8/IFtdO1xuICBjb25zdCB2aXJ0dWFsQXR0cnMgPSAkdmlydHVhbFswXS5hdHRyaWJ1dGVzID8/IFtdO1xuICAvLyBSZW1vdmUgbWlzc2luZyBhdHRyc1xuICBbLi4ucmVhbEF0dHJzXS5mb3JFYWNoKGF0dHIgPT4ge1xuICAgIGlmICghJHZpcnR1YWwuaXMoYFske2F0dHIubmFtZX1dYCkpIHtcbiAgICAgICRyZWFsLnJlbW92ZUF0dHIoYXR0ci5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZCBvciB1cGRhdGVcbiAgWy4uLnZpcnR1YWxBdHRyc10uZm9yRWFjaChhdHRyID0+IHtcbiAgICBpZiAoIWF0dHIubmFtZS5zdGFydHNXaXRoKGBkYXRhYCkgJiYgJHJlYWwuYXR0cihhdHRyLm5hbWUpICE9PSBhdHRyLnZhbHVlKSB7XG4gICAgICAkcmVhbC5hdHRyKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICAkcmVhbC5yZW1vdmVEYXRhKCk7XG4gIE9iamVjdC5lbnRyaWVzKCR2aXJ0dWFsLmRhdGEoKSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgJHJlYWwuZGF0YShrZXksIHZhbHVlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTENCIChMb25nZXN0IENvbW1vbiBCcmFuY2gpIGZpbmRzIG1hdGNoaW5nIGJyYW5jaGVzIGFuZCByZXNlcnZlcyB0aGVtIVxuICpcbiAqIEBwYXJhbSBvbGROb2Rlc1xuICogQHBhcmFtIG5ld05vZGVzXG4gKiBAcGFyYW0gZGVwdGhcbiAqIEByZXR1cm5zIHsqfCpbXX1cbiAqL1xuZnVuY3Rpb24gbGNiRGlmZihvbGROb2RlcywgbmV3Tm9kZXMsIGRlcHRoKSB7XG4gIG5ld05vZGVzLmZpbHRlcih4ID0+IHguZGVwdGggPT09IGRlcHRoICYmICF4Lm9wKS5mb3JFYWNoKChuZXdOb2RlKSA9PiB7XG4gICAgY29uc3Qgb2xkTm9kZSA9IG9sZE5vZGVzLmZpbmQoKHRlbXBPbGROb2RlKSA9PiB7XG4gICAgICByZXR1cm4gIXRlbXBPbGROb2RlLm9wICYmIHRlbXBPbGROb2RlLmlkID09PSBuZXdOb2RlLmlkO1xuICAgIH0pO1xuXG4gICAgaWYgKG9sZE5vZGUpIHtcbiAgICAgIGNvbnN0IGtlZXBUcmVlQnJhbmNoID0gKG9sZE5vZGUsIG5ld05vZGUpID0+IHtcbiAgICAgICAgb2xkTm9kZS5vcCA9IHt0eXBlOiAna2VlcCcsIGlkeDogbmV3Tm9kZS5pZHh9O1xuICAgICAgICBuZXdOb2RlLm9wID0ge3R5cGU6ICdrZWVwX2NvdW50ZXJwYXJ0JywgY291bnRlcnBhcnQ6IG9sZE5vZGV9O1xuICAgICAgICBvbGROb2RlID0gb2xkTm9kZS5wYXJlbnQ7XG4gICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudDtcbiAgICAgICAgaWYgKCFvbGROb2RlIHx8IG9sZE5vZGUub3AgfHwgbmV3Tm9kZT8ub3ApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG5cbiAgICAgIH1cbiAgICAgIGtlZXBUcmVlQnJhbmNoKG9sZE5vZGUsIG5ld05vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGlmIChkZXB0aCA+IDEpIHtcbiAgICByZXR1cm4gbGNiRGlmZihvbGROb2RlcywgbmV3Tm9kZXMsIGRlcHRoIC0gMSk7XG4gIH1cblxuICBvbGROb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgaWYgKCF4Lm9wKSB7XG4gICAgICBjb25zdCBpZHggPSAob2xkTm9kZXNbaSAtIDFdPy5vcC5pZHggPz8gLTEpICsgMTtcbiAgICAgIHgub3AgPSB7dHlwZTogJ2RlbGV0ZScsIGlkeH1cbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFJlYWxQYXJlbnQoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudC5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5wYXJlbnQub3AudHlwZSA9PT0gJ2tlZXBfY291bnRlcnBhcnQnID8gZWxlbWVudC5wYXJlbnQub3AuY291bnRlcnBhcnQgOiBlbGVtZW50LnBhcmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJlZm9yZShlbGVtZW50LCBpZHgpIHtcbiAgICBjb25zdCBzdGFydERlcHRoID0gZWxlbWVudC5kZXB0aDtcbiAgICB3aGlsZSAoaWR4ID49IDEgJiYgZWxlbWVudC5kZXB0aCA+PSBzdGFydERlcHRoKSB7XG4gICAgICBpZHggLT0gMTtcbiAgICAgIGVsZW1lbnQgPSBuZXdOb2Rlc1tpZHhdO1xuICAgICAgaWYgKGVsZW1lbnQuZGVwdGggPT09IHN0YXJ0RGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub3AudHlwZSA9PT0gJ2tlZXBfY291bnRlcnBhcnQnID8gZWxlbWVudC5vcC5jb3VudGVycGFydCA6IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcblxuICB9XG5cbiAgbmV3Tm9kZXMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgIHguZ2V0QmVmb3JlID0gKCkgPT4gZ2V0QmVmb3JlKHgsIGkpO1xuICAgIHguZ2V0UmVhbFBhcmVudCA9ICgpID0+IGdldFJlYWxQYXJlbnQoeCk7XG5cbiAgICBpZiAoIXgub3ApIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHguZ2V0UmVhbFBhcmVudCgpO1xuICAgICAgY29uc3QgdHlwZSA9IHRhcmdldD8ub3AudHlwZSA9PT0gJ2luc2VydCcgPyAnaW5zZXJ0X2lnbm9yZScgOiAnaW5zZXJ0JztcbiAgICAgIHgub3AgPSB7dHlwZSwgdGFyZ2V0LCBhZnRlcjogeC5nZXRCZWZvcmUoKX1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHRhZ2dlZCA9IFtcbiAgICAuLi5vbGROb2RlcyxcbiAgICAuLi5uZXdOb2RlcyxcbiAgXTtcblxuXG4gIHJldHVybiB0YWdnZWQuc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IGFWYWwgPSBhLm9wPy5pZHggPz8gYS5pZHg7XG4gICAgY29uc3QgYlZhbCA9IGIub3A/LmlkeCA/PyBiLmlkeDtcblxuICAgIHJldHVybiBhVmFsIC0gYlZhbDtcbiAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZG9tXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBsZWFmQ29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2goJGRvbSwgbGVhZkNvbnRyb2xsZXIsIHByb2Nlc3MgPSBudWxsKSB7XG4gIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICBsZWFmQ29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGRvbSk7XG4gIH1cblxuICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgY29uc3Qge3JlZnJlc2hQcm9jZXNzLCBpc1J1bm5pbmdQcm9jZXNzfSA9IHByZXBhcmVSZWZyZXNoUHJvY2Vzcyhwcm9jZXNzLCBsZWFmQ29udHJvbGxlcik7XG5cbiAgJGRvbSA/Pz0gbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkZG9tLCBsZWFmQ29udHJvbGxlciwgcHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgcmV0dXJuIHJlbG9hZE1ldGhvZEhUTUwobGVhZkNvbnRyb2xsZXIsICRkb20sIHJlZnJlc2hQcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghaXNSdW5uaW5nUHJvY2Vzcykge1xuICAgICAgICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocmVmcmVzaFByb2Nlc3MpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH0pO1xufSJdLCJuYW1lcyI6WyJjb250cm9sbGVyRmFjdG9yeSIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwidXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoIiwiZ2V0VXJsUGFyYW0iLCJwcmVwYXJlRGF0YSIsImFwcCIsInRyaWdnZXIiLCJodG1sRmlsZXMiLCJEQVRBX0NPTlRST0xMRVJfS0VZIiwiQ09OVFJPTExFUl9DTEFTUyIsImNsZWFuQ2FjaGUiLCJmaW5kU2RjVGdzIiwiJGNvbnRhaW5lciIsInRhZ05hbWVMaXN0IiwicGFyZW50Q29udHJvbGxlciIsIiRjaGlsZHJlbiIsImNoaWxkcmVuIiwiZW1wdHlMaXN0IiwiZWFjaCIsIl8iLCJlbGVtZW50IiwiJGVsZW1lbnQiLCIkIiwidGFnTmFtZSIsInByb3AiLCJ0b0xvd2VyQ2FzZSIsInNwbGl0IiwiaW5BcnJheSIsInB1c2giLCJ0YWciLCJzdXBlciIsInNwbGljZSIsImRvbSIsInN0YXJ0c1dpdGgiLCJhZGRDbGFzcyIsIl91dWlkIiwiY29uY2F0IiwicmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciIsImNvbnRyb2xsZXIiLCJ1cmwiLCJ1cmxWYWx1ZXMiLCJrZXlfaWR4IiwiX3VybFBhcmFtcyIsImhhc093blByb3BlcnR5Iiwia2V5IiwicmUiLCJSZWdFeHAiLCJyZXBsYWNlIiwic2hpZnQiLCJsb2FkSFRNTEZpbGUiLCJwYXRoIiwiYXJncyIsImhhcmRSZWxvYWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlZFUlNJT04iLCJfbWV0aG9kIiwiZ2V0IiwidGhlbiIsImRhdGEiLCJjYXRjaCIsImVyciIsInN0YXR1cyIsInJlc3BvbnNlSlNPTiIsImNvbnRyb2xsZXJfbmFtZSIsInJlc3BvbnNlVGV4dCIsInJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicHJvY2VzcyIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwidGFnTmFtZXMiLCJwYXJzZUNvbnRlbnRVcmwiLCJjb250ZW50VXJsIiwibGVuZ3RoIiwibWF0Y2hlcyIsImV4ZWMiLCJjb250ZW50UmVsb2FkIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJfdGFnTmFtZSIsInJlc3VsdHMiLCJodG1sRmlsZSIsImFwcGVuZCIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwicnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJzdXBlclRhZ05hbWVMaXN0IiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwiJGh0bWwiLCJlbXB0eSIsImF0dHIiLCJtaXhpbktleSIsIl9taXhpbnMiLCJ0YWdMaXN0IiwidGFnRGVzY3JpcHRpb25FbGVtZW50cyIsInRhZ0NvdW50IiwiZWxlbWVudEluZGV4IiwicmVsb2FkTWV0aG9kSFRNTCIsIl9yZWxvYWRNZXRob2RIVE1MIiwiJGRvbSIsInBsaXN0IiwiZmluZCIsIiR0aGlzIiwicmVzdWx0IiwidW5kZWZpbmVkIiwiY29udHJvbGxlcl9oYW5kbGVyIiwibmV3RGF0YSIsImJpbmQiLCJ4IiwiJG5ld0NvbnRlbnQiLCJodG1sIiwicmVjb25jaWxlIiwiZ2V0Tm9kZUtleSIsIm5vZGUiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsInJlcyIsIm5vZGVOYW1lIiwiZm9yRWFjaCIsImRlZmF1bHRWYWx1ZSIsImpvaW4iLCJyZWNvbmNpbGVUcmVlIiwiaWQiLCJwYXJlbnQiLCJvYmoiLCJkZXB0aCIsImlkeCIsImdldFJlYWxQYXJlbnQiLCJnZXRJZHgiLCJNYXRoIiwibWF4IiwiaW5kZXgiLCJvcCIsImNvbnRlbnRzIiwidG9BcnJheSIsIm1hcCIsInNsaWNlIiwiZmxhdCIsIiR2aXJ0dWFsTm9kZSIsIiRyZWFsTm9kZSIsIiRvbGQiLCIkbmV3IiwiaSIsIm9wX3N0ZXBzIiwibGNiRGlmZiIsInRvUmVtb3ZlIiwid2luZG93IiwiTUFJTiIsIk9QUyIsIm9wX3N0ZXAiLCJ0eXBlIiwiY0lkeCIsImNvdW50ZXJwYXJ0IiwiZWxlbUJlZm9yZSIsImdldEJlZm9yZSIsInByZXBlbmQiLCJpbnNlcnRBZnRlciIsInN5bmNBdHRyaWJ1dGVzIiwic2FmZVJlbW92ZSIsImFmdGVyIiwidGFyZ2V0IiwiJHJlYWwiLCIkdmlydHVhbCIsInJlYWxBdHRycyIsImF0dHJpYnV0ZXMiLCJ2aXJ0dWFsQXR0cnMiLCJpcyIsIm5hbWUiLCJyZW1vdmVBdHRyIiwidmFsdWUiLCJyZW1vdmVEYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsIm9sZE5vZGVzIiwibmV3Tm9kZXMiLCJmaWx0ZXIiLCJuZXdOb2RlIiwib2xkTm9kZSIsInRlbXBPbGROb2RlIiwia2VlcFRyZWVCcmFuY2giLCJzdGFydERlcHRoIiwidGFnZ2VkIiwic29ydCIsImEiLCJiIiwiYVZhbCIsImJWYWwiLCJyZWZyZXNoIiwibGVhZkNvbnRyb2xsZXIiLCJyZWZyZXNoUHJvY2VzcyIsImlzUnVubmluZ1Byb2Nlc3MiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n\n}");
128
128
 
129
129
  /***/ })
130
130
 
@@ -189,20 +189,20 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
189
189
  /******/ // Load entry module and return exports
190
190
  /******/ // This entry module can't be inlined because the eval-source-map devtool is used.
191
191
  /******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
192
- /******/ var __webpack_exports__AbstractSDC = __webpack_exports__.AbstractSDC;
193
- /******/ var __webpack_exports__allOff = __webpack_exports__.allOff;
194
- /******/ var __webpack_exports__app = __webpack_exports__.app;
195
- /******/ var __webpack_exports__checkIfParamNumberBoolOrString = __webpack_exports__.checkIfParamNumberBoolOrString;
196
- /******/ var __webpack_exports__clearErrorsInForm = __webpack_exports__.clearErrorsInForm;
197
- /******/ var __webpack_exports__controllerFactory = __webpack_exports__.controllerFactory;
198
- /******/ var __webpack_exports__on = __webpack_exports__.on;
199
- /******/ var __webpack_exports__runControlFlowFunctions = __webpack_exports__.runControlFlowFunctions;
200
- /******/ var __webpack_exports__setErrorsInForm = __webpack_exports__.setErrorsInForm;
201
- /******/ var __webpack_exports__setEvent = __webpack_exports__.setEvent;
202
- /******/ var __webpack_exports__socketReconnect = __webpack_exports__.socketReconnect;
203
- /******/ var __webpack_exports__test_utils = __webpack_exports__.test_utils;
204
- /******/ var __webpack_exports__trigger = __webpack_exports__.trigger;
192
+ /******/ const __webpack_exports__AbstractSDC = __webpack_exports__.AbstractSDC;
193
+ /******/ const __webpack_exports__allOff = __webpack_exports__.allOff;
194
+ /******/ const __webpack_exports__app = __webpack_exports__.app;
195
+ /******/ const __webpack_exports__checkIfParamNumberBoolOrString = __webpack_exports__.checkIfParamNumberBoolOrString;
196
+ /******/ const __webpack_exports__clearErrorsInForm = __webpack_exports__.clearErrorsInForm;
197
+ /******/ const __webpack_exports__controllerFactory = __webpack_exports__.controllerFactory;
198
+ /******/ const __webpack_exports__on = __webpack_exports__.on;
199
+ /******/ const __webpack_exports__runControlFlowFunctions = __webpack_exports__.runControlFlowFunctions;
200
+ /******/ const __webpack_exports__setErrorsInForm = __webpack_exports__.setErrorsInForm;
201
+ /******/ const __webpack_exports__setEvent = __webpack_exports__.setEvent;
202
+ /******/ const __webpack_exports__socketReconnect = __webpack_exports__.socketReconnect;
203
+ /******/ const __webpack_exports__test_utils = __webpack_exports__.test_utils;
204
+ /******/ const __webpack_exports__trigger = __webpack_exports__.trigger;
205
205
  /******/ export { __webpack_exports__AbstractSDC as AbstractSDC, __webpack_exports__allOff as allOff, __webpack_exports__app as app, __webpack_exports__checkIfParamNumberBoolOrString as checkIfParamNumberBoolOrString, __webpack_exports__clearErrorsInForm as clearErrorsInForm, __webpack_exports__controllerFactory as controllerFactory, __webpack_exports__on as on, __webpack_exports__runControlFlowFunctions as runControlFlowFunctions, __webpack_exports__setErrorsInForm as setErrorsInForm, __webpack_exports__setEvent as setEvent, __webpack_exports__socketReconnect as socketReconnect, __webpack_exports__test_utils as test_utils, __webpack_exports__trigger as trigger };
206
206
  /******/
207
207
 
208
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBQUE7U0FDQTs7U0FFQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTs7U0FFQTtTQUNBOztTQUVBO1NBQ0E7U0FDQTs7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0E7VUFDQSx5Q0FBeUMsd0NBQXdDO1VBQ2pGO1VBQ0E7VUFDQTs7Ozs7VUNQQTs7Ozs7VUNBQTtVQUNBO1VBQ0E7VUFDQSx1REFBdUQsaUJBQWlCO1VBQ3hFO1VBQ0EsZ0RBQWdELGFBQWE7VUFDN0Q7Ozs7O1NFTkE7U0FDQTtTQUNBO1NBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGNhbid0IGJlIGlubGluZWQgYmVjYXVzZSB0aGUgZXZhbC1zb3VyY2UtbWFwIGRldnRvb2wgaXMgdXNlZC5cbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
208
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBQUE7U0FDQTs7U0FFQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTs7U0FFQTtTQUNBOztTQUVBO1NBQ0E7U0FDQTs7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0E7VUFDQSx5Q0FBeUMsd0NBQXdDO1VBQ2pGO1VBQ0E7VUFDQSxFOzs7OztVQ1BBLHdGOzs7OztVQ0FBO1VBQ0E7VUFDQTtVQUNBLHVEQUF1RCxpQkFBaUI7VUFDeEU7VUFDQSxnREFBZ0QsYUFBYTtVQUM3RCxFOzs7OztTRU5BO1NBQ0E7U0FDQTtTQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYmVmb3JlLXN0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly8vd2VicGFjay9hZnRlci1zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBjYW4ndCBiZSBpbmxpbmVkIGJlY2F1c2UgdGhlIGV2YWwtc291cmNlLW1hcCBkZXZ0b29sIGlzIHVzZWQuXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==