/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./resources/js/admin/dashboard.js":
/*!*****************************************!*\
!*** ./resources/js/admin/dashboard.js ***!
\*****************************************/
/***/ (() => {
eval("window.Dashboard = function () {\n var Opts = {\n active: false,\n containerCssSelector: \".dashboard\",\n testFileMod: false,\n isAdmin: false,\n URL: {\n create: '',\n store: '',\n getDataTableContent: '',\n destroy: ''\n }\n };\n var root = this;\n /*\n * Constructor\n */\n\n this.construct = function (options) {\n debug('Dashboard constructor called');\n $.extend(Opts, options);\n };\n\n this.getOpts = function () {\n return Opts;\n };\n\n this.init = function (options) {\n console.log('Dashboard init called');\n $.extend(Opts, options);\n /*\n APP.setOpts({\n afterLoadMainContent:root.initEditor,\n })\n */\n\n /*\n Init list view\n */\n\n root.initEditorButtons();\n };\n\n this.initEditorButtons = function () {\n $('.DashboardEditable button.edit').off('click');\n $('.DashboardEditable button.edit').on('click', function () {\n root.initEditor();\n $('.btnGroupEdit').toggleClass('d-none');\n $('.btnGroupModify').toggleClass('d-none');\n });\n $('.DashboardEditable button.btnSave').off('click');\n $('.DashboardEditable button.btnSave').on('click', function () {\n /*$('.btnGroupEdit').toggleClass('d-none');\n $('.btnGroupModify').toggleClass('d-none');\n */\n root.saveCustomContent(); //tinymce.activeEditor.isDirty() //true when modified\n });\n $('.DashboardEditable button.btnCancel').off('click');\n $('.DashboardEditable button.btnCancel').on('click', function () {\n $('.btnGroupEdit').toggleClass('d-none');\n $('.btnGroupModify').toggleClass('d-none');\n root.removeEditor();\n });\n };\n\n this.saveCustomContent = function () {\n var ajaxData = new FormData($('.dashboardForm')[0]);\n ajaxData.append('stored_data', tinymce.activeEditor.getContent());\n var ajaxUrl = Opts.URL.update.replace('%id%', $('div.dashboardCustomContent').data('id'));\n ajaxData.append('_method', 'PUT');\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n Toast.create(\"Siekeres mentés!\", 'Új tartalom elmentve.', TOAST_STATUS.INFO, 5000);\n },\n error: function error(data) {\n console.log(data.responseJSON);\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n\n this.loadTinymce = function () {\n $.getScript('https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js', function () {\n root.initEditor();\n });\n };\n\n this.removeEditor = function (options) {\n if (typeof tinymce !== \"undefined\") {\n tinymce.remove();\n }\n };\n\n this.initEditor = function (options) {\n if (typeof tinymce === \"undefined\") {\n root.loadTinymce();\n return;\n }\n\n tinymce.init({\n selector: 'div.dashboardCustomContent',\n // Replace this CSS selector to match the placeholder element for TinyMCE\n language: 'hu_HU',\n plugins: 'code table lists',\n toolbar: ' undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table'\n /*\n toolbar: 'customInsertButton | undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table',\n setup: function (editor) {\n editor.ui.registry.addButton('customInsertButton', {\n text: 'My Button',\n onAction: function (_) {\n editor.insertContent(' It\\'s my button! ');\n }});\n }\n */\n\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vZGFzaGJvYXJkLmpzP2ZjZGIiXSwibmFtZXMiOlsid2luZG93IiwiRGFzaGJvYXJkIiwiT3B0cyIsImFjdGl2ZSIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdEZpbGVNb2QiLCJpc0FkbWluIiwiVVJMIiwiY3JlYXRlIiwic3RvcmUiLCJnZXREYXRhVGFibGVDb250ZW50IiwiZGVzdHJveSIsInJvb3QiLCJjb25zdHJ1Y3QiLCJvcHRpb25zIiwiZGVidWciLCIkIiwiZXh0ZW5kIiwiZ2V0T3B0cyIsImluaXQiLCJjb25zb2xlIiwibG9nIiwiaW5pdEVkaXRvckJ1dHRvbnMiLCJvZmYiLCJvbiIsImluaXRFZGl0b3IiLCJ0b2dnbGVDbGFzcyIsInNhdmVDdXN0b21Db250ZW50IiwicmVtb3ZlRWRpdG9yIiwiYWpheERhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInRpbnltY2UiLCJhY3RpdmVFZGl0b3IiLCJnZXRDb250ZW50IiwiYWpheFVybCIsInVwZGF0ZSIsInJlcGxhY2UiLCJkYXRhIiwiYWpheCIsInVybCIsInR5cGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInN1Y2Nlc3MiLCJUb2FzdCIsIlRPQVNUX1NUQVRVUyIsIklORk8iLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImxvYWRUaW55bWNlIiwiZ2V0U2NyaXB0IiwicmVtb3ZlIiwic2VsZWN0b3IiLCJsYW5ndWFnZSIsInBsdWdpbnMiLCJ0b29sYmFyIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDQyxTQUFQLEdBQWlCLFlBQVk7QUFDekIsTUFBSUMsSUFBSSxHQUFHO0FBQ1BDLElBQUFBLE1BQU0sRUFBRSxLQUREO0FBRVBDLElBQUFBLG9CQUFvQixFQUFDLFlBRmQ7QUFHUEMsSUFBQUEsV0FBVyxFQUFDLEtBSEw7QUFJUEMsSUFBQUEsT0FBTyxF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QUEsT0FBTyxDQUFDYixJQUFSLENBQWE7QUFDVG9DLE1BQUFBLFFBQVEsRUFBRSw0QkFERDtBQUMrQjtBQUN4Q0MsTUFBQUEsUUFBUSxFQUFFLE9BRkQ7QUFHVEMsTUFBQUEsT0FBTyxFQUFFLGtCQUhBO0FBSVRDLE1BQUFBLE9BQU8sRUFBRTtBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFmcUIsS0FBYjtBQWtCSCxHQXpCRDtBQTBCSCxDQWhJRCIsInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5EYXNoYm9hcmQ9ZnVuY3Rpb24gKCkge1xuICAgIGxldCBPcHRzID0ge1xuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjpcIi5kYXNoYm9hcmRcIixcbiAgICAgICAgdGVzdEZpbGVNb2Q6ZmFsc2UsXG4gICAgICAgIGlzQWRtaW46ZmFsc2UsXG4gICAgICAgIFVSTDp7XG4gICAgICAgICAgICBjcmVhdGU6JycsXG4gICAgICAgICAgICBzdG9yZTonJyxcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6JycsXG4gICAgICAgICAgICBkZXN0cm95OicnLFxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgZGVidWcoJ0Rhc2hib2FyZCBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgfTtcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiBPcHRzO1xuICAgIH1cbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZygnRGFzaGJvYXJkIGluaXQgY2FsbGVkJyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuLypcbiAgICAgICAgQVBQLnNldE9wdHMoe1xuICAgICAgICAgICAgYWZ0ZXJMb2FkTWFpbkNvbnRlbnQ6cm9vdC5pbml0RWRpdG9yLFxuICAgICAgICB9KVxuKi9cbiAgICAgICAgLypcbiAgICAgICAgSW5pdCBsaXN0IHZpZXdcbiAgICAgICAgKi9cbiAgICAgICAgcm9vdC5pbml0RWRpdG9yQnV0dG9ucygpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdEVkaXRvckJ1dHRvbnM9ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoJy5EYXNoYm9hcmRFZGl0YWJsZSBidXR0b24uZWRpdCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5lZGl0Jykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIHJvb3QuaW5pdEVkaXRvcigpO1xuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwRWRpdCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICQoJy5idG5Hcm91cE1vZGlmeScpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5TYXZlJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0blNhdmUnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgLyokKCcuYnRuR3JvdXBFZGl0JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJvb3Quc2F2ZUN1c3RvbUNvbnRlbnQoKTtcbiAgICAgICAgICAgIC8vdGlueW1jZS5hY3RpdmVFZGl0b3IuaXNEaXJ0eSgpIC8vdHJ1ZSB3aGVuIG1vZGlmaWVkXG4gICAgICAgIH0pO1xuXG5cblxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0bkNhbmNlbCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5DYW5jZWwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xuXG4gICAgICAgICAgICAkKCcuYnRuR3JvdXBFZGl0JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgcm9vdC5yZW1vdmVFZGl0b3IoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLnNhdmVDdXN0b21Db250ZW50PWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgYWpheERhdGE9IG5ldyBGb3JtRGF0YSgkKCcuZGFzaGJvYXJkRm9ybScpWzBdKTtcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdG9yZWRfZGF0YScsdGlueW1jZS5hY3RpdmVFZGl0b3IuZ2V0Q29udGVudCgpKTtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLCQoJ2Rpdi5kYXNoYm9hcmRDdXN0b21Db250ZW50JykuZGF0YSgnaWQnKSk7XG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX21ldGhvZCcsJ1BVVCcpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxuICAgICAgICAgICAgdHlwZTonUE9TVCcsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIlNpZWtlcmVzIG1lbnTDqXMhXCIsJ8OaaiB0YXJ0YWxvbSBlbG1lbnR2ZS4nICwgVE9BU1RfU1RBVFVTLklORk8sNTAwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XG4gICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIH1cblxuICAgIHRoaXMubG9hZFRpbnltY2U9IGZ1bmN0aW9uICgpe1xuICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4udGlueS5jbG91ZC8xL25vLWFwaS1rZXkvdGlueW1jZS81L3RpbnltY2UubWluLmpzJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgcm9vdC5pbml0RWRpdG9yKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUVkaXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIGlmKHR5cGVvZiB0aW55bWNlIT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICB0aW55bWNlLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuaW5pdEVkaXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICAgICAgaWYodHlwZW9mIHRpbnltY2U9PT1cInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgIHJvb3QubG9hZFRpbnltY2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpbnltY2UuaW5pdCh7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ2Rpdi5kYXNoYm9hcmRDdXN0b21Db250ZW50JywgLy8gUmVwbGFjZSB0aGlzIENTUyBzZWxlY3RvciB0byBtYXRjaCB0aGUgcGxhY2Vob2xkZXIgZWxlbWVudCBmb3IgVGlueU1DRVxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdodV9IVScsXG4gICAgICAgICAgICBwbHVnaW5zOiAnY29kZSB0YWJsZSBsaXN0cycsXG4gICAgICAgICAgICB0b29sYmFyOiAnIHVuZG8gcmVkbyB8IGZvcm1hdHNlbGVjdHwgYm9sZCBpdGFsaWMgfCBhbGlnbmxlZnQgYWxpZ25jZW50ZXIgYWxpZ25yaWdodCB8IGluZGVudCBvdXRkZW50IHwgYnVsbGlzdCBudW1saXN0IHwgY29kZSB8IHRhYmxlJyxcblxuLypcbiAgICAgICAgICAgIHRvb2xiYXI6ICdjdXN0b21JbnNlcnRCdXR0b24gfCB1bmRvIHJlZG8gfCBmb3JtYXRzZWxlY3R8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgfCBpbmRlbnQgb3V0ZGVudCB8IGJ1bGxpc3QgbnVtbGlzdCB8IGNvZGUgfCB0YWJsZScsXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xuICAgICAgICAgICAgICAgIGVkaXRvci51aS5yZWdpc3RyeS5hZGRCdXR0b24oJ2N1c3RvbUluc2VydEJ1dHRvbicsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ015IEJ1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmluc2VydENvbnRlbnQoJyZuYnNwOzxzdHJvbmc+SXRcXCdzIG15IGJ1dHRvbiE8L3N0cm9uZz4mbmJzcDsnKTtcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgfVxuKi9cblxuICAgICAgICB9KTtcbiAgICB9XG59O1xuIl0sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9kYXNoYm9hcmQuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/dashboard.js\n");
/***/ }),
/***/ "./resources/js/admin/priceList.js":
/*!*****************************************!*\
!*** ./resources/js/admin/priceList.js ***!
\*****************************************/
/***/ (() => {
eval("window.PriceListAdmin = function (options, ProfitCenterItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n active: false,\n containerCssSelector: \".priceListForm\",\n testFileMod: false,\n URL: {\n create: '',\n store: '',\n getDataTableContent: '',\n destroy: ''\n }\n };\n var PriceList = {};\n var root = this;\n var dataTableCSSSelector = null;\n /*\n * Constructor\n */\n\n this.construct = function (options) {\n debug('PriceListAdmin constructor called');\n $.extend(Opts, options);\n };\n\n var errorRowPointer = null;\n var errorRowCount = 0;\n\n this.initErrorNavigationButton = function () {\n errorRowCount = $('.statusError').length;\n errorRowPointer = null;\n $('.priceListForm .buttonPrevError .buttonNextError').off('click');\n $('.priceListForm .buttonPrevError').on('click', function () {\n if (errorRowPointer == null) {\n errorRowPointer = 0;\n } else {\n if (errorRowPointer > 0) {\n errorRowPointer--;\n } else {\n return;\n }\n }\n\n $('.statusError').removeClass('highlightedErrorRow');\n $('.priceListTableWrapper').scrollTop($($('.statusError')[errorRowPointer]).position().top);\n $($('.statusError')[errorRowPointer]).addClass('highlightedErrorRow');\n });\n $('.priceListForm .buttonNextError').off('click');\n $('.priceListForm .buttonNextError').on('click', function () {\n if (errorRowPointer == null) {\n errorRowPointer = 0;\n } else {\n if (errorRowPointer < errorRowCount - 1) {\n errorRowPointer++;\n } else {\n return;\n }\n }\n\n $('.statusError').removeClass('highlightedErrorRow');\n $('.priceListTableWrapper').scrollTop($($('.statusError')[errorRowPointer]).position().top);\n $($('.statusError')[errorRowPointer]).addClass('highlightedErrorRow');\n });\n };\n\n this.selectedUploadFileToggle = function (fileInput) {\n /*\n console.log(fileInput.attr('name'));\n console.log(fileInput[0].files[0]);\n console.log(fileInput[0].files[0].name);\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.priceListTable > tbody').empty();\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n\n this.clickNewPriceListCallBack = function () {\n root.initViewDetails();\n };\n\n this.clickNewPriceList = function () {\n APP.loadMainContent(Opts.URL.create, root.clickNewPriceListCallBack);\n };\n\n this.datatableRowActionButtonClick = function (event) {\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data(); //_token\n\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n /*\n */\n };\n\n this.initViewList = function (options) {\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNewPriceList,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n APP.dataTablePriceList = $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments); //buttons+=APP.datatableAddRowEditButton(0,arguments);\n\n return buttons;\n }\n } //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: [//'createState', 'savedStates',\n 'excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n },\n /**/\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\n data:{\n a:1,\n b:2\n }\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\n console.log(dt);\n console.log(node);\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"available\"\n }, {\n \"data\": \"created_at\"\n }, {\n \"data\": \"note\"\n }, null],\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n };\n\n this.initViewDetails = function (options) {\n $(Opts.containerCssSelector + ' .datePickerClick').off('click');\n $(Opts.containerCssSelector + ' .datePickerClick').on('click', function () {\n $(Opts.containerCssSelector + ' .datePicker').datepicker('show');\n });\n $(Opts.containerCssSelector + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n onSelect: function onSelect(dateText) {\n console.log(dateText);\n $('.selectedDateText').text(dateText.replaceAll('-', '.'));\n $('input[name=\"availableDate\"]').val(dateText);\n }\n });\n $(Opts.containerCssSelector + ' .buttonNewUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonNewUpload').on('click', function () {\n root.selectedUploadFileToggle();\n });\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.log('------------------');\n root.selectedUploadFileToggle();\n var data = new FormData($('.priceListForm')[0]);\n\n if ($('.supplierSelect').val().length < 1) {\n Toast.create(\"Hiba!\", 'Adjon meg beszállítót!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n\n var fileInput = $('#inputGroupPriceListFile');\n console.log(fileInput[0].files.length < 1);\n /* teszteles miatt kikapcsolva a fajl ellenorzes\n */\n\n if (!Opts.testFileMod) {\n console.log(fileInput[0].files.length < 1);\n\n if (fileInput[0].files.length < 1) {\n Toast.create(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n }\n\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n $.ajax({\n url: Opts.URL.store,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n\n if (data.success == true) {\n root.processCheckedPriceListResponse(data);\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n $(Opts.containerCssSelector + ' .buttonFinalization').on('click', function () {\n var data = new FormData($('.priceListForm')[0]);\n var fileInput = $('#inputGroupPriceListFile');\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n data.append('finalization', 1);\n $.ajax({\n url: Opts.URL.store,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n\n if (data.success) {\n $('.priceListTable tbody tr').remove();\n $('.uploadStatusRow >.canFinish').hide();\n $('.uploadStatusRow').addClass('d-none');\n $('.priceListTable tbody').append('
| Árlistát elmentettük. |
');\n }\n /*\n if(data.success==1){\n root.processCheckedPriceListResponse(data);\n }\n */\n\n },\n error: function error(data) {\n console.log(data.responseJSON);\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n\n this.init = function (options) {\n console.log('PriceListAdmin init called');\n $.extend(Opts, options);\n console.log('Opt extended');\n console.log(Opts);\n /*\n Init list view\n */\n\n console.log('call list view Init');\n root.initViewList(options);\n };\n\n this.getOpts = function () {\n return Opts;\n };\n\n var priceListHasError = false;\n\n this.processCheckedPriceListResponse = function (responseData) {\n priceListHasError = false;\n root.processCheckedPriceListResponseRows(responseData.rows);\n\n if (priceListHasError) {\n $('.uploadStatusRow >.canFinish').hide();\n $('.uploadStatusRow >.canFinishError').show();\n root.initErrorNavigationButton();\n } else {\n $('.uploadStatusRow >.canFinish').show();\n $('.uploadStatusRow >.canFinishError').hide();\n }\n\n $('.uploadStatusRow').removeClass('d-none');\n $('.containerUploadedSpinner').addClass('d-none');\n };\n\n this.processCheckedPriceListResponseRows = function (responseRowsData) {\n console.log('processingRows');\n\n for (var key in responseRowsData) {\n var rowData = responseRowsData[key];\n var templateData = rowData.originalData;\n templateData.rowNum = rowData.rowNum;\n var template = $('template[data-name=\"priceListTableRow\"]').html();\n var render = Mustache.render(template, templateData);\n $('.priceListTable tbody').append(render);\n $('tr[data-rownum=' + rowData.rowNum + ']').addClass('status' + $.ucFirst(rowData.status));\n root.processResponseRowErrors(rowData.error, rowData.rowNum);\n\n if (rowData.changed) {\n root.processResponseRowChanged(rowData.changed, rowData.rowNum);\n }\n }\n };\n\n this.processResponseRowChanged = function (changedArray, rowNum) {\n if (changedArray.length < 1) {\n return;\n }\n\n console.log(changedArray); //fields error resz\n\n var trNode = $('tr[data-rownum=' + rowNum + ']');\n\n for (var key in changedArray) {\n var tdNode = trNode.find('td[data-pointer=\"' + key + '\"]');\n tdNode.addClass('bg-primary');\n var changedTxtNode = $(document.createElement(\"span\")).text(changedArray[key].old).addClass('fieldChanged');\n tdNode.append(changedTxtNode);\n }\n };\n\n this.processResponseRowErrors = function (errorArray, rowNum) {\n if (errorArray.length < 1) {\n return;\n } //general error resz\n\n\n console.log(errorArray);\n priceListHasError = true; //fields error resz\n\n if (typeof errorArray.fields == 'undefined') {\n return;\n }\n\n var trNode = $('tr[data-rownum=' + rowNum + ']');\n\n for (var key in errorArray.fields) {\n var tdNode = trNode.find('td[data-pointer=\"' + key + '\"]');\n tdNode.addClass('bg-danger');\n var errorTxtNode = $(document.createElement(\"span\")).text(errorArray.fields[key]).addClass('fieldError');\n tdNode.append(errorTxtNode);\n }\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJpY2VMaXN0LmpzPzIwZGIiXSwibmFtZXMiOlsid2luZG93IiwiUHJpY2VMaXN0QWRtaW4iLCJvcHRpb25zIiwiUHJvZml0Q2VudGVySXRlbSIsIk9wdHMiLCJhY3RpdmUiLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RGaWxlTW9kIiwiVVJMIiwiY3JlYXRlIiwic3RvcmUiLCJnZXREYXRhVGFibGVDb250ZW50IiwiZGVzdHJveSIsIlByaWNlTGlzdCIsInJvb3QiLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsImNvbnN0cnVjdCIsImRlYnVnIiwiJCIsImV4dGVuZCIsImVycm9yUm93UG9pbnRlciIsImVycm9yUm93Q291bnQiLCJpbml0RXJyb3JOYXZpZ2F0aW9uQnV0dG9uIiwibGVuZ3RoIiwib2ZmIiwib24iLCJyZW1vdmVDbGFzcyIsInNjcm9sbFRvcCIsInBvc2l0aW9uIiwidG9wIiwiYWRkQ2xhc3MiLCJzZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUiLCJmaWxlSW5wdXQiLCJmaWxlcyIsInRleHQiLCJuYW1lIiwiZW1wdHkiLCJjbGlja05ld1ByaWNlTGlzdENhbGxCYWNrIiwiaW5pdFZpZXdEZXRhaWxzIiwiY2xpY2tOZXdQcmljZUxpc3QiLCJBUFAiLCJsb2FkTWFpbkNvbnRlbnQiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImV2ZW50Iiwibm9kZSIsImN1cnJlbnRUYXJnZXQiLCJyb3ciLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwicm93RGF0YSIsImRhdGEiLCJhamF4RGF0YSIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJfdG9rZW4iLCJ2YWwiLCJhamF4IiwidXJsIiwibWV0aG9kIiwic3VjY2VzcyIsInJlbW92ZSIsImRyYXciLCJpbml0Vmlld0xpc3QiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhVGFibGVQcmljZUxpc3QiLCJsYW5ndWFnZSIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24iLCJhcmd1bWVudHMiLCJhdXRvUHJpbnQiLCJjbGFzc05hbWUiLCJhdHRyIiwiaW5pdCIsImFwaSIsImNvbmZpZyIsImFjdGlvbiIsImUiLCJkdCIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwiZGF0ZXBpY2tlciIsImRhdGVGb3JtYXQiLCJvblNlbGVjdCIsImRhdGVUZXh0IiwiY29uc29sZSIsImxvZyIsInJlcGxhY2VBbGwiLCJGb3JtRGF0YSIsIlRvYXN0IiwiVE9BU1RfU1RBVFVTIiwiREFOR0VSIiwiYXBwZW5kIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJwcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlIiwiZXJyb3IiLCJyZXNwb25zZUpTT04iLCJhamF4RXJyb3JGaWVsZEhhbmRsZXIiLCJoaWRlIiwiZ2V0T3B0cyIsInByaWNlTGlzdEhhc0Vycm9yIiwicmVzcG9uc2VEYXRhIiwicHJvY2Vzc0NoZWNrZWRQcmljZUxpc3RSZXNwb25zZVJvd3MiLCJyb3dzIiwic2hvdyIsInJlc3BvbnNlUm93c0RhdGEiLCJrZXkiLCJ0ZW1wbGF0ZURhdGEiLCJvcmlnaW5hbERhdGEiLCJyb3dOdW0iLCJ0ZW1wbGF0ZSIsImh0bWwiLCJyZW5kZXIiLCJNdXN0YWNoZSIsInVjRmlyc3QiLCJzdGF0dXMiLCJwcm9jZXNzUmVzcG9uc2VSb3dFcnJvcnMiLCJjaGFuZ2VkIiwicHJvY2Vzc1Jlc3BvbnNlUm93Q2hhbmdlZCIsImNoYW5nZWRBcnJheSIsInRyTm9kZSIsInRkTm9kZSIsImZpbmQiLCJjaGFuZ2VkVHh0Tm9kZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm9sZCIsImVycm9yQXJyYXkiLCJmaWVsZHMiLCJlcnJvclR4dE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBQSxNQUFNLENBQUNDLGNBQVAsR0FBc0IsVUFBVUMsT0FBVixFQUFrQkMsZ0JBQWxCLEVBQW9DO0FBQ3REO0FBQ0o7QUFDQTtBQUNBO0FBQ0ksTUFBSUMsSUFBSSxHQUFHO0FBQ1BDLElBQUFBLE1BQU0sRUFBRSxLQUREO0FBRVBDLElBQUFBLG9CQUFvQixFQUFDLGdCQUZkO0FBR1BDLElBQUFBLFdBQVcsRUFBQyxLQUhMO0FBSVBDLElBQUFBLEdBQUcsRUFBQztBQUNBQyxNQUFBQSxNQUFNLEVBQUMsRUFEUDtBQUVBQyxNQUFBQSxLQUFLLEVBQUMsRUFGTjtBQUdBQyxNQUFBQSxtQkFBbUIsRUFBQyxFQUhwQjtBQUlBQyxNQUFBQSxPQUFPLEVBQUM7QUFKUjtBQUpHLEdBQVg7QUFXQSxNQUFJQyxTQUFTLEdBQUcsRUFBaEI7QUFDQSxNQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUlDLG9CQUFvQixHQUFDLElBQXpCO0FBSUE7QUFDSjtBQUNBOztBQUNJLE9BQUtDLFNBQUwsR0FBaUIsVUFBVWQsT0FBVixFQUFtQjtBQUNoQ2UsSUFBQUEsS0FBSyxDQUFDLG1DQUFELENBQUw7QUFDQUMsSUFBQUEsQ0FBQyxDQUFDQyxNQUFGLENBQVNmLElBQVQsRUFBZUYsT0FBZjtBQUNILEdBSEQ7O0FBS0EsTUFBSWtCLGVBQWUsR0FBQyxJQUFwQjtBQUNBLE1BQUlDLGFBQWEsR0FBQyxDQUFsQjs7QUFFQSxPQUFLQyx5QkFBTCxHQUErQixZQUFXO0FBRXRDRCxJQUFBQSxhQUFhLEdBQUNILENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JLLE1BQWhDO0FBQ0FILElBQUFBLGVBQWUsR0FBQyxJQUFoQjtBQUNBRixJQUFBQSxDQUFDLENBQUMsa0RBQUQsQ0FBRCxDQUFzRE0sR0FBdEQsQ0FBMEQsT0FBMUQ7QUFDQU4sSUFBQUEsQ0FBQyxDQUFDLGlDQUFELENBQUQsQ0FBcUNPLEVBQXJDLENBQXdDLE9BQXhDLEVBQWdELFlBQVc7QUFDdkQsVUFBR0wsZUFBZSxJQUFFLElBQXBCLEVBQXlCO0FBQ3JCQSxRQUFBQSxlQUFlLEdBQUMsQ0FBaEI7QUFDSCxPQUZELE1BRUs7QUFDRCxZQUFHQSxlQUFlLEdBQUMsQ0FBbkIsRUFBcUI7QUFDakJBLFVBQUFBLGVBQWU7QUFDbEIsU0FGRCxNQUVLO0FBQUM7QUFBUTtBQUNqQjs7QUFDREYsTUFBQUEsQ0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQlEsV0FBbEIsQ0FBOEIscUJBQTlCO0FBQ0FSLE1BQUFBLENBQUMsQ0FBQyx3QkFBRCxDQUFELENBQTRCUyxTQUE1QixDQUFzQ1QsQ0FBQyxDQUFDQSxDQUFDLENBQUMsY0FBRCxDQUFELENBQWtCRSxlQUFsQixDQUFELENBQUQsQ0FBc0NRLFFBQXRDLEdBQWlEQyxHQUF2RjtBQUNBWCxNQUFBQSxDQUFDLENBQUNBLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JFLGVBQWxCLENBQUQsQ0FBRCxDQUFzQ1UsUUFBdEMsQ0FBK0MscUJBQS9DO0FBQ0gsS0FYRDtBQVlBWixJQUFBQSxDQUFDLENBQUMsaUNBQUQsQ0FBRCxDQUFxQ00sR0FBckMsQ0FBeUMsT0FBekM7QUFDQU4sSUFBQUEsQ0FBQyxDQUFDLGlDQUFELENBQUQsQ0FBcUNPLEVBQXJDLENBQXdDLE9BQXhDLEVBQWdELFlBQVc7QUFDdkQsVUFBR0wsZUFBZSxJQUFFLElBQXBCLEVBQXlCO0FBQ3JCQSxRQUFBQSxlQUFlLEdBQUMsQ0FBaEI7QUFDSCxPQUZELE1BRUs7QUFDRCxZQUFHQSxlQUFlLEdBQUNDLGFBQWEsR0FBQyxDQUFqQyxFQUFtQztBQUMvQkQsVUFBQUEsZUFBZTtBQUNsQixTQUZELE1BRUs7QUFBQztBQUFRO0FBQ2pCOztBQUNERixNQUFBQSxDQUFDLENBQUMsY0FBRCxDQUFELENBQWtCUSxXQUFsQixDQUE4QixxQkFBOUI7QUFDQVIsTUFBQUEsQ0FBQyxDQUFDLHdCQUFELENBQUQsQ0FBNEJTLFNBQTVCLENBQXNDVCxDQUFDLENBQUNBLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JFLGVBQWxCLENBQUQsQ0FBRCxDQUFzQ1EsUUFBdEMsR0FBaURDLEdBQXZGO0FBQ0FYLE1BQUFBLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQkUsZUFBbEIsQ0FBRCxDQUFELENBQXNDVSxRQUF0QyxDQUErQyxxQkFBL0M7QUFDSCxLQVhEO0FBYUgsR0EvQkQ7O0FBaUNBLE9BQUtDLHdCQUFMLEdBQThCLFVBQVVDLFNBQVYsRUFBb0I7QUFDOUM7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNRLFFBQUdBLFNBQUgsRUFBYTtBQUNUZCxNQUFBQSxDQUFDLENBQUMsc0JBQUQsQ0FBRCxDQUEwQlksUUFBMUIsQ0FBbUMsUUFBbkM7O0FBQ0EsVUFBR0UsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhQyxLQUFiLENBQW1CLENBQW5CLENBQUgsRUFBeUI7QUFDckJmLFFBQUFBLENBQUMsQ0FBQyw0QkFBRCxDQUFELENBQWdDZ0IsSUFBaEMsQ0FBcUNGLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYUMsS0FBYixDQUFtQixDQUFuQixFQUFzQkUsSUFBM0Q7QUFFSDs7QUFDRGpCLE1BQUFBLENBQUMsQ0FBQyw2QkFBRCxDQUFELENBQWlDUSxXQUFqQyxDQUE2QyxRQUE3QztBQUNBUixNQUFBQSxDQUFDLENBQUMsMkJBQUQsQ0FBRCxDQUErQlEsV0FBL0IsQ0FBMkMsUUFBM0M7QUFDSCxLQVJELE1BUUs7QUFDRFIsTUFBQUEsQ0FBQyxDQUFDLDRCQUFELENBQUQsQ0FBZ0NnQixJQUFoQyxDQUFxQyxFQUFyQztBQUNBaEIsTUFBQUEsQ0FBQyxDQUFDLDZCQUFELENBQUQsQ0FBaUNZLFFBQWpDLENBQTBDLFFBQTFDO0FBQ0FaLE1BQUFBLENBQUMsQ0FBQyxrQkFBRCxDQUFELENBQXNCWSxRQUF0QixDQUErQixRQUEvQjtBQUVBWixNQUFBQSxDQUFDLENBQUMseUJBQUQsQ0FBRCxDQUE2QmtCLEtBQTdCO0FBQ0FsQixNQUFBQSxDQUFDLENBQUMsc0JBQUQsQ0FBRCxDQUEwQlEsV0FBMUIsQ0FBc0MsUUFBdEM7QUFDSDtBQUNKLEdBdEJEOztBQXdCQSxPQUFLVyx5QkFBTCxHQUErQixZQUFZO0FBQ3ZDdkIsSUFBQUEsSUFBSSxDQUFDd0IsZUFBTDtBQUNILEdBRkQ7O0FBR0EsT0FBS0MsaUJBQUwsR0FBdUIsWUFBVTtBQUM3QkMsSUFBQUEsR0FBRyxDQUFDQyxlQUFKLENBQW9CckMsSUFBSSxDQUFDSSxHQUFMLENBQVNDLE1BQTdCLEVBQW9DSyxJQUFJLENBQUN1Qix5QkFBekM7QUFDSCxHQUZEOztBQUdBLE9BQUtLLDZCQUFMLEdBQW1DLFVBQVNDLEtBQVQsRUFBZTtBQUM5QyxRQUFJQyxJQUFJLEdBQUMxQixDQUFDLENBQUN5QixLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVNFLGFBQVYsQ0FBVjtBQUNBLFFBQUlDLEdBQUcsR0FBQzVCLENBQUMsQ0FBQ0gsb0JBQUQsQ0FBRCxDQUF3QmdDLFNBQXhCLEdBQW9DRCxHQUFwQyxDQUF3Q0YsSUFBSSxDQUFDSSxPQUFMLENBQWEsSUFBYixDQUF4QyxDQUFSO0FBQ0EsUUFBSUMsT0FBTyxHQUFDSCxHQUFHLENBQUNJLElBQUosRUFBWixDQUg4QyxDQUk5Qzs7QUFDQSxRQUFJQyxRQUFRLEdBQUMsRUFBYjtBQUNBLFFBQUlDLE9BQU8sR0FBQ2hELElBQUksQ0FBQ0ksR0FBTCxDQUFTSSxPQUFULENBQWlCeUMsT0FBakIsQ0FBeUIsTUFBekIsRUFBZ0NKLE9BQU8sQ0FBQ0ssRUFBeEMsQ0FBWjtBQUNBSCxJQUFBQSxRQUFRLENBQUNJLE1BQVQsR0FBZ0JyQyxDQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QnNDLEdBQXhCLEVBQWhCO0FBQ0F0QyxJQUFBQSxDQUFDLENBQUN1QyxJQUFGLENBQU87QUFDSEMsTUFBQUEsR0FBRyxFQUFDTixPQUREO0FBRUhGLE1BQUFBLElBQUksRUFBQ0MsUUFGRjtBQUdIUSxNQUFBQSxNQUFNLEVBQUMsUUFISjtBQUlIQyxNQUFBQSxPQUFPLEVBQUMsaUJBQVVWLElBQVYsRUFBZTtBQUNuQixZQUFHQSxJQUFJLENBQUNVLE9BQUwsSUFBYyxJQUFqQixFQUFzQjtBQUNsQmQsVUFBQUEsR0FBRyxDQUFDZSxNQUFKLEdBQWFDLElBQWI7QUFDSDtBQUNKO0FBUkUsS0FBUDtBQVVSO0FBQ0E7QUFHSyxHQXRCRDs7QUF3QkEsT0FBS0MsWUFBTCxHQUFvQixVQUFVN0QsT0FBVixFQUFtQjtBQUNuQ2UsSUFBQUEsS0FBSyxDQUFDLHlCQUFELENBQUw7QUFDQUYsSUFBQUEsb0JBQW9CLEdBQUNYLElBQUksQ0FBQ0Usb0JBQUwsR0FBMEIsYUFBL0MsQ0FGbUMsQ0FFMkI7O0FBRTlELFFBQUkwRCxNQUFNLEdBQUM5QyxDQUFDLENBQUNILG9CQUFvQixHQUFDLFdBQXRCLENBQUQsQ0FBb0NRLE1BQS9DLENBSm1DLENBSW9COztBQUN2RGlCLElBQUFBLEdBQUcsQ0FBQ3lCLE9BQUosQ0FBWTtBQUNSQyxNQUFBQSxrQ0FBa0MsRUFBQ3BELElBQUksQ0FBQ3lCLGlCQURoQztBQUVSNEIsTUFBQUEscUNBQXFDLEVBQUNyRCxJQUFJLENBQUM0QjtBQUZuQyxLQUFaO0FBT0FGLElBQUFBLEdBQUcsQ0FBQzRCLGtCQUFKLEdBQXVCbEQsQ0FBQyxDQUFDSCxvQkFBRCxDQUFELENBQXdCZ0MsU0FBeEIsQ0FBbUM7QUFDdERzQixNQUFBQSxRQUFRLEVBQUU7QUFDTlgsUUFBQUEsR0FBRyxFQUFFO0FBREMsT0FENEM7QUFLdEQ7QUFDQSxjQUFRdEQsSUFBSSxDQUFDSSxHQUFMLENBQVNHLG1CQU5xQztBQU90RCxvQkFBYyxDQUNWO0FBQ0ksbUJBQVdxRCxNQUFNLEdBQUMsQ0FEdEI7QUFFSSxrQkFBVSxnQkFBV2QsSUFBWCxFQUFpQm9CLElBQWpCLEVBQXVCeEIsR0FBdkIsRUFBNkI7QUFDbkMsY0FBSXlCLE9BQU8sR0FBQy9CLEdBQUcsQ0FBQ2dDLDBCQUFKLENBQStCLENBQS9CLEVBQWlDQyxTQUFqQyxDQUFaLENBRG1DLENBRW5DOztBQUNBLGlCQUFPRixPQUFQO0FBQ0g7QUFOTCxPQURVLENBU1Y7QUFUVSxPQVB3QztBQWtCdERBLE1BQUFBLE9BQU8sRUFBQztBQUVKQSxRQUFBQSxPQUFPLEVBQUUsQ0FDTDtBQUNBLGVBRkssRUFFRyxLQUZILEVBR0w7QUFDSXBELFVBQUFBLE1BQU0sRUFBRSxPQURaO0FBRUk7QUFDQSxtQkFBUyxtQkFIYjtBQUlJLHdCQUFjLGdCQUpsQjtBQUtJdUQsVUFBQUEsU0FBUyxFQUFFO0FBTGYsU0FISztBQVVMO0FBRUE7QUFDSXhDLFVBQUFBLElBQUksRUFBRSxjQURWO0FBRUl5QyxVQUFBQSxTQUFTLEVBQUUseUJBRmY7QUFHSUMsVUFBQUEsSUFBSSxFQUFDO0FBQ0Q7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUU0QixvQkFBTztBQVJOLFdBSFQ7QUFhSUMsVUFBQUEsSUFBSSxFQUFFLGNBQVNDLEdBQVQsRUFBY2xDLElBQWQsRUFBb0JtQyxNQUFwQixFQUE0QjtBQUM5QjdELFlBQUFBLENBQUMsQ0FBQzBCLElBQUQsQ0FBRCxDQUFRbEIsV0FBUixDQUFvQixXQUFwQjtBQUNILFdBZkw7QUFnQklzRCxVQUFBQSxNQUFNLEVBQUUsZ0JBQVdDLENBQVgsRUFBY0MsRUFBZCxFQUFrQnRDLElBQWxCLEVBQXdCbUMsTUFBeEIsRUFBaUM7QUFDckN2QyxZQUFBQSxHQUFHLENBQUMwQixrQ0FBSixDQUF1Q08sU0FBdkM7QUFDQTtBQUM1QjtBQUNBO0FBQ0E7QUFFeUI7QUF2QkwsU0FaSztBQUZMLE9BbEI4QztBQTJEdEQsaUJBQVcsQ0FDUDtBQUFFLGdCQUFRO0FBQVYsT0FETyxFQUVQO0FBQUUsZ0JBQVE7QUFBVixPQUZPLEVBR1A7QUFBRSxnQkFBUTtBQUFWLE9BSE8sRUFJUDtBQUFFLGdCQUFRO0FBQVYsT0FKTyxFQUtQO0FBQUUsZ0JBQVE7QUFBVixPQUxPLEVBTVAsSUFOTyxDQTNEMkM7QUFtRXRELG1CQUFhLElBbkV5QztBQW9FdEQsc0JBQWdCLHNCQUFVVSxRQUFWLEVBQXFCO0FBQ2pDM0MsUUFBQUEsR0FBRyxDQUFDNEMscUJBQUosQ0FBMEJyRSxvQkFBMUI7QUFDSDtBQXRFcUQsS0FBbkMsQ0FBdkI7QUEwRUgsR0F0RkQ7O0FBd0ZBLE9BQUt1QixlQUFMLEdBQXVCLFVBQVVwQyxPQUFWLEVBQW1CO0FBQ3RDZ0IsSUFBQUEsQ0FBQyxDQUFDZCxJQUFJLENBQUNFLG9CQUFMLEdBQTBCLG1CQUEzQixDQUFELENBQWlEa0IsR0FBakQsQ0FBcUQsT0FBckQ7QUFDQU4sSUFBQUEsQ0FBQyxDQUFDZCxJQUFJLENBQUNFLG9CQUFMLEdBQTBCLG1CQUEzQixDQUFELENBQWlEbUIsRUFBakQsQ0FBb0QsT0FBcEQsRUFBNEQsWUFBVTtBQUNsRVAsTUFBQUEsQ0FBQyxDQUFDZCxJQUFJLENBQUNFLG9CQUFMLEdBQTBCLGNBQTNCLENBQUQsQ0FBNEMrRSxVQUE1QyxDQUF1RCxNQUF2RDtBQUNILEtBRkQ7QUFJQW5FLElBQUFBLENBQUMsQ0FBQ2QsSUFBSSxDQUFDRSxvQkFBTCxHQUEwQixjQUEzQixDQUFELENBQTRDK0UsVUFBNUMsQ0FBdUQ7QUFDbkRDLE1BQUFBLFVBQVUsRUFBRSxVQUR1QztBQUVuREMsTUFBQUEsUUFBUSxFQUFDLGtCQUFVQyxRQUFWLEVBQW1CO0FBQ3hCQyxRQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsUUFBWjtBQUNBdEUsUUFBQUEsQ0FBQyxDQUFDLG1CQUFELENBQUQsQ0FBdUJnQixJQUF2QixDQUE0QnNELFFBQVEsQ0FBQ0csVUFBVCxDQUFvQixHQUFwQixFQUF3QixHQUF4QixDQUE1QjtBQUVBekUsUUFBQUEsQ0FBQyxDQUFDLDZCQUFELENBQUQsQ0FBaUNzQyxHQUFqQyxDQUFxQ2dDLFFBQXJDO0FBRUg7QUFSa0QsS0FBdkQ7QUFZQXRFLElBQUFBLENBQUMsQ0FBQ2QsSUFBSSxDQUFDRSxvQkFBTCxHQUEwQixtQkFBM0IsQ0FBRCxDQUFpRGtCLEdBQWpELENBQXFELE9BQXJEO0FBQ0FOLElBQUFBLENBQUMsQ0FBQ2QsSUFBSSxDQUFDRSxvQkFBTCxHQUEwQixtQkFBM0IsQ0FBRCxDQUFpRG1CLEVBQWpELENBQW9ELE9BQXBELEVBQTRELFlBQVc7QUFDbkVYLE1BQUFBLElBQUksQ0FBQ2lCLHdCQUFMO0FBQ0gsS0FGRDtBQUdBYixJQUFBQSxDQUFDLENBQUNkLElBQUksQ0FBQ0Usb0JBQUwsR0FBMEIsZ0JBQTNCLENBQUQsQ0FBOENrQixHQUE5QyxDQUFrRCxPQUFsRDtBQUNBTixJQUFBQSxDQUFDLENBQUNkLElBQUksQ0FBQ0Usb0JBQUwsR0FBMEIsZ0JBQTNCLENBQUQsQ0FBOENtQixFQUE5QyxDQUFpRCxPQUFqRCxFQUF5RCxZQUFXO0FBQ2hFZ0UsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksb0JBQVo7QUFDQTVFLE1BQUFBLElBQUksQ0FBQ2lCLHdCQUFMO0FBRUEsVUFBSW1CLElBQUksR0FBRSxJQUFJMEMsUUFBSixDQUFhMUUsQ0FBQyxDQUFDLGdCQUFELENBQUQsQ0FBb0IsQ0FBcEIsQ0FBYixDQUFWOztBQUNBLFVBQUdBLENBQUMsQ0FBQyxpQkFBRCxDQUFELENBQXFCc0MsR0FBckIsR0FBMkJqQyxNQUEzQixHQUFrQyxDQUFyQyxFQUF1QztBQUNuQ3NFLFFBQUFBLEtBQUssQ0FBQ3BGLE1BQU4sQ0FBYSxPQUFiLEVBQXNCLHdCQUF0QixFQUFnRHFGLFlBQVksQ0FBQ0MsTUFBN0QsRUFBcUUsS0FBckU7QUFDQTtBQUNIOztBQUNELFVBQUkvRCxTQUFTLEdBQUNkLENBQUMsQ0FBQywwQkFBRCxDQUFmO0FBQ0F1RSxNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWTFELFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYUMsS0FBYixDQUFtQlYsTUFBbkIsR0FBMEIsQ0FBdEM7QUFFQTtBQUNaOztBQUNZLFVBQUcsQ0FBQ25CLElBQUksQ0FBQ0csV0FBVCxFQUFxQjtBQUNqQmtGLFFBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZMUQsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhQyxLQUFiLENBQW1CVixNQUFuQixHQUEwQixDQUF0Qzs7QUFDQSxZQUFHUyxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWFDLEtBQWIsQ0FBbUJWLE1BQW5CLEdBQTBCLENBQTdCLEVBQStCO0FBQzNCc0UsVUFBQUEsS0FBSyxDQUFDcEYsTUFBTixDQUFhLE9BQWIsRUFBc0IscUJBQXRCLEVBQTZDcUYsWUFBWSxDQUFDQyxNQUExRCxFQUFrRSxLQUFsRTtBQUNBO0FBQ0g7QUFDSjs7QUFFRDdDLE1BQUFBLElBQUksQ0FBQzhDLE1BQUwsQ0FBWWhFLFNBQVMsQ0FBQzRDLElBQVYsQ0FBZSxNQUFmLENBQVosRUFBbUM1QyxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWFDLEtBQWIsQ0FBbUIsQ0FBbkIsQ0FBbkM7QUFDQW5CLE1BQUFBLElBQUksQ0FBQ2lCLHdCQUFMLENBQThCQyxTQUE5QjtBQUVBZCxNQUFBQSxDQUFDLENBQUN1QyxJQUFGLENBQU87QUFDSEMsUUFBQUEsR0FBRyxFQUFDdEQsSUFBSSxDQUFDSSxHQUFMLENBQVNFLEtBRFY7QUFFSHdDLFFBQUFBLElBQUksRUFBQ0EsSUFGRjtBQUdIb0IsUUFBQUEsSUFBSSxFQUFDLE1BSEY7QUFJSDJCLFFBQUFBLFdBQVcsRUFBQyxLQUpUO0FBS0hDLFFBQUFBLFdBQVcsRUFBRSxLQUxWO0FBTUhDLFFBQUFBLFVBQVUsRUFBRSxzQkFBVyxDQUV0QixDQVJFO0FBU0h2QyxRQUFBQSxPQUFPLEVBQUUsaUJBQVNWLElBQVQsRUFBZTtBQUNwQnVDLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZeEMsSUFBWjs7QUFDQSxjQUFHQSxJQUFJLENBQUNVLE9BQUwsSUFBYyxJQUFqQixFQUFzQjtBQUNsQjlDLFlBQUFBLElBQUksQ0FBQ3NGLCtCQUFMLENBQXFDbEQsSUFBckM7QUFDSDtBQUNKLFNBZEU7QUFlSG1ELFFBQUFBLEtBQUssRUFBRSxlQUFTbkQsSUFBVCxFQUFlO0FBQ2xCdUMsVUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVl4QyxJQUFJLENBQUNvRCxZQUFqQjtBQUNBeEYsVUFBQUEsSUFBSSxDQUFDaUIsd0JBQUw7QUFDQXdFLFVBQUFBLHFCQUFxQixDQUFDckQsSUFBSSxDQUFDb0QsWUFBTCxDQUFrQkQsS0FBbkIsQ0FBckI7QUFDSDtBQW5CRSxPQUFQO0FBcUJILEtBOUNEO0FBZ0RBbkYsSUFBQUEsQ0FBQyxDQUFDZCxJQUFJLENBQUNFLG9CQUFMLEdBQTBCLHNCQUEzQixDQUFELENBQW9EbUIsRUFBcEQsQ0FBdUQsT0FBdkQsRUFBK0QsWUFBVztBQUN0RSxVQUFJeUIsSUFBSSxHQUFFLElBQUkwQyxRQUFKLENBQWExRSxDQUFDLENBQUMsZ0JBQUQsQ0FBRCxDQUFvQixDQUFwQixDQUFiLENBQVY7QUFDQSxVQUFJYyxTQUFTLEdBQUNkLENBQUMsQ0FBQywwQkFBRCxDQUFmO0FBQ0FnQyxNQUFBQSxJQUFJLENBQUM4QyxNQUFMLENBQVloRSxTQUFTLENBQUM0QyxJQUFWLENBQWUsTUFBZixDQUFaLEVBQW1DNUMsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhQyxLQUFiLENBQW1CLENBQW5CLENBQW5DO0FBQ0FpQixNQUFBQSxJQUFJLENBQUM4QyxNQUFMLENBQVksY0FBWixFQUEyQixDQUEzQjtBQUNBOUUsTUFBQUEsQ0FBQyxDQUFDdUMsSUFBRixDQUFPO0FBQ0hDLFFBQUFBLEdBQUcsRUFBQ3RELElBQUksQ0FBQ0ksR0FBTCxDQUFTRSxLQURWO0FBRUh3QyxRQUFBQSxJQUFJLEVBQUNBLElBRkY7QUFHSG9CLFFBQUFBLElBQUksRUFBQyxNQUhGO0FBSUgyQixRQUFBQSxXQUFXLEVBQUMsS0FKVDtBQUtIQyxRQUFBQSxXQUFXLEVBQUUsS0FMVjtBQU1IQyxRQUFBQSxVQUFVLEVBQUUsc0JBQVcsQ0FFdEIsQ0FSRTtBQVNIdkMsUUFBQUEsT0FBTyxFQUFFLGlCQUFTVixJQUFULEVBQWU7QUFDcEJ1QyxVQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWXhDLElBQVo7O0FBQ0EsY0FBR0EsSUFBSSxDQUFDVSxPQUFSLEVBQWdCO0FBQ1oxQyxZQUFBQSxDQUFDLENBQUMsMEJBQUQsQ0FBRCxDQUE4QjJDLE1BQTlCO0FBQ0EzQyxZQUFBQSxDQUFDLENBQUMsOEJBQUQsQ0FBRCxDQUFrQ3NGLElBQWxDO0FBQ0F0RixZQUFBQSxDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQlksUUFBdEIsQ0FBK0IsUUFBL0I7QUFDQVosWUFBQUEsQ0FBQyxDQUFDLHVCQUFELENBQUQsQ0FBMkI4RSxNQUEzQixDQUFrQyxvREFDOUIsdURBREo7QUFFSDtBQUNEO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUNpQixTQXZCRTtBQXdCSEssUUFBQUEsS0FBSyxFQUFFLGVBQVNuRCxJQUFULEVBQWU7QUFDbEJ1QyxVQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWXhDLElBQUksQ0FBQ29ELFlBQWpCO0FBQ0FDLFVBQUFBLHFCQUFxQixDQUFDckQsSUFBSSxDQUFDb0QsWUFBTCxDQUFrQkQsS0FBbkIsQ0FBckI7QUFDSDtBQTNCRSxPQUFQO0FBNkJILEtBbENEO0FBb0NILEdBM0dEOztBQTZHQSxPQUFLeEIsSUFBTCxHQUFZLFVBQVUzRSxPQUFWLEVBQW1CO0FBQzNCdUYsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksNEJBQVo7QUFDQXhFLElBQUFBLENBQUMsQ0FBQ0MsTUFBRixDQUFTZixJQUFULEVBQWVGLE9BQWY7QUFDQXVGLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLGNBQVo7QUFDQUQsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVl0RixJQUFaO0FBQ0E7QUFDUjtBQUNBOztBQUNRcUYsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVkscUJBQVo7QUFDQTVFLElBQUFBLElBQUksQ0FBQ2lELFlBQUwsQ0FBa0I3RCxPQUFsQjtBQUdILEdBWkQ7O0FBYUEsT0FBS3VHLE9BQUwsR0FBYSxZQUFXO0FBQ3BCLFdBQU9yRyxJQUFQO0FBQ0gsR0FGRDs7QUFHQSxNQUFJc0csaUJBQWlCLEdBQUMsS0FBdEI7O0FBRUEsT0FBS04sK0JBQUwsR0FBcUMsVUFBVU8sWUFBVixFQUF1QjtBQUN4REQsSUFBQUEsaUJBQWlCLEdBQUMsS0FBbEI7QUFDQTVGLElBQUFBLElBQUksQ0FBQzhGLG1DQUFMLENBQXlDRCxZQUFZLENBQUNFLElBQXREOztBQUNBLFFBQUdILGlCQUFILEVBQXFCO0FBQ2pCeEYsTUFBQUEsQ0FBQyxDQUFDLDhCQUFELENBQUQsQ0FBa0NzRixJQUFsQztBQUNBdEYsTUFBQUEsQ0FBQyxDQUFDLG1DQUFELENBQUQsQ0FBdUM0RixJQUF2QztBQUNBaEcsTUFBQUEsSUFBSSxDQUFDUSx5QkFBTDtBQUNILEtBSkQsTUFJSztBQUNESixNQUFBQSxDQUFDLENBQUMsOEJBQUQsQ0FBRCxDQUFrQzRGLElBQWxDO0FBQ0E1RixNQUFBQSxDQUFDLENBQUMsbUNBQUQsQ0FBRCxDQUF1Q3NGLElBQXZDO0FBQ0g7O0FBQ0R0RixJQUFBQSxDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQlEsV0FBdEIsQ0FBa0MsUUFBbEM7QUFDQVIsSUFBQUEsQ0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0JZLFFBQS9CLENBQXdDLFFBQXhDO0FBQ0gsR0FiRDs7QUFlQSxPQUFLOEUsbUNBQUwsR0FBeUMsVUFBVUcsZ0JBQVYsRUFBMkI7QUFDaEV0QixJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxnQkFBWjs7QUFDQSxTQUFLLElBQUlzQixHQUFULElBQWdCRCxnQkFBaEIsRUFBa0M7QUFDOUIsVUFBSTlELE9BQU8sR0FBQzhELGdCQUFnQixDQUFDQyxHQUFELENBQTVCO0FBQ0EsVUFBSUMsWUFBWSxHQUFDaEUsT0FBTyxDQUFDaUUsWUFBekI7QUFDQUQsTUFBQUEsWUFBWSxDQUFDRSxNQUFiLEdBQW9CbEUsT0FBTyxDQUFDa0UsTUFBNUI7QUFDQSxVQUFJQyxRQUFRLEdBQUNsRyxDQUFDLENBQUMseUNBQUQsQ0FBRCxDQUE2Q21HLElBQTdDLEVBQWI7QUFDQSxVQUFJQyxNQUFNLEdBQUNDLFFBQVEsQ0FBQ0QsTUFBVCxDQUFnQkYsUUFBaEIsRUFBeUJILFlBQXpCLENBQVg7QUFDQS9GLE1BQUFBLENBQUMsQ0FBQyx1QkFBRCxDQUFELENBQTJCOEUsTUFBM0IsQ0FBa0NzQixNQUFsQztBQUNBcEcsTUFBQUEsQ0FBQyxDQUFDLG9CQUFrQitCLE9BQU8sQ0FBQ2tFLE1BQTFCLEdBQWlDLEdBQWxDLENBQUQsQ0FBd0NyRixRQUF4QyxDQUFpRCxXQUFTWixDQUFDLENBQUNzRyxPQUFGLENBQVV2RSxPQUFPLENBQUN3RSxNQUFsQixDQUExRDtBQUNBM0csTUFBQUEsSUFBSSxDQUFDNEcsd0JBQUwsQ0FBOEJ6RSxPQUFPLENBQUNvRCxLQUF0QyxFQUE0Q3BELE9BQU8sQ0FBQ2tFLE1BQXBEOztBQUNBLFVBQUdsRSxPQUFPLENBQUMwRSxPQUFYLEVBQW1CO0FBQ2Y3RyxRQUFBQSxJQUFJLENBQUM4Ryx5QkFBTCxDQUErQjNFLE9BQU8sQ0FBQzBFLE9BQXZDLEVBQStDMUUsT0FBTyxDQUFDa0UsTUFBdkQ7QUFDSDtBQUNKO0FBQ0osR0FmRDs7QUFnQkEsT0FBS1MseUJBQUwsR0FBK0IsVUFBVUMsWUFBVixFQUF1QlYsTUFBdkIsRUFBOEI7QUFDekQsUUFBR1UsWUFBWSxDQUFDdEcsTUFBYixHQUFvQixDQUF2QixFQUF5QjtBQUNyQjtBQUNIOztBQUNEa0UsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVltQyxZQUFaLEVBSnlELENBS3pEOztBQUNBLFFBQUlDLE1BQU0sR0FBQzVHLENBQUMsQ0FBQyxvQkFBa0JpRyxNQUFsQixHQUF5QixHQUExQixDQUFaOztBQUNBLFNBQUssSUFBSUgsR0FBVCxJQUFnQmEsWUFBaEIsRUFBOEI7QUFDMUIsVUFBSUUsTUFBTSxHQUFDRCxNQUFNLENBQUNFLElBQVAsQ0FBWSxzQkFBb0JoQixHQUFwQixHQUF3QixJQUFwQyxDQUFYO0FBQ0FlLE1BQUFBLE1BQU0sQ0FBQ2pHLFFBQVAsQ0FBZ0IsWUFBaEI7QUFDQSxVQUFJbUcsY0FBYyxHQUFDL0csQ0FBQyxDQUFDZ0gsUUFBUSxDQUFDQyxhQUFULENBQXVCLE1BQXZCLENBQUQsQ0FBRCxDQUFrQ2pHLElBQWxDLENBQXVDMkYsWUFBWSxDQUFDYixHQUFELENBQVosQ0FBa0JvQixHQUF6RCxFQUE4RHRHLFFBQTlELENBQXVFLGNBQXZFLENBQW5CO0FBQ0FpRyxNQUFBQSxNQUFNLENBQUMvQixNQUFQLENBQWNpQyxjQUFkO0FBQ0g7QUFFSixHQWREOztBQWVBLE9BQUtQLHdCQUFMLEdBQThCLFVBQVVXLFVBQVYsRUFBcUJsQixNQUFyQixFQUE0QjtBQUN0RCxRQUFHa0IsVUFBVSxDQUFDOUcsTUFBWCxHQUFrQixDQUFyQixFQUF1QjtBQUNuQjtBQUNILEtBSHFELENBSXREOzs7QUFDQWtFLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZMkMsVUFBWjtBQUNBM0IsSUFBQUEsaUJBQWlCLEdBQUcsSUFBcEIsQ0FOc0QsQ0FRdEQ7O0FBQ0EsUUFBRyxPQUFPMkIsVUFBVSxDQUFDQyxNQUFsQixJQUEyQixXQUE5QixFQUEwQztBQUN0QztBQUNIOztBQUNELFFBQUlSLE1BQU0sR0FBQzVHLENBQUMsQ0FBQyxvQkFBa0JpRyxNQUFsQixHQUF5QixHQUExQixDQUFaOztBQUNBLFNBQUssSUFBSUgsR0FBVCxJQUFnQnFCLFVBQVUsQ0FBQ0MsTUFBM0IsRUFBbUM7QUFDL0IsVUFBSVAsTUFBTSxHQUFDRCxNQUFNLENBQUNFLElBQVAsQ0FBWSxzQkFBb0JoQixHQUFwQixHQUF3QixJQUFwQyxDQUFYO0FBQ0FlLE1BQUFBLE1BQU0sQ0FBQ2pHLFFBQVAsQ0FBZ0IsV0FBaEI7QUFDQSxVQUFJeUcsWUFBWSxHQUFDckgsQ0FBQyxDQUFDZ0gsUUFBUSxDQUFDQyxhQUFULENBQXVCLE1BQXZCLENBQUQsQ0FBRCxDQUFrQ2pHLElBQWxDLENBQXVDbUcsVUFBVSxDQUFDQyxNQUFYLENBQWtCdEIsR0FBbEIsQ0FBdkMsRUFBK0RsRixRQUEvRCxDQUF3RSxZQUF4RSxDQUFqQjtBQUNBaUcsTUFBQUEsTUFBTSxDQUFDL0IsTUFBUCxDQUFjdUMsWUFBZDtBQUNIO0FBQ0osR0FuQkQ7QUFvQkgsQ0FqWkQiLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuUHJpY2VMaXN0QWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSkge1xuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6XCIucHJpY2VMaXN0Rm9ybVwiLFxuICAgICAgICB0ZXN0RmlsZU1vZDpmYWxzZSxcbiAgICAgICAgVVJMOntcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcbiAgICAgICAgICAgIHN0b3JlOicnLFxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDonJyxcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBQcmljZUxpc3QgPSB7fTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IGRhdGFUYWJsZUNTU1NlbGVjdG9yPW51bGw7XG5cblxuXG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgZGVidWcoJ1ByaWNlTGlzdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgbGV0IGVycm9yUm93UG9pbnRlcj1udWxsO1xuICAgIGxldCBlcnJvclJvd0NvdW50PTA7XG5cbiAgICB0aGlzLmluaXRFcnJvck5hdmlnYXRpb25CdXR0b249ZnVuY3Rpb24gKCl7XG5cbiAgICAgICAgZXJyb3JSb3dDb3VudD0kKCcuc3RhdHVzRXJyb3InKS5sZW5ndGg7XG4gICAgICAgIGVycm9yUm93UG9pbnRlcj1udWxsO1xuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uUHJldkVycm9yIC5idXR0b25OZXh0RXJyb3InKS5vZmYoJ2NsaWNrJylcbiAgICAgICAgJCgnLnByaWNlTGlzdEZvcm0gLmJ1dHRvblByZXZFcnJvcicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI9PW51bGwpe1xuICAgICAgICAgICAgICAgIGVycm9yUm93UG9pbnRlcj0wO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYoZXJyb3JSb3dQb2ludGVyPjApe1xuICAgICAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXItLTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm47fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJCgnLnN0YXR1c0Vycm9yJykucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZVdyYXBwZXInKS5zY3JvbGxUb3AoJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5wb3NpdGlvbigpLnRvcCk7XG4gICAgICAgICAgICAkKCQoJy5zdGF0dXNFcnJvcicpW2Vycm9yUm93UG9pbnRlcl0pLmFkZENsYXNzKCdoaWdobGlnaHRlZEVycm9yUm93Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uTmV4dEVycm9yJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uTmV4dEVycm9yJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGlmKGVycm9yUm93UG9pbnRlcj09bnVsbCl7XG4gICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyPTA7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI8ZXJyb3JSb3dDb3VudC0xKXtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyKys7XG4gICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuO31cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICQoJy5zdGF0dXNFcnJvcicpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHRlZEVycm9yUm93Jyk7XG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGVXcmFwcGVyJykuc2Nyb2xsVG9wKCQoJCgnLnN0YXR1c0Vycm9yJylbZXJyb3JSb3dQb2ludGVyXSkucG9zaXRpb24oKS50b3ApO1xuICAgICAgICAgICAgJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWRFcnJvclJvdycpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlPWZ1bmN0aW9uIChmaWxlSW5wdXQpe1xuICAgICAgICAvKlxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXQuYXR0cignbmFtZScpKTtcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xuICAgICAgICAqL1xuICAgICAgICBpZihmaWxlSW5wdXQpe1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXNbMF0pe1xuICAgICAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dChmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkRmlsZU5hbWUnKS50ZXh0KCcnKTtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XG5cbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSA+IHRib2R5JykuZW1wdHkoKTtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja05ld1ByaWNlTGlzdENhbGxCYWNrPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcbiAgICB9XG4gICAgdGhpcy5jbGlja05ld1ByaWNlTGlzdD1mdW5jdGlvbigpe1xuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2spO1xuICAgIH1cbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcbiAgICAgICAgLy9fdG9rZW5cbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIH0pO1xuLypcbiovXG5cblxuICAgIH1cblxuICAgIHRoaXMuaW5pdFZpZXdMaXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5jbGlja05ld1ByaWNlTGlzdCxcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcblxuICAgICAgICB9KVxuXG5cbiAgICAgICAgQVBQLmRhdGFUYWJsZVByaWNlTGlzdD0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0xLFxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2J1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYnV0dG9uczp7XG5cbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vJ2NyZWF0ZVN0YXRlJywgJ3NhdmVkU3RhdGVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xuXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYToxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb25maWcpOyovXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic3VwcGxpZXJOYW1lXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImF2YWlsYWJsZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5vdGVcIiB9LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSApO1xuXG5cbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRlUGlja2VyQ2xpY2snKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRlUGlja2VyQ2xpY2snKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoJ3Nob3cnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKHtcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXG4gICAgICAgICAgICBvblNlbGVjdDpmdW5jdGlvbiAoZGF0ZVRleHQpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICAkKCcuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsJy4nKSk7XG5cbiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwiYXZhaWxhYmxlRGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvbk5ld1VwbG9hZCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvbk5ld1VwbG9hZCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0tJyk7XG4gICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xuXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xuICAgICAgICAgICAgaWYoJCgnLnN1cHBsaWVyU2VsZWN0JykudmFsKCkubGVuZ3RoPDEpe1xuICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIkhpYmEhXCIsICdBZGpvbiBtZWcgYmVzesOhbGzDrXTDs3QhJywgVE9BU1RfU1RBVFVTLkRBTkdFUiwgMTAwMDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBQcmljZUxpc3RGaWxlJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpO1xuXG4gICAgICAgICAgICAvKiB0ZXN6dGVsZXMgbWlhdHQga2lrYXBjc29sdmEgYSBmYWpsIGVsbGVub3J6ZXNcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZighT3B0cy50ZXN0RmlsZU1vZCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzLmxlbmd0aDwxKTtcbiAgICAgICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJIaWJhIVwiLCAnVsOhbGxhc3pvbiBraSBmw6FqbHQhJywgVE9BU1RfU1RBVFVTLkRBTkdFUiwgMTAwMDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XG4gICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZShmaWxlSW5wdXQpO1xuXG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDpPcHRzLlVSTC5zdG9yZSxcbiAgICAgICAgICAgICAgICBkYXRhOmRhdGEsXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvbkZpbmFsaXphdGlvbicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xuICAgICAgICAgICAgbGV0IGZpbGVJbnB1dD0kKCcjaW5wdXRHcm91cFByaWNlTGlzdEZpbGUnKTtcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaW5hbGl6YXRpb24nLDEpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6T3B0cy5VUkwuc3RvcmUsXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnVwbG9hZFN0YXR1c1JvdyA+LmNhbkZpbmlzaCcpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgdGJvZHknKS5hcHBlbmQoJzx0cj48dGQgY29sc3Bhbj1cIjk5XCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBmb250LXNpemU6IDJlbTtcIj4gw4FybGlzdMOhdCBlbG1lbnRldHTDvGsuPC90ZD48L3RyPicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09MSl7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJpY2VMaXN0QWRtaW4gaW5pdCBjYWxsZWQnKTtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdPcHQgZXh0ZW5kZWQnKTtcbiAgICAgICAgY29uc29sZS5sb2coT3B0cyk7XG4gICAgICAgIC8qXG4gICAgICAgIEluaXQgbGlzdCB2aWV3XG4gICAgICAgICovXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsIGxpc3QgdmlldyBJbml0Jyk7XG4gICAgICAgIHJvb3QuaW5pdFZpZXdMaXN0KG9wdGlvbnMpO1xuXG5cbiAgICB9XG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgbGV0IHByaWNlTGlzdEhhc0Vycm9yPWZhbHNlO1xuXG4gICAgdGhpcy5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlPWZ1bmN0aW9uIChyZXNwb25zZURhdGEpe1xuICAgICAgICBwcmljZUxpc3RIYXNFcnJvcj1mYWxzZTtcbiAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cyhyZXNwb25zZURhdGEucm93cyk7XG4gICAgICAgIGlmKHByaWNlTGlzdEhhc0Vycm9yKXtcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cgPi5jYW5GaW5pc2gnKS5oaWRlKCk7XG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5zaG93KCk7XG4gICAgICAgICAgICByb290LmluaXRFcnJvck5hdmlnYXRpb25CdXR0b24oKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuc2hvdygpO1xuICAgICAgICAgICAgJCgnLnVwbG9hZFN0YXR1c1JvdyA+LmNhbkZpbmlzaEVycm9yJykuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cz1mdW5jdGlvbiAocmVzcG9uc2VSb3dzRGF0YSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdwcm9jZXNzaW5nUm93cycpO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcmVzcG9uc2VSb3dzRGF0YSkge1xuICAgICAgICAgICAgbGV0IHJvd0RhdGE9cmVzcG9uc2VSb3dzRGF0YVtrZXldO1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlRGF0YT1yb3dEYXRhLm9yaWdpbmFsRGF0YTtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5yb3dOdW09cm93RGF0YS5yb3dOdW07XG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJpY2VMaXN0VGFibGVSb3dcIl0nKS5odG1sKClcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLHRlbXBsYXRlRGF0YSk7XG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcbiAgICAgICAgICAgICQoJ3RyW2RhdGEtcm93bnVtPScrcm93RGF0YS5yb3dOdW0rJ10nKS5hZGRDbGFzcygnc3RhdHVzJyskLnVjRmlyc3Qocm93RGF0YS5zdGF0dXMpKTtcbiAgICAgICAgICAgIHJvb3QucHJvY2Vzc1Jlc3BvbnNlUm93RXJyb3JzKHJvd0RhdGEuZXJyb3Iscm93RGF0YS5yb3dOdW0pO1xuICAgICAgICAgICAgaWYocm93RGF0YS5jaGFuZ2VkKXtcbiAgICAgICAgICAgICAgICByb290LnByb2Nlc3NSZXNwb25zZVJvd0NoYW5nZWQocm93RGF0YS5jaGFuZ2VkLHJvd0RhdGEucm93TnVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NSZXNwb25zZVJvd0NoYW5nZWQ9ZnVuY3Rpb24gKGNoYW5nZWRBcnJheSxyb3dOdW0pe1xuICAgICAgICBpZihjaGFuZ2VkQXJyYXkubGVuZ3RoPDEpe1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYW5nZWRBcnJheSk7XG4gICAgICAgIC8vZmllbGRzIGVycm9yIHJlc3pcbiAgICAgICAgbGV0IHRyTm9kZT0kKCd0cltkYXRhLXJvd251bT0nK3Jvd051bSsnXScpO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gY2hhbmdlZEFycmF5KSB7XG4gICAgICAgICAgICBsZXQgdGROb2RlPXRyTm9kZS5maW5kKCd0ZFtkYXRhLXBvaW50ZXI9XCInK2tleSsnXCJdJyk7XG4gICAgICAgICAgICB0ZE5vZGUuYWRkQ2xhc3MoJ2JnLXByaW1hcnknKTtcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGNoYW5nZWRBcnJheVtrZXldLm9sZCkuYWRkQ2xhc3MoJ2ZpZWxkQ2hhbmdlZCcpO1xuICAgICAgICAgICAgdGROb2RlLmFwcGVuZChjaGFuZ2VkVHh0Tm9kZSk7XG4gICAgICAgIH1cblxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NSZXNwb25zZVJvd0Vycm9ycz1mdW5jdGlvbiAoZXJyb3JBcnJheSxyb3dOdW0pe1xuICAgICAgICBpZihlcnJvckFycmF5Lmxlbmd0aDwxKXtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL2dlbmVyYWwgZXJyb3IgcmVzelxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvckFycmF5KTtcbiAgICAgICAgcHJpY2VMaXN0SGFzRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIC8vZmllbGRzIGVycm9yIHJlc3pcbiAgICAgICAgaWYodHlwZW9mIGVycm9yQXJyYXkuZmllbGRzID09J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0ck5vZGU9JCgndHJbZGF0YS1yb3dudW09Jytyb3dOdW0rJ10nKTtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGVycm9yQXJyYXkuZmllbGRzKSB7XG4gICAgICAgICAgICBsZXQgdGROb2RlPXRyTm9kZS5maW5kKCd0ZFtkYXRhLXBvaW50ZXI9XCInK2tleSsnXCJdJyk7XG4gICAgICAgICAgICB0ZE5vZGUuYWRkQ2xhc3MoJ2JnLWRhbmdlcicpO1xuICAgICAgICAgICAgbGV0IGVycm9yVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGVycm9yQXJyYXkuZmllbGRzW2tleV0pLmFkZENsYXNzKCdmaWVsZEVycm9yJyk7XG4gICAgICAgICAgICB0ZE5vZGUuYXBwZW5kKGVycm9yVHh0Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIl0sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9wcmljZUxpc3QuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/priceList.js\n");
/***/ }),
/***/ "./resources/js/admin/priceListProfitCenter.js":
/*!*****************************************************!*\
!*** ./resources/js/admin/priceListProfitCenter.js ***!
\*****************************************************/
/***/ (() => {
eval("window.PriceListProfitCenterAdmin = function (options) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerPriceListProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n getProductGroupHTML: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var root = this;\n /*\n * Constructor\n */\n\n this.construct = function (options, SupplierItem) {\n console.log('PriceListProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n };\n\n this.getOpts = function () {\n return Opts;\n };\n\n var changeParameter = {\n supplier: '',\n profitCenter: '',\n deliveryDate: ''\n /*\n supplier:26,\n profitCenter:49,\n deliveryDate:'2023-09-10',\n */\n\n };\n\n this.checkRefreshPossible = function () {\n console.log('check need parameter');\n var needRefresh = true;\n $.each(changeParameter, function (name, data) {\n if (data === '') {\n needRefresh = false;\n }\n });\n\n if (needRefresh) {\n root.refreshDatatable();\n root.refreshProductGroup();\n root.setDatatableHeaderText('');\n }\n };\n\n this.setDatatableHeaderText = function (text) {\n $('.tableHeaderText').text(text);\n };\n\n this.getTreePathName = function (node) {\n var res = '';\n var items = $(node).parents('li').toArray();\n items.shift();\n items.reverse();\n\n for (var item in items) {\n if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n\n res += $(node).text();\n return res;\n };\n\n this.bindProductGroupItem = function () {\n $('.sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\n console.log(groupId);\n console.log(root.getTreePathName(this));\n */\n\n root.refreshDatatable();\n });\n };\n\n this.refreshProductGroup = function () {\n var ajaxData = {\n 'supplierId': changeParameter.supplier,\n 'deliveryDate': changeParameter.deliveryDate\n };\n var ajaxUrl = Opts.URL.getProductGroupHTML;\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: 'GET',\n contentType: false,\n processData: true,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n $('.sidebar-menu .productGroup').find('ul').html(data);\n root.bindProductGroupItem();\n },\n error: function error(data) {\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n\n this.refreshDatatable = function () {\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n\n this.changePriceListProfitCenterParameter = function (e, obj) {\n if (typeof obj == 'undefined') {\n obj = $(this);\n }\n\n var objName = obj.attr(\"name\");\n\n if (objName == 'supplier') {\n selectedProductGroup = null;\n }\n\n var data = '';\n\n if (obj.get(0).nodeName == 'SELECT') {\n if (obj.select2('data').length > 0) {\n data = obj.select2('data')[0].id;\n }\n\n ;\n } else {\n data = obj.val();\n }\n\n if (changeParameter[objName] != data) {\n changeParameter[objName] = data;\n root.checkRefreshPossible();\n }\n };\n\n this.init = function (options) {\n $.extend(Opts, options);\n var CSSSelectorForm = Opts.containerCssSelector;\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $('.supplierSelect').on('change', root.changePriceListProfitCenterParameter);\n $('.profitCenterSelect').on('change', root.changePriceListProfitCenterParameter); //$('input[name=\"deliveryDate\"]').on('change',changePriceListProfitCenterParameter);\n\n $(\".supplierSelect\").select2({\n maximumSelectionLength: 1\n });\n /*\n */\n\n $(\".profitCenterSelect\").select2({\n maximumSelectionLength: 1\n });\n $(CSSSelectorForm + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n minDate: new Date(),\n onSelect: function onSelect(dateText, obj) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n root.changePriceListProfitCenterParameter(null, $(obj.input));\n }\n }); //root.initViewList();\n\n var table = root.getDatatables('');\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n /*\n /!*\n ----------------------------------------------------------\n Add event listener for opening and closing details\n *!/\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\n let tr = $(this).closest('tr');\n let row = table.row( tr );\n if ( row.child.isShown() ) {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n }\n else {\n // Open this row\n row.child( root.productSelectDatatablesRowFormatter(row.data()) ).show();\n tr.addClass('shown');\n root.bindProductDetailsAction();\n }\n } );*/\n };\n\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n $('td:contains(\"*\")').html('');\n $('td.details-control').removeClass('details-control');\n };\n\n var selectedProductGroup = null;\n\n this.getDatatables = function (orderType) {\n var table = $('.dataTableOrderProductSelect').DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContent,\n data: function data(_data) {\n /*\n data.searchStr=dataTableSearchStr;\n data.krel=dataTableSearchKrel;\n data.groupId=selectedProductGroup;\n */\n _data.supplierId = changeParameter.supplier;\n _data.profitCenterId = changeParameter.profitCenter;\n _data.deliveryDate = changeParameter.deliveryDate;\n _data.groupId = selectedProductGroup;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": APP.OrderModule.productSelectDataTableColumnDefs(),\n \"columns\": APP.OrderModule.productSelectDataTableColumn(),\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJpY2VMaXN0UHJvZml0Q2VudGVyLmpzP2U5OTgiXSwibmFtZXMiOlsid2luZG93IiwiUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW4iLCJvcHRpb25zIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJnZXRQcm9kdWN0R3JvdXBIVE1MIiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb25zdHJ1Y3QiLCJTdXBwbGllckl0ZW0iLCJjb25zb2xlIiwibG9nIiwiJCIsImV4dGVuZCIsImdldE9wdHMiLCJjaGFuZ2VQYXJhbWV0ZXIiLCJzdXBwbGllciIsInByb2ZpdENlbnRlciIsImRlbGl2ZXJ5RGF0ZSIsImNoZWNrUmVmcmVzaFBvc3NpYmxlIiwibmVlZFJlZnJlc2giLCJlYWNoIiwibmFtZSIsImRhdGEiLCJyZWZyZXNoRGF0YXRhYmxlIiwicmVmcmVzaFByb2R1Y3RHcm91cCIsInNldERhdGF0YWJsZUhlYWRlclRleHQiLCJ0ZXh0IiwiZ2V0VHJlZVBhdGhOYW1lIiwibm9kZSIsInJlcyIsIml0ZW1zIiwicGFyZW50cyIsInRvQXJyYXkiLCJzaGlmdCIsInJldmVyc2UiLCJpdGVtIiwiY2hpbGRyZW4iLCJsZW5ndGgiLCJiaW5kUHJvZHVjdEdyb3VwSXRlbSIsIm9mZiIsIm9uIiwiZ3JvdXBJZCIsInNlbGVjdGVkUHJvZHVjdEdyb3VwIiwiYWpheERhdGEiLCJhamF4VXJsIiwiYWpheCIsInVybCIsInR5cGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInN1Y2Nlc3MiLCJmaW5kIiwiaHRtbCIsImVycm9yIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwicmVzcG9uc2VKU09OIiwiRGF0YVRhYmxlIiwicmVsb2FkIiwiY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyIiwiZSIsIm9iaiIsIm9iak5hbWUiLCJhdHRyIiwiZ2V0Iiwibm9kZU5hbWUiLCJzZWxlY3QyIiwiaWQiLCJ2YWwiLCJpbml0IiwiQ1NTU2VsZWN0b3JGb3JtIiwiY2xpY2siLCJkYXRlcGlja2VyIiwibWF4aW11bVNlbGVjdGlvbkxlbmd0aCIsImRhdGVGb3JtYXQiLCJtaW5EYXRlIiwiRGF0ZSIsIm9uU2VsZWN0IiwiZGF0ZVRleHQiLCJyZXBsYWNlQWxsIiwiaW5wdXQiLCJ0YWJsZSIsImdldERhdGF0YWJsZXMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUIiwicmVtb3ZlQ2xhc3MiLCJvcmRlclR5cGUiLCJsYW5ndWFnZSIsInN1cHBsaWVySWQiLCJwcm9maXRDZW50ZXJJZCIsImJ1dHRvbnMiLCJBUFAiLCJPcmRlck1vZHVsZSIsInByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW5EZWZzIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbiJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsMEJBQVAsR0FBa0MsVUFBVUMsT0FBVixFQUFtQjtBQUNqRDtBQUNKO0FBQ0E7QUFDQTtBQUNJLE1BQUlDLElBQUksR0FBRztBQUNQQyxJQUFBQSxLQUFLLEVBQUUsSUFEQTtBQUVQQyxJQUFBQSxvQkFBb0IsRUFBRSxpQ0FGZjtBQUdQQyxJQUFBQSxRQUFRLEVBQUUsS0FISDtBQUlQQyxJQUFBQSxHQUFHLEVBQUU7QUFDREMsTUFBQUEsbUJBQW1CLEVBQUUsRUFEcEI7QUFFREMsTUFBQUEsbUJBQW1CLEVBQUUsRUFGcEI7QUFHREMsTUFBQUEsS0FBSyxFQUFFLEVBSE47QUFJREMsTUFBQUEsSUFBSSxFQUFFLEVBSkw7QUFLREMsTUFBQUEsSUFBSSxFQUFFLEVBTEw7QUFNREMsTUFBQUEsTUFBTSxFQUFF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LENBQUQsQ0FBa0M4QyxTQUFsQyxDQUE2QztBQUNyRDZCLE1BQUFBLFFBQVEsRUFBRTtBQUNOeEMsUUFBQUEsR0FBRyxFQUFFO0FBREMsT0FEMkM7QUFLckQ7QUFDQSxjQUFRO0FBQ0pBLFFBQUFBLEdBQUcsRUFBQ3pELElBQUksQ0FBQ0ksR0FBTCxDQUFTQyxtQkFEVDtBQUVKNEIsUUFBQUEsSUFBSSxFQUFDLGNBQVVBLEtBQVYsRUFBZ0I7QUFDakI7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDb0JBLFVBQUFBLEtBQUksQ0FBQ2lFLFVBQUwsR0FBZ0J6RSxlQUFlLENBQUNDLFFBQWhDO0FBQ0FPLFVBQUFBLEtBQUksQ0FBQ2tFLGNBQUwsR0FBb0IxRSxlQUFlLENBQUNFLFlBQXBDO0FBQ0FNLFVBQUFBLEtBQUksQ0FBQ0wsWUFBTCxHQUFrQkgsZUFBZSxDQUFDRyxZQUFsQztBQUNBSyxVQUFBQSxLQUFJLENBQUNtQixPQUFMLEdBQWFDLG9CQUFiO0FBQ0g7QUFaRyxPQU42QztBQW9CckQrQyxNQUFBQSxPQUFPLEVBQUU7QUFDTEEsUUFBQUEsT0FBTyxFQUFFO0FBREosT0FwQjRDO0FBdUJyRCxvQkFBY0MsR0FBRyxDQUFDQyxXQUFKLENBQWdCQyxnQ0FBaEIsRUF2QnVDO0FBd0JyRCxpQkFBV0YsR0FBRyxDQUFDQyxXQUFKLENBQWdCRSw0QkFBaEIsRUF4QjBDO0FBeUJyRCxlQUFTLENBQUMsQ0FBQyxDQUFELEVBQUksS0FBSixDQUFEO0FBekI0QyxLQUE3QyxDQUFaO0FBMkJBLFdBQU9aLEtBQVA7QUFDSCxHQTdCRDtBQWdDSCxDQTFQRCIsInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5QcmljZUxpc3RQcm9maXRDZW50ZXJBZG1pbj1mdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByaWNlTGlzdFByb2ZpdENlbnRlcicsXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcbiAgICAgICAgVVJMOiB7XG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcbiAgICAgICAgICAgIGdldFByb2R1Y3RHcm91cEhUTUw6ICcnLFxuICAgICAgICAgICAgaW5kZXg6ICcnLFxuICAgICAgICAgICAgc2hvdzogJycsXG4gICAgICAgICAgICBlZGl0OiAnJyxcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXG4gICAgICAgICAgICBzdG9yZTogJycsXG4gICAgICAgICAgICB1cGRhdGU6ICcnLFxuICAgICAgICAgICAgZGVzdHJveTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFUYWJsZToge1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ11cbiAgICAgICAgfSxcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczogZnVuY3Rpb24gKCkge1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIFN1cHBsaWVySXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgbGV0IGNoYW5nZVBhcmFtZXRlcj17XG4gICAgICAgIHN1cHBsaWVyOicnLFxuICAgICAgICBwcm9maXRDZW50ZXI6JycsXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZTonJyxcbiAgICAgICAgLypcbiAgICAgICAgc3VwcGxpZXI6MjYsXG4gICAgICAgIHByb2ZpdENlbnRlcjo0OSxcbiAgICAgICAgZGVsaXZlcnlEYXRlOicyMDIzLTA5LTEwJyxcbiAgICAgICAgKi9cblxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tSZWZyZXNoUG9zc2libGU9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjaGVjayBuZWVkIHBhcmFtZXRlcicpO1xuICAgICAgICBsZXQgbmVlZFJlZnJlc2g9dHJ1ZTtcbiAgICAgICAgJC5lYWNoKGNoYW5nZVBhcmFtZXRlcixmdW5jdGlvbiAobmFtZSxkYXRhKXtcbiAgICAgICAgICAgIGlmKGRhdGE9PT0nJyl7XG4gICAgICAgICAgICAgICAgbmVlZFJlZnJlc2g9ZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZihuZWVkUmVmcmVzaCl7XG4gICAgICAgICAgICByb290LnJlZnJlc2hEYXRhdGFibGUoKVxuICAgICAgICAgICAgcm9vdC5yZWZyZXNoUHJvZHVjdEdyb3VwKCk7XG4gICAgICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0RGF0YXRhYmxlSGVhZGVyVGV4dD1mdW5jdGlvbih0ZXh0KXtcbiAgICAgICAgJCgnLnRhYmxlSGVhZGVyVGV4dCcpLnRleHQodGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5nZXRUcmVlUGF0aE5hbWU9ZnVuY3Rpb24gKG5vZGUpe1xuICAgICAgICBsZXQgcmVzPScnO1xuICAgICAgICBsZXQgaXRlbXM9JChub2RlKS5wYXJlbnRzKCdsaScpLnRvQXJyYXkoKTtcbiAgICAgICAgaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gaW4gaXRlbXMpIHtcbiAgICAgICAgICAgIGlmKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICByZXMrPSQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLnRleHQoKSsnLydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXMrPSQobm9kZSkudGV4dCgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHRoaXMuYmluZFByb2R1Y3RHcm91cEl0ZW09ZnVuY3Rpb24oKXtcbiAgICAgICAgJCgnLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9uKCdjbGljaycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwSWQ9JCh0aGlzKS5kYXRhKCdpZCcpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvZHVjdEdyb3VwPWdyb3VwSWQ7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KHJvb3QuZ2V0VHJlZVBhdGhOYW1lKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdyb3VwSWQpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvb3QuZ2V0VHJlZVBhdGhOYW1lKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHJvb3QucmVmcmVzaERhdGF0YWJsZSgpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hQcm9kdWN0R3JvdXA9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBhamF4RGF0YT17XG4gICAgICAgICAgICAnc3VwcGxpZXJJZCc6Y2hhbmdlUGFyYW1ldGVyLnN1cHBsaWVyLFxuICAgICAgICAgICAgJ2RlbGl2ZXJ5RGF0ZSc6Y2hhbmdlUGFyYW1ldGVyLmRlbGl2ZXJ5RGF0ZVxuICAgICAgICB9XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmdldFByb2R1Y3RHcm91cEhUTUw7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICB0eXBlOidHRVQnLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICQoJy5zaWRlYmFyLW1lbnUgLnByb2R1Y3RHcm91cCcpLmZpbmQoJ3VsJykuaHRtbChkYXRhKTtcbiAgICAgICAgICAgICAgICByb290LmJpbmRQcm9kdWN0R3JvdXBJdGVtKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaERhdGF0YWJsZT1mdW5jdGlvbiAoKXtcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcj1mdW5jdGlvbihlLG9iail7XG4gICAgICAgIGlmKHR5cGVvZiBvYmogPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICBvYmo9JCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb2JqTmFtZT1vYmouYXR0cihcIm5hbWVcIik7XG4gICAgICAgIGlmKG9iak5hbWU9PSdzdXBwbGllcicpe1xuICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9bnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YT0nJztcbiAgICAgICAgaWYob2JqLmdldCgwKS5ub2RlTmFtZT09J1NFTEVDVCcpe1xuICAgICAgICAgICAgaWYob2JqLnNlbGVjdDIoJ2RhdGEnKS5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgICAgZGF0YT1vYmouc2VsZWN0MignZGF0YScpWzBdLmlkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBkYXRhPW9iai52YWwoKVxuICAgICAgICB9XG4gICAgICAgIGlmKGNoYW5nZVBhcmFtZXRlcltvYmpOYW1lXSE9ZGF0YSl7XG4gICAgICAgICAgICBjaGFuZ2VQYXJhbWV0ZXJbb2JqTmFtZV09ZGF0YTtcbiAgICAgICAgICAgIHJvb3QuY2hlY2tSZWZyZXNoUG9zc2libGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyl7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3I7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmRhdGVQaWNrZXJDbGljaycpLmNsaWNrKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcignc2hvdycpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKCcuc3VwcGxpZXJTZWxlY3QnKS5vbignY2hhbmdlJyxyb290LmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcik7XG4gICAgICAgICQoJy5wcm9maXRDZW50ZXJTZWxlY3QnKS5vbignY2hhbmdlJyxyb290LmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcik7XG5cbiAgICAgICAgLy8kKCdpbnB1dFtuYW1lPVwiZGVsaXZlcnlEYXRlXCJdJykub24oJ2NoYW5nZScsY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyKTtcblxuXG4gICAgICAgICQoXCIuc3VwcGxpZXJTZWxlY3RcIikuc2VsZWN0Mih7XG4gICAgICAgICAgICBtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgLypcbiAgICAgICAgKi9cbiAgICAgICAgJChcIi5wcm9maXRDZW50ZXJTZWxlY3RcIikuc2VsZWN0Mih7XG4gICAgICAgICAgICBtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAxLFxuICAgICAgICB9KTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKHtcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXG4gICAgICAgICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCxvYmopIHtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0LnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XG4gICAgICAgICAgICAgICAgcm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIobnVsbCwkKG9iai5pbnB1dCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vcm9vdC5pbml0Vmlld0xpc3QoKTtcbiAgICAgICAgbGV0IHRhYmxlID0gcm9vdC5nZXREYXRhdGFibGVzKCcnKTtcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLm9uKCAnZHJhdy5kdCcscm9vdC5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUKS5kYXRhVGFibGUoKTtcbiAgICAgICAgLypcbiAgICAgICAgICAvISpcbiAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgIEFkZCBldmVudCBsaXN0ZW5lciBmb3Igb3BlbmluZyBhbmQgY2xvc2luZyBkZXRhaWxzXG4gICAgICAgICAgICohL1xuXG4gICAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCB0Ym9keScpLm9uKCdjbGljaycsICd0ZC5kZXRhaWxzLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGxldCB0ciA9ICQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgICAgICAgbGV0IHJvdyA9IHRhYmxlLnJvdyggdHIgKTtcblxuICAgICAgICAgICAgICBpZiAoIHJvdy5jaGlsZC5pc1Nob3duKCkgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIHJvdyBpcyBhbHJlYWR5IG9wZW4gLSBjbG9zZSBpdFxuICAgICAgICAgICAgICAgICAgcm93LmNoaWxkLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgIHRyLnJlbW92ZUNsYXNzKCdzaG93bicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gT3BlbiB0aGlzIHJvd1xuICAgICAgICAgICAgICAgICAgcm93LmNoaWxkKCByb290LnByb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyKHJvdy5kYXRhKCkpICkuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgdHIuYWRkQ2xhc3MoJ3Nob3duJyk7XG4gICAgICAgICAgICAgICAgICByb290LmJpbmRQcm9kdWN0RGV0YWlsc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSApOyovXG4gICAgfVxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVD1mdW5jdGlvbiAoZSkge1xuICAgICAgICAvL2RlYnVnKCAnVGFibGUgZHJhdyBjb21wbGV0ZTogJytuZXcgRGF0ZSgpLmdldFRpbWUoKSApO1xuXG4gICAgICAgICQoJ3RkOmNvbnRhaW5zKFwiKlwiKScpLmh0bWwoJzxpIGNsYXNzPVwiYmkgYmktY2hlY2stY2lyY2xlLWZpbGxcIj48L2k+Jyk7XG4gICAgICAgICQoJ3RkLmRldGFpbHMtY29udHJvbCcpLnJlbW92ZUNsYXNzKCdkZXRhaWxzLWNvbnRyb2wnKTtcblxuXG5cbiAgICB9XG4gICAgbGV0IHNlbGVjdGVkUHJvZHVjdEdyb3VwPW51bGw7XG5cbiAgICB0aGlzLmdldERhdGF0YWJsZXM9ZnVuY3Rpb24gKG9yZGVyVHlwZSl7XG4gICAgICAgIGxldCB0YWJsZSA9ICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IHtcbiAgICAgICAgICAgICAgICB1cmw6T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcbiAgICAgICAgICAgICAgICBkYXRhOmZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc2VhcmNoU3RyPWRhdGFUYWJsZVNlYXJjaFN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5rcmVsPWRhdGFUYWJsZVNlYXJjaEtyZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ3JvdXBJZD1zZWxlY3RlZFByb2R1Y3RHcm91cDtcbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zdXBwbGllcklkPWNoYW5nZVBhcmFtZXRlci5zdXBwbGllcjtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wcm9maXRDZW50ZXJJZD1jaGFuZ2VQYXJhbWV0ZXIucHJvZml0Q2VudGVyO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1jaGFuZ2VQYXJhbWV0ZXIuZGVsaXZlcnlEYXRlO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmdyb3VwSWQ9c2VsZWN0ZWRQcm9kdWN0R3JvdXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBBUFAuT3JkZXJNb2R1bGUucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMoKSxcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBBUFAuT3JkZXJNb2R1bGUucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbigpLFxuICAgICAgICAgICAgXCJvcmRlclwiOiBbWzEsICdhc2MnXV0sXG4gICAgICAgIH0gKTtcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgIH1cblxuXG59XG4iXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL3ByaWNlTGlzdFByb2ZpdENlbnRlci5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/priceListProfitCenter.js\n");
/***/ }),
/***/ "./resources/js/admin/product.js":
/*!***************************************!*\
!*** ./resources/js/admin/product.js ***!
\***************************************/
/***/ (() => {
eval("function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nif (typeof Product === 'undefined') {\n var _Product = /*#__PURE__*/function (_DataModel) {\n _inherits(_Product, _DataModel);\n\n var _super = _createSuper(_Product);\n\n /*\n * Constructor\n */\n function _Product(data, options) {\n var _this;\n\n _classCallCheck(this, _Product);\n\n _this = _super.call(this, data, options);\n\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n\n console.log('Product constructor called');\n return _this;\n }\n\n return _Product;\n }(DataModel);\n\n ;\n window.Product = _Product;\n}\n\nwindow.ProductAdmin = function (options, ProductItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProduct',\n container: null,\n resultContainerSelector: '.containerProduct .containerResult',\n resultContainer: null,\n testMode: false,\n filters: {\n Product: {}\n },\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Product = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var dataTable = null;\n /*\n * Constructor\n */\n\n this.construct = function (options, ProductItem) {\n console.log('ProductAdmin constructor called');\n $.extend(Opts, options);\n\n if (!ProductItem) {\n console.log('Product letre kellet hozni ');\n\n if (!APP.Product) {\n APP.Product = new window.Product();\n }\n\n root.Product = APP.Product;\n }\n };\n\n this.getOpts = function () {\n return Opts;\n };\n\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called'); //Opts.onAfterInitViewDetails=root.autofillDetails;\n\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n\n this.initViewListOld = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n } //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('initViewSearch inicialization 1');\n root.container.find('select.supplierSelect, select.profitCenterSelect, select.productGroupSelect, select.producerSelect, select.hooreycaNamesSelect').select2();\n root.container.find('select.productSelect').select2({\n placeholder: '...',\n allowClear: true,\n ajax: {\n url: Opts.URL.getProductSearch,\n dataType: 'json',\n data: function data(params) {\n return {\n term: params.term || '',\n page: params.page || 1\n };\n },\n cache: true\n }\n });\n root.container.find('.datePickerFrom, .datePickerTo').datepicker({\n dateFormat: 'yy-mm-dd',\n onSelect: function onSelect(dateText, obj) {\n debug(this);\n debug(obj.input);\n /*\n root.container.find('.selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n root.container.find(' input[name=\"deliveryDate\"]').val(dateText);\n */\n //root.changePriceListProfitCenterParameter(null,$(obj.input));\n }\n });\n root.container.find('.datePickerClick').click(function () {\n debug($(this).data('action'));\n root.container.find('input[name=\"' + $(this).data('action') + '\"]').datepicker('show');\n });\n var button = root.container.find('.FormSendButton');\n button.off('click');\n button.on('click', function () {\n debug('FormSendButton click');\n root.loadingResultContainer();\n root.requestProducts();\n });\n root.setVisibleFilters('Product');\n debug('initViewSearch end');\n };\n\n this.loadingResultContainer = function () {\n debug('clearResultContainer');\n debug(root.resultContainer);\n root.hideResultContainer();\n root.container.find('.containerLoading').show();\n /*\n let template=root.container.find('template[data-name=\"loading\"]').html()\n root.resultContainer.html(template);\n */\n };\n\n this.hideResultContainer = function () {\n debug('hide containerResult');\n debug(root.resultContainer);\n root.resultContainer.hide();\n };\n\n this.showResultContainer = function () {\n root.container.find('.containerLoading').hide();\n root.resultContainer.show();\n };\n\n this.init = function (options, ProductItem) {\n console.log('ProductAdmin init');\n $.extend(Opts, options);\n\n if (Opts.testMode) {\n return root.testMode();\n }\n\n if (ProductItem) {\n root.Product = ProductItem;\n }\n\n root.dataTable = null;\n root.container = $(Opts.containerCssSelector);\n root.resultContainer = $(Opts.resultContainerSelector);\n root.initViewList();\n };\n\n this.initViewDetails = function (options, ProductItem) {\n debug('**call initViewDetails ');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n\n if (root.Product.picture) {\n console.log('*****//////////////////****************');\n console.log(root.Product.picture);\n console.log(CSSSelectorForm);\n var picUrl = root.Product.picture.PublicUrl + '/' + root.Product.picture.filename;\n console.log(picUrl);\n console.log($(CSSSelectorForm + ' img.imageProduct'));\n $(CSSSelectorForm + ' img.imageProduct').attr('src', picUrl);\n }\n\n if (root.Product.specification) {\n console.log('*****//////////////////****************');\n console.log(root.Product.specification);\n var docUrl = root.Product.specification.PublicUrl + '/' + root.Product.specification.filename;\n root.addAttachment(root.Product.specification);\n }\n\n var FormSaveButton = $(CSSSelectorForm + ' button.FormSaveButton');\n FormSaveButton.off('click');\n FormSaveButton.on('click', root.clickSaveButton);\n };\n\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm'; //root.Supplier.attachment.push(attachmentData);\n //attachmentData.rowNum=root.Supplier.attachment.length;\n\n attachmentData.rowNum = 1;\n var dateStr = new Date(attachmentData.updated_at);\n dateStr = dateStr.toLocaleString('hu-HU', {});\n attachmentData.date = dateStr;\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"productAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render); //root.bindContactClickAction();\n\n Toast.enableTimers(false);\n Toast.create(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n this.setVisibleFilters = function (type) {\n console.log('setVisibleFilters');\n console.log(Opts.filters[type]);\n console.log(root.container);\n $(root.container).find('div[class*=\"filter\"]').hide();\n\n for (var typeIndex in Opts.filters[type]) {\n var typeName = Opts.filters[type][typeIndex];\n debug(typeName);\n console.log($(root.container).find('.filter_' + typeName));\n $(root.container).find('.filter_' + typeName).show();\n }\n };\n\n this.c = function (CSSSelectorForm) {\n console.log('c called');\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find('form'));\n console.log(root.container.find(CSSSelectorForm));\n };\n\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find(CSSSelectorForm));\n console.log(root.container.find('form'));\n console.log(root.container.find('form' + CSSSelectorForm)[0]); //return;\n\n var ajaxData = new FormData(root.container.find('form' + CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('suppliers[]', value);\n });\n ajaxData[\"delete\"]('supplier');\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenters[]', value);\n });\n ajaxData[\"delete\"]('profitCenter');\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroups[]', value);\n });\n ajaxData[\"delete\"]('productGroup');\n $.each(ajaxData.getAll('product'), function (key, value) {\n ajaxData.append('products[]', value);\n });\n ajaxData[\"delete\"]('product');\n $.each(ajaxData.getAll('producer'), function (key, value) {\n ajaxData.append('producers[]', value);\n });\n ajaxData[\"delete\"]('producer');\n $.each(ajaxData.getAll('hooreycaName'), function (key, value) {\n ajaxData.append('hooreycaNames[]', value);\n });\n ajaxData[\"delete\"]('hooreycaName'); //ajaxData.append('_token', root.container.find('input[name=_token]').val());\n\n /*\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n let indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n */\n\n return ajaxData;\n };\n\n this.getAjaxDataJson = function () {\n var ajaxData = root.formDataToDataObjectAPICall('.ProductListForm');\n console.log('======================');\n\n var _iterator = _createForOfIteratorHelper(ajaxData.entries()),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var pair = _step.value;\n console.log(pair[0] + ', ' + pair[1]);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var object = {};\n ajaxData.forEach(function (value, key) {\n // Reflect.has in favor of: object.hasOwnProperty(key)\n if (!Reflect.has(object, key)) {\n object[key] = value;\n return;\n }\n\n if (!Array.isArray(object[key])) {\n object[key] = [object[key]];\n }\n\n object[key].push(value);\n });\n var ajaxDataJson = JSON.stringify(object);\n return ajaxDataJson;\n };\n\n this.requestProducts = function () {\n var ajaxUrl = Opts.URL.getDataTableContent;\n var ajaxMethod = 'GET'; //token formdataba!\n\n debug(ajaxUrl);\n ajaxDataJson = root.getAjaxDataJson();\n console.log(ajaxDataJson);\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n console.log(dataTableCSSSelector);\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n /*\n if(typeof options['orderDirective']!='undefined'){\n orderDirective=options['orderDirective'];\n }\n */\n\n if (!root.dataTable) {\n console.log('XXXXXXXXXXXXXXXXXXXX Nincs Datatable');\n root.dataTable = $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContent,\n data: function data(d) {\n console.log('---******----');\n console.log(APP.ProductAdmin.getAjaxDataJson());\n return $.extend({}, d, {\n ajaxData: APP.ProductAdmin.getAjaxDataJson\n });\n },\n type: ajaxMethod\n /*\n data: ajaxData,\n */\n\n },\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n } //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n root.showResultContainer();\n console.log('drawCallback');\n }\n });\n } else {\n console.log('XXXXXXXXXXXXXXXXXXXX van Datatable'); //root.dataTable.ajax.reload();\n\n root.dataTable.draw();\n }\n };\n\n this.processResponse = function () {};\n\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n event.preventDefault();\n\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok'); //do your ajax submition here\n }\n\n var ajaxData = root.formDataToDataObjectAPICall('.productForm');\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n\n if (root.Product.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Product.id); //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n\n ajaxData.append('_method', 'PUT');\n }\n\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n //'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n 'X-CSRF-TOKEN': Opts.token\n },\n success: function success(data) {\n debug(data);\n\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create(\"Sikeres rögzítés!\", ajaxData.get('name') + \" nevű termék elmentve\", TOAST_STATUS.SUCCESS, 5000); // APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList);\n }\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZHVjdC5qcz9lMDRlIl0sIm5hbWVzIjpbIlByb2R1Y3QiLCJkYXRhIiwib3B0aW9ucyIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiRGF0YU1vZGVsIiwid2luZG93IiwiUHJvZHVjdEFkbWluIiwiUHJvZHVjdEl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsImNvbnRhaW5lciIsInJlc3VsdENvbnRhaW5lclNlbGVjdG9yIiwicmVzdWx0Q29udGFpbmVyIiwidGVzdE1vZGUiLCJmaWx0ZXJzIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJhdHRhY2hGaWxlIiwiZGV0YWNoRmlsZSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJldmVudCIsImRlYnVnIiwibm9kZSIsImN1cnJlbnRUYXJnZXQiLCJyb3ciLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJkYXRhdGFibGVSb3dBY3Rpb25FZGl0IiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsImxvYWRNYWluQ29udGVudCIsImluaXRWaWV3RGV0YWlscyIsImluaXRWaWV3TGlzdE9sZCIsImNvbE51bSIsImxlbmd0aCIsInNldE9wdHMiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwibGFuZ3VhZ2UiLCJ1cmwiLCJzZXJ2ZXJTaWRlIiwib3JkZXJhYmxlIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwiYXJndW1lbnRzIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJzZXR0aW5ncyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsImluaXRWaWV3TGlzdCIsImZpbmQiLCJzZWxlY3QyIiwicGxhY2Vob2xkZXIiLCJhbGxvd0NsZWFyIiwiYWpheCIsImdldFByb2R1Y3RTZWFyY2giLCJkYXRhVHlwZSIsInBhcmFtcyIsInRlcm0iLCJwYWdlIiwiY2FjaGUiLCJkYXRlcGlja2VyIiwiZGF0ZUZvcm1hdCIsIm9uU2VsZWN0IiwiZGF0ZVRleHQiLCJvYmoiLCJpbnB1dCIsImNsaWNrIiwiYnV0dG9uIiwib2ZmIiwib24iLCJsb2FkaW5nUmVzdWx0Q29udGFpbmVyIiwicmVxdWVzdFByb2R1Y3RzIiwic2V0VmlzaWJsZUZpbHRlcnMiLCJoaWRlUmVzdWx0Q29udGFpbmVyIiwiaGlkZSIsInNob3dSZXN1bHRDb250YWluZXIiLCJpbml0IiwiQ1NTU2VsZWN0b3JGb3JtIiwicGljdHVyZSIsInBpY1VybCIsIlB1YmxpY1VybCIsImZpbGVuYW1lIiwiYXR0ciIsInNwZWNpZmljYXRpb24iLCJkb2NVcmwiLCJhZGRBdHRhY2htZW50IiwiRm9ybVNhdmVCdXR0b24iLCJjbGlja1NhdmVCdXR0b24iLCJhdHRhY2htZW50RGF0YSIsInJvd051bSIsImRhdGVTdHIiLCJEYXRlIiwidXBkYXRlZF9hdCIsInRvTG9jYWxlU3RyaW5nIiwiZGF0ZSIsImxpbmsiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJyZW5kZXIiLCJNdXN0YWNoZSIsImFwcGVuZCIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwib3JpZ2luYWxfZmlsZW5hbWUiLCJUT0FTVF9TVEFUVVMiLCJTVUNDRVNTIiwidHlwZUluZGV4IiwidHlwZU5hbWUiLCJjIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiYWpheERhdGEiLCJGb3JtRGF0YSIsImVhY2giLCJnZXRBbGwiLCJrZXkiLCJ2YWx1ZSIsImdldEFqYXhEYXRhSnNvbiIsImVudHJpZXMiLCJwYWlyIiwib2JqZWN0IiwiZm9yRWFjaCIsIlJlZmxlY3QiLCJoYXMiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwiYWpheERhdGFKc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsImFqYXhNZXRob2QiLCJkIiwiZHJhdyIsInByb2Nlc3NSZXNwb25zZSIsInByZXZlbnREZWZhdWx0IiwiY2hlY2tWYWxpZGl0eSIsInN0b3BQcm9wYWdhdGlvbiIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwic3VjY2VzcyIsImdldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBRyxPQUFPQSxPQUFQLEtBQWlCLFdBQXBCLEVBQWdDO0FBQUEsTUFDdEJBLFFBRHNCO0FBQUE7O0FBQUE7O0FBR3hCO0FBQ1I7QUFDQTtBQUNRLHNCQUFhQyxJQUFiLEVBQWtCQyxPQUFsQixFQUEyQjtBQUFBOztBQUFBOztBQUN2QixnQ0FBTUQsSUFBTixFQUFXQyxPQUFYOztBQUNBLFVBQUcsT0FBTyxNQUFLQyxPQUFaLEtBQXVCLFdBQTFCLEVBQXNDO0FBQ2xDLGNBQUtBLE9BQUwsR0FBYSxFQUFiO0FBQ0g7O0FBQ0RDLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDRCQUFaO0FBTHVCO0FBTTFCOztBQVp1QjtBQUFBLElBQ05DLFNBRE07O0FBYTNCO0FBQ0RDLEVBQUFBLE1BQU0sQ0FBQ1AsT0FBUCxHQUFlQSxRQUFmO0FBQ0g7O0FBQ0RPLE1BQU0sQ0FBQ0MsWUFBUCxHQUFvQixVQUFVTixPQUFWLEVBQWtCTyxXQUFsQixFQUErQjtBQUMvQztBQUNKO0FBQ0E7QUFDQTtBQUNJLE1BQUlDLElBQUksR0FBRztBQUNQQyxJQUFBQSxLQUFLLEVBQUUsSUFEQTtBQUVQQyxJQUFBQSxvQkFBb0IsRUFBRSxtQkFGZjtBQUdQQyxJQUFBQSxTQUFTLEVBQUMsSUFISDtBQUlQQyxJQUFBQSx1QkFBdUIs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QUFBLENBQUMsQ0FBQzRDLElBQUYsQ0FBTztBQUNIaEIsTUFBQUEsR0FBRyxFQUFDWCxPQUREO0FBRUhuRCxNQUFBQSxJQUFJLEVBQUN1SSxRQUZGO0FBR0h0RSxNQUFBQSxJQUFJLEVBQUN5RixVQUhGO0FBSUhPLE1BQUFBLFdBQVcsRUFBQyxLQUpUO0FBS0hDLE1BQUFBLFdBQVcsRUFBRSxLQUxWO0FBTUhDLE1BQUFBLE9BQU8sRUFBRTtBQUNMO0FBQ0Esd0JBQWdCMUosSUFBSSxDQUFDQztBQUZoQixPQU5OO0FBV0gwSixNQUFBQSxPQUFPLEVBQUMsaUJBQVVwSyxJQUFWLEVBQWU7QUFDbkJ3QyxRQUFBQSxLQUFLLENBQUN4QyxJQUFELENBQUw7O0FBQ0EsWUFBR0EsSUFBSSxDQUFDb0ssT0FBTCxJQUFjLElBQWpCLEVBQXNCO0FBQ2xCO0FBQ0EzSixVQUFBQSxJQUFJLENBQUNtQixTQUFMLENBQWVDLGNBQWYsR0FBOEIsQ0FBQyxDQUFELEVBQUksTUFBSixDQUE5QjtBQUNBaUcsVUFBQUEsS0FBSyxDQUFDeEcsTUFBTixDQUFhLG1CQUFiLEVBQWtDaUgsUUFBUSxDQUFDOEIsR0FBVCxDQUFhLE1BQWIsSUFBcUIsdUJBQXZELEVBQWdGcEMsWUFBWSxDQUFDQyxPQUE3RixFQUFxRyxJQUFyRyxFQUhrQixDQUl0QztBQUNpQjtBQUNKO0FBbkJFLEtBQVA7QUFxQkgsR0FoREQ7QUFrREgsQ0F4Z0JEIiwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIFByb2R1Y3Q9PT0ndW5kZWZpbmVkJyl7XG4gICAgY2xhc3MgUHJvZHVjdCBleHRlbmRzIERhdGFNb2RlbHtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuY29udGFjdCA9PT1cInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdCBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHdpbmRvdy5Qcm9kdWN0PVByb2R1Y3Q7XG59XG53aW5kb3cuUHJvZHVjdEFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2R1Y3RJdGVtKSB7XG4gICAgLypcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxuICAgICAqIGluIHRoZSBjbGFzc1xuICAgICAqL1xuICAgIGxldCBPcHRzID0ge1xuICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6ICcuY29udGFpbmVyUHJvZHVjdCcsXG4gICAgICAgIGNvbnRhaW5lcjpudWxsLFxuICAgICAgICByZXN1bHRDb250YWluZXJTZWxlY3RvcjonLmNvbnRhaW5lclByb2R1Y3QgLmNvbnRhaW5lclJlc3VsdCcsXG4gICAgICAgIHJlc3VsdENvbnRhaW5lcjpudWxsLFxuXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcbiAgICAgICAgZmlsdGVyczp7XG4gICAgICAgICAgICBQcm9kdWN0Ont9LFxuICAgICAgICB9LFxuICAgICAgICBVUkw6IHtcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6ICcnLFxuICAgICAgICAgICAgaW5kZXg6ICcnLFxuICAgICAgICAgICAgc2hvdzogJycsXG4gICAgICAgICAgICBlZGl0OiAnJyxcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXG4gICAgICAgICAgICBzdG9yZTogJycsXG4gICAgICAgICAgICB1cGRhdGU6ICcnLFxuICAgICAgICAgICAgZGVzdHJveTogJycsXG4gICAgICAgICAgICBhdHRhY2hGaWxlOiAnJyxcbiAgICAgICAgICAgIGRldGFjaEZpbGU6ICcnLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhVGFibGU6IHtcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOiBbMSwgJ2FzYyddLFxuICAgICAgICB9LFxuICAgICAgICBvbkFmdGVySW5pdFZpZXdEZXRhaWxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBQcm9kdWN0ID0ge307XG4gICAgbGV0IHJvb3QgPSB0aGlzO1xuICAgIGxldCBjb250YWN0UG9wdXBXb3JrZmxvdyA9ICduZXcnO1xuICAgIGxldCBkYXRhVGFibGU9bnVsbDtcbiAgICAvKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZHVjdEl0ZW0pIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3RBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghUHJvZHVjdEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0IGxldHJlIGtlbGxldCBob3puaSAnKTtcbiAgICAgICAgICAgIGlmICghQVBQLlByb2R1Y3QpIHtcbiAgICAgICAgICAgICAgICBBUFAuUHJvZHVjdCA9IG5ldyB3aW5kb3cuUHJvZHVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdC5Qcm9kdWN0ID0gQVBQLlByb2R1Y3Q7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0T3B0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9wdHM7XG4gICAgfVxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XG4gICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XG4gICAgICAgIGxldCBhY3Rpb25OYW1lPSdkYXRhdGFibGVSb3dBY3Rpb24nK25vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiByb290W2FjdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcbiAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IEVuZCcpO1xuICAgIH1cbiAgICB0aGlzLmluaXRWaWV3TGlzdE9sZCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xuICAgICAgICBkYXRhVGFibGVDU1NTZWxlY3Rvcj1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGFUYWJsZSc7IC8vXG5cbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxuICAgICAgICBBUFAuc2V0T3B0cyh7XG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBvcmRlckRpcmVjdGl2ZT1PcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZTtcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XG4gICAgICAgIH1cbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XG4gICAgICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxuICAgICAgICAgICAgc2VydmVyU2lkZTogdHJ1ZSxcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGJ1dHRvbnM6e1xuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCJ9LFxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcbiAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwicHJvZHVjdEdyb3VwXCJ9LFxuICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJzdXBwbGllck5hbWVcIn0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXG4gICAgICAgICAgICBcInN0YXRlU2F2ZVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ICk7XG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3TGlzdD1mdW5jdGlvbiAob3B0aW9ucz17fSkge1xuICAgICAgICBkZWJ1ZygnaW5pdFZpZXdTZWFyY2ggaW5pY2lhbGl6YXRpb24gMScpO1xuXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5zdXBwbGllclNlbGVjdCwgc2VsZWN0LnByb2ZpdENlbnRlclNlbGVjdCwgc2VsZWN0LnByb2R1Y3RHcm91cFNlbGVjdCwgc2VsZWN0LnByb2R1Y2VyU2VsZWN0LCBzZWxlY3QuaG9vcmV5Y2FOYW1lc1NlbGVjdCcpLnNlbGVjdDIoKTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnByb2R1Y3RTZWxlY3QnKS5zZWxlY3QyKHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcbiAgICAgICAgICAgIGFsbG93Q2xlYXI6IHRydWUsXG4gICAgICAgICAgICBhamF4OiB7XG4gICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5nZXRQcm9kdWN0U2VhcmNoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtOiBwYXJhbXMudGVybSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhcmFtcy5wYWdlIHx8IDFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FjaGU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyRnJvbSwgLmRhdGVQaWNrZXJUbycpLmRhdGVwaWNrZXIoe1xuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcblxuICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCxvYmopIHtcbiAgICAgICAgICAgICAgICBkZWJ1Zyh0aGlzKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhvYmouaW5wdXQpO1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0LnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAvL3Jvb3QuY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyKG51bGwsJChvYmouaW5wdXQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuZGF0ZVBpY2tlckNsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGRlYnVnKCQodGhpcykuZGF0YSgnYWN0aW9uJykpO1xuICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1cIicrJCh0aGlzKS5kYXRhKCdhY3Rpb24nKSsnXCJdJykuZGF0ZXBpY2tlcignc2hvdycpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGJ1dHRvbj1yb290LmNvbnRhaW5lci5maW5kKCcuRm9ybVNlbmRCdXR0b24nKTtcbiAgICAgICAgYnV0dG9uLm9mZignY2xpY2snKTtcbiAgICAgICAgYnV0dG9uLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBkZWJ1ZyAoJ0Zvcm1TZW5kQnV0dG9uIGNsaWNrJyk7XG4gICAgICAgICAgICByb290LmxvYWRpbmdSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgICAgIHJvb3QucmVxdWVzdFByb2R1Y3RzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LnNldFZpc2libGVGaWx0ZXJzKCdQcm9kdWN0Jyk7XG5cbiAgICAgICAgZGVidWcoJ2luaXRWaWV3U2VhcmNoIGVuZCcpO1xuICAgIH1cblxuXG4gICAgdGhpcy5sb2FkaW5nUmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnY2xlYXJSZXN1bHRDb250YWluZXInKTtcbiAgICAgICAgZGVidWcocm9vdC5yZXN1bHRDb250YWluZXIpO1xuICAgICAgICByb290LmhpZGVSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmNvbnRhaW5lckxvYWRpbmcnKS5zaG93KCk7XG4gICAgICAgIC8qXG4gICAgICAgIGxldCB0ZW1wbGF0ZT1yb290LmNvbnRhaW5lci5maW5kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJsb2FkaW5nXCJdJykuaHRtbCgpXG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmh0bWwodGVtcGxhdGUpO1xuXG4gICAgICAgICAqL1xuICAgIH1cbiAgICB0aGlzLmhpZGVSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdoaWRlIGNvbnRhaW5lclJlc3VsdCcpO1xuICAgICAgICBkZWJ1Zyhyb290LnJlc3VsdENvbnRhaW5lcik7XG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zaG93UmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLmhpZGUoKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuc2hvdygpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0QWRtaW4gaW5pdCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcblxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoUHJvZHVjdEl0ZW0pe1xuICAgICAgICAgICAgcm9vdC5Qcm9kdWN0PVByb2R1Y3RJdGVtXG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5kYXRhVGFibGU9bnVsbDtcbiAgICAgICAgcm9vdC5jb250YWluZXI9JChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXI9JChPcHRzLnJlc3VsdENvbnRhaW5lclNlbGVjdG9yKTtcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pe1xuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnBpY3R1cmUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqLy8vLy8vLy8vLy8vLy8vLy8vKioqKioqKioqKioqKioqKicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnBpY3R1cmUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcbiAgICAgICAgICAgIGxldCBwaWNVcmw9cm9vdC5Qcm9kdWN0LnBpY3R1cmUuUHVibGljVXJsKycvJytyb290LlByb2R1Y3QucGljdHVyZS5maWxlbmFtZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBpY1VybCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZVByb2R1Y3QnKSk7XG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZVByb2R1Y3QnKS5hdHRyKCdzcmMnLHBpY1VybCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqLy8vLy8vLy8vLy8vLy8vLy8vKioqKioqKioqKioqKioqKicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xuICAgICAgICAgICAgbGV0IGRvY1VybD1yb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbi5QdWJsaWNVcmwrJy8nK3Jvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLmZpbGVuYW1lO1xuICAgICAgICAgICAgcm9vdC5hZGRBdHRhY2htZW50KHJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgRm9ybVNhdmVCdXR0b249JChDU1NTZWxlY3RvckZvcm0rJyBidXR0b24uRm9ybVNhdmVCdXR0b24nKTtcbiAgICAgICAgRm9ybVNhdmVCdXR0b24ub2ZmKCdjbGljaycpO1xuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcblxuICAgIH1cblxuICAgIHRoaXMuYWRkQXR0YWNobWVudD1mdW5jdGlvbiAoYXR0YWNobWVudERhdGEpe1xuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9kdWN0Rm9ybSc7XG4gICAgICAgIC8vcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xuICAgICAgICAvL2F0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xuICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09MTtcbiAgICAgICAgbGV0IGRhdGVTdHI9bmV3IERhdGUoYXR0YWNobWVudERhdGEudXBkYXRlZF9hdCk7XG4gICAgICAgIGRhdGVTdHI9ZGF0ZVN0ci50b0xvY2FsZVN0cmluZygnaHUtSFUnLCB7fSk7XG4gICAgICAgIGF0dGFjaG1lbnREYXRhLmRhdGU9ZGF0ZVN0cjtcbiAgICAgICAgYXR0YWNobWVudERhdGEubGluaz1hdHRhY2htZW50RGF0YS5QdWJsaWNVcmwrJy8nK2F0dGFjaG1lbnREYXRhLmZpbGVuYW1lO1xuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZHVjdEF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxhdHRhY2htZW50RGF0YSk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAvL3Jvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoXCJGw6FqbCBob3p6w6FhZHZhIVwiLCBhdHRhY2htZW50RGF0YS5vcmlnaW5hbF9maWxlbmFtZStcIiBmw6FqbCBob3p6w6FhZHZhXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VmlzaWJsZUZpbHRlcnM9ZnVuY3Rpb24gKHR5cGUpe1xuICAgICAgICBjb25zb2xlLmxvZygnc2V0VmlzaWJsZUZpbHRlcnMnKTtcbiAgICAgICAgY29uc29sZS5sb2coT3B0cy5maWx0ZXJzW3R5cGVdKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xuICAgICAgICAkKHJvb3QuY29udGFpbmVyKS5maW5kKCdkaXZbY2xhc3MqPVwiZmlsdGVyXCJdJykuaGlkZSgpXG4gICAgICAgIGZvciAoY29uc3QgdHlwZUluZGV4IGluIE9wdHMuZmlsdGVyc1t0eXBlXSkge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWU9T3B0cy5maWx0ZXJzW3R5cGVdW3R5cGVJbmRleF07XG4gICAgICAgICAgICBkZWJ1Zyh0eXBlTmFtZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHJvb3QuY29udGFpbmVyKS5maW5kKCcuZmlsdGVyXycrdHlwZU5hbWUpKTtcbiAgICAgICAgICAgICQocm9vdC5jb250YWluZXIpLmZpbmQoJy5maWx0ZXJfJyt0eXBlTmFtZSkuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuYz1mdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2MgY2FsbGVkJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScpKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZChDU1NTZWxlY3RvckZvcm0pKTtcblxuICAgIH1cblxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZChDU1NTZWxlY3RvckZvcm0pKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScpKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScrQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgIC8vcmV0dXJuO1xuICAgICAgICBsZXQgYWpheERhdGEgPSBuZXcgRm9ybURhdGEocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScrQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3N1cHBsaWVyJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3N1cHBsaWVyJyk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2ZpdENlbnRlcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZml0Q2VudGVyJyk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3RHcm91cCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjdEdyb3VwJyk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3QnKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjdHNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWN0Jyk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y2VyJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y2Vyc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y2VyJyk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ2hvb3JleWNhTmFtZScpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdob29yZXljYU5hbWVzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnaG9vcmV5Y2FOYW1lJyk7XG5cbiAgICAgICAgLy9hamF4RGF0YS5hcHBlbmQoJ190b2tlbicsIHJvb3QuY29udGFpbmVyLmZpbmQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleEtleSA9ICQodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhamF4RGF0YS5nZXQoaW5kZXhLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSwgYWpheERhdGEuZ2V0KGluZGV4S2V5KS5yZXBsYWNlKC9bXyBdKyQvZywgXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAqL1xuICAgICAgICByZXR1cm4gYWpheERhdGE7XG5cbiAgICB9XG4gICAgdGhpcy5nZXRBamF4RGF0YUpzb249ZnVuY3Rpb24oKXtcblxuICAgICAgICBsZXQgYWpheERhdGE9cm9vdC5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5Qcm9kdWN0TGlzdEZvcm0nKTtcbiAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICAgICAgZm9yIChsZXQgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBhaXJbMF0rICcsICcgKyBwYWlyWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvYmplY3QgPSB7fTtcbiAgICAgICAgYWpheERhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgLy8gUmVmbGVjdC5oYXMgaW4gZmF2b3Igb2Y6IG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpXG4gICAgICAgICAgICBpZighUmVmbGVjdC5oYXMob2JqZWN0LCBrZXkpKXtcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KG9iamVjdFtrZXldKSl7XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSBbb2JqZWN0W2tleV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqZWN0W2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgYWpheERhdGFKc29uID0gSlNPTi5zdHJpbmdpZnkob2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhSnNvbjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RQcm9kdWN0cz1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQ7XG4gICAgICAgIGxldCBhamF4TWV0aG9kPSdHRVQnO1xuICAgICAgICAvL3Rva2VuIGZvcm1kYXRhYmEhXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xuXG4gICAgICAgIGFqYXhEYXRhSnNvbj1yb290LmdldEFqYXhEYXRhSnNvbigpO1xuICAgICAgICBjb25zb2xlLmxvZyhhamF4RGF0YUpzb24pO1xuXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cbiAgICAgICAgY29uc29sZS5sb2coZGF0YVRhYmxlQ1NTU2VsZWN0b3IgKTtcblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICAvKlxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgICAgIGlmKCFyb290LmRhdGFUYWJsZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggTmluY3MgRGF0YXRhYmxlJyk7XG4gICAgICAgICAgICByb290LmRhdGFUYWJsZT1cbiAgICAgICAgICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYWpheFwiOntcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLSoqKioqKi0tLS0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIGQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheERhdGE6IEFQUC5Qcm9kdWN0QWRtaW4uZ2V0QWpheERhdGFKc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYWpheE1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYWpheERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB9ICxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyU2lkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInByb2R1Y3RHcm91cFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJzdXBwbGllck5hbWVcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXRlU2F2ZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2hvd1Jlc3VsdENvbnRhaW5lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RyYXdDYWxsYmFjaycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuXG5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggdmFuIERhdGF0YWJsZScpO1xuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgcm9vdC5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgICB9XG5cblxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NSZXNwb25zZT1mdW5jdGlvbiAoKSB7XG5cbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrU2F2ZUJ1dHRvbj1mdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xuXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9kdWN0Rm9ybSc7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBmYWxzZScpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcucHJvZHVjdEZvcm0nKTtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuc3RvcmU7XG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xuICAgICAgICBpZihyb290LlByb2R1Y3QuaWQpe1xuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9kdWN0LmlkKTtcbiAgICAgICAgICAgIC8vYWpheE1ldGhvZD1cIlBVVFwiO1xuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX21ldGhvZCcsJ1BVVCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoYWpheE1ldGhvZCk7XG4gICAgICAgIGRlYnVnKGFqYXhEYXRhKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxuICAgICAgICAgICAgdHlwZTphamF4TWV0aG9kLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgLy8nWC1DU1JGLVRPS0VOJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IE9wdHMudG9rZW5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICAgICAgICAgIGRlYnVnKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICBPcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZT1bMCwgJ2Rlc2MnXTtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiU2lrZXJlcyByw7ZnesOtdMOpcyFcIiwgYWpheERhdGEuZ2V0KCduYW1lJykrXCIgbmV2xbEgdGVybcOpayBlbG1lbnR2ZVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG5cbiJdLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZHVjdC5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n");
/***/ }),
/***/ "./resources/js/admin/profitCenter.js":
/*!********************************************!*\
!*** ./resources/js/admin/profitCenter.js ***!
\********************************************/
/***/ (() => {
eval("function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nif (typeof DataModelProfitCenter === 'undefined') {\n var _DataModelProfitCenter = /*#__PURE__*/function (_DataModel) {\n _inherits(_DataModelProfitCenter, _DataModel);\n\n var _super = _createSuper(_DataModelProfitCenter);\n\n /*\n * Constructor\n */\n function _DataModelProfitCenter(data, options) {\n var _this;\n\n _classCallCheck(this, _DataModelProfitCenter);\n\n _this = _super.call(this, data, options);\n\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n\n if (typeof _this.address === \"undefined\") {\n _this.address = [];\n }\n\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n\n return _DataModelProfitCenter;\n }(DataModel);\n\n ;\n window.DataModelProfitCenter = _DataModelProfitCenter;\n}\n\nwindow.ProfitCenterAdmin = function (options, ProfitCenterItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var ProfitCenter = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var addressPopupWorkflow = 'new';\n var CSSSelectorForm = '';\n var dataTableCSSSelector = '';\n /*\n * Constructor\n */\n\n this.construct = function (options, ProfitCenterItem) {\n console.log('ProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n\n if (!ProfitCenterItem) {\n console.log('ProfitCentert letre kellet hozni ');\n\n if (!APP.ProfitCenter) {\n APP.ProfitCenter = new window.DataModelProfitCenter();\n }\n\n root.ProfitCenter = APP.ProfitCenter;\n }\n\n CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n };\n\n this.getOpts = function () {\n return Opts;\n };\n\n this.getData = function () {\n return root.ProfitCenter;\n };\n\n this.init = function (options, ProfitCenterItem) {\n $.extend(Opts, options);\n\n if (Opts.testMode) {\n return root.testMode();\n }\n\n if (ProfitCenterItem) {\n root.ProfitCenter = ProfitCenterItem;\n }\n\n root.initViewList();\n };\n\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.ProfitCenter = new window.DataModelProfitCenter();\n root.initViewDetails();\n };\n\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n /**\n * Contact Popup setup\n */\n\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $(CSSSelectorForm + ' .buttonNewContact').bind('click', function () {\n APP.ProfitCenterAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n /**\n * Address Popup setup\n */\n\n if (!APP.AddressPopUp) {\n console.log('nincs APP.AddressPopUp');\n APP.AddressPopUp = new window.AddressPopUp();\n } else {\n console.log('mar van APP.AddressPopUp');\n }\n\n APP.AddressPopUp.init({\n active: true,\n onAfterSave: root.addressAction\n });\n root.renderAddress();\n $(CSSSelectorForm + ' .buttonNewAddress').bind('click', function () {\n APP.ProfitCenterAdmin.setAddressPopupWorkflow('new');\n APP.AddressPopUp.clearData();\n APP.AddressPopUp.show();\n });\n /**\n *\n */\n\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons({\n onChange: function onChange(value, node) {\n debug(value);\n debug(node);\n /*\n if(node==='profitCenterMultiAddress'){\n if(value==1){\n $('.containerMultiAddress').removeClass('d-none');\n }else{\n $('.containerMultiAddress').addClass('d-none');\n }\n }\n */\n\n if (node === 'addressEqual') {\n if (value == 1) {\n $(CSSSelectorForm + ' .containerMultiAddress').addClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').addClass('d-none');\n } else {\n $(CSSSelectorForm + ' .containerMultiAddress').removeClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').removeClass('d-none');\n }\n }\n }\n });\n $(CSSSelectorForm + \" :input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $(CSSSelectorForm + ' button.FormSaveButton').off('click');\n $(CSSSelectorForm + ' button.FormSaveButton').on('click', root.clickSaveButton);\n /*\n $(\"input[name=logoFile]\").change(function(){\n setImageFromLocal(this,Opts.containerCssSelector+' .imageLogo');\n });\n */\n //Opts.onAfterInitViewDetails();\n\n debug('**end initViewDetails ');\n };\n\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n var CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'email', 'postCode', 'city', 'street', 'phone', 'mobil'];\n $.each(needToSet, function () {\n // debug(this); //alapadatok beallitasanak logolasa\n if (typeof root.ProfitCenter[this] != 'undefined') {\n /* //alapadatok beallitasanak logolasa\n debug(root.ProfitCenter[this]);\n debug(CSSSelectorForm+' input[name='+this+']');\n debug($(CSSSelectorForm+' input[name='+this+']'));\n */\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.ProfitCenter[this]);\n }\n });\n\n if (typeof root.ProfitCenter['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.ProfitCenter.note);\n }\n\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.ProfitCenter.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.ProfitCenter.hooreycaDataActive + ']').click();\n\n if (typeof root.ProfitCenter['logoFile'] != 'undefined' && root.ProfitCenter['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.ProfitCenter['logoFile']);\n }\n\n $(CSSSelectorForm + ' *[data-toggle=addressEqual][data-title=' + root.ProfitCenter.addressEqual + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=multiAddress][data-title=' + root.ProfitCenter.multiAddress + ']').click();\n /*debug(root.ProfitCenter.address.length);\n if(root.ProfitCenter.address.length>0){\n $(CSSSelectorForm+' *[data-toggle=addressEqual][data-title=0]').click();\n if(root.ProfitCenter.address.length>1){\n $(CSSSelectorForm+' *[data-toggle=multiAddress][data-title=1]').click();\n }\n }\n */\n\n var supplier = [];\n $.each(root.ProfitCenter.suppliers, function () {\n supplier.push(this.name);\n }); //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n\n $.each(supplier, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n };\n\n this.resetContactTable = function () {\n $(CSSSelectorForm + ' .contactTable tbody tr').remove();\n root.renderContact();\n };\n\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.ProfitCenter.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n\n this.bindContactClickAction = function () {\n $('.contactTable .buttonDelete').unbind('click');\n $('.contactTable .buttonDelete').bind('click', root.contactDeleteClick);\n $('.contactTable .buttonEdit').unbind('click');\n $('.contactTable .buttonEdit').bind('click', root.contactEditClick);\n };\n\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.ProfitCenter.contact = root.ProfitCenter.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n\n return false;\n });\n console.log(root.ProfitCenter.contact);\n row.remove();\n root.resetContactTable();\n };\n\n this.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n\n this.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n\n this.contactEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n\n this.addContact = function (contactData) {\n /*\n fel kell venni a sorba\n */\n root.ProfitCenter.contact.push(contactData);\n contactData.rowNum = root.ProfitCenter.contact.length;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $(CSSSelectorForm + ' .contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Kapcsolat tartó hozzáadva!\", contactData.name + \" nevű kapocsolattartó hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.ProfitCenter.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.ProfitCenter.contact = newContacts;\n root.resetContactTable();\n Toast.create(\"Kapcsolat adatai módosítva!\", contactData.name + \" nevű kapocsolattartó módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n /***************\n *\n * Address function\n *\n */\n\n\n this.resetAddressTable = function () {\n $(CSSSelectorForm + ' .addressTable tbody tr').remove();\n root.renderAddress();\n };\n\n this.renderAddress = function () {\n var rowNum = 1;\n console.log('renderingAddress');\n $.each(root.ProfitCenter.getData('address'), function () {\n var itemData = this;\n itemData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n debug(itemData);\n var render = Mustache.render(template, itemData);\n $('.addressTable tbody').append(render);\n rowNum++;\n });\n root.bindAddressClickAction();\n };\n\n this.bindAddressClickAction = function () {\n $('.addressTable .buttonDelete').unbind('click');\n $('.addressTable .buttonDelete').bind('click', root.addressDeleteClick);\n $('.addressTable .buttonEdit').unbind('click');\n $('.addressTable .buttonEdit').bind('click', root.addressEditClick);\n };\n\n this.addressDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.ProfitCenter.address = root.ProfitCenter.address.filter(function (value, index, arr) {\n if (value.id != id) return true;\n });\n console.log(root.ProfitCenter.address);\n row.remove();\n root.resetAddressTable();\n };\n\n this.getAddressPopupWorkflow = function () {\n return addressPopupWorkflow;\n };\n\n this.setAddressPopupWorkflow = function (status) {\n addressPopupWorkflow = status;\n };\n\n this.addressEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.setAddressPopupWorkflow('edit');\n APP.AddressPopUp.loadData(id);\n };\n\n this.addressAction = function (itemData) {\n console.log('nah most kellene meg valamit csinalni.');\n\n if (root.getAddressPopupWorkflow() == 'new') {\n root.addAddress(itemData);\n } else if (root.getAddressPopupWorkflow() == 'edit') {\n root.editAddress(itemData.id, itemData);\n }\n };\n\n this.addAddress = function (ItemData) {\n /*\n fel kell venni a sorba\n */\n root.ProfitCenter.address.push(ItemData);\n ItemData.rowNum = root.ProfitCenter.address.length;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n var render = Mustache.render(template, ItemData);\n $(CSSSelectorForm + ' .addressTable tbody').append(render);\n root.bindAddressClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Cím hozzáadva!\", ItemData.street + \" hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n this.editAddress = function (id, itemData) {\n var newItem = [];\n $.each(root.ProfitCenter.getData('address'), function (index) {\n if (this.id == id) {\n newItem.push(itemData);\n } else {\n newItem.push(this);\n }\n });\n root.ProfitCenter.address = newItem;\n root.resetAddressTable();\n Toast.create(\"cím adatai módosítva!\", itemData.street + \" módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n } //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n },\n /**/\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\n data:{\n a:1,\n b:2\n }\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\n console.log(dt);\n console.log(node);\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n //\"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called'); //Opts.onAfterInitViewDetails=root.autofillDetails;\n\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n /*\n console.log(Opts.URL);\n console.log(ajaxUrl);\n */\n\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n };\n\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n event.preventDefault();\n debug(CSSSelectorForm);\n debug($(CSSSelectorForm));\n\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok'); //do your ajax submition here\n }\n\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n\n if (root.ProfitCenter.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.ProfitCenter.id); //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n\n ajaxData.append('_method', 'PUT');\n }\n /*\n debug(ajaxUrl);\n debug(ajaxMethod);\n debug(ajaxData.entries());\n for (var pair of ajaxData.entries()) {\n console.log(pair[0]+ ', ' + pair[1]);\n }\n */\n\n\n console.table(Object.fromEntries(ajaxData));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug(data);\n\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create(\"Sikeres rögzítés!\", ajaxData.get('name') + \" nevű beszálllító elmentve\", TOAST_STATUS.SUCCESS, 5000);\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n /*\n $.each(ajaxData.getAll('productGroup'),function(key,value){\n ajaxData.append('productGroup[]',value);\n })\n */\n\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('supplier[]', value);\n });\n return ajaxData;\n };\n\n this.construct(options, ProfitCenterItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzPzVkYzYiXSwibmFtZXMiOlsiRGF0YU1vZGVsUHJvZml0Q2VudGVyIiwiZGF0YSIsIm9wdGlvbnMiLCJjb250YWN0IiwiYWRkcmVzcyIsImNvbnNvbGUiLCJsb2ciLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJEYXRhTW9kZWwiLCJ3aW5kb3ciLCJQcm9maXRDZW50ZXJBZG1pbiIsIlByb2ZpdENlbnRlckl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RNb2RlIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJQcm9maXRDZW50ZXIiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJhZGRyZXNzUG9wdXBXb3JrZmxvdyIsIkNTU1NlbGVjdG9yRm9ybSIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsIkFQUCIsImdldE9wdHMiLCJnZXREYXRhIiwiaW5pdCIsImluaXRWaWV3TGlzdCIsImNsaWNrTmV3IiwiZGVidWciLCJsb2FkTWFpbkNvbnRlbnQiLCJjbGlja05ld0NhbGxCYWNrIiwiaW5pdFZpZXdEZXRhaWxzIiwiU3VwcGxpZXJJdGVtIiwiQ29udGFjdFBvcFVwIiwiYWN0aXZlIiwib25BZnRlclNhdmUiLCJjb250YWN0QWN0aW9uIiwicmVuZGVyQ29udGFjdCIsImJpbmQiLCJzZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImNsZWFyRGF0YSIsIkFkZHJlc3NQb3BVcCIsImFkZHJlc3NBY3Rpb24iLCJyZW5kZXJBZGRyZXNzIiwic2V0QWRkcmVzc1BvcHVwV29ya2Zsb3ciLCJ0b29sdGlwIiwiaW5pdFJhZGlvQnV0dG9ucyIsIm9uQ2hhbmdlIiwidmFsdWUiLCJub2RlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsImlucHV0bWFzayIsInZhbCIsImxlbmd0aCIsIm9mZiIsIm9uIiwiY2xpY2tTYXZlQnV0dG9uIiwic2V0RGV0YWlsc1ZpZXdEYXRhIiwibmVlZFRvU2V0IiwiZWFjaCIsIm5vdGUiLCJjYW5TZWUiLCJjbGljayIsImhvb3JleWNhRGF0YUFjdGl2ZSIsImF0dHIiLCJhZGRyZXNzRXF1YWwiLCJtdWx0aUFkZHJlc3MiLCJzdXBwbGllciIsInN1cHBsaWVycyIsInB1c2giLCJlc2NhcGVTZWxlY3RvciIsInByb3AiLCJyZXNldENvbnRhY3RUYWJsZSIsInJlbW92ZSIsInJvd051bSIsImNvbnRhY3REYXRhIiwidGVtcGxhdGUiLCJodG1sIiwicmVuZGVyIiwiTXVzdGFjaGUiLCJhcHBlbmQiLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImV2ZW50Iiwicm93IiwiY2xvc2VzdCIsImlkIiwiZmluZCIsImZpbHRlciIsImFyciIsImdldENvbnRhY3RQb3B1cFdvcmtmbG93Iiwic3RhdHVzIiwibG9hZERhdGEiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJUb2FzdCIsImVuYWJsZVRpbWVycyIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJuZXdDb250YWN0cyIsInJlc2V0QWRkcmVzc1RhYmxlIiwiaXRlbURhdGEiLCJiaW5kQWRkcmVzc0NsaWNrQWN0aW9uIiwiYWRkcmVzc0RlbGV0ZUNsaWNrIiwiYWRkcmVzc0VkaXRDbGljayIsImdldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwiYWRkQWRkcmVzcyIsImVkaXRBZGRyZXNzIiwiSXRlbURhdGEiLCJzdHJlZXQiLCJuZXdJdGVtIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJEYXRhVGFibGUiLCJsYW5ndWFnZSIsInVybCIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24iLCJhcmd1bWVudHMiLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJ0ZXh0IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0Iiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJjdXJyZW50VGFyZ2V0IiwicGFyZW50cyIsInJvd0RhdGEiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJhamF4VXJsIiwicmVwbGFjZSIsImRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSIsImFqYXhEYXRhIiwiX3Rva2VuIiwiYWpheCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJkcmF3IiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiYWpheE1ldGhvZCIsInRhYmxlIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsImdldCIsIkZvcm1EYXRhIiwiZ2V0QWxsIiwia2V5IiwiaW5kZXhLZXkiLCJzZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EscUJBQVAsS0FBK0IsV0FBbEMsRUFBOEM7QUFBQSxNQUNwQ0Esc0JBRG9DO0FBQUE7O0FBQUE7O0FBR3RDO0FBQ1I7QUFDQTtBQUNRLG9DQUFhQyxJQUFiLEVBQWtCQyxPQUFsQixFQUEyQjtBQUFBOztBQUFBOztBQUN2QixnQ0FBTUQsSUFBTixFQUFXQyxPQUFYOztBQUNBLFVB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RyxJQUFBQSxRQUFRLENBQUNsRSxNQUFULENBQWdCLFFBQWhCLEVBQXlCN0QsQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0JpQyxHQUF4QixFQUF6QjtBQUVBakMsSUFBQUEsQ0FBQyxDQUFDSCxlQUFlLEdBQUMsd0JBQWpCLENBQUQsQ0FBNEMyQyxJQUE1QyxDQUFpRCxZQUFXO0FBQ3hELFVBQUk0RyxRQUFRLEdBQUNwSixDQUFDLENBQUMsSUFBRCxDQUFELENBQVE2QyxJQUFSLENBQWEsTUFBYixDQUFiOztBQUNBLFVBQUdrRixRQUFRLENBQUNpQixHQUFULENBQWFJLFFBQWIsQ0FBSCxFQUEwQjtBQUN0QnJCLFFBQUFBLFFBQVEsQ0FBQ3NCLEdBQVQsQ0FBYUQsUUFBYixFQUFzQnJCLFFBQVEsQ0FBQ2lCLEdBQVQsQ0FBYUksUUFBYixFQUF1QnZCLE9BQXZCLENBQStCLFNBQS9CLEVBQXlDLEVBQXpDLENBQXRCO0FBQ0g7QUFDSixLQUxEO0FBTUE3SCxJQUFBQSxDQUFDLENBQUN3QyxJQUFGLENBQU91RixRQUFRLENBQUNtQixNQUFULENBQWdCLFVBQWhCLENBQVAsRUFBbUMsVUFBU0MsR0FBVCxFQUFhdkgsS0FBYixFQUFtQjtBQUNsRG1HLE1BQUFBLFFBQVEsQ0FBQ2xFLE1BQVQsQ0FBZ0IsWUFBaEIsRUFBNkJqQyxLQUE3QjtBQUNILEtBRkQ7QUFHQSxXQUFPbUcsUUFBUDtBQUNILEdBdkJEOztBQXdCQSxPQUFLaEksU0FBTCxDQUFlakMsT0FBZixFQUF3QlUsZ0JBQXhCO0FBRUgsQ0F0bkJEIiwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIERhdGFNb2RlbFByb2ZpdENlbnRlcj09PSd1bmRlZmluZWQnKXtcbiAgICBjbGFzcyBEYXRhTW9kZWxQcm9maXRDZW50ZXIgZXh0ZW5kcyBEYXRhTW9kZWx7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQ29uc3RydWN0b3JcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHN1cGVyKGRhdGEsb3B0aW9ucylcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuYWRkcmVzcyA9PT1cInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3M9W107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNvbnN0cnVjdG9yLm5hbWUrJyBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHdpbmRvdy5EYXRhTW9kZWxQcm9maXRDZW50ZXI9RGF0YU1vZGVsUHJvZml0Q2VudGVyO1xufVxuXG53aW5kb3cuUHJvZml0Q2VudGVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSkge1xuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByb2ZpdENlbnRlcicsXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcbiAgICAgICAgVVJMOiB7XG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcbiAgICAgICAgICAgIGluZGV4OiAnJyxcbiAgICAgICAgICAgIHNob3c6ICcnLFxuICAgICAgICAgICAgZWRpdDogJycsXG4gICAgICAgICAgICBjcmVhdGU6ICcnLFxuICAgICAgICAgICAgc3RvcmU6ICcnLFxuICAgICAgICAgICAgdXBkYXRlOiAnJyxcbiAgICAgICAgICAgIGRlc3Ryb3k6ICcnLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhVGFibGU6IHtcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOiBbMSwgJ2FzYyddXG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IFByb2ZpdENlbnRlciA9IHt9O1xuICAgIGxldCByb290ID0gdGhpcztcbiAgICBsZXQgY29udGFjdFBvcHVwV29ya2Zsb3cgPSAnbmV3JztcbiAgICBsZXQgYWRkcmVzc1BvcHVwV29ya2Zsb3cgPSAnbmV3JztcbiAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPScnO1xuICAgIGxldCBkYXRhVGFibGVDU1NTZWxlY3Rvcj0nJztcbiAgICAvKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZml0Q2VudGVySXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJvZml0Q2VudGVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIVByb2ZpdENlbnRlckl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9maXRDZW50ZXJ0IGxldHJlIGtlbGxldCBob3puaSAnKTtcbiAgICAgICAgICAgIGlmICghQVBQLlByb2ZpdENlbnRlcikge1xuICAgICAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXIgPSBuZXcgd2luZG93LkRhdGFNb2RlbFByb2ZpdENlbnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIgPSBBUFAuUHJvZml0Q2VudGVyO1xuICAgICAgICB9XG4gICAgICAgIENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2ZpdENlbnRlckZvcm0nO1xuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5nZXREYXRhPWZ1bmN0aW9uICgpe1xuICAgICAgICByZXR1cm4gcm9vdC5Qcm9maXRDZW50ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFByb2ZpdENlbnRlckl0ZW0pe1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcblxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoUHJvZml0Q2VudGVySXRlbSl7XG4gICAgICAgICAgICByb290LlByb2ZpdENlbnRlcj1Qcm9maXRDZW50ZXJJdGVtXG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmNsaWNrTmV3Q2FsbEJhY2spO1xuICAgIH1cblxuICAgIHRoaXMuY2xpY2tOZXdDYWxsQmFjaz1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xuICAgICAgICByb290LlByb2ZpdENlbnRlcj1uZXcgd2luZG93LkRhdGFNb2RlbFByb2ZpdENlbnRlcigpO1xuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFZpZXdEZXRhaWxzPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSl7XG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29udGFjdCBQb3B1cCBzZXR1cFxuICAgICAgICAgKi9cbiAgICAgICAgaWYoIUFQUC5Db250YWN0UG9wVXApe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxuICAgICAgICB9XG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAuaW5pdCh7XG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBBUFAuUHJvZml0Q2VudGVyQWRtaW4uc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ25ldycpO1xuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuc2hvdygpO1xuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHJlc3MgUG9wdXAgc2V0dXBcbiAgICAgICAgICovXG4gICAgICAgIGlmKCFBUFAuQWRkcmVzc1BvcFVwKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQWRkcmVzc1BvcFVwJylcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAgPSBuZXcgd2luZG93LkFkZHJlc3NQb3BVcCgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQWRkcmVzc1BvcFVwJylcbiAgICAgICAgfVxuICAgICAgICBBUFAuQWRkcmVzc1BvcFVwLmluaXQoe1xuICAgICAgICAgICAgYWN0aXZlOnRydWUsXG4gICAgICAgICAgICBvbkFmdGVyU2F2ZTpyb290LmFkZHJlc3NBY3Rpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QucmVuZGVyQWRkcmVzcygpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5idXR0b25OZXdBZGRyZXNzJykuYmluZCgnY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgQVBQLlByb2ZpdENlbnRlckFkbWluLnNldEFkZHJlc3NQb3B1cFdvcmtmbG93KCduZXcnKTtcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuY2xlYXJEYXRhKCk7XG4gICAgICAgICAgICBBUFAuQWRkcmVzc1BvcFVwLnNob3coKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKi9cblxuICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xuICAgICAgICBpbml0UmFkaW9CdXR0b25zKHtcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUsbm9kZSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBkZWJ1Zyhub2RlKTtcbiAgICAgICAgICAgICAgICAvKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub2RlPT09J3Byb2ZpdENlbnRlck11bHRpQWRkcmVzcycpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmKG5vZGU9PT0nYWRkcmVzc0VxdWFsJyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzc1N3aXRjaCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3MnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3NTd2l0Y2gnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtK1wiIDppbnB1dFwiKS5pbnB1dG1hc2soe1xuICAgICAgICAgICAgXCJvbmluY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQodGhpcykuZGF0YSgncmVxdWlyZWQnKSk7XG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm9uY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwib25jbGVhcmVkXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub24oJ2NsaWNrJyxyb290LmNsaWNrU2F2ZUJ1dHRvbik7XG4vKlxuICAgICAgICAkKFwiaW5wdXRbbmFtZT1sb2dvRmlsZV1cIikuY2hhbmdlKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBzZXRJbWFnZUZyb21Mb2NhbCh0aGlzLE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuaW1hZ2VMb2dvJyk7XG4gICAgICAgIH0pO1xuKi9cblxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscygpO1xuICAgICAgICBkZWJ1ZygnKiplbmQgaW5pdFZpZXdEZXRhaWxzICcpO1xuICAgIH1cbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdzZXREZXRhaWxzVmlld0RhdGEnKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2ZpdENlbnRlckZvcm0nO1xuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcbiAgICAgICAgICAgICduYW1lJywnaG9vcmV5Y2FJZCcsJ25hbWVJZCcsXG4gICAgICAgICAgICAnZW1haWwnLCdwb3N0Q29kZScsJ2NpdHknLCdzdHJlZXQnLCdwaG9uZScsJ21vYmlsJ1xuICAgICAgICBdO1xuICAgICAgICAkLmVhY2gobmVlZFRvU2V0LGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGRlYnVnKHRoaXMpOyAvL2FsYXBhZGF0b2sgYmVhbGxpdGFzYW5hayBsb2dvbGFzYVxuICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XG4vKiAvL2FsYXBhZGF0b2sgYmVhbGxpdGFzYW5hayBsb2dvbGFzYVxuICAgICAgICAgICAgICAgIGRlYnVnKHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpO1xuICAgICAgICAgICAgICAgIGRlYnVnKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT0nK3RoaXMrJ10nKSk7XG4qL1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5Qcm9maXRDZW50ZXJbdGhpc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuUHJvZml0Q2VudGVyLm5vdGUpO1xuICAgICAgICB9XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5jYW5TZWUrJ10nKS5jbGljaygpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9aG9vcmV5Y2FEYXRhQWN0aXZlXVtkYXRhLXRpdGxlPScrcm9vdC5Qcm9maXRDZW50ZXIuaG9vcmV5Y2FEYXRhQWN0aXZlKyddJykuY2xpY2soKTtcblxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSkpe1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbWcuaW1hZ2VMb2dvJykuYXR0cignc3JjJyxyb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSk7XG4gICAgICAgIH1cblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9YWRkcmVzc0VxdWFsXVtkYXRhLXRpdGxlPScrcm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzc0VxdWFsKyddJykuY2xpY2soKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPW11bHRpQWRkcmVzc11bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLm11bHRpQWRkcmVzcysnXScpLmNsaWNrKCk7XG4gICAgICAgIC8qZGVidWcocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGgpO1xuICAgICAgICBpZihyb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1hZGRyZXNzRXF1YWxdW2RhdGEtdGl0bGU9MF0nKS5jbGljaygpO1xuICAgICAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg+MSl7XG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPW11bHRpQWRkcmVzc11bZGF0YS10aXRsZT0xXScpLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgbGV0IHN1cHBsaWVyPVtdO1xuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuc3VwcGxpZXJzLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1cHBsaWVyLnB1c2godGhpcy5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XG4gICAgICAgICQuZWFjaChzdXBwbGllcixmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCdpbnB1dFt2YWx1ZT1cIicrJC5lc2NhcGVTZWxlY3Rvcih0aGlzKSsnXCJdJykucHJvcCggXCJjaGVja2VkXCIsIHRydWUgKTtcbiAgICAgICAgfSlcblxuICAgIH1cblxuICAgIHRoaXMucmVzZXRDb250YWN0VGFibGU9ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xuICAgICAgICByb290LnJlbmRlckNvbnRhY3QoKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgcm93TnVtPTE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdDb250YWN0cycpO1xuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XG4gICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAgICAgcm93TnVtKys7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25EZWxldGUnKS51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3REZWxldGVDbGljayk7XG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKS51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcblxuICAgIH1cbiAgICB0aGlzLmNvbnRhY3REZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0PXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QuZmlsdGVyKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT09aWQqMSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2ZpdENlbnRlci5jb250YWN0KTtcbiAgICAgICAgcm93LnJlbW92ZSgpO1xuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XG4gICAgfVxuICAgIHRoaXMuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcbiAgICB9XG4gICAgdGhpcy5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xuICAgIH1cblxuXG4gICAgdGhpcy5jb250YWN0RWRpdENsaWNrPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xuICAgICAgICByb290LnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcbiAgICAgICAgY29uc29sZS5sb2coJ25haCBtb3N0IGtlbGxlbmUgbWVnIHZhbGFtaXQgY3NpbmFsbmkuJylcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xuICAgICAgICB9ZWxzZSBpZihyb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93KCk9PSdlZGl0Jyl7XG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcbiAgICAgICAgLypcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxuICAgICAgICAgKi9cbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdC5wdXNoKGNvbnRhY3REYXRhKTtcbiAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QubGVuZ3RoO1xuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgdGFydMOzIGhvenrDoWFkdmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBob3p6w6FhZHZhXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xuICAgIH1cbiAgICB0aGlzLmVkaXRDb250YWN0PWZ1bmN0aW9uIChpZCxjb250YWN0RGF0YSl7XG5cbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uIChpbmRleCl7XG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XG4gICAgICAgICAgICAgICAgbmV3Q29udGFjdHMucHVzaChjb250YWN0RGF0YSk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdD1uZXdDb250YWN0cztcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgbcOzZG9zw610dmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XG4gICAgfVxuXG5cbiAgICAvKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBBZGRyZXNzIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLnJlc2V0QWRkcmVzc1RhYmxlPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hZGRyZXNzVGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcbiAgICAgICAgcm9vdC5yZW5kZXJBZGRyZXNzKCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyQWRkcmVzcz1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IHJvd051bT0xO1xuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQWRkcmVzcycpO1xuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuZ2V0RGF0YSgnYWRkcmVzcycpLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IGl0ZW1EYXRhPXRoaXM7XG4gICAgICAgICAgICBpdGVtRGF0YS5yb3dOdW09cm93TnVtO1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckFkZHJlc3NUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICAgICAgZGVidWcoaXRlbURhdGEpO1xuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsaXRlbURhdGEpO1xuICAgICAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAgICAgcm93TnVtKys7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25EZWxldGUnKS51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmFkZHJlc3NEZWxldGVDbGljayk7XG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkVkaXQnKS51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkVkaXQnKS5iaW5kKCdjbGljaycscm9vdC5hZGRyZXNzRWRpdENsaWNrKTtcblxuICAgIH1cbiAgICB0aGlzLmFkZHJlc3NEZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPVwiYWRkcmVzc0lkW11cIl0nKS52YWwoKTtcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPXJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MuZmlsdGVyKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT1pZCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MpO1xuICAgICAgICByb3cucmVtb3ZlKCk7XG4gICAgICAgIHJvb3QucmVzZXRBZGRyZXNzVGFibGUoKTtcbiAgICB9XG4gICAgdGhpcy5nZXRBZGRyZXNzUG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFkZHJlc3NQb3B1cFdvcmtmbG93O1xuICAgIH1cbiAgICB0aGlzLnNldEFkZHJlc3NQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBhZGRyZXNzUG9wdXBXb3JrZmxvdz1zdGF0dXM7XG4gICAgfVxuXG5cbiAgICB0aGlzLmFkZHJlc3NFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcbiAgICAgICAgY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9XCJhZGRyZXNzSWRbXVwiXScpLnZhbCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhpZCk7XG4gICAgICAgIHJvb3Quc2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coJ2VkaXQnKTtcbiAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5sb2FkRGF0YShpZCk7XG4gICAgfVxuICAgIHRoaXMuYWRkcmVzc0FjdGlvbj1mdW5jdGlvbiAoaXRlbURhdGEpe1xuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxuICAgICAgICBpZihyb290LmdldEFkZHJlc3NQb3B1cFdvcmtmbG93KCk9PSduZXcnKXtcbiAgICAgICAgICAgIHJvb3QuYWRkQWRkcmVzcyhpdGVtRGF0YSk7XG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcbiAgICAgICAgICAgIHJvb3QuZWRpdEFkZHJlc3MoaXRlbURhdGEuaWQsaXRlbURhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkQWRkcmVzcz1mdW5jdGlvbiAoSXRlbURhdGEpe1xuICAgICAgICAvKlxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXG4gICAgICAgICAqL1xuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzLnB1c2goSXRlbURhdGEpO1xuICAgICAgICBJdGVtRGF0YS5yb3dOdW09cm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg7XG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJBZGRyZXNzVGFibGVSb3dcIl0nKS5odG1sKClcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsSXRlbURhdGEpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hZGRyZXNzVGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcbiAgICAgICAgcm9vdC5iaW5kQWRkcmVzc0NsaWNrQWN0aW9uKCk7XG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkPDrW0gaG96esOhYWR2YSFcIiwgSXRlbURhdGEuc3RyZWV0K1wiIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XG4gICAgfVxuICAgIHRoaXMuZWRpdEFkZHJlc3M9ZnVuY3Rpb24gKGlkLGl0ZW1EYXRhKXtcblxuICAgICAgICBsZXQgbmV3SXRlbT1bXTtcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2FkZHJlc3MnKSxmdW5jdGlvbiAoaW5kZXgpe1xuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xuICAgICAgICAgICAgICAgIG5ld0l0ZW0ucHVzaChpdGVtRGF0YSk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLnB1c2godGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPW5ld0l0ZW07XG4gICAgICAgIHJvb3QucmVzZXRBZGRyZXNzVGFibGUoKTtcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiY8OtbSBhZGF0YWkgbcOzZG9zw610dmEhXCIsIGl0ZW1EYXRhLnN0cmVldCtcIiBtw7Nkb3PDrXR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xuICAgICAgICBkYXRhVGFibGVDU1NTZWxlY3Rvcj1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGFUYWJsZSc7IC8vXG5cbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxuICAgICAgICBBUFAuc2V0T3B0cyh7XG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXG5cbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0xLFxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zKz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGJ1dHRvbnM6e1xuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xuXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYToxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb25maWcpOyovXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXG4gICAgICAgICAgICAvL1wic3RhdGVTYXZlXCI6IHRydWUsXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xuICAgIH1cbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIGRlYnVnKCdkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaycpO1xuICAgICAgICBsZXQgbm9kZT0kKGV2ZW50WzBdLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xuICAgICAgICBsZXQgcm93RGF0YT1yb3cuZGF0YSgpO1xuICAgICAgICBsZXQgYWN0aW9uTmFtZT0nZGF0YXRhYmxlUm93QWN0aW9uJytub2RlLmRhdGEoJ2J1dHRvbnR5cGUnKS5jYXBpdGFsaXplKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdFthY3Rpb25OYW1lXShyb3dEYXRhLG5vZGUpXG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgQ2FsbGVkJyk7XG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKE9wdHMuVVJMKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhamF4VXJsKTtcbiAgICAgICAgKi9cbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XG4gICAgfVxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBkZWJ1ZygnU2F2ZSBjbGlja2VkJyk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRlYnVnKENTU1NlbGVjdG9yRm9ybSk7XG4gICAgICAgIGRlYnVnKCQoQ1NTU2VsZWN0b3JGb3JtKSk7XG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBmYWxzZScpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxuICAgICAgICB9XG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbChDU1NTZWxlY3RvckZvcm0pO1xuXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcbiAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuaWQpe1xuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9maXRDZW50ZXIuaWQpO1xuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XG4gICAgICAgICAgICAvL2FqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XG4gICAgICAgIH1cbi8qXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcbiAgICAgICAgZGVidWcoYWpheERhdGEuZW50cmllcygpKTtcbiAgICAgICAgZm9yICh2YXIgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBhaXJbMF0rICcsICcgKyBwYWlyWzFdKTtcbiAgICAgICAgfVxuKi9cblxuICAgICAgICBjb25zb2xlLnRhYmxlKE9iamVjdC5mcm9tRW50cmllcyhhamF4RGF0YSkpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICBPcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZT1bMCwgJ2Rlc2MnXTtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiU2lrZXJlcyByw7ZnesOtdMOpcyFcIiwgYWpheERhdGEuZ2V0KCduYW1lJykrXCIgbmV2xbEgYmVzesOhbGxsw610w7MgZWxtZW50dmVcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xuICAgICAgICBsZXQgYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4vKlxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBbXScsdmFsdWUpO1xuICAgICAgICB9KVxuKi9cbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnY29udGFjdElkJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnY29udGFjdElkW10nLHZhbHVlKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ190b2tlbicsJCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCkpO1xuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGxldCBpbmRleEtleT0kKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSxhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3N1cHBsaWVyJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3VwcGxpZXJbXScsdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gYWpheERhdGE7XG4gICAgfVxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsIFByb2ZpdENlbnRlckl0ZW0pO1xuXG59XG4iXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2ZpdENlbnRlci5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/profitCenter.js\n");
/***/ }),
/***/ "./resources/js/admin/supplier.js":
/*!****************************************!*\
!*** ./resources/js/admin/supplier.js ***!
\****************************************/
/***/ (() => {
eval("function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nif (typeof Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n _inherits(_Supplier, _DataModel);\n\n var _super = _createSuper(_Supplier);\n\n /*\n * Constructor\n */\n function _Supplier(data, options) {\n var _this;\n\n _classCallCheck(this, _Supplier);\n\n _this = _super.call(this, data, options);\n\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n\n console.log('Supplier constructor called');\n return _this;\n }\n\n return _Supplier;\n }(DataModel);\n\n ;\n window.Supplier = _Supplier;\n}\n\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerSupplier',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\n * Constructor\n */\n\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n\n root.Supplier = APP.Supplier;\n }\n };\n\n this.getOpts = function () {\n return Opts;\n };\n\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector)); //let formJSON = Object.fromEntries(data.entries());\n\n var formJSON = {};\n data.forEach(function (value, key) {\n // Reflect.has in favor of: formJSON.hasOwnProperty(key)\n if (!Reflect.has(formJSON, key)) {\n formJSON[key] = value;\n return;\n }\n\n if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\n }\n\n formJSON[key].push(value);\n });\n $(CSSSelector + ' input[data-inputmask]').each(function () {\n if (formJSON[$(this).attr('name')]) {\n formJSON[$(this).attr('name')] = formJSON[$(this).attr('name')].replace(/[_ ]+$/g, \"\");\n }\n }); //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\n formJSON.multiselectName = data.getAll('multiselectName');\n $.each(formJSON, function (item, value) {\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\n delete formJSON[item];\n });\n if(formJSON.phone){\n formJSON.phone=formJSON.phone.replaceAll('_','');\n }\n if(formJSON.email){\n formJSON.email=formJSON.email.replaceAll('_','');\n }\n */\n\n return formJSON;\n };\n\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenter[]', value);\n });\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroup[]', value);\n });\n $.each(ajaxData.getAll('supplierService'), function (key, value) {\n ajaxData.append('supplierService[]', value);\n });\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\n\n if ($(CSSSelectorForm + ' input[name=\"canSeeInOrder\"]').val() == 1 && $(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok'); //do your ajax submition here\n }\n\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.id); //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n\n ajaxData.append('_method', 'PUT');\n }\n\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug(data);\n\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create(\"Sikeres rögzítés!\", ajaxData.get('name') + \" nevű beszálllító elmentve\", TOAST_STATUS.SUCCESS, 5000);\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n console.log(Supplier);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'orderEmail', 'orderEmail2', 'address', 'mailingAddress', 'phone', 'fax', 'customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue'];\n $.each(needToSet, function () {\n if (typeof root.Supplier[this] != 'undefined') {\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.Supplier[this]);\n $(CSSSelectorForm + ' textarea[name=' + this + ']').val(root.Supplier[this]);\n }\n });\n\n if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\n }\n\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.Supplier.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=canSeeInOrder][data-title=' + root.Supplier.canSeeInOrder + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.Supplier.hooreycaDataActive + ']').click();\n var productGroup = [];\n $.each(root.Supplier.product_group, function () {\n productGroup.push(this.name);\n });\n $(CSSSelectorForm + ' .productCategorySelect').val(productGroup).change();\n var service = [];\n $.each(root.Supplier.service, function () {\n service.push(this.name);\n });\n $(CSSSelectorForm + ' .serviceSelect').val(service).change();\n var profitCenter = [];\n $.each(root.Supplier.profit_center, function () {\n profitCenter.push(this.name);\n }); //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n } //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']);\n //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change();\n //root.setDetailsViewData();\n\n };\n\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $('.supplierForm .buttonNewContact').bind('click', function () {\n APP.SupplierAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons();\n $(\":input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $('form.supplierForm button.FormSaveButton').off('click');\n $('form.supplierForm button.FormSaveButton').on('click', root.clickSaveButton);\n root.setDetailsViewData();\n $(\".productCategorySelect\").select2();\n $(\".serviceSelect\").select2({\n tags: true,\n createTag: function createTag(params) {\n var term = $.trim(params.term);\n\n if (term === '') {\n return null;\n }\n\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n\n };\n }\n }); //$(\".profitCenterSelect\").select2();\n\n $(\"input[name=logoFile]\").change(function () {\n setImageFromLocal(this, Opts.containerCssSelector + ' .imageLogo');\n });\n $('form.supplierForm .profitCenterSelectCheckboxAll').off('click');\n $('form.supplierForm .profitCenterSelectCheckboxAll').on('click', function () {\n //console.log();\n //let checked=$(this).is(\":checked\")\n $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked', $(this).is(\":checked\"));\n });\n root.renderAttachment(); //Opts.onAfterInitViewDetails();\n\n root.initFileAttachmentFeature();\n debug('**end initViewDetails ');\n };\n\n this.selectedUploadFileToggle = function (fileInput) {\n /*\n console.log(fileInput.attr('name'));\n console.log(fileInput[0].files[0]);\n console.log(fileInput[0].files[0].name);\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.custom-file-label.selected').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n\n this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n\n if (fileInput[0].files.length < 1) {\n Toast.create(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n\n console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n var data = new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n var ajaxUrl = Opts.URL.attachFile.replace('%id%', root.Supplier.id);\n console.groupEnd();\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n\n if (data.success == true) {\n root.addAttachment(data.data.attachment);\n root.selectedUploadFileToggle();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\n };\n\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called'); //Opts.onAfterInitViewDetails=root.autofillDetails;\n\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickSupplierDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n ajaxData._token = $('input[name=_token]').val();\n console.log(ajaxUrl);\n console.log(ajaxData);\n var row = $(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr'));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n root.dadatatableRowActionCallerNode = false;\n }\n }\n });\n };\n\n var datatableRowActionCallerNode = false;\n\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n root.dadatatableRowActionCallerNode = node;\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a beszállítót?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: rowData.id\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n };\n\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n } //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n },\n /**/\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\n data:{\n a:1,\n b:2\n }\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\n console.log(dt);\n console.log(node);\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n\n this.autofillDetails = function () {\n debug('nyeresre allunk');\n var randomNumber = getRandomInt(9999);\n $('input[name=name]').val('Beszalító' + randomNumber);\n $('input[name=hooreycaId]').val('hb' + randomNumber);\n $('input[name=nameId]').val('be' + randomNumber);\n $('input[name=orderEmail]').val('kapcsolat' + randomNumber + '@beszallito.hu');\n $('input[name=orderEmail2]').val('informacio' + randomNumber + '@beszallito.hu');\n $('input[name=address]').val('8989 Supplier utca ' + randomNumber);\n $('input[name=mailingAddress]').val('8989 Postai út' + randomNumber);\n $('input[name=phone]').val('+36301234567');\n $('input[name=fax]').val('36308889999');\n $('input[name=customerServicePhone]').val('+36761234444');\n $('textarea[name=note]').val('Megjegyzem ' + randomNumber);\n };\n\n this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\n {\n id:3,\n name:'Kósa Veronika',\n email:'szamlazas4@funkcio.hu',\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\n }\n */\n ]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n\n if (Opts.testMode) {\n return root.testMode();\n }\n\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n\n root.initViewList();\n };\n\n this.renderAttachment = function () {\n var rowNum = 1;\n console.log('renderingAttachment');\n $.each(root.Supplier.getData('attachment'), function () {\n var attachmentData = this;\n attachmentData.rowNum = rowNum;\n date = new Date(attachmentData.created_at);\n attachmentData.date = date.toLocaleString();\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $('.attachmentTable tbody').append(render);\n rowNum++;\n });\n root.bindAttachmentClickAction();\n };\n\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n root.Supplier.attachment.push(attachmentData);\n attachmentData.rowNum = root.Supplier.attachment.length;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n this.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\n };\n\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum; //console.log(contactData);\n\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n\n this.bindContactClickAction = function () {\n var node = $('.contactTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.contactDeleteClick);\n node = $('.contactTable .buttonEdit');\n node.unbind('click');\n node.bind('click', root.contactEditClick);\n };\n\n this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n\n var currentAttachmentRow = false;\n\n this.attachmentDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=attachmentId]').val();\n var ajaxUrl = Opts.URL.detachFile.replace('%id%', root.Supplier.id); //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\n\n var data = {};\n data._token = $('input[name=\"_token\"]').val();\n data.attachemntId = id;\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n //contentType:false,\n //processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n\n if (data.success == true) {\n root.Supplier.attachment = root.Supplier.attachment.filter(function (value, index, arr) {\n if (value.id !== data.data.attachment.id * 1) {\n return true;\n }\n\n return false;\n });\n /*\n */\n //row.remove();\n\n root.resetAttachmentTable();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n\n this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\n };\n\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.Supplier.contact = root.Supplier.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n\n return false;\n });\n row.remove();\n root.resetContactTable();\n };\n\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n\n this.contactEditClick = function (event) {\n //console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n\n this.getSupplier = function () {\n return root.Supplier;\n };\n\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.Supplier.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.Supplier.contact = newContacts;\n root.resetContactTable();\n Toast.create(\"Kapcsolat adatai módosítva!\", contactData.name + \" nevű kapocsolattartó módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n this.addContact = function (contactData) {\n /*\n fel kell venni a sorba\n */\n root.Supplier.contact.push(contactData);\n contactData.rowNum = root.Supplier.contact.length;\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Kapcsolat tartó hozzáadva!\", contactData.name + \" nevű kapocsolattartó hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanM/ZWY3OSJdLCJuYW1lcyI6WyJTdXBwbGllciIsImRhdGEiLCJvcHRpb25zIiwiY29udGFjdCIsImNvbnNvbGUiLCJsb2ciLCJEYXRhTW9kZWwiLCJ3aW5kb3ciLCJTdXBwbGllckFkbWluIiwiU3VwcGxpZXJJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiYXR0YWNoRmlsZSIsImRldGFjaEZpbGUiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbE9sZCIsIkNTU1NlbGVjdG9yIiwiRm9ybURhdGEiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJmb3JtSlNPTiIsImZvckVhY2giLCJ2YWx1ZSIsImtleSIsIlJlZmxlY3QiLCJoYXMiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwiZWFjaCIsImF0dHIiLCJyZXBsYWNlIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiQ1NTU2VsZWN0b3JGb3JtIiwiYWpheERhdGEiLCJnZXRBbGwiLCJhcHBlbmQiLCJ2YWwiLCJpbmRleEtleSIsImdldCIsInNldCIsImNsaWNrU2F2ZUJ1dHRvbiIsImV2ZW50IiwiZGVidWciLCJwcmV2ZW50RGVmYXVsdCIsImNoZWNrVmFsaWRpdHkiLCJzdG9wUHJvcGFnYXRpb24iLCJhamF4VXJsIiwiYWpheE1ldGhvZCIsImlkIiwiYWpheCIsInVybCIsInR5cGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsInN1Y2Nlc3MiLCJUb2FzdCIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0xpc3QiLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJub3RlIiwicHJvcCIsImNhblNlZSIsImNsaWNrIiwiY2FuU2VlSW5PcmRlciIsImhvb3JleWNhRGF0YUFjdGl2ZSIsInByb2R1Y3RHcm91cCIsInByb2R1Y3RfZ3JvdXAiLCJuYW1lIiwiY2hhbmdlIiwic2VydmljZSIsInByb2ZpdENlbnRlciIsInByb2ZpdF9jZW50ZXIiLCJlc2NhcGVTZWxlY3RvciIsImluaXRWaWV3RGV0YWlscyIsIkNvbnRhY3RQb3BVcCIsImluaXQiLCJhY3RpdmUiLCJvbkFmdGVyU2F2ZSIsImNvbnRhY3RBY3Rpb24iLCJyZW5kZXJDb250YWN0IiwiYmluZCIsInNldENvbnRhY3RQb3B1cFdvcmtmbG93IiwiY2xlYXJEYXRhIiwidG9vbHRpcCIsImluaXRSYWRpb0J1dHRvbnMiLCJpbnB1dG1hc2siLCJsZW5ndGgiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwib2ZmIiwib24iLCJzZWxlY3QyIiwidGFncyIsImNyZWF0ZVRhZyIsInBhcmFtcyIsInRlcm0iLCJ0cmltIiwidGV4dCIsIm5ld1RhZyIsInNldEltYWdlRnJvbUxvY2FsIiwiaXMiLCJyZW5kZXJBdHRhY2htZW50IiwiaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZSIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwiZ3JvdXAiLCJEQU5HRVIiLCJmaW5kIiwiZ3JvdXBFbmQiLCJiZWZvcmVTZW5kIiwiYWRkQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImNsaWNrTmV3IiwiY2xpY2tOZXdDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJyb3dEYXRhIiwibm9kZSIsImNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQiLCJtb2RhbCIsIl90b2tlbiIsInJvdyIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiRGF0YVRhYmxlIiwiZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwicGFyZW50cyIsIm1ldGhvZCIsInJlbW92ZSIsImRyYXciLCJkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwiZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJsYW5ndWFnZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImFyZ3VtZW50cyIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJsYXRpbmlzZSIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImFwaSIsImNvbmZpZyIsImFjdGlvbiIsImUiLCJkdCIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwiYXV0b2ZpbGxEZXRhaWxzIiwicmFuZG9tTnVtYmVyIiwiZ2V0UmFuZG9tSW50Iiwicm93TnVtIiwiZ2V0RGF0YSIsImF0dGFjaG1lbnREYXRhIiwiZGF0ZSIsIkRhdGUiLCJjcmVhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJsaW5rIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJyZW5kZXIiLCJNdXN0YWNoZSIsImJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24iLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwiZW5hYmxlVGltZXJzIiwib3JpZ2luYWxfZmlsZW5hbWUiLCJyZXNldENvbnRhY3RUYWJsZSIsImNvbnRhY3REYXRhIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImF0dGFjaG1lbnREZWxldGVDbGljayIsImN1cnJlbnRBdHRhY2htZW50Um93IiwiY2xvc2VzdCIsImF0dGFjaGVtbnRJZCIsImZpbHRlciIsImFyciIsInJlc2V0QXR0YWNobWVudFRhYmxlIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJzdGF0dXMiLCJsb2FkRGF0YSIsImdldFN1cHBsaWVyIiwiYWRkQ29udGFjdCIsImVkaXRDb250YWN0IiwibmV3Q29udGFjdHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsUUFBUCxLQUFrQixXQUFyQixFQUFpQztBQUFBLE1BQ3ZCQSxTQUR1QjtBQUFBOztBQUFBOztBQUd6QjtBQUNSO0FBQ0E7QUFDUSx1QkFBYUMsSUFBYixFQUFrQkMsT0FBbEIsRUFBMkI7QUFBQTs7QUFBQTs7QUFDdkIsZ0NBQU1ELElBQU4sRUFBV0MsT0FBWDs7QUFDQSxVQUFHLE9BQU8sTUFBS0MsT0FBWixLQUF1QixXQUExQixFQUFzQztBQUNsQyxjQUFLQSxPQUFMLEdBQWEsRUFBYjtBQUNIOztBQUNEQyxNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSw2QkFBWjtBQUx1QjtBQU0xQjs7QUFad0I7QUFBQSxJQUNOQyxTQURNOztBQWE1QjtBQUNEQyxFQUFBQSxNQUFNLENBQUNQLFFBQVAsR0FBZ0JBLFNBQWhCO0FBQ0g7O0FBR0RPLE1BQU0sQ0FBQ0MsYUFBUCxHQUFxQixVQUFVTixPQUFWLEVBQWtCTyxZQUFsQixFQUFnQztBQUNqRDtBQUNKO0FBQ0E7QUFDQTtBQUNJLE1BQUlDLElBQUksR0FBRztBQUNQQyxJQUFBQSxLQUFLLEVBQUMsSUFEQztBQUVQQyxJQUFBQSxvQkFBb0IsRUFBRSxvQkFGZjtBQUdQQyxJQUFBQSxRQUFRLEVBQUMsS0FIRjtBQUlQQyxJQUFBQSxHQUFHLEVBQUM7QUFDQUMsTUFBQUEs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IFN1cHBsaWVyIGV4dGVuZHMgRGF0YU1vZGVse1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIENvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdD1bXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllciBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHdpbmRvdy5TdXBwbGllcj1TdXBwbGllcjtcbn1cblxuXG53aW5kb3cuU3VwcGxpZXJBZG1pbj1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pIHtcbiAgICAvKlxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXG4gICAgICogaW4gdGhlIGNsYXNzXG4gICAgICovXG4gICAgbGV0IE9wdHMgPSB7XG4gICAgICAgIHRva2VuOm51bGwsXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclN1cHBsaWVyJyxcbiAgICAgICAgdGVzdE1vZGU6ZmFsc2UsXG4gICAgICAgIFVSTDp7XG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxuICAgICAgICAgICAgaW5kZXg6JycsXG4gICAgICAgICAgICBzaG93OicnLFxuICAgICAgICAgICAgZWRpdDonJyxcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcbiAgICAgICAgICAgIHN0b3JlOicnLFxuICAgICAgICAgICAgdXBkYXRlOicnLFxuICAgICAgICAgICAgZGVzdHJveTonJyxcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6JycsXG4gICAgICAgICAgICBkZXRhY2hGaWxlOicnLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhVGFibGU6e1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6WzEsICdhc2MnXVxuICAgICAgICB9LFxuICAgICAgICBvbkFmdGVySW5pdFZpZXdEZXRhaWxzOmZ1bmN0aW9uICgpe31cbiAgICB9O1xuICAgIGxldCBTdXBwbGllciA9IHt9O1xuICAgIGxldCByb290ID0gdGhpcztcbiAgICBsZXQgY29udGFjdFBvcHVwV29ya2Zsb3c9J25ldyc7XG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllckFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYoIVN1cHBsaWVySXRlbSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3VwcGxpZXIgbGV0cmUga2VsbGV0IGhvem5pICcpO1xuICAgICAgICAgICAgaWYoIUFQUC5TdXBwbGllcil7XG4gICAgICAgICAgICAgICAgQVBQLlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvb3QuU3VwcGxpZXI9QVBQLlN1cHBsaWVyO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiBPcHRzO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihDU1NTZWxlY3RvcikpO1xuICAgICAgICAvL2xldCBmb3JtSlNPTiA9IE9iamVjdC5mcm9tRW50cmllcyhkYXRhLmVudHJpZXMoKSk7XG4gICAgICAgIHZhciBmb3JtSlNPTiA9IHt9O1xuICAgICAgICBkYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIC8vIFJlZmxlY3QuaGFzIGluIGZhdm9yIG9mOiBmb3JtSlNPTi5oYXNPd25Qcm9wZXJ0eShrZXkpXG4gICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZm9ybUpTT04sIGtleSkpe1xuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShmb3JtSlNPTltrZXldKSl7XG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IFtmb3JtSlNPTltrZXldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1KU09OW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoQ1NTU2VsZWN0b3IrJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgaWYoZm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldKXtcbiAgICAgICAgICAgICAgICBmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV09Zm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy9mb3JtSlNPTi5wcm9kdWN0R3JvdXBzPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcblxuXG4gICAgICAgIC8qTXVsdGlzZWxlY3Qgb3IgY2hlY2tib3ggdG8gYXJyYXk6XG4gICAgICAgIGFqYXhEYXRhWydwcm9kdWN0R3JvdXAnXT0kKFwiLnByb2R1Y3RDYXRlZ29yeVNlbGVjdFwiKS5zZWxlY3QyKCkudmFsKCk7XG5cbiAgICAgICAgZm9ybUpTT04ubXVsdGlzZWxlY3ROYW1lID0gZGF0YS5nZXRBbGwoJ211bHRpc2VsZWN0TmFtZScpO1xuICAgICAgICAkLmVhY2goZm9ybUpTT04sIGZ1bmN0aW9uIChpdGVtLCB2YWx1ZSkge1xuICAgICAgICAgICAgZm9ybUpTT05bJC5sY0ZpcnN0KGl0ZW0ucmVwbGFjZSgnY29udGFjdCcsICcnKSldID0gdmFsdWU7XG4gICAgICAgICAgICBkZWxldGUgZm9ybUpTT05baXRlbV07XG4gICAgICAgIH0pO1xuICAgICAgICBpZihmb3JtSlNPTi5waG9uZSl7XG4gICAgICAgICAgICBmb3JtSlNPTi5waG9uZT1mb3JtSlNPTi5waG9uZS5yZXBsYWNlQWxsKCdfJywnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZm9ybUpTT04uZW1haWwpe1xuICAgICAgICAgICAgZm9ybUpTT04uZW1haWw9Zm9ybUpTT04uZW1haWwucmVwbGFjZUFsbCgnXycsJycpO1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgIHJldHVybiBmb3JtSlNPTjtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcbiAgICAgICAgbGV0IGFqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJbXScsdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBbXScsdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdzdXBwbGllclNlcnZpY2UnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllclNlcnZpY2VbXScsdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdjb250YWN0SWRbXScsdmFsdWUpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywkKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XG5cbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IGluZGV4S2V5PSQodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICAgICAgaWYoYWpheERhdGEuZ2V0KGluZGV4S2V5KSl7XG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYWpheERhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgaWYgKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1cImNhblNlZUluT3JkZXJcIl0nKS52YWwoKT09MSAmJiAkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBmYWxzZScpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxuICAgICAgICB9XG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbChDU1NTZWxlY3RvckZvcm0pO1xuXG5cblxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ19tZXRob2QnLCdQVVQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICAgICAgICAgIGRlYnVnKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJTaWtlcmVzIHLDtmd6w610w6lzIVwiLCBhamF4RGF0YS5nZXQoJ25hbWUnKStcIiBuZXbFsSBiZXN6w6FsbGzDrXTDsyBlbG1lbnR2ZVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0RGV0YWlsc1ZpZXdEYXRhPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xuICAgICAgICBjb25zb2xlLmxvZyhTdXBwbGllcik7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcbiAgICAgICAgICAgICduYW1lJywnaG9vcmV5Y2FJZCcsJ25hbWVJZCcsXG4gICAgICAgICAgICAnb3JkZXJFbWFpbCcsJ29yZGVyRW1haWwyJywnYWRkcmVzcycsJ21haWxpbmdBZGRyZXNzJywncGhvbmUnLCdmYXgnLCdjdXN0b21lclNlcnZpY2VQaG9uZScsXG4gICAgICAgICAgICAnbmFtZTIyJyxcbiAgICAgICAgICAgICdvcGVuSG91cnMnLCAnb3JkZXJzRGVhZGxpbmUnLCAnbWluT3JkZXJWYWx1ZScsXG4gICAgICAgIF07XG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbdGhpc10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJykudmFsKHJvb3QuU3VwcGxpZXJbdGhpc10pO1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbChyb290LlN1cHBsaWVyLm5vdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1lbWFpbEF0dGFjaG1lbnRUeXBlXVt2YWx1ZT0nK3Jvb3QuU3VwcGxpZXJbJ2VtYWlsQXR0YWNobWVudFR5cGUnXSsnXScpLnByb3AoJ2NoZWNrZWQnLHRydWUpO1xuICAgICAgICB9XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVJbk9yZGVyXVtkYXRhLXRpdGxlPScrcm9vdC5TdXBwbGllci5jYW5TZWVJbk9yZGVyKyddJykuY2xpY2soKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWhvb3JleWNhRGF0YUFjdGl2ZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuaG9vcmV5Y2FEYXRhQWN0aXZlKyddJykuY2xpY2soKTtcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZHVjdF9ncm91cCxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9kdWN0R3JvdXAucHVzaCh0aGlzLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZHVjdENhdGVnb3J5U2VsZWN0JykudmFsKHByb2R1Y3RHcm91cCkuY2hhbmdlKCk7XG5cbiAgICAgICAgbGV0IHNlcnZpY2U9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnNlcnZpY2UsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VydmljZS5wdXNoKHRoaXMubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5zZXJ2aWNlU2VsZWN0JykudmFsKHNlcnZpY2UpLmNoYW5nZSgpO1xuXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnByb2ZpdF9jZW50ZXIsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHJvZml0Q2VudGVyLnB1c2godGhpcy5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XG4gICAgICAgIC8vZGVidWcocHJvZml0Q2VudGVyKTtcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCdpbnB1dFt2YWx1ZT1cIicrJC5lc2NhcGVTZWxlY3Rvcih0aGlzKSsnXCJdJykucHJvcCggXCJjaGVja2VkXCIsIHRydWUgKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSE9J3VuZGVmaW5lZCcgJiYgKHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2RlYnVnKEFQUC5TdXBwbGllckFkbWluLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLnN1cHBsaWVyRm9ybScpWydwcm9kdWN0R3JvdXAnXSk7XG4gICAgICAgIC8vJCgnW25hbWU9cHJvZHVjdEdyb3VwXScpLnZhbChbJ0LDvGbDqcOhcnVfw6lkZXNpcGFyaV90ZXJtw6lrZWsnLCdUb2rDoXMnXSkuY2hhbmdlKCk7XG4gICAgICAgIC8vcm9vdC5zZXREZXRhaWxzVmlld0RhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcbiAgICAgICAgZGVidWcoJyoqY2FsbCBpbml0Vmlld0RldGFpbHMgJyk7XG4gICAgICAgIGlmKCFBUFAuQ29udGFjdFBvcFVwKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAgPSBuZXcgd2luZG93LkNvbnRhY3RQb3BVcCgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcbiAgICAgICAgfVxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmluaXQoe1xuICAgICAgICAgICAgYWN0aXZlOnRydWUsXG4gICAgICAgICAgICBvbkFmdGVyU2F2ZTpyb290LmNvbnRhY3RBY3Rpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xuICAgICAgICAkKCcuc3VwcGxpZXJGb3JtIC5idXR0b25OZXdDb250YWN0JykuYmluZCgnY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgQVBQLlN1cHBsaWVyQWRtaW4uc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ25ldycpO1xuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuc2hvdygpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcbiAgICAgICAgaW5pdFJhZGlvQnV0dG9ucygpO1xuICAgICAgICAkKFwiOmlucHV0XCIpLmlucHV0bWFzayh7XG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpKTtcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPiAwIHx8ICQodGhpcykuZGF0YSgncmVxdWlyZWQnKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLXZhbGlkJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJvbmNsZWFyZWRcIjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjbGVhcmVkJyk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xuICAgICAgICByb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xuICAgICAgICAkKFwiLnByb2R1Y3RDYXRlZ29yeVNlbGVjdFwiKS5zZWxlY3QyKCk7XG4gICAgICAgICQoXCIuc2VydmljZVNlbGVjdFwiKS5zZWxlY3QyKHtcbiAgICAgICAgICAgIHRhZ3M6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVUYWc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGVybSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRlcm0sXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRlcm0sXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhZzogdHJ1ZSAvLyBhZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyQoXCIucHJvZml0Q2VudGVyU2VsZWN0XCIpLnNlbGVjdDIoKTtcbiAgICAgICAgJChcImlucHV0W25hbWU9bG9nb0ZpbGVdXCIpLmNoYW5nZShmdW5jdGlvbigpe1xuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveEFsbCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygpO1xuICAgICAgICAgICAgLy9sZXQgY2hlY2tlZD0kKHRoaXMpLmlzKFwiOmNoZWNrZWRcIilcbiAgICAgICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGlucHV0LnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsJCh0aGlzKS5pcyhcIjpjaGVja2VkXCIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscygpO1xuICAgICAgICByb290LmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmUoKTtcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcbiAgICAgICAgLypcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0LmF0dHIoJ25hbWUnKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXS5uYW1lKTtcbiAgICAgICAgKi9cbiAgICAgICAgaWYoZmlsZUlucHV0KXtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgaWYoZmlsZUlucHV0WzBdLmZpbGVzWzBdKXtcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRTcGlubmVyJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XG4gICAgICAgICAgICAkKCcuY3VzdG9tLWZpbGUtbGFiZWwuc2VsZWN0ZWQnKS50ZXh0KCcnKTtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZCcpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZT1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgIH1cblxuXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwQXR0YWNoZUZpbGUnKTtcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSl7XG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiSGliYSFcIiwgJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xuICAgICAgICAgICAgbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xuXG4gICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZShmaWxlSW5wdXQpO1xuICAgICAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuYXR0YWNoRmlsZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcblxuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgICAgICBkYXRhOmRhdGEsXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZGRBdHRhY2htZW50KGRhdGEuZGF0YS5hdHRhY2htZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmNsaWNrTmV3Q2FsbEJhY2spO1xuICAgIH1cblxuICAgIHRoaXMuY2xpY2tOZXdDYWxsQmFjaz1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcbiAgICB9XG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgQ2FsbGVkJyk7XG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KGFqYXhVcmwscm9vdC5pbml0Vmlld0RldGFpbHMpO1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQ9ZnVuY3Rpb24gKGV2ZW50KXtcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcbiAgICAgICAgZGVidWcoZXZlbnQpO1xuICAgICAgICBkZWJ1ZyhldmVudC5kYXRhKTtcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhhamF4VXJsKTtcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhyb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDpcIkRFTEVURVwiLFxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgcm93LnJlbW92ZSgpLmRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcblxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcbiAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9bm9kZTtcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykub24oJ3Nob3cuYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIG1vZGFsJ3MgY29udGVudC4gV2UnbGwgdXNlIGpRdWVyeSBoZXJlLCBidXQgeW91IGNvdWxkIHVzZSBhIGRhdGEgYmluZGluZyBsaWJyYXJ5IG9yIG90aGVyIG1ldGhvZHMgaW5zdGVhZC5cbiAgICAgICAgICAgIHZhciBtb2RhbCA9ICQodGhpcyk7XG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcbiAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC1ib2R5JykudGV4dCgnQml6dG9zYW4gdMO2cmxpIGEgYmVzesOhbGzDrXTDs3Q/Jyk7XG4gICAgICAgICAgICBtb2RhbC5maW5kKCcuYnV0dG9uWWVzJykub2ZmKCdjbGljaycpO1xuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnc2hvdycpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XG4gICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XG4gICAgICAgIGxldCBhY3Rpb25OYW1lPSdkYXRhdGFibGVSb3dBY3Rpb24nK25vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiByb290W2FjdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFZpZXdMaXN0ID0gZnVuY3Rpb24gKG9wdGlvbnM9e30pIHtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5jbGlja05ldyxcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcblxuICAgICAgICB9KVxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xuICAgICAgICB9XG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xuICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvKiovXG5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ8OaaiBmZWx2aXRlbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zdWNjZXNzIG5ld0l0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOjJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6J25ld0l0ZW0nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oYXBpLCBub2RlLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5vZGUpLnJlbW92ZUNsYXNzKCd1aS1idXR0b24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCBlLCBkdCwgbm9kZSwgY29uZmlnICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZUlkXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYXV0b2ZpbGxEZXRhaWxzPWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XG4gICAgICAgIGxldCByYW5kb21OdW1iZXI9Z2V0UmFuZG9tSW50KDk5OTkpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPW5hbWVdJykudmFsKCdCZXN6YWzDrXTDsycrcmFuZG9tTnVtYmVyKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XG4gICAgICAgICQoJ2lucHV0W25hbWU9bmFtZUlkXScpLnZhbCgnYmUnK3JhbmRvbU51bWJlcik7XG4gICAgICAgICQoJ2lucHV0W25hbWU9b3JkZXJFbWFpbF0nKS52YWwoJ2thcGNzb2xhdCcrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPWFkZHJlc3NdJykudmFsKCc4OTg5IFN1cHBsaWVyIHV0Y2EgJytyYW5kb21OdW1iZXIpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPW1haWxpbmdBZGRyZXNzXScpLnZhbCgnODk4OSBQb3N0YWkgw7p0JytyYW5kb21OdW1iZXIpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XG4gICAgICAgICQoJ2lucHV0W25hbWU9ZmF4XScpLnZhbCgnMzYzMDg4ODk5OTknKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1jdXN0b21lclNlcnZpY2VQaG9uZV0nKS52YWwoJyszNjc2MTIzNDQ0NCcpO1xuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcblxuICAgIH1cbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnISEhIXRlc3Rtb2RlICEhISEnKTtcbiAgICAgICAgcm9vdC5TdXBwbGllciA9IG5ldyB3aW5kb3cuU3VwcGxpZXIoe1xuICAgICAgICAgICAgJ2NvbnRhY3QnOltcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOjIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOjMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTonS8Ozc2EgVmVyb25pa2EnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6J3N6YW1sYXphczRAZnVua2Npby5odScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xuICAgICAgICAgICAgfVxuKi9cblxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmluaXRWaWV3RGV0YWlscyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcblxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcbiAgICAgICAgICAgIHJvb3QuU3VwcGxpZXI9U3VwcGxpZXJJdGVtXG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCByb3dOdW09MTtcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0F0dGFjaG1lbnQnKTtcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnREYXRhPXRoaXM7XG4gICAgICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09cm93TnVtO1xuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmRhdGU9ZGF0ZS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgYXR0YWNobWVudERhdGEubGluaz1hdHRhY2htZW50RGF0YS5QdWJsaWNVcmwrJy8nK2F0dGFjaG1lbnREYXRhLmZpbGVuYW1lO1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxhdHRhY2htZW50RGF0YSk7XG4gICAgICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgICAgICByb3dOdW0rKztcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkQXR0YWNobWVudD1mdW5jdGlvbiAoYXR0YWNobWVudERhdGEpe1xuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xuICAgICAgICByb290LlN1cHBsaWVyLmF0dGFjaG1lbnQucHVzaChhdHRhY2htZW50RGF0YSk7XG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJBdHRhY2htZW50VGFibGVSb3dcIl0nKS5odG1sKClcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsYXR0YWNobWVudERhdGEpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XG4gICAgfVxuXG5cbiAgICB0aGlzLnJlc2V0Q29udGFjdFRhYmxlPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckNvbnRhY3Q9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCByb3dOdW09MTtcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0NvbnRhY3RzJyk7XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xuICAgICAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvd051bTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29udGFjdERhdGEpO1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgICAgICByb3dOdW0rKztcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RGVsZXRlQ2xpY2spO1xuXG4gICAgICAgIG5vZGU9JCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRWRpdCcpO1xuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcblxuICAgIH1cblxuICAgIHRoaXMuYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbj1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IG5vZGU9JCgnLmF0dGFjaG1lbnRUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xuICAgICAgICBub2RlLmJpbmQoJ2NsaWNrJyxyb290LmF0dGFjaG1lbnREZWxldGVDbGljayk7XG4gICAgfVxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcbiAgICB0aGlzLmF0dGFjaG1lbnREZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGV0YWNoRmlsZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcbiAgICAgICAgLy9sZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xuICAgICAgICBsZXQgZGF0YT17fTtcbiAgICAgICAgZGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpO1xuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTpkYXRhLFxuICAgICAgICAgICAgdHlwZTonUE9TVCcsXG4gICAgICAgICAgICAvL2NvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuICAgICAgICAgICAgICAgICAgICByb290LlN1cHBsaWVyLmF0dGFjaG1lbnQ9cm9vdC5TdXBwbGllci5hdHRhY2htZW50LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLy9yb3cucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XG4gICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgfVxuXG5cbiAgICB0aGlzLnJlc2V0QXR0YWNobWVudFRhYmxlPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcm93LnJlbW92ZSgpO1xuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XG4gICAgfVxuICAgIHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcbiAgICB9XG4gICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xuICAgIH1cblxuXG4gICAgdGhpcy5jb250YWN0RWRpdENsaWNrPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xuICAgICAgICByb290LnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiByb290LlN1cHBsaWVyO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcbiAgICAgICAgY29uc29sZS5sb2coJ25haCBtb3N0IGtlbGxlbmUgbWVnIHZhbGFtaXQgY3NpbmFsbmkuJylcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xuICAgICAgICB9ZWxzZSBpZihyb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93KCk9PSdlZGl0Jyl7XG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcblxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2goY29udGFjdERhdGEpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgbmV3Q29udGFjdHMucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdD1uZXdDb250YWN0cztcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgbcOzZG9zw610dmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XG4gICAgfVxuICAgIHRoaXMuYWRkQ29udGFjdD1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xuICAgICAgICAvKlxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXG4gICAgICAgICAqL1xuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3QucHVzaChjb250YWN0RGF0YSk7XG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmNvbnRhY3QubGVuZ3RoO1xuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgdGFydMOzIGhvenrDoWFkdmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBob3p6w6FhZHZhXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xuICAgIH1cblxuXG4gICAgdGhpcy5jb25zdHJ1Y3Qob3B0aW9ucyxTdXBwbGllckl0ZW0pO1xufTtcbiJdLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n");
/***/ })
/******/ });
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
/******/ __webpack_modules__["./resources/js/admin/dashboard.js"]();
/******/ __webpack_modules__["./resources/js/admin/priceList.js"]();
/******/ __webpack_modules__["./resources/js/admin/priceListProfitCenter.js"]();
/******/ __webpack_modules__["./resources/js/admin/product.js"]();
/******/ __webpack_modules__["./resources/js/admin/profitCenter.js"]();
/******/ var __webpack_exports__ = {};
/******/ __webpack_modules__["./resources/js/admin/supplier.js"]();
/******/
/******/ })()
;