diff --git a/public/js/admin.js b/public/js/admin.js index 0b60d01..bfc5b60 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -1,87 +1,2 @@ -/* - * 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 /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n debug('Dashboard constructor called');\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.init = function (options) {\n console.log('Dashboard init called');\n $.extend(Opts, options);\n /*\r\n APP.setOpts({\r\n afterLoadMainContent:root.initEditor,\r\n })\r\n */\n /*\r\n Init list view\r\n */\n root.initEditorButtons();\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');\r\n $('.btnGroupModify').toggleClass('d-none');\r\n */\n root.saveCustomContent();\n //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 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 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 this.removeEditor = function (options) {\n if (typeof tinymce !== \"undefined\") {\n tinymce.remove();\n }\n };\n this.initEditor = function (options) {\n if (typeof tinymce === \"undefined\") {\n root.loadTinymce();\n return;\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 /*\r\n toolbar: 'customInsertButton | undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table',\r\n setup: function (editor) {\r\n editor.ui.registry.addButton('customInsertButton', {\r\n text: 'My Button',\r\n onAction: function (_) {\r\n editor.insertContent(' It\\'s my button! ');\r\n }});\r\n }\r\n */\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJEYXNoYm9hcmQiLCJPcHRzIiwiYWN0aXZlIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0RmlsZU1vZCIsImlzQWRtaW4iLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95Iiwicm9vdCIsImNvbnN0cnVjdCIsIm9wdGlvbnMiLCJkZWJ1ZyIsIiQiLCJleHRlbmQiLCJnZXRPcHRzIiwiaW5pdCIsImNvbnNvbGUiLCJsb2ciLCJpbml0RWRpdG9yQnV0dG9ucyIsIm9mZiIsIm9uIiwiaW5pdEVkaXRvciIsInRvZ2dsZUNsYXNzIiwic2F2ZUN1c3RvbUNvbnRlbnQiLCJyZW1vdmVFZGl0b3IiLCJhamF4RGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwidGlueW1jZSIsImFjdGl2ZUVkaXRvciIsImdldENvbnRlbnQiLCJhamF4VXJsIiwidXBkYXRlIiwicmVwbGFjZSIsImRhdGEiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsIlRvYXN0IiwiVE9BU1RfU1RBVFVTIiwiSU5GTyIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwibG9hZFRpbnltY2UiLCJnZXRTY3JpcHQiLCJyZW1vdmUiLCJzZWxlY3RvciIsImxhbmd1YWdlIiwicGx1Z2lucyIsInRvb2xiYXIiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL2Rhc2hib2FyZC5qcz9lMGQ5Il0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5EYXNoYm9hcmQ9ZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjpcIi5kYXNoYm9hcmRcIixcclxuICAgICAgICB0ZXN0RmlsZU1vZDpmYWxzZSxcclxuICAgICAgICBpc0FkbWluOmZhbHNlLFxyXG4gICAgICAgIFVSTDp7XHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6JycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ0Rhc2hib2FyZCBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdEYXNoYm9hcmQgaW5pdCBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuLypcclxuICAgICAgICBBUFAuc2V0T3B0cyh7XHJcbiAgICAgICAgICAgIGFmdGVyTG9hZE1haW5Db250ZW50OnJvb3QuaW5pdEVkaXRvcixcclxuICAgICAgICB9KVxyXG4qL1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgSW5pdCBsaXN0IHZpZXdcclxuICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuaW5pdEVkaXRvckJ1dHRvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRFZGl0b3JCdXR0b25zPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoJy5EYXNoYm9hcmRFZGl0YWJsZSBidXR0b24uZWRpdCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmVkaXQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICByb290LmluaXRFZGl0b3IoKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwRWRpdCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0blNhdmUnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5TYXZlJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgLyokKCcuYnRuR3JvdXBFZGl0JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuYnRuR3JvdXBNb2RpZnknKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHJvb3Quc2F2ZUN1c3RvbUNvbnRlbnQoKTtcclxuICAgICAgICAgICAgLy90aW55bWNlLmFjdGl2ZUVkaXRvci5pc0RpcnR5KCkgLy90cnVlIHdoZW4gbW9kaWZpZWRcclxuICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0bkNhbmNlbCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0bkNhbmNlbCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcblxyXG4gICAgICAgICAgICAkKCcuYnRuR3JvdXBFZGl0JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuYnRuR3JvdXBNb2RpZnknKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIHJvb3QucmVtb3ZlRWRpdG9yKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2F2ZUN1c3RvbUNvbnRlbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPSBuZXcgRm9ybURhdGEoJCgnLmRhc2hib2FyZEZvcm0nKVswXSk7XHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdG9yZWRfZGF0YScsdGlueW1jZS5hY3RpdmVFZGl0b3IuZ2V0Q29udGVudCgpKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScsJCgnZGl2LmRhc2hib2FyZEN1c3RvbUNvbnRlbnQnKS5kYXRhKCdpZCcpKTtcclxuICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ19tZXRob2QnLCdQVVQnKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiU2lla2VyZXMgbWVudMOpcyFcIiwnw5pqIHRhcnRhbG9tIGVsbWVudHZlLicgLCBUT0FTVF9TVEFUVVMuSU5GTyw1MDAwKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRUaW55bWNlPSBmdW5jdGlvbiAoKXtcclxuICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4udGlueS5jbG91ZC8xL25vLWFwaS1rZXkvdGlueW1jZS81L3RpbnltY2UubWluLmpzJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICByb290LmluaXRFZGl0b3IoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmVtb3ZlRWRpdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBpZih0eXBlb2YgdGlueW1jZSE9PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aW55bWNlLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5pdEVkaXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiB0aW55bWNlPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHJvb3QubG9hZFRpbnltY2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGlueW1jZS5pbml0KHtcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICdkaXYuZGFzaGJvYXJkQ3VzdG9tQ29udGVudCcsIC8vIFJlcGxhY2UgdGhpcyBDU1Mgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQgZm9yIFRpbnlNQ0VcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdodV9IVScsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6ICdjb2RlIHRhYmxlIGxpc3RzJyxcclxuICAgICAgICAgICAgdG9vbGJhcjogJyB1bmRvIHJlZG8gfCBmb3JtYXRzZWxlY3R8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgfCBpbmRlbnQgb3V0ZGVudCB8IGJ1bGxpc3QgbnVtbGlzdCB8IGNvZGUgfCB0YWJsZScsXHJcblxyXG4vKlxyXG4gICAgICAgICAgICB0b29sYmFyOiAnY3VzdG9tSW5zZXJ0QnV0dG9uIHwgdW5kbyByZWRvIHwgZm9ybWF0c2VsZWN0fCBib2xkIGl0YWxpYyB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IHwgaW5kZW50IG91dGRlbnQgfCBidWxsaXN0IG51bWxpc3QgfCBjb2RlIHwgdGFibGUnLFxyXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignY3VzdG9tSW5zZXJ0QnV0dG9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdNeSBCdXR0b24nLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudCgnJm5ic3A7PHN0cm9uZz5JdFxcJ3MgbXkgYnV0dG9uITwvc3Ryb25nPiZuYnNwOycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgfVxyXG4qL1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDQyxTQUFTLEdBQUMsWUFBWTtFQUN6QixJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsWUFBWTtJQUNqQ0MsV0FBVyxFQUFDLEtBQUs7SUFDakJDLE9BQU8sRUFBQyxLQUFLO0lBQ2JDLEdBQUcsRUFBQztNQUNBQyxNQUFNLEVBQUMsRUFBRTtNQUNUQyxLQUFLLEVBQUMsRUFB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\n//# sourceURL=webpack-internal:///./resources/js/admin/dashboard.js\n\n}"); - -/***/ }, - -/***/ "./resources/js/admin/priceList.js" -/*!*****************************************!*\ - !*** ./resources/js/admin/priceList.js ***! - \*****************************************/ -() { - -eval("{window.PriceListAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\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 /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n debug('PriceListAdmin constructor called');\n $.extend(Opts, options);\n };\n var errorRowPointer = null;\n var errorRowCount = 0;\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 $('.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 $('.statusError').removeClass('highlightedErrorRow');\n $('.priceListTableWrapper').scrollTop($($('.statusError')[errorRowPointer]).position().top);\n $($('.statusError')[errorRowPointer]).addClass('highlightedErrorRow');\n });\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\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 this.clickNewPriceListCallBack = function () {\n root.initViewDetails();\n };\n this.clickNewPriceList = function () {\n APP.loadMainContent(Opts.URL.create, root.clickNewPriceListCallBack);\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();\n //_token\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 /*\r\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 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);\n //buttons+=APP.datatableAddRowEditButton(0,arguments);\n return buttons;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: [\n //'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 /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\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);\r\n console.log(dt);\r\n console.log(node);\r\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 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 if ($('.supplierSelect').val().length < 1) {\n Toast.create(\"Hiba!\", 'Adjon meg beszállítót!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n var fileInput = $('#inputGroupPriceListFile');\n console.log(fileInput[0].files.length < 1);\n\n /* teszteles miatt kikapcsolva a fajl ellenorzes\r\n */\n if (!Opts.testFileMod) {\n console.log(fileInput[0].files.length < 1);\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 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 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 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 /*\r\n if(data.success==1){\r\n root.processCheckedPriceListResponse(data);\r\n }\r\n */\n },\n error: function error(data) {\n console.log(data.responseJSON);\n ajaxErrorFieldHandler(data.responseJSON.error);\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 /*\r\n Init list view\r\n */\n console.log('call list view Init');\n root.initViewList(options);\n };\n this.getOpts = function () {\n return Opts;\n };\n var priceListHasError = false;\n this.processCheckedPriceListResponse = function (responseData) {\n priceListHasError = false;\n root.processCheckedPriceListResponseRows(responseData.rows);\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 $('.uploadStatusRow').removeClass('d-none');\n $('.containerUploadedSpinner').addClass('d-none');\n };\n this.processCheckedPriceListResponseRows = function (responseRowsData) {\n console.log('processingRows');\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 if (rowData.changed) {\n root.processResponseRowChanged(rowData.changed, rowData.rowNum);\n }\n }\n };\n this.processResponseRowChanged = function (changedArray, rowNum) {\n if (changedArray.length < 1) {\n return;\n }\n console.log(changedArray);\n //fields error resz\n var trNode = $('tr[data-rownum=' + rowNum + ']');\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 this.processResponseRowErrors = function (errorArray, rowNum) {\n if (errorArray.length < 1) {\n return;\n }\n //general error resz\n console.log(errorArray);\n priceListHasError = true;\n\n //fields error resz\n if (typeof errorArray.fields == 'undefined') {\n return;\n }\n var trNode = $('tr[data-rownum=' + rowNum + ']');\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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQcmljZUxpc3RBZG1pbiIsIm9wdGlvbnMiLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsImFjdGl2ZSIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdEZpbGVNb2QiLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95IiwiUHJpY2VMaXN0Iiwicm9vdCIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiY29uc3RydWN0IiwiZGVidWciLCIkIiwiZXh0ZW5kIiwiZXJyb3JSb3dQb2ludGVyIiwiZXJyb3JSb3dDb3VudCIsImluaXRFcnJvck5hdmlnYXRpb25CdXR0b24iLCJsZW5ndGgiLCJvZmYiLCJvbiIsInJlbW92ZUNsYXNzIiwic2Nyb2xsVG9wIiwicG9zaXRpb24iLCJ0b3AiLCJhZGRDbGFzcyIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwidGV4dCIsIm5hbWUiLCJlbXB0eSIsImNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2siLCJpbml0Vmlld0RldGFpbHMiLCJjbGlja05ld1ByaWNlTGlzdCIsIkFQUCIsImxvYWRNYWluQ29udGVudCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJub2RlIiwiY3VycmVudFRhcmdldCIsInJvdyIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiZGF0YSIsImFqYXhEYXRhIiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsIl90b2tlbiIsInZhbCIsImFqYXgiLCJ1cmwiLCJtZXRob2QiLCJzdWNjZXNzIiwicmVtb3ZlIiwiZHJhdyIsImluaXRWaWV3TGlzdCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGFUYWJsZVByaWNlTGlzdCIsImxhbmd1YWdlIiwicmVuZGVyIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImFyZ3VtZW50cyIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImF0dHIiLCJpbml0IiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJkYXRlcGlja2VyIiwiZGF0ZUZvcm1hdCIsIm9uU2VsZWN0IiwiZGF0ZVRleHQiLCJjb25zb2xlIiwibG9nIiwicmVwbGFjZUFsbCIsIkZvcm1EYXRhIiwiVG9hc3QiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJhcHBlbmQiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2UiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImhpZGUiLCJnZXRPcHRzIiwicHJpY2VMaXN0SGFzRXJyb3IiLCJyZXNwb25zZURhdGEiLCJwcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cyIsInJvd3MiLCJzaG93IiwicmVzcG9uc2VSb3dzRGF0YSIsImtleSIsInRlbXBsYXRlRGF0YSIsIm9yaWdpbmFsRGF0YSIsInJvd051bSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwidWNGaXJzdCIsInN0YXR1cyIsInByb2Nlc3NSZXNwb25zZVJvd0Vycm9ycyIsImNoYW5nZWQiLCJwcm9jZXNzUmVzcG9uc2VSb3dDaGFuZ2VkIiwiY2hhbmdlZEFycmF5IiwidHJOb2RlIiwidGROb2RlIiwiZmluZCIsImNoYW5nZWRUeHROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwib2xkIiwiZXJyb3JBcnJheSIsImZpZWxkcyIsImVycm9yVHh0Tm9kZSJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJpY2VMaXN0LmpzP2NhZDYiXSwic291cmNlc0NvbnRlbnQiOlsid2luZG93LlByaWNlTGlzdEFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6XCIucHJpY2VMaXN0Rm9ybVwiLFxyXG4gICAgICAgIHRlc3RGaWxlTW9kOmZhbHNlLFxyXG4gICAgICAgIFVSTDp7XHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6JycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGxldCBQcmljZUxpc3QgPSB7fTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIGxldCBkYXRhVGFibGVDU1NTZWxlY3Rvcj1udWxsO1xyXG5cclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBkZWJ1ZygnUHJpY2VMaXN0QWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBlcnJvclJvd1BvaW50ZXI9bnVsbDtcclxuICAgIGxldCBlcnJvclJvd0NvdW50PTA7XHJcblxyXG4gICAgdGhpcy5pbml0RXJyb3JOYXZpZ2F0aW9uQnV0dG9uPWZ1bmN0aW9uICgpe1xyXG5cclxuICAgICAgICBlcnJvclJvd0NvdW50PSQoJy5zdGF0dXNFcnJvcicpLmxlbmd0aDtcclxuICAgICAgICBlcnJvclJvd1BvaW50ZXI9bnVsbDtcclxuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uUHJldkVycm9yIC5idXR0b25OZXh0RXJyb3InKS5vZmYoJ2NsaWNrJylcclxuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uUHJldkVycm9yJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgaWYoZXJyb3JSb3dQb2ludGVyPT1udWxsKXtcclxuICAgICAgICAgICAgICAgIGVycm9yUm93UG9pbnRlcj0wO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKGVycm9yUm93UG9pbnRlcj4wKXtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXItLTtcclxuICAgICAgICAgICAgICAgIH1lbHNle3JldHVybjt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJCgnLnN0YXR1c0Vycm9yJykucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlV3JhcHBlcicpLnNjcm9sbFRvcCgkKCQoJy5zdGF0dXNFcnJvcicpW2Vycm9yUm93UG9pbnRlcl0pLnBvc2l0aW9uKCkudG9wKTtcclxuICAgICAgICAgICAgJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWRFcnJvclJvdycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoJy5wcmljZUxpc3RGb3JtIC5idXR0b25OZXh0RXJyb3InKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLnByaWNlTGlzdEZvcm0gLmJ1dHRvbk5leHRFcnJvcicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGVycm9yUm93UG9pbnRlcj09bnVsbCl7XHJcbiAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXI9MDtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI8ZXJyb3JSb3dDb3VudC0xKXtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXIrKztcclxuICAgICAgICAgICAgICAgIH1lbHNle3JldHVybjt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJCgnLnN0YXR1c0Vycm9yJykucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlV3JhcHBlcicpLnNjcm9sbFRvcCgkKCQoJy5zdGF0dXNFcnJvcicpW2Vycm9yUm93UG9pbnRlcl0pLnBvc2l0aW9uKCkudG9wKTtcclxuICAgICAgICAgICAgJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWRFcnJvclJvdycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLnVwbG9hZFN0YXR1c1JvdycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuXHJcbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSA+IHRib2R5JykuZW1wdHkoKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXdQcmljZUxpc3RDYWxsQmFjaz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tOZXdQcmljZUxpc3Q9ZnVuY3Rpb24oKXtcclxuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2spO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgLy9fdG9rZW5cclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxyb3dEYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIG1ldGhvZDpcIkRFTEVURVwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnJlbW92ZSgpLmRyYXcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgfSk7XHJcbi8qXHJcbiovXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXdQcmljZUxpc3QsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICAgIEFQUC5kYXRhVGFibGVQcmljZUxpc3Q9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9idXR0b25zKz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAvLydjcmVhdGVTdGF0ZScsICdzYXZlZFN0YXRlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic3VwcGxpZXJOYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiYXZhaWxhYmxlXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5vdGVcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXJDbGljaycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0ZVBpY2tlckNsaWNrJykub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoJ3Nob3cnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKHtcclxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcclxuICAgICAgICAgICAgb25TZWxlY3Q6ZnVuY3Rpb24gKGRhdGVUZXh0KXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgICAgICQoJy5zZWxlY3RlZERhdGVUZXh0JykudGV4dChkYXRlVGV4dC5yZXBsYWNlQWxsKCctJywnLicpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwiYXZhaWxhYmxlRGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvbk5ld1VwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uTmV3VXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBpZigkKCcuc3VwcGxpZXJTZWxlY3QnKS52YWwoKS5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJIaWJhIVwiLCAnQWRqb24gbWVnIGJlc3rDoWxsw610w7N0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwUHJpY2VMaXN0RmlsZScpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpO1xyXG5cclxuICAgICAgICAgICAgLyogdGVzenRlbGVzIG1pYXR0IGtpa2FwY3NvbHZhIGEgZmFqbCBlbGxlbm9yemVzXHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGlmKCFPcHRzLnRlc3RGaWxlTW9kKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSk7XHJcbiAgICAgICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIkhpYmEhXCIsICdWw6FsbGFzem9uIGtpIGbDoWpsdCEnLCBUT0FTVF9TVEFUVVMuREFOR0VSLCAxMDAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcblxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25GaW5hbGl6YXRpb24nKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwUHJpY2VMaXN0RmlsZScpO1xyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaW5hbGl6YXRpb24nLDEpO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cgPi5jYW5GaW5pc2gnKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSB0Ym9keScpLmFwcGVuZCgnPHRyPjx0ZCBjb2xzcGFuPVwiOTlcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZm9udC1zaXplOiAyZW07XCI+IMOBcmxpc3TDoXQgZWxtZW50ZXR0w7xrLjwvdGQ+PC90cj4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1ByaWNlTGlzdEFkbWluIGluaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ09wdCBleHRlbmRlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKE9wdHMpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgSW5pdCBsaXN0IHZpZXdcclxuICAgICAgICAqL1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsIGxpc3QgdmlldyBJbml0Jyk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3Qob3B0aW9ucyk7XHJcblxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuICAgIGxldCBwcmljZUxpc3RIYXNFcnJvcj1mYWxzZTtcclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2U9ZnVuY3Rpb24gKHJlc3BvbnNlRGF0YSl7XHJcbiAgICAgICAgcHJpY2VMaXN0SGFzRXJyb3I9ZmFsc2U7XHJcbiAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cyhyZXNwb25zZURhdGEucm93cyk7XHJcbiAgICAgICAgaWYocHJpY2VMaXN0SGFzRXJyb3Ipe1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuaGlkZSgpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5zaG93KCk7XHJcbiAgICAgICAgICAgIHJvb3QuaW5pdEVycm9yTmF2aWdhdGlvbkJ1dHRvbigpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuc2hvdygpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2VSb3dzPWZ1bmN0aW9uIChyZXNwb25zZVJvd3NEYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJvY2Vzc2luZ1Jvd3MnKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcmVzcG9uc2VSb3dzRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YT1yZXNwb25zZVJvd3NEYXRhW2tleV07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZURhdGE9cm93RGF0YS5vcmlnaW5hbERhdGE7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5yb3dOdW09cm93RGF0YS5yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcmljZUxpc3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSx0ZW1wbGF0ZURhdGEpO1xyXG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgJCgndHJbZGF0YS1yb3dudW09Jytyb3dEYXRhLnJvd051bSsnXScpLmFkZENsYXNzKCdzdGF0dXMnKyQudWNGaXJzdChyb3dEYXRhLnN0YXR1cykpO1xyXG4gICAgICAgICAgICByb290LnByb2Nlc3NSZXNwb25zZVJvd0Vycm9ycyhyb3dEYXRhLmVycm9yLHJvd0RhdGEucm93TnVtKTtcclxuICAgICAgICAgICAgaWYocm93RGF0YS5jaGFuZ2VkKXtcclxuICAgICAgICAgICAgICAgIHJvb3QucHJvY2Vzc1Jlc3BvbnNlUm93Q2hhbmdlZChyb3dEYXRhLmNoYW5nZWQscm93RGF0YS5yb3dOdW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dDaGFuZ2VkPWZ1bmN0aW9uIChjaGFuZ2VkQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihjaGFuZ2VkQXJyYXkubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYW5nZWRBcnJheSk7XHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGxldCB0ck5vZGU9JCgndHJbZGF0YS1yb3dudW09Jytyb3dOdW0rJ10nKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gY2hhbmdlZEFycmF5KSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1wcmltYXJ5Jyk7XHJcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGNoYW5nZWRBcnJheVtrZXldLm9sZCkuYWRkQ2xhc3MoJ2ZpZWxkQ2hhbmdlZCcpO1xyXG4gICAgICAgICAgICB0ZE5vZGUuYXBwZW5kKGNoYW5nZWRUeHROb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dFcnJvcnM9ZnVuY3Rpb24gKGVycm9yQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihlcnJvckFycmF5Lmxlbmd0aDwxKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2dlbmVyYWwgZXJyb3IgcmVzelxyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yQXJyYXkpO1xyXG4gICAgICAgIHByaWNlTGlzdEhhc0Vycm9yID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGlmKHR5cGVvZiBlcnJvckFycmF5LmZpZWxkcyA9PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdHJOb2RlPSQoJ3RyW2RhdGEtcm93bnVtPScrcm93TnVtKyddJyk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGVycm9yQXJyYXkuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1kYW5nZXInKTtcclxuICAgICAgICAgICAgbGV0IGVycm9yVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGVycm9yQXJyYXkuZmllbGRzW2tleV0pLmFkZENsYXNzKCdmaWVsZEVycm9yJyk7XHJcbiAgICAgICAgICAgIHRkTm9kZS5hcHBlbmQoZXJyb3JUeHROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsY0FBYyxHQUFDLFVBQVVDLE9BQU8sRUFBQ0MsZ0JBQWdCLEVBQUU7RUFDdEQ7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsZ0JBQWdCO0lBQ3JDQyxXQUFXLEVBQUMsS0FBSztJQUNqQkMsR0FBRyxFQUFDO01BQ0FDLE1BQU0sRUFBQyxFQUFFO01BQ1RDLEtBQUssRUFBQyxFQUFFO01BQ1JDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLE9BQU8sRUFBQztJQUNaO0VBQ0osQ0FBQztFQUNELElBQUlDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDbEIsSUFBSUMsSUFBSSxHQUFHLElBQUk7RUFDZixJQUFJQyxvQkFBb0IsR0FBQyxJQUFJOztFQUk3QjtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFNBQVMsR0FBRyxVQUFVZCxPQUFPLEVBQUU7SUFDaENlLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQztJQUMxQ0MsQ0FBQyxDQUFDQyxNQUFNLENBQUNmLElBQUksRUFBRUYsT0FBTyxDQUFDO0VBQzNCLENBQUM7RUFFRCxJQUFJa0IsZUFBZSxHQUFDLElBQUk7RUFD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QztFQUVKLENBQUM7RUFDRCxJQUFJLENBQUNQLHdCQUF3QixHQUFDLFVBQVVXLFVBQVUsRUFBQ2pCLE1BQU0sRUFBQztJQUN0RCxJQUFHaUIsVUFBVSxDQUFDL0csTUFBTSxHQUFDLENBQUMsRUFBQztNQUNuQjtJQUNKO0lBQ0E7SUFDQW9FLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDMEMsVUFBVSxDQUFDO0lBQ3ZCMUIsaUJBQWlCLEdBQUcsSUFBSTs7SUFFeEI7SUFDQSxJQUFHLE9BQU8wQixVQUFVLENBQUNDLE1BQU0sSUFBRyxXQUFXLEVBQUM7TUFDdEM7SUFDSjtJQUNBLElBQUlSLE1BQU0sR0FBQzdHLENBQUMsQ0FBQyxpQkFBaUIsR0FBQ21HLE1BQU0sR0FBQyxHQUFHLENBQUM7SUFDMUMsS0FBSyxJQUFJSCxHQUFHLElBQUlvQixVQUFVLENBQUNDLE1BQU0sRUFBRTtNQUMvQixJQUFJUCxNQUFNLEdBQUNELE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLG1CQUFtQixHQUFDZixHQUFHLEdBQUMsSUFBSSxDQUFDO01BQ3BEYyxNQUFNLENBQUNsRyxRQUFRLENBQUMsV0FBVyxDQUFDO01BQzVCLElBQUkwRyxZQUFZLEdBQUN0SCxDQUFDLENBQUNpSCxRQUFRLENBQUNDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDbEcsSUFBSSxDQUFDb0csVUFBVSxDQUFDQyxNQUFNLENBQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDcEYsUUFBUSxDQUFDLFlBQVksQ0FBQztNQUN0R2tHLE1BQU0sQ0FBQzlCLE1BQU0sQ0FBQ3NDLFlBQVksQ0FBQztJQUMvQjtFQUNKLENBQUM7QUFDTCxDQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9wcmljZUxpc3QuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/priceList.js\n\n}"); - -/***/ }, - -/***/ "./resources/js/admin/priceListProfitCenter.js" -/*!*****************************************************!*\ - !*** ./resources/js/admin/priceListProfitCenter.js ***! - \*****************************************************/ -() { - -eval("{window.PriceListProfitCenterAdmin = function (options) {\n /*\r\n * Variables accessible\r\n * in the class\r\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 /*\r\n * Constructor\r\n */\n this.construct = function (options, SupplierItem) {\n console.log('PriceListProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n var changeParameter = {\n supplier: '',\n profitCenter: '',\n deliveryDate: ''\n /*\r\n supplier:26,\r\n profitCenter:49,\r\n deliveryDate:'2023-09-10',\r\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 if (needRefresh) {\n root.refreshDatatable();\n root.refreshProductGroup();\n root.setDatatableHeaderText('');\n }\n };\n this.setDatatableHeaderText = function (text) {\n $('.tableHeaderText').text(text);\n };\n this.getTreePathName = function (node) {\n var res = '';\n var items = $(node).parents('li').toArray();\n items.shift();\n items.reverse();\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 res += $(node).text();\n return res;\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 /*\r\n console.log(groupId);\r\n console.log(root.getTreePathName(this));\r\n */\n root.refreshDatatable();\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 this.refreshDatatable = function () {\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.changePriceListProfitCenterParameter = function (e, obj) {\n if (typeof obj == 'undefined') {\n obj = $(this);\n }\n var objName = obj.attr(\"name\");\n if (objName == 'supplier') {\n selectedProductGroup = null;\n }\n var data = '';\n if (obj.get(0).nodeName == 'SELECT') {\n if (obj.select2('data').length > 0) {\n data = obj.select2('data')[0].id;\n }\n ;\n } else {\n data = obj.val();\n }\n if (changeParameter[objName] != data) {\n changeParameter[objName] = data;\n root.checkRefreshPossible();\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);\n\n //$('input[name=\"deliveryDate\"]').on('change',changePriceListProfitCenterParameter);\n\n $(\".supplierSelect\").select2({\n maximumSelectionLength: 1\n });\n /*\r\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 });\n //root.initViewList();\n var table = root.getDatatables('');\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n /*\r\n /!*\r\n ----------------------------------------------------------\r\n Add event listener for opening and closing details\r\n *!/\r\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\r\n let tr = $(this).closest('tr');\r\n let row = table.row( tr );\r\n if ( row.child.isShown() ) {\r\n // This row is already open - close it\r\n row.child.hide();\r\n tr.removeClass('shown');\r\n }\r\n else {\r\n // Open this row\r\n row.child( root.productSelectDatatablesRowFormatter(row.data()) ).show();\r\n tr.addClass('shown');\r\n root.bindProductDetailsAction();\r\n }\r\n } );*/\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n $('td:contains(\"*\")').html('');\n $('td.details-control').removeClass('details-control');\n };\n var selectedProductGroup = null;\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 /*\r\n data.searchStr=dataTableSearchStr;\r\n data.krel=dataTableSearchKrel;\r\n data.groupId=selectedProductGroup;\r\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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQcmljZUxpc3RQcm9maXRDZW50ZXJBZG1pbiIsIm9wdGlvbnMiLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RNb2RlIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImdldFByb2R1Y3RHcm91cEhUTUwiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnN0cnVjdCIsIlN1cHBsaWVySXRlbSIsImNvbnNvbGUiLCJsb2ciLCIkIiwiZXh0ZW5kIiwiZ2V0T3B0cyIsImNoYW5nZVBhcmFtZXRlciIsInN1cHBsaWVyIiwicHJvZml0Q2VudGVyIiwiZGVsaXZlcnlEYXRlIiwiY2hlY2tSZWZyZXNoUG9zc2libGUiLCJuZWVkUmVmcmVzaCIsImVhY2giLCJuYW1lIiwiZGF0YSIsInJlZnJlc2hEYXRhdGFibGUiLCJyZWZyZXNoUHJvZHVjdEdyb3VwIiwic2V0RGF0YXRhYmxlSGVhZGVyVGV4dCIsInRleHQiLCJnZXRUcmVlUGF0aE5hbWUiLCJub2RlIiwicmVzIiwiaXRlbXMiLCJwYXJlbnRzIiwidG9BcnJheSIsInNoaWZ0IiwicmV2ZXJzZSIsIml0ZW0iLCJjaGlsZHJlbiIsImxlbmd0aCIsImJpbmRQcm9kdWN0R3JvdXBJdGVtIiwib2ZmIiwib24iLCJncm91cElkIiwic2VsZWN0ZWRQcm9kdWN0R3JvdXAiLCJhamF4RGF0YSIsImFqYXhVcmwiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsImZpbmQiLCJodG1sIiwiZXJyb3IiLCJhamF4RXJyb3JGaWVsZEhhbmRsZXIiLCJyZXNwb25zZUpTT04iLCJEYXRhVGFibGUiLCJyZWxvYWQiLCJjaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIiLCJlIiwib2JqIiwib2JqTmFtZSIsImF0dHIiLCJnZXQiLCJub2RlTmFtZSIsInNlbGVjdDIiLCJpZCIsInZhbCIsImluaXQiLCJDU1NTZWxlY3RvckZvcm0iLCJjbGljayIsImRhdGVwaWNrZXIiLCJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIiwiZGF0ZUZvcm1hdCIsIm1pbkRhdGUiLCJEYXRlIiwib25TZWxlY3QiLCJkYXRlVGV4dCIsInJlcGxhY2VBbGwiLCJpbnB1dCIsInRhYmxlIiwiZ2V0RGF0YXRhYmxlcyIsInByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQiLCJyZW1vdmVDbGFzcyIsIm9yZGVyVHlwZSIsImxhbmd1YWdlIiwic3VwcGxpZXJJZCIsInByb2ZpdENlbnRlcklkIiwiYnV0dG9ucyIsIkFQUCIsIk9yZGVyTW9kdWxlIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9wcmljZUxpc3RQcm9maXRDZW50ZXIuanM/MWNiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByaWNlTGlzdFByb2ZpdENlbnRlcicsXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcclxuICAgICAgICAgICAgZ2V0UHJvZHVjdEdyb3VwSFRNTDogJycsXHJcbiAgICAgICAgICAgIGluZGV4OiAnJyxcclxuICAgICAgICAgICAgc2hvdzogJycsXHJcbiAgICAgICAgICAgIGVkaXQ6ICcnLFxyXG4gICAgICAgICAgICBjcmVhdGU6ICcnLFxyXG4gICAgICAgICAgICBzdG9yZTogJycsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogJycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6ICcnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVRhYmxlOiB7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOiBbMSwgJ2FzYyddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkFmdGVySW5pdFZpZXdEZXRhaWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBTdXBwbGllckl0ZW0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgbGV0IGNoYW5nZVBhcmFtZXRlcj17XHJcbiAgICAgICAgc3VwcGxpZXI6JycsXHJcbiAgICAgICAgcHJvZml0Q2VudGVyOicnLFxyXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZTonJyxcclxuICAgICAgICAvKlxyXG4gICAgICAgIHN1cHBsaWVyOjI2LFxyXG4gICAgICAgIHByb2ZpdENlbnRlcjo0OSxcclxuICAgICAgICBkZWxpdmVyeURhdGU6JzIwMjMtMDktMTAnLFxyXG4gICAgICAgICovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tSZWZyZXNoUG9zc2libGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIG5lZWQgcGFyYW1ldGVyJyk7XHJcbiAgICAgICAgbGV0IG5lZWRSZWZyZXNoPXRydWU7XHJcbiAgICAgICAgJC5lYWNoKGNoYW5nZVBhcmFtZXRlcixmdW5jdGlvbiAobmFtZSxkYXRhKXtcclxuICAgICAgICAgICAgaWYoZGF0YT09PScnKXtcclxuICAgICAgICAgICAgICAgIG5lZWRSZWZyZXNoPWZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYobmVlZFJlZnJlc2gpe1xyXG4gICAgICAgICAgICByb290LnJlZnJlc2hEYXRhdGFibGUoKVxyXG4gICAgICAgICAgICByb290LnJlZnJlc2hQcm9kdWN0R3JvdXAoKTtcclxuICAgICAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCcnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERhdGF0YWJsZUhlYWRlclRleHQ9ZnVuY3Rpb24odGV4dCl7XHJcbiAgICAgICAgJCgnLnRhYmxlSGVhZGVyVGV4dCcpLnRleHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRUcmVlUGF0aE5hbWU9ZnVuY3Rpb24gKG5vZGUpe1xyXG4gICAgICAgIGxldCByZXM9Jyc7XHJcbiAgICAgICAgbGV0IGl0ZW1zPSQobm9kZSkucGFyZW50cygnbGknKS50b0FycmF5KCk7XHJcbiAgICAgICAgaXRlbXMuc2hpZnQoKTtcclxuICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIGluIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJlcys9JChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykudGV4dCgpKycvJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcys9JChub2RlKS50ZXh0KCk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRQcm9kdWN0R3JvdXBJdGVtPWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCgnLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub24oJ2NsaWNrJyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwSWQ9JCh0aGlzKS5kYXRhKCdpZCcpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9Z3JvdXBJZDtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dChyb290LmdldFRyZWVQYXRoTmFtZSh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZ3JvdXBJZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LmdldFRyZWVQYXRoTmFtZSh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgcm9vdC5yZWZyZXNoRGF0YXRhYmxlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hQcm9kdWN0R3JvdXA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXtcclxuICAgICAgICAgICAgJ3N1cHBsaWVySWQnOmNoYW5nZVBhcmFtZXRlci5zdXBwbGllcixcclxuICAgICAgICAgICAgJ2RlbGl2ZXJ5RGF0ZSc6Y2hhbmdlUGFyYW1ldGVyLmRlbGl2ZXJ5RGF0ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5nZXRQcm9kdWN0R3JvdXBIVE1MO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidHRVQnLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IHRydWUsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgJCgnLnNpZGViYXItbWVudSAucHJvZHVjdEdyb3VwJykuZmluZCgndWwnKS5odG1sKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5iaW5kUHJvZHVjdEdyb3VwSXRlbSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoRGF0YXRhYmxlPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcj1mdW5jdGlvbihlLG9iail7XHJcbiAgICAgICAgaWYodHlwZW9mIG9iaiA9PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb2JqPSQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvYmpOYW1lPW9iai5hdHRyKFwibmFtZVwiKTtcclxuICAgICAgICBpZihvYmpOYW1lPT0nc3VwcGxpZXInKXtcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9bnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGE9Jyc7XHJcbiAgICAgICAgaWYob2JqLmdldCgwKS5ub2RlTmFtZT09J1NFTEVDVCcpe1xyXG4gICAgICAgICAgICBpZihvYmouc2VsZWN0MignZGF0YScpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGRhdGE9b2JqLnNlbGVjdDIoJ2RhdGEnKVswXS5pZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZGF0YT1vYmoudmFsKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY2hhbmdlUGFyYW1ldGVyW29iak5hbWVdIT1kYXRhKXtcclxuICAgICAgICAgICAgY2hhbmdlUGFyYW1ldGVyW29iak5hbWVdPWRhdGE7XHJcbiAgICAgICAgICAgIHJvb3QuY2hlY2tSZWZyZXNoUG9zc2libGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zKXtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3I7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuZGF0ZVBpY2tlckNsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoJ3Nob3cnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnLnN1cHBsaWVyU2VsZWN0Jykub24oJ2NoYW5nZScscm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIpO1xyXG4gICAgICAgICQoJy5wcm9maXRDZW50ZXJTZWxlY3QnKS5vbignY2hhbmdlJyxyb290LmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcik7XHJcblxyXG4gICAgICAgIC8vJCgnaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLm9uKCdjaGFuZ2UnLGNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcik7XHJcblxyXG5cclxuICAgICAgICAkKFwiLnN1cHBsaWVyU2VsZWN0XCIpLnNlbGVjdDIoe1xyXG4gICAgICAgICAgICBtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgKi9cclxuICAgICAgICAkKFwiLnByb2ZpdENlbnRlclNlbGVjdFwiKS5zZWxlY3QyKHtcclxuICAgICAgICAgICAgbWF4aW11bVNlbGVjdGlvbkxlbmd0aDogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcih7XHJcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXHJcbiAgICAgICAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsb2JqKSB7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIobnVsbCwkKG9iai5pbnB1dCkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgICAgICBsZXQgdGFibGUgPSByb290LmdldERhdGF0YWJsZXMoJycpO1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2RyYXcuZHQnLHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCkuZGF0YVRhYmxlKCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgIC8hKlxyXG4gICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgIEFkZCBldmVudCBsaXN0ZW5lciBmb3Igb3BlbmluZyBhbmQgY2xvc2luZyBkZXRhaWxzXHJcbiAgICAgICAgICAgKiEvXHJcblxyXG4gICAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCB0Ym9keScpLm9uKCdjbGljaycsICd0ZC5kZXRhaWxzLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyID0gJCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgICAgICAgIGxldCByb3cgPSB0YWJsZS5yb3coIHRyICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICggcm93LmNoaWxkLmlzU2hvd24oKSApIHtcclxuICAgICAgICAgICAgICAgICAgLy8gVGhpcyByb3cgaXMgYWxyZWFkeSBvcGVuIC0gY2xvc2UgaXRcclxuICAgICAgICAgICAgICAgICAgcm93LmNoaWxkLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgdHIucmVtb3ZlQ2xhc3MoJ3Nob3duJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBPcGVuIHRoaXMgcm93XHJcbiAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZCggcm9vdC5wcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlcihyb3cuZGF0YSgpKSApLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgdHIuYWRkQ2xhc3MoJ3Nob3duJyk7XHJcbiAgICAgICAgICAgICAgICAgIHJvb3QuYmluZFByb2R1Y3REZXRhaWxzQWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSApOyovXHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQ9ZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAvL2RlYnVnKCAnVGFibGUgZHJhdyBjb21wbGV0ZTogJytuZXcgRGF0ZSgpLmdldFRpbWUoKSApO1xyXG5cclxuICAgICAgICAkKCd0ZDpjb250YWlucyhcIipcIiknKS5odG1sKCc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZS1maWxsXCI+PC9pPicpO1xyXG4gICAgICAgICQoJ3RkLmRldGFpbHMtY29udHJvbCcpLnJlbW92ZUNsYXNzKCdkZXRhaWxzLWNvbnRyb2wnKTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuICAgIGxldCBzZWxlY3RlZFByb2R1Y3RHcm91cD1udWxsO1xyXG5cclxuICAgIHRoaXMuZ2V0RGF0YXRhYmxlcz1mdW5jdGlvbiAob3JkZXJUeXBlKXtcclxuICAgICAgICBsZXQgdGFibGUgPSAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc2VhcmNoU3RyPWRhdGFUYWJsZVNlYXJjaFN0cjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmtyZWw9ZGF0YVRhYmxlU2VhcmNoS3JlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdyb3VwSWQ9c2VsZWN0ZWRQcm9kdWN0R3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnN1cHBsaWVySWQ9Y2hhbmdlUGFyYW1ldGVyLnN1cHBsaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHJvZml0Q2VudGVySWQ9Y2hhbmdlUGFyYW1ldGVyLnByb2ZpdENlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1jaGFuZ2VQYXJhbWV0ZXIuZGVsaXZlcnlEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZ3JvdXBJZD1zZWxlY3RlZFByb2R1Y3RHcm91cDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uczoge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IEFQUC5PcmRlck1vZHVsZS5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uRGVmcygpLFxyXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogQVBQLk9yZGVyTW9kdWxlLnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW4oKSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBbWzEsICdhc2MnXV0sXHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIHJldHVybiB0YWJsZTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsMEJBQTBCLEdBQUMsVUFBVUMsT0FBTyxFQUFFO0VBQ2pEO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUMsSUFBSSxHQUFHO0lBQ1BDLEtBQUssRUFBRSxJQUFJO0lBQ1hDLG9CQUFvQixFQUFFLGlDQUFpQztJQUN2REMsUUFBUSxFQUFFLEtBQUs7SUFDZkMsR0FBRyxFQUFFO01BQ0RDLG1CQUFtQixFQUFFLEVBQUU7TUFDdkJDLG1CQUFtQixFQUFFLEVBQUU7TUFDdkJDLEtBQUssRUFBRSxFQUFFO01BQ1RDLElBQUksRUFBRSxFQUFFO01BQ1JDLElBQUksRUFBRSxFQUFFO01BQ1JDLE1BQU0sRUFBRSxFQUFFO01BQ1ZDLEtBQUssRUFBRSxFQUFFO01BQ1RDLE1BQU0sRUFBRSxFQUFFO01BQ1ZDLE9BQU8sRUFBRTtJQUNiLENBQUM7SUFDREMsU0FBUyxFQUFFO01BQ1BDLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLO0lBQzdCLENBQUM7SUFDREMsc0JBQXNCLEVBQUUsU0FBeEJBLHNCQUFzQkEsQ0FBQSxFQUFjLENBQ3BDO0VBQ0osQ0FBQztFQUNELElBQUlDLElBQUksR0FBRyxJQUFJO0VBQ2Y7QUFD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QztJQUNGO0lBQ0EsSUFBSUMsS0FBSyxHQUFHM0UsSUFBSSxDQUFDNEUsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUNsQ3ZFLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDNkIsRUFBRSxDQUFFLFNBQVMsRUFBQ2xDLElBQUksQ0FBQzZFLDRCQUE0QixDQUFDLENBQUNoRixTQUFTLENBQUMsQ0FBQztJQUM5RjtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBR0ksQ0FBQztFQUNELElBQUksQ0FBQ2dGLDRCQUE0QixHQUFDLFVBQVV2QixDQUFDLEVBQUU7SUFDM0M7O0lBRUFqRCxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQzBDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQztJQUNyRTFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDeUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDO0VBSTFELENBQUM7RUFDRCxJQUFJMUMsb0JBQW9CLEdBQUMsSUFBSTtFQUU3QixJQUFJLENBQUN3QyxhQUFhLEdBQUMsVUFBVUcsU0FBUyxFQUFDO0lBQ25DLElBQUlKLEtBQUssR0FBR3RFLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDOEMsU0FBUyxDQUFFO01BQ3JENkIsUUFBUSxFQUFFO1FBQ054QyxHQUFHLEVBQUU7TUFDVCxDQUFDO01BRUQ7TUFDQSxNQUFNLEVBQUU7UUFDSkEsR0FBRyxFQUFDekQsSUFBSSxDQUFDSSxHQUFHLENBQUNDLG1CQUFtQjtRQUNoQzRCLElBQUksRUFBQyxTQUFMQSxJQUFJQSxDQUFXQSxLQUFJLEVBQUU7VUFDakI7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7VUFDb0JBLEtBQUksQ0FBQ2lFLFVBQVUsR0FBQ3pFLGVBQWUsQ0FBQ0MsUUFBUTtVQUN4Q08sS0FBSSxDQUFDa0UsY0FBYyxHQUFDMUUsZUFBZSxDQUFDRSxZQUFZO1VBQ2hETSxLQUFJLENBQUNMLFlBQVksR0FBQ0gsZUFBZSxDQUFDRyxZQUFZO1VBQzlDSyxLQUFJLENBQUNtQixPQUFPLEdBQUNDLG9CQUFvQjtRQUNyQztNQUNKLENBQUM7TUFDRCtDLE9BQU8sRUFBRTtRQUNMQSxPQUFPLEVBQUU7TUFDYixDQUFDO01BQ0QsWUFBWSxFQUFFQyxHQUFHLENBQUNDLFdBQVcsQ0FBQ0MsZ0NBQWdDLENBQUMsQ0FBQztNQUNoRSxTQUFTLEVBQUVGLEdBQUcsQ0FBQ0MsV0FBVyxDQUFDRSw0QkFBNEIsQ0FBQyxDQUFDO01BQ3pELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN4QixDQUFFLENBQUM7SUFDSCxPQUFPWixLQUFLO0VBQ2hCLENBQUM7QUFHTCxDQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9wcmljZUxpc3RQcm9maXRDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/priceListProfitCenter.js\n\n}"); - -/***/ }, - -/***/ "./resources/js/admin/product.js" -/*!***************************************!*\ - !*** ./resources/js/admin/product.js ***! - \***************************************/ -() { - -eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, 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 o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Product === 'undefined') {\n var _Product = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _Product(data, options) {\n var _this;\n _classCallCheck(this, _Product);\n _this = _callSuper(this, _Product, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Product constructor called');\n return _this;\n }\n _inherits(_Product, _DataModel);\n return _createClass(_Product);\n }(DataModel);\n ;\n window.Product = _Product;\n}\nwindow.ProductAdmin = function (options, ProductItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\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 /*\r\n * Constructor\r\n */\n this.construct = function (options, ProductItem) {\n console.log('ProductAdmin constructor called');\n $.extend(Opts, options);\n if (!ProductItem) {\n console.log('Product letre kellet hozni ');\n if (!APP.Product) {\n APP.Product = new window.Product();\n }\n root.Product = APP.Product;\n }\n };\n this.getOpts = function () {\n return Opts;\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 if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\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 APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\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 }\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 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, select.specialOfferSelect').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 supplierId: root.container.find('select.supplierSelect').val()\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 /*\r\n root.container.find('.selectedDateText').text(dateText);\r\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\r\n root.container.find(' input[name=\"deliveryDate\"]').val(dateText);\r\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 this.loadingResultContainer = function () {\n debug('clearResultContainer');\n debug(root.resultContainer);\n root.hideResultContainer();\n root.container.find('.containerLoading').show();\n /*\r\n let template=root.container.find('template[data-name=\"loading\"]').html()\r\n root.resultContainer.html(template);\r\n */\n };\n this.hideResultContainer = function () {\n debug('hide containerResult');\n debug(root.resultContainer);\n root.resultContainer.hide();\n };\n this.showResultContainer = function () {\n root.container.find('.containerLoading').hide();\n root.resultContainer.show();\n };\n this.init = function (options, ProductItem) {\n console.log('ProductAdmin init');\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProductItem) {\n root.Product = ProductItem;\n }\n root.dataTable = null;\n root.container = $(Opts.containerCssSelector);\n root.resultContainer = $(Opts.resultContainerSelector);\n root.initViewList();\n };\n this.initViewDetails = function (options, ProductItem) {\n debug('**call initViewDetails ');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\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 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 var FormSaveButton = $(CSSSelectorForm + ' button.FormSaveButton');\n FormSaveButton.off('click');\n FormSaveButton.on('click', root.clickSaveButton);\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n //root.Supplier.attachment.push(attachmentData);\n //attachmentData.rowNum=root.Supplier.attachment.length;\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);\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 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 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 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 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]);\n //return;\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');\n\n //ajaxData.append('_token', root.container.find('input[name=_token]').val());\n\n /*\r\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\r\n let indexKey = $(this).attr('name');\r\n if (ajaxData.get(indexKey)) {\r\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\r\n }\r\n });\r\n */\n return ajaxData;\n };\n this.getAjaxDataJson = function () {\n var ajaxData = root.formDataToDataObjectAPICall('.ProductListForm');\n console.log('======================');\n var _iterator = _createForOfIteratorHelper(ajaxData.entries()),\n _step;\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 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 if (!Array.isArray(object[key])) {\n object[key] = [object[key]];\n }\n object[key].push(value);\n });\n var ajaxDataJson = JSON.stringify(object);\n return ajaxDataJson;\n };\n this.requestProducts = function () {\n var ajaxUrl = Opts.URL.getDataTableContent;\n var ajaxMethod = 'GET';\n //token formdataba!\n debug(ajaxUrl);\n ajaxDataJson = root.getAjaxDataJson();\n console.log(ajaxDataJson);\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n console.log(dataTableCSSSelector);\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n /*\r\n if(typeof options['orderDirective']!='undefined'){\r\n orderDirective=options['orderDirective'];\r\n }\r\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 /*\r\n data: ajaxData,\r\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 }\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');\n //root.dataTable.ajax.reload();\n root.dataTable.draw();\n }\n };\n this.processResponse = function () {};\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall('.productForm');\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Product.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Product.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\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 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);\n // 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0IiwiX0RhdGFNb2RlbCIsIl9Qcm9kdWN0IiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJjb250YWN0IiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlByb2R1Y3RBZG1pbiIsIlByb2R1Y3RJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJjb250YWluZXIiLCJyZXN1bHRDb250YWluZXJTZWxlY3RvciIsInJlc3VsdENvbnRhaW5lciIsInRlc3RNb2RlIiwiZmlsdGVycyIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiYXR0YWNoRmlsZSIsImRldGFjaEZpbGUiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJkZWJ1ZyIsIm5vZGUiLCJjdXJyZW50VGFyZ2V0Iiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwicm93RGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0RldGFpbHMiLCJpbml0Vmlld0xpc3RPbGQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwidXJsIiwic2VydmVyU2lkZSIsIm9yZGVyYWJsZSIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJpbml0Vmlld0xpc3QiLCJmaW5kIiwic2VsZWN0MiIsInBsYWNlaG9sZGVyIiwiYWxsb3dDbGVhciIsImFqYXgiLCJnZXRQcm9kdWN0U2VhcmNoIiwiZGF0YVR5cGUiLCJwYXJhbXMiLCJ0ZXJtIiwicGFnZSIsInN1cHBsaWVySWQiLCJ2YWwiLCJjYWNoZSIsImRhdGVwaWNrZXIiLCJkYXRlRm9ybWF0Iiwib25TZWxlY3QiLCJkYXRlVGV4dCIsIm9iaiIsImlucHV0IiwiY2xpY2siLCJidXR0b24iLCJvZmYiLCJvbiIsImxvYWRpbmdSZXN1bHRDb250YWluZXIiLCJyZXF1ZXN0UHJvZHVjdHMiLCJzZXRWaXNpYmxlRmlsdGVycyIsImhpZGVSZXN1bHRDb250YWluZXIiLCJoaWRlIiwic2hvd1Jlc3VsdENvbnRhaW5lciIsImluaXQiLCJDU1NTZWxlY3RvckZvcm0iLCJwaWN0dXJlIiwicGljVXJsIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJhdHRyIiwic3BlY2lmaWNhdGlvbiIsImRvY1VybCIsImFkZEF0dGFjaG1lbnQiLCJGb3JtU2F2ZUJ1dHRvbiIsImNsaWNrU2F2ZUJ1dHRvbiIsImF0dGFjaG1lbnREYXRhIiwicm93TnVtIiwiZGF0ZVN0ciIsIkRhdGUiLCJ1cGRhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJkYXRlIiwibGluayIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiVG9hc3QiLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJ0eXBlSW5kZXgiLCJ0eXBlTmFtZSIsImMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJhamF4RGF0YSIsIkZvcm1EYXRhIiwiZWFjaCIsImdldEFsbCIsImtleSIsInZhbHVlIiwiZ2V0QWpheERhdGFKc29uIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJlbnRyaWVzIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJwYWlyIiwiZXJyIiwiZSIsImYiLCJvYmplY3QiLCJmb3JFYWNoIiwiUmVmbGVjdCIsImhhcyIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJhamF4RGF0YUpzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiYWpheE1ldGhvZCIsImQiLCJkcmF3IiwicHJvY2Vzc1Jlc3BvbnNlIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiZ2V0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9wcm9kdWN0LmpzPzliNTIiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIFByb2R1Y3Q9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBQcm9kdWN0IGV4dGVuZHMgRGF0YU1vZGVse1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuUHJvZHVjdD1Qcm9kdWN0O1xyXG59XHJcbndpbmRvdy5Qcm9kdWN0QWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByb2R1Y3QnLFxyXG4gICAgICAgIGNvbnRhaW5lcjpudWxsLFxyXG4gICAgICAgIHJlc3VsdENvbnRhaW5lclNlbGVjdG9yOicuY29udGFpbmVyUHJvZHVjdCAuY29udGFpbmVyUmVzdWx0JyxcclxuICAgICAgICByZXN1bHRDb250YWluZXI6bnVsbCxcclxuXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIGZpbHRlcnM6e1xyXG4gICAgICAgICAgICBQcm9kdWN0Ont9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgVVJMOiB7XHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6ICcnLFxyXG4gICAgICAgICAgICBpbmRleDogJycsXHJcbiAgICAgICAgICAgIHNob3c6ICcnLFxyXG4gICAgICAgICAgICBlZGl0OiAnJyxcclxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcclxuICAgICAgICAgICAgc3RvcmU6ICcnLFxyXG4gICAgICAgICAgICB1cGRhdGU6ICcnLFxyXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcclxuICAgICAgICAgICAgYXR0YWNoRmlsZTogJycsXHJcbiAgICAgICAgICAgIGRldGFjaEZpbGU6ICcnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVRhYmxlOiB7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOiBbMSwgJ2FzYyddLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgUHJvZHVjdCA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XHJcbiAgICBsZXQgZGF0YVRhYmxlPW51bGw7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZHVjdEl0ZW0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGlmICghUHJvZHVjdEl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZiAoIUFQUC5Qcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICBBUFAuUHJvZHVjdCA9IG5ldyB3aW5kb3cuUHJvZHVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuUHJvZHVjdCA9IEFQUC5Qcm9kdWN0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdFZpZXdMaXN0T2xkID0gZnVuY3Rpb24gKG9wdGlvbnM9e30pIHtcclxuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgaW5pY2lhbGl6YXRpb24nKTtcclxuICAgICAgICBkYXRhVGFibGVDU1NTZWxlY3Rvcj1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGFUYWJsZSc7IC8vXHJcblxyXG4gICAgICAgIGxldCBjb2xOdW09JChkYXRhVGFibGVDU1NTZWxlY3RvcisnIHRoZWFkIHRoJykubGVuZ3RoOyAvL2J1dHRvbnMgaW5zZXJ0IHBvc2l0aW9uIG5lZWRcclxuICAgICAgICBBUFAuc2V0T3B0cyh7XHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBvcmRlckRpcmVjdGl2ZT1PcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZTtcclxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcclxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNlcnZlclNpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0xLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICdleGNlbCcsJ3BkZicsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGV4dDogJ1ByaW50IGN1cnJlbnQgcGFnZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1ByaW50OiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIn0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJwcm9kdWN0R3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwic3VwcGxpZXJOYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdFZpZXdMaXN0PWZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2luaXRWaWV3U2VhcmNoIGluaWNpYWxpemF0aW9uIDEnKTtcclxuXHJcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnN1cHBsaWVyU2VsZWN0LCBzZWxlY3QucHJvZml0Q2VudGVyU2VsZWN0LCBzZWxlY3QucHJvZHVjdEdyb3VwU2VsZWN0LCBzZWxlY3QucHJvZHVjZXJTZWxlY3QsIHNlbGVjdC5ob29yZXljYU5hbWVzU2VsZWN0LCBzZWxlY3Quc3BlY2lhbE9mZmVyU2VsZWN0Jykuc2VsZWN0MigpO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5wcm9kdWN0U2VsZWN0Jykuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcclxuICAgICAgICAgICAgYWxsb3dDbGVhcjogdHJ1ZSxcclxuICAgICAgICAgICAgYWpheDoge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5nZXRQcm9kdWN0U2VhcmNoLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGZ1bmN0aW9uKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm06IHBhcmFtcy50ZXJtIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYXJhbXMucGFnZSB8fCAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllcklkOiByb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3Quc3VwcGxpZXJTZWxlY3QnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY2FjaGU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyRnJvbSwgLmRhdGVQaWNrZXJUbycpLmRhdGVwaWNrZXIoe1xyXG4gICAgICAgICAgICBkYXRlRm9ybWF0OiAneXktbW0tZGQnLFxyXG5cclxuICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCxvYmopIHtcclxuICAgICAgICAgICAgICAgIGRlYnVnKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcob2JqLmlucHV0KTtcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dC5yZXBsYWNlQWxsKCctJywgJy4nKSArICcuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgLy9yb290LmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcihudWxsLCQob2JqLmlucHV0KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmRhdGVQaWNrZXJDbGljaycpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGRlYnVnKCQodGhpcykuZGF0YSgnYWN0aW9uJykpO1xyXG4gICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiJyskKHRoaXMpLmRhdGEoJ2FjdGlvbicpKydcIl0nKS5kYXRlcGlja2VyKCdzaG93Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGJ1dHRvbj1yb290LmNvbnRhaW5lci5maW5kKCcuRm9ybVNlbmRCdXR0b24nKTtcclxuICAgICAgICBidXR0b24ub2ZmKCdjbGljaycpO1xyXG4gICAgICAgIGJ1dHRvbi5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBkZWJ1ZyAoJ0Zvcm1TZW5kQnV0dG9uIGNsaWNrJyk7XHJcbiAgICAgICAgICAgIHJvb3QubG9hZGluZ1Jlc3VsdENvbnRhaW5lcigpO1xyXG4gICAgICAgICAgICByb290LnJlcXVlc3RQcm9kdWN0cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3Quc2V0VmlzaWJsZUZpbHRlcnMoJ1Byb2R1Y3QnKTtcclxuXHJcbiAgICAgICAgZGVidWcoJ2luaXRWaWV3U2VhcmNoIGVuZCcpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmxvYWRpbmdSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcoJ2NsZWFyUmVzdWx0Q29udGFpbmVyJyk7XHJcbiAgICAgICAgZGVidWcocm9vdC5yZXN1bHRDb250YWluZXIpO1xyXG4gICAgICAgIHJvb3QuaGlkZVJlc3VsdENvbnRhaW5lcigpO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5jb250YWluZXJMb2FkaW5nJykuc2hvdygpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPXJvb3QuY29udGFpbmVyLmZpbmQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cImxvYWRpbmdcIl0nKS5odG1sKClcclxuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lci5odG1sKHRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICovXHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZGVSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcoJ2hpZGUgY29udGFpbmVyUmVzdWx0Jyk7XHJcbiAgICAgICAgZGVidWcocm9vdC5yZXN1bHRDb250YWluZXIpO1xyXG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmhpZGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd1Jlc3VsdENvbnRhaW5lcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLmhpZGUoKTtcclxuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lci5zaG93KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFByb2R1Y3RJdGVtKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGluaXQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYoT3B0cy50ZXN0TW9kZSl7XHJcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKFByb2R1Y3RJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5Qcm9kdWN0PVByb2R1Y3RJdGVtXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3QuZGF0YVRhYmxlPW51bGw7XHJcbiAgICAgICAgcm9vdC5jb250YWluZXI9JChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKTtcclxuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lcj0kKE9wdHMucmVzdWx0Q29udGFpbmVyU2VsZWN0b3IpO1xyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdMaXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XHJcbiAgICAgICAgZGVidWcoJyoqY2FsbCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcclxuICAgICAgICBpZihyb290LlByb2R1Y3QucGljdHVyZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKi8vLy8vLy8vLy8vLy8vLy8vLyoqKioqKioqKioqKioqKionKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnBpY3R1cmUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xyXG4gICAgICAgICAgICBsZXQgcGljVXJsPXJvb3QuUHJvZHVjdC5waWN0dXJlLlB1YmxpY1VybCsnLycrcm9vdC5Qcm9kdWN0LnBpY3R1cmUuZmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBpY1VybCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlUHJvZHVjdCcpKTtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbWcuaW1hZ2VQcm9kdWN0JykuYXR0cignc3JjJyxwaWNVcmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbil7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKi8vLy8vLy8vLy8vLy8vLy8vLyoqKioqKioqKioqKioqKionKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xyXG4gICAgICAgICAgICBsZXQgZG9jVXJsPXJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLlB1YmxpY1VybCsnLycrcm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24uZmlsZW5hbWU7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBGb3JtU2F2ZUJ1dHRvbj0kKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpO1xyXG4gICAgICAgIEZvcm1TYXZlQnV0dG9uLm9mZignY2xpY2snKTtcclxuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRBdHRhY2htZW50PWZ1bmN0aW9uIChhdHRhY2htZW50RGF0YSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9kdWN0Rm9ybSc7XHJcbiAgICAgICAgLy9yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQucHVzaChhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgLy9hdHRhY2htZW50RGF0YS5yb3dOdW09cm9vdC5TdXBwbGllci5hdHRhY2htZW50Lmxlbmd0aDtcclxuICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09MTtcclxuICAgICAgICBsZXQgZGF0ZVN0cj1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS51cGRhdGVkX2F0KTtcclxuICAgICAgICBkYXRlU3RyPWRhdGVTdHIudG9Mb2NhbGVTdHJpbmcoJ2h1LUhVJywge30pO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLmRhdGU9ZGF0ZVN0cjtcclxuICAgICAgICBhdHRhY2htZW50RGF0YS5saW5rPWF0dGFjaG1lbnREYXRhLlB1YmxpY1VybCsnLycrYXR0YWNobWVudERhdGEuZmlsZW5hbWU7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2R1Y3RBdHRhY2htZW50VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgLy9yb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRWaXNpYmxlRmlsdGVycz1mdW5jdGlvbiAodHlwZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFZpc2libGVGaWx0ZXJzJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coT3B0cy5maWx0ZXJzW3R5cGVdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XHJcbiAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnZGl2W2NsYXNzKj1cImZpbHRlclwiXScpLmhpZGUoKVxyXG4gICAgICAgIGZvciAoY29uc3QgdHlwZUluZGV4IGluIE9wdHMuZmlsdGVyc1t0eXBlXSkge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZT1PcHRzLmZpbHRlcnNbdHlwZV1bdHlwZUluZGV4XTtcclxuICAgICAgICAgICAgZGVidWcodHlwZU5hbWUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHJvb3QuY29udGFpbmVyKS5maW5kKCcuZmlsdGVyXycrdHlwZU5hbWUpKTtcclxuICAgICAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnLmZpbHRlcl8nK3R5cGVOYW1lKS5zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jPWZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjIGNhbGxlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZChDU1NTZWxlY3RvckZvcm0pKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoQ1NTU2VsZWN0b3JGb3JtKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJytDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAvL3JldHVybjtcclxuICAgICAgICBsZXQgYWpheERhdGEgPSBuZXcgRm9ybURhdGEocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScrQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllcnNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnc3VwcGxpZXInKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJzW10nLCB2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2ZpdENlbnRlcicpO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3RHcm91cCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cHNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjdEdyb3VwJyk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RzW10nLCB2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y3QnKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWNlcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y2Vyc1tdJywgdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWNlcicpO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ2hvb3JleWNhTmFtZScpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2hvb3JleWNhTmFtZXNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnaG9vcmV5Y2FOYW1lJyk7XHJcblxyXG4gICAgICAgIC8vYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleEtleSA9ICQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhEYXRhLmdldChpbmRleEtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksIGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csIFwiXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgKi9cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRBamF4RGF0YUpzb249ZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcuUHJvZHVjdExpc3RGb3JtJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT0nKTtcclxuICAgICAgICBmb3IgKGxldCBwYWlyIG9mIGFqYXhEYXRhLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYWlyWzBdKyAnLCAnICsgcGFpclsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2JqZWN0ID0ge307XHJcbiAgICAgICAgYWpheERhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcclxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKG9iamVjdCwga2V5KSl7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KG9iamVjdFtrZXldKSl7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IFtvYmplY3Rba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JqZWN0W2tleV0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhSnNvbiA9IEpTT04uc3RyaW5naWZ5KG9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhSnNvbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcXVlc3RQcm9kdWN0cz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudDtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD0nR0VUJztcclxuICAgICAgICAvL3Rva2VuIGZvcm1kYXRhYmEhXHJcbiAgICAgICAgZGVidWcoYWpheFVybCk7XHJcblxyXG4gICAgICAgIGFqYXhEYXRhSnNvbj1yb290LmdldEFqYXhEYXRhSnNvbigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhEYXRhSnNvbik7XHJcblxyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuICAgICAgICBjb25zb2xlLmxvZyhkYXRhVGFibGVDU1NTZWxlY3RvciApO1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG5cclxuICAgICAgICBpZighcm9vdC5kYXRhVGFibGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggTmluY3MgRGF0YXRhYmxlJyk7XHJcbiAgICAgICAgICAgIHJvb3QuZGF0YVRhYmxlPVxyXG4gICAgICAgICAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcclxuICAgICAgICAgICAgICAgICAgICBcImFqYXhcIjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0qKioqKiotLS0tJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvbigpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhEYXRhOiBBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFqYXhNZXRob2RcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhamF4RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICB9ICxcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInByb2R1Y3RHcm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zaG93UmVzdWx0Q29udGFpbmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkcmF3Q2FsbGJhY2snKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ICk7XHJcblxyXG5cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1hYWFhYWFhYWFhYWFhYWFhYWFhYIHZhbiBEYXRhdGFibGUnKTtcclxuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xyXG4gICAgICAgICAgICByb290LmRhdGFUYWJsZS5kcmF3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2Nlc3NSZXNwb25zZT1mdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcclxuXHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcucHJvZHVjdEZvcm0nKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcclxuICAgICAgICBpZihyb290LlByb2R1Y3QuaWQpe1xyXG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlByb2R1Y3QuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcclxuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIC8vJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IE9wdHMudG9rZW5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHRlcm3DqWsgZWxtZW50dmVcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLE9BQU8sS0FBRyxXQUFXLEVBQUM7RUFBQSxJQUN0QkEsUUFBTywwQkFBQUMsVUFBQTtJQUVUO0FBQ1I7QUFDQTtJQUNRLFNBQUFDLFNBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBQyxlQUFBLE9BQUFKLFFBQUE7TUFDdkJHLEtBQUEsR0FBQUUsVUFBQSxPQUFBTCxRQUFBLEdBQU1DLElBQUksRUFBQ0MsT0FBTztNQUNsQixJQUFHLE9BQU9DLEtBQUEsQ0FBS0csT0FBTyxLQUFJLFdBQVcsRUFBQztRQUNsQ0gsS0FBQSxDQUFLRyxPQUFPLEdBQUMsRUFBRTtNQUNuQjtNQUNBQyxPQUFP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\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n\n}"); - -/***/ }, - -/***/ "./resources/js/admin/profitCenter.js" -/*!********************************************!*\ - !*** ./resources/js/admin/profitCenter.js ***! - \********************************************/ -() { - -eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof DataModelProfitCenter === 'undefined') {\n var _DataModelProfitCenter = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _DataModelProfitCenter(data, options) {\n var _this;\n _classCallCheck(this, _DataModelProfitCenter);\n _this = _callSuper(this, _DataModelProfitCenter, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.address === \"undefined\") {\n _this.address = [];\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(_DataModelProfitCenter, _DataModel);\n return _createClass(_DataModelProfitCenter);\n }(DataModel);\n ;\n window.DataModelProfitCenter = _DataModelProfitCenter;\n}\nwindow.ProfitCenterAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\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 /*\r\n * Constructor\r\n */\n this.construct = function (options, ProfitCenterItem) {\n console.log('ProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n if (!ProfitCenterItem) {\n console.log('ProfitCentert letre kellet hozni ');\n if (!APP.ProfitCenter) {\n APP.ProfitCenter = new window.DataModelProfitCenter();\n }\n root.ProfitCenter = APP.ProfitCenter;\n }\n CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n };\n this.getOpts = function () {\n return Opts;\n };\n this.getData = function () {\n return root.ProfitCenter;\n };\n this.init = function (options, ProfitCenterItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProfitCenterItem) {\n root.ProfitCenter = ProfitCenterItem;\n }\n root.initViewList();\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.ProfitCenter = new window.DataModelProfitCenter();\n root.initViewDetails();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n /**\r\n * Contact Popup setup\r\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 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 /**\r\n * Address Popup setup\r\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 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 /**\r\n *\r\n */\n\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons({\n onChange: function onChange(value, node) {\n debug(value);\n debug(node);\n /*\r\n if(node==='profitCenterMultiAddress'){\r\n if(value==1){\r\n $('.containerMultiAddress').removeClass('d-none');\r\n }else{\r\n $('.containerMultiAddress').addClass('d-none');\r\n }\r\n }\r\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 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 /*\r\n $(\"input[name=logoFile]\").change(function(){\r\n setImageFromLocal(this,Opts.containerCssSelector+' .imageLogo');\r\n });\r\n */\n\n //Opts.onAfterInitViewDetails();\n debug('**end initViewDetails ');\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\r\n debug(root.ProfitCenter[this]);\r\n debug(CSSSelectorForm+' input[name='+this+']');\r\n debug($(CSSSelectorForm+' input[name='+this+']'));\r\n */\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.ProfitCenter[this]);\n }\n });\n if (typeof root.ProfitCenter['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.ProfitCenter.note);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.ProfitCenter.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.ProfitCenter.hooreycaDataActive + ']').click();\n if (typeof root.ProfitCenter['logoFile'] != 'undefined' && root.ProfitCenter['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.ProfitCenter['logoFile']);\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);\r\n if(root.ProfitCenter.address.length>0){\r\n $(CSSSelectorForm+' *[data-toggle=addressEqual][data-title=0]').click();\r\n if(root.ProfitCenter.address.length>1){\r\n $(CSSSelectorForm+' *[data-toggle=multiAddress][data-title=1]').click();\r\n }\r\n }\r\n */\n var supplier = [];\n $.each(root.ProfitCenter.suppliers, function () {\n supplier.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n $.each(supplier, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n };\n this.resetContactTable = function () {\n $(CSSSelectorForm + ' .contactTable tbody tr').remove();\n root.renderContact();\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 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 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 return false;\n });\n console.log(root.ProfitCenter.contact);\n row.remove();\n root.resetContactTable();\n };\n this.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n this.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\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 this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\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 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 /***************\r\n *\r\n * Address function\r\n *\r\n */\n this.resetAddressTable = function () {\n $(CSSSelectorForm + ' .addressTable tbody tr').remove();\n root.renderAddress();\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 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 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 this.getAddressPopupWorkflow = function () {\n return addressPopupWorkflow;\n };\n this.setAddressPopupWorkflow = function (status) {\n addressPopupWorkflow = status;\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 this.addressAction = function (itemData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getAddressPopupWorkflow() == 'new') {\n root.addAddress(itemData);\n } else if (root.getAddressPopupWorkflow() == 'edit') {\n root.editAddress(itemData.id, itemData);\n }\n };\n this.addAddress = function (ItemData) {\n /*\r\n fel kell venni a sorba\r\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 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 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 APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\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 }\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 /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\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);\r\n console.log(dt);\r\n console.log(node);\r\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 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 if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n /*\r\n console.log(Opts.URL);\r\n console.log(ajaxUrl);\r\n */\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\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 this.clickSaveButton = function (event) {\n debug('Save clicked');\n event.preventDefault();\n debug(CSSSelectorForm);\n debug($(CSSSelectorForm));\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.ProfitCenter.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.ProfitCenter.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n /*\r\n debug(ajaxUrl);\r\n debug(ajaxMethod);\r\n debug(ajaxData.entries());\r\n for (var pair of ajaxData.entries()) {\r\n console.log(pair[0]+ ', ' + pair[1]);\r\n }\r\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 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 this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n /*\r\n $.each(ajaxData.getAll('productGroup'),function(key,value){\r\n ajaxData.append('productGroup[]',value);\r\n })\r\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 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 this.construct(options, ProfitCenterItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhTW9kZWxQcm9maXRDZW50ZXIiLCJfRGF0YU1vZGVsIiwiX0RhdGFNb2RlbFByb2ZpdENlbnRlciIsImRhdGEiLCJvcHRpb25zIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiY29udGFjdCIsImFkZHJlc3MiLCJjb25zb2xlIiwibG9nIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiUHJvZml0Q2VudGVyQWRtaW4iLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwiUHJvZml0Q2VudGVyIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiYWRkcmVzc1BvcHVwV29ya2Zsb3ciLCJDU1NTZWxlY3RvckZvcm0iLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZ2V0RGF0YSIsImluaXQiLCJpbml0Vmlld0xpc3QiLCJjbGlja05ldyIsImRlYnVnIiwibG9hZE1haW5Db250ZW50IiwiY2xpY2tOZXdDYWxsQmFjayIsImluaXRWaWV3RGV0YWlscyIsIlN1cHBsaWVySXRlbSIsIkNvbnRhY3RQb3BVcCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJBZGRyZXNzUG9wVXAiLCJhZGRyZXNzQWN0aW9uIiwicmVuZGVyQWRkcmVzcyIsInNldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwidG9vbHRpcCIsImluaXRSYWRpb0J1dHRvbnMiLCJvbkNoYW5nZSIsInZhbHVlIiwibm9kZSIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJpbnB1dG1hc2siLCJvbmluY29tcGxldGUiLCJ2YWwiLCJsZW5ndGgiLCJvbmNvbXBsZXRlIiwib25jbGVhcmVkIiwib2ZmIiwib24iLCJjbGlja1NhdmVCdXR0b24iLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJlYWNoIiwibm90ZSIsImNhblNlZSIsImNsaWNrIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwiYXR0ciIsImFkZHJlc3NFcXVhbCIsIm11bHRpQWRkcmVzcyIsInN1cHBsaWVyIiwic3VwcGxpZXJzIiwicHVzaCIsImVzY2FwZVNlbGVjdG9yIiwicHJvcCIsInJlc2V0Q29udGFjdFRhYmxlIiwicmVtb3ZlIiwicm93TnVtIiwiY29udGFjdERhdGEiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJyZW5kZXIiLCJNdXN0YWNoZSIsImFwcGVuZCIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiZXZlbnQiLCJyb3ciLCJjbG9zZXN0IiwiaWQiLCJmaW5kIiwiZmlsdGVyIiwiYXJyIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJzdGF0dXMiLCJsb2FkRGF0YSIsImFkZENvbnRhY3QiLCJlZGl0Q29udGFjdCIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwiVE9BU1RfU1RBVFVTIiwiU1VDQ0VTUyIsIm5ld0NvbnRhY3RzIiwicmVzZXRBZGRyZXNzVGFibGUiLCJpdGVtRGF0YSIsImJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24iLCJhZGRyZXNzRGVsZXRlQ2xpY2siLCJhZGRyZXNzRWRpdENsaWNrIiwiZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3ciLCJhZGRBZGRyZXNzIiwiZWRpdEFkZHJlc3MiLCJJdGVtRGF0YSIsInN0cmVldCIsIm5ld0l0ZW0iLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsIkRhdGFUYWJsZSIsImxhbmd1YWdlIiwidXJsIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJsYXRpbmlzZSIsImF1dG9QcmludCIsInRleHQiLCJjbGFzc05hbWUiLCJhcGkiLCJjb25maWciLCJhY3Rpb24iLCJlIiwiZHQiLCJkcmF3Q2FsbGJhY2siLCJzZXR0aW5ncyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsImN1cnJlbnRUYXJnZXQiLCJwYXJlbnRzIiwicm93RGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIiwiYWpheERhdGEiLCJfdG9rZW4iLCJhamF4IiwibWV0aG9kIiwic3VjY2VzcyIsImRyYXciLCJwcmV2ZW50RGVmYXVsdCIsImNoZWNrVmFsaWRpdHkiLCJzdG9wUHJvcGFnYXRpb24iLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJhamF4TWV0aG9kIiwidGFibGUiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwiZ2V0IiwiRm9ybURhdGEiLCJnZXRBbGwiLCJrZXkiLCJpbmRleEtleSIsInNldCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzP2NkMTUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIERhdGFNb2RlbFByb2ZpdENlbnRlcj09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIERhdGFNb2RlbFByb2ZpdENlbnRlciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmFkZHJlc3MgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3M9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyPURhdGFNb2RlbFByb2ZpdENlbnRlcjtcclxufVxyXG5cclxud2luZG93LlByb2ZpdENlbnRlckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByb2ZpdENlbnRlcicsXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcclxuICAgICAgICAgICAgaW5kZXg6ICcnLFxyXG4gICAgICAgICAgICBzaG93OiAnJyxcclxuICAgICAgICAgICAgZWRpdDogJycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXHJcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcclxuICAgICAgICAgICAgdXBkYXRlOiAnJyxcclxuICAgICAgICAgICAgZGVzdHJveTogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhVGFibGU6IHtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbGV0IFByb2ZpdENlbnRlciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XHJcbiAgICBsZXQgYWRkcmVzc1BvcHVwV29ya2Zsb3cgPSAnbmV3JztcclxuICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jyc7XHJcbiAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9Jyc7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9maXRDZW50ZXJBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBpZiAoIVByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2ZpdENlbnRlcnQgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZiAoIUFQUC5Qcm9maXRDZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXIgPSBuZXcgd2luZG93LkRhdGFNb2RlbFByb2ZpdENlbnRlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuUHJvZml0Q2VudGVyID0gQVBQLlByb2ZpdENlbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZml0Q2VudGVyRm9ybSc7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXREYXRhPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiByb290LlByb2ZpdENlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQ9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihQcm9maXRDZW50ZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXI9UHJvZml0Q2VudGVySXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrTmV3Jyk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld0NhbGxCYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyPW5ldyB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyKCk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhY3QgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFkZHJlc3MgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkFkZHJlc3NQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcCA9IG5ldyB3aW5kb3cuQWRkcmVzc1BvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuYWRkcmVzc0FjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQWRkcmVzcygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0FkZHJlc3MnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgICQoJ1tkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIl0nKS50b29sdGlwKCk7XHJcbiAgICAgICAgaW5pdFJhZGlvQnV0dG9ucyh7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUsbm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZGVidWcodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9kZT09PSdwcm9maXRDZW50ZXJNdWx0aUFkZHJlc3MnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyTXVsdGlBZGRyZXNzJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZihub2RlPT09J2FkZHJlc3NFcXVhbCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3NTd2l0Y2gnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzU3dpdGNoJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybStcIiA6aW5wdXRcIikuaW5wdXRtYXNrKHtcclxuICAgICAgICAgICAgXCJvbmluY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpKTtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA+IDAgfHwgJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJvbmNsZWFyZWRcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsZWFyZWQnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xyXG4vKlxyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG4qL1xyXG5cclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgICAgIGRlYnVnKCcqKmVuZCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9maXRDZW50ZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ2VtYWlsJywncG9zdENvZGUnLCdjaXR5Jywnc3RyZWV0JywncGhvbmUnLCdtb2JpbCdcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBkZWJ1Zyh0aGlzKTsgLy9hbGFwYWRhdG9rIGJlYWxsaXRhc2FuYWsgbG9nb2xhc2FcclxuICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XHJcbi8qIC8vYWxhcGFkYXRvayBiZWFsbGl0YXNhbmFrIGxvZ29sYXNhXHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyhyb290LlByb2ZpdENlbnRlclt0aGlzXSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpKTtcclxuKi9cclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5Qcm9maXRDZW50ZXJbdGhpc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwocm9vdC5Qcm9maXRDZW50ZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5jYW5TZWUrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5ob29yZXljYURhdGFBY3RpdmUrJ10nKS5jbGljaygpO1xyXG5cclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuUHJvZml0Q2VudGVyWydsb2dvRmlsZSddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1hZGRyZXNzRXF1YWxdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5hZGRyZXNzRXF1YWwrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1tdWx0aUFkZHJlc3NdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5tdWx0aUFkZHJlc3MrJ10nKS5jbGljaygpO1xyXG4gICAgICAgIC8qZGVidWcocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGgpO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9YWRkcmVzc0VxdWFsXVtkYXRhLXRpdGxlPTBdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg+MSl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9bXVsdGlBZGRyZXNzXVtkYXRhLXRpdGxlPTFdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIGxldCBzdXBwbGllcj1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuc3VwcGxpZXJzLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc3VwcGxpZXIucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XHJcbiAgICAgICAgJC5lYWNoKHN1cHBsaWVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdmFsdWU9XCInKyQuZXNjYXBlU2VsZWN0b3IodGhpcykrJ1wiXScpLnByb3AoIFwiY2hlY2tlZFwiLCB0cnVlICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWN0VGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlbmRlckNvbnRhY3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyQ29udGFjdD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0NvbnRhY3RzJyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3REZWxldGVDbGljayk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRWRpdCcpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0JykuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdEVkaXRDbGljayk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250YWN0RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0PXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdCk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBjb250YWN0UG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ2VkaXQnKTtcclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmxvYWREYXRhKGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGFjdEFjdGlvbj1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQ29udGFjdChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlByb2ZpdENlbnRlci5jb250YWN0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiS2FwY3NvbGF0IHRhcnTDsyBob3p6w6FhZHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKGluZGV4KXtcclxuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xyXG4gICAgICAgICAgICAgICAgbmV3Q29udGFjdHMucHVzaChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbmV3Q29udGFjdHMucHVzaCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3Q9bmV3Q29udGFjdHM7XHJcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkthcGNzb2xhdCBhZGF0YWkgbcOzZG9zw610dmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKlxyXG4gICAgICpcclxuICAgICAqIEFkZHJlc3MgZnVuY3Rpb25cclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzZXRBZGRyZXNzVGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYWRkcmVzc1RhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBZGRyZXNzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckFkZHJlc3M9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBZGRyZXNzJyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2FkZHJlc3MnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGl0ZW1EYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGl0ZW1EYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJBZGRyZXNzVGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgZGVidWcoaXRlbURhdGEpO1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxpdGVtRGF0YSk7XHJcbiAgICAgICAgICAgICQoJy5hZGRyZXNzVGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgcm93TnVtKys7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5iaW5kQWRkcmVzc0NsaWNrQWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQWRkcmVzc0NsaWNrQWN0aW9uID1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25EZWxldGUnKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRGVsZXRlJykuYmluZCgnY2xpY2snLHJvb3QuYWRkcmVzc0RlbGV0ZUNsaWNrKTtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25FZGl0JykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkVkaXQnKS5iaW5kKCdjbGljaycscm9vdC5hZGRyZXNzRWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZHJlc3NEZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1cImFkZHJlc3NJZFtdXCJdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3M9cm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT1pZCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MpO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0QWRkcmVzc1RhYmxlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEFkZHJlc3NQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBhZGRyZXNzUG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHRoaXMuc2V0QWRkcmVzc1BvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgYWRkcmVzc1BvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmFkZHJlc3NFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9XCJhZGRyZXNzSWRbXVwiXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LnNldEFkZHJlc3NQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XHJcbiAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5sb2FkRGF0YShpZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZHJlc3NBY3Rpb249ZnVuY3Rpb24gKGl0ZW1EYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZEFkZHJlc3MoaXRlbURhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0QWRkcmVzcyhpdGVtRGF0YS5pZCxpdGVtRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRBZGRyZXNzPWZ1bmN0aW9uIChJdGVtRGF0YSl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5wdXNoKEl0ZW1EYXRhKTtcclxuICAgICAgICBJdGVtRGF0YS5yb3dOdW09cm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckFkZHJlc3NUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLEl0ZW1EYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hZGRyZXNzVGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkPDrW0gaG96esOhYWR2YSFcIiwgSXRlbURhdGEuc3RyZWV0K1wiIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRBZGRyZXNzPWZ1bmN0aW9uIChpZCxpdGVtRGF0YSl7XHJcblxyXG4gICAgICAgIGxldCBuZXdJdGVtPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdhZGRyZXNzJyksZnVuY3Rpb24gKGluZGV4KXtcclxuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xyXG4gICAgICAgICAgICAgICAgbmV3SXRlbS5wdXNoKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPW5ld0l0ZW07XHJcbiAgICAgICAgcm9vdC5yZXNldEFkZHJlc3NUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcImPDrW0gYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBpdGVtRGF0YS5zdHJlZXQrXCIgbcOzZG9zw610dmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIC8vXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGRlYnVnKCdkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaycpO1xyXG4gICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICBsZXQgcm93RGF0YT1yb3cuZGF0YSgpO1xyXG4gICAgICAgIGxldCBhY3Rpb25OYW1lPSdkYXRhdGFibGVSb3dBY3Rpb24nK25vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdFthY3Rpb25OYW1lXShyb3dEYXRhLG5vZGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhPcHRzLlVSTCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhamF4VXJsKTtcclxuICAgICAgICAqL1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj0kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgbWV0aG9kOlwiREVMRVRFXCIsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICByb3cucmVtb3ZlKCkuZHJhdygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGRlYnVnKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgZGVidWcoJChDU1NTZWxlY3RvckZvcm0pKTtcclxuICAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0pWzBdLmNoZWNrVmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBmYWxzZScpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gb2snKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9maXRDZW50ZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG4vKlxyXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xyXG4gICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgY29uc29sZS50YWJsZShPYmplY3QuZnJvbUVudHJpZXMoYWpheERhdGEpKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIGJlc3rDoWxsbMOtdMOzIGVsbWVudHZlXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuLypcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsIFByb2ZpdENlbnRlckl0ZW0pO1xyXG5cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLHFCQUFxQixLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3BDQSxzQkFBcUIsMEJBQUFDLFVBQUE7SUFFdkI7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsdUJBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBQyxlQUFBLE9BQUFKLHNCQUFBO01BQ3ZCRyxLQUFBLEdBQUFFLFVBQUEsT0FBQUwsc0JBQUEsR0FBTUMsSUFBSSxFQUFDQyxPQUFPO01BQ2xCLElBQUcsT0FBT0MsS0FBQSxDQUFLRyxPQUFPLEtBQUksV0FBVyxFQUFDO1FBQ2xDSCxLQUFBLENBQUtHLE9BQU8sR0FBQyxFQUFFO01BQ25CO01BQ0EsSUFBRyxPQUFPSCxLQUFBLENBQUtJLE9BQU8sS0FBSSxXQUFXLEVBQUM7UUFDbENKLEtBQUEsQ0FBS0ksT0FBTyxHQUFDLEVBQUU7TUFDbkI7TUFDQUMsT0FBTyxDQUFDQyxHQUFHLENBQUNOLEtBQUEsQ0FBS08sV0FBVyxDQUFDQyxJQUFJLEdBQUMscUJBQXFCLENBQUM7TUFBQyxPQUFBUixLQUFBO0lBQzdEO0lBQUNTLFNBQUEsQ0FBQVosc0JBQUEsRUFBQUQsVUFBQTtJQUFBLE9BQUFjLFlBQUEsQ0FBQWIsc0JBQUE7RUFBQSxFQWQrQmMsU0FBUztFQWU1QztFQUNEQyxNQUFNLENBQUNqQixxQkFBcUIsR0FBQ0Esc0JBQXFCO0FBQ3REO0FBRUFpQixNQUFNLENBQUNDLGlCQUFpQixHQUFDLFVBQVVkLE9BQU8sRUFBQ2UsZ0JBQWdCLEVBQUU7RUFDekQ7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJQyxJQUFJLEdBQUc7SUFDUEMsS0FBSyxFQUFFLElBQUk7SUFDWEMsb0JBQW9CLEVBQUUsd0JBQXdCO0lBQzlDQyxRQUFRLEVBQUUsS0FBSztJQUNmQyxHQUFHLEVBQUU7TUFDREMsbUJBQW1CLEVBQUUsRUFBRTtNQUN2QkMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsSUFBSSxFQUFFLEVBQUU7TUFDUkMsSUFBSSxFQUFFLEVBQUU7TUFDUkMsTUFBTSxFQUFFLEVBQUU7TUFDVkMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsTUFBTSxFQUFFLEVBQUU7TUFDVkMsT0FBTyxFQUFFO0lBQ2IsQ0FBQztJQUNEQyxTQUFTLEVBQUU7TUFDUEMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUs7SUFDN0IsQ0FBQztJQUNEQyxzQkFBc0IsRUFBRSxTQUF4QkEsc0JBQXNCQSxDQUFBLEVBQWMsQ0FDcEM7RUFDSixDQUFDO0VBQ0QsSUFBSUMsWUFBWSxHQUFHLENBQUMsQ0FBQztFQUNyQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtFQUNmLElBQUlDLG9CQUFvQixHQUFHLEtBQUs7RUFDaEMsSUFBSUMsb0JBQW9CLEdBQUcsS0FBSztFQUNoQyxJQUFJQyxlQUFlLEdBQUMsRUFBRTtFQUN0QixJQUFJQyxvQkFBb0IsR0FBQyxFQUFFO0VBQzNCO0FBQ0o7QUFDQTtFQUNJLElBQUksQ0FBQ0MsU0FBUyxHQUFHLFVBQVV0QyxPQUFPLEVBQUVlLGdCQUFnQixFQUFFO0lBQ2xEVCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQztJQUNuRGdDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDeEIsSUFBSSxFQUFFaEIsT0FBTyxDQUFDO0lBQ3ZCLElBQUksQ0FBQ2UsZ0JBQWdCLEVBQUU7TUFDbkJULE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG1DQUFtQyxDQUFDO01BQ2hELElBQUksQ0FBQ2tDLEdBQUcsQ0FBQ1QsWUFBWSxFQUFFO1FBQ25CUyxHQUFHLENBQUNULFlBQVksR0FBRyxJQUFJbkIsTUFBTSxDQUFDakIscUJBQXFCLENBQUMsQ0FBQztNQUN6RDtNQUNBcUMsSUFBSSxDQUFDRCxZQUFZLEdBQUdTLEdBQUcsQ0FBQ1QsWUFBWTtJQUN4QztJQUNBSSxlQUFlLEdBQUNwQixJQUFJLENBQUNFLG9CQUFvQixHQUFDLG9CQUFvQjtFQUNsRSxDQUFDO0VBQ0QsSUFBSSxDQUFDd0IsT0FBTyxHQUFHLFlBQVk7SUFDdkIsT0FBTzFCLElBQUk7RUFDZixDQUFDO0VBQ0QsSUFBSSxDQUFDMkIsT0FBTyxHQUFDLFlBQVc7SUFDcEIsT0FBT1YsSUFBSSxDQUFDRCxZQUFZO0VBQzVCLENBQUM7RUFFRCxJQUFJLENBQUNZLElBQUksR0FBQyxVQUFVNUMsT0FBTyxFQUFDZSxnQkFBZ0IsRUFBQztJQUN6Q3dCLENBQUMsQ0FBQ0MsTUFBTSxDQUFDeEIsSUFBSSxFQUFFaEIsT0FBTyxDQUFDO0lBRXZCLElBQUdnQixJQUFJLENBQUNHLFFBQVEsRUFBQztNQUNiLE9BQU9jLElBQUksQ0FBQ2QsUUFBUSxDQUFDLENBQUM7SUFDMUI7SUFDQSxJQUFHSixnQkFBZ0IsRUFBQztNQUNoQmtCLElBQUksQ0FBQ0QsWUFBWSxHQUFDakIsZ0JBQWdCO0lBQ3RDO0lBQ0FrQixJQUFJLENBQUNZLFlBQVksQ0FBQyxDQUFDO0VBQ3ZCLENBQUM7RUFDRCxJQUFJLENBQUNDLFFBQVEsR0FBQyxZQUFZO0lBQ3RCQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ2pCTixHQUFHLENBQUNPLGVBQWUsQ0FBQ2hDLElBQUksQ0FBQ0ksR0FBRyxDQUFDSyxNQUFNLEVBQUNRLElBQUksQ0FBQ2dCLGdCQUFnQixDQUFDO0VBQzlELENBQUM7RUFFRCxJQUFJLENBQUNBLGdCQUFnQixHQUFDLFlBQVk7SUFDOUJGLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDcEJkLElBQUksQ0FBQ0QsWUFBWSxHQUFDLElBQUluQixNQUFNLENBQUNqQixxQkFBcUIsQ0FBQyxDQUFDO0lBQ3BEcUMsSUFBSSxDQUFDaUIsZUFBZSxDQUFDLENBQUM7RUFDMUIsQ0FBQztFQUVELElBQUksQ0FBQ0EsZUFBZSxHQUFDLFVBQVVsRCxPQUFPLEVBQUNtRCxZQUFZLEVBQUM7SUFDaERKLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztJQUNoQztBQUNSO0FBQ0E7SUFDUSxJQUFHLENBQUNOLEdBQUcsQ0FBQ1csWUFBWSxFQUFDO01BQ2pCOUMsT0FBTyxDQUFDQyxHQUFHLENBQUMsd0JBQXdCLENBQUM7TUFDckNrQyxHQUFHLENBQUNXLFlBQVksR0FBRyxJQUFJdkMsTUFBTSxDQUFDdUMsWUFBWSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxNQUFJO01BQ0Q5QyxPQUFPLENBQUNDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztJQUM1QztJQUNBa0MsR0FBRyxDQUFDVyxZQUFZLENBQUNSLElBQUksQ0FBQztNQUNsQlMsTUFBTSxFQUFDLElBQUk7TUFDWEMsV0FBVyxFQUFDckIsSUFBSSxDQUFDc0I7SUFDckIsQ0FBQyxDQUFDO0lBQ0Z0QixJQUFJLENBQUN1QixhQUFhLENBQUMsQ0FBQztJQUNwQmpCLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLG9CQUFvQixDQUFDLENBQUNxQixJQUFJLENBQUMsT0FBTyxFQUFDLFlBQVc7TUFDNURoQixHQUFHLENBQUMzQixpQkFBaUIsQ0FBQzRDLHVCQUF1QixDQUFDLEtBQUssQ0FBQztNQUNwRGpCLEdBQUcsQ0FBQ1csWUFBWSxDQUFDTyxTQUFTLENBQUMsQ0FBQztNQUM1QmxCLEdBQUcsQ0FBQ1csWUFBWSxDQUFDN0IsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBQ0Y7QUFDUjtBQUNBO0lBQ1EsSUFBRyxDQUFDa0IsR0FBRyxDQUFDbUIsWUFBWSxFQUFDO01BQ2pCdEQsT0FBTyxDQUFDQyxHQUFHLENBQUMsd0JBQXdCLENBQUM7TUFDckNrQyxHQUFHLENBQUNtQixZQUFZLEdBQUcsSUFBSS9DLE1BQU0sQ0FBQytDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELENBQUMsTUFBSTtNQUNEdEQsT0FBTyxDQUFDQyxHQUFHLENBQUMsMkJBQTJCLENBQUM7SUFDNUM7SUFDQWtDLEdBQUcsQ0FBQ21CLFlBQVksQ0FBQ2hCLElBQUksQ0FBQztNQUNsQlMsTUFBTSxFQUFDLElBQUk7TUFDWEMsV0FBVyxFQUFDckIsSUFBSSxDQUFDNEI7SUFDckIsQ0FBQyxDQUFDO0lBQ0Y1QixJQUFJLENBQUM2QixhQUFhLENBQUMsQ0FBQztJQUNwQnZCLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLG9CQUFvQixDQUFDLENBQUNxQixJQUFJLENBQUMsT0FBTyxFQUFDLFlBQVc7TUFDNURoQixHQUFHLENBQUMzQixpQkFBaUIsQ0FBQ2lELHVCQUF1QixDQUFDLEtBQUssQ0FBQztNQUNwRHRCLEdBQUcsQ0FBQ21CLFlBQVksQ0FBQ0QsU0FBUyxDQUFDLENBQUM7TUFDNUJsQixHQUFHLENBQUNtQixZQUFZLENBQUNyQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFDRjtBQUNSO0FBQ0E7O0lBRVFnQixDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQ3lCLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDQyxnQkFBZ0IsQ0FBQztNQUNiQyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBWUMsS0FBSyxFQUFDQyxJQUFJLEVBQUU7UUFDNUJyQixLQUFLLENBQUNvQixLQUFLLENBQUM7UUFDWnBCLEtBQUssQ0FBQ3FCLElBQUksQ0FBQztRQUNYO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7UUFHZ0IsSUFBR0EsSUFBSSxLQUFHLGNBQWMsRUFBQztVQUNyQixJQUFHRCxLQUFLLElBQUUsQ0FBQyxFQUFDO1lBQ1I1QixDQUFDLENBQUNILGVBQWUsR0FBQyx5QkFBeUIsQ0FBQyxDQUFDaUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMvRDlCLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLCtCQUErQixDQUFDLENBQUNpQyxRQUFRLENBQUMsUUFBUSxDQUFDO1VBQ3pFLENBQUMsTUFBSTtZQUNEOUIsQ0FBQyxDQUFDSCxlQUFlLEdBQUMseUJBQXlCLENBQUMsQ0FBQ2tDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDbEUvQixDQUFDLENBQUNILGVBQWUsR0FBQywrQkFBK0IsQ0FBQyxDQUFDa0MsV0FBVyxDQUFDLFFBQVEsQ0FBQztVQUM1RTtRQUNKO01BRUo7SUFDSixDQUFDLENBQUM7SUFDRi9CLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLFNBQVMsQ0FBQyxDQUFDbUMsU0FBUyxDQUFDO01BQ25DLGNBQWMsRUFBRSxTQUFoQkMsWUFBY0EsQ0FBQSxFQUFjO1FBQ3hCbEUsT0FBTyxDQUFDQyxHQUFHLENBQUNnQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsSUFBSXdDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ2tDLEdBQUcsQ0FBQyxDQUFDLENBQUNDLE1BQU0sR0FBRyxDQUFDLElBQUluQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1VBQy9Ed0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOEIsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNsQztNQUNKLENBQUM7TUFDRCxZQUFZLEVBQUUsU0FBZE0sVUFBWUEsQ0FBQSxFQUFjO1FBQ3RCcEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDK0IsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUNqQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzhCLFFBQVEsQ0FBQyxVQUFVLENBQUM7TUFDaEMsQ0FBQztNQUNELFdBQVcsRUFBRSxTQUFiTyxTQUFXQSxDQUFBLEVBQWM7UUFDckJ0RSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDdEJnQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMrQixXQUFXLENBQUMsWUFBWSxDQUFDO01BQ3JDO0lBQ0osQ0FBQyxDQUFDO0lBRUYvQixDQUFDLENBQUNILGVBQWUsR0FBQyx3QkFBd0IsQ0FBQyxDQUFDeUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUN4RHRDLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLHdCQUF3QixDQUFDLENBQUMwQyxFQUFFLENBQUMsT0FBTyxFQUFDN0MsSUFBSSxDQUFDOEMsZUFBZSxDQUFDO0lBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRVE7SUFDQWhDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztFQUNuQyxDQUFDO0VBQ0QsSUFBSSxDQUFDaUMsa0JBQWtCLEdBQUMsWUFBWTtJQUNoQ2pDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztJQUMzQixJQUFJWCxlQUFlLEdBQUNwQixJQUFJLENBQUNFLG9CQUFvQixHQUFDLG9CQUFvQjtJQUNsRSxJQUFJK0QsU0FBUyxHQUFDLENBQ1YsTUFBTSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQzVCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsT0FBTyxDQUNyRDtJQUNEMUMsQ0FBQyxDQUFDMkMsSUFBSSxDQUFDRCxTQUFTLEVBQUMsWUFBWTtNQUN6QjtNQUNBLElBQUcsT0FBT2hELElBQUksQ0FBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFFLFdBQVcsRUFBQztRQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO1FBQ2dCTyxDQUFDLENBQUNILGVBQWUsR0FBQyxjQUFjLEdBQUMsSUFBSSxHQUFDLEdBQUcsQ0FBQyxDQUFDcUMsR0FBRyxDQUFDeEMsSUFBSSxDQUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDM0U7SUFDSixDQUFDLENBQUM7SUFDRixJQUFHLE9BQU9DLElBQUksQ0FBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFFLFdBQVcsRUFBQztNQUM3Q08sQ0FBQyxDQUFDSCxlQUFlLEdBQUMsc0JBQXNCLENBQUMsQ0FBQ3FDLEdBQUcsQ0FBQ3hDLElBQUksQ0FBQ0QsWUFBWSxDQUFDbUQsSUFBSSxDQUFDO0lBQ3pFO0lBQ0E1QyxDQUFDLENBQUNILGVBQWUsR0FBQyxvQ0FBb0MsR0FBQ0gsSUFBSSxDQUFDRCxZQUFZLENBQUNvRCxNQUFNLEdBQUMsR0FBRyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDO0lBQzVGOUMsQ0FBQyxDQUFDSCxlQUFlLEdBQUMsZ0RBQWdELEdBQUNILElBQUksQ0FBQ0QsWUFBWSxDQUFDc0Qsa0JBQWtCLEdBQUMsR0FBRyxDQUFDLENBQUNELEtBQUssQ0FBQyxDQUFDO0lBRXBILElBQUcsT0FBT3BELElBQUksQ0FBQ0QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFFLFdBQVcsSUFBS0MsSUFBSSxDQUFDRCxZQUFZLENBQUMsVUFBVSxDQUFFLEVBQUM7TUFDcEZPLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLGdCQUFnQixDQUFDLENBQUNtRCxJQUFJLENBQUMsS0FBSyxFQUFDdEQsSUFBSSxDQUFDRCxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakY7SUFFQU8sQ0FBQyxDQUFDSCxlQUFlLEdBQUMsMENBQTBDLEdBQUNILElBQUksQ0FBQ0QsWUFBWSxDQUFDd0QsWUFBWSxHQUFDLEdBQUcsQ0FBQyxDQUFDSCxLQUFLLENBQUMsQ0FBQztJQUN4RzlDLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLDBDQUEwQyxHQUFDSCxJQUFJLENBQUNELFlBQVksQ0FBQ3lELFlBQVksR0FBQyxHQUFHLENBQUMsQ0FBQ0osS0FBSyxDQUFDLENBQUM7SUFDeEc7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNRLElBQUlLLFFBQVEsR0FBQyxFQUFFO0lBQ2ZuRCxDQUFDLENBQUMyQyxJQUFJLENBQUNqRCxJQUFJLENBQUNELFlBQVksQ0FBQzJELFNBQVMsRUFBQyxZQUFZO01BQzNDRCxRQUFRLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUNuRixJQUFJLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0lBQ0Y7SUFDQThCLENBQUMsQ0FBQzJDLElBQUksQ0FBQ1EsUUFBUSxFQUFDLFlBQVk7TUFDeEJuRCxDQUFDLENBQUMsZUFBZSxHQUFDQSxDQUFDLENBQUNzRCxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUMsSUFBSSxDQUFDLENBQUNDLElBQUksQ0FBRSxTQUFTLEVBQUUsSUFBSyxDQUFDO0lBQzFFLENBQUMsQ0FBQztFQUVOLENBQUM7RUFFRCxJQUFJLENBQUNDLGlCQUFpQixHQUFDLFlBQVc7SUFDOUJ4RCxDQUFDLENBQUNILGVBQWUsR0FBQyx5QkFBeUIsQ0FBQyxDQUFDNEQsTUFBTSxDQUFDLENBQUM7SUFDckQvRCxJQUFJLENBQUN1QixhQUFhLENBQUMsQ0FBQztFQUN4QixDQUFDO0VBQ0QsSUFBSSxDQUFDQSxhQUFhLEdBQUMsWUFBVztJQUMxQixJQUFJeUMsTUFBTSxHQUFDLENBQUM7SUFDWjNGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0lBQ2hDZ0MsQ0FBQyxDQUFDMkMsSUFBSSxDQUFDakQsSUFBSSxDQUFDRCxZQUFZLENBQUNXLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBQyxZQUFXO01BQ25ELElBQUl1RCxXQUFXLEdBQUMsSUFBSTtNQUNwQkEsV0FBVyxDQUFDRCxNQUFNLEdBQUNBLE1BQU07TUFDekIsSUFBSUUsUUFBUSxHQUFDNUQsQ0FBQyxDQUFDLG1EQUFtRCxDQUFDLENBQUM2RCxJQUFJLENBQUMsQ0FBQztNQUMxRSxJQUFJQyxNQUFNLEdBQUNDLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDRixRQUFRLEVBQUNELFdBQVcsQ0FBQztNQUNoRDNELENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDZ0UsTUFBTSxDQUFDRixNQUFNLENBQUM7TUFDdkNKLE1BQU0sRUFBRTtJQUNaLENBQUMsQ0FBQztJQUNGaEUsSUFBSSxDQUFDdUUsc0JBQXNCLENBQUMsQ0FBQztFQUNqQyxDQUFDO0VBRUQsSUFBSSxDQUFDQSxzQkFBc0IsR0FBRSxZQUFXO0lBQ3BDakUsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUNrRSxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ2hEbEUsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUNrQixJQUFJLENBQUMsT0FBTyxFQUFDeEIsSUFBSSxDQUFDeUUsa0JBQWtCLENBQUM7SUFDdEVuRSxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQ2tFLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDOUNsRSxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQ2tCLElBQUksQ0FBQyxPQUFPLEVBQUN4QixJQUFJLENBQUMwRSxnQkFBZ0IsQ0FBQztFQUV0RSxDQUFDO0VBQ0QsSUFBSSxDQUFDRCxrQkFBa0IsR0FBQyxVQUFVRSxLQUFLLEVBQUM7SUFDcEMsSUFBSUMsR0FBRyxHQUFDdEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDdUUsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJQyxFQUFFLEdBQUNGLEdBQUcsQ0FBQ0csSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUN2QyxHQUFHLENBQUMsQ0FBQztJQUM5Q25FLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDd0csRUFBRSxDQUFDO0lBQ2Y5RSxJQUFJLENBQUNELFlBQVksQ0FBQzVCLE9BQU8sR0FBQzZCLElBQUksQ0FBQ0QsWUFBWSxDQUFDNUIsT0FBTyxDQUFDNkcsTUFBTSxDQUN0RCxVQUFVOUMsS0FBSyxFQUFDN0MsS0FBSyxFQUFDNEYsR0FBRyxFQUFDO01BQ3RCLElBQUkvQyxLQUFLLENBQUM0QyxFQUFFLEtBQUdBLEVBQUUsR0FBQyxDQUFDLEVBQUM7UUFDaEIsT0FBUSxJQUFJO01BQ2hCO01BQ0EsT0FBTyxLQUFLO0lBQ2hCLENBQ0osQ0FBQztJQUNEekcsT0FBTyxDQUFDQyxHQUFHLENBQUMwQixJQUFJLENBQUNELFlBQVksQ0FBQzVCLE9BQU8sQ0FBQztJQUN0Q3lHLEdBQUcsQ0FBQ2IsTUFBTSxDQUFDLENBQUM7SUFDWi9ELElBQUksQ0FBQzhELGlCQUFpQixDQUFDLENBQUM7RUFDNUIsQ0FBQztFQUNELElBQUksQ0FBQ29CLHVCQUF1QixHQUFHLFlBQVk7SUFDdkMsT0FBT2pGLG9CQUFvQjtFQUMvQixDQUFDO0VBQ0QsSUFBSSxDQUFDd0IsdUJBQXVCLEdBQUcsVUFBVTBELE1BQU0sRUFBRTtJQUM3Q2xGLG9CQUFvQixHQUFDa0YsTUFBTTtFQUMvQixDQUFDO0VBR0QsSUFBSSxDQUFDVCxnQkFBZ0IsR0FBQyxVQUFVQyxLQUFLLEVBQUM7SUFDbEN0RyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDakIsSUFBSXNHLEdBQUcsR0FBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3VFLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0IsSUFBSUMsRUFBRSxHQUFDRixHQUFHLENBQUNHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDdkMsR0FBRyxDQUFDLENBQUM7SUFDOUNuRSxPQUFPLENBQUNDLEdBQUcsQ0FBQ3dHLEVBQUUsQ0FBQztJQUNmOUUsSUFBSSxDQUFDeUIsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQ3BDakIsR0FBRyxDQUFDVyxZQUFZLENBQUNpRSxRQUFRLENBQUNOLEVBQUUsQ0FBQztFQUNqQyxDQUFDO0VBQ0QsSUFBSSxDQUFDeEQsYUFBYSxHQUFDLFVBQVUyQyxXQUFXLEVBQUM7SUFDckM1RixPQUFPLENBQUNDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQztJQUNyRCxJQUFHMEIsSUFBSSxDQUFDa0YsdUJBQXVCLENBQUMsQ0FBQyxJQUFFLEtBQUssRUFBQztNQUNyQ2xGLElBQUksQ0FBQ3FGLFVBQVUsQ0FBQ3BCLFdBQVcsQ0FBQztJQUNoQyxDQUFDLE1BQUssSUFBR2pFLElBQUksQ0FBQ2tGLHVCQUF1QixDQUFDLENBQUMsSUFBRSxNQUFNLEVBQUM7TUFDNUNsRixJQUFJLENBQUNzRixXQUFXLENBQUNyQixXQUFXLENBQUNhLEVBQUUsRUFBQ2IsV0FBVyxDQUFDO0lBQ2hEO0VBQ0osQ0FBQztFQUNELElBQUksQ0FBQ29CLFVBQVUsR0FBQyxVQUFVcEIsV0FBVyxFQUFDO0lBQ2xDO0FBQ1I7QUFDQTtJQUNRakUsSUFBSSxDQUFDRCxZQUFZLENBQUM1QixPQUFPLENBQUN3RixJQUFJLENBQUNNLFdBQVcsQ0FBQztJQUMzQ0EsV0FBVyxDQUFDRCxNQUFNLEdBQUNoRSxJQUFJLENBQUNELFlBQVksQ0FBQzVCLE9BQU8sQ0FBQ3NFLE1BQU07SUFDbkQsSUFBSXlCLFFBQVEsR0FBQzVELENBQUMsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDNkQsSUFBSSxDQUFDLENBQUM7SUFDMUUsSUFBSUMsTUFBTSxHQUFDQyxRQUFRLENBQUNELE1BQU0sQ0FBQ0YsUUFBUSxFQUFDRCxXQUFXLENBQUM7SUFDaEQzRCxDQUFDLENBQUNILGVBQWUsR0FBQyxzQkFBc0IsQ0FBQyxDQUFDbUUsTUFBTSxDQUFDRixNQUFNLENBQUM7SUFDeERwRSxJQUFJLENBQUN1RSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdCZ0IsS0FBSyxDQUFDQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ3pCRCxLQUFLLENBQUMvRixNQUFNLENBQUMsNEJBQTRCLEVBQUV5RSxXQUFXLENBQUN6RixJQUFJLEdBQUMsaUNBQWlDLEVBQUVpSCxZQUFZLENBQUNDLE9BQU8sRUFBQyxJQUFJLENBQUM7RUFDN0gsQ0FBQztFQUNELElBQUksQ0FBQ0osV0FBVyxHQUFDLFVBQVVSLEVBQUUsRUFBQ2IsV0FBVyxFQUFDO0lBRXRDLElBQUkwQixXQUFXLEdBQUMsRUFBRTtJQUNsQnJGLENBQUMsQ0FBQzJDLElBQUksQ0FBQ2pELElBQUksQ0FBQ0QsWUFBWSxDQUFDVyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUMsVUFBVXJCLEtBQUssRUFBQztNQUN4RCxJQUFHLElBQUksQ0FBQ3lGLEVBQUUsSUFBRUEsRUFBRSxFQUFDO1FBQ1hhLFdBQVcsQ0FBQ2hDLElBQUksQ0FBQ00sV0FBVyxDQUFDO01BQ2pDLENBQUMsTUFBSTtRQUNEMEIsV0FBVyxDQUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQztNQUMxQjtJQUNKLENBQUMsQ0FBQztJQUNGM0QsSUFBSSxDQUFDRCxZQUFZLENBQUM1QixPQUFPLEdBQUN3SCxXQUFXO0lBQ3JDM0YsSUFBSSxDQUFDOEQsaUJBQWlCLENBQUMsQ0FBQztJQUN4QnlCLEtBQUssQ0FBQy9GLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRXlFLFdBQVcsQ0FBQ3pGLElBQUksR0FBQyxpQ0FBaUMsRUFBRWlILFlBQVksQ0FBQ0MsT0FBTyxFQUFDLElBQUksQ0FBQztFQUM5SCxDQUFDOztFQUdEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7RUFDSSxJQUFJLENBQUNFLGlCQUFpQixHQUFDLFlBQVc7SUFDOUJ0RixDQUFDLENBQUNILGVBQWUsR0FBQyx5QkFBeUIsQ0FBQyxDQUFDNEQsTUFBTSxDQUFDLENBQUM7SUFDckQvRCxJQUFJLENBQUM2QixhQUFhLENBQUMsQ0FBQztFQUN4QixDQUFDO0VBQ0QsSUFBSSxDQUFDQSxhQUFhLEdBQUMsWUFBVztJQUMxQixJQUFJbUMsTUFBTSxHQUFDLENBQUM7SUFDWjNGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0lBQy9CZ0MsQ0FBQyxDQUFDMkMsSUFBSSxDQUFDakQsSUFBSSxDQUFDRCxZQUFZLENBQUNXLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBQyxZQUFXO01BQ25ELElBQUltRixRQUFRLEdBQUMsSUFBSTtNQUNqQkEsUUFBUSxDQUFDN0IsTUFBTSxHQUFDQSxNQUFNO01BQ3RCLElBQUlFLFFBQVEsR0FBQzVELENBQUMsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDNkQsSUFBSSxDQUFDLENBQUM7TUFDMUVyRCxLQUFLLENBQUMrRSxRQUFRLENBQUM7TUFDZixJQUFJekIsTUFBTSxHQUFDQyxRQUFRLENBQUNELE1BQU0sQ0FBQ0YsUUFBUSxFQUFDMkIsUUFBUSxDQUFDO01BQzdDdkYsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUNnRSxNQUFNLENBQUNGLE1BQU0sQ0FBQztNQUN2Q0osTUFBTSxFQUFFO0lBQ1osQ0FBQyxDQUFDO0lBQ0ZoRSxJQUFJLENBQUM4RixzQkFBc0IsQ0FBQyxDQUFDO0VBQ2pDLENBQUM7RUFFRCxJQUFJLENBQUNBLHNCQUFzQixHQUFFLFlBQVc7SUFDcEN4RixDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQ2tFLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDaERsRSxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQ2tCLElBQUksQ0FBQyxPQUFPLEVBQUN4QixJQUFJLENBQUMrRixrQkFBa0IsQ0FBQztJQUN0RXpGLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDa0UsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUM5Q2xFLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDa0IsSUFBSSxDQUFDLE9BQU8sRUFBQ3hCLElBQUksQ0FBQ2dHLGdCQUFnQixDQUFDO0VBRXRFLENBQUM7RUFDRCxJQUFJLENBQUNELGtCQUFrQixHQUFDLFVBQVVwQixLQUFLLEVBQUM7SUFDcEMsSUFBSUMsR0FBRyxHQUFDdEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDdUUsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJQyxFQUFFLEdBQUNGLEdBQUcsQ0FBQ0csSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUN2QyxHQUFHLENBQUMsQ0FBQztJQUNsRG5FLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDd0csRUFBRSxDQUFDO0lBQ2Y5RSxJQUFJLENBQUNELFlBQVksQ0FBQzNCLE9BQU8sR0FBQzRCLElBQUksQ0FBQ0QsWUFBWSxDQUFDM0IsT0FBTyxDQUFDNEcsTUFBTSxDQUN0RCxVQUFVOUMsS0FBSyxFQUFDN0MsS0FBSyxFQUFDNEYsR0FBRyxFQUFDO01BQ3RCLElBQUkvQyxLQUFLLENBQUM0QyxFQUFFLElBQUVBLEVBQUUsRUFBRSxPQUFPLElBQUk7SUFDakMsQ0FDSixDQUFDO0lBQ0R6RyxPQUFPLENBQUNDLEdBQUcsQ0FBQzBCLElBQUksQ0FBQ0QsWUFBWSxDQUFDM0IsT0FBTyxDQUFDO0lBQ3RDd0csR0FBRyxDQUFDYixNQUFNLENBQUMsQ0FBQztJQUNaL0QsSUFBSSxDQUFDNEYsaUJBQWlCLENBQUMsQ0FBQztFQUM1QixDQUFDO0VBQ0QsSUFBSSxDQUFDSyx1QkFBdUIsR0FBRyxZQUFZO0lBQ3ZDLE9BQU8vRixvQkFBb0I7RUFDL0IsQ0FBQztFQUNELElBQUksQ0FBQzRCLHVCQUF1QixHQUFHLFVBQVVxRCxNQUFNLEVBQUU7SUFDN0NqRixvQkFBb0IsR0FBQ2lGLE1BQU07RUFDL0IsQ0FBQztFQUdELElBQUksQ0FBQ2EsZ0JBQWdCLEdBQUMsVUFBVXJCLEtBQUssRUFBQztJQUNsQ3RHLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNqQixJQUFJc0csR0FBRyxHQUFDdEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDdUUsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJQyxFQUFFLEdBQUNGLEdBQUcsQ0FBQ0csSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUN2QyxHQUFHLENBQUMsQ0FBQztJQUNsRG5FLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDd0csRUFBRSxDQUFDO0lBQ2Y5RSxJQUFJLENBQUM4Qix1QkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFDcEN0QixHQUFHLENBQUNtQixZQUFZLENBQUN5RCxRQUFRLENBQUNOLEVBQUUsQ0FBQztFQUNqQyxDQUFDO0VBQ0QsSUFBSSxDQUFDbEQsYUFBYSxHQUFDLFVBQVVpRSxRQUFRLEVBQUM7SUFDbEN4SCxPQUFPLENBQUNDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQztJQUNyRCxJQUFHMEIsSUFBSSxDQUFDaUcsdUJBQXVCLENBQUMsQ0FBQyxJQUFFLEtBQUssRUFBQztNQUNyQ2pHLElBQUksQ0FBQ2tHLFVBQVUsQ0FBQ0wsUUFBUSxDQUFDO0lBQzdCLENBQUMsTUFBSyxJQUFHN0YsSUFBSSxDQUFDaUcsdUJBQXVCLENBQUMsQ0FBQyxJQUFFLE1BQU0sRUFBQztNQUM1Q2pHLElBQUksQ0FBQ21HLFdBQVcsQ0FBQ04sUUFBUSxDQUFDZixFQUFFLEVBQUNlLFFBQVEsQ0FBQztJQUMxQztFQUNKLENBQUM7RUFDRCxJQUFJLENBQUNLLFVBQVUsR0FBQyxVQUFVRSxRQUFRLEVBQUM7SUFDL0I7QUFDUjtBQUNBO0lBQ1FwRyxJQUFJLENBQUNELFlBQVksQ0FBQzNCLE9BQU8sQ0FBQ3VGLElBQUksQ0FBQ3lDLFFBQVEsQ0FBQztJQUN4Q0EsUUFBUSxDQUFDcEMsTUFBTSxHQUFDaEUsSUFBSSxDQUFDRCxZQUFZLENBQUMzQixPQUFPLENBQUNxRSxNQUFNO0lBQ2hELElBQUl5QixRQUFRLEdBQUM1RCxDQUFDLENBQUMsbURBQW1ELENBQUMsQ0FBQzZELElBQUksQ0FBQyxDQUFDO0lBQzFFLElBQUlDLE1BQU0sR0FBQ0MsUUFBUSxDQUFDRCxNQUFNLENBQUNGLFFBQVEsRUFBQ2tDLFFBQVEsQ0FBQztJQUM3QzlGLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLHNCQUFzQixDQUFDLENBQUNtRSxNQUFNLENBQUNGLE1BQU0sQ0FBQztJQUN4RHBFLElBQUksQ0FBQzhGLHNCQUFzQixDQUFDLENBQUM7SUFDN0JQLEtBQUssQ0FBQ0MsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUN6QkQsS0FBSyxDQUFDL0YsTUFBTSxDQUFDLGdCQUFnQixFQUFFNEcsUUFBUSxDQUFDQyxNQUFNLEdBQUMsWUFBWSxFQUFFWixZQUFZLENBQUNDLE9BQU8sRUFBQyxJQUFJLENBQUM7RUFDM0YsQ0FBQztFQUNELElBQUksQ0FBQ1MsV0FBVyxHQUFDLFVBQVVyQixFQUFFLEVBQUNlLFFBQVEsRUFBQztJQUVuQyxJQUFJUyxPQUFPLEdBQUMsRUFBRTtJQUNkaEcsQ0FBQyxDQUFDMkMsSUFBSSxDQUFDakQsSUFBSSxDQUFDRCxZQUFZLENBQUNXLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBQyxVQUFVckIsS0FBSyxFQUFDO01BQ3hELElBQUcsSUFBSSxDQUFDeUYsRUFBRSxJQUFFQSxFQUFFLEVBQUM7UUFDWHdCLE9BQU8sQ0FBQzNDLElBQUksQ0FBQ2tDLFFBQVEsQ0FBQztNQUMxQixDQUFDLE1BQUk7UUFDRFMsT0FBTyxDQUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQztNQUN0QjtJQUNKLENBQUMsQ0FBQztJQUNGM0QsSUFBSSxDQUFDRCxZQUFZLENBQUMzQixPQUFPLEdBQUNrSSxPQUFPO0lBQ2pDdEcsSUFBSSxDQUFDNEYsaUJBQWlCLENBQUMsQ0FBQztJQUN4QkwsS0FBSyxDQUFDL0YsTUFBTSxDQUFDLHVCQUF1QixFQUFFcUcsUUFBUSxDQUFDUSxNQUFNLEdBQUMsWUFBWSxFQUFFWixZQUFZLENBQUNDLE9BQU8sRUFBQyxJQUFJLENBQUM7RUFDbEcsQ0FBQztFQUVELElBQUksQ0FBQzlFLFlBQVksR0FBRyxZQUFzQjtJQUFBLElBQVo3QyxPQUFPLEdBQUF3SSxTQUFBLENBQUE5RCxNQUFBLFFBQUE4RCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFDLENBQUMsQ0FBQztJQUNwQ3pGLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztJQUNoQ1Ysb0JBQW9CLEdBQUNyQixJQUFJLENBQUNFLG9CQUFvQixHQUFDLGFBQWEsQ0FBQyxDQUFDOztJQUU5RCxJQUFJd0gsTUFBTSxHQUFDbkcsQ0FBQyxDQUFDRixvQkFBb0IsR0FBQyxXQUFXLENBQUMsQ0FBQ3FDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZEakMsR0FBRyxDQUFDa0csT0FBTyxDQUFDO01BQ1JDLGtDQUFrQyxFQUFDM0csSUFBSSxDQUFDYSxRQUFRO01BQ2hEK0YscUNBQXFDLEVBQUM1RyxJQUFJLENBQUM2RztJQUUvQyxDQUFDLENBQUM7SUFDRixJQUFJaEgsY0FBYyxHQUFDZCxJQUFJLENBQUNhLFNBQVMsQ0FBQ0MsY0FBYztJQUNoRCxJQUFHLE9BQU85QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBRSxXQUFXLEVBQUM7TUFDN0M4QixjQUFjLEdBQUM5QixPQUFPLENBQUMsZ0JBQWdCLENBQUM7SUFDNUM7SUFDQXVDLENBQUMsQ0FBQ0Ysb0JBQW9CLENBQUMsQ0FBQzBHLFNBQVMsQ0FBRTtNQUMvQkMsUUFBUSxFQUFFO1FBQ05DLEdBQUcsRUFBRTtNQUNULENBQUM7TUFFRDtNQUNBLE1BQU0sRUFBRWpJLElBQUksQ0FBQ0ksR0FBRyxDQUFDQyxtQkFBbUI7TUFDcEMsWUFBWSxFQUFFLENBQ1Y7UUFDSSxTQUFTLEVBQUVxSCxNQUFNLEdBQUMsQ0FBQztRQUNuQixRQUFRLEVBQUUsU0FBVnJDLE1BQVFBLENBQWF0RyxJQUFJLEVBQUVtSixJQUFJLEVBQUVyQyxHQUFHLEVBQUc7VUFDbkMsSUFBSXNDLE9BQU8sR0FBQzFHLEdBQUcsQ0FBQzJHLDBCQUEwQixDQUFDLENBQUMsRUFBQ1osU0FBUyxDQUFDO1VBQ3ZEVyxPQUFPLElBQUUxRyxHQUFHLENBQUM0Ryx5QkFBeUIsQ0FBQyxDQUFDLEVBQUNiLFNBQVMsQ0FBQztVQUNuRCxPQUFPVyxPQUFPO1FBQ2xCO01BQ0osQ0FBQyxFQUNEO1FBQ0ksU0FBUyxFQUFFLENBQUM7UUFDWixRQUFRLEVBQUUsU0FBVjlDLE1BQVFBLENBQWF0RyxJQUFJLEVBQUVtSixJQUFJLEVBQUVyQyxHQUFHLEVBQUc7VUFDbkMsT0FBT3FDLElBQUksS0FBSyxNQUFNLEdBQUduSixJQUFJLENBQUN1SixRQUFRLENBQUMsQ0FBQyxHQUFHdkosSUFBSTtRQUNuRDtNQUNKO01BQ0E7TUFBQSxDQUNIO01BQ0RvSixPQUFPLEVBQUM7UUFDSkEsT0FBTyxFQUFFLENBQ0wsT0FBTyxFQUFDLEtBQUssRUFDYjtVQUNJM0csTUFBTSxFQUFFLE9BQU87VUFDZjtVQUNBLE9BQU8sRUFBRSxtQkFBbUI7VUFDNUIsWUFBWSxFQUFFLGdCQUFnQjtVQUM5QitHLFNBQVMsRUFBRTtRQUNmLENBQUMsRUFDRDs7UUFFQTtVQUNJQyxJQUFJLEVBQUUsY0FBYztVQUNwQkMsU0FBUyxFQUFFLHlCQUF5QjtVQUNwQ2xFLElBQUksRUFBQztZQUNEO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7WUFFNEIsTUFBTSxFQUFDO1VBQ1gsQ0FBQztVQUNEM0MsSUFBSSxFQUFFLFNBQU5BLElBQUlBLENBQVc4RyxHQUFHLEVBQUV0RixJQUFJLEVBQUV1RixNQUFNLEVBQUU7WUFDOUJwSCxDQUFDLENBQUM2QixJQUFJLENBQUMsQ0FBQ0UsV0FBVyxDQUFDLFdBQVcsQ0FBQztVQUNwQyxDQUFDO1VBQ0RzRixNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBYUMsQ0FBQyxFQUFFQyxFQUFFLEVBQUUxRixJQUFJLEVBQUV1RixNQUFNLEVBQUc7WUFDckNsSCxHQUFHLENBQUNtRyxrQ0FBa0MsQ0FBQ0osU0FBUyxDQUFDO1lBQ2pEO0FBQzVCO0FBQ0E7QUFDQTtVQUV3QjtRQUNKLENBQUM7TUFFVCxDQUFDO01BQ0QsU0FBUyxFQUFFLENBQ1A7UUFBRSxNQUFNLEVBQUU7TUFBSyxDQUFDLEVBQ2hCO1FBQUUsTUFBTSxFQUFFO01BQU8sQ0FBQyxFQUNsQjtRQUFFLE1BQU0sRUFBRTtNQUFhLENBQUMsRUFDeEI7UUFBRSxNQUFNLEVBQUU7TUFBUyxDQUFDLEVBQ3BCO1FBQUUsTUFBTSxFQUFFO01BQWEsQ0FBQyxFQUN4QixJQUFJLENBQ1A7TUFDRCxPQUFPLEVBQUUxRyxjQUFjO01BQ3ZCO01BQ0EsY0FBYyxFQUFFLFNBQWhCaUksWUFBY0EsQ0FBWUMsUUFBUSxFQUFHO1FBQ2pDdkgsR0FBRyxDQUFDd0gscUJBQXFCLENBQUM1SCxvQkFBb0IsQ0FBQztNQUNuRDtJQUNKLENBQUUsQ0FBQztJQUNIVSxLQUFLLENBQUMsY0FBYyxDQUFDO0VBQ3pCLENBQUM7RUFDRCxJQUFJLENBQUMrRiw2QkFBNkIsR0FBQyxVQUFVbEMsS0FBSyxFQUFDO0lBQy9DN0QsS0FBSyxDQUFDLCtCQUErQixDQUFDO0lBQ3RDLElBQUlxQixJQUFJLEdBQUM3QixDQUFDLENBQUNxRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNzRCxhQUFhLENBQUM7SUFDbEMsSUFBSXJELEdBQUcsR0FBQ3RFLENBQUMsQ0FBQ0Ysb0JBQW9CLENBQUMsQ0FBQzBHLFNBQVMsQ0FBQyxDQUFDLENBQUNsQyxHQUFHLENBQUN6QyxJQUFJLENBQUMrRixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkUsSUFBSUMsT0FBTyxHQUFDdkQsR0FBRyxDQUFDOUcsSUFBSSxDQUFDLENBQUM7SUFDdEIsSUFBSXNLLFVBQVUsR0FBQyxvQkFBb0IsR0FBQ2pHLElBQUksQ0FBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQ3VLLFVBQVUsQ0FBQyxDQUFDO0lBQ3hFLElBQUksT0FBT3JJLElBQUksQ0FBQ29JLFVBQVUsQ0FBQyxLQUFLLFVBQVUsRUFBRTtNQUN4QyxPQUFPcEksSUFBSSxDQUFDb0ksVUFBVSxDQUFDLENBQUNELE9BQU8sRUFBQ2hHLElBQUksQ0FBQztJQUN6QztFQUNKLENBQUM7RUFDRCxJQUFJLENBQUNtRyxzQkFBc0IsR0FBQyxVQUFVSCxPQUFPLEVBQUNoRyxJQUFJLEVBQUU7SUFDaEQ5RCxPQUFPLENBQUNDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQztJQUM1QztJQUNBLElBQUlpSyxPQUFPLEdBQUN4SixJQUFJLENBQUNJLEdBQUcsQ0FBQ0ksSUFBSSxDQUFDaUosT0FBTyxDQUFDLE1BQU0sRUFBQ0wsT0FBTyxDQUFDckQsRUFBRSxDQUFDO0lBQ3BEO0FBQ1I7QUFDQTtBQUNBO0lBQ1F0RSxHQUFHLENBQUNPLGVBQWUsQ0FBQ3dILE9BQU8sRUFBQ3ZJLElBQUksQ0FBQ2lCLGVBQWUsQ0FBQztJQUNqRDVDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDRCQUE0QixDQUFDO0VBQzdDLENBQUM7RUFDRCxJQUFJLENBQUNtSyx3QkFBd0IsR0FBQyxVQUFVTixPQUFPLEVBQUNoRyxJQUFJLEVBQUU7SUFDbEQ5RCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQztJQUM5QyxJQUFJc0csR0FBRyxHQUFDdEUsQ0FBQyxDQUFDRixvQkFBb0IsQ0FBQyxDQUFDMEcsU0FBUyxDQUFDLENBQUMsQ0FBQ2xDLEdBQUcsQ0FBQ3pDLElBQUksQ0FBQytGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRSxJQUFJUSxRQUFRLEdBQUMsQ0FBQyxDQUFDO0lBQ2YsSUFBSUgsT0FBTyxHQUFDeEosSUFBSSxDQUFDSSxHQUFHLENBQUNRLE9BQU8sQ0FBQzZJLE9BQU8sQ0FBQyxNQUFNLEVBQUNMLE9BQU8sQ0FBQ3JELEVBQUUsQ0FBQztJQUN2RDRELFFBQVEsQ0FBQ0MsTUFBTSxHQUFDckksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUNrQyxHQUFHLENBQUMsQ0FBQztJQUM3Q2xDLENBQUMsQ0FBQ3NJLElBQUksQ0FBQztNQUNINUIsR0FBRyxFQUFDdUIsT0FBTztNQUNYekssSUFBSSxFQUFDNEssUUFBUTtNQUNiRyxNQUFNLEVBQUMsUUFBUTtNQUNmQyxPQUFPLEVBQUMsU0FBUkEsT0FBT0EsQ0FBV2hMLElBQUksRUFBQztRQUNuQixJQUFHQSxJQUFJLENBQUNnTCxPQUFPLElBQUUsSUFBSSxFQUFDO1VBQ2xCbEUsR0FBRyxDQUFDYixNQUFNLENBQUMsQ0FBQyxDQUFDZ0YsSUFBSSxDQUFDLENBQUM7UUFDdkI7TUFDSjtJQUNKLENBQUMsQ0FBQztFQUVOLENBQUM7RUFFRCxJQUFJLENBQUNqRyxlQUFlLEdBQUMsVUFBVTZCLEtBQUssRUFBRTtJQUNsQzdELEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDckI2RCxLQUFLLENBQUNxRSxjQUFjLENBQUMsQ0FBQztJQUN0QmxJLEtBQUssQ0FBQ1gsZUFBZSxDQUFDO0lBQ3RCVyxLQUFLLENBQUNSLENBQUMsQ0FBQ0gsZUFBZSxDQUFDLENBQUM7SUFDekIsSUFBSUcsQ0FBQyxDQUFDSCxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzhJLGFBQWEsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO01BQ2pENUssT0FBTyxDQUFDQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7TUFDOUJxRyxLQUFLLENBQUN1RSxlQUFlLENBQUMsQ0FBQztNQUN2QjtJQUNKLENBQUMsTUFBTTtNQUNIN0ssT0FBTyxDQUFDQyxHQUFHLENBQUMsY0FBYyxDQUFDO01BQzNCO0lBQ0o7SUFDQSxJQUFJb0ssUUFBUSxHQUFDMUksSUFBSSxDQUFDbUosMkJBQTJCLENBQUNoSixlQUFlLENBQUM7SUFFOUQsSUFBSW9JLE9BQU8sR0FBQ3hKLElBQUksQ0FBQ0ksR0FBRyxDQUFDTSxLQUFLO0lBQzFCLElBQUkySixVQUFVLEdBQUMsTUFBTTtJQUNyQixJQUFHcEosSUFBSSxDQUFDRCxZQUFZLENBQUMrRSxFQUFFLEVBQUM7TUFDcEJ5RCxPQUFPLEdBQUN4SixJQUFJLENBQUNJLEdBQUcsQ0FBQ08sTUFBTSxDQUFDOEksT0FBTyxDQUFDLE1BQU0sRUFBQ3hJLElBQUksQ0FBQ0QsWUFBWSxDQUFDK0UsRUFBRSxDQUFDO01BQzVEO01BQ0E7TUFDQTRELFFBQVEsQ0FBQ3BFLE1BQU0sQ0FBQyxTQUFTLEVBQUMsS0FBSyxDQUFDO0lBQ3BDO0lBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFUWpHLE9BQU8sQ0FBQ2dMLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxXQUFXLENBQUNiLFFBQVEsQ0FBQyxDQUFDO0lBRTNDcEksQ0FBQyxDQUFDc0ksSUFBSSxDQUFDO01BQ0g1QixHQUFHLEVBQUN1QixPQUFPO01BQ1h6SyxJQUFJLEVBQUM0SyxRQUFRO01BQ2J6QixJQUFJLEVBQUNtQyxVQUFVO01BQ2ZJLFdBQVcsRUFBQyxLQUFLO01BQ2pCQyxXQUFXLEVBQUUsS0FBSztNQUNsQkMsT0FBTyxFQUFFO1FBQ0wsY0FBYyxFQUFFcEosQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUNrQyxHQUFHLENBQUM7TUFDbEQsQ0FBQztNQUVEc0csT0FBTyxFQUFDLFNBQVJBLE9BQU9BLENBQVdoTCxJQUFJLEVBQUM7UUFDbkJnRCxLQUFLLENBQUNoRCxJQUFJLENBQUM7UUFDWCxJQUFHQSxJQUFJLENBQUNnTCxPQUFPLElBQUUsSUFBSSxFQUFDO1VBRWxCO1VBQ0EvSixJQUFJLENBQUNhLFNBQVMsQ0FBQ0MsY0FBYyxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUN6QzBGLEtBQUssQ0FBQy9GLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRWtKLFFBQVEsQ0FBQ2lCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBQyw0QkFBNEIsRUFBRWxFLFlBQVksQ0FBQ0MsT0FBTyxFQUFDLElBQUksQ0FBQztVQUMvR2xGLEdBQUcsQ0FBQ08sZUFBZSxDQUFDaEMsSUFBSSxDQUFDSSxHQUFHLENBQUNFLEtBQUssR0FBQyxTQUFTLEVBQUNXLElBQUksQ0FBQ1ksWUFBWSxDQUFDO1FBQ25FO01BQ0o7SUFDSixDQUFDLENBQUM7RUFDTixDQUFDO0VBRUQsSUFBSSxDQUFDdUksMkJBQTJCLEdBQUcsVUFBVWhKLGVBQWUsRUFBRTtJQUMxRCxJQUFJdUksUUFBUSxHQUFDLElBQUlrQixRQUFRLENBQUN0SixDQUFDLENBQUNILGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDUUcsQ0FBQyxDQUFDMkMsSUFBSSxDQUFDeUYsUUFBUSxDQUFDbUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFDLFVBQVNDLEdBQUcsRUFBQzVILEtBQUssRUFBQztNQUNuRHdHLFFBQVEsQ0FBQ3BFLE1BQU0sQ0FBQyxhQUFhLEVBQUNwQyxLQUFLLENBQUM7SUFDeEMsQ0FBQyxDQUFDO0lBRUZ3RyxRQUFRLENBQUNwRSxNQUFNLENBQUMsUUFBUSxFQUFDaEUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUNrQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXZEbEMsQ0FBQyxDQUFDSCxlQUFlLEdBQUMsd0JBQXdCLENBQUMsQ0FBQzhDLElBQUksQ0FBQyxZQUFXO01BQ3hELElBQUk4RyxRQUFRLEdBQUN6SixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNnRCxJQUFJLENBQUMsTUFBTSxDQUFDO01BQ2pDLElBQUdvRixRQUFRLENBQUNpQixHQUFHLENBQUNJLFFBQVEsQ0FBQyxFQUFDO1FBQ3RCckIsUUFBUSxDQUFDc0IsR0FBRyxDQUFDRCxRQUFRLEVBQUNyQixRQUFRLENBQUNpQixHQUFHLENBQUNJLFFBQVEsQ0FBQyxDQUFDdkIsT0FBTyxDQUFDLFNBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQztNQUN2RTtJQUNKLENBQUMsQ0FBQztJQUNGbEksQ0FBQyxDQUFDMkMsSUFBSSxDQUFDeUYsUUFBUSxDQUFDbUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFDLFVBQVNDLEdBQUcsRUFBQzVILEtBQUssRUFBQztNQUNsRHdHLFFBQVEsQ0FBQ3BFLE1BQU0sQ0FBQyxZQUFZLEVBQUNwQyxLQUFLLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBQ0YsT0FBT3dHLFFBQVE7RUFDbkIsQ0FBQztFQUNELElBQUksQ0FBQ3JJLFNBQVMsQ0FBQ3RDLE9BQU8sRUFBRWUsZ0JBQWdCLENBQUM7QUFFN0MsQ0FBQyIsImlnbm9yZUxpc3QiOltdLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/admin/profitCenter.js\n\n}"); - -/***/ }, - -/***/ "./resources/js/admin/supplier.js" -/*!****************************************!*\ - !*** ./resources/js/admin/supplier.js ***! - \****************************************/ -() { - -eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _Supplier(data, options) {\n var _this;\n _classCallCheck(this, _Supplier);\n _this = _callSuper(this, _Supplier, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Supplier constructor called');\n return _this;\n }\n _inherits(_Supplier, _DataModel);\n return _createClass(_Supplier);\n }(DataModel);\n ;\n window.Supplier = _Supplier;\n}\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\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 /*\r\n * Constructor\r\n */\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n root.Supplier = APP.Supplier;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector));\n //let formJSON = Object.fromEntries(data.entries());\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 if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\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 });\n //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\r\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n $.each(formJSON, function (item, value) {\r\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\r\n delete formJSON[item];\r\n });\r\n if(formJSON.phone){\r\n formJSON.phone=formJSON.phone.replaceAll('_','');\r\n }\r\n if(formJSON.email){\r\n formJSON.email=formJSON.email.replaceAll('_','');\r\n }\r\n */\n return formJSON;\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 if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\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');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\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 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 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 if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\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 });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n }\n\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 this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\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 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 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 if (term === '') {\n return null;\n }\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n };\n }\n });\n\n //$(\".profitCenterSelect\").select2();\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();\n //Opts.onAfterInitViewDetails();\n root.initFileAttachmentFeature();\n debug('**end initViewDetails ');\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\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 this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n if (fileInput[0].files.length < 1) {\n Toast.create(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\n return;\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 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 this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\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 var datatableRowActionCallerNode = false;\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 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 if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\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 APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\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 }\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 /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\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);\r\n console.log(dt);\r\n console.log(node);\r\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 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 this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\r\n {\r\n id:3,\r\n name:'Kósa Veronika',\r\n email:'szamlazas4@funkcio.hu',\r\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\r\n }\r\n */]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n root.initViewList();\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 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 this.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\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;\n //console.log(contactData);\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 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 this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n var currentAttachmentRow = false;\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);\n //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\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 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 return false;\n });\n /*\r\n */\n //row.remove();\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 this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\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 return false;\n });\n row.remove();\n root.resetContactTable();\n };\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\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 this.getSupplier = function () {\n return root.Supplier;\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\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 this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\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 this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiU3VwcGxpZXJBZG1pbiIsIlN1cHBsaWVySXRlbSIsIk9wdHMiLCJ0b2tlbiIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdE1vZGUiLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImF0dGFjaEZpbGUiLCJkZXRhY2hGaWxlIiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsIkFQUCIsImdldE9wdHMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQiLCJDU1NTZWxlY3RvciIsIkZvcm1EYXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZm9ybUpTT04iLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJSZWZsZWN0IiwiaGFzIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsImVhY2giLCJhdHRyIiwicmVwbGFjZSIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsIkNTU1NlbGVjdG9yRm9ybSIsImFqYXhEYXRhIiwiZ2V0QWxsIiwiYXBwZW5kIiwidmFsIiwiaW5kZXhLZXkiLCJnZXQiLCJzZXQiLCJjbGlja1NhdmVCdXR0b24iLCJldmVudCIsImRlYnVnIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiYWpheFVybCIsImFqYXhNZXRob2QiLCJpZCIsImFqYXgiLCJ1cmwiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiVG9hc3QiLCJUT0FTVF9TVEFUVVMiLCJTVUNDRVNTIiwibG9hZE1haW5Db250ZW50IiwiaW5pdFZpZXdMaXN0Iiwic2V0RGV0YWlsc1ZpZXdEYXRhIiwibmVlZFRvU2V0Iiwibm90ZSIsInByb3AiLCJjYW5TZWUiLCJjbGljayIsImNhblNlZUluT3JkZXIiLCJob29yZXljYURhdGFBY3RpdmUiLCJwcm9kdWN0R3JvdXAiLCJwcm9kdWN0X2dyb3VwIiwibmFtZSIsImNoYW5nZSIsInNlcnZpY2UiLCJwcm9maXRDZW50ZXIiLCJwcm9maXRfY2VudGVyIiwiZXNjYXBlU2VsZWN0b3IiLCJpbml0Vmlld0RldGFpbHMiLCJDb250YWN0UG9wVXAiLCJpbml0IiwiYWN0aXZlIiwib25BZnRlclNhdmUiLCJjb250YWN0QWN0aW9uIiwicmVuZGVyQ29udGFjdCIsImJpbmQiLCJzZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImNsZWFyRGF0YSIsInRvb2x0aXAiLCJpbml0UmFkaW9CdXR0b25zIiwiaW5wdXRtYXNrIiwib25pbmNvbXBsZXRlIiwibGVuZ3RoIiwiYWRkQ2xhc3MiLCJvbmNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJvbmNsZWFyZWQiLCJvZmYiLCJvbiIsInNlbGVjdDIiLCJ0YWdzIiwiY3JlYXRlVGFnIiwicGFyYW1zIiwidGVybSIsInRyaW0iLCJ0ZXh0IiwibmV3VGFnIiwic2V0SW1hZ2VGcm9tTG9jYWwiLCJpcyIsInJlbmRlckF0dGFjaG1lbnQiLCJpbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlIiwic2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlIiwiZmlsZUlucHV0IiwiZmlsZXMiLCJncm91cCIsIkRBTkdFUiIsImZpbmQiLCJncm91cEVuZCIsImJlZm9yZVNlbmQiLCJhZGRBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwiY2xpY2tOZXciLCJjbGlja05ld0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsInJvd0RhdGEiLCJub2RlIiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiX3Rva2VuIiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJkYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJwYXJlbnRzIiwibWV0aG9kIiwicmVtb3ZlIiwiZHJhdyIsImRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJkYXRhdGFibGVSb3dBY3Rpb25EZWxldGUiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImN1cnJlbnRUYXJnZXQiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwicmVuZGVyIiwiYnV0dG9ucyIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJhdXRvZmlsbERldGFpbHMiLCJyYW5kb21OdW1iZXIiLCJnZXRSYW5kb21JbnQiLCJyb3dOdW0iLCJnZXREYXRhIiwiYXR0YWNobWVudERhdGEiLCJkYXRlIiwiRGF0ZSIsImNyZWF0ZWRfYXQiLCJ0b0xvY2FsZVN0cmluZyIsImxpbmsiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbiIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsInJlc2V0Q29udGFjdFRhYmxlIiwiY29udGFjdERhdGEiLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiYXR0YWNobWVudERlbGV0ZUNsaWNrIiwiY3VycmVudEF0dGFjaG1lbnRSb3ciLCJjbG9zZXN0IiwiYXR0YWNoZW1udElkIiwiZmlsdGVyIiwiYXJyIiwicmVzZXRBdHRhY2htZW50VGFibGUiLCJnZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsInN0YXR1cyIsImxvYWREYXRhIiwiZ2V0U3VwcGxpZXIiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJuZXdDb250YWN0cyJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanM/YTdjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgU3VwcGxpZXI9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBTdXBwbGllciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllciBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHdpbmRvdy5TdXBwbGllcj1TdXBwbGllcjtcclxufVxyXG5cclxuXHJcbndpbmRvdy5TdXBwbGllckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgdG9rZW46bnVsbCxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJTdXBwbGllcicsXHJcbiAgICAgICAgdGVzdE1vZGU6ZmFsc2UsXHJcbiAgICAgICAgVVJMOntcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDonJyxcclxuICAgICAgICAgICAgaW5kZXg6JycsXHJcbiAgICAgICAgICAgIHNob3c6JycsXHJcbiAgICAgICAgICAgIGVkaXQ6JycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIHVwZGF0ZTonJyxcclxuICAgICAgICAgICAgZGVzdHJveTonJyxcclxuICAgICAgICAgICAgYXR0YWNoRmlsZTonJyxcclxuICAgICAgICAgICAgZGV0YWNoRmlsZTonJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZTp7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOlsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6ZnVuY3Rpb24gKCl7fVxyXG4gICAgfTtcclxuICAgIGxldCBTdXBwbGllciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93PSduZXcnO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYoIVN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdXBwbGllciBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XHJcbiAgICAgICAgICAgIGlmKCFBUFAuU3VwcGxpZXIpe1xyXG4gICAgICAgICAgICAgICAgQVBQLlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LlN1cHBsaWVyPUFQUC5TdXBwbGllcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENTU1NlbGVjdG9yKSk7XHJcbiAgICAgICAgLy9sZXQgZm9ybUpTT04gPSBPYmplY3QuZnJvbUVudHJpZXMoZGF0YS5lbnRyaWVzKCkpO1xyXG4gICAgICAgIHZhciBmb3JtSlNPTiA9IHt9O1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogZm9ybUpTT04uaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZm9ybUpTT04sIGtleSkpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZvcm1KU09OW2tleV0pKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSBbZm9ybUpTT05ba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9ybUpTT05ba2V5XS5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV09Zm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy9mb3JtSlNPTi5wcm9kdWN0R3JvdXBzPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcblxyXG4gICAgICAgIC8qTXVsdGlzZWxlY3Qgb3IgY2hlY2tib3ggdG8gYXJyYXk6XHJcbiAgICAgICAgYWpheERhdGFbJ3Byb2R1Y3RHcm91cCddPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcbiAgICAgICAgZm9ybUpTT04ubXVsdGlzZWxlY3ROYW1lID0gZGF0YS5nZXRBbGwoJ211bHRpc2VsZWN0TmFtZScpO1xyXG4gICAgICAgICQuZWFjaChmb3JtSlNPTiwgZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1KU09OWyQubGNGaXJzdChpdGVtLnJlcGxhY2UoJ2NvbnRhY3QnLCAnJykpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgZm9ybUpTT05baXRlbV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoZm9ybUpTT04ucGhvbmUpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5waG9uZT1mb3JtSlNPTi5waG9uZS5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZvcm1KU09OLmVtYWlsKXtcclxuICAgICAgICAgICAgZm9ybUpTT04uZW1haWw9Zm9ybUpTT04uZW1haWwucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIHJldHVybiBmb3JtSlNPTjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcclxuICAgICAgICBsZXQgYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXJTZXJ2aWNlJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllclNlcnZpY2VbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnY29udGFjdElkJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdjb250YWN0SWRbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywkKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGluZGV4S2V5PSQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICBpZihhamF4RGF0YS5nZXQoaW5kZXhLZXkpKXtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSxhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPVwiY2FuU2VlSW5PcmRlclwiXScpLnZhbCgpPT0xICYmICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XHJcbiAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbChDU1NTZWxlY3RvckZvcm0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xyXG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcclxuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XHJcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX21ldGhvZCcsJ1BVVCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVidWcoYWpheE1ldGhvZCk7XHJcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xyXG5cclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgdHlwZTphamF4TWV0aG9kLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGRlYnVnKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU9WzAsICdkZXNjJ107XHJcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiU2lrZXJlcyByw7ZnesOtdMOpcyFcIiwgYWpheERhdGEuZ2V0KCduYW1lJykrXCIgbmV2xbEgYmVzesOhbGxsw610w7MgZWxtZW50dmVcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFN1cHBsaWVyKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ29yZGVyRW1haWwnLCdvcmRlckVtYWlsMicsJ2FkZHJlc3MnLCdtYWlsaW5nQWRkcmVzcycsJ3Bob25lJywnZmF4JywnY3VzdG9tZXJTZXJ2aWNlUGhvbmUnLFxyXG4gICAgICAgICAgICAnbmFtZTIyJyxcclxuICAgICAgICAgICAgJ29wZW5Ib3VycycsICdvcmRlcnNEZWFkbGluZScsICdtaW5PcmRlclZhbHVlJyxcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclt0aGlzXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuU3VwcGxpZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWVtYWlsQXR0YWNobWVudFR5cGVdW3ZhbHVlPScrcm9vdC5TdXBwbGllclsnZW1haWxBdHRhY2htZW50VHlwZSddKyddJykucHJvcCgnY2hlY2tlZCcsdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZUluT3JkZXJdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZUluT3JkZXIrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9kdWN0X2dyb3VwLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZHVjdEdyb3VwLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3QnKS52YWwocHJvZHVjdEdyb3VwKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlcnZpY2U9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuc2VydmljZSxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlcnZpY2UucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnNlcnZpY2VTZWxlY3QnKS52YWwoc2VydmljZSkuY2hhbmdlKCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZml0X2NlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHByb2ZpdENlbnRlci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL2RlYnVnKHByb2ZpdENlbnRlcik7XHJcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3ZhbHVlPVwiJyskLmVzY2FwZVNlbGVjdG9yKHRoaXMpKydcIl0nKS5wcm9wKCBcImNoZWNrZWRcIiwgdHJ1ZSApO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydsb2dvRmlsZSddIT0ndW5kZWZpbmVkJyAmJiAocm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9kZWJ1ZyhBUFAuU3VwcGxpZXJBZG1pbi5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5zdXBwbGllckZvcm0nKVsncHJvZHVjdEdyb3VwJ10pO1xyXG4gICAgICAgIC8vJCgnW25hbWU9cHJvZHVjdEdyb3VwXScpLnZhbChbJ0LDvGbDqcOhcnVfw6lkZXNpcGFyaV90ZXJtw6lrZWsnLCdUb2rDoXMnXSkuY2hhbmdlKCk7XHJcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5TdXBwbGllckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XHJcbiAgICAgICAgJChcIjppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuICAgICAgICByb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgICAgICQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKTtcclxuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRydWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZVRhZzogZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vJChcIi5wcm9maXRDZW50ZXJTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcclxuICAgICAgICAgICAgLy9sZXQgY2hlY2tlZD0kKHRoaXMpLmlzKFwiOmNoZWNrZWRcIilcclxuICAgICAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gaW5wdXQucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywkKHRoaXMpLmlzKFwiOmNoZWNrZWRcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jdXN0b20tZmlsZS1sYWJlbC5zZWxlY3RlZCcpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBBdHRhY2hlRmlsZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiSGliYSFcIiwgJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcclxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcclxuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcclxuICAgICAgICBkZWJ1ZyhldmVudCk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XHJcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcclxuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcclxuICAgICAgICAgICAgJ2NvbnRhY3QnOltcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xyXG4gICAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRDb250YWN0VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuXHJcbiAgICAgICAgbm9kZT0kKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0Jyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQXR0YWNobWVudENsaWNrQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5hdHRhY2htZW50VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuYXR0YWNobWVudERlbGV0ZUNsaWNrKTtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcclxuICAgIHRoaXMuYXR0YWNobWVudERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXRhY2hGaWxlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgIC8vbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGxldCBkYXRhPXt9O1xyXG4gICAgICAgIGRhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKTtcclxuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidQT1NUJyxcclxuICAgICAgICAgICAgLy9jb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3VwcGxpZXIuYXR0YWNobWVudD1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRBdHRhY2htZW50VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1pZCoxKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgICByb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnRhY3RFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0Q29udGFjdChjb250YWN0RGF0YS5pZCxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0PW5ld0NvbnRhY3RzO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgbcOzZG9zw610dmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3QucHVzaChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuY29udGFjdC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkthcGNzb2xhdCB0YXJ0w7MgaG96esOhYWR2YSFcIiwgY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBvY3NvbGF0dGFydMOzIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsU3VwcGxpZXJJdGVtKTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBRyxPQUFPQSxRQUFRLEtBQUcsV0FBVyxFQUFDO0VBQUEsSUFDdkJBLFNBQVEsMEJBQUFDLFVBQUE7SUFFVjtBQUNSO0FBQ0E7SUFDUSxTQUFBQyxVQUFhQyxJQUFJLEVBQUNDLE9BQU8s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\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\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"](); -/******/ -/******/ })() -; \ No newline at end of file +window.Dashboard=function(){var t={active:!1,containerCssSelector:".dashboard",testFileMod:!1,isAdmin:!1,URL:{create:"",store:"",getDataTableContent:"",destroy:""}},o=this;this.construct=function(o){debug("Dashboard constructor called"),$.extend(t,o)},this.getOpts=function(){return t},this.init=function(a){console.log("Dashboard init called"),$.extend(t,a),o.initEditorButtons()},this.initEditorButtons=function(){$(".DashboardEditable button.edit").off("click"),$(".DashboardEditable button.edit").on("click",function(){o.initEditor(),$(".btnGroupEdit").toggleClass("d-none"),$(".btnGroupModify").toggleClass("d-none")}),$(".DashboardEditable button.btnSave").off("click"),$(".DashboardEditable button.btnSave").on("click",function(){o.saveCustomContent()}),$(".DashboardEditable button.btnCancel").off("click"),$(".DashboardEditable button.btnCancel").on("click",function(){$(".btnGroupEdit").toggleClass("d-none"),$(".btnGroupModify").toggleClass("d-none"),o.removeEditor()})},this.saveCustomContent=function(){var o=new FormData($(".dashboardForm")[0]);o.append("stored_data",tinymce.activeEditor.getContent());var a=t.URL.update.replace("%id%",$("div.dashboardCustomContent").data("id"));o.append("_method","PUT"),$.ajax({url:a,data:o,type:"POST",contentType:!1,processData:!1,beforeSend:function beforeSend(){},success:function success(t){Toast.create("Siekeres mentés!","Új tartalom elmentve.",TOAST_STATUS.INFO,5e3)},error:function error(t){console.log(t.responseJSON),ajaxErrorFieldHandler(t.responseJSON.error)}})},this.loadTinymce=function(){$.getScript("https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js",function(){o.initEditor()})},this.removeEditor=function(t){"undefined"!=typeof tinymce&&tinymce.remove()},this.initEditor=function(t){"undefined"!=typeof tinymce?tinymce.init({selector:"div.dashboardCustomContent",language:"hu_HU",plugins:"code table lists",toolbar:" undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table"}):o.loadTinymce()}},window.PriceListAdmin=function(t,o){var a={active:!1,containerCssSelector:".priceListForm",testFileMod:!1,URL:{create:"",store:"",getDataTableContent:"",destroy:""}},r=this,i=null;this.construct=function(t){debug("PriceListAdmin constructor called"),$.extend(a,t)};var c=null,l=0;this.initErrorNavigationButton=function(){l=$(".statusError").length,c=null,$(".priceListForm .buttonPrevError .buttonNextError").off("click"),$(".priceListForm .buttonPrevError").on("click",function(){if(null==c)c=0;else{if(!(c>0))return;c--}$(".statusError").removeClass("highlightedErrorRow"),$(".priceListTableWrapper").scrollTop($($(".statusError")[c]).position().top),$($(".statusError")[c]).addClass("highlightedErrorRow")}),$(".priceListForm .buttonNextError").off("click"),$(".priceListForm .buttonNextError").on("click",function(){if(null==c)c=0;else{if(!(c tbody").empty(),$(".containerFileUpload").removeClass("d-none"))},this.clickNewPriceListCallBack=function(){r.initViewDetails()},this.clickNewPriceList=function(){APP.loadMainContent(a.URL.create,r.clickNewPriceListCallBack)},this.datatableRowActionButtonClick=function(t){var o=$(t[0].currentTarget),r=$(i).DataTable().row(o.parents("tr")),c=r.data(),l={},d=a.URL.destroy.replace("%id%",c.id);l._token=$("input[name=_token]").val(),$.ajax({url:d,data:l,method:"DELETE",success:function success(t){1==t.success&&r.remove().draw()}})},this.initViewList=function(t){debug("listview inicialization"),i=a.containerCssSelector+" .dataTable";var o=$(i+" thead th").length;APP.setOpts({datatableActionButtonClickCallBack:r.clickNewPriceList,datatableRowActionButtonClickCallBack:r.datatableRowActionButtonClick}),APP.dataTablePriceList=$(i).DataTable({language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},ajax:a.URL.getDataTableContent,columnDefs:[{targets:o-1,render:function render(t,o,a){return APP.datatableAddRowTrashButton(0,arguments)}}],buttons:{buttons:["excel","pdf",{extend:"print",title:"title custom text",messageTop:"Message On Top",autoPrint:!0},{text:"Új felvitele",className:"btn btn-success newItem",attr:{data:"newItem"},init:function init(t,o,a){$(o).removeClass("ui-button")},action:function action(t,o,a,r){APP.datatableActionButtonClickCallBack(arguments)}}]},columns:[{data:"id"},{data:"supplierName"},{data:"available"},{data:"created_at"},{data:"note"},null],stateSave:!0,drawCallback:function drawCallback(t){APP.datatableAddRowAction(i)}})},this.initViewDetails=function(t){$(a.containerCssSelector+" .datePickerClick").off("click"),$(a.containerCssSelector+" .datePickerClick").on("click",function(){$(a.containerCssSelector+" .datePicker").datepicker("show")}),$(a.containerCssSelector+" .datePicker").datepicker({dateFormat:"yy-mm-dd",onSelect:function onSelect(t){console.log(t),$(".selectedDateText").text(t.replaceAll("-",".")),$('input[name="availableDate"]').val(t)}}),$(a.containerCssSelector+" .buttonNewUpload").off("click"),$(a.containerCssSelector+" .buttonNewUpload").on("click",function(){r.selectedUploadFileToggle()}),$(a.containerCssSelector+" .buttonUpload").off("click"),$(a.containerCssSelector+" .buttonUpload").on("click",function(){console.log("------------------"),r.selectedUploadFileToggle();var t=new FormData($(".priceListForm")[0]);if($(".supplierSelect").val().length<1)Toast.create("Hiba!","Adjon meg beszállítót!",TOAST_STATUS.DANGER,1e4);else{var o=$("#inputGroupPriceListFile");console.log(o[0].files.length<1),!a.testFileMod&&(console.log(o[0].files.length<1),o[0].files.length<1)?Toast.create("Hiba!","Vállaszon ki fájlt!",TOAST_STATUS.DANGER,1e4):(t.append(o.attr("name"),o[0].files[0]),r.selectedUploadFileToggle(o),$.ajax({url:a.URL.store,data:t,type:"POST",contentType:!1,processData:!1,beforeSend:function beforeSend(){},success:function success(t){console.log(t),1==t.success&&r.processCheckedPriceListResponse(t)},error:function error(t){console.log(t.responseJSON),r.selectedUploadFileToggle(),ajaxErrorFieldHandler(t.responseJSON.error)}}))}}),$(a.containerCssSelector+" .buttonFinalization").on("click",function(){var t=new FormData($(".priceListForm")[0]),o=$("#inputGroupPriceListFile");t.append(o.attr("name"),o[0].files[0]),t.append("finalization",1),$.ajax({url:a.URL.store,data:t,type:"POST",contentType:!1,processData:!1,beforeSend:function beforeSend(){},success:function success(t){console.log(t),t.success&&($(".priceListTable tbody tr").remove(),$(".uploadStatusRow >.canFinish").hide(),$(".uploadStatusRow").addClass("d-none"),$(".priceListTable tbody").append(' Árlistát elmentettük.'))},error:function error(t){console.log(t.responseJSON),ajaxErrorFieldHandler(t.responseJSON.error)}})})},this.init=function(t){console.log("PriceListAdmin init called"),$.extend(a,t),console.log("Opt extended"),console.log(a),console.log("call list view Init"),r.initViewList(t)},this.getOpts=function(){return a};var d=!1;this.processCheckedPriceListResponse=function(t){d=!1,r.processCheckedPriceListResponseRows(t.rows),d?($(".uploadStatusRow >.canFinish").hide(),$(".uploadStatusRow >.canFinishError").show(),r.initErrorNavigationButton()):($(".uploadStatusRow >.canFinish").show(),$(".uploadStatusRow >.canFinishError").hide()),$(".uploadStatusRow").removeClass("d-none"),$(".containerUploadedSpinner").addClass("d-none")},this.processCheckedPriceListResponseRows=function(t){for(var o in console.log("processingRows"),t){var a=t[o],i=a.originalData;i.rowNum=a.rowNum;var c=$('template[data-name="priceListTableRow"]').html(),l=Mustache.render(c,i);$(".priceListTable tbody").append(l),$("tr[data-rownum="+a.rowNum+"]").addClass("status"+$.ucFirst(a.status)),r.processResponseRowErrors(a.error,a.rowNum),a.changed&&r.processResponseRowChanged(a.changed,a.rowNum)}},this.processResponseRowChanged=function(t,o){if(!(t.length<1)){console.log(t);var a=$("tr[data-rownum="+o+"]");for(var r in t){var i=a.find('td[data-pointer="'+r+'"]');i.addClass("bg-primary");var c=$(document.createElement("span")).text(t[r].old).addClass("fieldChanged");i.append(c)}}},this.processResponseRowErrors=function(t,o){if(!(t.length<1)&&(console.log(t),d=!0,void 0!==t.fields)){var a=$("tr[data-rownum="+o+"]");for(var r in t.fields){var i=a.find('td[data-pointer="'+r+'"]');i.addClass("bg-danger");var c=$(document.createElement("span")).text(t.fields[r]).addClass("fieldError");i.append(c)}}}},window.PriceListProfitCenterAdmin=function(t){var o={token:null,containerCssSelector:".containerPriceListProfitCenter",testMode:!1,URL:{getDataTableContent:"",getProductGroupHTML:"",index:"",show:"",edit:"",create:"",store:"",update:"",destroy:""},dataTable:{orderDirective:[1,"asc"]},onAfterInitViewDetails:function onAfterInitViewDetails(){}},a=this;this.construct=function(t,a){console.log("PriceListProfitCenterAdmin constructor called"),$.extend(o,t)},this.getOpts=function(){return o};var r={supplier:"",profitCenter:"",deliveryDate:""};this.checkRefreshPossible=function(){console.log("check need parameter");var t=!0;$.each(r,function(o,a){""===a&&(t=!1)}),t&&(a.refreshDatatable(),a.refreshProductGroup(),a.setDatatableHeaderText(""))},this.setDatatableHeaderText=function(t){$(".tableHeaderText").text(t)},this.getTreePathName=function(t){var o="",a=$(t).parents("li").toArray();for(var r in a.shift(),a.reverse(),a)$(a[r]).children("a.categoryItem").length>0&&(o+=$(a[r]).children("a.categoryItem").text()+"/");return o+=$(t).text()},this.bindProductGroupItem=function(){$(".sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable").off("click"),$(".sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable").on("click",function(){var t=$(this).data("id");i=t,a.setDatatableHeaderText(a.getTreePathName(this)),a.refreshDatatable()})},this.refreshProductGroup=function(){var t={supplierId:r.supplier,deliveryDate:r.deliveryDate},i=o.URL.getProductGroupHTML;$.ajax({url:i,data:t,type:"GET",contentType:!1,processData:!0,beforeSend:function beforeSend(){},success:function success(t){$(".sidebar-menu .productGroup").find("ul").html(t),a.bindProductGroupItem()},error:function error(t){ajaxErrorFieldHandler(t.responseJSON.error)}})},this.refreshDatatable=function(){$(".dataTableOrderProductSelect").DataTable().ajax.reload()},this.changePriceListProfitCenterParameter=function(t,o){void 0===o&&(o=$(this));var c=o.attr("name");"supplier"==c&&(i=null);var l="";"SELECT"==o.get(0).nodeName?o.select2("data").length>0&&(l=o.select2("data")[0].id):l=o.val(),r[c]!=l&&(r[c]=l,a.checkRefreshPossible())},this.init=function(t){$.extend(o,t);var r=o.containerCssSelector;$(r+" .datePickerClick").click(function(){$(r+" .datePicker").datepicker("show")}),$(".supplierSelect").on("change",a.changePriceListProfitCenterParameter),$(".profitCenterSelect").on("change",a.changePriceListProfitCenterParameter),$(".supplierSelect").select2({maximumSelectionLength:1}),$(".profitCenterSelect").select2({maximumSelectionLength:1}),$(r+" .datePicker").datepicker({dateFormat:"yy-mm-dd",minDate:new Date,onSelect:function onSelect(t,o){$(r+" .selectedDateText").text(t),$(".deliveryDatePlace").text(t.replaceAll("-",".")+"."),$(r+' input[name="deliveryDate"]').val(t),a.changePriceListProfitCenterParameter(null,$(o.input))}}),a.getDatatables(""),$(".dataTableOrderProductSelect").on("draw.dt",a.productSelectDataTableDrawDT).dataTable()},this.productSelectDataTableDrawDT=function(t){$('td:contains("*")').html(''),$("td.details-control").removeClass("details-control")};var i=null;this.getDatatables=function(t){return $(".dataTableOrderProductSelect").DataTable({language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},ajax:{url:o.URL.getDataTableContent,data:function data(t){t.supplierId=r.supplier,t.profitCenterId=r.profitCenter,t.deliveryDate=r.deliveryDate,t.groupId=i}},buttons:{buttons:[]},columnDefs:APP.OrderModule.productSelectDataTableColumnDefs(),columns:APP.OrderModule.productSelectDataTableColumn(),order:[[1,"asc"]]})}},(()=>{function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof(t)}function _createForOfIteratorHelper(t,o){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function _unsupportedIterableToArray(t,o){if(t){if("string"==typeof t)return _arrayLikeToArray(t,o);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(t,o):void 0}}(t))||o&&t&&"number"==typeof t.length){a&&(t=a);var r=0,i=function F(){};return{s:i,n:function n(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function e(t){throw t},f:i}}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 c,l=!0,d=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return l=t.done,t},e:function e(t){d=!0,c=t},f:function f(){try{l||null==a.return||a.return()}finally{if(d)throw c}}}}function _arrayLikeToArray(t,o){(null==o||o>t.length)&&(o=t.length);for(var a=0,r=Array(o);a0&&void 0!==arguments[0]?arguments[0]:{};debug("listview inicialization"),dataTableCSSSelector=a.containerCssSelector+" .dataTable";var o=$(dataTableCSSSelector+" thead th").length;APP.setOpts({datatableRowActionButtonClickCallBack:r.datatableRowActionButtonClick});var i=a.dataTable.orderDirective;void 0!==t.orderDirective&&(i=t.orderDirective),$(dataTableCSSSelector).DataTable({language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},ajax:a.URL.getDataTableContent,serverSide:!0,columnDefs:[{targets:o-1,orderable:!1,render:function render(t,o,a){return APP.datatableAddRowEditButton(0,arguments)}},{targets:1,render:function render(t,o,a){return"sort"===o?t.latinise():t}}],buttons:{buttons:["excel","pdf",{extend:"print",title:"title custom text",messageTop:"Message On Top",autoPrint:!0}]},columns:[{data:"id"},{data:"name"},{data:"hooreycaId"},{data:"productGroup"},{data:"supplierName"},{data:"price"},{data:"created_at"},null],order:i,stateSave:!0,drawCallback:function drawCallback(t){APP.datatableAddRowAction(dataTableCSSSelector)}}),debug("listview end")},this.initViewList=function(){debug("initViewSearch inicialization 1"),r.container.find("select.supplierSelect, select.profitCenterSelect, select.productGroupSelect, select.producerSelect, select.hooreycaNamesSelect, select.specialOfferSelect").select2(),r.container.find("select.productSelect").select2({placeholder:"...",allowClear:!0,ajax:{url:a.URL.getProductSearch,dataType:"json",data:function data(t){return{term:t.term||"",page:t.page||1,supplierId:r.container.find("select.supplierSelect").val()}},cache:!0}}),r.container.find(".datePickerFrom, .datePickerTo").datepicker({dateFormat:"yy-mm-dd",onSelect:function onSelect(t,o){debug(this),debug(o.input)}}),r.container.find(".datePickerClick").click(function(){debug($(this).data("action")),r.container.find('input[name="'+$(this).data("action")+'"]').datepicker("show")});var t=r.container.find(".FormSendButton");t.off("click"),t.on("click",function(){debug("FormSendButton click"),r.loadingResultContainer(),r.requestProducts()}),r.setVisibleFilters("Product"),debug("initViewSearch end")},this.loadingResultContainer=function(){debug("clearResultContainer"),debug(r.resultContainer),r.hideResultContainer(),r.container.find(".containerLoading").show()},this.hideResultContainer=function(){debug("hide containerResult"),debug(r.resultContainer),r.resultContainer.hide()},this.showResultContainer=function(){r.container.find(".containerLoading").hide(),r.resultContainer.show()},this.init=function(t,o){if(console.log("ProductAdmin init"),$.extend(a,t),a.testMode)return r.testMode();o&&(r.Product=o),r.dataTable=null,r.container=$(a.containerCssSelector),r.resultContainer=$(a.resultContainerSelector),r.initViewList()},this.initViewDetails=function(t,o){debug("**call initViewDetails ");var i=a.containerCssSelector+" .productForm";if(r.Product.picture){console.log("*****//////////////////****************"),console.log(r.Product.picture),console.log(i);var c=r.Product.picture.PublicUrl+"/"+r.Product.picture.filename;console.log(c),console.log($(i+" img.imageProduct")),$(i+" img.imageProduct").attr("src",c)}r.Product.specification&&(console.log("*****//////////////////****************"),console.log(r.Product.specification),r.Product.specification.PublicUrl,r.Product.specification.filename,r.addAttachment(r.Product.specification));var l=$(i+" button.FormSaveButton");l.off("click"),l.on("click",r.clickSaveButton)},this.addAttachment=function(t){console.log(t);var o=a.containerCssSelector+" .productForm";t.rowNum=1;var r=new Date(t.updated_at);r=r.toLocaleString("hu-HU",{}),t.date=r,t.link=t.PublicUrl+"/"+t.filename;var i=$('template[data-name="productAttachmentTableRow"]').html(),c=Mustache.render(i,t);$(o+" .attachmentTable tbody").append(c),Toast.enableTimers(!1),Toast.create("Fájl hozzáadva!",t.original_filename+" fájl hozzáadva",TOAST_STATUS.SUCCESS,5e3)},this.setVisibleFilters=function(t){for(var o in console.log("setVisibleFilters"),console.log(a.filters[t]),console.log(r.container),$(r.container).find('div[class*="filter"]').hide(),a.filters[t]){var i=a.filters[t][o];debug(i),console.log($(r.container).find(".filter_"+i)),$(r.container).find(".filter_"+i).show()}},this.c=function(t){console.log("c called"),console.log(t),console.log(r.container),console.log(r.container.find("form")),console.log(r.container.find(t))},this.formDataToDataObjectAPICall=function(t){console.log(t),console.log(r.container),console.log(r.container.find(t)),console.log(r.container.find("form")),console.log(r.container.find("form"+t)[0]);var o=new FormData(r.container.find("form"+t)[0]);return $.each(o.getAll("supplier"),function(t,a){o.append("suppliers[]",a)}),o.delete("supplier"),$.each(o.getAll("profitCenter"),function(t,a){o.append("profitCenters[]",a)}),o.delete("profitCenter"),$.each(o.getAll("productGroup"),function(t,a){o.append("productGroups[]",a)}),o.delete("productGroup"),$.each(o.getAll("product"),function(t,a){o.append("products[]",a)}),o.delete("product"),$.each(o.getAll("producer"),function(t,a){o.append("producers[]",a)}),o.delete("producer"),$.each(o.getAll("hooreycaName"),function(t,a){o.append("hooreycaNames[]",a)}),o.delete("hooreycaName"),o},this.getAjaxDataJson=function(){var t=r.formDataToDataObjectAPICall(".ProductListForm");console.log("======================");var o,a=_createForOfIteratorHelper(t.entries());try{for(a.s();!(o=a.n()).done;){var i=o.value;console.log(i[0]+", "+i[1])}}catch(t){a.e(t)}finally{a.f()}var c={};return t.forEach(function(t,o){Reflect.has(c,o)?(Array.isArray(c[o])||(c[o]=[c[o]]),c[o].push(t)):c[o]=t}),JSON.stringify(c)},this.requestProducts=function(){var t=a.URL.getDataTableContent;debug(t),ajaxDataJson=r.getAjaxDataJson(),console.log(ajaxDataJson),dataTableCSSSelector=a.containerCssSelector+" .dataTable",console.log(dataTableCSSSelector);var o=$(dataTableCSSSelector+" thead th").length;APP.setOpts({datatableRowActionButtonClickCallBack:r.datatableRowActionButtonClick});var i=a.dataTable.orderDirective;r.dataTable?(console.log("XXXXXXXXXXXXXXXXXXXX van Datatable"),r.dataTable.draw()):(console.log("XXXXXXXXXXXXXXXXXXXX Nincs Datatable"),r.dataTable=$(dataTableCSSSelector).DataTable({language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},ajax:{url:a.URL.getDataTableContent,data:function data(t){return console.log("---******----"),console.log(APP.ProductAdmin.getAjaxDataJson()),$.extend({},t,{ajaxData:APP.ProductAdmin.getAjaxDataJson})},type:"GET"},serverSide:!0,columnDefs:[{targets:o-1,orderable:!1,render:function render(t,o,a){return APP.datatableAddRowEditButton(0,arguments)}},{targets:1,render:function render(t,o,a){return"sort"===o?t.latinise():t}}],buttons:{buttons:["excel","pdf",{extend:"print",title:"title custom text",messageTop:"Message On Top",autoPrint:!0}]},columns:[{data:"id"},{data:"name"},{data:"hooreycaId"},{data:"productGroup"},{data:"supplierName"},{data:"price"},{data:"created_at"},null],order:i,stateSave:!0,drawCallback:function drawCallback(t){APP.datatableAddRowAction(dataTableCSSSelector),r.showResultContainer(),console.log("drawCallback")}}))},this.processResponse=function(){},this.clickSaveButton=function(t){debug("Save clicked");var o=a.containerCssSelector+" .productForm";if(t.preventDefault(),!1===$(o)[0].checkValidity())return console.log("validaton false"),void t.stopPropagation();console.log("validaton ok");var i=r.formDataToDataObjectAPICall(".productForm"),c=a.URL.store,l="POST";r.Product.id&&(c=a.URL.update.replace("%id%",r.Product.id),i.append("_method","PUT")),debug(l),debug(i),$.ajax({url:c,data:i,type:l,contentType:!1,processData:!1,headers:{"X-CSRF-TOKEN":a.token},success:function success(t){debug(t),1==t.success&&(a.dataTable.orderDirective=[0,"desc"],Toast.create("Sikeres rögzítés!",i.get("name")+" nevű termék elmentve",TOAST_STATUS.SUCCESS,5e3))}})}}})(),(()=>{function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof(t)}function _defineProperties(t,o){for(var a=0;a0||!0===$(this).data("required"))&&$(this).addClass("is-invalid")},oncomplete:function oncomplete(){$(this).removeClass("is-invalid"),$(this).addClass("is-valid")},oncleared:function oncleared(){console.log("cleared"),$(this).removeClass("is-invalid")}}),$(l+" button.FormSaveButton").off("click"),$(l+" button.FormSaveButton").on("click",r.clickSaveButton),debug("**end initViewDetails ")},this.setDetailsViewData=function(){debug("setDetailsViewData");var t=a.containerCssSelector+" .profitCenterForm";$.each(["name","hooreycaId","nameId","email","postCode","city","street","phone","mobil"],function(){void 0!==r.ProfitCenter[this]&&$(t+" input[name="+this+"]").val(r.ProfitCenter[this])}),void 0!==r.ProfitCenter.note&&$(t+" textarea[name=note]").val(r.ProfitCenter.note),$(t+" *[data-toggle=canSee][data-title="+r.ProfitCenter.canSee+"]").click(),$(t+" *[data-toggle=hooreycaDataActive][data-title="+r.ProfitCenter.hooreycaDataActive+"]").click(),void 0!==r.ProfitCenter.logoFile&&r.ProfitCenter.logoFile&&$(t+" img.imageLogo").attr("src",r.ProfitCenter.logoFile),$(t+" *[data-toggle=addressEqual][data-title="+r.ProfitCenter.addressEqual+"]").click(),$(t+" *[data-toggle=multiAddress][data-title="+r.ProfitCenter.multiAddress+"]").click();var o=[];$.each(r.ProfitCenter.suppliers,function(){o.push(this.name)}),$.each(o,function(){$('input[value="'+$.escapeSelector(this)+'"]').prop("checked",!0)})},this.resetContactTable=function(){$(l+" .contactTable tbody tr").remove(),r.renderContact()},this.renderContact=function(){var t=1;console.log("renderingContacts"),$.each(r.ProfitCenter.getData("contact"),function(){this.rowNum=t;var o=$('template[data-name="profitCenterContactTableRow"]').html(),a=Mustache.render(o,this);$(".contactTable tbody").append(a),t++}),r.bindContactClickAction()},this.bindContactClickAction=function(){$(".contactTable .buttonDelete").unbind("click"),$(".contactTable .buttonDelete").bind("click",r.contactDeleteClick),$(".contactTable .buttonEdit").unbind("click"),$(".contactTable .buttonEdit").bind("click",r.contactEditClick)},this.contactDeleteClick=function(t){var o=$(this).closest("tr"),a=o.find("input[name=contactId]").val();console.log(a),r.ProfitCenter.contact=r.ProfitCenter.contact.filter(function(t,o,r){return t.id!==1*a}),console.log(r.ProfitCenter.contact),o.remove(),r.resetContactTable()},this.getContactPopupWorkflow=function(){return i},this.setContactPopupWorkflow=function(t){i=t},this.contactEditClick=function(t){console.log(this);var o=$(this).closest("tr").find("input[name=contactId]").val();console.log(o),r.setContactPopupWorkflow("edit"),APP.ContactPopUp.loadData(o)},this.contactAction=function(t){console.log("nah most kellene meg valamit csinalni."),"new"==r.getContactPopupWorkflow()?r.addContact(t):"edit"==r.getContactPopupWorkflow()&&r.editContact(t.id,t)},this.addContact=function(t){r.ProfitCenter.contact.push(t),t.rowNum=r.ProfitCenter.contact.length;var o=$('template[data-name="profitCenterContactTableRow"]').html(),a=Mustache.render(o,t);$(l+" .contactTable tbody").append(a),r.bindContactClickAction(),Toast.enableTimers(!1),Toast.create("Kapcsolat tartó hozzáadva!",t.name+" nevű kapocsolattartó hozzáadva",TOAST_STATUS.SUCCESS,5e3)},this.editContact=function(t,o){var a=[];$.each(r.ProfitCenter.getData("contact"),function(r){this.id==t?a.push(o):a.push(this)}),r.ProfitCenter.contact=a,r.resetContactTable(),Toast.create("Kapcsolat adatai módosítva!",o.name+" nevű kapocsolattartó módosítva",TOAST_STATUS.SUCCESS,5e3)},this.resetAddressTable=function(){$(l+" .addressTable tbody tr").remove(),r.renderAddress()},this.renderAddress=function(){var t=1;console.log("renderingAddress"),$.each(r.ProfitCenter.getData("address"),function(){var o=this;o.rowNum=t;var a=$('template[data-name="profitCenterAddressTableRow"]').html();debug(o);var r=Mustache.render(a,o);$(".addressTable tbody").append(r),t++}),r.bindAddressClickAction()},this.bindAddressClickAction=function(){$(".addressTable .buttonDelete").unbind("click"),$(".addressTable .buttonDelete").bind("click",r.addressDeleteClick),$(".addressTable .buttonEdit").unbind("click"),$(".addressTable .buttonEdit").bind("click",r.addressEditClick)},this.addressDeleteClick=function(t){var o=$(this).closest("tr"),a=o.find('input[name="addressId[]"]').val();console.log(a),r.ProfitCenter.address=r.ProfitCenter.address.filter(function(t,o,r){if(t.id!=a)return!0}),console.log(r.ProfitCenter.address),o.remove(),r.resetAddressTable()},this.getAddressPopupWorkflow=function(){return c},this.setAddressPopupWorkflow=function(t){c=t},this.addressEditClick=function(t){console.log(this);var o=$(this).closest("tr").find('input[name="addressId[]"]').val();console.log(o),r.setAddressPopupWorkflow("edit"),APP.AddressPopUp.loadData(o)},this.addressAction=function(t){console.log("nah most kellene meg valamit csinalni."),"new"==r.getAddressPopupWorkflow()?r.addAddress(t):"edit"==r.getAddressPopupWorkflow()&&r.editAddress(t.id,t)},this.addAddress=function(t){r.ProfitCenter.address.push(t),t.rowNum=r.ProfitCenter.address.length;var o=$('template[data-name="profitCenterAddressTableRow"]').html(),a=Mustache.render(o,t);$(l+" .addressTable tbody").append(a),r.bindAddressClickAction(),Toast.enableTimers(!1),Toast.create("Cím hozzáadva!",t.street+" hozzáadva",TOAST_STATUS.SUCCESS,5e3)},this.editAddress=function(t,o){var a=[];$.each(r.ProfitCenter.getData("address"),function(r){this.id==t?a.push(o):a.push(this)}),r.ProfitCenter.address=a,r.resetAddressTable(),Toast.create("cím adatai módosítva!",o.street+" módosítva",TOAST_STATUS.SUCCESS,5e3)},this.initViewList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};debug("listview inicialization"),d=a.containerCssSelector+" .dataTable";var o=$(d+" thead th").length;APP.setOpts({datatableActionButtonClickCallBack:r.clickNew,datatableRowActionButtonClickCallBack:r.datatableRowActionButtonClick});var i=a.dataTable.orderDirective;void 0!==t.orderDirective&&(i=t.orderDirective),$(d).DataTable({language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},ajax:a.URL.getDataTableContent,columnDefs:[{targets:o-1,render:function render(t,o,a){var r=APP.datatableAddRowTrashButton(0,arguments);return r+=APP.datatableAddRowEditButton(0,arguments)}},{targets:1,render:function render(t,o,a){return"sort"===o?t.latinise():t}}],buttons:{buttons:["excel","pdf",{extend:"print",title:"title custom text",messageTop:"Message On Top",autoPrint:!0},{text:"Új felvitele",className:"btn btn-success newItem",attr:{data:"newItem"},init:function init(t,o,a){$(o).removeClass("ui-button")},action:function action(t,o,a,r){APP.datatableActionButtonClickCallBack(arguments)}}]},columns:[{data:"id"},{data:"name"},{data:"hooreycaId"},{data:"nameId"},{data:"created_at"},null],order:i,drawCallback:function drawCallback(t){APP.datatableAddRowAction(d)}}),debug("listview end")},this.datatableRowActionButtonClick=function(t){debug("datatableRowActionButtonClick");var o=$(t[0].currentTarget),a=$(d).DataTable().row(o.parents("tr")).data(),i="datatableRowAction"+o.data("buttontype").capitalize();if("function"==typeof r[i])return r[i](a,o)},this.datatableRowActionEdit=function(t,o){console.log("datatableRowActionEdit Called");var i=a.URL.edit.replace("%id%",t.id);APP.loadMainContent(i,r.initViewDetails),console.log("datatableRowActionEdit End")},this.datatableRowActionDelete=function(t,o){console.log("datatableRowActionDelete Called");var r=$(d).DataTable().row(o.parents("tr")),i={},c=a.URL.destroy.replace("%id%",t.id);i._token=$("input[name=_token]").val(),$.ajax({url:c,data:i,method:"DELETE",success:function success(t){1==t.success&&r.remove().draw()}})},this.clickSaveButton=function(t){if(debug("Save clicked"),t.preventDefault(),debug(l),debug($(l)),!1===$(l)[0].checkValidity())return console.log("validaton false"),void t.stopPropagation();console.log("validaton ok");var o=r.formDataToDataObjectAPICall(l),i=a.URL.store;r.ProfitCenter.id&&(i=a.URL.update.replace("%id%",r.ProfitCenter.id),o.append("_method","PUT")),console.table(Object.fromEntries(o)),$.ajax({url:i,data:o,type:"POST",contentType:!1,processData:!1,headers:{"X-CSRF-TOKEN":$('input[name="_token"]').val()},success:function success(t){debug(t),1==t.success&&(a.dataTable.orderDirective=[0,"desc"],Toast.create("Sikeres rögzítés!",o.get("name")+" nevű beszálllító elmentve",TOAST_STATUS.SUCCESS,5e3),APP.loadMainContent(a.URL.index+"?init=0",r.initViewList))}})},this.formDataToDataObjectAPICall=function(t){var o=new FormData($(t)[0]);return $.each(o.getAll("contactId"),function(t,a){o.append("contactId[]",a)}),o.append("_token",$("input[name=_token]").val()),$(t+" input[data-inputmask]").each(function(){var t=$(this).attr("name");o.get(t)&&o.set(t,o.get(t).replace(/[_ ]+$/g,""))}),$.each(o.getAll("supplier"),function(t,a){o.append("supplier[]",a)}),o},this.construct(t,o)}})(),(()=>{function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof(t)}function _defineProperties(t,o){for(var a=0;a0||!0===$(this).data("required"))&&$(this).addClass("is-invalid")},oncomplete:function oncomplete(){$(this).removeClass("is-invalid"),$(this).addClass("is-valid")},oncleared:function oncleared(){console.log("cleared"),$(this).removeClass("is-invalid")}}),$("form.supplierForm button.FormSaveButton").off("click"),$("form.supplierForm button.FormSaveButton").on("click",i.clickSaveButton),i.setDetailsViewData(),$(".productCategorySelect").select2(),$(".serviceSelect").select2({tags:!0,createTag:function createTag(t){var o=$.trim(t.term);return""===o?null:{id:o,text:o,newTag:!0}}}),$("input[name=logoFile]").change(function(){setImageFromLocal(this,a.containerCssSelector+" .imageLogo")}),$("form.supplierForm .profitCenterSelectCheckboxAll").off("click"),$("form.supplierForm .profitCenterSelectCheckboxAll").on("click",function(){$("form.supplierForm input.profitCenterSelectCheckbox").prop("checked",$(this).is(":checked"))}),i.renderAttachment(),i.initFileAttachmentFeature(),debug("**end initViewDetails ")},this.selectedUploadFileToggle=function(t){t?($(".containerFileUpload").addClass("d-none"),t[0].files[0]&&$(".containerUploadedFileName").text(t[0].files[0].name),$(".containerFileUploadStarted").removeClass("d-none"),$(".containerUploadedSpinner").removeClass("d-none")):($(".containerUploadedFileName").text(""),$(".custom-file-label.selected").text(""),$(".containerFileUploadStarted").addClass("d-none"),$(".uploadStatusRow").addClass("d-none"),$(".containerFileUpload").removeClass("d-none"))},this.initFileAttachmentFeature=function(){console.log("-------initFileAttachmentFeature-----------"),i.Supplier.id&&($(".containerFileUpload").removeClass("d-none"),$(".containerFileUploadNone").addClass("d-none")),$(a.containerCssSelector+" .buttonUpload").off("click"),$(a.containerCssSelector+" .buttonUpload").on("click",function(){console.group("-------buttonUpload-----------");var t=$("#inputGroupAttacheFile");if(t[0].files.length<1)Toast.create("Hiba!","Vállaszon ki fájlt!",TOAST_STATUS.DANGER,1e4);else{console.log($(a.containerCssSelector).find("form.supplierForm")[0]);var o=new FormData($(a.containerCssSelector).find("form.supplierForm")[0]);o.append(t.attr("name"),t[0].files[0]),i.selectedUploadFileToggle(t);var r=a.URL.attachFile.replace("%id%",i.Supplier.id);console.groupEnd(),$.ajax({url:r,data:o,type:"POST",contentType:!1,processData:!1,beforeSend:function beforeSend(){},success:function success(t){console.log(t),1==t.success&&(i.addAttachment(t.data.attachment),i.selectedUploadFileToggle())},error:function error(t){console.log(t.responseJSON),i.selectedUploadFileToggle(),ajaxErrorFieldHandler(t.responseJSON.error)}})}})},this.clickNew=function(){debug("clickNew"),APP.loadMainContent(a.URL.create,i.clickNewCallBack)},this.clickNewCallBack=function(){debug("callbackNew"),i.Supplier=new window.Supplier,i.initViewDetails()},this.datatableRowActionEdit=function(t,o){console.log("datatableRowActionEdit Called");var r=a.URL.edit.replace("%id%",t.id);APP.loadMainContent(r,i.initViewDetails),console.log("datatableRowActionEdit End")},this.clickOrderDeleteConfirmed=function(t){debug("clickSupplierDeleteConfirmed"),debug(t),debug(t.data),$("#dialogModal").modal("hide");var o={};o._token=a.token;var r=a.URL.destroy.replace("%id%",t.data.id);o._token=$("input[name=_token]").val(),console.log(r),console.log(o);var c=$(dataTableCSSSelector).DataTable().row(i.dadatatableRowActionCallerNode.parents("tr"));$.ajax({url:r,data:o,method:"DELETE",success:function success(t){1==t.success&&(c.remove().draw(),i.dadatatableRowActionCallerNode=!1)}})},this.datatableRowActionDelete=function(t,o){console.log("datatableRowActionDelete Called"),i.dadatatableRowActionCallerNode=o,$("#dialogModal").on("show.bs.modal",function(o){var a=$(this);a.find(".modal-title").text("Megerősítés "),a.find(".modal-body").text("Biztosan törli a beszállítót?"),a.find(".buttonYes").off("click"),a.find(".buttonYes").on("click",{id:t.id},i.clickOrderDeleteConfirmed)}),$("#dialogModal").modal("show")},this.datatableRowActionButtonClick=function(t){debug("datatableRowActionButtonClick");var o=$(t[0].currentTarget),a=$(dataTableCSSSelector).DataTable().row(o.parents("tr")).data(),r="datatableRowAction"+o.data("buttontype").capitalize();if("function"==typeof i[r])return i[r](a,o)},this.initViewList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};debug("listview inicialization"),dataTableCSSSelector=a.containerCssSelector+" .dataTable";var o=$(dataTableCSSSelector+" thead th").length;APP.setOpts({datatableActionButtonClickCallBack:i.clickNew,datatableRowActionButtonClickCallBack:i.datatableRowActionButtonClick});var r=a.dataTable.orderDirective;void 0!==t.orderDirective&&(r=t.orderDirective),$(dataTableCSSSelector).DataTable({language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},ajax:a.URL.getDataTableContent,columnDefs:[{targets:o-1,render:function render(t,o,a){var r=APP.datatableAddRowTrashButton(0,arguments);return r+=APP.datatableAddRowEditButton(0,arguments)}},{targets:1,render:function render(t,o,a){return"sort"===o?t.latinise():t}}],buttons:{buttons:["excel","pdf",{extend:"print",title:"title custom text",messageTop:"Message On Top",autoPrint:!0},{text:"Új felvitele",className:"btn btn-success newItem",attr:{data:"newItem"},init:function init(t,o,a){$(o).removeClass("ui-button")},action:function action(t,o,a,r){APP.datatableActionButtonClickCallBack(arguments)}}]},columns:[{data:"id"},{data:"name"},{data:"hooreycaId"},{data:"nameId"},{data:"created_at"},null],order:r,stateSave:!0,drawCallback:function drawCallback(t){APP.datatableAddRowAction(dataTableCSSSelector)}}),debug("listview end")},this.autofillDetails=function(){debug("nyeresre allunk");var t=getRandomInt(9999);$("input[name=name]").val("Beszalító"+t),$("input[name=hooreycaId]").val("hb"+t),$("input[name=nameId]").val("be"+t),$("input[name=orderEmail]").val("kapcsolat"+t+"@beszallito.hu"),$("input[name=orderEmail2]").val("informacio"+t+"@beszallito.hu"),$("input[name=address]").val("8989 Supplier utca "+t),$("input[name=mailingAddress]").val("8989 Postai út"+t),$("input[name=phone]").val("+36301234567"),$("input[name=fax]").val("36308889999"),$("input[name=customerServicePhone]").val("+36761234444"),$("textarea[name=note]").val("Megjegyzem "+t)},this.testMode=function(){console.debug("!!!!testmode !!!!"),i.Supplier=new window.Supplier({contact:[{id:2},{id:3}]}),a.onAfterInitViewDetails=i.autofillDetails,APP.loadMainContent(a.URL.create,i.initViewDetails)},this.init=function(t,o){if($.extend(a,t),a.testMode)return i.testMode();o&&(i.Supplier=o),i.initViewList()},this.renderAttachment=function(){var t=1;console.log("renderingAttachment"),$.each(i.Supplier.getData("attachment"),function(){var o=this;o.rowNum=t,date=new Date(o.created_at),o.date=date.toLocaleString(),o.link=o.PublicUrl+"/"+o.filename;var a=$('template[data-name="supplierAttachmentTableRow"]').html(),r=Mustache.render(a,o);$(".attachmentTable tbody").append(r),t++}),i.bindAttachmentClickAction()},this.addAttachment=function(t){console.log(t);var o=a.containerCssSelector+" .supplierForm";i.Supplier.attachment.push(t),t.rowNum=i.Supplier.attachment.length;var r=$('template[data-name="supplierAttachmentTableRow"]').html(),c=Mustache.render(r,t);$(o+" .attachmentTable tbody").append(c),i.bindContactClickAction(),Toast.enableTimers(!1),Toast.create("Fájl hozzáadva!",t.original_filename+" fájl hozzáadva",TOAST_STATUS.SUCCESS,5e3)},this.resetContactTable=function(){$(".contactTable tbody tr").remove(),i.renderContact()},this.renderContact=function(){var t=1;console.log("renderingContacts"),$.each(i.Supplier.getData("contact"),function(){this.rowNum=t;var o=$('template[data-name="supplierContactTableRow"]').html(),a=Mustache.render(o,this);$(".contactTable tbody").append(a),t++}),i.bindContactClickAction()},this.bindContactClickAction=function(){var t=$(".contactTable .buttonDelete");t.unbind("click"),t.bind("click",i.contactDeleteClick),(t=$(".contactTable .buttonEdit")).unbind("click"),t.bind("click",i.contactEditClick)},this.bindAttachmentClickAction=function(){var t=$(".attachmentTable .buttonDelete");t.unbind("click"),t.bind("click",i.attachmentDeleteClick)},this.attachmentDeleteClick=function(t){var o=$(this).closest("tr").find("input[name=attachmentId]").val(),r=a.URL.detachFile.replace("%id%",i.Supplier.id),c={};c._token=$('input[name="_token"]').val(),c.attachemntId=o,$.ajax({url:r,data:c,type:"POST",beforeSend:function beforeSend(){},success:function success(t){console.log(t),1==t.success&&(i.Supplier.attachment=i.Supplier.attachment.filter(function(o,a,r){return o.id!==1*t.data.attachment.id}),i.resetAttachmentTable())},error:function error(t){console.log(t.responseJSON),i.selectedUploadFileToggle(),ajaxErrorFieldHandler(t.responseJSON.error)}})},this.resetAttachmentTable=function(){$(".attachmentTable tbody tr").remove(),i.renderAttachment()},this.contactDeleteClick=function(t){var o=$(this).closest("tr"),a=o.find("input[name=contactId]").val();i.Supplier.contact=i.Supplier.contact.filter(function(t,o,r){return t.id!==1*a}),o.remove(),i.resetContactTable()},i.getContactPopupWorkflow=function(){return c},i.setContactPopupWorkflow=function(t){c=t},this.contactEditClick=function(t){var o=$(this).closest("tr").find("input[name=contactId]").val();i.setContactPopupWorkflow("edit"),APP.ContactPopUp.loadData(o)},this.getSupplier=function(){return i.Supplier},this.contactAction=function(t){console.log("nah most kellene meg valamit csinalni."),"new"==i.getContactPopupWorkflow()?i.addContact(t):"edit"==i.getContactPopupWorkflow()&&i.editContact(t.id,t)},this.editContact=function(t,o){var a=[];$.each(i.Supplier.getData("contact"),function(r){this.id==t?a.push(o):a.push(this)}),i.Supplier.contact=a,i.resetContactTable(),Toast.create("Kapcsolat adatai módosítva!",o.name+" nevű kapocsolattartó módosítva",TOAST_STATUS.SUCCESS,5e3)},this.addContact=function(t){i.Supplier.contact.push(t),t.rowNum=i.Supplier.contact.length;var o=$('template[data-name="supplierContactTableRow"]').html(),a=Mustache.render(o,t);$(".contactTable tbody").append(a),i.bindContactClickAction(),Toast.enableTimers(!1),Toast.create("Kapcsolat tartó hozzáadva!",t.name+" nevű kapocsolattartó hozzáadva",TOAST_STATUS.SUCCESS,5e3)},this.construct(t,o)}})(); +//# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index 76234ad..92a4b80 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -1,3 +1,3 @@ /*! For license information please see app.js.LICENSE.txt */ -(()=>{var t,n={988(t,n,e){function r(t,n){for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:Number.MAX_SAFE_INTEGER,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return debug(t),debug(n),Math.floor(Math.random()*(t-n+1))+n},window.setImageFromLocal=function(t,n){if(t.files&&t.files[0]){var e=new FileReader;e.onload=function(t){$(n).attr("src",t.target.result)},e.readAsDataURL(t.files[0])}},e(854),$(function(){window.history&&window.history.pushState&&(window.history.pushState("",null,window.location.href),$(window).on("popstate",function(t){window.history.pushState("",document.title,window.location.href),t.stopPropagation()}))}),window.initRadioButtons=function(t){var n={onChange:function(t,n){}};$.extend(n,t);var e=$(".customRadioBtnGroup .active").data("title"),r=$(".customRadioBtnGroup .active").data("toggle");$("input[name="+r+"]").prop("value",e),$(".customRadioBtnGroup a").unbind("click"),$(".customRadioBtnGroup a").bind("click",function(){var t=$(this).data("title"),e=$(this).data("toggle");$("input[name="+e+"]").prop("value",t),$('a[data-toggle="'+e+'"]').not('[data-title="'+t+'"]').removeClass("active").addClass("notActive"),$('a[data-toggle="'+e+'"][data-title="'+t+'"]').removeClass("notActive").addClass("active"),n.onChange(t,e)})},$.extend(!0,$.fn.dataTable.defaults,{language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},lengthMenu:[[10,25,50,-1],["10 sor","25 sor","50 sor","Összes"]],buttons:{dom:{button:{className:"fg-button ui-button dataTableHeaderButtons"}}},dom:'<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr"lBfr>t<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br"ip>'}),Inputmask.extendDefinitions({x:{validator:"[.,-áéíóöőúàèìòùüűÁÉÍÓÖŐÚÀÈÌÒÙÜŰA-Za-z0-9 ]"}}),Toast.enableTimers(!1),$.fn.select2.defaults.set("language","jp"),window.select2CreateTag=function(t){var n=$.trim(t.term),e=!1;return $("#keywords option").length>0?($("#keywords option").each(function(){if($(this).text().toUpperCase()==n.toUpperCase())return e=!0,!1;e=!1}),e?null:{id:t.term,text:t.term,newTag:!0}):{id:t.term,text:t.term,newTag:!0}},window.ajaxErrorHandler=function(t,n,e){debug(this),debug(t),debug(n),debug(e),t.responseJSON.errors?"jsonapi"in t.responseJSON?ajaxErrorFieldHandlerJsonAPI(t.responseJSON.errors):ajaxErrorFieldHandler(t.responseJSON.errors):404==t.status?ajaxErrorFieldHandler({detail:"Nincs ilyen elem."}):ajaxErrorFieldHandler({detail:"Általános hiba."})},window.ajaxErrorFieldHandlerJsonAPI=function(t,n){var e="",r="Hiba";console.error(t),$.each(t,function(t,n){console.error(n),r="Hiba",e="","title"in n&&(r=n.title),"detail"in n&&(e+="
"+n.detail+"
"),Toast.create(r,e,TOAST_STATUS.DANGER,1e4)})},window.ajaxErrorFieldHandler=function(t,n){var e="";$.each(t,function(t,n){e+="
"+n+"
"}),Toast.create("Hiba!",e,TOAST_STATUS.DANGER,1e4)},$.ajaxSetup({error:ajaxErrorHandler}),$.datepicker._updateDatepicker_original=$.datepicker._updateDatepicker,$.datepicker._updateDatepicker=function(t){$.datepicker._updateDatepicker_original(t);var n=this._get(t,"afterShow");n&&n.apply(t.input?t.input[0]:null)},window.EmegrendelesDefaults={datatableActionButtonClickCallBack:function(){},datatableAddRowTrashButton:function(t,n){return''},datatableAddRowEditButton:function(t){var n="Adatok";return void 0!==t[1].title&&(n=t[1].title),''},datatableAddRowViewButton:function(t,n){return''},datatableAddRowAttachmentButton:function(t,n){return''},datatableCustomHeadButtonClickCallBack:function(t){console.log(t)},afterLoadMainContent:function(t){console.log(t)}},"undefined"==typeof DataModel){var u=function(){return t=function t(n,e){var r,i,u;!function(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}(this,t),r=this,u={active:!1},(i=o(i="Opts"))in r?Object.defineProperty(r,i,{value:u,enumerable:!0,configurable:!0,writable:!0}):r[i]=u,$.extend(this,n),$.extend(this.Opts,e)},(n=[{key:"setData",value:function(t){$.extend(this,t)}},{key:"getData",value:function(t){return t?this[t]:this}}])&&r(t.prototype,n),e&&r(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n,e}();window.DataModel=u}window.Emegrendeles=function(t){var n={myVar:"Emegrendeles value",datatableAddRowTrashButton:{},datatableAddRowEditButton:{},datatableActionButtonClickCallBack:{},datatableRowActionButtonClickCallBack:{},datatableCustomHeadButtonClickCallBack:{},afterLoadMainContent:{},Url:{}},e=this;this.construct=function(t){console.log(this.constructor.name+" constructor called"),$.extend(n,window.EmegrendelesDefaults,t)},this.setOpts=function(t){$.extend(n,t)},this.getOpts=function(){return n},this.datatableAddRowTrashButton=function(){return n.datatableAddRowTrashButton(arguments)},this.datatableAddRowEditButton=function(){return n.datatableAddRowEditButton(arguments)},this.datatableAddRowViewButton=function(){return n.datatableAddRowViewButton(arguments)},this.datatableAddRowAttachmentButton=function(){return n.datatableAddRowAttachmentButton(arguments)},this.afterLoadMainContent=function(){return n.afterLoadMainContent(arguments)},this.datatableActionButtonClickCallBack=function(){return n.datatableActionButtonClickCallBack(arguments)},this.datatableRowActionButtonClickCallBack=function(){return n.datatableRowActionButtonClickCallBack(arguments)},this.datatableAddRowAction=function(t){t&&($(t+" tr button").off("click"),$(t+" tr button").on("click",APP.datatableRowActionButtonClickCallBack))},this.datatableCustomHeadButtonClickCallBack=function(){return n.datatableCustomHeadButtonClickCallBack(arguments)},this.myPublicMethod=function(){console.log(n),r()},this.setApiToken=function(t){e.ApiToken=t},this.getApiToken=function(){return e.ApiToken};var r=function(){console.log("accessed private method")};this.setActiveNavBarItem=function(t){return $(".speedButtonNavBar li").removeClass("selected"),$(".speedButtonNavBar li.iconholderModul"+t).addClass("selected"),this},this.getActiveNavBarItem=function(){return $(".speedButtonNavBar .selected").find("a").data("name")},this.clearArchiveModuleDataTableState=function(){null!=APP.OrderArchiveModule&&(console.log("APP.OrderArchiveModule"),console.log("clear"),APP.OrderArchiveModule.dataTable.state.clear())},this.navBarItemBeforepost=function(){console.log("navBarItemBeforepost"),"activeOrder"!==e.getActiveNavBarItem()&&e.clearArchiveModuleDataTableState()},this.navBarItemAfterPost=function(){},this.initNavBar=function(){$(".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])").bind("click",function(t){console.log($(this).data().name),$(this).data("big-icon")?$(".speedButtonNavBar").removeClass("smallicons"):$(".speedButtonNavBar").addClass("smallicons"),e.setActiveNavBarItem($(this).data().name),t.preventDefault()}),$(".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])").ajaxlink({target:$(".mainContent"),ajaxtype:"GET",afterpost:e.navBarItemAfterPost,beforepost:e.navBarItemBeforepost}),$(".speedButtonNavBar a[data-target=_blank], .speedButtonNavBar a[data-no-ajax]").bind("click",function(){e.clearArchiveModuleDataTableState()})},this.loadMainContent=function(t,n,r){r?(console.log("van callback"),console.log(r)):r=e.afterLoadMainContent,$(".mainContent").load(t,n,r)},this.construct(t)},window.APP={},$(document).ready(function(){console.log("ready doc"),Mustache.tags=["[[","]]"]})},213(t,n,e){window._=e(543),window.axios=e(425),window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"},854(){var t={latin_map:{Á:"A",Ă:"A",Ắ:"A",Ặ:"A",Ằ:"A",Ẳ:"A",Ẵ:"A",Ǎ:"A",Â:"A",Ấ:"A",Ậ:"A",Ầ:"A",Ẩ:"A",Ẫ:"A",Ä:"A",Ǟ:"A",Ȧ:"A",Ǡ:"A",Ạ:"A",Ȁ:"A",À:"A",Ả:"A",Ȃ:"A",Ā:"A",Ą:"A",Å:"A",Ǻ:"A",Ḁ:"A",Ⱥ:"A",Ã:"A",Ꜳ:"AA",Æ:"AE",Ǽ:"AE",Ǣ:"AE",Ꜵ:"AO",Ꜷ:"AU",Ꜹ:"AV",Ꜻ:"AV",Ꜽ:"AY",Ḃ:"B",Ḅ:"B",Ɓ:"B",Ḇ:"B",Ƀ:"B",Ƃ:"B",Ć:"C",Č:"C",Ç:"C",Ḉ:"C",Ĉ:"C",Ċ:"C",Ƈ:"C",Ȼ:"C",Ď:"D",Ḑ:"D",Ḓ:"D",Ḋ:"D",Ḍ:"D",Ɗ:"D",Ḏ:"D",Dz:"D",Dž:"D",Đ:"D",Ƌ:"D",DZ:"DZ",DŽ:"DZ",É:"E",Ĕ:"E",Ě:"E",Ȩ:"E",Ḝ:"E",Ê:"E",Ế:"E",Ệ:"E",Ề:"E",Ể:"E",Ễ:"E",Ḙ:"E",Ë:"E",Ė:"E",Ẹ:"E",Ȅ:"E",È:"E",Ẻ:"E",Ȇ:"E",Ē:"E",Ḗ:"E",Ḕ:"E",Ę:"E",Ɇ:"E",Ẽ:"E",Ḛ:"E",Ꝫ:"ET",Ḟ:"F",Ƒ:"F",Ǵ:"G",Ğ:"G",Ǧ:"G",Ģ:"G",Ĝ:"G",Ġ:"G",Ɠ:"G",Ḡ:"G",Ǥ:"G",Ḫ:"H",Ȟ:"H",Ḩ:"H",Ĥ:"H",Ⱨ:"H",Ḧ:"H",Ḣ:"H",Ḥ:"H",Ħ:"H",Í:"I",Ĭ:"I",Ǐ:"I",Î:"I",Ï:"I",Ḯ:"I",İ:"I",Ị:"I",Ȉ:"I",Ì:"I",Ỉ:"I",Ȋ:"I",Ī:"I",Į:"I",Ɨ:"I",Ĩ:"I",Ḭ:"I",Ꝺ:"D",Ꝼ:"F",Ᵹ:"G",Ꞃ:"R",Ꞅ:"S",Ꞇ:"T",Ꝭ:"IS",Ĵ:"J",Ɉ:"J",Ḱ:"K",Ǩ:"K",Ķ:"K",Ⱪ:"K",Ꝃ:"K",Ḳ:"K",Ƙ:"K",Ḵ:"K",Ꝁ:"K",Ꝅ:"K",Ĺ:"L",Ƚ:"L",Ľ:"L",Ļ:"L",Ḽ:"L",Ḷ:"L",Ḹ:"L",Ⱡ:"L",Ꝉ:"L",Ḻ:"L",Ŀ:"L",Ɫ:"L",Lj:"L",Ł:"L",LJ:"LJ",Ḿ:"M",Ṁ:"M",Ṃ:"M",Ɱ:"M",Ń:"N",Ň:"N",Ņ:"N",Ṋ:"N",Ṅ:"N",Ṇ:"N",Ǹ:"N",Ɲ:"N",Ṉ:"N",Ƞ:"N",Nj:"N",Ñ:"N",NJ:"NJ",Ó:"O",Ŏ:"O",Ǒ:"O",Ô:"O",Ố:"O",Ộ:"O",Ồ:"O",Ổ:"O",Ỗ:"O",Ö:"O",Ȫ:"O",Ȯ:"O",Ȱ:"O",Ọ:"O",Ő:"O",Ȍ:"O",Ò:"O",Ỏ:"O",Ơ:"O",Ớ:"O",Ợ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ȏ:"O",Ꝋ:"O",Ꝍ:"O",Ō:"O",Ṓ:"O",Ṑ:"O",Ɵ:"O",Ǫ:"O",Ǭ:"O",Ø:"O",Ǿ:"O",Õ:"O",Ṍ:"O",Ṏ:"O",Ȭ:"O",Ƣ:"OI",Ꝏ:"OO",Ɛ:"E",Ɔ:"O",Ȣ:"OU",Ṕ:"P",Ṗ:"P",Ꝓ:"P",Ƥ:"P",Ꝕ:"P",Ᵽ:"P",Ꝑ:"P",Ꝙ:"Q",Ꝗ:"Q",Ŕ:"R",Ř:"R",Ŗ:"R",Ṙ:"R",Ṛ:"R",Ṝ:"R",Ȑ:"R",Ȓ:"R",Ṟ:"R",Ɍ:"R",Ɽ:"R",Ꜿ:"C",Ǝ:"E",Ś:"S",Ṥ:"S",Š:"S",Ṧ:"S",Ş:"S",Ŝ:"S",Ș:"S",Ṡ:"S",Ṣ:"S",Ṩ:"S",Ť:"T",Ţ:"T",Ṱ:"T",Ț:"T",Ⱦ:"T",Ṫ:"T",Ṭ:"T",Ƭ:"T",Ṯ:"T",Ʈ:"T",Ŧ:"T",Ɐ:"A",Ꞁ:"L",Ɯ:"M",Ʌ:"V",Ꜩ:"TZ",Ú:"U",Ŭ:"U",Ǔ:"U",Û:"U",Ṷ:"U",Ü:"U",Ǘ:"U",Ǚ:"U",Ǜ:"U",Ǖ:"U",Ṳ:"U",Ụ:"U",Ű:"U",Ȕ:"U",Ù:"U",Ủ:"U",Ư:"U",Ứ:"U",Ự:"U",Ừ:"U",Ử:"U",Ữ:"U",Ȗ:"U",Ū:"U",Ṻ:"U",Ų:"U",Ů:"U",Ũ:"U",Ṹ:"U",Ṵ:"U",Ꝟ:"V",Ṿ:"V",Ʋ:"V",Ṽ:"V",Ꝡ:"VY",Ẃ:"W",Ŵ:"W",Ẅ:"W",Ẇ:"W",Ẉ:"W",Ẁ:"W",Ⱳ:"W",Ẍ:"X",Ẋ:"X",Ý:"Y",Ŷ:"Y",Ÿ:"Y",Ẏ:"Y",Ỵ:"Y",Ỳ:"Y",Ƴ:"Y",Ỷ:"Y",Ỿ:"Y",Ȳ:"Y",Ɏ:"Y",Ỹ:"Y",Ź:"Z",Ž:"Z",Ẑ:"Z",Ⱬ:"Z",Ż:"Z",Ẓ:"Z",Ȥ:"Z",Ẕ:"Z",Ƶ:"Z",IJ:"IJ",Œ:"OE",ᴀ:"A",ᴁ:"AE",ʙ:"B",ᴃ:"B",ᴄ:"C",ᴅ:"D",ᴇ:"E",ꜰ:"F",ɢ:"G",ʛ:"G",ʜ:"H",ɪ:"I",ʁ:"R",ᴊ:"J",ᴋ:"K",ʟ:"L",ᴌ:"L",ᴍ:"M",ɴ:"N",ᴏ:"O",ɶ:"OE",ᴐ:"O",ᴕ:"OU",ᴘ:"P",ʀ:"R",ᴎ:"N",ᴙ:"R",ꜱ:"S",ᴛ:"T",ⱻ:"E",ᴚ:"R",ᴜ:"U",ᴠ:"V",ᴡ:"W",ʏ:"Y",ᴢ:"Z",á:"a",ă:"a",ắ:"a",ặ:"a",ằ:"a",ẳ:"a",ẵ:"a",ǎ:"a",â:"a",ấ:"a",ậ:"a",ầ:"a",ẩ:"a",ẫ:"a",ä:"a",ǟ:"a",ȧ:"a",ǡ:"a",ạ:"a",ȁ:"a",à:"a",ả:"a",ȃ:"a",ā:"a",ą:"a",ᶏ:"a",ẚ:"a",å:"a",ǻ:"a",ḁ:"a",ⱥ:"a",ã:"a",ꜳ:"aa",æ:"ae",ǽ:"ae",ǣ:"ae",ꜵ:"ao",ꜷ:"au",ꜹ:"av",ꜻ:"av",ꜽ:"ay",ḃ:"b",ḅ:"b",ɓ:"b",ḇ:"b",ᵬ:"b",ᶀ:"b",ƀ:"b",ƃ:"b",ɵ:"o",ć:"c",č:"c",ç:"c",ḉ:"c",ĉ:"c",ɕ:"c",ċ:"c",ƈ:"c",ȼ:"c",ď:"d",ḑ:"d",ḓ:"d",ȡ:"d",ḋ:"d",ḍ:"d",ɗ:"d",ᶑ:"d",ḏ:"d",ᵭ:"d",ᶁ:"d",đ:"d",ɖ:"d",ƌ:"d",ı:"i",ȷ:"j",ɟ:"j",ʄ:"j",dz:"dz",dž:"dz",é:"e",ĕ:"e",ě:"e",ȩ:"e",ḝ:"e",ê:"e",ế:"e",ệ:"e",ề:"e",ể:"e",ễ:"e",ḙ:"e",ë:"e",ė:"e",ẹ:"e",ȅ:"e",è:"e",ẻ:"e",ȇ:"e",ē:"e",ḗ:"e",ḕ:"e",ⱸ:"e",ę:"e",ᶒ:"e",ɇ:"e",ẽ:"e",ḛ:"e",ꝫ:"et",ḟ:"f",ƒ:"f",ᵮ:"f",ᶂ:"f",ǵ:"g",ğ:"g",ǧ:"g",ģ:"g",ĝ:"g",ġ:"g",ɠ:"g",ḡ:"g",ᶃ:"g",ǥ:"g",ḫ:"h",ȟ:"h",ḩ:"h",ĥ:"h",ⱨ:"h",ḧ:"h",ḣ:"h",ḥ:"h",ɦ:"h",ẖ:"h",ħ:"h",ƕ:"hv",í:"i",ĭ:"i",ǐ:"i",î:"i",ï:"i",ḯ:"i",ị:"i",ȉ:"i",ì:"i",ỉ:"i",ȋ:"i",ī:"i",į:"i",ᶖ:"i",ɨ:"i",ĩ:"i",ḭ:"i",ꝺ:"d",ꝼ:"f",ᵹ:"g",ꞃ:"r",ꞅ:"s",ꞇ:"t",ꝭ:"is",ǰ:"j",ĵ:"j",ʝ:"j",ɉ:"j",ḱ:"k",ǩ:"k",ķ:"k",ⱪ:"k",ꝃ:"k",ḳ:"k",ƙ:"k",ḵ:"k",ᶄ:"k",ꝁ:"k",ꝅ:"k",ĺ:"l",ƚ:"l",ɬ:"l",ľ:"l",ļ:"l",ḽ:"l",ȴ:"l",ḷ:"l",ḹ:"l",ⱡ:"l",ꝉ:"l",ḻ:"l",ŀ:"l",ɫ:"l",ᶅ:"l",ɭ:"l",ł:"l",lj:"lj",ſ:"s",ẜ:"s",ẛ:"s",ẝ:"s",ḿ:"m",ṁ:"m",ṃ:"m",ɱ:"m",ᵯ:"m",ᶆ:"m",ń:"n",ň:"n",ņ:"n",ṋ:"n",ȵ:"n",ṅ:"n",ṇ:"n",ǹ:"n",ɲ:"n",ṉ:"n",ƞ:"n",ᵰ:"n",ᶇ:"n",ɳ:"n",ñ:"n",nj:"nj",ó:"o",ŏ:"o",ǒ:"o",ô:"o",ố:"o",ộ:"o",ồ:"o",ổ:"o",ỗ:"o",ö:"o",ȫ:"o",ȯ:"o",ȱ:"o",ọ:"o",ő:"o",ȍ:"o",ò:"o",ỏ:"o",ơ:"o",ớ:"o",ợ:"o",ờ:"o",ở:"o",ỡ:"o",ȏ:"o",ꝋ:"o",ꝍ:"o",ⱺ:"o",ō:"o",ṓ:"o",ṑ:"o",ǫ:"o",ǭ:"o",ø:"o",ǿ:"o",õ:"o",ṍ:"o",ṏ:"o",ȭ:"o",ƣ:"oi",ꝏ:"oo",ɛ:"e",ᶓ:"e",ɔ:"o",ᶗ:"o",ȣ:"ou",ṕ:"p",ṗ:"p",ꝓ:"p",ƥ:"p",ᵱ:"p",ᶈ:"p",ꝕ:"p",ᵽ:"p",ꝑ:"p",ꝙ:"q",ʠ:"q",ɋ:"q",ꝗ:"q",ŕ:"r",ř:"r",ŗ:"r",ṙ:"r",ṛ:"r",ṝ:"r",ȑ:"r",ɾ:"r",ᵳ:"r",ȓ:"r",ṟ:"r",ɼ:"r",ᵲ:"r",ᶉ:"r",ɍ:"r",ɽ:"r",ↄ:"c",ꜿ:"c",ɘ:"e",ɿ:"r",ś:"s",ṥ:"s",š:"s",ṧ:"s",ş:"s",ŝ:"s",ș:"s",ṡ:"s",ṣ:"s",ṩ:"s",ʂ:"s",ᵴ:"s",ᶊ:"s",ȿ:"s",ɡ:"g",ᴑ:"o",ᴓ:"o",ᴝ:"u",ť:"t",ţ:"t",ṱ:"t",ț:"t",ȶ:"t",ẗ:"t",ⱦ:"t",ṫ:"t",ṭ:"t",ƭ:"t",ṯ:"t",ᵵ:"t",ƫ:"t",ʈ:"t",ŧ:"t",ᵺ:"th",ɐ:"a",ᴂ:"ae",ǝ:"e",ᵷ:"g",ɥ:"h",ʮ:"h",ʯ:"h",ᴉ:"i",ʞ:"k",ꞁ:"l",ɯ:"m",ɰ:"m",ᴔ:"oe",ɹ:"r",ɻ:"r",ɺ:"r",ⱹ:"r",ʇ:"t",ʌ:"v",ʍ:"w",ʎ:"y",ꜩ:"tz",ú:"u",ŭ:"u",ǔ:"u",û:"u",ṷ:"u",ü:"u",ǘ:"u",ǚ:"u",ǜ:"u",ǖ:"u",ṳ:"u",ụ:"u",ű:"u",ȕ:"u",ù:"u",ủ:"u",ư:"u",ứ:"u",ự:"u",ừ:"u",ử:"u",ữ:"u",ȗ:"u",ū:"u",ṻ:"u",ų:"u",ᶙ:"u",ů:"u",ũ:"u",ṹ:"u",ṵ:"u",ᵫ:"ue",ꝸ:"um",ⱴ:"v",ꝟ:"v",ṿ:"v",ʋ:"v",ᶌ:"v",ⱱ:"v",ṽ:"v",ꝡ:"vy",ẃ:"w",ŵ:"w",ẅ:"w",ẇ:"w",ẉ:"w",ẁ:"w",ⱳ:"w",ẘ:"w",ẍ:"x",ẋ:"x",ᶍ:"x",ý:"y",ŷ:"y",ÿ:"y",ẏ:"y",ỵ:"y",ỳ:"y",ƴ:"y",ỷ:"y",ỿ:"y",ȳ:"y",ẙ:"y",ɏ:"y",ỹ:"y",ź:"z",ž:"z",ẑ:"z",ʑ:"z",ⱬ:"z",ż:"z",ẓ:"z",ȥ:"z",ẕ:"z",ᵶ:"z",ᶎ:"z",ʐ:"z",ƶ:"z",ɀ:"z",ff:"ff",ffi:"ffi",ffl:"ffl",fi:"fi",fl:"fl",ij:"ij",œ:"oe",st:"st",ₐ:"a",ₑ:"e",ᵢ:"i",ⱼ:"j",ₒ:"o",ᵣ:"r",ᵤ:"u",ᵥ:"v",ₓ:"x"}};String.prototype.latinise=function(){return this.replace(/[^A-Za-z0-9\[\] ]/g,function(n){return t.latin_map[n]||n})},String.prototype.latinize=String.prototype.latinise,String.prototype.isLatin=function(){return this==this.latinise()}},526(t,n){"use strict";n.byteLength=function(t){var n=a(t),e=n[0],r=n[1];return 3*(e+r)/4-r},n.toByteArray=function(t){var n,e,i=a(t),u=i[0],s=i[1],c=new o(function(t,n,e){return 3*(n+e)/4-e}(0,u,s)),f=0,l=s>0?u-4:u;for(e=0;e>16&255,c[f++]=n>>8&255,c[f++]=255&n;2===s&&(n=r[t.charCodeAt(e)]<<2|r[t.charCodeAt(e+1)]>>4,c[f++]=255&n);1===s&&(n=r[t.charCodeAt(e)]<<10|r[t.charCodeAt(e+1)]<<4|r[t.charCodeAt(e+2)]>>2,c[f++]=n>>8&255,c[f++]=255&n);return c},n.fromByteArray=function(t){for(var n,r=t.length,o=r%3,i=[],u=16383,a=0,s=r-o;as?s:a+u));1===o?(n=t[r-1],i.push(e[n>>2]+e[n<<4&63]+"==")):2===o&&(n=(t[r-2]<<8)+t[r-1],i.push(e[n>>10]+e[n>>4&63]+e[n<<2&63]+"="));return i.join("")};for(var e=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0;u<64;++u)e[u]=i[u],r[i.charCodeAt(u)]=u;function a(t){var n=t.length;if(n%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var e=t.indexOf("=");return-1===e&&(e=n),[e,e===n?0:4-e%4]}function s(t){return e[t>>18&63]+e[t>>12&63]+e[t>>6&63]+e[63&t]}function c(t,n,e){for(var r,o=[],i=n;i=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function d(t,n){if(s.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var r=!1;;)switch(n){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return z(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return $(t).length;default:if(r)return z(t).length;n=(""+n).toLowerCase(),r=!0}}function g(t,n,e){var r=!1;if((void 0===n||n<0)&&(n=0),n>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(n>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return C(this,n,e);case"utf8":case"utf-8":return T(this,n,e);case"ascii":return x(this,n,e);case"latin1":case"binary":return B(this,n,e);case"base64":return O(this,n,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,n,e);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function v(t,n,e){var r=t[n];t[n]=t[e],t[e]=r}function y(t,n,e,r,o){if(0===t.length)return-1;if("string"==typeof e?(r=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof n&&(n=s.from(n,r)),s.isBuffer(n))return 0===n.length?-1:_(t,n,e,r,o);if("number"==typeof n)return n&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,n,e):Uint8Array.prototype.lastIndexOf.call(t,n,e):_(t,[n],e,r,o);throw new TypeError("val must be string, number or Buffer")}function _(t,n,e,r,o){var i,u=1,a=t.length,s=n.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||n.length<2)return-1;u=2,a/=2,s/=2,e/=2}function c(t,n){return 1===u?t[n]:t.readUInt16BE(n*u)}if(o){var f=-1;for(i=e;ia&&(e=a-s),i=e;i>=0;i--){for(var l=!0,h=0;ho&&(r=o):r=o;var i=n.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(r);return i}(n,t.length-e),t,e,r)}function O(t,n,e){return 0===n&&e===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(n,e))}function T(t,n,e){e=Math.min(t.length,e);for(var r=[],o=n;o239?4:c>223?3:c>191?2:1;if(o+l<=e)switch(l){case 1:c<128&&(f=c);break;case 2:128==(192&(i=t[o+1]))&&(s=(31&c)<<6|63&i)>127&&(f=s);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(s=(15&c)<<12|(63&i)<<6|63&u)>2047&&(s<55296||s>57343)&&(f=s);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(s=(15&c)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&s<1114112&&(f=s)}null===f?(f=65533,l=1):f>65535&&(f-=65536,r.push(f>>>10&1023|55296),f=56320|1023&f),r.push(f),o+=l}return function(t){var n=t.length;if(n<=S)return String.fromCharCode.apply(String,t);var e="",r=0;for(;r0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},s.prototype.compare=function(t,n,e,r,o){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===e&&(e=t?t.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),n<0||e>t.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&n>=e)return 0;if(r>=o)return-1;if(n>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(r>>>=0),u=(e>>>=0)-(n>>>=0),a=Math.min(i,u),c=this.slice(r,o),f=t.slice(n,e),l=0;lo)&&(e=o),t.length>0&&(e<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return b(this,t,n,e);case"utf8":case"utf-8":return m(this,t,n,e);case"ascii":return w(this,t,n,e);case"latin1":case"binary":return A(this,t,n,e);case"base64":return E(this,t,n,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,n,e);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function x(t,n,e){var r="";e=Math.min(t.length,e);for(var o=n;or)&&(e=r);for(var o="",i=n;ie)throw new RangeError("Trying to access beyond buffer length")}function k(t,n,e,r,o,i){if(!s.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>o||nt.length)throw new RangeError("Index out of range")}function P(t,n,e,r){n<0&&(n=65535+n+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(r?o:1-o)}function L(t,n,e,r){n<0&&(n=4294967295+n+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(r?o:3-o)&255}function I(t,n,e,r,o,i){if(e+r>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function N(t,n,e,r,i){return i||I(t,0,e,4),o.write(t,n,e,r,23,4),e+4}function D(t,n,e,r,i){return i||I(t,0,e,8),o.write(t,n,e,r,52,8),e+8}s.prototype.slice=function(t,n){var e,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(n=void 0===n?r:~~n)<0?(n+=r)<0&&(n=0):n>r&&(n=r),n0&&(o*=256);)r+=this[t+--n]*o;return r},s.prototype.readUInt8=function(t,n){return n||U(t,1,this.length),this[t]},s.prototype.readUInt16LE=function(t,n){return n||U(t,2,this.length),this[t]|this[t+1]<<8},s.prototype.readUInt16BE=function(t,n){return n||U(t,2,this.length),this[t]<<8|this[t+1]},s.prototype.readUInt32LE=function(t,n){return n||U(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},s.prototype.readUInt32BE=function(t,n){return n||U(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},s.prototype.readIntLE=function(t,n,e){t|=0,n|=0,e||U(t,n,this.length);for(var r=this[t],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*n)),r},s.prototype.readIntBE=function(t,n,e){t|=0,n|=0,e||U(t,n,this.length);for(var r=n,o=1,i=this[t+--r];r>0&&(o*=256);)i+=this[t+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*n)),i},s.prototype.readInt8=function(t,n){return n||U(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},s.prototype.readInt16LE=function(t,n){n||U(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},s.prototype.readInt16BE=function(t,n){n||U(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},s.prototype.readInt32LE=function(t,n){return n||U(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},s.prototype.readInt32BE=function(t,n){return n||U(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},s.prototype.readFloatLE=function(t,n){return n||U(t,4,this.length),o.read(this,t,!0,23,4)},s.prototype.readFloatBE=function(t,n){return n||U(t,4,this.length),o.read(this,t,!1,23,4)},s.prototype.readDoubleLE=function(t,n){return n||U(t,8,this.length),o.read(this,t,!0,52,8)},s.prototype.readDoubleBE=function(t,n){return n||U(t,8,this.length),o.read(this,t,!1,52,8)},s.prototype.writeUIntLE=function(t,n,e,r){(t=+t,n|=0,e|=0,r)||k(this,t,n,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[n]=255&t;++i=0&&(i*=256);)this[n+o]=t/i&255;return n+e},s.prototype.writeUInt8=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,1,255,0),s.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[n]=255&t,n+1},s.prototype.writeUInt16LE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):P(this,t,n,!0),n+2},s.prototype.writeUInt16BE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):P(this,t,n,!1),n+2},s.prototype.writeUInt32LE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[n+3]=t>>>24,this[n+2]=t>>>16,this[n+1]=t>>>8,this[n]=255&t):L(this,t,n,!0),n+4},s.prototype.writeUInt32BE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):L(this,t,n,!1),n+4},s.prototype.writeIntLE=function(t,n,e,r){if(t=+t,n|=0,!r){var o=Math.pow(2,8*e-1);k(this,t,n,e,o-1,-o)}var i=0,u=1,a=0;for(this[n]=255&t;++i=0&&(u*=256);)t<0&&0===a&&0!==this[n+i+1]&&(a=1),this[n+i]=(t/u|0)-a&255;return n+e},s.prototype.writeInt8=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,1,127,-128),s.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[n]=255&t,n+1},s.prototype.writeInt16LE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):P(this,t,n,!0),n+2},s.prototype.writeInt16BE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):P(this,t,n,!1),n+2},s.prototype.writeInt32LE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8,this[n+2]=t>>>16,this[n+3]=t>>>24):L(this,t,n,!0),n+4},s.prototype.writeInt32BE=function(t,n,e){return t=+t,n|=0,e||k(this,t,n,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),s.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):L(this,t,n,!1),n+4},s.prototype.writeFloatLE=function(t,n,e){return N(this,t,n,!0,e)},s.prototype.writeFloatBE=function(t,n,e){return N(this,t,n,!1,e)},s.prototype.writeDoubleLE=function(t,n,e){return D(this,t,n,!0,e)},s.prototype.writeDoubleBE=function(t,n,e){return D(this,t,n,!1,e)},s.prototype.copy=function(t,n,e,r){if(e||(e=0),r||0===r||(r=this.length),n>=t.length&&(n=t.length),n||(n=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-n=0;--o)t[o+n]=this[o+e];else if(i<1e3||!s.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=n;i55295&&e<57344){if(!o){if(e>56319){(n-=3)>-1&&i.push(239,191,189);continue}if(u+1===r){(n-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(n-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(n-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((n-=1)<0)break;i.push(e)}else if(e<2048){if((n-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((n-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function $(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(F,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,n,e,r){for(var o=0;o=n.length||o>=t.length);++o)n[o+e]=t[o];return o}},251(t,n){n.read=function(t,n,e,r,o){var i,u,a=8*o-r-1,s=(1<>1,f=-7,l=e?o-1:0,h=e?-1:1,p=t[n+l];for(l+=h,i=p&(1<<-f)-1,p>>=-f,f+=a;f>0;i=256*i+t[n+l],l+=h,f-=8);for(u=i&(1<<-f)-1,i>>=-f,f+=r;f>0;u=256*u+t[n+l],l+=h,f-=8);if(0===i)i=1-c;else{if(i===s)return u?NaN:1/0*(p?-1:1);u+=Math.pow(2,r),i-=c}return(p?-1:1)*u*Math.pow(2,i-r)},n.write=function(t,n,e,r,o,i){var u,a,s,c=8*i-o-1,f=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(a=isNaN(n)?1:0,u=f):(u=Math.floor(Math.log(n)/Math.LN2),n*(s=Math.pow(2,-u))<1&&(u--,s*=2),(n+=u+l>=1?h/s:h*Math.pow(2,1-l))*s>=2&&(u++,s/=2),u+l>=f?(a=0,u=f):u+l>=1?(a=(n*s-1)*Math.pow(2,o),u+=l):(a=n*Math.pow(2,l-1)*Math.pow(2,o),u=0));o>=8;t[e+p]=255&a,p+=d,a/=256,o-=8);for(u=u<0;t[e+p]=255&u,p+=d,u/=256,c-=8);t[e+p-d]|=128*g}},634(t){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},543(t,n,e){var r;t=e.nmd(t),function(){var o,i="Expected a function",u="__lodash_hash_undefined__",a="__lodash_placeholder__",s=16,c=32,f=64,l=128,h=256,p=1/0,d=9007199254740991,g=NaN,v=4294967295,y=[["ary",l],["bind",1],["bindKey",2],["curry",8],["curryRight",s],["flip",512],["partial",c],["partialRight",f],["rearg",h]],_="[object Arguments]",b="[object Array]",m="[object Boolean]",w="[object Date]",A="[object Error]",E="[object Function]",R="[object GeneratorFunction]",O="[object Map]",T="[object Number]",S="[object Object]",x="[object Promise]",B="[object RegExp]",C="[object Set]",j="[object String]",U="[object Symbol]",k="[object WeakMap]",P="[object ArrayBuffer]",L="[object DataView]",I="[object Float32Array]",N="[object Float64Array]",D="[object Int8Array]",F="[object Int16Array]",M="[object Int32Array]",z="[object Uint8Array]",$="[object Uint8ClampedArray]",q="[object Uint16Array]",W="[object Uint32Array]",Y=/\b__p \+= '';/g,H=/\b(__p \+=) '' \+/g,V=/(__e\(.*?\)|\b__t\)) \+\n'';/g,J=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,G=RegExp(J.source),Z=RegExp(K.source),X=/<%-([\s\S]+?)%>/g,Q=/<%([\s\S]+?)%>/g,tt=/<%=([\s\S]+?)%>/g,nt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,et=/^\w*$/,rt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ot=/[\\^$.*+?()[\]{}|]/g,it=RegExp(ot.source),ut=/^\s+/,at=/\s/,st=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ct=/\{\n\/\* \[wrapped with (.+)\] \*/,ft=/,? & /,lt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ht=/[()=,{}\[\]\/\s]/,pt=/\\(\\)?/g,dt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,gt=/\w*$/,vt=/^[-+]0x[0-9a-f]+$/i,yt=/^0b[01]+$/i,_t=/^\[object .+?Constructor\]$/,bt=/^0o[0-7]+$/i,mt=/^(?:0|[1-9]\d*)$/,wt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,At=/($^)/,Et=/['\n\r\u2028\u2029\\]/g,Rt="\\ud800-\\udfff",Ot="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Tt="\\u2700-\\u27bf",St="a-z\\xdf-\\xf6\\xf8-\\xff",xt="A-Z\\xc0-\\xd6\\xd8-\\xde",Bt="\\ufe0e\\ufe0f",Ct="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",jt="['’]",Ut="["+Rt+"]",kt="["+Ct+"]",Pt="["+Ot+"]",Lt="\\d+",It="["+Tt+"]",Nt="["+St+"]",Dt="[^"+Rt+Ct+Lt+Tt+St+xt+"]",Ft="\\ud83c[\\udffb-\\udfff]",Mt="[^"+Rt+"]",zt="(?:\\ud83c[\\udde6-\\uddff]){2}",$t="[\\ud800-\\udbff][\\udc00-\\udfff]",qt="["+xt+"]",Wt="\\u200d",Yt="(?:"+Nt+"|"+Dt+")",Ht="(?:"+qt+"|"+Dt+")",Vt="(?:['’](?:d|ll|m|re|s|t|ve))?",Jt="(?:['’](?:D|LL|M|RE|S|T|VE))?",Kt="(?:"+Pt+"|"+Ft+")"+"?",Gt="["+Bt+"]?",Zt=Gt+Kt+("(?:"+Wt+"(?:"+[Mt,zt,$t].join("|")+")"+Gt+Kt+")*"),Xt="(?:"+[It,zt,$t].join("|")+")"+Zt,Qt="(?:"+[Mt+Pt+"?",Pt,zt,$t,Ut].join("|")+")",tn=RegExp(jt,"g"),nn=RegExp(Pt,"g"),en=RegExp(Ft+"(?="+Ft+")|"+Qt+Zt,"g"),rn=RegExp([qt+"?"+Nt+"+"+Vt+"(?="+[kt,qt,"$"].join("|")+")",Ht+"+"+Jt+"(?="+[kt,qt+Yt,"$"].join("|")+")",qt+"?"+Yt+"+"+Vt,qt+"+"+Jt,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Lt,Xt].join("|"),"g"),on=RegExp("["+Wt+Rt+Ot+Bt+"]"),un=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,an=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],sn=-1,cn={};cn[I]=cn[N]=cn[D]=cn[F]=cn[M]=cn[z]=cn[$]=cn[q]=cn[W]=!0,cn[_]=cn[b]=cn[P]=cn[m]=cn[L]=cn[w]=cn[A]=cn[E]=cn[O]=cn[T]=cn[S]=cn[B]=cn[C]=cn[j]=cn[k]=!1;var fn={};fn[_]=fn[b]=fn[P]=fn[L]=fn[m]=fn[w]=fn[I]=fn[N]=fn[D]=fn[F]=fn[M]=fn[O]=fn[T]=fn[S]=fn[B]=fn[C]=fn[j]=fn[U]=fn[z]=fn[$]=fn[q]=fn[W]=!0,fn[A]=fn[E]=fn[k]=!1;var ln={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},hn=parseFloat,pn=parseInt,dn="object"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,gn="object"==typeof self&&self&&self.Object===Object&&self,vn=dn||gn||Function("return this")(),yn=n&&!n.nodeType&&n,_n=yn&&t&&!t.nodeType&&t,bn=_n&&_n.exports===yn,mn=bn&&dn.process,wn=function(){try{var t=_n&&_n.require&&_n.require("util").types;return t||mn&&mn.binding&&mn.binding("util")}catch(t){}}(),An=wn&&wn.isArrayBuffer,En=wn&&wn.isDate,Rn=wn&&wn.isMap,On=wn&&wn.isRegExp,Tn=wn&&wn.isSet,Sn=wn&&wn.isTypedArray;function xn(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function Bn(t,n,e,r){for(var o=-1,i=null==t?0:t.length;++o-1}function Ln(t,n,e){for(var r=-1,o=null==t?0:t.length;++r-1;);return e}function oe(t,n){for(var e=t.length;e--&&Wn(n,t[e],0)>-1;);return e}var ie=Kn({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),ue=Kn({"&":"&","<":"<",">":">",'"':""","'":"'"});function ae(t){return"\\"+ln[t]}function se(t){return on.test(t)}function ce(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function fe(t,n){return function(e){return t(n(e))}}function le(t,n){for(var e=-1,r=t.length,o=0,i=[];++e",""":'"',"'":"'"});var _e=function t(n){var e,r=(n=null==n?vn:_e.defaults(vn.Object(),n,_e.pick(vn,an))).Array,at=n.Date,Rt=n.Error,Ot=n.Function,Tt=n.Math,St=n.Object,xt=n.RegExp,Bt=n.String,Ct=n.TypeError,jt=r.prototype,Ut=Ot.prototype,kt=St.prototype,Pt=n["__core-js_shared__"],Lt=Ut.toString,It=kt.hasOwnProperty,Nt=0,Dt=(e=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",Ft=kt.toString,Mt=Lt.call(St),zt=vn._,$t=xt("^"+Lt.call(It).replace(ot,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),qt=bn?n.Buffer:o,Wt=n.Symbol,Yt=n.Uint8Array,Ht=qt?qt.allocUnsafe:o,Vt=fe(St.getPrototypeOf,St),Jt=St.create,Kt=kt.propertyIsEnumerable,Gt=jt.splice,Zt=Wt?Wt.isConcatSpreadable:o,Xt=Wt?Wt.iterator:o,Qt=Wt?Wt.toStringTag:o,en=function(){try{var t=pi(St,"defineProperty");return t({},"",{}),t}catch(t){}}(),on=n.clearTimeout!==vn.clearTimeout&&n.clearTimeout,ln=at&&at.now!==vn.Date.now&&at.now,dn=n.setTimeout!==vn.setTimeout&&n.setTimeout,gn=Tt.ceil,yn=Tt.floor,_n=St.getOwnPropertySymbols,mn=qt?qt.isBuffer:o,wn=n.isFinite,zn=jt.join,Kn=fe(St.keys,St),be=Tt.max,me=Tt.min,we=at.now,Ae=n.parseInt,Ee=Tt.random,Re=jt.reverse,Oe=pi(n,"DataView"),Te=pi(n,"Map"),Se=pi(n,"Promise"),xe=pi(n,"Set"),Be=pi(n,"WeakMap"),Ce=pi(St,"create"),je=Be&&new Be,Ue={},ke=Fi(Oe),Pe=Fi(Te),Le=Fi(Se),Ie=Fi(xe),Ne=Fi(Be),De=Wt?Wt.prototype:o,Fe=De?De.valueOf:o,Me=De?De.toString:o;function ze(t){if(ea(t)&&!Yu(t)&&!(t instanceof Ye)){if(t instanceof We)return t;if(It.call(t,"__wrapped__"))return Mi(t)}return new We(t)}var $e=function(){function t(){}return function(n){if(!na(n))return{};if(Jt)return Jt(n);t.prototype=n;var e=new t;return t.prototype=o,e}}();function qe(){}function We(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=o}function Ye(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=v,this.__views__=[]}function He(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n=n?t:n)),t}function cr(t,n,e,r,i,u){var a,s=1&n,c=2&n,f=4&n;if(e&&(a=i?e(t,r,i,u):e(t)),a!==o)return a;if(!na(t))return t;var l=Yu(t);if(l){if(a=function(t){var n=t.length,e=new t.constructor(n);n&&"string"==typeof t[0]&&It.call(t,"index")&&(e.index=t.index,e.input=t.input);return e}(t),!s)return jo(t,a)}else{var h=vi(t),p=h==E||h==R;if(Ku(t))return Oo(t,s);if(h==S||h==_||p&&!i){if(a=c||p?{}:_i(t),!s)return c?function(t,n){return Uo(t,gi(t),n)}(t,function(t,n){return t&&Uo(n,ka(n),t)}(a,t)):function(t,n){return Uo(t,di(t),n)}(t,ir(a,t))}else{if(!fn[h])return i?t:{};a=function(t,n,e){var r=t.constructor;switch(n){case P:return To(t);case m:case w:return new r(+t);case L:return function(t,n){var e=n?To(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case I:case N:case D:case F:case M:case z:case $:case q:case W:return So(t,e);case O:return new r;case T:case j:return new r(t);case B:return function(t){var n=new t.constructor(t.source,gt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case C:return new r;case U:return o=t,Fe?St(Fe.call(o)):{}}var o}(t,h,s)}}u||(u=new Ge);var d=u.get(t);if(d)return d;u.set(t,a),aa(t)?t.forEach(function(r){a.add(cr(r,n,e,r,t,u))}):ra(t)&&t.forEach(function(r,o){a.set(o,cr(r,n,e,o,t,u))});var g=l?o:(f?c?ui:ii:c?ka:Ua)(t);return Cn(g||t,function(r,o){g&&(r=t[o=r]),er(a,o,cr(r,n,e,o,t,u))}),a}function fr(t,n,e){var r=e.length;if(null==t)return!r;for(t=St(t);r--;){var i=e[r],u=n[i],a=t[i];if(a===o&&!(i in t)||!u(a))return!1}return!0}function lr(t,n,e){if("function"!=typeof t)throw new Ct(i);return Ui(function(){t.apply(o,e)},n)}function hr(t,n,e,r){var o=-1,i=Pn,u=!0,a=t.length,s=[],c=n.length;if(!a)return s;e&&(n=In(n,te(e))),r?(i=Ln,u=!1):n.length>=200&&(i=ee,u=!1,n=new Ke(n));t:for(;++o-1},Ve.prototype.set=function(t,n){var e=this.__data__,r=rr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},Je.prototype.clear=function(){this.size=0,this.__data__={hash:new He,map:new(Te||Ve),string:new He}},Je.prototype.delete=function(t){var n=li(this,t).delete(t);return this.size-=n?1:0,n},Je.prototype.get=function(t){return li(this,t).get(t)},Je.prototype.has=function(t){return li(this,t).has(t)},Je.prototype.set=function(t,n){var e=li(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},Ke.prototype.add=Ke.prototype.push=function(t){return this.__data__.set(t,u),this},Ke.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.clear=function(){this.__data__=new Ve,this.size=0},Ge.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ge.prototype.get=function(t){return this.__data__.get(t)},Ge.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.set=function(t,n){var e=this.__data__;if(e instanceof Ve){var r=e.__data__;if(!Te||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new Je(r)}return e.set(t,n),this.size=e.size,this};var pr=Lo(wr),dr=Lo(Ar,!0);function gr(t,n){var e=!0;return pr(t,function(t,r,o){return e=!!n(t,r,o)}),e}function vr(t,n,e){for(var r=-1,i=t.length;++r0&&e(a)?n>1?_r(a,n-1,e,r,o):Nn(o,a):r||(o[o.length]=a)}return o}var br=Io(),mr=Io(!0);function wr(t,n){return t&&br(t,n,Ua)}function Ar(t,n){return t&&mr(t,n,Ua)}function Er(t,n){return kn(n,function(n){return Xu(t[n])})}function Rr(t,n){for(var e=0,r=(n=wo(n,t)).length;null!=t&&en}function xr(t,n){return null!=t&&It.call(t,n)}function Br(t,n){return null!=t&&n in St(t)}function Cr(t,n,e){for(var i=e?Ln:Pn,u=t[0].length,a=t.length,s=a,c=r(a),f=1/0,l=[];s--;){var h=t[s];s&&n&&(h=In(h,te(n))),f=me(h.length,f),c[s]=!e&&(n||u>=120&&h.length>=120)?new Ke(s&&h):o}h=t[0];var p=-1,d=c[0];t:for(;++p=a?s:s*("desc"==e[r]?-1:1)}return t.index-n.index}(t,n,e)})}function Hr(t,n,e){for(var r=-1,o=n.length,i={};++r-1;)a!==t&&Gt.call(a,s,1),Gt.call(t,s,1);return t}function Jr(t,n){for(var e=t?n.length:0,r=e-1;e--;){var o=n[e];if(e==r||o!==i){var i=o;mi(o)?Gt.call(t,o,1):ho(t,o)}}return t}function Kr(t,n){return t+yn(Ee()*(n-t+1))}function Gr(t,n){var e="";if(!t||n<1||n>d)return e;do{n%2&&(e+=t),(n=yn(n/2))&&(t+=t)}while(n);return e}function Zr(t,n){return ki(xi(t,n,os),t+"")}function Xr(t){return Xe(za(t))}function Qr(t,n){var e=za(t);return Ii(e,sr(n,0,e.length))}function to(t,n,e,r){if(!na(t))return t;for(var i=-1,u=(n=wo(n,t)).length,a=u-1,s=t;null!=s&&++ii?0:i+n),(e=e>i?i:e)<0&&(e+=i),i=n>e?0:e-n>>>0,n>>>=0;for(var u=r(i);++o>>1,u=t[i];null!==u&&!ca(u)&&(e?u<=n:u=200){var c=n?null:Zo(t);if(c)return he(c);u=!1,o=ee,s=new Ke}else s=n?[]:a;t:for(;++r=r?t:oo(t,n,e)}var Ro=on||function(t){return vn.clearTimeout(t)};function Oo(t,n){if(n)return t.slice();var e=t.length,r=Ht?Ht(e):new t.constructor(e);return t.copy(r),r}function To(t){var n=new t.constructor(t.byteLength);return new Yt(n).set(new Yt(t)),n}function So(t,n){var e=n?To(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function xo(t,n){if(t!==n){var e=t!==o,r=null===t,i=t==t,u=ca(t),a=n!==o,s=null===n,c=n==n,f=ca(n);if(!s&&!f&&!u&&t>n||u&&a&&c&&!s&&!f||r&&a&&c||!e&&c||!i)return 1;if(!r&&!u&&!f&&t1?e[i-1]:o,a=i>2?e[2]:o;for(u=t.length>3&&"function"==typeof u?(i--,u):o,a&&wi(e[0],e[1],a)&&(u=i<3?o:u,i=1),n=St(n);++r-1?i[u?n[a]:a]:o}}function zo(t){return oi(function(n){var e=n.length,r=e,u=We.prototype.thru;for(t&&n.reverse();r--;){var a=n[r];if("function"!=typeof a)throw new Ct(i);if(u&&!s&&"wrapper"==si(a))var s=new We([],!0)}for(r=s?r:e;++r1&&m.reverse(),p&&fs))return!1;var f=u.get(t),l=u.get(n);if(f&&l)return f==n&&l==t;var h=-1,p=!0,d=2&e?new Ke:o;for(u.set(t,n),u.set(n,t);++h-1&&t%1==0&&t1?"& ":"")+n[r],n=n.join(e>2?", ":" "),t.replace(st,"{\n/* [wrapped with "+n+"] */\n")}(r,function(t,n){return Cn(y,function(e){var r="_."+e[0];n&e[1]&&!Pn(t,r)&&t.push(r)}),t.sort()}(function(t){var n=t.match(ct);return n?n[1].split(ft):[]}(r),e)))}function Li(t){var n=0,e=0;return function(){var r=we(),i=16-(r-e);if(e=r,i>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(o,arguments)}}function Ii(t,n){var e=-1,r=t.length,i=r-1;for(n=n===o?r:n;++e1?t[n-1]:o;return e="function"==typeof e?(t.pop(),e):o,uu(t,e)});function pu(t){var n=ze(t);return n.__chain__=!0,n}function du(t,n){return n(t)}var gu=oi(function(t){var n=t.length,e=n?t[0]:0,r=this.__wrapped__,i=function(n){return ar(n,t)};return!(n>1||this.__actions__.length)&&r instanceof Ye&&mi(e)?((r=r.slice(e,+e+(n?1:0))).__actions__.push({func:du,args:[i],thisArg:o}),new We(r,this.__chain__).thru(function(t){return n&&!t.length&&t.push(o),t})):this.thru(i)});var vu=ko(function(t,n,e){It.call(t,e)?++t[e]:ur(t,e,1)});var yu=Mo(Wi),_u=Mo(Yi);function bu(t,n){return(Yu(t)?Cn:pr)(t,fi(n,3))}function mu(t,n){return(Yu(t)?jn:dr)(t,fi(n,3))}var wu=ko(function(t,n,e){It.call(t,e)?t[e].push(n):ur(t,e,[n])});var Au=Zr(function(t,n,e){var o=-1,i="function"==typeof n,u=Vu(t)?r(t.length):[];return pr(t,function(t){u[++o]=i?xn(n,t,e):jr(t,n,e)}),u}),Eu=ko(function(t,n,e){ur(t,e,n)});function Ru(t,n){return(Yu(t)?In:Mr)(t,fi(n,3))}var Ou=ko(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]});var Tu=Zr(function(t,n){if(null==t)return[];var e=n.length;return e>1&&wi(t,n[0],n[1])?n=[]:e>2&&wi(n[0],n[1],n[2])&&(n=[n[0]]),Yr(t,_r(n,1),[])}),Su=ln||function(){return vn.Date.now()};function xu(t,n,e){return n=e?o:n,n=t&&null==n?t.length:n,Qo(t,l,o,o,o,o,n)}function Bu(t,n){var e;if("function"!=typeof n)throw new Ct(i);return t=ga(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=o),e}}var Cu=Zr(function(t,n,e){var r=1;if(e.length){var o=le(e,ci(Cu));r|=c}return Qo(t,r,n,e,o)}),ju=Zr(function(t,n,e){var r=3;if(e.length){var o=le(e,ci(ju));r|=c}return Qo(n,r,t,e,o)});function Uu(t,n,e){var r,u,a,s,c,f,l=0,h=!1,p=!1,d=!0;if("function"!=typeof t)throw new Ct(i);function g(n){var e=r,i=u;return r=u=o,l=n,s=t.apply(i,e)}function v(t){var e=t-f;return f===o||e>=n||e<0||p&&t-l>=a}function y(){var t=Su();if(v(t))return _(t);c=Ui(y,function(t){var e=n-(t-f);return p?me(e,a-(t-l)):e}(t))}function _(t){return c=o,d&&r?g(t):(r=u=o,s)}function b(){var t=Su(),e=v(t);if(r=arguments,u=this,f=t,e){if(c===o)return function(t){return l=t,c=Ui(y,n),h?g(t):s}(f);if(p)return Ro(c),c=Ui(y,n),g(f)}return c===o&&(c=Ui(y,n)),s}return n=ya(n)||0,na(e)&&(h=!!e.leading,a=(p="maxWait"in e)?be(ya(e.maxWait)||0,n):a,d="trailing"in e?!!e.trailing:d),b.cancel=function(){c!==o&&Ro(c),l=0,r=f=u=c=o},b.flush=function(){return c===o?s:_(Su())},b}var ku=Zr(function(t,n){return lr(t,1,n)}),Pu=Zr(function(t,n,e){return lr(t,ya(n)||0,e)});function Lu(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new Ct(i);var e=function(){var r=arguments,o=n?n.apply(this,r):r[0],i=e.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return e.cache=i.set(o,u)||i,u};return e.cache=new(Lu.Cache||Je),e}function Iu(t){if("function"!=typeof t)throw new Ct(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Lu.Cache=Je;var Nu=Ao(function(t,n){var e=(n=1==n.length&&Yu(n[0])?In(n[0],te(fi())):In(_r(n,1),te(fi()))).length;return Zr(function(r){for(var o=-1,i=me(r.length,e);++o=n}),Wu=Ur(function(){return arguments}())?Ur:function(t){return ea(t)&&It.call(t,"callee")&&!Kt.call(t,"callee")},Yu=r.isArray,Hu=An?te(An):function(t){return ea(t)&&Tr(t)==P};function Vu(t){return null!=t&&ta(t.length)&&!Xu(t)}function Ju(t){return ea(t)&&Vu(t)}var Ku=mn||ys,Gu=En?te(En):function(t){return ea(t)&&Tr(t)==w};function Zu(t){if(!ea(t))return!1;var n=Tr(t);return n==A||"[object DOMException]"==n||"string"==typeof t.message&&"string"==typeof t.name&&!ia(t)}function Xu(t){if(!na(t))return!1;var n=Tr(t);return n==E||n==R||"[object AsyncFunction]"==n||"[object Proxy]"==n}function Qu(t){return"number"==typeof t&&t==ga(t)}function ta(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=d}function na(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function ea(t){return null!=t&&"object"==typeof t}var ra=Rn?te(Rn):function(t){return ea(t)&&vi(t)==O};function oa(t){return"number"==typeof t||ea(t)&&Tr(t)==T}function ia(t){if(!ea(t)||Tr(t)!=S)return!1;var n=Vt(t);if(null===n)return!0;var e=It.call(n,"constructor")&&n.constructor;return"function"==typeof e&&e instanceof e&&Lt.call(e)==Mt}var ua=On?te(On):function(t){return ea(t)&&Tr(t)==B};var aa=Tn?te(Tn):function(t){return ea(t)&&vi(t)==C};function sa(t){return"string"==typeof t||!Yu(t)&&ea(t)&&Tr(t)==j}function ca(t){return"symbol"==typeof t||ea(t)&&Tr(t)==U}var fa=Sn?te(Sn):function(t){return ea(t)&&ta(t.length)&&!!cn[Tr(t)]};var la=Jo(Fr),ha=Jo(function(t,n){return t<=n});function pa(t){if(!t)return[];if(Vu(t))return sa(t)?ge(t):jo(t);if(Xt&&t[Xt])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[Xt]());var n=vi(t);return(n==O?ce:n==C?he:za)(t)}function da(t){return t?(t=ya(t))===p||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ga(t){var n=da(t),e=n%1;return n==n?e?n-e:n:0}function va(t){return t?sr(ga(t),0,v):0}function ya(t){if("number"==typeof t)return t;if(ca(t))return g;if(na(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=na(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=Qn(t);var e=yt.test(t);return e||bt.test(t)?pn(t.slice(2),e?2:8):vt.test(t)?g:+t}function _a(t){return Uo(t,ka(t))}function ba(t){return null==t?"":fo(t)}var ma=Po(function(t,n){if(Oi(n)||Vu(n))Uo(n,Ua(n),t);else for(var e in n)It.call(n,e)&&er(t,e,n[e])}),wa=Po(function(t,n){Uo(n,ka(n),t)}),Aa=Po(function(t,n,e,r){Uo(n,ka(n),t,r)}),Ea=Po(function(t,n,e,r){Uo(n,Ua(n),t,r)}),Ra=oi(ar);var Oa=Zr(function(t,n){t=St(t);var e=-1,r=n.length,i=r>2?n[2]:o;for(i&&wi(n[0],n[1],i)&&(r=1);++e1),n}),Uo(t,ui(t),e),r&&(e=cr(e,7,ei));for(var o=n.length;o--;)ho(e,n[o]);return e});var Na=oi(function(t,n){return null==t?{}:function(t,n){return Hr(t,n,function(n,e){return xa(t,e)})}(t,n)});function Da(t,n){if(null==t)return{};var e=In(ui(t),function(t){return[t]});return n=fi(n),Hr(t,e,function(t,e){return n(t,e[0])})}var Fa=Xo(Ua),Ma=Xo(ka);function za(t){return null==t?[]:ne(t,Ua(t))}var $a=Do(function(t,n,e){return n=n.toLowerCase(),t+(e?qa(n):n)});function qa(t){return Za(ba(t).toLowerCase())}function Wa(t){return(t=ba(t))&&t.replace(wt,ie).replace(nn,"")}var Ya=Do(function(t,n,e){return t+(e?"-":"")+n.toLowerCase()}),Ha=Do(function(t,n,e){return t+(e?" ":"")+n.toLowerCase()}),Va=No("toLowerCase");var Ja=Do(function(t,n,e){return t+(e?"_":"")+n.toLowerCase()});var Ka=Do(function(t,n,e){return t+(e?" ":"")+Za(n)});var Ga=Do(function(t,n,e){return t+(e?" ":"")+n.toUpperCase()}),Za=No("toUpperCase");function Xa(t,n,e){return t=ba(t),(n=e?o:n)===o?function(t){return un.test(t)}(t)?function(t){return t.match(rn)||[]}(t):function(t){return t.match(lt)||[]}(t):t.match(n)||[]}var Qa=Zr(function(t,n){try{return xn(t,o,n)}catch(t){return Zu(t)?t:new Rt(t)}}),ts=oi(function(t,n){return Cn(n,function(n){n=Di(n),ur(t,n,Cu(t[n],t))}),t});function ns(t){return function(){return t}}var es=zo(),rs=zo(!0);function os(t){return t}function is(t){return Ir("function"==typeof t?t:cr(t,1))}var us=Zr(function(t,n){return function(e){return jr(e,t,n)}}),as=Zr(function(t,n){return function(e){return jr(t,e,n)}});function ss(t,n,e){var r=Ua(n),o=Er(n,r);null!=e||na(n)&&(o.length||!r.length)||(e=n,n=t,t=this,o=Er(n,Ua(n)));var i=!(na(e)&&"chain"in e&&!e.chain),u=Xu(t);return Cn(o,function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(i||n){var e=t(this.__wrapped__);return(e.__actions__=jo(this.__actions__)).push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,Nn([this.value()],arguments))})}),t}function cs(){}var fs=Yo(In),ls=Yo(Un),hs=Yo(Mn);function ps(t){return Ai(t)?Jn(Di(t)):function(t){return function(n){return Rr(n,t)}}(t)}var ds=Vo(),gs=Vo(!0);function vs(){return[]}function ys(){return!1}var _s=Wo(function(t,n){return t+n},0),bs=Go("ceil"),ms=Wo(function(t,n){return t/n},1),ws=Go("floor");var As,Es=Wo(function(t,n){return t*n},1),Rs=Go("round"),Os=Wo(function(t,n){return t-n},0);return ze.after=function(t,n){if("function"!=typeof n)throw new Ct(i);return t=ga(t),function(){if(--t<1)return n.apply(this,arguments)}},ze.ary=xu,ze.assign=ma,ze.assignIn=wa,ze.assignInWith=Aa,ze.assignWith=Ea,ze.at=Ra,ze.before=Bu,ze.bind=Cu,ze.bindAll=ts,ze.bindKey=ju,ze.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Yu(t)?t:[t]},ze.chain=pu,ze.chunk=function(t,n,e){n=(e?wi(t,n,e):n===o)?1:be(ga(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var u=0,a=0,s=r(gn(i/n));ui?0:i+e),(r=r===o||r>i?i:ga(r))<0&&(r+=i),r=e>r?0:va(r);e>>0)?(t=ba(t))&&("string"==typeof n||null!=n&&!ua(n))&&!(n=fo(n))&&se(t)?Eo(ge(t),0,e):t.split(n,e):[]},ze.spread=function(t,n){if("function"!=typeof t)throw new Ct(i);return n=null==n?0:be(ga(n),0),Zr(function(e){var r=e[n],o=Eo(e,0,n);return r&&Nn(o,r),xn(t,this,o)})},ze.tail=function(t){var n=null==t?0:t.length;return n?oo(t,1,n):[]},ze.take=function(t,n,e){return t&&t.length?oo(t,0,(n=e||n===o?1:ga(n))<0?0:n):[]},ze.takeRight=function(t,n,e){var r=null==t?0:t.length;return r?oo(t,(n=r-(n=e||n===o?1:ga(n)))<0?0:n,r):[]},ze.takeRightWhile=function(t,n){return t&&t.length?go(t,fi(n,3),!1,!0):[]},ze.takeWhile=function(t,n){return t&&t.length?go(t,fi(n,3)):[]},ze.tap=function(t,n){return n(t),t},ze.throttle=function(t,n,e){var r=!0,o=!0;if("function"!=typeof t)throw new Ct(i);return na(e)&&(r="leading"in e?!!e.leading:r,o="trailing"in e?!!e.trailing:o),Uu(t,n,{leading:r,maxWait:n,trailing:o})},ze.thru=du,ze.toArray=pa,ze.toPairs=Fa,ze.toPairsIn=Ma,ze.toPath=function(t){return Yu(t)?In(t,Di):ca(t)?[t]:jo(Ni(ba(t)))},ze.toPlainObject=_a,ze.transform=function(t,n,e){var r=Yu(t),o=r||Ku(t)||fa(t);if(n=fi(n,4),null==e){var i=t&&t.constructor;e=o?r?new i:[]:na(t)&&Xu(i)?$e(Vt(t)):{}}return(o?Cn:wr)(t,function(t,r,o){return n(e,t,r,o)}),e},ze.unary=function(t){return xu(t,1)},ze.union=eu,ze.unionBy=ru,ze.unionWith=ou,ze.uniq=function(t){return t&&t.length?lo(t):[]},ze.uniqBy=function(t,n){return t&&t.length?lo(t,fi(n,2)):[]},ze.uniqWith=function(t,n){return n="function"==typeof n?n:o,t&&t.length?lo(t,o,n):[]},ze.unset=function(t,n){return null==t||ho(t,n)},ze.unzip=iu,ze.unzipWith=uu,ze.update=function(t,n,e){return null==t?t:po(t,n,mo(e))},ze.updateWith=function(t,n,e,r){return r="function"==typeof r?r:o,null==t?t:po(t,n,mo(e),r)},ze.values=za,ze.valuesIn=function(t){return null==t?[]:ne(t,ka(t))},ze.without=au,ze.words=Xa,ze.wrap=function(t,n){return Du(mo(n),t)},ze.xor=su,ze.xorBy=cu,ze.xorWith=fu,ze.zip=lu,ze.zipObject=function(t,n){return _o(t||[],n||[],er)},ze.zipObjectDeep=function(t,n){return _o(t||[],n||[],to)},ze.zipWith=hu,ze.entries=Fa,ze.entriesIn=Ma,ze.extend=wa,ze.extendWith=Aa,ss(ze,ze),ze.add=_s,ze.attempt=Qa,ze.camelCase=$a,ze.capitalize=qa,ze.ceil=bs,ze.clamp=function(t,n,e){return e===o&&(e=n,n=o),e!==o&&(e=(e=ya(e))==e?e:0),n!==o&&(n=(n=ya(n))==n?n:0),sr(ya(t),n,e)},ze.clone=function(t){return cr(t,4)},ze.cloneDeep=function(t){return cr(t,5)},ze.cloneDeepWith=function(t,n){return cr(t,5,n="function"==typeof n?n:o)},ze.cloneWith=function(t,n){return cr(t,4,n="function"==typeof n?n:o)},ze.conformsTo=function(t,n){return null==n||fr(t,n,Ua(n))},ze.deburr=Wa,ze.defaultTo=function(t,n){return null==t||t!=t?n:t},ze.divide=ms,ze.endsWith=function(t,n,e){t=ba(t),n=fo(n);var r=t.length,i=e=e===o?r:sr(ga(e),0,r);return(e-=n.length)>=0&&t.slice(e,i)==n},ze.eq=zu,ze.escape=function(t){return(t=ba(t))&&Z.test(t)?t.replace(K,ue):t},ze.escapeRegExp=function(t){return(t=ba(t))&&it.test(t)?t.replace(ot,"\\$&"):t},ze.every=function(t,n,e){var r=Yu(t)?Un:gr;return e&&wi(t,n,e)&&(n=o),r(t,fi(n,3))},ze.find=yu,ze.findIndex=Wi,ze.findKey=function(t,n){return $n(t,fi(n,3),wr)},ze.findLast=_u,ze.findLastIndex=Yi,ze.findLastKey=function(t,n){return $n(t,fi(n,3),Ar)},ze.floor=ws,ze.forEach=bu,ze.forEachRight=mu,ze.forIn=function(t,n){return null==t?t:br(t,fi(n,3),ka)},ze.forInRight=function(t,n){return null==t?t:mr(t,fi(n,3),ka)},ze.forOwn=function(t,n){return t&&wr(t,fi(n,3))},ze.forOwnRight=function(t,n){return t&&Ar(t,fi(n,3))},ze.get=Sa,ze.gt=$u,ze.gte=qu,ze.has=function(t,n){return null!=t&&yi(t,n,xr)},ze.hasIn=xa,ze.head=Vi,ze.identity=os,ze.includes=function(t,n,e,r){t=Vu(t)?t:za(t),e=e&&!r?ga(e):0;var o=t.length;return e<0&&(e=be(o+e,0)),sa(t)?e<=o&&t.indexOf(n,e)>-1:!!o&&Wn(t,n,e)>-1},ze.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var o=null==e?0:ga(e);return o<0&&(o=be(r+o,0)),Wn(t,n,o)},ze.inRange=function(t,n,e){return n=da(n),e===o?(e=n,n=0):e=da(e),function(t,n,e){return t>=me(n,e)&&t=-9007199254740991&&t<=d},ze.isSet=aa,ze.isString=sa,ze.isSymbol=ca,ze.isTypedArray=fa,ze.isUndefined=function(t){return t===o},ze.isWeakMap=function(t){return ea(t)&&vi(t)==k},ze.isWeakSet=function(t){return ea(t)&&"[object WeakSet]"==Tr(t)},ze.join=function(t,n){return null==t?"":zn.call(t,n)},ze.kebabCase=Ya,ze.last=Zi,ze.lastIndexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=r;return e!==o&&(i=(i=ga(e))<0?be(r+i,0):me(i,r-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,i):qn(t,Hn,i,!0)},ze.lowerCase=Ha,ze.lowerFirst=Va,ze.lt=la,ze.lte=ha,ze.max=function(t){return t&&t.length?vr(t,os,Sr):o},ze.maxBy=function(t,n){return t&&t.length?vr(t,fi(n,2),Sr):o},ze.mean=function(t){return Vn(t,os)},ze.meanBy=function(t,n){return Vn(t,fi(n,2))},ze.min=function(t){return t&&t.length?vr(t,os,Fr):o},ze.minBy=function(t,n){return t&&t.length?vr(t,fi(n,2),Fr):o},ze.stubArray=vs,ze.stubFalse=ys,ze.stubObject=function(){return{}},ze.stubString=function(){return""},ze.stubTrue=function(){return!0},ze.multiply=Es,ze.nth=function(t,n){return t&&t.length?Wr(t,ga(n)):o},ze.noConflict=function(){return vn._===this&&(vn._=zt),this},ze.noop=cs,ze.now=Su,ze.pad=function(t,n,e){t=ba(t);var r=(n=ga(n))?de(t):0;if(!n||r>=n)return t;var o=(n-r)/2;return Ho(yn(o),e)+t+Ho(gn(o),e)},ze.padEnd=function(t,n,e){t=ba(t);var r=(n=ga(n))?de(t):0;return n&&rn){var r=t;t=n,n=r}if(e||t%1||n%1){var i=Ee();return me(t+i*(n-t+hn("1e-"+((i+"").length-1))),n)}return Kr(t,n)},ze.reduce=function(t,n,e){var r=Yu(t)?Dn:Gn,o=arguments.length<3;return r(t,fi(n,4),e,o,pr)},ze.reduceRight=function(t,n,e){var r=Yu(t)?Fn:Gn,o=arguments.length<3;return r(t,fi(n,4),e,o,dr)},ze.repeat=function(t,n,e){return n=(e?wi(t,n,e):n===o)?1:ga(n),Gr(ba(t),n)},ze.replace=function(){var t=arguments,n=ba(t[0]);return t.length<3?n:n.replace(t[1],t[2])},ze.result=function(t,n,e){var r=-1,i=(n=wo(n,t)).length;for(i||(i=1,t=o);++rd)return[];var e=v,r=me(t,v);n=fi(n),t-=v;for(var o=Xn(r,n);++e=u)return t;var s=e-de(r);if(s<1)return r;var c=a?Eo(a,0,s).join(""):t.slice(0,s);if(i===o)return c+r;if(a&&(s+=c.length-s),ua(i)){if(t.slice(s).search(i)){var f,l=c;for(i.global||(i=xt(i.source,ba(gt.exec(i))+"g")),i.lastIndex=0;f=i.exec(l);)var h=f.index;c=c.slice(0,h===o?s:h)}}else if(t.indexOf(fo(i),s)!=s){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+r},ze.unescape=function(t){return(t=ba(t))&&G.test(t)?t.replace(J,ye):t},ze.uniqueId=function(t){var n=++Nt;return ba(t)+n},ze.upperCase=Ga,ze.upperFirst=Za,ze.each=bu,ze.eachRight=mu,ze.first=Vi,ss(ze,(As={},wr(ze,function(t,n){It.call(ze.prototype,n)||(As[n]=t)}),As),{chain:!1}),ze.VERSION="4.17.23",Cn(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){ze[t].placeholder=ze}),Cn(["drop","take"],function(t,n){Ye.prototype[t]=function(e){e=e===o?1:be(ga(e),0);var r=this.__filtered__&&!n?new Ye(this):this.clone();return r.__filtered__?r.__takeCount__=me(e,r.__takeCount__):r.__views__.push({size:me(e,v),type:t+(r.__dir__<0?"Right":"")}),r},Ye.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}}),Cn(["filter","map","takeWhile"],function(t,n){var e=n+1,r=1==e||3==e;Ye.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:fi(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}}),Cn(["head","last"],function(t,n){var e="take"+(n?"Right":"");Ye.prototype[t]=function(){return this[e](1).value()[0]}}),Cn(["initial","tail"],function(t,n){var e="drop"+(n?"":"Right");Ye.prototype[t]=function(){return this.__filtered__?new Ye(this):this[e](1)}}),Ye.prototype.compact=function(){return this.filter(os)},Ye.prototype.find=function(t){return this.filter(t).head()},Ye.prototype.findLast=function(t){return this.reverse().find(t)},Ye.prototype.invokeMap=Zr(function(t,n){return"function"==typeof t?new Ye(this):this.map(function(e){return jr(e,t,n)})}),Ye.prototype.reject=function(t){return this.filter(Iu(fi(t)))},Ye.prototype.slice=function(t,n){t=ga(t);var e=this;return e.__filtered__&&(t>0||n<0)?new Ye(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==o&&(e=(n=ga(n))<0?e.dropRight(-n):e.take(n-t)),e)},Ye.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Ye.prototype.toArray=function(){return this.take(v)},wr(Ye.prototype,function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),r=/^(?:head|last)$/.test(n),i=ze[r?"take"+("last"==n?"Right":""):n],u=r||/^find/.test(n);i&&(ze.prototype[n]=function(){var n=this.__wrapped__,a=r?[1]:arguments,s=n instanceof Ye,c=a[0],f=s||Yu(n),l=function(t){var n=i.apply(ze,Nn([t],a));return r&&h?n[0]:n};f&&e&&"function"==typeof c&&1!=c.length&&(s=f=!1);var h=this.__chain__,p=!!this.__actions__.length,d=u&&!h,g=s&&!p;if(!u&&f){n=g?n:new Ye(this);var v=t.apply(n,a);return v.__actions__.push({func:du,args:[l],thisArg:o}),new We(v,h)}return d&&g?t.apply(this,a):(v=this.thru(l),d?r?v.value()[0]:v.value():v)})}),Cn(["pop","push","shift","sort","splice","unshift"],function(t){var n=jt[t],e=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);ze.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var o=this.value();return n.apply(Yu(o)?o:[],t)}return this[e](function(e){return n.apply(Yu(e)?e:[],t)})}}),wr(Ye.prototype,function(t,n){var e=ze[n];if(e){var r=e.name+"";It.call(Ue,r)||(Ue[r]=[]),Ue[r].push({name:n,func:e})}}),Ue[$o(o,2).name]=[{name:"wrapper",func:o}],Ye.prototype.clone=function(){var t=new Ye(this.__wrapped__);return t.__actions__=jo(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=jo(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=jo(this.__views__),t},Ye.prototype.reverse=function(){if(this.__filtered__){var t=new Ye(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Ye.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=Yu(t),r=n<0,o=e?t.length:0,i=function(t,n,e){var r=-1,o=e.length;for(;++r=this.__values__.length;return{done:t,value:t?o:this.__values__[this.__index__++]}},ze.prototype.plant=function(t){for(var n,e=this;e instanceof qe;){var r=Mi(e);r.__index__=0,r.__values__=o,n?i.__wrapped__=r:n=r;var i=r;e=e.__wrapped__}return i.__wrapped__=t,n},ze.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Ye){var n=t;return this.__actions__.length&&(n=new Ye(this)),(n=n.reverse()).__actions__.push({func:du,args:[nu],thisArg:o}),new We(n,this.__chain__)}return this.thru(nu)},ze.prototype.toJSON=ze.prototype.valueOf=ze.prototype.value=function(){return vo(this.__wrapped__,this.__actions__)},ze.prototype.first=ze.prototype.head,Xt&&(ze.prototype[Xt]=function(){return this}),ze}();vn._=_e,(r=function(){return _e}.call(n,e,n,t))===o||(t.exports=r)}.call(this)},205(){},812(){},606(t){var n,e,r=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function u(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{e="function"==typeof clearTimeout?clearTimeout:i}catch(t){e=i}}();var a,s=[],c=!1,f=-1;function l(){c&&a&&(c=!1,a.length?s=a.concat(s):f=-1,s.length&&h())}function h(){if(!c){var t=u(l);c=!0;for(var n=s.length;n;){for(a=s,s=[];++f1)for(var e=1;e{const n=u.call(t);return l[n]||(l[n]=n.slice(8,-1).toLowerCase())});var l;const h=t=>(t=t.toLowerCase(),n=>f(n)===t),p=t=>n=>typeof n===t,{isArray:d}=Array,g=p("undefined");function v(t){return null!==t&&!g(t)&&null!==t.constructor&&!g(t.constructor)&&b(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const y=h("ArrayBuffer");const _=p("string"),b=p("function"),m=p("number"),w=t=>null!==t&&"object"==typeof t,A=t=>{if("object"!==f(t))return!1;const n=a(t);return!(null!==n&&n!==Object.prototype&&null!==Object.getPrototypeOf(n)||c in t||s in t)},E=h("Date"),R=h("File"),O=h("Blob"),T=h("FileList"),S=h("URLSearchParams"),[x,B,C,j]=["ReadableStream","Request","Response","Headers"].map(h);function U(t,n,{allOwnKeys:e=!1}={}){if(null==t)return;let r,o;if("object"!=typeof t&&(t=[t]),d(t))for(r=0,o=t.length;r0;)if(r=e[o],n===r.toLowerCase())return r;return null}const P="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:e.g,L=t=>!g(t)&&t!==P;const I=(N="undefined"!=typeof Uint8Array&&a(Uint8Array),t=>N&&t instanceof N);var N;const D=h("HTMLFormElement"),F=(({hasOwnProperty:t})=>(n,e)=>t.call(n,e))(Object.prototype),M=h("RegExp"),z=(t,n)=>{const e=Object.getOwnPropertyDescriptors(t),r={};U(e,(e,o)=>{let i;!1!==(i=n(e,o,t))&&(r[o]=i||e)}),Object.defineProperties(t,r)};const $=h("AsyncFunction"),q=(W="function"==typeof setImmediate,Y=b(P.postMessage),W?setImmediate:Y?(H=`axios@${Math.random()}`,V=[],P.addEventListener("message",({source:t,data:n})=>{t===P&&n===H&&V.length&&V.shift()()},!1),t=>{V.push(t),P.postMessage(H,"*")}):t=>setTimeout(t));var W,Y,H,V;const J="undefined"!=typeof queueMicrotask?queueMicrotask.bind(P):void 0!==r&&r.nextTick||q;var K={isArray:d,isArrayBuffer:y,isBuffer:v,isFormData:t=>{let n;return t&&("function"==typeof FormData&&t instanceof FormData||b(t.append)&&("formdata"===(n=f(t))||"object"===n&&b(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){let n;return n="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&y(t.buffer),n},isString:_,isNumber:m,isBoolean:t=>!0===t||!1===t,isObject:w,isPlainObject:A,isEmptyObject:t=>{if(!w(t)||v(t))return!1;try{return 0===Object.keys(t).length&&Object.getPrototypeOf(t)===Object.prototype}catch(t){return!1}},isReadableStream:x,isRequest:B,isResponse:C,isHeaders:j,isUndefined:g,isDate:E,isFile:R,isBlob:O,isRegExp:M,isFunction:b,isStream:t=>w(t)&&b(t.pipe),isURLSearchParams:S,isTypedArray:I,isFileList:T,forEach:U,merge:function t(){const{caseless:n,skipUndefined:e}=L(this)&&this||{},r={},o=(o,i)=>{if("__proto__"===i||"constructor"===i||"prototype"===i)return;const u=n&&k(r,i)||i;A(r[u])&&A(o)?r[u]=t(r[u],o):A(o)?r[u]=t({},o):d(o)?r[u]=o.slice():e&&g(o)||(r[u]=o)};for(let t=0,n=arguments.length;t(U(n,(n,r)=>{e&&b(n)?Object.defineProperty(t,r,{value:i(n,e),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(t,r,{value:n,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),t),trim:t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:t=>(65279===t.charCodeAt(0)&&(t=t.slice(1)),t),inherits:(t,n,e,r)=>{t.prototype=Object.create(n.prototype,r),Object.defineProperty(t.prototype,"constructor",{value:t,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(t,"super",{value:n.prototype}),e&&Object.assign(t.prototype,e)},toFlatObject:(t,n,e,r)=>{let o,i,u;const s={};if(n=n||{},null==t)return n;do{for(o=Object.getOwnPropertyNames(t),i=o.length;i-- >0;)u=o[i],r&&!r(u,t,n)||s[u]||(n[u]=t[u],s[u]=!0);t=!1!==e&&a(t)}while(t&&(!e||e(t,n))&&t!==Object.prototype);return n},kindOf:f,kindOfTest:h,endsWith:(t,n,e)=>{t=String(t),(void 0===e||e>t.length)&&(e=t.length),e-=n.length;const r=t.indexOf(n,e);return-1!==r&&r===e},toArray:t=>{if(!t)return null;if(d(t))return t;let n=t.length;if(!m(n))return null;const e=new Array(n);for(;n-- >0;)e[n]=t[n];return e},forEachEntry:(t,n)=>{const e=(t&&t[s]).call(t);let r;for(;(r=e.next())&&!r.done;){const e=r.value;n.call(t,e[0],e[1])}},matchAll:(t,n)=>{let e;const r=[];for(;null!==(e=t.exec(n));)r.push(e);return r},isHTMLForm:D,hasOwnProperty:F,hasOwnProp:F,reduceDescriptors:z,freezeMethods:t=>{z(t,(n,e)=>{if(b(t)&&-1!==["arguments","caller","callee"].indexOf(e))return!1;const r=t[e];b(r)&&(n.enumerable=!1,"writable"in n?n.writable=!1:n.set||(n.set=()=>{throw Error("Can not rewrite read-only method '"+e+"'")}))})},toObjectSet:(t,n)=>{const e={},r=t=>{t.forEach(t=>{e[t]=!0})};return d(t)?r(t):r(String(t).split(n)),e},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,n,e){return n.toUpperCase()+e}),noop:()=>{},toFiniteNumber:(t,n)=>null!=t&&Number.isFinite(t=+t)?t:n,findKey:k,global:P,isContextDefined:L,isSpecCompliantForm:function(t){return!!(t&&b(t.append)&&"FormData"===t[c]&&t[s])},toJSONObject:t=>{const n=new Array(10),e=(t,r)=>{if(w(t)){if(n.indexOf(t)>=0)return;if(v(t))return t;if(!("toJSON"in t)){n[r]=t;const o=d(t)?[]:{};return U(t,(t,n)=>{const i=e(t,r+1);!g(i)&&(o[n]=i)}),n[r]=void 0,o}}return t};return e(t,0)},isAsyncFn:$,isThenable:t=>t&&(w(t)||b(t))&&b(t.then)&&b(t.catch),setImmediate:q,asap:J,isIterable:t=>null!=t&&b(t[s])};class G extends Error{static from(t,n,e,r,o,i){const u=new G(t.message,n||t.code,e,r,o);return u.cause=t,u.name=t.name,i&&Object.assign(u,i),u}constructor(t,n,e,r,o){super(t),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),e&&(this.config=e),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:K.toJSONObject(this.config),code:this.code,status:this.status}}}G.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",G.ERR_BAD_OPTION="ERR_BAD_OPTION",G.ECONNABORTED="ECONNABORTED",G.ETIMEDOUT="ETIMEDOUT",G.ERR_NETWORK="ERR_NETWORK",G.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",G.ERR_DEPRECATED="ERR_DEPRECATED",G.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",G.ERR_BAD_REQUEST="ERR_BAD_REQUEST",G.ERR_CANCELED="ERR_CANCELED",G.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",G.ERR_INVALID_URL="ERR_INVALID_URL";var Z=G;function X(t){return K.isPlainObject(t)||K.isArray(t)}function Q(t){return K.endsWith(t,"[]")?t.slice(0,-2):t}function tt(t,n,e){return t?t.concat(n).map(function(t,n){return t=Q(t),!e&&n?"["+t+"]":t}).join(e?".":""):n}const nt=K.toFlatObject(K,{},null,function(t){return/^is[A-Z]/.test(t)});function et(t,n,e){if(!K.isObject(t))throw new TypeError("target must be an object");n=n||new FormData;const r=(e=K.toFlatObject(e,{metaTokens:!0,dots:!1,indexes:!1},!1,function(t,n){return!K.isUndefined(n[t])})).metaTokens,i=e.visitor||f,u=e.dots,a=e.indexes,s=(e.Blob||"undefined"!=typeof Blob&&Blob)&&K.isSpecCompliantForm(n);if(!K.isFunction(i))throw new TypeError("visitor must be a function");function c(t){if(null===t)return"";if(K.isDate(t))return t.toISOString();if(K.isBoolean(t))return t.toString();if(!s&&K.isBlob(t))throw new Z("Blob is not supported. Use a Buffer instead.");return K.isArrayBuffer(t)||K.isTypedArray(t)?s&&"function"==typeof Blob?new Blob([t]):o.from(t):t}function f(t,e,o){let i=t;if(t&&!o&&"object"==typeof t)if(K.endsWith(e,"{}"))e=r?e:e.slice(0,-2),t=JSON.stringify(t);else if(K.isArray(t)&&function(t){return K.isArray(t)&&!t.some(X)}(t)||(K.isFileList(t)||K.endsWith(e,"[]"))&&(i=K.toArray(t)))return e=Q(e),i.forEach(function(t,r){!K.isUndefined(t)&&null!==t&&n.append(!0===a?tt([e],r,u):null===a?e:e+"[]",c(t))}),!1;return!!X(t)||(n.append(tt(o,e,u),c(t)),!1)}const l=[],h=Object.assign(nt,{defaultVisitor:f,convertValue:c,isVisitable:X});if(!K.isObject(t))throw new TypeError("data must be an object");return function t(e,r){if(!K.isUndefined(e)){if(-1!==l.indexOf(e))throw Error("Circular reference detected in "+r.join("."));l.push(e),K.forEach(e,function(e,o){!0===(!(K.isUndefined(e)||null===e)&&i.call(n,e,K.isString(o)?o.trim():o,r,h))&&t(e,r?r.concat(o):[o])}),l.pop()}}(t),n}function rt(t){const n={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(t){return n[t]})}function ot(t,n){this._pairs=[],t&&et(t,this,n)}const it=ot.prototype;function ut(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function at(t,n,e){if(!n)return t;const r=e&&e.encode||ut,o=K.isFunction(e)?{serialize:e}:e,i=o&&o.serialize;let u;if(u=i?i(n,o):K.isURLSearchParams(n)?n.toString():new ot(n,o).toString(r),u){const n=t.indexOf("#");-1!==n&&(t=t.slice(0,n)),t+=(-1===t.indexOf("?")?"?":"&")+u}return t}it.append=function(t,n){this._pairs.push([t,n])},it.toString=function(t){const n=t?function(n){return t.call(this,n,rt)}:rt;return this._pairs.map(function(t){return n(t[0])+"="+n(t[1])},"").join("&")};var st=class{constructor(){this.handlers=[]}use(t,n,e){return this.handlers.push({fulfilled:t,rejected:n,synchronous:!!e&&e.synchronous,runWhen:e?e.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){K.forEach(this.handlers,function(n){null!==n&&t(n)})}},ct={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},ft={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:ot,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const lt="undefined"!=typeof window&&"undefined"!=typeof document,ht="object"==typeof navigator&&navigator||void 0,pt=lt&&(!ht||["ReactNative","NativeScript","NS"].indexOf(ht.product)<0),dt="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,gt=lt&&window.location.href||"http://localhost";var vt={...Object.freeze({__proto__:null,hasBrowserEnv:lt,hasStandardBrowserWebWorkerEnv:dt,hasStandardBrowserEnv:pt,navigator:ht,origin:gt}),...ft};function yt(t){function n(t,e,r,o){let i=t[o++];if("__proto__"===i)return!0;const u=Number.isFinite(+i),a=o>=t.length;if(i=!i&&K.isArray(r)?r.length:i,a)return K.hasOwnProp(r,i)?r[i]=[r[i],e]:r[i]=e,!u;r[i]&&K.isObject(r[i])||(r[i]=[]);return n(t,e,r[i],o)&&K.isArray(r[i])&&(r[i]=function(t){const n={},e=Object.keys(t);let r;const o=e.length;let i;for(r=0;r{n(function(t){return K.matchAll(/\w+|\[(\w*)]/g,t).map(t=>"[]"===t[0]?"":t[1]||t[0])}(t),r,e,0)}),e}return null}const _t={transitional:ct,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const e=n.getContentType()||"",r=e.indexOf("application/json")>-1,o=K.isObject(t);o&&K.isHTMLForm(t)&&(t=new FormData(t));if(K.isFormData(t))return r?JSON.stringify(yt(t)):t;if(K.isArrayBuffer(t)||K.isBuffer(t)||K.isStream(t)||K.isFile(t)||K.isBlob(t)||K.isReadableStream(t))return t;if(K.isArrayBufferView(t))return t.buffer;if(K.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(o){if(e.indexOf("application/x-www-form-urlencoded")>-1)return function(t,n){return et(t,new vt.classes.URLSearchParams,{visitor:function(t,n,e,r){return vt.isNode&&K.isBuffer(t)?(this.append(n,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...n})}(t,this.formSerializer).toString();if((i=K.isFileList(t))||e.indexOf("multipart/form-data")>-1){const n=this.env&&this.env.FormData;return et(i?{"files[]":t}:t,n&&new n,this.formSerializer)}}return o||r?(n.setContentType("application/json",!1),function(t,n,e){if(K.isString(t))try{return(n||JSON.parse)(t),K.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(e||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const n=this.transitional||_t.transitional,e=n&&n.forcedJSONParsing,r="json"===this.responseType;if(K.isResponse(t)||K.isReadableStream(t))return t;if(t&&K.isString(t)&&(e&&!this.responseType||r)){const e=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t,this.parseReviver)}catch(t){if(e){if("SyntaxError"===t.name)throw Z.from(t,Z.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:vt.classes.FormData,Blob:vt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};K.forEach(["delete","get","head","post","put","patch"],t=>{_t.headers[t]={}});var bt=_t;const mt=K.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const wt=Symbol("internals");function At(t){return t&&String(t).trim().toLowerCase()}function Et(t){return!1===t||null==t?t:K.isArray(t)?t.map(Et):String(t)}function Rt(t,n,e,r,o){return K.isFunction(r)?r.call(this,n,e):(o&&(n=e),K.isString(n)?K.isString(r)?-1!==n.indexOf(r):K.isRegExp(r)?r.test(n):void 0:void 0)}class Ot{constructor(t){t&&this.set(t)}set(t,n,e){const r=this;function o(t,n,e){const o=At(n);if(!o)throw new Error("header name must be a non-empty string");const i=K.findKey(r,o);(!i||void 0===r[i]||!0===e||void 0===e&&!1!==r[i])&&(r[i||n]=Et(t))}const i=(t,n)=>K.forEach(t,(t,e)=>o(t,e,n));if(K.isPlainObject(t)||t instanceof this.constructor)i(t,n);else if(K.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))i((t=>{const n={};let e,r,o;return t&&t.split("\n").forEach(function(t){o=t.indexOf(":"),e=t.substring(0,o).trim().toLowerCase(),r=t.substring(o+1).trim(),!e||n[e]&&mt[e]||("set-cookie"===e?n[e]?n[e].push(r):n[e]=[r]:n[e]=n[e]?n[e]+", "+r:r)}),n})(t),n);else if(K.isObject(t)&&K.isIterable(t)){let e,r,o={};for(const n of t){if(!K.isArray(n))throw TypeError("Object iterator must return a key-value pair");o[r=n[0]]=(e=o[r])?K.isArray(e)?[...e,n[1]]:[e,n[1]]:n[1]}i(o,n)}else null!=t&&o(n,t,e);return this}get(t,n){if(t=At(t)){const e=K.findKey(this,t);if(e){const t=this[e];if(!n)return t;if(!0===n)return function(t){const n=Object.create(null),e=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=e.exec(t);)n[r[1]]=r[2];return n}(t);if(K.isFunction(n))return n.call(this,t,e);if(K.isRegExp(n))return n.exec(t);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=At(t)){const e=K.findKey(this,t);return!(!e||void 0===this[e]||n&&!Rt(0,this[e],e,n))}return!1}delete(t,n){const e=this;let r=!1;function o(t){if(t=At(t)){const o=K.findKey(e,t);!o||n&&!Rt(0,e[o],o,n)||(delete e[o],r=!0)}}return K.isArray(t)?t.forEach(o):o(t),r}clear(t){const n=Object.keys(this);let e=n.length,r=!1;for(;e--;){const o=n[e];t&&!Rt(0,this[o],o,t,!0)||(delete this[o],r=!0)}return r}normalize(t){const n=this,e={};return K.forEach(this,(r,o)=>{const i=K.findKey(e,o);if(i)return n[i]=Et(r),void delete n[o];const u=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,e)=>n.toUpperCase()+e)}(o):String(o).trim();u!==o&&delete n[o],n[u]=Et(r),e[u]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return K.forEach(this,(e,r)=>{null!=e&&!1!==e&&(n[r]=t&&K.isArray(e)?e.join(", "):e)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const e=new this(t);return n.forEach(t=>e.set(t)),e}static accessor(t){const n=(this[wt]=this[wt]={accessors:{}}).accessors,e=this.prototype;function r(t){const r=At(t);n[r]||(!function(t,n){const e=K.toCamelCase(" "+n);["get","set","has"].forEach(r=>{Object.defineProperty(t,r+e,{value:function(t,e,o){return this[r].call(this,n,t,e,o)},configurable:!0})})}(e,t),n[r]=!0)}return K.isArray(t)?t.forEach(r):r(t),this}}Ot.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),K.reduceDescriptors(Ot.prototype,({value:t},n)=>{let e=n[0].toUpperCase()+n.slice(1);return{get:()=>t,set(t){this[e]=t}}}),K.freezeMethods(Ot);var Tt=Ot;function St(t,n){const e=this||bt,r=n||e,o=Tt.from(r.headers);let i=r.data;return K.forEach(t,function(t){i=t.call(e,i,o.normalize(),n?n.status:void 0)}),o.normalize(),i}function xt(t){return!(!t||!t.__CANCEL__)}var Bt=class extends Z{constructor(t,n,e){super(null==t?"canceled":t,Z.ERR_CANCELED,n,e),this.name="CanceledError",this.__CANCEL__=!0}};function Ct(t,n,e){const r=e.config.validateStatus;e.status&&r&&!r(e.status)?n(new Z("Request failed with status code "+e.status,[Z.ERR_BAD_REQUEST,Z.ERR_BAD_RESPONSE][Math.floor(e.status/100)-4],e.config,e.request,e)):t(e)}const jt=(t,n,e=3)=>{let r=0;const o=function(t,n){t=t||10;const e=new Array(t),r=new Array(t);let o,i=0,u=0;return n=void 0!==n?n:1e3,function(a){const s=Date.now(),c=r[u];o||(o=s),e[i]=a,r[i]=s;let f=u,l=0;for(;f!==i;)l+=e[f++],f%=t;if(i=(i+1)%t,i===u&&(u=(u+1)%t),s-o{o=i,e=null,r&&(clearTimeout(r),r=null),t(...n)};return[(...t)=>{const n=Date.now(),a=n-o;a>=i?u(t,n):(e=t,r||(r=setTimeout(()=>{r=null,u(e)},i-a)))},()=>e&&u(e)]}(e=>{const i=e.loaded,u=e.lengthComputable?e.total:void 0,a=i-r,s=o(a);r=i;t({loaded:i,total:u,progress:u?i/u:void 0,bytes:a,rate:s||void 0,estimated:s&&u&&i<=u?(u-i)/s:void 0,event:e,lengthComputable:null!=u,[n?"download":"upload"]:!0})},e)},Ut=(t,n)=>{const e=null!=t;return[r=>n[0]({lengthComputable:e,total:t,loaded:r}),n[1]]},kt=t=>(...n)=>K.asap(()=>t(...n));var Pt=vt.hasStandardBrowserEnv?((t,n)=>e=>(e=new URL(e,vt.origin),t.protocol===e.protocol&&t.host===e.host&&(n||t.port===e.port)))(new URL(vt.origin),vt.navigator&&/(msie|trident)/i.test(vt.navigator.userAgent)):()=>!0,Lt=vt.hasStandardBrowserEnv?{write(t,n,e,r,o,i,u){if("undefined"==typeof document)return;const a=[`${t}=${encodeURIComponent(n)}`];K.isNumber(e)&&a.push(`expires=${new Date(e).toUTCString()}`),K.isString(r)&&a.push(`path=${r}`),K.isString(o)&&a.push(`domain=${o}`),!0===i&&a.push("secure"),K.isString(u)&&a.push(`SameSite=${u}`),document.cookie=a.join("; ")},read(t){if("undefined"==typeof document)return null;const n=document.cookie.match(new RegExp("(?:^|; )"+t+"=([^;]*)"));return n?decodeURIComponent(n[1]):null},remove(t){this.write(t,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function It(t,n,e){let r=!("string"==typeof(o=n)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return t&&(r||0==e)?function(t,n){return n?t.replace(/\/?\/$/,"")+"/"+n.replace(/^\/+/,""):t}(t,n):n}const Nt=t=>t instanceof Tt?{...t}:t;function Dt(t,n){n=n||{};const e={};function r(t,n,e,r){return K.isPlainObject(t)&&K.isPlainObject(n)?K.merge.call({caseless:r},t,n):K.isPlainObject(n)?K.merge({},n):K.isArray(n)?n.slice():n}function o(t,n,e,o){return K.isUndefined(n)?K.isUndefined(t)?void 0:r(void 0,t,0,o):r(t,n,0,o)}function i(t,n){if(!K.isUndefined(n))return r(void 0,n)}function u(t,n){return K.isUndefined(n)?K.isUndefined(t)?void 0:r(void 0,t):r(void 0,n)}function a(e,o,i){return i in n?r(e,o):i in t?r(void 0,e):void 0}const s={url:i,method:i,data:i,baseURL:u,transformRequest:u,transformResponse:u,paramsSerializer:u,timeout:u,timeoutMessage:u,withCredentials:u,withXSRFToken:u,adapter:u,responseType:u,xsrfCookieName:u,xsrfHeaderName:u,onUploadProgress:u,onDownloadProgress:u,decompress:u,maxContentLength:u,maxBodyLength:u,beforeRedirect:u,transport:u,httpAgent:u,httpsAgent:u,cancelToken:u,socketPath:u,responseEncoding:u,validateStatus:a,headers:(t,n,e)=>o(Nt(t),Nt(n),0,!0)};return K.forEach(Object.keys({...t,...n}),function(r){if("__proto__"===r||"constructor"===r||"prototype"===r)return;const i=K.hasOwnProp(s,r)?s[r]:o,u=i(t[r],n[r],r);K.isUndefined(u)&&i!==a||(e[r]=u)}),e}var Ft=t=>{const n=Dt({},t);let{data:e,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:i,headers:u,auth:a}=n;if(n.headers=u=Tt.from(u),n.url=at(It(n.baseURL,n.url,n.allowAbsoluteUrls),t.params,t.paramsSerializer),a&&u.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),K.isFormData(e))if(vt.hasStandardBrowserEnv||vt.hasStandardBrowserWebWorkerEnv)u.setContentType(void 0);else if(K.isFunction(e.getHeaders)){const t=e.getHeaders(),n=["content-type","content-length"];Object.entries(t).forEach(([t,e])=>{n.includes(t.toLowerCase())&&u.set(t,e)})}if(vt.hasStandardBrowserEnv&&(r&&K.isFunction(r)&&(r=r(n)),r||!1!==r&&Pt(n.url))){const t=o&&i&&Lt.read(i);t&&u.set(o,t)}return n};var Mt="undefined"!=typeof XMLHttpRequest&&function(t){return new Promise(function(n,e){const r=Ft(t);let o=r.data;const i=Tt.from(r.headers).normalize();let u,a,s,c,f,{responseType:l,onUploadProgress:h,onDownloadProgress:p}=r;function d(){c&&c(),f&&f(),r.cancelToken&&r.cancelToken.unsubscribe(u),r.signal&&r.signal.removeEventListener("abort",u)}let g=new XMLHttpRequest;function v(){if(!g)return;const r=Tt.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());Ct(function(t){n(t),d()},function(t){e(t),d()},{data:l&&"text"!==l&&"json"!==l?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:r,config:t,request:g}),g=null}g.open(r.method.toUpperCase(),r.url,!0),g.timeout=r.timeout,"onloadend"in g?g.onloadend=v:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(v)},g.onabort=function(){g&&(e(new Z("Request aborted",Z.ECONNABORTED,t,g)),g=null)},g.onerror=function(n){const r=n&&n.message?n.message:"Network Error",o=new Z(r,Z.ERR_NETWORK,t,g);o.event=n||null,e(o),g=null},g.ontimeout=function(){let n=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||ct;r.timeoutErrorMessage&&(n=r.timeoutErrorMessage),e(new Z(n,o.clarifyTimeoutError?Z.ETIMEDOUT:Z.ECONNABORTED,t,g)),g=null},void 0===o&&i.setContentType(null),"setRequestHeader"in g&&K.forEach(i.toJSON(),function(t,n){g.setRequestHeader(n,t)}),K.isUndefined(r.withCredentials)||(g.withCredentials=!!r.withCredentials),l&&"json"!==l&&(g.responseType=r.responseType),p&&([s,f]=jt(p,!0),g.addEventListener("progress",s)),h&&g.upload&&([a,c]=jt(h),g.upload.addEventListener("progress",a),g.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(u=n=>{g&&(e(!n||n.type?new Bt(null,t,g):n),g.abort(),g=null)},r.cancelToken&&r.cancelToken.subscribe(u),r.signal&&(r.signal.aborted?u():r.signal.addEventListener("abort",u)));const y=function(t){const n=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return n&&n[1]||""}(r.url);y&&-1===vt.protocols.indexOf(y)?e(new Z("Unsupported protocol "+y+":",Z.ERR_BAD_REQUEST,t)):g.send(o||null)})};var zt=(t,n)=>{const{length:e}=t=t?t.filter(Boolean):[];if(n||e){let e,r=new AbortController;const o=function(t){if(!e){e=!0,u();const n=t instanceof Error?t:this.reason;r.abort(n instanceof Z?n:new Bt(n instanceof Error?n.message:n))}};let i=n&&setTimeout(()=>{i=null,o(new Z(`timeout of ${n}ms exceeded`,Z.ETIMEDOUT))},n);const u=()=>{t&&(i&&clearTimeout(i),i=null,t.forEach(t=>{t.unsubscribe?t.unsubscribe(o):t.removeEventListener("abort",o)}),t=null)};t.forEach(t=>t.addEventListener("abort",o));const{signal:a}=r;return a.unsubscribe=()=>K.asap(u),a}};const $t=function*(t,n){let e=t.byteLength;if(!n||e{const o=async function*(t,n){for await(const e of qt(t))yield*$t(e,n)}(t,n);let i,u=0,a=t=>{i||(i=!0,r&&r(t))};return new ReadableStream({async pull(t){try{const{done:n,value:r}=await o.next();if(n)return a(),void t.close();let i=r.byteLength;if(e){let t=u+=i;e(t)}t.enqueue(new Uint8Array(r))}catch(t){throw a(t),t}},cancel:t=>(a(t),o.return())},{highWaterMark:2})},{isFunction:Yt}=K,Ht=(({Request:t,Response:n})=>({Request:t,Response:n}))(K.global),{ReadableStream:Vt,TextEncoder:Jt}=K.global,Kt=(t,...n)=>{try{return!!t(...n)}catch(t){return!1}},Gt=t=>{t=K.merge.call({skipUndefined:!0},Ht,t);const{fetch:n,Request:e,Response:r}=t,o=n?Yt(n):"function"==typeof fetch,i=Yt(e),u=Yt(r);if(!o)return!1;const a=o&&Yt(Vt),s=o&&("function"==typeof Jt?(c=new Jt,t=>c.encode(t)):async t=>new Uint8Array(await new e(t).arrayBuffer()));var c;const f=i&&a&&Kt(()=>{let t=!1;const n=new e(vt.origin,{body:new Vt,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return t&&!n}),l=u&&a&&Kt(()=>K.isReadableStream(new r("").body)),h={stream:l&&(t=>t.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!h[t]&&(h[t]=(n,e)=>{let r=n&&n[t];if(r)return r.call(n);throw new Z(`Response type '${t}' is not supported`,Z.ERR_NOT_SUPPORT,e)})});const p=async(t,n)=>{const r=K.toFiniteNumber(t.getContentLength());return null==r?(async t=>{if(null==t)return 0;if(K.isBlob(t))return t.size;if(K.isSpecCompliantForm(t)){const n=new e(vt.origin,{method:"POST",body:t});return(await n.arrayBuffer()).byteLength}return K.isArrayBufferView(t)||K.isArrayBuffer(t)?t.byteLength:(K.isURLSearchParams(t)&&(t+=""),K.isString(t)?(await s(t)).byteLength:void 0)})(n):r};return async t=>{let{url:o,method:u,data:a,signal:s,cancelToken:c,timeout:d,onDownloadProgress:g,onUploadProgress:v,responseType:y,headers:_,withCredentials:b="same-origin",fetchOptions:m}=Ft(t),w=n||fetch;y=y?(y+"").toLowerCase():"text";let A=zt([s,c&&c.toAbortSignal()],d),E=null;const R=A&&A.unsubscribe&&(()=>{A.unsubscribe()});let O;try{if(v&&f&&"get"!==u&&"head"!==u&&0!==(O=await p(_,a))){let t,n=new e(o,{method:"POST",body:a,duplex:"half"});if(K.isFormData(a)&&(t=n.headers.get("content-type"))&&_.setContentType(t),n.body){const[t,e]=Ut(O,jt(kt(v)));a=Wt(n.body,65536,t,e)}}K.isString(b)||(b=b?"include":"omit");const n=i&&"credentials"in e.prototype,s={...m,signal:A,method:u.toUpperCase(),headers:_.normalize().toJSON(),body:a,duplex:"half",credentials:n?b:void 0};E=i&&new e(o,s);let c=await(i?w(E,m):w(o,s));const d=l&&("stream"===y||"response"===y);if(l&&(g||d&&R)){const t={};["status","statusText","headers"].forEach(n=>{t[n]=c[n]});const n=K.toFiniteNumber(c.headers.get("content-length")),[e,o]=g&&Ut(n,jt(kt(g),!0))||[];c=new r(Wt(c.body,65536,e,()=>{o&&o(),R&&R()}),t)}y=y||"text";let T=await h[K.findKey(h,y)||"text"](c,t);return!d&&R&&R(),await new Promise((n,e)=>{Ct(n,e,{data:T,headers:Tt.from(c.headers),status:c.status,statusText:c.statusText,config:t,request:E})})}catch(n){if(R&&R(),n&&"TypeError"===n.name&&/Load failed|fetch/i.test(n.message))throw Object.assign(new Z("Network Error",Z.ERR_NETWORK,t,E,n&&n.response),{cause:n.cause||n});throw Z.from(n,n&&n.code,t,E,n&&n.response)}}},Zt=new Map,Xt=t=>{let n=t&&t.env||{};const{fetch:e,Request:r,Response:o}=n,i=[r,o,e];let u,a,s=i.length,c=Zt;for(;s--;)u=i[s],a=c.get(u),void 0===a&&c.set(u,a=s?new Map:Gt(n)),c=a;return a};Xt();const Qt={http:null,xhr:Mt,fetch:{get:Xt}};K.forEach(Qt,(t,n)=>{if(t){try{Object.defineProperty(t,"name",{value:n})}catch(t){}Object.defineProperty(t,"adapterName",{value:n})}});const tn=t=>`- ${t}`,nn=t=>K.isFunction(t)||null===t||!1===t;var en={getAdapter:function(t,n){t=K.isArray(t)?t:[t];const{length:e}=t;let r,o;const i={};for(let u=0;u`adapter ${t} `+(!1===n?"is not supported by the environment":"is not available in the build"));let n=e?t.length>1?"since :\n"+t.map(tn).join("\n"):" "+tn(t[0]):"as no adapter specified";throw new Z("There is no suitable adapter to dispatch the request "+n,"ERR_NOT_SUPPORT")}return o},adapters:Qt};function rn(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Bt(null,t)}function on(t){rn(t),t.headers=Tt.from(t.headers),t.data=St.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1);return en.getAdapter(t.adapter||bt.adapter,t)(t).then(function(n){return rn(t),n.data=St.call(t,t.transformResponse,n),n.headers=Tt.from(n.headers),n},function(n){return xt(n)||(rn(t),n&&n.response&&(n.response.data=St.call(t,t.transformResponse,n.response),n.response.headers=Tt.from(n.response.headers))),Promise.reject(n)})}const un="1.13.5",an={};["object","boolean","number","function","string","symbol"].forEach((t,n)=>{an[t]=function(e){return typeof e===t||"a"+(n<1?"n ":" ")+t}});const sn={};an.transitional=function(t,n,e){function r(t,n){return"[Axios v"+un+"] Transitional option '"+t+"'"+n+(e?". "+e:"")}return(e,o,i)=>{if(!1===t)throw new Z(r(o," has been removed"+(n?" in "+n:"")),Z.ERR_DEPRECATED);return n&&!sn[o]&&(sn[o]=!0,console.warn(r(o," has been deprecated since v"+n+" and will be removed in the near future"))),!t||t(e,o,i)}},an.spelling=function(t){return(n,e)=>(console.warn(`${e} is likely a misspelling of ${t}`),!0)};var cn={assertOptions:function(t,n,e){if("object"!=typeof t)throw new Z("options must be an object",Z.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let o=r.length;for(;o-- >0;){const i=r[o],u=n[i];if(u){const n=t[i],e=void 0===n||u(n,i,t);if(!0!==e)throw new Z("option "+i+" must be "+e,Z.ERR_BAD_OPTION_VALUE);continue}if(!0!==e)throw new Z("Unknown option "+i,Z.ERR_BAD_OPTION)}},validators:an};const fn=cn.validators;class ln{constructor(t){this.defaults=t||{},this.interceptors={request:new st,response:new st}}async request(t,n){try{return await this._request(t,n)}catch(t){if(t instanceof Error){let n={};Error.captureStackTrace?Error.captureStackTrace(n):n=new Error;const e=n.stack?n.stack.replace(/^.+\n/,""):"";try{t.stack?e&&!String(t.stack).endsWith(e.replace(/^.+\n.+\n/,""))&&(t.stack+="\n"+e):t.stack=e}catch(t){}}throw t}}_request(t,n){"string"==typeof t?(n=n||{}).url=t:n=t||{},n=Dt(this.defaults,n);const{transitional:e,paramsSerializer:r,headers:o}=n;void 0!==e&&cn.assertOptions(e,{silentJSONParsing:fn.transitional(fn.boolean),forcedJSONParsing:fn.transitional(fn.boolean),clarifyTimeoutError:fn.transitional(fn.boolean),legacyInterceptorReqResOrdering:fn.transitional(fn.boolean)},!1),null!=r&&(K.isFunction(r)?n.paramsSerializer={serialize:r}:cn.assertOptions(r,{encode:fn.function,serialize:fn.function},!0)),void 0!==n.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),cn.assertOptions(n,{baseUrl:fn.spelling("baseURL"),withXsrfToken:fn.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&K.merge(o.common,o[n.method]);o&&K.forEach(["delete","get","head","post","put","patch","common"],t=>{delete o[t]}),n.headers=Tt.concat(i,o);const u=[];let a=!0;this.interceptors.request.forEach(function(t){if("function"==typeof t.runWhen&&!1===t.runWhen(n))return;a=a&&t.synchronous;const e=n.transitional||ct;e&&e.legacyInterceptorReqResOrdering?u.unshift(t.fulfilled,t.rejected):u.push(t.fulfilled,t.rejected)});const s=[];let c;this.interceptors.response.forEach(function(t){s.push(t.fulfilled,t.rejected)});let f,l=0;if(!a){const t=[on.bind(this),void 0];for(t.unshift(...u),t.push(...s),f=t.length,c=Promise.resolve(n);l{if(!e._listeners)return;let n=e._listeners.length;for(;n-- >0;)e._listeners[n](t);e._listeners=null}),this.promise.then=t=>{let n;const r=new Promise(t=>{e.subscribe(t),n=t}).then(t);return r.cancel=function(){e.unsubscribe(n)},r},t(function(t,r,o){e.reason||(e.reason=new Bt(t,r,o),n(e.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);-1!==n&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=n=>{t.abort(n)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new pn(function(n){t=n}),cancel:t}}}var dn=pn;const gn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(gn).forEach(([t,n])=>{gn[n]=t});var vn=gn;const yn=function t(n){const e=new hn(n),r=i(hn.prototype.request,e);return K.extend(r,hn.prototype,e,{allOwnKeys:!0}),K.extend(r,e,null,{allOwnKeys:!0}),r.create=function(e){return t(Dt(n,e))},r}(bt);yn.Axios=hn,yn.CanceledError=Bt,yn.CancelToken=dn,yn.isCancel=xt,yn.VERSION=un,yn.toFormData=et,yn.AxiosError=Z,yn.Cancel=yn.CanceledError,yn.all=function(t){return Promise.all(t)},yn.spread=function(t){return function(n){return t.apply(null,n)}},yn.isAxiosError=function(t){return K.isObject(t)&&!0===t.isAxiosError},yn.mergeConfig=Dt,yn.AxiosHeaders=Tt,yn.formToJSON=t=>yt(K.isHTMLForm(t)?new FormData(t):t),yn.getAdapter=en.getAdapter,yn.HttpStatusCode=vn,yn.default=yn,t.exports=yn}},e={};function r(t){var o=e[t];if(void 0!==o)return o.exports;var i=e[t]={id:t,loaded:!1,exports:{}};return n[t].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=n,t=[],r.O=(n,e,o,i)=>{if(!e){var u=1/0;for(f=0;f=i)&&Object.keys(r.O).every(t=>r.O[t](e[s]))?e.splice(s--,1):(a=!1,i0&&t[f-1][2]>i;f--)t[f]=t[f-1];t[f]=[e,o,i]},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),(()=>{var t={847:0,252:0};r.O.j=n=>0===t[n];var n=(n,e)=>{var o,i,[u,a,s]=e,c=0;if(u.some(n=>0!==t[n])){for(o in a)r.o(a,o)&&(r.m[o]=a[o]);if(s)var f=s(r)}for(n&&n(e);cr(988)),r.O(void 0,[252],()=>r(205));var o=r.O(void 0,[252],()=>r(812));o=r.O(o)})(); +(()=>{var e,t={988(e,t,r){function _defineProperties(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:Number.MAX_SAFE_INTEGER,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return debug(e),debug(t),Math.floor(Math.random()*(e-t+1))+t},window.setImageFromLocal=function(e,t){if(e.files&&e.files[0]){var r=new FileReader;r.onload=function(e){$(t).attr("src",e.target.result)},r.readAsDataURL(e.files[0])}},r(854),$(function(){window.history&&window.history.pushState&&(window.history.pushState("",null,window.location.href),$(window).on("popstate",function(e){window.history.pushState("",document.title,window.location.href),e.stopPropagation()}))}),window.initRadioButtons=function(e){var t={onChange:function onChange(e,t){}};$.extend(t,e);var r=$(".customRadioBtnGroup .active").data("title"),n=$(".customRadioBtnGroup .active").data("toggle");$("input[name="+n+"]").prop("value",r),$(".customRadioBtnGroup a").unbind("click"),$(".customRadioBtnGroup a").bind("click",function(){var e=$(this).data("title"),r=$(this).data("toggle");$("input[name="+r+"]").prop("value",e),$('a[data-toggle="'+r+'"]').not('[data-title="'+e+'"]').removeClass("active").addClass("notActive"),$('a[data-toggle="'+r+'"][data-title="'+e+'"]').removeClass("notActive").addClass("active"),t.onChange(e,r)})},$.extend(!0,$.fn.dataTable.defaults,{language:{url:"//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json"},lengthMenu:[[10,25,50,-1],["10 sor","25 sor","50 sor","Összes"]],buttons:{dom:{button:{className:"fg-button ui-button dataTableHeaderButtons"}}},dom:'<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr"lBfr>t<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br"ip>'}),Inputmask.extendDefinitions({x:{validator:"[.,-áéíóöőúàèìòùüűÁÉÍÓÖŐÚÀÈÌÒÙÜŰA-Za-z0-9 ]"}}),Toast.enableTimers(!1),$.fn.select2.defaults.set("language","jp"),window.select2CreateTag=function(e){var t=$.trim(e.term),r=!1;return $("#keywords option").length>0?($("#keywords option").each(function(){if($(this).text().toUpperCase()==t.toUpperCase())return r=!0,!1;r=!1}),r?null:{id:e.term,text:e.term,newTag:!0}):{id:e.term,text:e.term,newTag:!0}},window.ajaxErrorHandler=function(e,t,r){debug(this),debug(e),debug(t),debug(r),e.responseJSON.errors?"jsonapi"in e.responseJSON?ajaxErrorFieldHandlerJsonAPI(e.responseJSON.errors):ajaxErrorFieldHandler(e.responseJSON.errors):404==e.status?ajaxErrorFieldHandler({detail:"Nincs ilyen elem."}):ajaxErrorFieldHandler({detail:"Általános hiba."})},window.ajaxErrorFieldHandlerJsonAPI=function(e,t){var r="",n="Hiba";console.error(e),$.each(e,function(e,t){console.error(t),n="Hiba",r="","title"in t&&(n=t.title),"detail"in t&&(r+="
"+t.detail+"
"),Toast.create(n,r,TOAST_STATUS.DANGER,1e4)})},window.ajaxErrorFieldHandler=function(e,t){var r="";$.each(e,function(e,t){r+="
"+t+"
"}),Toast.create("Hiba!",r,TOAST_STATUS.DANGER,1e4)},$.ajaxSetup({error:ajaxErrorHandler}),$.datepicker._updateDatepicker_original=$.datepicker._updateDatepicker,$.datepicker._updateDatepicker=function(e){$.datepicker._updateDatepicker_original(e);var t=this._get(e,"afterShow");t&&t.apply(e.input?e.input[0]:null)},window.EmegrendelesDefaults={datatableActionButtonClickCallBack:function datatableActionButtonClickCallBack(){},datatableAddRowTrashButton:function datatableAddRowTrashButton(e,t){return''},datatableAddRowEditButton:function datatableAddRowEditButton(e){var t="Adatok";return void 0!==e[1].title&&(t=e[1].title),''},datatableAddRowViewButton:function datatableAddRowViewButton(e,t){return''},datatableAddRowAttachmentButton:function datatableAddRowAttachmentButton(e,t){return''},datatableCustomHeadButtonClickCallBack:function datatableCustomHeadButtonClickCallBack(e){console.log(e)},afterLoadMainContent:function afterLoadMainContent(e){console.log(e)}},"undefined"==typeof DataModel){var n=function(){return function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}(function _DataModel2(e,t){!function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,_DataModel2),function _defineProperty(e,t,r){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}(this,"Opts",{active:!1}),$.extend(this,e),$.extend(this.Opts,t)},[{key:"setData",value:function setData(e){$.extend(this,e)}},{key:"getData",value:function getData(e){return e?this[e]:this}}])}();window.DataModel=n}window.Emegrendeles=function(e){var t={myVar:"Emegrendeles value",datatableAddRowTrashButton:{},datatableAddRowEditButton:{},datatableActionButtonClickCallBack:{},datatableRowActionButtonClickCallBack:{},datatableCustomHeadButtonClickCallBack:{},afterLoadMainContent:{},Url:{}},r=this;this.construct=function(e){console.log(this.constructor.name+" constructor called"),$.extend(t,window.EmegrendelesDefaults,e)},this.setOpts=function(e){$.extend(t,e)},this.getOpts=function(){return t},this.datatableAddRowTrashButton=function(){return t.datatableAddRowTrashButton(arguments)},this.datatableAddRowEditButton=function(){return t.datatableAddRowEditButton(arguments)},this.datatableAddRowViewButton=function(){return t.datatableAddRowViewButton(arguments)},this.datatableAddRowAttachmentButton=function(){return t.datatableAddRowAttachmentButton(arguments)},this.afterLoadMainContent=function(){return t.afterLoadMainContent(arguments)},this.datatableActionButtonClickCallBack=function(){return t.datatableActionButtonClickCallBack(arguments)},this.datatableRowActionButtonClickCallBack=function(){return t.datatableRowActionButtonClickCallBack(arguments)},this.datatableAddRowAction=function(e){e&&($(e+" tr button").off("click"),$(e+" tr button").on("click",APP.datatableRowActionButtonClickCallBack))},this.datatableCustomHeadButtonClickCallBack=function(){return t.datatableCustomHeadButtonClickCallBack(arguments)},this.myPublicMethod=function(){console.log(t),n()},this.setApiToken=function(e){r.ApiToken=e},this.getApiToken=function(){return r.ApiToken};var n=function myPrivateMethod(){console.log("accessed private method")};this.setActiveNavBarItem=function(e){return $(".speedButtonNavBar li").removeClass("selected"),$(".speedButtonNavBar li.iconholderModul"+e).addClass("selected"),this},this.getActiveNavBarItem=function(){return $(".speedButtonNavBar .selected").find("a").data("name")},this.clearArchiveModuleDataTableState=function(){null!=APP.OrderArchiveModule&&(console.log("APP.OrderArchiveModule"),console.log("clear"),APP.OrderArchiveModule.dataTable.state.clear())},this.navBarItemBeforepost=function(){console.log("navBarItemBeforepost"),"activeOrder"!==r.getActiveNavBarItem()&&r.clearArchiveModuleDataTableState()},this.navBarItemAfterPost=function(){},this.initNavBar=function(){$(".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])").bind("click",function(e){console.log($(this).data().name),$(this).data("big-icon")?$(".speedButtonNavBar").removeClass("smallicons"):$(".speedButtonNavBar").addClass("smallicons"),r.setActiveNavBarItem($(this).data().name),e.preventDefault()}),$(".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])").ajaxlink({target:$(".mainContent"),ajaxtype:"GET",afterpost:r.navBarItemAfterPost,beforepost:r.navBarItemBeforepost}),$(".speedButtonNavBar a[data-target=_blank], .speedButtonNavBar a[data-no-ajax]").bind("click",function(){r.clearArchiveModuleDataTableState()})},this.loadMainContent=function(e,t,n){n?(console.log("van callback"),console.log(n)):n=r.afterLoadMainContent,$(".mainContent").load(e,t,n)},this.construct(e)},window.APP={},$(document).ready(function(){console.log("ready doc"),Mustache.tags=["[[","]]"]})},213(e,t,r){window._=r(543),window.axios=r(425),window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"},854(){var e={latin_map:{Á:"A",Ă:"A",Ắ:"A",Ặ:"A",Ằ:"A",Ẳ:"A",Ẵ:"A",Ǎ:"A",Â:"A",Ấ:"A",Ậ:"A",Ầ:"A",Ẩ:"A",Ẫ:"A",Ä:"A",Ǟ:"A",Ȧ:"A",Ǡ:"A",Ạ:"A",Ȁ:"A",À:"A",Ả:"A",Ȃ:"A",Ā:"A",Ą:"A",Å:"A",Ǻ:"A",Ḁ:"A",Ⱥ:"A",Ã:"A",Ꜳ:"AA",Æ:"AE",Ǽ:"AE",Ǣ:"AE",Ꜵ:"AO",Ꜷ:"AU",Ꜹ:"AV",Ꜻ:"AV",Ꜽ:"AY",Ḃ:"B",Ḅ:"B",Ɓ:"B",Ḇ:"B",Ƀ:"B",Ƃ:"B",Ć:"C",Č:"C",Ç:"C",Ḉ:"C",Ĉ:"C",Ċ:"C",Ƈ:"C",Ȼ:"C",Ď:"D",Ḑ:"D",Ḓ:"D",Ḋ:"D",Ḍ:"D",Ɗ:"D",Ḏ:"D",Dz:"D",Dž:"D",Đ:"D",Ƌ:"D",DZ:"DZ",DŽ:"DZ",É:"E",Ĕ:"E",Ě:"E",Ȩ:"E",Ḝ:"E",Ê:"E",Ế:"E",Ệ:"E",Ề:"E",Ể:"E",Ễ:"E",Ḙ:"E",Ë:"E",Ė:"E",Ẹ:"E",Ȅ:"E",È:"E",Ẻ:"E",Ȇ:"E",Ē:"E",Ḗ:"E",Ḕ:"E",Ę:"E",Ɇ:"E",Ẽ:"E",Ḛ:"E",Ꝫ:"ET",Ḟ:"F",Ƒ:"F",Ǵ:"G",Ğ:"G",Ǧ:"G",Ģ:"G",Ĝ:"G",Ġ:"G",Ɠ:"G",Ḡ:"G",Ǥ:"G",Ḫ:"H",Ȟ:"H",Ḩ:"H",Ĥ:"H",Ⱨ:"H",Ḧ:"H",Ḣ:"H",Ḥ:"H",Ħ:"H",Í:"I",Ĭ:"I",Ǐ:"I",Î:"I",Ï:"I",Ḯ:"I",İ:"I",Ị:"I",Ȉ:"I",Ì:"I",Ỉ:"I",Ȋ:"I",Ī:"I",Į:"I",Ɨ:"I",Ĩ:"I",Ḭ:"I",Ꝺ:"D",Ꝼ:"F",Ᵹ:"G",Ꞃ:"R",Ꞅ:"S",Ꞇ:"T",Ꝭ:"IS",Ĵ:"J",Ɉ:"J",Ḱ:"K",Ǩ:"K",Ķ:"K",Ⱪ:"K",Ꝃ:"K",Ḳ:"K",Ƙ:"K",Ḵ:"K",Ꝁ:"K",Ꝅ:"K",Ĺ:"L",Ƚ:"L",Ľ:"L",Ļ:"L",Ḽ:"L",Ḷ:"L",Ḹ:"L",Ⱡ:"L",Ꝉ:"L",Ḻ:"L",Ŀ:"L",Ɫ:"L",Lj:"L",Ł:"L",LJ:"LJ",Ḿ:"M",Ṁ:"M",Ṃ:"M",Ɱ:"M",Ń:"N",Ň:"N",Ņ:"N",Ṋ:"N",Ṅ:"N",Ṇ:"N",Ǹ:"N",Ɲ:"N",Ṉ:"N",Ƞ:"N",Nj:"N",Ñ:"N",NJ:"NJ",Ó:"O",Ŏ:"O",Ǒ:"O",Ô:"O",Ố:"O",Ộ:"O",Ồ:"O",Ổ:"O",Ỗ:"O",Ö:"O",Ȫ:"O",Ȯ:"O",Ȱ:"O",Ọ:"O",Ő:"O",Ȍ:"O",Ò:"O",Ỏ:"O",Ơ:"O",Ớ:"O",Ợ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ȏ:"O",Ꝋ:"O",Ꝍ:"O",Ō:"O",Ṓ:"O",Ṑ:"O",Ɵ:"O",Ǫ:"O",Ǭ:"O",Ø:"O",Ǿ:"O",Õ:"O",Ṍ:"O",Ṏ:"O",Ȭ:"O",Ƣ:"OI",Ꝏ:"OO",Ɛ:"E",Ɔ:"O",Ȣ:"OU",Ṕ:"P",Ṗ:"P",Ꝓ:"P",Ƥ:"P",Ꝕ:"P",Ᵽ:"P",Ꝑ:"P",Ꝙ:"Q",Ꝗ:"Q",Ŕ:"R",Ř:"R",Ŗ:"R",Ṙ:"R",Ṛ:"R",Ṝ:"R",Ȑ:"R",Ȓ:"R",Ṟ:"R",Ɍ:"R",Ɽ:"R",Ꜿ:"C",Ǝ:"E",Ś:"S",Ṥ:"S",Š:"S",Ṧ:"S",Ş:"S",Ŝ:"S",Ș:"S",Ṡ:"S",Ṣ:"S",Ṩ:"S",Ť:"T",Ţ:"T",Ṱ:"T",Ț:"T",Ⱦ:"T",Ṫ:"T",Ṭ:"T",Ƭ:"T",Ṯ:"T",Ʈ:"T",Ŧ:"T",Ɐ:"A",Ꞁ:"L",Ɯ:"M",Ʌ:"V",Ꜩ:"TZ",Ú:"U",Ŭ:"U",Ǔ:"U",Û:"U",Ṷ:"U",Ü:"U",Ǘ:"U",Ǚ:"U",Ǜ:"U",Ǖ:"U",Ṳ:"U",Ụ:"U",Ű:"U",Ȕ:"U",Ù:"U",Ủ:"U",Ư:"U",Ứ:"U",Ự:"U",Ừ:"U",Ử:"U",Ữ:"U",Ȗ:"U",Ū:"U",Ṻ:"U",Ų:"U",Ů:"U",Ũ:"U",Ṹ:"U",Ṵ:"U",Ꝟ:"V",Ṿ:"V",Ʋ:"V",Ṽ:"V",Ꝡ:"VY",Ẃ:"W",Ŵ:"W",Ẅ:"W",Ẇ:"W",Ẉ:"W",Ẁ:"W",Ⱳ:"W",Ẍ:"X",Ẋ:"X",Ý:"Y",Ŷ:"Y",Ÿ:"Y",Ẏ:"Y",Ỵ:"Y",Ỳ:"Y",Ƴ:"Y",Ỷ:"Y",Ỿ:"Y",Ȳ:"Y",Ɏ:"Y",Ỹ:"Y",Ź:"Z",Ž:"Z",Ẑ:"Z",Ⱬ:"Z",Ż:"Z",Ẓ:"Z",Ȥ:"Z",Ẕ:"Z",Ƶ:"Z",IJ:"IJ",Œ:"OE",ᴀ:"A",ᴁ:"AE",ʙ:"B",ᴃ:"B",ᴄ:"C",ᴅ:"D",ᴇ:"E",ꜰ:"F",ɢ:"G",ʛ:"G",ʜ:"H",ɪ:"I",ʁ:"R",ᴊ:"J",ᴋ:"K",ʟ:"L",ᴌ:"L",ᴍ:"M",ɴ:"N",ᴏ:"O",ɶ:"OE",ᴐ:"O",ᴕ:"OU",ᴘ:"P",ʀ:"R",ᴎ:"N",ᴙ:"R",ꜱ:"S",ᴛ:"T",ⱻ:"E",ᴚ:"R",ᴜ:"U",ᴠ:"V",ᴡ:"W",ʏ:"Y",ᴢ:"Z",á:"a",ă:"a",ắ:"a",ặ:"a",ằ:"a",ẳ:"a",ẵ:"a",ǎ:"a",â:"a",ấ:"a",ậ:"a",ầ:"a",ẩ:"a",ẫ:"a",ä:"a",ǟ:"a",ȧ:"a",ǡ:"a",ạ:"a",ȁ:"a",à:"a",ả:"a",ȃ:"a",ā:"a",ą:"a",ᶏ:"a",ẚ:"a",å:"a",ǻ:"a",ḁ:"a",ⱥ:"a",ã:"a",ꜳ:"aa",æ:"ae",ǽ:"ae",ǣ:"ae",ꜵ:"ao",ꜷ:"au",ꜹ:"av",ꜻ:"av",ꜽ:"ay",ḃ:"b",ḅ:"b",ɓ:"b",ḇ:"b",ᵬ:"b",ᶀ:"b",ƀ:"b",ƃ:"b",ɵ:"o",ć:"c",č:"c",ç:"c",ḉ:"c",ĉ:"c",ɕ:"c",ċ:"c",ƈ:"c",ȼ:"c",ď:"d",ḑ:"d",ḓ:"d",ȡ:"d",ḋ:"d",ḍ:"d",ɗ:"d",ᶑ:"d",ḏ:"d",ᵭ:"d",ᶁ:"d",đ:"d",ɖ:"d",ƌ:"d",ı:"i",ȷ:"j",ɟ:"j",ʄ:"j",dz:"dz",dž:"dz",é:"e",ĕ:"e",ě:"e",ȩ:"e",ḝ:"e",ê:"e",ế:"e",ệ:"e",ề:"e",ể:"e",ễ:"e",ḙ:"e",ë:"e",ė:"e",ẹ:"e",ȅ:"e",è:"e",ẻ:"e",ȇ:"e",ē:"e",ḗ:"e",ḕ:"e",ⱸ:"e",ę:"e",ᶒ:"e",ɇ:"e",ẽ:"e",ḛ:"e",ꝫ:"et",ḟ:"f",ƒ:"f",ᵮ:"f",ᶂ:"f",ǵ:"g",ğ:"g",ǧ:"g",ģ:"g",ĝ:"g",ġ:"g",ɠ:"g",ḡ:"g",ᶃ:"g",ǥ:"g",ḫ:"h",ȟ:"h",ḩ:"h",ĥ:"h",ⱨ:"h",ḧ:"h",ḣ:"h",ḥ:"h",ɦ:"h",ẖ:"h",ħ:"h",ƕ:"hv",í:"i",ĭ:"i",ǐ:"i",î:"i",ï:"i",ḯ:"i",ị:"i",ȉ:"i",ì:"i",ỉ:"i",ȋ:"i",ī:"i",į:"i",ᶖ:"i",ɨ:"i",ĩ:"i",ḭ:"i",ꝺ:"d",ꝼ:"f",ᵹ:"g",ꞃ:"r",ꞅ:"s",ꞇ:"t",ꝭ:"is",ǰ:"j",ĵ:"j",ʝ:"j",ɉ:"j",ḱ:"k",ǩ:"k",ķ:"k",ⱪ:"k",ꝃ:"k",ḳ:"k",ƙ:"k",ḵ:"k",ᶄ:"k",ꝁ:"k",ꝅ:"k",ĺ:"l",ƚ:"l",ɬ:"l",ľ:"l",ļ:"l",ḽ:"l",ȴ:"l",ḷ:"l",ḹ:"l",ⱡ:"l",ꝉ:"l",ḻ:"l",ŀ:"l",ɫ:"l",ᶅ:"l",ɭ:"l",ł:"l",lj:"lj",ſ:"s",ẜ:"s",ẛ:"s",ẝ:"s",ḿ:"m",ṁ:"m",ṃ:"m",ɱ:"m",ᵯ:"m",ᶆ:"m",ń:"n",ň:"n",ņ:"n",ṋ:"n",ȵ:"n",ṅ:"n",ṇ:"n",ǹ:"n",ɲ:"n",ṉ:"n",ƞ:"n",ᵰ:"n",ᶇ:"n",ɳ:"n",ñ:"n",nj:"nj",ó:"o",ŏ:"o",ǒ:"o",ô:"o",ố:"o",ộ:"o",ồ:"o",ổ:"o",ỗ:"o",ö:"o",ȫ:"o",ȯ:"o",ȱ:"o",ọ:"o",ő:"o",ȍ:"o",ò:"o",ỏ:"o",ơ:"o",ớ:"o",ợ:"o",ờ:"o",ở:"o",ỡ:"o",ȏ:"o",ꝋ:"o",ꝍ:"o",ⱺ:"o",ō:"o",ṓ:"o",ṑ:"o",ǫ:"o",ǭ:"o",ø:"o",ǿ:"o",õ:"o",ṍ:"o",ṏ:"o",ȭ:"o",ƣ:"oi",ꝏ:"oo",ɛ:"e",ᶓ:"e",ɔ:"o",ᶗ:"o",ȣ:"ou",ṕ:"p",ṗ:"p",ꝓ:"p",ƥ:"p",ᵱ:"p",ᶈ:"p",ꝕ:"p",ᵽ:"p",ꝑ:"p",ꝙ:"q",ʠ:"q",ɋ:"q",ꝗ:"q",ŕ:"r",ř:"r",ŗ:"r",ṙ:"r",ṛ:"r",ṝ:"r",ȑ:"r",ɾ:"r",ᵳ:"r",ȓ:"r",ṟ:"r",ɼ:"r",ᵲ:"r",ᶉ:"r",ɍ:"r",ɽ:"r",ↄ:"c",ꜿ:"c",ɘ:"e",ɿ:"r",ś:"s",ṥ:"s",š:"s",ṧ:"s",ş:"s",ŝ:"s",ș:"s",ṡ:"s",ṣ:"s",ṩ:"s",ʂ:"s",ᵴ:"s",ᶊ:"s",ȿ:"s",ɡ:"g",ᴑ:"o",ᴓ:"o",ᴝ:"u",ť:"t",ţ:"t",ṱ:"t",ț:"t",ȶ:"t",ẗ:"t",ⱦ:"t",ṫ:"t",ṭ:"t",ƭ:"t",ṯ:"t",ᵵ:"t",ƫ:"t",ʈ:"t",ŧ:"t",ᵺ:"th",ɐ:"a",ᴂ:"ae",ǝ:"e",ᵷ:"g",ɥ:"h",ʮ:"h",ʯ:"h",ᴉ:"i",ʞ:"k",ꞁ:"l",ɯ:"m",ɰ:"m",ᴔ:"oe",ɹ:"r",ɻ:"r",ɺ:"r",ⱹ:"r",ʇ:"t",ʌ:"v",ʍ:"w",ʎ:"y",ꜩ:"tz",ú:"u",ŭ:"u",ǔ:"u",û:"u",ṷ:"u",ü:"u",ǘ:"u",ǚ:"u",ǜ:"u",ǖ:"u",ṳ:"u",ụ:"u",ű:"u",ȕ:"u",ù:"u",ủ:"u",ư:"u",ứ:"u",ự:"u",ừ:"u",ử:"u",ữ:"u",ȗ:"u",ū:"u",ṻ:"u",ų:"u",ᶙ:"u",ů:"u",ũ:"u",ṹ:"u",ṵ:"u",ᵫ:"ue",ꝸ:"um",ⱴ:"v",ꝟ:"v",ṿ:"v",ʋ:"v",ᶌ:"v",ⱱ:"v",ṽ:"v",ꝡ:"vy",ẃ:"w",ŵ:"w",ẅ:"w",ẇ:"w",ẉ:"w",ẁ:"w",ⱳ:"w",ẘ:"w",ẍ:"x",ẋ:"x",ᶍ:"x",ý:"y",ŷ:"y",ÿ:"y",ẏ:"y",ỵ:"y",ỳ:"y",ƴ:"y",ỷ:"y",ỿ:"y",ȳ:"y",ẙ:"y",ɏ:"y",ỹ:"y",ź:"z",ž:"z",ẑ:"z",ʑ:"z",ⱬ:"z",ż:"z",ẓ:"z",ȥ:"z",ẕ:"z",ᵶ:"z",ᶎ:"z",ʐ:"z",ƶ:"z",ɀ:"z",ff:"ff",ffi:"ffi",ffl:"ffl",fi:"fi",fl:"fl",ij:"ij",œ:"oe",st:"st",ₐ:"a",ₑ:"e",ᵢ:"i",ⱼ:"j",ₒ:"o",ᵣ:"r",ᵤ:"u",ᵥ:"v",ₓ:"x"}};String.prototype.latinise=function(){return this.replace(/[^A-Za-z0-9\[\] ]/g,function(t){return e.latin_map[t]||t})},String.prototype.latinize=String.prototype.latinise,String.prototype.isLatin=function(){return this==this.latinise()}},526(e,t){"use strict";t.byteLength=function byteLength(e){var t=getLens(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function toByteArray(e){var t,r,o=getLens(e),i=o[0],s=o[1],u=new a(function _byteLength(e,t,r){return 3*(t+r)/4-r}(0,i,s)),c=0,l=s>0?i-4:i;for(r=0;r>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===s&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[c++]=255&t);1===s&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function fromByteArray(e){for(var t,n=e.length,a=n%3,o=[],i=16383,s=0,u=n-a;su?u:s+i));1===a?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===a&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return o.join("")};for(var r=[],n=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)r[i]=o[i],n[o.charCodeAt(i)]=i;function getLens(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function tripletToBase64(e){return r[e>>18&63]+r[e>>12&63]+r[e>>6&63]+r[63&e]}function encodeChunk(e,t,r){for(var n,a=[],o=t;o=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|e}function byteLength(e,t){if(Buffer.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return utf8ToBytes(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(e).length;default:if(n)return utf8ToBytes(e).length;t=(""+t).toLowerCase(),n=!0}}function slowToString(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return hexSlice(this,t,r);case"utf8":case"utf-8":return utf8Slice(this,t,r);case"ascii":return asciiSlice(this,t,r);case"latin1":case"binary":return latin1Slice(this,t,r);case"base64":return base64Slice(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function swap(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function bidirectionalIndexOf(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=a?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=Buffer.from(t,n)),Buffer.isBuffer(t))return 0===t.length?-1:arrayIndexOf(e,t,r,n,a);if("number"==typeof t)return t&=255,Buffer.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):arrayIndexOf(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(e,t,r,n,a){var o,i=1,s=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;i=2,s/=2,u/=2,r/=2}function read(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(a){var c=-1;for(o=r;os&&(r=s-u),o=r;o>=0;o--){for(var l=!0,f=0;fa&&(n=a):n=a;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var i=0;i>8,a=r%256,o.push(a),o.push(n);return o}(t,e.length-r),e,r,n)}function base64Slice(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function utf8Slice(e,t,r){r=Math.min(e.length,r);for(var n=[],a=t;a239?4:l>223?3:l>191?2:1;if(a+h<=r)switch(h){case 1:l<128&&(f=l);break;case 2:128==(192&(o=e[a+1]))&&(c=(31&l)<<6|63&o)>127&&(f=c);break;case 3:o=e[a+1],s=e[a+2],128==(192&o)&&128==(192&s)&&(c=(15&l)<<12|(63&o)<<6|63&s)>2047&&(c<55296||c>57343)&&(f=c);break;case 4:o=e[a+1],s=e[a+2],u=e[a+3],128==(192&o)&&128==(192&s)&&128==(192&u)&&(c=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&u)>65535&&c<1114112&&(f=c)}null===f?(f=65533,h=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),a+=h}return function decodeCodePointsArray(e){var t=e.length;if(t<=i)return String.fromCharCode.apply(String,e);var r="",n=0;for(;n0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},Buffer.prototype.compare=function compare(e,t,r,n,a){if(!Buffer.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(n>=a&&t>=r)return 0;if(n>=a)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(a>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0),s=Math.min(o,i),u=this.slice(n,a),c=e.slice(t,r),l=0;la)&&(r=a),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return hexWrite(this,e,t,r);case"utf8":case"utf-8":return utf8Write(this,e,t,r);case"ascii":return asciiWrite(this,e,t,r);case"latin1":case"binary":return latin1Write(this,e,t,r);case"base64":return base64Write(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var i=4096;function asciiSlice(e,t,r){var n="";r=Math.min(e.length,r);for(var a=t;an)&&(r=n);for(var a="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function checkInt(e,t,r,n,a,o){if(!Buffer.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||te.length)throw new RangeError("Index out of range")}function objectWriteUInt16(e,t,r,n){t<0&&(t=65535+t+1);for(var a=0,o=Math.min(e.length-r,2);a>>8*(n?a:1-a)}function objectWriteUInt32(e,t,r,n){t<0&&(t=4294967295+t+1);for(var a=0,o=Math.min(e.length-r,4);a>>8*(n?a:3-a)&255}function checkIEEE754(e,t,r,n,a,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(e,t,r,n,o){return o||checkIEEE754(e,0,r,4),a.write(e,t,r,n,23,4),r+4}function writeDouble(e,t,r,n,o){return o||checkIEEE754(e,0,r,8),a.write(e,t,r,n,52,8),r+8}Buffer.prototype.slice=function slice(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(a*=256);)n+=this[e+--t]*a;return n},Buffer.prototype.readUInt8=function readUInt8(e,t){return t||checkOffset(e,1,this.length),this[e]},Buffer.prototype.readUInt16LE=function readUInt16LE(e,t){return t||checkOffset(e,2,this.length),this[e]|this[e+1]<<8},Buffer.prototype.readUInt16BE=function readUInt16BE(e,t){return t||checkOffset(e,2,this.length),this[e]<<8|this[e+1]},Buffer.prototype.readUInt32LE=function readUInt32LE(e,t){return t||checkOffset(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Buffer.prototype.readUInt32BE=function readUInt32BE(e,t){return t||checkOffset(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Buffer.prototype.readIntLE=function readIntLE(e,t,r){e|=0,t|=0,r||checkOffset(e,t,this.length);for(var n=this[e],a=1,o=0;++o=(a*=128)&&(n-=Math.pow(2,8*t)),n},Buffer.prototype.readIntBE=function readIntBE(e,t,r){e|=0,t|=0,r||checkOffset(e,t,this.length);for(var n=t,a=1,o=this[e+--n];n>0&&(a*=256);)o+=this[e+--n]*a;return o>=(a*=128)&&(o-=Math.pow(2,8*t)),o},Buffer.prototype.readInt8=function readInt8(e,t){return t||checkOffset(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Buffer.prototype.readInt16LE=function readInt16LE(e,t){t||checkOffset(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function readInt16BE(e,t){t||checkOffset(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function readInt32LE(e,t){return t||checkOffset(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(e,t){return t||checkOffset(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Buffer.prototype.readFloatLE=function readFloatLE(e,t){return t||checkOffset(e,4,this.length),a.read(this,e,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(e,t){return t||checkOffset(e,4,this.length),a.read(this,e,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(e,t){return t||checkOffset(e,8,this.length),a.read(this,e,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(e,t){return t||checkOffset(e,8,this.length),a.read(this,e,!1,52,8)},Buffer.prototype.writeUIntLE=function writeUIntLE(e,t,r,n){(e=+e,t|=0,r|=0,n)||checkInt(this,e,t,r,Math.pow(2,8*r)-1,0);var a=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+a]=e/o&255;return t+r},Buffer.prototype.writeUInt8=function writeUInt8(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,1,255,0),Buffer.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},Buffer.prototype.writeUInt16LE=function writeUInt16LE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):objectWriteUInt16(this,e,t,!0),t+2},Buffer.prototype.writeUInt16BE=function writeUInt16BE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):objectWriteUInt16(this,e,t,!1),t+2},Buffer.prototype.writeUInt32LE=function writeUInt32LE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):objectWriteUInt32(this,e,t,!0),t+4},Buffer.prototype.writeUInt32BE=function writeUInt32BE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):objectWriteUInt32(this,e,t,!1),t+4},Buffer.prototype.writeIntLE=function writeIntLE(e,t,r,n){if(e=+e,t|=0,!n){var a=Math.pow(2,8*r-1);checkInt(this,e,t,r,a-1,-a)}var o=0,i=1,s=0;for(this[t]=255&e;++o=0&&(i*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/i|0)-s&255;return t+r},Buffer.prototype.writeInt8=function writeInt8(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,1,127,-128),Buffer.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},Buffer.prototype.writeInt16LE=function writeInt16LE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):objectWriteUInt16(this,e,t,!0),t+2},Buffer.prototype.writeInt16BE=function writeInt16BE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):objectWriteUInt16(this,e,t,!1),t+2},Buffer.prototype.writeInt32LE=function writeInt32LE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,4,2147483647,-2147483648),Buffer.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):objectWriteUInt32(this,e,t,!0),t+4},Buffer.prototype.writeInt32BE=function writeInt32BE(e,t,r){return e=+e,t|=0,r||checkInt(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),Buffer.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):objectWriteUInt32(this,e,t,!1),t+4},Buffer.prototype.writeFloatLE=function writeFloatLE(e,t,r){return writeFloat(this,e,t,!0,r)},Buffer.prototype.writeFloatBE=function writeFloatBE(e,t,r){return writeFloat(this,e,t,!1,r)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(e,t,r){return writeDouble(this,e,t,!0,r)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(e,t,r){return writeDouble(this,e,t,!1,r)},Buffer.prototype.copy=function copy(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--a)e[a+t]=this[a+r];else if(o<1e3||!Buffer.TYPED_ARRAY_SUPPORT)for(a=0;a>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!a){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(i+1===n){(t-=3)>-1&&o.push(239,191,189);continue}a=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),a=r;continue}r=65536+(a-55296<<10|r-56320)}else a&&(t-=3)>-1&&o.push(239,191,189);if(a=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function base64ToBytes(e){return n.toByteArray(function base64clean(e){if((e=function stringtrim(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(s,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function blitBuffer(e,t,r,n){for(var a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}},251(e,t){t.read=function(e,t,r,n,a){var o,i,s=8*a-n-1,u=(1<>1,l=-7,f=r?a-1:0,h=r?-1:1,d=e[t+f];for(f+=h,o=d&(1<<-l)-1,d>>=-l,l+=s;l>0;o=256*o+e[t+f],f+=h,l-=8);for(i=o&(1<<-l)-1,o>>=-l,l+=n;l>0;i=256*i+e[t+f],f+=h,l-=8);if(0===o)o=1-c;else{if(o===u)return i?NaN:1/0*(d?-1:1);i+=Math.pow(2,n),o-=c}return(d?-1:1)*i*Math.pow(2,o-n)},t.write=function(e,t,r,n,a,o){var i,s,u,c=8*o-a-1,l=(1<>1,h=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=l):(i=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-i))<1&&(i--,u*=2),(t+=i+f>=1?h/u:h*Math.pow(2,1-f))*u>=2&&(i++,u/=2),i+f>=l?(s=0,i=l):i+f>=1?(s=(t*u-1)*Math.pow(2,a),i+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,a),i=0));a>=8;e[r+d]=255&s,d+=p,s/=256,a-=8);for(i=i<0;e[r+d]=255&i,d+=p,i/=256,c-=8);e[r+d-p]|=128*g}},634(e){var t={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==t.call(e)}},543(e,t,r){var n;e=r.nmd(e),function(){var a,o="Expected a function",i="__lodash_hash_undefined__",s="__lodash_placeholder__",u=16,c=32,l=64,f=128,h=256,d=1/0,p=9007199254740991,g=NaN,y=4294967295,b=[["ary",f],["bind",1],["bindKey",2],["curry",8],["curryRight",u],["flip",512],["partial",c],["partialRight",l],["rearg",h]],v="[object Arguments]",m="[object Array]",_="[object Boolean]",w="[object Date]",A="[object Error]",E="[object Function]",O="[object GeneratorFunction]",S="[object Map]",R="[object Number]",I="[object Object]",B="[object Promise]",T="[object RegExp]",k="[object Set]",C="[object String]",x="[object Symbol]",L="[object WeakMap]",j="[object ArrayBuffer]",P="[object DataView]",U="[object Float32Array]",F="[object Float64Array]",D="[object Int8Array]",N="[object Int16Array]",M="[object Int32Array]",z="[object Uint8Array]",W="[object Uint8ClampedArray]",q="[object Uint16Array]",H="[object Uint32Array]",V=/\b__p \+= '';/g,$=/\b(__p \+=) '' \+/g,K=/(__e\(.*?\)|\b__t\)) \+\n'';/g,G=/&(?:amp|lt|gt|quot|#39);/g,Y=/[&<>"']/g,J=RegExp(G.source),Z=RegExp(Y.source),X=/<%-([\s\S]+?)%>/g,Q=/<%([\s\S]+?)%>/g,ee=/<%=([\s\S]+?)%>/g,te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,re=/^\w*$/,ne=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ae=/[\\^$.*+?()[\]{}|]/g,oe=RegExp(ae.source),ie=/^\s+/,se=/\s/,ue=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ce=/\{\n\/\* \[wrapped with (.+)\] \*/,le=/,? & /,fe=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,he=/[()=,{}\[\]\/\s]/,de=/\\(\\)?/g,pe=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ge=/\w*$/,ye=/^[-+]0x[0-9a-f]+$/i,be=/^0b[01]+$/i,ve=/^\[object .+?Constructor\]$/,me=/^0o[0-7]+$/i,_e=/^(?:0|[1-9]\d*)$/,we=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ae=/($^)/,Ee=/['\n\r\u2028\u2029\\]/g,Oe="\\ud800-\\udfff",Se="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Re="\\u2700-\\u27bf",Ie="a-z\\xdf-\\xf6\\xf8-\\xff",Be="A-Z\\xc0-\\xd6\\xd8-\\xde",Te="\\ufe0e\\ufe0f",ke="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ce="['’]",xe="["+Oe+"]",Le="["+ke+"]",je="["+Se+"]",Pe="\\d+",Ue="["+Re+"]",Fe="["+Ie+"]",De="[^"+Oe+ke+Pe+Re+Ie+Be+"]",Ne="\\ud83c[\\udffb-\\udfff]",Me="[^"+Oe+"]",ze="(?:\\ud83c[\\udde6-\\uddff]){2}",We="[\\ud800-\\udbff][\\udc00-\\udfff]",qe="["+Be+"]",He="\\u200d",Ve="(?:"+Fe+"|"+De+")",$e="(?:"+qe+"|"+De+")",Ke="(?:['’](?:d|ll|m|re|s|t|ve))?",Ge="(?:['’](?:D|LL|M|RE|S|T|VE))?",Ye="(?:"+je+"|"+Ne+")"+"?",Je="["+Te+"]?",Ze=Je+Ye+("(?:"+He+"(?:"+[Me,ze,We].join("|")+")"+Je+Ye+")*"),Xe="(?:"+[Ue,ze,We].join("|")+")"+Ze,Qe="(?:"+[Me+je+"?",je,ze,We,xe].join("|")+")",et=RegExp(Ce,"g"),tt=RegExp(je,"g"),rt=RegExp(Ne+"(?="+Ne+")|"+Qe+Ze,"g"),nt=RegExp([qe+"?"+Fe+"+"+Ke+"(?="+[Le,qe,"$"].join("|")+")",$e+"+"+Ge+"(?="+[Le,qe+Ve,"$"].join("|")+")",qe+"?"+Ve+"+"+Ke,qe+"+"+Ge,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Pe,Xe].join("|"),"g"),at=RegExp("["+He+Oe+Se+Te+"]"),ot=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,it=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],st=-1,ut={};ut[U]=ut[F]=ut[D]=ut[N]=ut[M]=ut[z]=ut[W]=ut[q]=ut[H]=!0,ut[v]=ut[m]=ut[j]=ut[_]=ut[P]=ut[w]=ut[A]=ut[E]=ut[S]=ut[R]=ut[I]=ut[T]=ut[k]=ut[C]=ut[L]=!1;var ct={};ct[v]=ct[m]=ct[j]=ct[P]=ct[_]=ct[w]=ct[U]=ct[F]=ct[D]=ct[N]=ct[M]=ct[S]=ct[R]=ct[I]=ct[T]=ct[k]=ct[C]=ct[x]=ct[z]=ct[W]=ct[q]=ct[H]=!0,ct[A]=ct[E]=ct[L]=!1;var lt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ft=parseFloat,ht=parseInt,dt="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,pt="object"==typeof self&&self&&self.Object===Object&&self,gt=dt||pt||Function("return this")(),yt=t&&!t.nodeType&&t,bt=yt&&e&&!e.nodeType&&e,vt=bt&&bt.exports===yt,mt=vt&&dt.process,_t=function(){try{var e=bt&&bt.require&&bt.require("util").types;return e||mt&&mt.binding&&mt.binding("util")}catch(e){}}(),wt=_t&&_t.isArrayBuffer,At=_t&&_t.isDate,Et=_t&&_t.isMap,Ot=_t&&_t.isRegExp,St=_t&&_t.isSet,Rt=_t&&_t.isTypedArray;function apply(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}function arrayAggregator(e,t,r,n){for(var a=-1,o=null==e?0:e.length;++a-1}function arrayIncludesWith(e,t,r){for(var n=-1,a=null==e?0:e.length;++n-1;);return r}function charsEndIndex(e,t){for(var r=e.length;r--&&baseIndexOf(t,e[r],0)>-1;);return r}var Bt=basePropertyOf({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),Tt=basePropertyOf({"&":"&","<":"<",">":">",'"':""","'":"'"});function escapeStringChar(e){return"\\"+lt[e]}function hasUnicode(e){return at.test(e)}function mapToArray(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function overArg(e,t){return function(r){return e(t(r))}}function replaceHolders(e,t){for(var r=-1,n=e.length,a=0,o=[];++r",""":'"',"'":"'"});var Ct=function runInContext(e){var t,r=(e=null==e?gt:Ct.defaults(gt.Object(),e,Ct.pick(gt,it))).Array,n=e.Date,se=e.Error,Oe=e.Function,Se=e.Math,Re=e.Object,Ie=e.RegExp,Be=e.String,Te=e.TypeError,ke=r.prototype,Ce=Oe.prototype,xe=Re.prototype,Le=e["__core-js_shared__"],je=Ce.toString,Pe=xe.hasOwnProperty,Ue=0,Fe=(t=/[^.]+$/.exec(Le&&Le.keys&&Le.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"",De=xe.toString,Ne=je.call(Re),Me=gt._,ze=Ie("^"+je.call(Pe).replace(ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),We=vt?e.Buffer:a,qe=e.Symbol,He=e.Uint8Array,Ve=We?We.allocUnsafe:a,$e=overArg(Re.getPrototypeOf,Re),Ke=Re.create,Ge=xe.propertyIsEnumerable,Ye=ke.splice,Je=qe?qe.isConcatSpreadable:a,Ze=qe?qe.iterator:a,Xe=qe?qe.toStringTag:a,Qe=function(){try{var e=getNative(Re,"defineProperty");return e({},"",{}),e}catch(e){}}(),rt=e.clearTimeout!==gt.clearTimeout&&e.clearTimeout,at=n&&n.now!==gt.Date.now&&n.now,lt=e.setTimeout!==gt.setTimeout&&e.setTimeout,dt=Se.ceil,pt=Se.floor,yt=Re.getOwnPropertySymbols,bt=We?We.isBuffer:a,mt=e.isFinite,_t=ke.join,It=overArg(Re.keys,Re),xt=Se.max,Lt=Se.min,jt=n.now,Pt=e.parseInt,Ut=Se.random,Ft=ke.reverse,Dt=getNative(e,"DataView"),Nt=getNative(e,"Map"),Mt=getNative(e,"Promise"),zt=getNative(e,"Set"),Wt=getNative(e,"WeakMap"),qt=getNative(Re,"create"),Ht=Wt&&new Wt,Vt={},$t=toSource(Dt),Kt=toSource(Nt),Gt=toSource(Mt),Yt=toSource(zt),Jt=toSource(Wt),Zt=qe?qe.prototype:a,Xt=Zt?Zt.valueOf:a,Qt=Zt?Zt.toString:a;function lodash(e){if(isObjectLike(e)&&!nn(e)&&!(e instanceof LazyWrapper)){if(e instanceof LodashWrapper)return e;if(Pe.call(e,"__wrapped__"))return wrapperClone(e)}return new LodashWrapper(e)}var er=function(){function object(){}return function(e){if(!isObject(e))return{};if(Ke)return Ke(e);object.prototype=e;var t=new object;return object.prototype=a,t}}();function baseLodash(){}function LodashWrapper(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=a}function LazyWrapper(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=y,this.__views__=[]}function Hash(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function baseClone(e,t,r,n,o,i){var s,u=1&t,c=2&t,l=4&t;if(r&&(s=o?r(e,n,o,i):r(e)),s!==a)return s;if(!isObject(e))return e;var f=nn(e);if(f){if(s=function initCloneArray(e){var t=e.length,r=new e.constructor(t);t&&"string"==typeof e[0]&&Pe.call(e,"index")&&(r.index=e.index,r.input=e.input);return r}(e),!u)return copyArray(e,s)}else{var h=dr(e),d=h==E||h==O;if(on(e))return cloneBuffer(e,u);if(h==I||h==v||d&&!o){if(s=c||d?{}:initCloneObject(e),!u)return c?function copySymbolsIn(e,t){return copyObject(e,hr(e),t)}(e,function baseAssignIn(e,t){return e&©Object(t,keysIn(t),e)}(s,e)):function copySymbols(e,t){return copyObject(e,fr(e),t)}(e,baseAssign(s,e))}else{if(!ct[h])return o?e:{};s=function initCloneByTag(e,t,r){var n=e.constructor;switch(t){case j:return cloneArrayBuffer(e);case _:case w:return new n(+e);case P:return function cloneDataView(e,t){var r=t?cloneArrayBuffer(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case U:case F:case D:case N:case M:case z:case W:case q:case H:return cloneTypedArray(e,r);case S:return new n;case R:case C:return new n(e);case T:return function cloneRegExp(e){var t=new e.constructor(e.source,ge.exec(e));return t.lastIndex=e.lastIndex,t}(e);case k:return new n;case x:return function cloneSymbol(e){return Xt?Re(Xt.call(e)):{}}(e)}}(e,h,u)}}i||(i=new Stack);var p=i.get(e);if(p)return p;i.set(e,s),ln(e)?e.forEach(function(n){s.add(baseClone(n,t,r,n,e,i))}):un(e)&&e.forEach(function(n,a){s.set(a,baseClone(n,t,r,a,e,i))});var g=f?a:(l?c?getAllKeysIn:getAllKeys:c?keysIn:keys)(e);return arrayEach(g||e,function(n,a){g&&(n=e[a=n]),assignValue(s,a,baseClone(n,t,r,a,e,i))}),s}function baseConformsTo(e,t,r){var n=r.length;if(null==e)return!n;for(e=Re(e);n--;){var o=r[n],i=t[o],s=e[o];if(s===a&&!(o in e)||!i(s))return!1}return!0}function baseDelay(e,t,r){if("function"!=typeof e)throw new Te(o);return yr(function(){e.apply(a,r)},t)}function baseDifference(e,t,r,n){var a=-1,o=arrayIncludes,i=!0,s=e.length,u=[],c=t.length;if(!s)return u;r&&(t=arrayMap(t,baseUnary(r))),n?(o=arrayIncludesWith,i=!1):t.length>=200&&(o=cacheHas,i=!1,t=new SetCache(t));e:for(;++a-1},ListCache.prototype.set=function listCacheSet(e,t){var r=this.__data__,n=assocIndexOf(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},MapCache.prototype.clear=function mapCacheClear(){this.size=0,this.__data__={hash:new Hash,map:new(Nt||ListCache),string:new Hash}},MapCache.prototype.delete=function mapCacheDelete(e){var t=getMapData(this,e).delete(e);return this.size-=t?1:0,t},MapCache.prototype.get=function mapCacheGet(e){return getMapData(this,e).get(e)},MapCache.prototype.has=function mapCacheHas(e){return getMapData(this,e).has(e)},MapCache.prototype.set=function mapCacheSet(e,t){var r=getMapData(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},SetCache.prototype.add=SetCache.prototype.push=function setCacheAdd(e){return this.__data__.set(e,i),this},SetCache.prototype.has=function setCacheHas(e){return this.__data__.has(e)},Stack.prototype.clear=function stackClear(){this.__data__=new ListCache,this.size=0},Stack.prototype.delete=function stackDelete(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Stack.prototype.get=function stackGet(e){return this.__data__.get(e)},Stack.prototype.has=function stackHas(e){return this.__data__.has(e)},Stack.prototype.set=function stackSet(e,t){var r=this.__data__;if(r instanceof ListCache){var n=r.__data__;if(!Nt||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new MapCache(n)}return r.set(e,t),this.size=r.size,this};var tr=createBaseEach(baseForOwn),rr=createBaseEach(baseForOwnRight,!0);function baseEvery(e,t){var r=!0;return tr(e,function(e,n,a){return r=!!t(e,n,a)}),r}function baseExtremum(e,t,r){for(var n=-1,o=e.length;++n0&&r(s)?t>1?baseFlatten(s,t-1,r,n,a):arrayPush(a,s):n||(a[a.length]=s)}return a}var nr=createBaseFor(),ar=createBaseFor(!0);function baseForOwn(e,t){return e&&nr(e,t,keys)}function baseForOwnRight(e,t){return e&&ar(e,t,keys)}function baseFunctions(e,t){return arrayFilter(t,function(t){return isFunction(e[t])})}function baseGet(e,t){for(var r=0,n=(t=castPath(t,e)).length;null!=e&&rt}function baseHas(e,t){return null!=e&&Pe.call(e,t)}function baseHasIn(e,t){return null!=e&&t in Re(e)}function baseIntersection(e,t,n){for(var o=n?arrayIncludesWith:arrayIncludes,i=e[0].length,s=e.length,u=s,c=r(s),l=1/0,f=[];u--;){var h=e[u];u&&t&&(h=arrayMap(h,baseUnary(t))),l=Lt(h.length,l),c[u]=!n&&(t||i>=120&&h.length>=120)?new SetCache(u&&h):a}h=e[0];var d=-1,p=c[0];e:for(;++d=s?u:u*("desc"==r[n]?-1:1)}return e.index-t.index}(e,t,r)})}function basePickBy(e,t,r){for(var n=-1,a=t.length,o={};++n-1;)s!==e&&Ye.call(s,u,1),Ye.call(e,u,1);return e}function basePullAt(e,t){for(var r=e?t.length:0,n=r-1;r--;){var a=t[r];if(r==n||a!==o){var o=a;isIndex(a)?Ye.call(e,a,1):baseUnset(e,a)}}return e}function baseRandom(e,t){return e+pt(Ut()*(t-e+1))}function baseRepeat(e,t){var r="";if(!e||t<1||t>p)return r;do{t%2&&(r+=e),(t=pt(t/2))&&(e+=e)}while(t);return r}function baseRest(e,t){return br(overRest(e,t,identity),e+"")}function baseSample(e){return arraySample(values(e))}function baseSampleSize(e,t){var r=values(e);return shuffleSelf(r,baseClamp(t,0,r.length))}function baseSet(e,t,r,n){if(!isObject(e))return e;for(var o=-1,i=(t=castPath(t,e)).length,s=i-1,u=e;null!=u&&++oo?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=r(o);++a>>1,i=e[o];null!==i&&!isSymbol(i)&&(r?i<=t:i=200){var c=t?null:cr(e);if(c)return setToArray(c);i=!1,a=cacheHas,u=new SetCache}else u=t?[]:s;e:for(;++n=n?e:baseSlice(e,t,r)}var ur=rt||function(e){return gt.clearTimeout(e)};function cloneBuffer(e,t){if(t)return e.slice();var r=e.length,n=Ve?Ve(r):new e.constructor(r);return e.copy(n),n}function cloneArrayBuffer(e){var t=new e.constructor(e.byteLength);return new He(t).set(new He(e)),t}function cloneTypedArray(e,t){var r=t?cloneArrayBuffer(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function compareAscending(e,t){if(e!==t){var r=e!==a,n=null===e,o=e==e,i=isSymbol(e),s=t!==a,u=null===t,c=t==t,l=isSymbol(t);if(!u&&!l&&!i&&e>t||i&&s&&c&&!u&&!l||n&&s&&c||!r&&c||!o)return 1;if(!n&&!i&&!l&&e1?r[o-1]:a,s=o>2?r[2]:a;for(i=e.length>3&&"function"==typeof i?(o--,i):a,s&&isIterateeCall(r[0],r[1],s)&&(i=o<3?a:i,o=1),t=Re(t);++n-1?o[i?t[s]:s]:a}}function createFlow(e){return flatRest(function(t){var r=t.length,n=r,i=LodashWrapper.prototype.thru;for(e&&t.reverse();n--;){var s=t[n];if("function"!=typeof s)throw new Te(o);if(i&&!u&&"wrapper"==getFuncName(s))var u=new LodashWrapper([],!0)}for(n=u?n:r;++n1&&m.reverse(),d&&lu))return!1;var l=i.get(e),f=i.get(t);if(l&&f)return l==t&&f==e;var h=-1,d=!0,p=2&r?new SetCache:a;for(i.set(e,t),i.set(t,e);++h-1&&e%1==0&&e1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace(ue,"{\n/* [wrapped with "+t+"] */\n")}(n,function updateWrapDetails(e,t){return arrayEach(b,function(r){var n="_."+r[0];t&r[1]&&!arrayIncludes(e,n)&&e.push(n)}),e.sort()}(function getWrapDetails(e){var t=e.match(ce);return t?t[1].split(le):[]}(n),r)))}function shortOut(e){var t=0,r=0;return function(){var n=jt(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(a,arguments)}}function shuffleSelf(e,t){var r=-1,n=e.length,o=n-1;for(t=t===a?n:t;++r1?e[t-1]:a;return r="function"==typeof r?(e.pop(),r):a,unzipWith(e,r)});function chain(e){var t=lodash(e);return t.__chain__=!0,t}function thru(e,t){return t(e)}var Ur=flatRest(function(e){var t=e.length,r=t?e[0]:0,n=this.__wrapped__,interceptor=function(t){return baseAt(t,e)};return!(t>1||this.__actions__.length)&&n instanceof LazyWrapper&&isIndex(r)?((n=n.slice(r,+r+(t?1:0))).__actions__.push({func:thru,args:[interceptor],thisArg:a}),new LodashWrapper(n,this.__chain__).thru(function(e){return t&&!e.length&&e.push(a),e})):this.thru(interceptor)});var Fr=createAggregator(function(e,t,r){Pe.call(e,r)?++e[r]:baseAssignValue(e,r,1)});var Dr=createFind(findIndex),Nr=createFind(findLastIndex);function forEach(e,t){return(nn(e)?arrayEach:tr)(e,getIteratee(t,3))}function forEachRight(e,t){return(nn(e)?arrayEachRight:rr)(e,getIteratee(t,3))}var Mr=createAggregator(function(e,t,r){Pe.call(e,r)?e[r].push(t):baseAssignValue(e,r,[t])});var zr=baseRest(function(e,t,n){var a=-1,o="function"==typeof t,i=isArrayLike(e)?r(e.length):[];return tr(e,function(e){i[++a]=o?apply(t,e,n):baseInvoke(e,t,n)}),i}),Wr=createAggregator(function(e,t,r){baseAssignValue(e,r,t)});function map(e,t){return(nn(e)?arrayMap:baseMap)(e,getIteratee(t,3))}var qr=createAggregator(function(e,t,r){e[r?0:1].push(t)},function(){return[[],[]]});var Hr=baseRest(function(e,t){if(null==e)return[];var r=t.length;return r>1&&isIterateeCall(e,t[0],t[1])?t=[]:r>2&&isIterateeCall(t[0],t[1],t[2])&&(t=[t[0]]),baseOrderBy(e,baseFlatten(t,1),[])}),Vr=at||function(){return gt.Date.now()};function ary(e,t,r){return t=r?a:t,t=e&&null==t?e.length:t,createWrap(e,f,a,a,a,a,t)}function before(e,t){var r;if("function"!=typeof t)throw new Te(o);return e=toInteger(e),function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=a),r}}var $r=baseRest(function(e,t,r){var n=1;if(r.length){var a=replaceHolders(r,getHolder($r));n|=c}return createWrap(e,n,t,r,a)}),Kr=baseRest(function(e,t,r){var n=3;if(r.length){var a=replaceHolders(r,getHolder(Kr));n|=c}return createWrap(t,n,e,r,a)});function debounce(e,t,r){var n,i,s,u,c,l,f=0,h=!1,d=!1,p=!0;if("function"!=typeof e)throw new Te(o);function invokeFunc(t){var r=n,o=i;return n=i=a,f=t,u=e.apply(o,r)}function shouldInvoke(e){var r=e-l;return l===a||r>=t||r<0||d&&e-f>=s}function timerExpired(){var e=Vr();if(shouldInvoke(e))return trailingEdge(e);c=yr(timerExpired,function remainingWait(e){var r=t-(e-l);return d?Lt(r,s-(e-f)):r}(e))}function trailingEdge(e){return c=a,p&&n?invokeFunc(e):(n=i=a,u)}function debounced(){var e=Vr(),r=shouldInvoke(e);if(n=arguments,i=this,l=e,r){if(c===a)return function leadingEdge(e){return f=e,c=yr(timerExpired,t),h?invokeFunc(e):u}(l);if(d)return ur(c),c=yr(timerExpired,t),invokeFunc(l)}return c===a&&(c=yr(timerExpired,t)),u}return t=toNumber(t)||0,isObject(r)&&(h=!!r.leading,s=(d="maxWait"in r)?xt(toNumber(r.maxWait)||0,t):s,p="trailing"in r?!!r.trailing:p),debounced.cancel=function cancel(){c!==a&&ur(c),f=0,n=l=i=c=a},debounced.flush=function flush(){return c===a?u:trailingEdge(Vr())},debounced}var Gr=baseRest(function(e,t){return baseDelay(e,1,t)}),Yr=baseRest(function(e,t,r){return baseDelay(e,toNumber(t)||0,r)});function memoize(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new Te(o);var memoized=function(){var r=arguments,n=t?t.apply(this,r):r[0],a=memoized.cache;if(a.has(n))return a.get(n);var o=e.apply(this,r);return memoized.cache=a.set(n,o)||a,o};return memoized.cache=new(memoize.Cache||MapCache),memoized}function negate(e){if("function"!=typeof e)throw new Te(o);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}memoize.Cache=MapCache;var Jr=sr(function(e,t){var r=(t=1==t.length&&nn(t[0])?arrayMap(t[0],baseUnary(getIteratee())):arrayMap(baseFlatten(t,1),baseUnary(getIteratee()))).length;return baseRest(function(n){for(var a=-1,o=Lt(n.length,r);++a=t}),rn=baseIsArguments(function(){return arguments}())?baseIsArguments:function(e){return isObjectLike(e)&&Pe.call(e,"callee")&&!Ge.call(e,"callee")},nn=r.isArray,an=wt?baseUnary(wt):function baseIsArrayBuffer(e){return isObjectLike(e)&&baseGetTag(e)==j};function isArrayLike(e){return null!=e&&isLength(e.length)&&!isFunction(e)}function isArrayLikeObject(e){return isObjectLike(e)&&isArrayLike(e)}var on=bt||stubFalse,sn=At?baseUnary(At):function baseIsDate(e){return isObjectLike(e)&&baseGetTag(e)==w};function isError(e){if(!isObjectLike(e))return!1;var t=baseGetTag(e);return t==A||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!isPlainObject(e)}function isFunction(e){if(!isObject(e))return!1;var t=baseGetTag(e);return t==E||t==O||"[object AsyncFunction]"==t||"[object Proxy]"==t}function isInteger(e){return"number"==typeof e&&e==toInteger(e)}function isLength(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=p}function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function isObjectLike(e){return null!=e&&"object"==typeof e}var un=Et?baseUnary(Et):function baseIsMap(e){return isObjectLike(e)&&dr(e)==S};function isNumber(e){return"number"==typeof e||isObjectLike(e)&&baseGetTag(e)==R}function isPlainObject(e){if(!isObjectLike(e)||baseGetTag(e)!=I)return!1;var t=$e(e);if(null===t)return!0;var r=Pe.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&je.call(r)==Ne}var cn=Ot?baseUnary(Ot):function baseIsRegExp(e){return isObjectLike(e)&&baseGetTag(e)==T};var ln=St?baseUnary(St):function baseIsSet(e){return isObjectLike(e)&&dr(e)==k};function isString(e){return"string"==typeof e||!nn(e)&&isObjectLike(e)&&baseGetTag(e)==C}function isSymbol(e){return"symbol"==typeof e||isObjectLike(e)&&baseGetTag(e)==x}var fn=Rt?baseUnary(Rt):function baseIsTypedArray(e){return isObjectLike(e)&&isLength(e.length)&&!!ut[baseGetTag(e)]};var hn=createRelationalOperation(baseLt),dn=createRelationalOperation(function(e,t){return e<=t});function toArray(e){if(!e)return[];if(isArrayLike(e))return isString(e)?stringToArray(e):copyArray(e);if(Ze&&e[Ze])return function iteratorToArray(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r}(e[Ze]());var t=dr(e);return(t==S?mapToArray:t==k?setToArray:values)(e)}function toFinite(e){return e?(e=toNumber(e))===d||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function toInteger(e){var t=toFinite(e),r=t%1;return t==t?r?t-r:t:0}function toLength(e){return e?baseClamp(toInteger(e),0,y):0}function toNumber(e){if("number"==typeof e)return e;if(isSymbol(e))return g;if(isObject(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=baseTrim(e);var r=be.test(e);return r||me.test(e)?ht(e.slice(2),r?2:8):ye.test(e)?g:+e}function toPlainObject(e){return copyObject(e,keysIn(e))}function toString(e){return null==e?"":baseToString(e)}var pn=createAssigner(function(e,t){if(isPrototype(t)||isArrayLike(t))copyObject(t,keys(t),e);else for(var r in t)Pe.call(t,r)&&assignValue(e,r,t[r])}),gn=createAssigner(function(e,t){copyObject(t,keysIn(t),e)}),yn=createAssigner(function(e,t,r,n){copyObject(t,keysIn(t),e,n)}),bn=createAssigner(function(e,t,r,n){copyObject(t,keys(t),e,n)}),vn=flatRest(baseAt);var mn=baseRest(function(e,t){e=Re(e);var r=-1,n=t.length,o=n>2?t[2]:a;for(o&&isIterateeCall(t[0],t[1],o)&&(n=1);++r1),t}),copyObject(e,getAllKeysIn(e),r),n&&(r=baseClone(r,7,customOmitClone));for(var a=t.length;a--;)baseUnset(r,t[a]);return r});var In=flatRest(function(e,t){return null==e?{}:function basePick(e,t){return basePickBy(e,t,function(t,r){return hasIn(e,r)})}(e,t)});function pickBy(e,t){if(null==e)return{};var r=arrayMap(getAllKeysIn(e),function(e){return[e]});return t=getIteratee(t),basePickBy(e,r,function(e,r){return t(e,r[0])})}var Bn=createToPairs(keys),Tn=createToPairs(keysIn);function values(e){return null==e?[]:baseValues(e,keys(e))}var kn=createCompounder(function(e,t,r){return t=t.toLowerCase(),e+(r?capitalize(t):t)});function capitalize(e){return Fn(toString(e).toLowerCase())}function deburr(e){return(e=toString(e))&&e.replace(we,Bt).replace(tt,"")}var Cn=createCompounder(function(e,t,r){return e+(r?"-":"")+t.toLowerCase()}),xn=createCompounder(function(e,t,r){return e+(r?" ":"")+t.toLowerCase()}),Ln=createCaseFirst("toLowerCase");var jn=createCompounder(function(e,t,r){return e+(r?"_":"")+t.toLowerCase()});var Pn=createCompounder(function(e,t,r){return e+(r?" ":"")+Fn(t)});var Un=createCompounder(function(e,t,r){return e+(r?" ":"")+t.toUpperCase()}),Fn=createCaseFirst("toUpperCase");function words(e,t,r){return e=toString(e),(t=r?a:t)===a?function hasUnicodeWord(e){return ot.test(e)}(e)?function unicodeWords(e){return e.match(nt)||[]}(e):function asciiWords(e){return e.match(fe)||[]}(e):e.match(t)||[]}var Dn=baseRest(function(e,t){try{return apply(e,a,t)}catch(e){return isError(e)?e:new se(e)}}),Nn=flatRest(function(e,t){return arrayEach(t,function(t){t=toKey(t),baseAssignValue(e,t,$r(e[t],e))}),e});function constant(e){return function(){return e}}var Mn=createFlow(),zn=createFlow(!0);function identity(e){return e}function iteratee(e){return baseIteratee("function"==typeof e?e:baseClone(e,1))}var Wn=baseRest(function(e,t){return function(r){return baseInvoke(r,e,t)}}),qn=baseRest(function(e,t){return function(r){return baseInvoke(e,r,t)}});function mixin(e,t,r){var n=keys(t),a=baseFunctions(t,n);null!=r||isObject(t)&&(a.length||!n.length)||(r=t,t=e,e=this,a=baseFunctions(t,keys(t)));var o=!(isObject(r)&&"chain"in r&&!r.chain),i=isFunction(e);return arrayEach(a,function(r){var n=t[r];e[r]=n,i&&(e.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=e(this.__wrapped__);return(r.__actions__=copyArray(this.__actions__)).push({func:n,args:arguments,thisArg:e}),r.__chain__=t,r}return n.apply(e,arrayPush([this.value()],arguments))})}),e}function noop(){}var Hn=createOver(arrayMap),Vn=createOver(arrayEvery),$n=createOver(arraySome);function property(e){return isKey(e)?baseProperty(toKey(e)):function basePropertyDeep(e){return function(t){return baseGet(t,e)}}(e)}var Kn=createRange(),Gn=createRange(!0);function stubArray(){return[]}function stubFalse(){return!1}var Yn=createMathOperation(function(e,t){return e+t},0),Jn=createRound("ceil"),Zn=createMathOperation(function(e,t){return e/t},1),Xn=createRound("floor");var Qn,ea=createMathOperation(function(e,t){return e*t},1),ta=createRound("round"),ra=createMathOperation(function(e,t){return e-t},0);return lodash.after=function after(e,t){if("function"!=typeof t)throw new Te(o);return e=toInteger(e),function(){if(--e<1)return t.apply(this,arguments)}},lodash.ary=ary,lodash.assign=pn,lodash.assignIn=gn,lodash.assignInWith=yn,lodash.assignWith=bn,lodash.at=vn,lodash.before=before,lodash.bind=$r,lodash.bindAll=Nn,lodash.bindKey=Kr,lodash.castArray=function castArray(){if(!arguments.length)return[];var e=arguments[0];return nn(e)?e:[e]},lodash.chain=chain,lodash.chunk=function chunk(e,t,n){t=(n?isIterateeCall(e,t,n):t===a)?1:xt(toInteger(t),0);var o=null==e?0:e.length;if(!o||t<1)return[];for(var i=0,s=0,u=r(dt(o/t));io?0:o+r),(n=n===a||n>o?o:toInteger(n))<0&&(n+=o),n=r>n?0:toLength(n);r>>0)?(e=toString(e))&&("string"==typeof t||null!=t&&!cn(t))&&!(t=baseToString(t))&&hasUnicode(e)?castSlice(stringToArray(e),0,r):e.split(t,r):[]},lodash.spread=function spread(e,t){if("function"!=typeof e)throw new Te(o);return t=null==t?0:xt(toInteger(t),0),baseRest(function(r){var n=r[t],a=castSlice(r,0,t);return n&&arrayPush(a,n),apply(e,this,a)})},lodash.tail=function tail(e){var t=null==e?0:e.length;return t?baseSlice(e,1,t):[]},lodash.take=function take(e,t,r){return e&&e.length?baseSlice(e,0,(t=r||t===a?1:toInteger(t))<0?0:t):[]},lodash.takeRight=function takeRight(e,t,r){var n=null==e?0:e.length;return n?baseSlice(e,(t=n-(t=r||t===a?1:toInteger(t)))<0?0:t,n):[]},lodash.takeRightWhile=function takeRightWhile(e,t){return e&&e.length?baseWhile(e,getIteratee(t,3),!1,!0):[]},lodash.takeWhile=function takeWhile(e,t){return e&&e.length?baseWhile(e,getIteratee(t,3)):[]},lodash.tap=function tap(e,t){return t(e),e},lodash.throttle=function throttle(e,t,r){var n=!0,a=!0;if("function"!=typeof e)throw new Te(o);return isObject(r)&&(n="leading"in r?!!r.leading:n,a="trailing"in r?!!r.trailing:a),debounce(e,t,{leading:n,maxWait:t,trailing:a})},lodash.thru=thru,lodash.toArray=toArray,lodash.toPairs=Bn,lodash.toPairsIn=Tn,lodash.toPath=function toPath(e){return nn(e)?arrayMap(e,toKey):isSymbol(e)?[e]:copyArray(vr(toString(e)))},lodash.toPlainObject=toPlainObject,lodash.transform=function transform(e,t,r){var n=nn(e),a=n||on(e)||fn(e);if(t=getIteratee(t,4),null==r){var o=e&&e.constructor;r=a?n?new o:[]:isObject(e)&&isFunction(o)?er($e(e)):{}}return(a?arrayEach:baseForOwn)(e,function(e,n,a){return t(r,e,n,a)}),r},lodash.unary=function unary(e){return ary(e,1)},lodash.union=Ir,lodash.unionBy=Br,lodash.unionWith=Tr,lodash.uniq=function uniq(e){return e&&e.length?baseUniq(e):[]},lodash.uniqBy=function uniqBy(e,t){return e&&e.length?baseUniq(e,getIteratee(t,2)):[]},lodash.uniqWith=function uniqWith(e,t){return t="function"==typeof t?t:a,e&&e.length?baseUniq(e,a,t):[]},lodash.unset=function unset(e,t){return null==e||baseUnset(e,t)},lodash.unzip=unzip,lodash.unzipWith=unzipWith,lodash.update=function update(e,t,r){return null==e?e:baseUpdate(e,t,castFunction(r))},lodash.updateWith=function updateWith(e,t,r,n){return n="function"==typeof n?n:a,null==e?e:baseUpdate(e,t,castFunction(r),n)},lodash.values=values,lodash.valuesIn=function valuesIn(e){return null==e?[]:baseValues(e,keysIn(e))},lodash.without=kr,lodash.words=words,lodash.wrap=function wrap(e,t){return Zr(castFunction(t),e)},lodash.xor=Cr,lodash.xorBy=xr,lodash.xorWith=Lr,lodash.zip=jr,lodash.zipObject=function zipObject(e,t){return baseZipObject(e||[],t||[],assignValue)},lodash.zipObjectDeep=function zipObjectDeep(e,t){return baseZipObject(e||[],t||[],baseSet)},lodash.zipWith=Pr,lodash.entries=Bn,lodash.entriesIn=Tn,lodash.extend=gn,lodash.extendWith=yn,mixin(lodash,lodash),lodash.add=Yn,lodash.attempt=Dn,lodash.camelCase=kn,lodash.capitalize=capitalize,lodash.ceil=Jn,lodash.clamp=function clamp(e,t,r){return r===a&&(r=t,t=a),r!==a&&(r=(r=toNumber(r))==r?r:0),t!==a&&(t=(t=toNumber(t))==t?t:0),baseClamp(toNumber(e),t,r)},lodash.clone=function clone(e){return baseClone(e,4)},lodash.cloneDeep=function cloneDeep(e){return baseClone(e,5)},lodash.cloneDeepWith=function cloneDeepWith(e,t){return baseClone(e,5,t="function"==typeof t?t:a)},lodash.cloneWith=function cloneWith(e,t){return baseClone(e,4,t="function"==typeof t?t:a)},lodash.conformsTo=function conformsTo(e,t){return null==t||baseConformsTo(e,t,keys(t))},lodash.deburr=deburr,lodash.defaultTo=function defaultTo(e,t){return null==e||e!=e?t:e},lodash.divide=Zn,lodash.endsWith=function endsWith(e,t,r){e=toString(e),t=baseToString(t);var n=e.length,o=r=r===a?n:baseClamp(toInteger(r),0,n);return(r-=t.length)>=0&&e.slice(r,o)==t},lodash.eq=eq,lodash.escape=function escape(e){return(e=toString(e))&&Z.test(e)?e.replace(Y,Tt):e},lodash.escapeRegExp=function escapeRegExp(e){return(e=toString(e))&&oe.test(e)?e.replace(ae,"\\$&"):e},lodash.every=function every(e,t,r){var n=nn(e)?arrayEvery:baseEvery;return r&&isIterateeCall(e,t,r)&&(t=a),n(e,getIteratee(t,3))},lodash.find=Dr,lodash.findIndex=findIndex,lodash.findKey=function findKey(e,t){return baseFindKey(e,getIteratee(t,3),baseForOwn)},lodash.findLast=Nr,lodash.findLastIndex=findLastIndex,lodash.findLastKey=function findLastKey(e,t){return baseFindKey(e,getIteratee(t,3),baseForOwnRight)},lodash.floor=Xn,lodash.forEach=forEach,lodash.forEachRight=forEachRight,lodash.forIn=function forIn(e,t){return null==e?e:nr(e,getIteratee(t,3),keysIn)},lodash.forInRight=function forInRight(e,t){return null==e?e:ar(e,getIteratee(t,3),keysIn)},lodash.forOwn=function forOwn(e,t){return e&&baseForOwn(e,getIteratee(t,3))},lodash.forOwnRight=function forOwnRight(e,t){return e&&baseForOwnRight(e,getIteratee(t,3))},lodash.get=get,lodash.gt=en,lodash.gte=tn,lodash.has=function has(e,t){return null!=e&&hasPath(e,t,baseHas)},lodash.hasIn=hasIn,lodash.head=head,lodash.identity=identity,lodash.includes=function includes(e,t,r,n){e=isArrayLike(e)?e:values(e),r=r&&!n?toInteger(r):0;var a=e.length;return r<0&&(r=xt(a+r,0)),isString(e)?r<=a&&e.indexOf(t,r)>-1:!!a&&baseIndexOf(e,t,r)>-1},lodash.indexOf=function indexOf(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var a=null==r?0:toInteger(r);return a<0&&(a=xt(n+a,0)),baseIndexOf(e,t,a)},lodash.inRange=function inRange(e,t,r){return t=toFinite(t),r===a?(r=t,t=0):r=toFinite(r),function baseInRange(e,t,r){return e>=Lt(t,r)&&e=-9007199254740991&&e<=p},lodash.isSet=ln,lodash.isString=isString,lodash.isSymbol=isSymbol,lodash.isTypedArray=fn,lodash.isUndefined=function isUndefined(e){return e===a},lodash.isWeakMap=function isWeakMap(e){return isObjectLike(e)&&dr(e)==L},lodash.isWeakSet=function isWeakSet(e){return isObjectLike(e)&&"[object WeakSet]"==baseGetTag(e)},lodash.join=function join(e,t){return null==e?"":_t.call(e,t)},lodash.kebabCase=Cn,lodash.last=last,lodash.lastIndexOf=function lastIndexOf(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var o=n;return r!==a&&(o=(o=toInteger(r))<0?xt(n+o,0):Lt(o,n-1)),t==t?function strictLastIndexOf(e,t,r){for(var n=r+1;n--;)if(e[n]===t)return n;return n}(e,t,o):baseFindIndex(e,baseIsNaN,o,!0)},lodash.lowerCase=xn,lodash.lowerFirst=Ln,lodash.lt=hn,lodash.lte=dn,lodash.max=function max(e){return e&&e.length?baseExtremum(e,identity,baseGt):a},lodash.maxBy=function maxBy(e,t){return e&&e.length?baseExtremum(e,getIteratee(t,2),baseGt):a},lodash.mean=function mean(e){return baseMean(e,identity)},lodash.meanBy=function meanBy(e,t){return baseMean(e,getIteratee(t,2))},lodash.min=function min(e){return e&&e.length?baseExtremum(e,identity,baseLt):a},lodash.minBy=function minBy(e,t){return e&&e.length?baseExtremum(e,getIteratee(t,2),baseLt):a},lodash.stubArray=stubArray,lodash.stubFalse=stubFalse,lodash.stubObject=function stubObject(){return{}},lodash.stubString=function stubString(){return""},lodash.stubTrue=function stubTrue(){return!0},lodash.multiply=ea,lodash.nth=function nth(e,t){return e&&e.length?baseNth(e,toInteger(t)):a},lodash.noConflict=function noConflict(){return gt._===this&&(gt._=Me),this},lodash.noop=noop,lodash.now=Vr,lodash.pad=function pad(e,t,r){e=toString(e);var n=(t=toInteger(t))?stringSize(e):0;if(!t||n>=t)return e;var a=(t-n)/2;return createPadding(pt(a),r)+e+createPadding(dt(a),r)},lodash.padEnd=function padEnd(e,t,r){e=toString(e);var n=(t=toInteger(t))?stringSize(e):0;return t&&nt){var n=e;e=t,t=n}if(r||e%1||t%1){var o=Ut();return Lt(e+o*(t-e+ft("1e-"+((o+"").length-1))),t)}return baseRandom(e,t)},lodash.reduce=function reduce(e,t,r){var n=nn(e)?arrayReduce:baseReduce,a=arguments.length<3;return n(e,getIteratee(t,4),r,a,tr)},lodash.reduceRight=function reduceRight(e,t,r){var n=nn(e)?arrayReduceRight:baseReduce,a=arguments.length<3;return n(e,getIteratee(t,4),r,a,rr)},lodash.repeat=function repeat(e,t,r){return t=(r?isIterateeCall(e,t,r):t===a)?1:toInteger(t),baseRepeat(toString(e),t)},lodash.replace=function replace(){var e=arguments,t=toString(e[0]);return e.length<3?t:t.replace(e[1],e[2])},lodash.result=function result(e,t,r){var n=-1,o=(t=castPath(t,e)).length;for(o||(o=1,e=a);++np)return[];var r=y,n=Lt(e,y);t=getIteratee(t),e-=y;for(var a=baseTimes(n,t);++r=i)return e;var u=r-stringSize(n);if(u<1)return n;var c=s?castSlice(s,0,u).join(""):e.slice(0,u);if(o===a)return c+n;if(s&&(u+=c.length-u),cn(o)){if(e.slice(u).search(o)){var l,f=c;for(o.global||(o=Ie(o.source,toString(ge.exec(o))+"g")),o.lastIndex=0;l=o.exec(f);)var h=l.index;c=c.slice(0,h===a?u:h)}}else if(e.indexOf(baseToString(o),u)!=u){var d=c.lastIndexOf(o);d>-1&&(c=c.slice(0,d))}return c+n},lodash.unescape=function unescape(e){return(e=toString(e))&&J.test(e)?e.replace(G,kt):e},lodash.uniqueId=function uniqueId(e){var t=++Ue;return toString(e)+t},lodash.upperCase=Un,lodash.upperFirst=Fn,lodash.each=forEach,lodash.eachRight=forEachRight,lodash.first=head,mixin(lodash,(Qn={},baseForOwn(lodash,function(e,t){Pe.call(lodash.prototype,t)||(Qn[t]=e)}),Qn),{chain:!1}),lodash.VERSION="4.17.23",arrayEach(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){lodash[e].placeholder=lodash}),arrayEach(["drop","take"],function(e,t){LazyWrapper.prototype[e]=function(r){r=r===a?1:xt(toInteger(r),0);var n=this.__filtered__&&!t?new LazyWrapper(this):this.clone();return n.__filtered__?n.__takeCount__=Lt(r,n.__takeCount__):n.__views__.push({size:Lt(r,y),type:e+(n.__dir__<0?"Right":"")}),n},LazyWrapper.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),arrayEach(["filter","map","takeWhile"],function(e,t){var r=t+1,n=1==r||3==r;LazyWrapper.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:getIteratee(e,3),type:r}),t.__filtered__=t.__filtered__||n,t}}),arrayEach(["head","last"],function(e,t){var r="take"+(t?"Right":"");LazyWrapper.prototype[e]=function(){return this[r](1).value()[0]}}),arrayEach(["initial","tail"],function(e,t){var r="drop"+(t?"":"Right");LazyWrapper.prototype[e]=function(){return this.__filtered__?new LazyWrapper(this):this[r](1)}}),LazyWrapper.prototype.compact=function(){return this.filter(identity)},LazyWrapper.prototype.find=function(e){return this.filter(e).head()},LazyWrapper.prototype.findLast=function(e){return this.reverse().find(e)},LazyWrapper.prototype.invokeMap=baseRest(function(e,t){return"function"==typeof e?new LazyWrapper(this):this.map(function(r){return baseInvoke(r,e,t)})}),LazyWrapper.prototype.reject=function(e){return this.filter(negate(getIteratee(e)))},LazyWrapper.prototype.slice=function(e,t){e=toInteger(e);var r=this;return r.__filtered__&&(e>0||t<0)?new LazyWrapper(r):(e<0?r=r.takeRight(-e):e&&(r=r.drop(e)),t!==a&&(r=(t=toInteger(t))<0?r.dropRight(-t):r.take(t-e)),r)},LazyWrapper.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},LazyWrapper.prototype.toArray=function(){return this.take(y)},baseForOwn(LazyWrapper.prototype,function(e,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),n=/^(?:head|last)$/.test(t),o=lodash[n?"take"+("last"==t?"Right":""):t],i=n||/^find/.test(t);o&&(lodash.prototype[t]=function(){var t=this.__wrapped__,s=n?[1]:arguments,u=t instanceof LazyWrapper,c=s[0],l=u||nn(t),interceptor=function(e){var t=o.apply(lodash,arrayPush([e],s));return n&&f?t[0]:t};l&&r&&"function"==typeof c&&1!=c.length&&(u=l=!1);var f=this.__chain__,h=!!this.__actions__.length,d=i&&!f,p=u&&!h;if(!i&&l){t=p?t:new LazyWrapper(this);var g=e.apply(t,s);return g.__actions__.push({func:thru,args:[interceptor],thisArg:a}),new LodashWrapper(g,f)}return d&&p?e.apply(this,s):(g=this.thru(interceptor),d?n?g.value()[0]:g.value():g)})}),arrayEach(["pop","push","shift","sort","splice","unshift"],function(e){var t=ke[e],r=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);lodash.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var a=this.value();return t.apply(nn(a)?a:[],e)}return this[r](function(r){return t.apply(nn(r)?r:[],e)})}}),baseForOwn(LazyWrapper.prototype,function(e,t){var r=lodash[t];if(r){var n=r.name+"";Pe.call(Vt,n)||(Vt[n]=[]),Vt[n].push({name:t,func:r})}}),Vt[createHybrid(a,2).name]=[{name:"wrapper",func:a}],LazyWrapper.prototype.clone=function lazyClone(){var e=new LazyWrapper(this.__wrapped__);return e.__actions__=copyArray(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=copyArray(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=copyArray(this.__views__),e},LazyWrapper.prototype.reverse=function lazyReverse(){if(this.__filtered__){var e=new LazyWrapper(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},LazyWrapper.prototype.value=function lazyValue(){var e=this.__wrapped__.value(),t=this.__dir__,r=nn(e),n=t<0,a=r?e.length:0,o=function getView(e,t,r){var n=-1,a=r.length;for(;++n=this.__values__.length;return{done:e,value:e?a:this.__values__[this.__index__++]}},lodash.prototype.plant=function wrapperPlant(e){for(var t,r=this;r instanceof baseLodash;){var n=wrapperClone(r);n.__index__=0,n.__values__=a,t?o.__wrapped__=n:t=n;var o=n;r=r.__wrapped__}return o.__wrapped__=e,t},lodash.prototype.reverse=function wrapperReverse(){var e=this.__wrapped__;if(e instanceof LazyWrapper){var t=e;return this.__actions__.length&&(t=new LazyWrapper(this)),(t=t.reverse()).__actions__.push({func:thru,args:[reverse],thisArg:a}),new LodashWrapper(t,this.__chain__)}return this.thru(reverse)},lodash.prototype.toJSON=lodash.prototype.valueOf=lodash.prototype.value=function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__)},lodash.prototype.first=lodash.prototype.head,Ze&&(lodash.prototype[Ze]=function wrapperToIterator(){return this}),lodash}();gt._=Ct,(n=function(){return Ct}.call(t,r,t,e))===a||(e.exports=n)}.call(this)},205(){},812(){},606(e){var t,r,n=e.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(e){if(t===setTimeout)return setTimeout(e,0);if((t===defaultSetTimout||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){t=defaultSetTimout}try{r="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){r=defaultClearTimeout}}();var a,o=[],i=!1,s=-1;function cleanUpNextTick(){i&&a&&(i=!1,a.length?o=a.concat(o):s=-1,o.length&&drainQueue())}function drainQueue(){if(!i){var e=runTimeout(cleanUpNextTick);i=!0;for(var t=o.length;t;){for(a=o,o=[];++s1)for(var r=1;r{const t=o.call(e);return l[t]||(l[t]=t.slice(8,-1).toLowerCase())});var l;const kindOfTest=e=>(e=e.toLowerCase(),t=>c(t)===e),typeOfTest=e=>t=>typeof t===e,{isArray:f}=Array,h=typeOfTest("undefined");function isBuffer(e){return null!==e&&!h(e)&&null!==e.constructor&&!h(e.constructor)&&g(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const d=kindOfTest("ArrayBuffer");const p=typeOfTest("string"),g=typeOfTest("function"),y=typeOfTest("number"),isObject=e=>null!==e&&"object"==typeof e,isPlainObject=e=>{if("object"!==c(e))return!1;const t=i(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||u in e||s in e)},b=kindOfTest("Date"),v=kindOfTest("File"),m=kindOfTest("Blob"),_=kindOfTest("FileList"),w=kindOfTest("URLSearchParams"),[A,E,O,S]=["ReadableStream","Request","Response","Headers"].map(kindOfTest);function forEach(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,a;if("object"!=typeof e&&(e=[e]),f(e))for(n=0,a=e.length;n0;)if(n=r[a],t===n.toLowerCase())return n;return null}const R="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,isContextDefined=e=>!h(e)&&e!==R;const I=(B="undefined"!=typeof Uint8Array&&i(Uint8Array),e=>B&&e instanceof B);var B;const T=kindOfTest("HTMLFormElement"),k=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),C=kindOfTest("RegExp"),reduceDescriptors=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};forEach(r,(r,a)=>{let o;!1!==(o=t(r,a,e))&&(n[a]=o||r)}),Object.defineProperties(e,n)};const x=kindOfTest("AsyncFunction"),L=(j="function"==typeof setImmediate,P=g(R.postMessage),j?setImmediate:P?(U=`axios@${Math.random()}`,F=[],R.addEventListener("message",({source:e,data:t})=>{e===R&&t===U&&F.length&&F.shift()()},!1),e=>{F.push(e),R.postMessage(U,"*")}):e=>setTimeout(e));var j,P,U,F;const D="undefined"!=typeof queueMicrotask?queueMicrotask.bind(R):void 0!==n&&n.nextTick||L;var N={isArray:f,isArrayBuffer:d,isBuffer,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||g(e.append)&&("formdata"===(t=c(e))||"object"===t&&g(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function isArrayBufferView(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&d(e.buffer),t},isString:p,isNumber:y,isBoolean:e=>!0===e||!1===e,isObject,isPlainObject,isEmptyObject:e=>{if(!isObject(e)||isBuffer(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:A,isRequest:E,isResponse:O,isHeaders:S,isUndefined:h,isDate:b,isFile:v,isBlob:m,isRegExp:C,isFunction:g,isStream:e=>isObject(e)&&g(e.pipe),isURLSearchParams:w,isTypedArray:I,isFileList:_,forEach,merge:function merge(){const{caseless:e,skipUndefined:t}=isContextDefined(this)&&this||{},r={},assignValue=(n,a)=>{if("__proto__"===a||"constructor"===a||"prototype"===a)return;const o=e&&findKey(r,a)||a;isPlainObject(r[o])&&isPlainObject(n)?r[o]=merge(r[o],n):isPlainObject(n)?r[o]=merge({},n):f(n)?r[o]=n.slice():t&&h(n)||(r[o]=n)};for(let e=0,t=arguments.length;e(forEach(t,(t,n)=>{r&&g(t)?Object.defineProperty(e,n,{value:bind(t,r),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,n,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:n}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let a,o,s;const u={};if(t=t||{},null==e)return t;do{for(a=Object.getOwnPropertyNames(e),o=a.length;o-- >0;)s=a[o],n&&!n(s,e,t)||u[s]||(t[s]=e[s],u[s]=!0);e=!1!==r&&i(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:c,kindOfTest,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(f(e))return e;let t=e.length;if(!y(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[s]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:T,hasOwnProperty:k,hasOwnProp:k,reduceDescriptors,freezeMethods:e=>{reduceDescriptors(e,(t,r)=>{if(g(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];g(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))})},toObjectSet:(e,t)=>{const r={},define=e=>{e.forEach(e=>{r[e]=!0})};return f(e)?define(e):define(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function replacer(e,t,r){return t.toUpperCase()+r}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey,global:R,isContextDefined,isSpecCompliantForm:function isSpecCompliantForm(e){return!!(e&&g(e.append)&&"FormData"===e[u]&&e[s])},toJSONObject:e=>{const t=new Array(10),visit=(e,r)=>{if(isObject(e)){if(t.indexOf(e)>=0)return;if(isBuffer(e))return e;if(!("toJSON"in e)){t[r]=e;const n=f(e)?[]:{};return forEach(e,(e,t)=>{const a=visit(e,r+1);!h(a)&&(n[t]=a)}),t[r]=void 0,n}}return e};return visit(e,0)},isAsyncFn:x,isThenable:e=>e&&(isObject(e)||g(e))&&g(e.then)&&g(e.catch),setImmediate:L,asap:D,isIterable:e=>null!=e&&g(e[s])};class AxiosError extends Error{static from(e,t,r,n,a,o){const i=new AxiosError(e.message,t||e.code,r,n,a);return i.cause=e,i.name=e.name,o&&Object.assign(i,o),i}constructor(e,t,r,n,a){super(e),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),a&&(this.response=a,this.status=a.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:N.toJSONObject(this.config),code:this.code,status:this.status}}}AxiosError.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",AxiosError.ERR_BAD_OPTION="ERR_BAD_OPTION",AxiosError.ECONNABORTED="ECONNABORTED",AxiosError.ETIMEDOUT="ETIMEDOUT",AxiosError.ERR_NETWORK="ERR_NETWORK",AxiosError.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",AxiosError.ERR_DEPRECATED="ERR_DEPRECATED",AxiosError.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",AxiosError.ERR_BAD_REQUEST="ERR_BAD_REQUEST",AxiosError.ERR_CANCELED="ERR_CANCELED",AxiosError.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",AxiosError.ERR_INVALID_URL="ERR_INVALID_URL";var M=AxiosError;function isVisitable(e){return N.isPlainObject(e)||N.isArray(e)}function removeBrackets(e){return N.endsWith(e,"[]")?e.slice(0,-2):e}function renderKey(e,t,r){return e?e.concat(t).map(function each(e,t){return e=removeBrackets(e),!r&&t?"["+e+"]":e}).join(r?".":""):t}const z=N.toFlatObject(N,{},null,function filter(e){return/^is[A-Z]/.test(e)});function toFormData(e,t,r){if(!N.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=N.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function defined(e,t){return!N.isUndefined(t[e])})).metaTokens,o=r.visitor||defaultVisitor,i=r.dots,s=r.indexes,u=(r.Blob||"undefined"!=typeof Blob&&Blob)&&N.isSpecCompliantForm(t);if(!N.isFunction(o))throw new TypeError("visitor must be a function");function convertValue(e){if(null===e)return"";if(N.isDate(e))return e.toISOString();if(N.isBoolean(e))return e.toString();if(!u&&N.isBlob(e))throw new M("Blob is not supported. Use a Buffer instead.");return N.isArrayBuffer(e)||N.isTypedArray(e)?u&&"function"==typeof Blob?new Blob([e]):a.from(e):e}function defaultVisitor(e,r,a){let o=e;if(e&&!a&&"object"==typeof e)if(N.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(N.isArray(e)&&function isFlatArray(e){return N.isArray(e)&&!e.some(isVisitable)}(e)||(N.isFileList(e)||N.endsWith(r,"[]"))&&(o=N.toArray(e)))return r=removeBrackets(r),o.forEach(function each(e,n){!N.isUndefined(e)&&null!==e&&t.append(!0===s?renderKey([r],n,i):null===s?r:r+"[]",convertValue(e))}),!1;return!!isVisitable(e)||(t.append(renderKey(a,r,i),convertValue(e)),!1)}const c=[],l=Object.assign(z,{defaultVisitor,convertValue,isVisitable});if(!N.isObject(e))throw new TypeError("data must be an object");return function build(e,r){if(!N.isUndefined(e)){if(-1!==c.indexOf(e))throw Error("Circular reference detected in "+r.join("."));c.push(e),N.forEach(e,function each(e,n){!0===(!(N.isUndefined(e)||null===e)&&o.call(t,e,N.isString(n)?n.trim():n,r,l))&&build(e,r?r.concat(n):[n])}),c.pop()}}(e),t}function encode$1(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function replacer(e){return t[e]})}function AxiosURLSearchParams(e,t){this._pairs=[],e&&toFormData(e,this,t)}const W=AxiosURLSearchParams.prototype;function encode(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function buildURL(e,t,r){if(!t)return e;const n=r&&r.encode||encode,a=N.isFunction(r)?{serialize:r}:r,o=a&&a.serialize;let i;if(i=o?o(t,a):N.isURLSearchParams(t)?t.toString():new AxiosURLSearchParams(t,a).toString(n),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}W.append=function append(e,t){this._pairs.push([e,t])},W.toString=function toString(e){const t=e?function(t){return e.call(this,t,encode$1)}:encode$1;return this._pairs.map(function each(e){return t(e[0])+"="+t(e[1])},"").join("&")};var q=class InterceptorManager{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){N.forEach(this.handlers,function forEachHandler(t){null!==t&&e(t)})}},H={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},V={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:AxiosURLSearchParams,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const $="undefined"!=typeof window&&"undefined"!=typeof document,K="object"==typeof navigator&&navigator||void 0,G=$&&(!K||["ReactNative","NativeScript","NS"].indexOf(K.product)<0),Y="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,J=$&&window.location.href||"http://localhost";var Z={...Object.freeze({__proto__:null,hasBrowserEnv:$,hasStandardBrowserWebWorkerEnv:Y,hasStandardBrowserEnv:G,navigator:K,origin:J}),...V};function formDataToJSON(e){function buildPath(e,t,r,n){let a=e[n++];if("__proto__"===a)return!0;const o=Number.isFinite(+a),i=n>=e.length;if(a=!a&&N.isArray(r)?r.length:a,i)return N.hasOwnProp(r,a)?r[a]=[r[a],t]:r[a]=t,!o;r[a]&&N.isObject(r[a])||(r[a]=[]);return buildPath(e,t,r[a],n)&&N.isArray(r[a])&&(r[a]=function arrayToObject(e){const t={},r=Object.keys(e);let n;const a=r.length;let o;for(n=0;n{buildPath(function parsePropPath(e){return N.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,t,0)}),t}return null}const X={transitional:H,adapter:["xhr","http","fetch"],transformRequest:[function transformRequest(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,a=N.isObject(e);a&&N.isHTMLForm(e)&&(e=new FormData(e));if(N.isFormData(e))return n?JSON.stringify(formDataToJSON(e)):e;if(N.isArrayBuffer(e)||N.isBuffer(e)||N.isStream(e)||N.isFile(e)||N.isBlob(e)||N.isReadableStream(e))return e;if(N.isArrayBufferView(e))return e.buffer;if(N.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(a){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function toURLEncodedForm(e,t){return toFormData(e,new Z.classes.URLSearchParams,{visitor:function(e,t,r,n){return Z.isNode&&N.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((o=N.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return toFormData(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}return a||n?(t.setContentType("application/json",!1),function stringifySafely(e,t,r){if(N.isString(e))try{return(t||JSON.parse)(e),N.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function transformResponse(e){const t=this.transitional||X.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(N.isResponse(e)||N.isReadableStream(e))return e;if(e&&N.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e,this.parseReviver)}catch(e){if(r){if("SyntaxError"===e.name)throw M.from(e,M.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Z.classes.FormData,Blob:Z.classes.Blob},validateStatus:function validateStatus(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};N.forEach(["delete","get","head","post","put","patch"],e=>{X.headers[e]={}});var Q=X;const ee=N.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const te=Symbol("internals");function normalizeHeader(e){return e&&String(e).trim().toLowerCase()}function normalizeValue(e){return!1===e||null==e?e:N.isArray(e)?e.map(normalizeValue):String(e)}function matchHeaderValue(e,t,r,n,a){return N.isFunction(n)?n.call(this,t,r):(a&&(t=r),N.isString(t)?N.isString(n)?-1!==t.indexOf(n):N.isRegExp(n)?n.test(t):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function setHeader(e,t,r){const a=normalizeHeader(t);if(!a)throw new Error("header name must be a non-empty string");const o=N.findKey(n,a);(!o||void 0===n[o]||!0===r||void 0===r&&!1!==n[o])&&(n[o||t]=normalizeValue(e))}const setHeaders=(e,t)=>N.forEach(e,(e,r)=>setHeader(e,r,t));if(N.isPlainObject(e)||e instanceof this.constructor)setHeaders(e,t);else if(N.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))setHeaders((e=>{const t={};let r,n,a;return e&&e.split("\n").forEach(function parser(e){a=e.indexOf(":"),r=e.substring(0,a).trim().toLowerCase(),n=e.substring(a+1).trim(),!r||t[r]&&ee[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t})(e),t);else if(N.isObject(e)&&N.isIterable(e)){let r,n,a={};for(const t of e){if(!N.isArray(t))throw TypeError("Object iterator must return a key-value pair");a[n=t[0]]=(r=a[n])?N.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}setHeaders(a,t)}else null!=e&&setHeader(t,e,r);return this}get(e,t){if(e=normalizeHeader(e)){const r=N.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function parseTokens(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(N.isFunction(t))return t.call(this,e,r);if(N.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=normalizeHeader(e)){const r=N.findKey(this,e);return!(!r||void 0===this[r]||t&&!matchHeaderValue(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function deleteHeader(e){if(e=normalizeHeader(e)){const a=N.findKey(r,e);!a||t&&!matchHeaderValue(0,r[a],a,t)||(delete r[a],n=!0)}}return N.isArray(e)?e.forEach(deleteHeader):deleteHeader(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const a=t[r];e&&!matchHeaderValue(0,this[a],a,e,!0)||(delete this[a],n=!0)}return n}normalize(e){const t=this,r={};return N.forEach(this,(n,a)=>{const o=N.findKey(r,a);if(o)return t[o]=normalizeValue(n),void delete t[a];const i=e?function formatHeader(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}(a):String(a).trim();i!==a&&delete t[a],t[i]=normalizeValue(n),r[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return N.forEach(this,(r,n)=>{null!=r&&!1!==r&&(t[n]=e&&N.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(e=>r.set(e)),r}static accessor(e){const t=(this[te]=this[te]={accessors:{}}).accessors,r=this.prototype;function defineAccessor(e){const n=normalizeHeader(e);t[n]||(!function buildAccessors(e,t){const r=N.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(e,r,a){return this[n].call(this,t,e,r,a)},configurable:!0})})}(r,e),t[n]=!0)}return N.isArray(e)?e.forEach(defineAccessor):defineAccessor(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),N.reduceDescriptors(AxiosHeaders.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}}),N.freezeMethods(AxiosHeaders);var re=AxiosHeaders;function transformData(e,t){const r=this||Q,n=t||r,a=re.from(n.headers);let o=n.data;return N.forEach(e,function transform(e){o=e.call(r,o,a.normalize(),t?t.status:void 0)}),a.normalize(),o}function isCancel(e){return!(!e||!e.__CANCEL__)}var ne=class CanceledError extends M{constructor(e,t,r){super(null==e?"canceled":e,M.ERR_CANCELED,t,r),this.name="CanceledError",this.__CANCEL__=!0}};function settle(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new M("Request failed with status code "+r.status,[M.ERR_BAD_REQUEST,M.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}const progressEventReducer=(e,t,r=3)=>{let n=0;const a=function speedometer(e,t){e=e||10;const r=new Array(e),n=new Array(e);let a,o=0,i=0;return t=void 0!==t?t:1e3,function push(s){const u=Date.now(),c=n[i];a||(a=u),r[o]=s,n[o]=u;let l=i,f=0;for(;l!==o;)f+=r[l++],l%=e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),u-a{a=o,r=null,n&&(clearTimeout(n),n=null),e(...t)};return[(...e)=>{const t=Date.now(),i=t-a;i>=o?invoke(e,t):(r=e,n||(n=setTimeout(()=>{n=null,invoke(r)},o-i)))},()=>r&&invoke(r)]}(r=>{const o=r.loaded,i=r.lengthComputable?r.total:void 0,s=o-n,u=a(s);n=o;e({loaded:o,total:i,progress:i?o/i:void 0,bytes:s,rate:u||void 0,estimated:u&&i&&o<=i?(i-o)/u:void 0,event:r,lengthComputable:null!=i,[t?"download":"upload"]:!0})},r)},progressEventDecorator=(e,t)=>{const r=null!=e;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},asyncDecorator=e=>(...t)=>N.asap(()=>e(...t));var ae=Z.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,Z.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(Z.origin),Z.navigator&&/(msie|trident)/i.test(Z.navigator.userAgent)):()=>!0,oe=Z.hasStandardBrowserEnv?{write(e,t,r,n,a,o,i){if("undefined"==typeof document)return;const s=[`${e}=${encodeURIComponent(t)}`];N.isNumber(r)&&s.push(`expires=${new Date(r).toUTCString()}`),N.isString(n)&&s.push(`path=${n}`),N.isString(a)&&s.push(`domain=${a}`),!0===o&&s.push("secure"),N.isString(i)&&s.push(`SameSite=${i}`),document.cookie=s.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function buildFullPath(e,t,r){let n=!function isAbsoluteURL(e){return"string"==typeof e&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}(t);return e&&(n||0==r)?function combineURLs(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const headersToObject=e=>e instanceof re?{...e}:e;function mergeConfig(e,t){t=t||{};const r={};function getMergedValue(e,t,r,n){return N.isPlainObject(e)&&N.isPlainObject(t)?N.merge.call({caseless:n},e,t):N.isPlainObject(t)?N.merge({},t):N.isArray(t)?t.slice():t}function mergeDeepProperties(e,t,r,n){return N.isUndefined(t)?N.isUndefined(e)?void 0:getMergedValue(void 0,e,0,n):getMergedValue(e,t,0,n)}function valueFromConfig2(e,t){if(!N.isUndefined(t))return getMergedValue(void 0,t)}function defaultToConfig2(e,t){return N.isUndefined(t)?N.isUndefined(e)?void 0:getMergedValue(void 0,e):getMergedValue(void 0,t)}function mergeDirectKeys(r,n,a){return a in t?getMergedValue(r,n):a in e?getMergedValue(void 0,r):void 0}const n={url:valueFromConfig2,method:valueFromConfig2,data:valueFromConfig2,baseURL:defaultToConfig2,transformRequest:defaultToConfig2,transformResponse:defaultToConfig2,paramsSerializer:defaultToConfig2,timeout:defaultToConfig2,timeoutMessage:defaultToConfig2,withCredentials:defaultToConfig2,withXSRFToken:defaultToConfig2,adapter:defaultToConfig2,responseType:defaultToConfig2,xsrfCookieName:defaultToConfig2,xsrfHeaderName:defaultToConfig2,onUploadProgress:defaultToConfig2,onDownloadProgress:defaultToConfig2,decompress:defaultToConfig2,maxContentLength:defaultToConfig2,maxBodyLength:defaultToConfig2,beforeRedirect:defaultToConfig2,transport:defaultToConfig2,httpAgent:defaultToConfig2,httpsAgent:defaultToConfig2,cancelToken:defaultToConfig2,socketPath:defaultToConfig2,responseEncoding:defaultToConfig2,validateStatus:mergeDirectKeys,headers:(e,t,r)=>mergeDeepProperties(headersToObject(e),headersToObject(t),0,!0)};return N.forEach(Object.keys({...e,...t}),function computeConfigValue(a){if("__proto__"===a||"constructor"===a||"prototype"===a)return;const o=N.hasOwnProp(n,a)?n[a]:mergeDeepProperties,i=o(e[a],t[a],a);N.isUndefined(i)&&o!==mergeDirectKeys||(r[a]=i)}),r}var resolveConfig=e=>{const t=mergeConfig({},e);let{data:r,withXSRFToken:n,xsrfHeaderName:a,xsrfCookieName:o,headers:i,auth:s}=t;if(t.headers=i=re.from(i),t.url=buildURL(buildFullPath(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&i.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):""))),N.isFormData(r))if(Z.hasStandardBrowserEnv||Z.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(N.isFunction(r.getHeaders)){const e=r.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach(([e,r])=>{t.includes(e.toLowerCase())&&i.set(e,r)})}if(Z.hasStandardBrowserEnv&&(n&&N.isFunction(n)&&(n=n(t)),n||!1!==n&&ae(t.url))){const e=a&&o&&oe.read(o);e&&i.set(a,e)}return t};var ie="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function dispatchXhrRequest(t,r){const n=resolveConfig(e);let a=n.data;const o=re.from(n.headers).normalize();let i,s,u,c,l,{responseType:f,onUploadProgress:h,onDownloadProgress:d}=n;function done(){c&&c(),l&&l(),n.cancelToken&&n.cancelToken.unsubscribe(i),n.signal&&n.signal.removeEventListener("abort",i)}let p=new XMLHttpRequest;function onloadend(){if(!p)return;const n=re.from("getAllResponseHeaders"in p&&p.getAllResponseHeaders());settle(function _resolve(e){t(e),done()},function _reject(e){r(e),done()},{data:f&&"text"!==f&&"json"!==f?p.response:p.responseText,status:p.status,statusText:p.statusText,headers:n,config:e,request:p}),p=null}p.open(n.method.toUpperCase(),n.url,!0),p.timeout=n.timeout,"onloadend"in p?p.onloadend=onloadend:p.onreadystatechange=function handleLoad(){p&&4===p.readyState&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf("file:"))&&setTimeout(onloadend)},p.onabort=function handleAbort(){p&&(r(new M("Request aborted",M.ECONNABORTED,e,p)),p=null)},p.onerror=function handleError(t){const n=t&&t.message?t.message:"Network Error",a=new M(n,M.ERR_NETWORK,e,p);a.event=t||null,r(a),p=null},p.ontimeout=function handleTimeout(){let t=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const a=n.transitional||H;n.timeoutErrorMessage&&(t=n.timeoutErrorMessage),r(new M(t,a.clarifyTimeoutError?M.ETIMEDOUT:M.ECONNABORTED,e,p)),p=null},void 0===a&&o.setContentType(null),"setRequestHeader"in p&&N.forEach(o.toJSON(),function setRequestHeader(e,t){p.setRequestHeader(t,e)}),N.isUndefined(n.withCredentials)||(p.withCredentials=!!n.withCredentials),f&&"json"!==f&&(p.responseType=n.responseType),d&&([u,l]=progressEventReducer(d,!0),p.addEventListener("progress",u)),h&&p.upload&&([s,c]=progressEventReducer(h),p.upload.addEventListener("progress",s),p.upload.addEventListener("loadend",c)),(n.cancelToken||n.signal)&&(i=t=>{p&&(r(!t||t.type?new ne(null,e,p):t),p.abort(),p=null)},n.cancelToken&&n.cancelToken.subscribe(i),n.signal&&(n.signal.aborted?i():n.signal.addEventListener("abort",i)));const g=function parseProtocol(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(n.url);g&&-1===Z.protocols.indexOf(g)?r(new M("Unsupported protocol "+g+":",M.ERR_BAD_REQUEST,e)):p.send(a||null)})};var composeSignals$1=(e,t)=>{const{length:r}=e=e?e.filter(Boolean):[];if(t||r){let r,n=new AbortController;const onabort=function(e){if(!r){r=!0,unsubscribe();const t=e instanceof Error?e:this.reason;n.abort(t instanceof M?t:new ne(t instanceof Error?t.message:t))}};let a=t&&setTimeout(()=>{a=null,onabort(new M(`timeout of ${t}ms exceeded`,M.ETIMEDOUT))},t);const unsubscribe=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(onabort):e.removeEventListener("abort",onabort)}),e=null)};e.forEach(e=>e.addEventListener("abort",onabort));const{signal:o}=n;return o.unsubscribe=()=>N.asap(unsubscribe),o}};const streamChunk=function*(e,t){let r=e.byteLength;if(!t||r{const a=async function*(e,t){for await(const r of readStream(e))yield*streamChunk(r,t)}(e,t);let o,i=0,_onFinish=e=>{o||(o=!0,n&&n(e))};return new ReadableStream({async pull(e){try{const{done:t,value:n}=await a.next();if(t)return _onFinish(),void e.close();let o=n.byteLength;if(r){let e=i+=o;r(e)}e.enqueue(new Uint8Array(n))}catch(e){throw _onFinish(e),e}},cancel:e=>(_onFinish(e),a.return())},{highWaterMark:2})},{isFunction:se}=N,ue=(({Request:e,Response:t})=>({Request:e,Response:t}))(N.global),{ReadableStream:ce,TextEncoder:le}=N.global,test=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},factory=e=>{e=N.merge.call({skipUndefined:!0},ue,e);const{fetch:t,Request:r,Response:n}=e,a=t?se(t):"function"==typeof fetch,o=se(r),i=se(n);if(!a)return!1;const s=a&&se(ce),u=a&&("function"==typeof le?(c=new le,e=>c.encode(e)):async e=>new Uint8Array(await new r(e).arrayBuffer()));var c;const l=o&&s&&test(()=>{let e=!1;const t=new r(Z.origin,{body:new ce,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),f=i&&s&&test(()=>N.isReadableStream(new n("").body)),h={stream:f&&(e=>e.body)};a&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!h[e]&&(h[e]=(t,r)=>{let n=t&&t[e];if(n)return n.call(t);throw new M(`Response type '${e}' is not supported`,M.ERR_NOT_SUPPORT,r)})});const resolveBodyLength=async(e,t)=>{const n=N.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(N.isBlob(e))return e.size;if(N.isSpecCompliantForm(e)){const t=new r(Z.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return N.isArrayBufferView(e)||N.isArrayBuffer(e)?e.byteLength:(N.isURLSearchParams(e)&&(e+=""),N.isString(e)?(await u(e)).byteLength:void 0)})(t):n};return async e=>{let{url:a,method:i,data:s,signal:u,cancelToken:c,timeout:d,onDownloadProgress:p,onUploadProgress:g,responseType:y,headers:b,withCredentials:v="same-origin",fetchOptions:m}=resolveConfig(e),_=t||fetch;y=y?(y+"").toLowerCase():"text";let w=composeSignals$1([u,c&&c.toAbortSignal()],d),A=null;const E=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let O;try{if(g&&l&&"get"!==i&&"head"!==i&&0!==(O=await resolveBodyLength(b,s))){let e,t=new r(a,{method:"POST",body:s,duplex:"half"});if(N.isFormData(s)&&(e=t.headers.get("content-type"))&&b.setContentType(e),t.body){const[e,r]=progressEventDecorator(O,progressEventReducer(asyncDecorator(g)));s=trackStream(t.body,65536,e,r)}}N.isString(v)||(v=v?"include":"omit");const t=o&&"credentials"in r.prototype,u={...m,signal:w,method:i.toUpperCase(),headers:b.normalize().toJSON(),body:s,duplex:"half",credentials:t?v:void 0};A=o&&new r(a,u);let c=await(o?_(A,m):_(a,u));const d=f&&("stream"===y||"response"===y);if(f&&(p||d&&E)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=c[t]});const t=N.toFiniteNumber(c.headers.get("content-length")),[r,a]=p&&progressEventDecorator(t,progressEventReducer(asyncDecorator(p),!0))||[];c=new n(trackStream(c.body,65536,r,()=>{a&&a(),E&&E()}),e)}y=y||"text";let S=await h[N.findKey(h,y)||"text"](c,e);return!d&&E&&E(),await new Promise((t,r)=>{settle(t,r,{data:S,headers:re.from(c.headers),status:c.status,statusText:c.statusText,config:e,request:A})})}catch(t){if(E&&E(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new M("Network Error",M.ERR_NETWORK,e,A,t&&t.response),{cause:t.cause||t});throw M.from(t,t&&t.code,e,A,t&&t.response)}}},fe=new Map,getFetch=e=>{let t=e&&e.env||{};const{fetch:r,Request:n,Response:a}=t,o=[n,a,r];let i,s,u=o.length,c=fe;for(;u--;)i=o[u],s=c.get(i),void 0===s&&c.set(i,s=u?new Map:factory(t)),c=s;return s};getFetch();const he={http:null,xhr:ie,fetch:{get:getFetch}};N.forEach(he,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const renderReason=e=>`- ${e}`,isResolvedHandle=e=>N.isFunction(e)||null===e||!1===e;var de={getAdapter:function getAdapter(e,t){e=N.isArray(e)?e:[e];const{length:r}=e;let n,a;const o={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=r?e.length>1?"since :\n"+e.map(renderReason).join("\n"):" "+renderReason(e[0]):"as no adapter specified";throw new M("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return a},adapters:he};function throwIfCancellationRequested(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ne(null,e)}function dispatchRequest(e){throwIfCancellationRequested(e),e.headers=re.from(e.headers),e.data=transformData.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return de.getAdapter(e.adapter||Q.adapter,e)(e).then(function onAdapterResolution(t){return throwIfCancellationRequested(e),t.data=transformData.call(e,e.transformResponse,t),t.headers=re.from(t.headers),t},function onAdapterRejection(t){return isCancel(t)||(throwIfCancellationRequested(e),t&&t.response&&(t.response.data=transformData.call(e,e.transformResponse,t.response),t.response.headers=re.from(t.response.headers))),Promise.reject(t)})}const pe="1.13.5",ge={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{ge[e]=function validator(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const ye={};ge.transitional=function transitional(e,t,r){function formatMessage(e,t){return"[Axios v"+pe+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,n,a)=>{if(!1===e)throw new M(formatMessage(n," has been removed"+(t?" in "+t:"")),M.ERR_DEPRECATED);return t&&!ye[n]&&(ye[n]=!0,console.warn(formatMessage(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,a)}},ge.spelling=function spelling(e){return(t,r)=>(console.warn(`${r} is likely a misspelling of ${e}`),!0)};var be={assertOptions:function assertOptions(e,t,r){if("object"!=typeof e)throw new M("options must be an object",M.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let a=n.length;for(;a-- >0;){const o=n[a],i=t[o];if(i){const t=e[o],r=void 0===t||i(t,o,e);if(!0!==r)throw new M("option "+o+" must be "+r,M.ERR_BAD_OPTION_VALUE);continue}if(!0!==r)throw new M("Unknown option "+o,M.ERR_BAD_OPTION)}},validators:ge};const ve=be.validators;class Axios{constructor(e){this.defaults=e||{},this.interceptors={request:new q,response:new q}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const r=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?r&&!String(e.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+r):e.stack=r}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=mergeConfig(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:a}=t;void 0!==r&&be.assertOptions(r,{silentJSONParsing:ve.transitional(ve.boolean),forcedJSONParsing:ve.transitional(ve.boolean),clarifyTimeoutError:ve.transitional(ve.boolean),legacyInterceptorReqResOrdering:ve.transitional(ve.boolean)},!1),null!=n&&(N.isFunction(n)?t.paramsSerializer={serialize:n}:be.assertOptions(n,{encode:ve.function,serialize:ve.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),be.assertOptions(t,{baseUrl:ve.spelling("baseURL"),withXsrfToken:ve.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=a&&N.merge(a.common,a[t.method]);a&&N.forEach(["delete","get","head","post","put","patch","common"],e=>{delete a[e]}),t.headers=re.concat(o,a);const i=[];let s=!0;this.interceptors.request.forEach(function unshiftRequestInterceptors(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;s=s&&e.synchronous;const r=t.transitional||H;r&&r.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const u=[];let c;this.interceptors.response.forEach(function pushResponseInterceptors(e){u.push(e.fulfilled,e.rejected)});let l,f=0;if(!s){const e=[dispatchRequest.bind(this),void 0];for(e.unshift(...i),e.push(...u),l=e.length,c=Promise.resolve(t);f{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null}),this.promise.then=e=>{let t;const n=new Promise(e=>{r.subscribe(e),t=e}).then(e);return n.cancel=function reject(){r.unsubscribe(t)},n},e(function cancel(e,n,a){r.reason||(r.reason=new ne(e,n,a),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,abort=t=>{e.abort(t)};return this.subscribe(abort),e.signal.unsubscribe=()=>this.unsubscribe(abort),e.signal}static source(){let e;return{token:new CancelToken(function executor(t){e=t}),cancel:e}}}var _e=CancelToken;const we={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(we).forEach(([e,t])=>{we[t]=e});var Ae=we;const Ee=function createInstance(e){const t=new me(e),r=bind(me.prototype.request,t);return N.extend(r,me.prototype,t,{allOwnKeys:!0}),N.extend(r,t,null,{allOwnKeys:!0}),r.create=function create(t){return createInstance(mergeConfig(e,t))},r}(Q);Ee.Axios=me,Ee.CanceledError=ne,Ee.CancelToken=_e,Ee.isCancel=isCancel,Ee.VERSION=pe,Ee.toFormData=toFormData,Ee.AxiosError=M,Ee.Cancel=Ee.CanceledError,Ee.all=function all(e){return Promise.all(e)},Ee.spread=function spread(e){return function wrap(t){return e.apply(null,t)}},Ee.isAxiosError=function isAxiosError(e){return N.isObject(e)&&!0===e.isAxiosError},Ee.mergeConfig=mergeConfig,Ee.AxiosHeaders=re,Ee.formToJSON=e=>formDataToJSON(N.isHTMLForm(e)?new FormData(e):e),Ee.getAdapter=de.getAdapter,Ee.HttpStatusCode=Ae,Ee.default=Ee,e.exports=Ee}},r={};function __webpack_require__(e){var n=r[e];if(void 0!==n)return n.exports;var a=r[e]={id:e,loaded:!1,exports:{}};return t[e].call(a.exports,a,a.exports,__webpack_require__),a.loaded=!0,a.exports}__webpack_require__.m=t,e=[],__webpack_require__.O=(t,r,n,a)=>{if(!r){var o=1/0;for(c=0;c=a)&&Object.keys(__webpack_require__.O).every(e=>__webpack_require__.O[e](r[s]))?r.splice(s--,1):(i=!1,a0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[r,n,a]},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={847:0,252:0};__webpack_require__.O.j=t=>0===e[t];var webpackJsonpCallback=(t,r)=>{var n,a,[o,i,s]=r,u=0;if(o.some(t=>0!==e[t])){for(n in i)__webpack_require__.o(i,n)&&(__webpack_require__.m[n]=i[n]);if(s)var c=s(__webpack_require__)}for(t&&t(r);u__webpack_require__(988)),__webpack_require__.O(void 0,[252],()=>__webpack_require__(205));var n=__webpack_require__.O(void 0,[252],()=>__webpack_require__(812));n=__webpack_require__.O(n)})(); //# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/public/js/components.js b/public/js/components.js index 06363d2..a97f06f 100644 --- a/public/js/components.js +++ b/public/js/components.js @@ -1,43 +1,2 @@ -/* - * 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/components/addressPopup.js" -/*!*************************************************!*\ - !*** ./resources/js/components/addressPopup.js ***! - \*************************************************/ -() { - -eval("{window.AddressPopUp = function (options, itemData) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n active: false,\n array: [],\n onAfterSave: function onAfterSave() {},\n onClose: function onClose() {}\n };\n var data = {};\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options, itemData) {\n console.log(' Address constructor called');\n };\n this.init = function (options, itemData) {\n console.log(' Address nit called');\n $.extend(Opts, options);\n $.extend(data, itemData);\n root.bindClickAction();\n };\n this.clearData = function () {\n data = {};\n root.renderForm();\n };\n this.setData = function (itemData) {\n $.extend(data, itemData);\n };\n this.show = function () {\n $('.addressModal').modal().show();\n };\n this.renderForm = function () {\n $('.addressModal input').val('');\n $('.addressModal textarea').val('');\n $.each(data, function (key, value) {\n /*\r\n console.log('key:'+key+' value:'+value);\r\n console.log('.addressModal'+' *[name=contact'+$.ucFirst(key)+']');\r\n */\n $('.addressModal' + ' *[name=address' + $.ucFirst(key) + ']').val(value);\n });\n };\n this.loadData = function (id) {\n console.log('loading id:' + id);\n $('.addressModal .spinnerDiv').removeClass('d-none');\n $('.addressModal .addressModalForm').addClass('d-none');\n $('.addressModal').modal().show();\n var url = APP.getOpts()[\"Url\"][\"addressPopup\"]['show'];\n url = url.replaceAll('*id*', id);\n $.ajax({\n url: url,\n type: 'GET',\n headers: {\n 'X-CSRF-TOKEN': APP.getApiToken()\n },\n success: function success(data) {\n root.setData(data);\n root.renderForm();\n $('.spinnerDiv').addClass('d-none');\n $('.addressModalForm').removeClass('d-none');\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n if (xhr.responseJSON.errors) {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n } else {\n if (xhr.status == 404) {\n ajaxErrorFieldHandler([{\n 'detail': 'Nincs ilyen elem.'\n }]);\n } else {\n ajaxErrorFieldHandler([{\n 'detail': 'Általános hiba.'\n }]);\n }\n }\n $('.addressModal').modal('hide');\n }\n });\n return;\n // removed by dead control flow\n var contactData; \n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n };\n this.getOpts = function () {\n return Opts;\n };\n this.bindClickAction = function () {\n $('.addressModal .btn').unbind('click');\n $('.addressModal .buttonClose').bind('click', root.clickActionButtonClose);\n $('.addressModal .buttonSave').bind('click', root.clickActionButtonSave);\n };\n this.clickActionButtonClose = function (event) {\n console.log('click close');\n Opts.onClose(event, root.formDataToDataObjectAPICall());\n };\n this.save = function (data) {\n var form = $('.addressModal form');\n var url = form.attr('action');\n var ajaxType = 'POST';\n if (data.id) {\n url = APP.getOpts()[\"Url\"][\"addressPopup\"]['update'];\n url = url.replaceAll('*id*', data.id);\n ajaxType = 'PUT';\n }\n if (!data.status) {\n data.status = APP.getOpts()[\"addressPopup\"]['defaultStatus'];\n }\n debug('!!!!URL!!!!! ' + url);\n $.ajax({\n url: url,\n type: ajaxType,\n headers: {\n 'X-CSRF-TOKEN': APP.getApiToken()\n },\n data: data,\n success: function success(data) {\n Opts.onAfterSave(data);\n $('.addressModal').modal('toggle');\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n if (xhr.responseJSON.errors) {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n }\n }\n });\n return false;\n };\n this.clickActionButtonSave = function (event) {\n console.log('click save');\n var itemData = root.formDataToDataObjectAPICall(),\n savedData;\n debug(itemData);\n if (savedData = root.save(itemData)) {\n return true;\n }\n return false;\n };\n this.formDataToDataObjectAPICall = function () {\n var data = new FormData(document.querySelector('.addressModal form'));\n var formJSON = Object.fromEntries(data.entries());\n /*Multiselect or checkbox to array:\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n */\n $.each(formJSON, function (item, value) {\n debug($.lcFirst(item.replace('address', '')));\n formJSON[$.lcFirst(item.replace('address', ''))] = 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 return formJSON;\n };\n this.construct(options, itemData);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZGRyZXNzUG9wdXAuanMiLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsWUFBWSxHQUFHLFVBQVVDLE9BQU8sRUFBQ0MsUUFBUSxFQUFFO0VBRTlDO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUMsSUFBSSxHQUFHO0lBQ1BDLE1BQU0sRUFBRSxLQUFLO0lBQ2JDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFBLEVBQWMsQ0FDekIsQ0FBQztJQUNEQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFjLENBQ3JCO0VBQ0osQ0FBQztFQUNELElBQUlDLElBQUksR0FBRyxDQUFDLENBQUM7RUFDYixJQUFJQyxJQUFJLEdBQUcsSUFBSTtFQUNmO0FBQ0o7QUFDQTtFQUNJLElBQUksQ0FBQ0MsU0FBUyxHQUFHLFVBQVVULE9BQU8sRUFBQ0MsUUFBUSxFQUFFO0lBQ3pDUyxPQUFPLENBQUNDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQztFQUM5QyxDQUFDO0VBRUQsSUFBSSxDQUFDQyxJQUFJLEdBQUcsVUFBVVosT0FBTyxFQUFDQyxRQUFRLEVBQUU7SUFDcENTLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ25DRSxDQUFDLENBQUNDLE1BQU0sQ0FBQ1osSUFBSSxFQUFFRixPQUFPLENBQUM7SUFDdkJhLENBQUMsQ0FBQ0MsTUFBTSxDQUFDUCxJQUFJLEVBQUVOLFFBQVEsQ0FBQztJQUN4Qk8sSUFBSSxDQUFDTyxlQUFlLENBQUMsQ0FBQztFQUMxQixDQUFDO0VBRUQsSUFBSSxDQUFDQyxTQUFTLEdBQUMsWUFBVztJQUN0QlQsSUFBSSxHQUFDLENBQUMsQ0FBQztJQUNQQyxJQUFJLENBQUNTLFVBQVUsQ0FBQyxDQUFDO0VBQ3JCLENBQUM7RUFFRCxJQUFJLENBQUNDLE9BQU8sR0FBQyxVQUFVakIsUUFBUSxFQUFDO0lBQzVCWSxDQUFDLENBQUNDLE1BQU0sQ0FB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QUFRO0VBQ25CLENBQUM7RUFFRCxJQUFJLENBQUN6RCxTQUFTLENBQUNULE9BQU8sRUFBQ0MsUUFBUSxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9hZGRyZXNzUG9wdXAuanM/MGZhNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuQWRkcmVzc1BvcFVwID0gZnVuY3Rpb24gKG9wdGlvbnMsaXRlbURhdGEpIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGFycmF5OiBbXSxcclxuICAgICAgICBvbkFmdGVyU2F2ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgbGV0IGRhdGEgPSB7fTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLGl0ZW1EYXRhKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJyBBZGRyZXNzIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucyxpdGVtRGF0YSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgQWRkcmVzcyAgbml0IGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgICQuZXh0ZW5kKGRhdGEsIGl0ZW1EYXRhKTtcclxuICAgICAgICByb290LmJpbmRDbGlja0FjdGlvbigpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNsZWFyRGF0YT1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkYXRhPXt9O1xyXG4gICAgICAgIHJvb3QucmVuZGVyRm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0RGF0YT1mdW5jdGlvbiAoaXRlbURhdGEpe1xyXG4gICAgICAgICQuZXh0ZW5kKGRhdGEsIGl0ZW1EYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3c9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoJy5hZGRyZXNzTW9kYWwnKS5tb2RhbCgpLnNob3coKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZvcm09ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NNb2RhbCBpbnB1dCcpLnZhbCgnJyk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NNb2RhbCB0ZXh0YXJlYScpLnZhbCgnJyk7XHJcbiAgICAgICAgJC5lYWNoKGRhdGEsZnVuY3Rpb24gKGtleSx2YWx1ZSkge1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2tleTonK2tleSsnIHZhbHVlOicrdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJy5hZGRyZXNzTW9kYWwnKycgKltuYW1lPWNvbnRhY3QnKyQudWNGaXJzdChrZXkpKyddJyk7XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICQoJy5hZGRyZXNzTW9kYWwnKycgKltuYW1lPWFkZHJlc3MnKyQudWNGaXJzdChrZXkpKyddJykudmFsKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhPWZ1bmN0aW9uIChpZCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2xvYWRpbmcgaWQ6JytpZCk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NNb2RhbCAuc3Bpbm5lckRpdicpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAkKCcuYWRkcmVzc01vZGFsIC5hZGRyZXNzTW9kYWxGb3JtJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQoJy5hZGRyZXNzTW9kYWwnKS5tb2RhbCgpLnNob3coKTtcclxuICAgICAgICBsZXQgdXJsPUFQUC5nZXRPcHRzKClbXCJVcmxcIl1bXCJhZGRyZXNzUG9wdXBcIl1bJ3Nob3cnXTtcclxuICAgICAgICB1cmw9dXJsLnJlcGxhY2VBbGwoJyppZConLGlkKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiBBUFAuZ2V0QXBpVG9rZW4oKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZXREYXRhKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5yZW5kZXJGb3JtKCk7XHJcbiAgICAgICAgICAgICAgICAkKCcuc3Bpbm5lckRpdicpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICQoJy5hZGRyZXNzTW9kYWxGb3JtJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGhyLnJlc3BvbnNlSlNPTi5lcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoeGhyLnJlc3BvbnNlSlNPTi5lcnJvcnMpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnN0YXR1cz09NDA0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKFt7J2RldGFpbCc6J05pbmNzIGlseWVuIGVsZW0uJ31dKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKFt7J2RldGFpbCc6J8OBbHRhbMOhbm9zIGhpYmEuJ31dKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKCcuYWRkcmVzc01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgIGxldCBjb250YWN0RGF0YT17XHJcbiAgICAgICAgICAgIGlkOjc2LFxyXG4gICAgICAgICAgICBuYW1lOidNaWtzw7Nuw6kgQm9yYsOpbHkgRXJ6c8OpYmV0JyxcclxuICAgICAgICAgICAgZW1haWw6J3N6YW1sYXphczFAZnVua2Npby5odScsXHJcbiAgICAgICAgICAgIHBob25lOicrMzYyMDM0MDc1MDAnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByb290LnNldERhdGEoY29udGFjdERhdGEpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyRm9ybSgpO1xyXG4gICAgICAgICQoJy5zcGlubmVyRGl2JykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQoJy5hZGRyZXNzTW9kYWxGb3JtJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldE9wdHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJpbmRDbGlja0FjdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKCcuYWRkcmVzc01vZGFsIC5idG4nKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NNb2RhbCAuYnV0dG9uQ2xvc2UnKS5iaW5kKCdjbGljaycsIHJvb3QuY2xpY2tBY3Rpb25CdXR0b25DbG9zZSk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NNb2RhbCAuYnV0dG9uU2F2ZScpLmJpbmQoJ2NsaWNrJywgcm9vdC5jbGlja0FjdGlvbkJ1dHRvblNhdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tBY3Rpb25CdXR0b25DbG9zZSA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGljayBjbG9zZScpO1xyXG4gICAgICAgIE9wdHMub25DbG9zZShldmVudCwgcm9vdC5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuc2F2ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgbGV0IGZvcm0gPSAkKCcuYWRkcmVzc01vZGFsIGZvcm0nKTtcclxuICAgICAgICBsZXQgdXJsPWZvcm0uYXR0cignYWN0aW9uJyk7XHJcbiAgICAgICAgbGV0IGFqYXhUeXBlPSdQT1NUJztcclxuICAgICAgICBpZihkYXRhLmlkKXtcclxuICAgICAgICAgICAgdXJsPUFQUC5nZXRPcHRzKClbXCJVcmxcIl1bXCJhZGRyZXNzUG9wdXBcIl1bJ3VwZGF0ZSddO1xyXG4gICAgICAgICAgICB1cmw9dXJsLnJlcGxhY2VBbGwoJyppZConLGRhdGEuaWQpO1xyXG4gICAgICAgICAgICBhamF4VHlwZT0nUFVUJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRhdGEuc3RhdHVzKXtcclxuICAgICAgICAgICAgZGF0YS5zdGF0dXM9QVBQLmdldE9wdHMoKVtcImFkZHJlc3NQb3B1cFwiXVsnZGVmYXVsdFN0YXR1cyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWJ1ZygnISEhIVVSTCEhISEhICcrdXJsKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGU6IGFqYXhUeXBlLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogQVBQLmdldEFwaVRva2VuKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIE9wdHMub25BZnRlclNhdmUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAkKCcuYWRkcmVzc01vZGFsJykubW9kYWwoJ3RvZ2dsZScpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGhyLnJlc3BvbnNlSlNPTi5lcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoeGhyLnJlc3BvbnNlSlNPTi5lcnJvcnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja0FjdGlvbkJ1dHRvblNhdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnY2xpY2sgc2F2ZScpO1xyXG4gICAgICAgIGxldCBpdGVtRGF0YSA9IHJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCksIHNhdmVkRGF0YTtcclxuICAgICAgICBkZWJ1ZyhpdGVtRGF0YSk7XHJcbiAgICAgICAgaWYoc2F2ZWREYXRhPXJvb3Quc2F2ZShpdGVtRGF0YSkpe1xyXG4gICAgICAgICAgICByZXR1cm4gIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZGRyZXNzTW9kYWwgZm9ybScpKTtcclxuICAgICAgICBsZXQgZm9ybUpTT04gPSBPYmplY3QuZnJvbUVudHJpZXMoZGF0YS5lbnRyaWVzKCkpO1xyXG4gICAgICAgIC8qTXVsdGlzZWxlY3Qgb3IgY2hlY2tib3ggdG8gYXJyYXk6XHJcbiAgICAgICAgZm9ybUpTT04ubXVsdGlzZWxlY3ROYW1lID0gZGF0YS5nZXRBbGwoJ211bHRpc2VsZWN0TmFtZScpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgJC5lYWNoKGZvcm1KU09OLCBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgZGVidWcoJC5sY0ZpcnN0KGl0ZW0ucmVwbGFjZSgnYWRkcmVzcycsICcnKSkpO1xyXG4gICAgICAgICAgICBmb3JtSlNPTlskLmxjRmlyc3QoaXRlbS5yZXBsYWNlKCdhZGRyZXNzJywgJycpKV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgZGVsZXRlIGZvcm1KU09OW2l0ZW1dO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGZvcm1KU09OLnBob25lKXtcclxuICAgICAgICAgICAgZm9ybUpTT04ucGhvbmU9Zm9ybUpTT04ucGhvbmUucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihmb3JtSlNPTi5lbWFpbCl7XHJcbiAgICAgICAgICAgIGZvcm1KU09OLmVtYWlsPWZvcm1KU09OLmVtYWlsLnJlcGxhY2VBbGwoJ18nLCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZvcm1KU09OO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsaXRlbURhdGEpO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJBZGRyZXNzUG9wVXAiLCJvcHRpb25zIiwiaXRlbURhdGEiLCJPcHRzIiwiYWN0aXZlIiwiYXJyYXkiLCJvbkFmdGVyU2F2ZSIsIm9uQ2xvc2UiLCJkYXRhIiwicm9vdCIsImNvbnN0cnVjdCIsImNvbnNvbGUiLCJsb2ciLCJpbml0IiwiJCIsImV4dGVuZCIsImJpbmRDbGlja0FjdGlvbiIsImNsZWFyRGF0YSIsInJlbmRlckZvcm0iLCJzZXREYXRhIiwic2hvdyIsIm1vZGFsIiwidmFsIiwiZWFjaCIsImtleSIsInZhbHVlIiwidWNGaXJzdCIsImxvYWREYXRhIiwiaWQiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwidXJsIiwiQVBQIiwiZ2V0T3B0cyIsInJlcGxhY2VBbGwiLCJhamF4IiwidHlwZSIsImhlYWRlcnMiLCJnZXRBcGlUb2tlbiIsInN1Y2Nlc3MiLCJlcnJvciIsInhociIsImFqYXhPcHRpb25zIiwidGhyb3duRXJyb3IiLCJyZXNwb25zZUpTT04iLCJlcnJvcnMiLCJhamF4RXJyb3JGaWVsZEhhbmRsZXIiLCJzdGF0dXMiLCJjb250YWN0RGF0YSIsIm5hbWUiLCJlbWFpbCIsInBob25lIiwidW5iaW5kIiwiYmluZCIsImNsaWNrQWN0aW9uQnV0dG9uQ2xvc2UiLCJjbGlja0FjdGlvbkJ1dHRvblNhdmUiLCJldmVudCIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsInNhdmUiLCJmb3JtIiwiYXR0ciIsImFqYXhUeXBlIiwiZGVidWciLCJzYXZlZERhdGEiLCJGb3JtRGF0YSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImZvcm1KU09OIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiaXRlbSIsImxjRmlyc3QiLCJyZXBsYWNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/addressPopup.js\n\n}"); - -/***/ }, - -/***/ "./resources/js/components/contactPopup.js" -/*!*************************************************!*\ - !*** ./resources/js/components/contactPopup.js ***! - \*************************************************/ -() { - -eval("{window.ContactPopUp = function (options, itemData) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n active: false,\n array: [],\n onAfterSave: function onAfterSave() {},\n onClose: function onClose() {}\n };\n var data = {};\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options, itemData) {\n console.log(' ContactPopUp constructor called');\n };\n this.init = function (options, itemData) {\n console.log(' ContactPopUp nit called');\n $.extend(Opts, options);\n $.extend(data, itemData);\n root.bindClickAction();\n $(\"select.contactType\").select2({\n maximumSelectionLength: 1\n });\n };\n this.clearData = function () {\n data = {};\n root.renderForm();\n };\n this.setData = function (itemData) {\n $.extend(data, itemData);\n };\n this.show = function () {\n $('.contactModal').modal().show();\n };\n this.renderForm = function () {\n $('.contactModal input').val('');\n $('.contactModal textarea').val('');\n $.each(data, function (key, value) {\n /*\r\n console.log('key:'+key+' value:'+value);\r\n console.log('.contactModal'+' *[name=contact'+$.ucFirst(key)+']');\r\n */\n $('.contactModal' + ' *[name=contact' + $.ucFirst(key) + ']').val(value);\n });\n if (data.type === undefined || data.type === null) {\n $(\"select.contactType\").select2().val();\n } else {\n $(\"select.contactType\").select2().val(data.type.split(','));\n }\n $(\"select.contactType\").select2().trigger('change');\n };\n this.loadData = function (contactId) {\n console.log('loading id:' + contactId);\n $('.contactModal .spinnerDiv').removeClass('d-none');\n $('.contactModal .contactModalForm').addClass('d-none');\n $('.contactModal').modal().show();\n var url = APP.getOpts()[\"Url\"][\"contactPopup\"]['show'];\n url = url.replaceAll('*contactId*', contactId);\n $.ajax({\n url: url,\n type: 'GET',\n headers: {\n 'X-CSRF-TOKEN': APP.getApiToken()\n },\n success: function success(data) {\n root.setData(data);\n root.renderForm();\n $('.spinnerDiv').addClass('d-none');\n $('.contactModalForm').removeClass('d-none');\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n if (xhr.responseJSON.errors) {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n } else {\n if (xhr.status == 404) {\n ajaxErrorFieldHandler([{\n 'detail': 'Nincs ilyen elem.'\n }]);\n } else {\n ajaxErrorFieldHandler([{\n 'detail': 'Általános hiba.'\n }]);\n }\n }\n $('.contactModal').modal('hide');\n }\n });\n return;\n // removed by dead control flow\n var contactData; \n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n };\n this.getOpts = function () {\n return Opts;\n };\n this.bindClickAction = function () {\n $('.contactModal .btn').unbind('click');\n $('.contactModal .buttonClose').bind('click', root.clickActionButtonClose);\n $('.contactModal .buttonSave').bind('click', root.clickActionButtonSave);\n };\n this.clickActionButtonClose = function (event) {\n console.log('click close');\n Opts.onClose(event, root.formDataToDataObjectAPICall());\n };\n this.saveContact = function (contactData) {\n var form = $('.contactModal form');\n var url = form.attr('action');\n var ajaxType = 'POST';\n if (contactData.id) {\n url = APP.getOpts()[\"Url\"][\"contactPopup\"]['update'];\n\n //'{{route(\"admin.contact.update\",\"*contactId*\")}}';\n url = url.replaceAll('*contactId*', contactData.id);\n ajaxType = 'PUT';\n }\n if (!contactData.status) {\n contactData.status = APP.getOpts()[\"contactPopup\"]['defaultStatus'];\n }\n $.ajax({\n url: url,\n type: ajaxType,\n headers: {\n 'X-CSRF-TOKEN': APP.getApiToken()\n },\n data: contactData,\n success: function success(data) {\n Opts.onAfterSave(data);\n $('.contactModal').modal('toggle');\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n if (xhr.responseJSON.errors) {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n }\n }\n });\n return false;\n };\n this.clickActionButtonSave = function (event) {\n console.log('click save');\n var contactData = root.formDataToDataObjectAPICall(),\n savedData;\n if (savedData = root.saveContact(contactData)) {\n Opts.onAfterSave(event, contactData);\n $('.contactModal').modal('toggle');\n return true;\n }\n return false;\n };\n this.formDataToDataObjectAPICall = function () {\n var data = new FormData(document.querySelector('.contactModal form'));\n var formJSON = Object.fromEntries(data.entries());\n /*Multiselect or checkbox to array:\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n */\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 formJSON.type = $(\"select.contactType\").select2().val();\n return formJSON;\n };\n this.construct(options, itemData);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9jb250YWN0UG9wdXAuanMiLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsWUFBWSxHQUFHLFVBQVVDLE9BQU8sRUFBQ0MsUUFBUSxFQUFFO0VBRTlDO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUMsSUFBSSxHQUFHO0lBQ1BDLE1BQU0sRUFBRSxLQUFLO0lBQ2JDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFBLEVBQWMsQ0FDekIsQ0FBQztJQUNEQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFjLENBQ3JCO0VBQ0osQ0FBQztFQUNELElBQUlDLElBQUksR0FBRyxDQUFDLENBQUM7RUFDYixJQUFJQyxJQUFJLEdBQUcsSUFBSTtFQUNmO0FBQ0o7QUFDQTtFQUNJLElBQUksQ0FBQ0MsU0FBUyxHQUFHLFVBQVVULE9BQU8sRUFBQ0MsUUFBUSxFQUFFO0lBQ3pDUyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQztFQUNuRCxDQUFDO0VBRUQsSUFBSSxDQUFDQyxJQUFJLEdBQUcsVUFBVVosT0FBTyxFQUFDQyxRQUFRLEVBQUU7SUFDcENTLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0lBQ3ZDRSxDQUFDLENBQUNDLE1BQU0sQ0FBQ1osSUFBSSxFQUFFRixPQUFPLENBQUM7SUFDdkJhLENBQUMsQ0FBQ0MsTUFBTSxDQUFDUCxJQUFJLEVBQUVOLFFBQVEsQ0FBQztJQUN4Qk8sSUFBSSxDQUFDTyxlQUFlLENBQUMsQ0FBQztJQUN0QkYsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUNHLE9BQU8sQ0FBQztNQUM1QkMsc0JBQXNCLEVBQUU7SUFDNUIsQ0FBQyxDQUFDO0VBRU4sQ0FBQztFQUVELElBQUksQ0FBQ0MsU0FBUyxHQUFDLFlBQVc7SUFDdEJYLElBQUksR0FBQyxDQUFDLENBQUM7SUFDUEMsSUFBSSxDQUFDVyxVQUFVLENBQUMsQ0FBQztF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QUFDK0QsT0FBTyxDQUFDRCxJQUFJLENBQUNFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHbkQsS0FBSztNQUN4RCxPQUFPNkMsUUFBUSxDQUFDSSxJQUFJLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBQ0YsSUFBR0osUUFBUSxDQUFDZixLQUFLLEVBQUM7TUFDZGUsUUFBUSxDQUFDZixLQUFLLEdBQUNlLFFBQVEsQ0FBQ2YsS0FBSyxDQUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUM7SUFDcEQ7SUFDQSxJQUFHZ0MsUUFBUSxDQUFDaEIsS0FBSyxFQUFDO01BQ2RnQixRQUFRLENBQUNoQixLQUFLLEdBQUNnQixRQUFRLENBQUNoQixLQUFLLENBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQztJQUNwRDtJQUNBZ0MsUUFBUSxDQUFDM0MsSUFBSSxHQUFDZixDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQ08sR0FBRyxDQUFDLENBQUM7SUFDckQsT0FBT2dELFFBQVE7RUFDbkIsQ0FBQztFQUVELElBQUksQ0FBQzlELFNBQVMsQ0FBQ1QsT0FBTyxFQUFDQyxRQUFRLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL2NvbnRhY3RQb3B1cC5qcz9kZGNjIl0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5Db250YWN0UG9wVXAgPSBmdW5jdGlvbiAob3B0aW9ucyxpdGVtRGF0YSkge1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgYXJyYXk6IFtdLFxyXG4gICAgICAgIG9uQWZ0ZXJTYXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbiAgICBsZXQgZGF0YSA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsaXRlbURhdGEpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnIENvbnRhY3RQb3BVcCBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMsaXRlbURhdGEpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnIENvbnRhY3RQb3BVcCBuaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgJC5leHRlbmQoZGF0YSwgaXRlbURhdGEpO1xyXG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgJChcInNlbGVjdC5jb250YWN0VHlwZVwiKS5zZWxlY3QyKHtcclxuICAgICAgICAgICAgbWF4aW11bVNlbGVjdGlvbkxlbmd0aDogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY2xlYXJEYXRhPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGRhdGE9e307XHJcbiAgICAgICAgcm9vdC5yZW5kZXJGb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXREYXRhPWZ1bmN0aW9uIChpdGVtRGF0YSl7XHJcbiAgICAgICAgJC5leHRlbmQoZGF0YSwgaXRlbURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2hvdz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RNb2RhbCcpLm1vZGFsKCkuc2hvdygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRm9ybT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuY29udGFjdE1vZGFsIGlucHV0JykudmFsKCcnKTtcclxuICAgICAgICAkKCcuY29udGFjdE1vZGFsIHRleHRhcmVhJykudmFsKCcnKTtcclxuICAgICAgICAkLmVhY2goZGF0YSxmdW5jdGlvbiAoa2V5LHZhbHVlKSB7XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygna2V5Oicra2V5KycgdmFsdWU6Jyt2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLmNvbnRhY3RNb2RhbCcrJyAqW25hbWU9Y29udGFjdCcrJC51Y0ZpcnN0KGtleSkrJ10nKTtcclxuICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RNb2RhbCcrJyAqW25hbWU9Y29udGFjdCcrJC51Y0ZpcnN0KGtleSkrJ10nKS52YWwodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGRhdGEudHlwZSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEudHlwZT09PW51bGwpe1xyXG4gICAgICAgICAgICAkKFwic2VsZWN0LmNvbnRhY3RUeXBlXCIpLnNlbGVjdDIoKS52YWwoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgJChcInNlbGVjdC5jb250YWN0VHlwZVwiKS5zZWxlY3QyKCkudmFsKGRhdGEudHlwZS5zcGxpdCgnLCcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoXCJzZWxlY3QuY29udGFjdFR5cGVcIikuc2VsZWN0MigpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhPWZ1bmN0aW9uIChjb250YWN0SWQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdsb2FkaW5nIGlkOicrY29udGFjdElkKTtcclxuICAgICAgICAkKCcuY29udGFjdE1vZGFsIC5zcGlubmVyRGl2JykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQoJy5jb250YWN0TW9kYWwgLmNvbnRhY3RNb2RhbEZvcm0nKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RNb2RhbCcpLm1vZGFsKCkuc2hvdygpO1xyXG4gICAgICAgIGxldCB1cmw9QVBQLmdldE9wdHMoKVtcIlVybFwiXVtcImNvbnRhY3RQb3B1cFwiXVsnc2hvdyddO1xyXG4gICAgICAgIHVybD11cmwucmVwbGFjZUFsbCgnKmNvbnRhY3RJZConLGNvbnRhY3RJZCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogQVBQLmdldEFwaVRva2VuKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAgICAgICAgIHJvb3QucmVuZGVyRm9ybSgpO1xyXG4gICAgICAgICAgICAgICAgJCgnLnNwaW5uZXJEaXYnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFjdE1vZGFsRm9ybScpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHhoci5yZXNwb25zZUpTT04uZXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKHhoci5yZXNwb25zZUpTT04uZXJyb3JzKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHhoci5zdGF0dXM9PTQwNCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihbeydkZXRhaWwnOidOaW5jcyBpbHllbiBlbGVtLid9XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihbeydkZXRhaWwnOifDgWx0YWzDoW5vcyBoaWJhLid9XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJCgnLmNvbnRhY3RNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICBsZXQgY29udGFjdERhdGE9e1xyXG4gICAgICAgICAgICBpZDo3NixcclxuICAgICAgICAgICAgbmFtZTonTWlrc8OzbsOpIEJvcmLDqWx5IEVyenPDqWJldCcsXHJcbiAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXMxQGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICBwaG9uZTonKzM2MjAzNDA3NTAwJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcm9vdC5zZXREYXRhKGNvbnRhY3REYXRhKTtcclxuICAgICAgICByb290LnJlbmRlckZvcm0oKTtcclxuICAgICAgICAkKCcuc3Bpbm5lckRpdicpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAkKCcuY29udGFjdE1vZGFsRm9ybScpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iaW5kQ2xpY2tBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RNb2RhbCAuYnRuJykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5jb250YWN0TW9kYWwgLmJ1dHRvbkNsb3NlJykuYmluZCgnY2xpY2snLCByb290LmNsaWNrQWN0aW9uQnV0dG9uQ2xvc2UpO1xyXG4gICAgICAgICQoJy5jb250YWN0TW9kYWwgLmJ1dHRvblNhdmUnKS5iaW5kKCdjbGljaycsIHJvb3QuY2xpY2tBY3Rpb25CdXR0b25TYXZlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrQWN0aW9uQnV0dG9uQ2xvc2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnY2xpY2sgY2xvc2UnKTtcclxuICAgICAgICBPcHRzLm9uQ2xvc2UoZXZlbnQsIHJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnNhdmVDb250YWN0ID0gZnVuY3Rpb24gKGNvbnRhY3REYXRhKSB7XHJcbiAgICAgICAgbGV0IGZvcm0gPSAkKCcuY29udGFjdE1vZGFsIGZvcm0nKTtcclxuICAgICAgICBsZXQgdXJsPWZvcm0uYXR0cignYWN0aW9uJyk7XHJcbiAgICAgICAgbGV0IGFqYXhUeXBlPSdQT1NUJztcclxuICAgICAgICBpZihjb250YWN0RGF0YS5pZCl7XHJcbiAgICAgICAgICAgIHVybD1BUFAuZ2V0T3B0cygpW1wiVXJsXCJdW1wiY29udGFjdFBvcHVwXCJdWyd1cGRhdGUnXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyd7e3JvdXRlKFwiYWRtaW4uY29udGFjdC51cGRhdGVcIixcIipjb250YWN0SWQqXCIpfX0nO1xyXG4gICAgICAgICAgICB1cmw9dXJsLnJlcGxhY2VBbGwoJypjb250YWN0SWQqJyxjb250YWN0RGF0YS5pZCk7XHJcbiAgICAgICAgICAgIGFqYXhUeXBlPSdQVVQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighY29udGFjdERhdGEuc3RhdHVzKXtcclxuICAgICAgICAgICAgY29udGFjdERhdGEuc3RhdHVzPUFQUC5nZXRPcHRzKClbXCJjb250YWN0UG9wdXBcIl1bJ2RlZmF1bHRTdGF0dXMnXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICB0eXBlOiBhamF4VHlwZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IEFQUC5nZXRBcGlUb2tlbigpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRhdGE6IGNvbnRhY3REYXRhLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgT3B0cy5vbkFmdGVyU2F2ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICQoJy5jb250YWN0TW9kYWwnKS5tb2RhbCgndG9nZ2xlJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyLCBhamF4T3B0aW9ucywgdGhyb3duRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VKU09OLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcih4aHIucmVzcG9uc2VKU09OLmVycm9ycyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrQWN0aW9uQnV0dG9uU2F2ZSA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGljayBzYXZlJyk7XHJcbiAgICAgICAgbGV0IGNvbnRhY3REYXRhID0gcm9vdC5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoKSwgc2F2ZWREYXRhO1xyXG4gICAgICAgIGlmKHNhdmVkRGF0YT1yb290LnNhdmVDb250YWN0KGNvbnRhY3REYXRhKSl7XHJcbiAgICAgICAgICAgIE9wdHMub25BZnRlclNhdmUoZXZlbnQsIGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RNb2RhbCcpLm1vZGFsKCd0b2dnbGUnKTtcclxuICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGFjdE1vZGFsIGZvcm0nKSk7XHJcbiAgICAgICAgbGV0IGZvcm1KU09OID0gT2JqZWN0LmZyb21FbnRyaWVzKGRhdGEuZW50cmllcygpKTtcclxuICAgICAgICAvKk11bHRpc2VsZWN0IG9yIGNoZWNrYm94IHRvIGFycmF5OlxyXG4gICAgICAgIGZvcm1KU09OLm11bHRpc2VsZWN0TmFtZSA9IGRhdGEuZ2V0QWxsKCdtdWx0aXNlbGVjdE5hbWUnKTtcclxuICAgICAgICAqL1xyXG4gICAgICAgICQuZWFjaChmb3JtSlNPTiwgZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1KU09OWyQubGNGaXJzdChpdGVtLnJlcGxhY2UoJ2NvbnRhY3QnLCAnJykpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgZm9ybUpTT05baXRlbV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoZm9ybUpTT04ucGhvbmUpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5waG9uZT1mb3JtSlNPTi5waG9uZS5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZvcm1KU09OLmVtYWlsKXtcclxuICAgICAgICAgICAgZm9ybUpTT04uZW1haWw9Zm9ybUpTT04uZW1haWwucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtSlNPTi50eXBlPSQoXCJzZWxlY3QuY29udGFjdFR5cGVcIikuc2VsZWN0MigpLnZhbCgpO1xyXG4gICAgICAgIHJldHVybiBmb3JtSlNPTjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbnN0cnVjdChvcHRpb25zLGl0ZW1EYXRhKTtcclxufVxyXG4iXSwibmFtZXMiOlsid2luZG93IiwiQ29udGFjdFBvcFVwIiwib3B0aW9ucyIsIml0ZW1EYXRhIiwiT3B0cyIsImFjdGl2ZSIsImFycmF5Iiwib25BZnRlclNhdmUiLCJvbkNsb3NlIiwiZGF0YSIsInJvb3QiLCJjb25zdHJ1Y3QiLCJjb25zb2xlIiwibG9nIiwiaW5pdCIsIiQiLCJleHRlbmQiLCJiaW5kQ2xpY2tBY3Rpb24iLCJzZWxlY3QyIiwibWF4aW11bVNlbGVjdGlvbkxlbmd0aCIsImNsZWFyRGF0YSIsInJlbmRlckZvcm0iLCJzZXREYXRhIiwic2hvdyIsIm1vZGFsIiwidmFsIiwiZWFjaCIsImtleSIsInZhbHVlIiwidWNGaXJzdCIsInR5cGUiLCJ1bmRlZmluZWQiLCJzcGxpdCIsInRyaWdnZXIiLCJsb2FkRGF0YSIsImNvbnRhY3RJZCIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJ1cmwiLCJBUFAiLCJnZXRPcHRzIiwicmVwbGFjZUFsbCIsImFqYXgiLCJoZWFkZXJzIiwiZ2V0QXBpVG9rZW4iLCJzdWNjZXNzIiwiZXJyb3IiLCJ4aHIiLCJhamF4T3B0aW9ucyIsInRocm93bkVycm9yIiwicmVzcG9uc2VKU09OIiwiZXJyb3JzIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwic3RhdHVzIiwiY29udGFjdERhdGEiLCJpZCIsIm5hbWUiLCJlbWFpbCIsInBob25lIiwidW5iaW5kIiwiYmluZCIsImNsaWNrQWN0aW9uQnV0dG9uQ2xvc2UiLCJjbGlja0FjdGlvbkJ1dHRvblNhdmUiLCJldmVudCIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsInNhdmVDb250YWN0IiwiZm9ybSIsImF0dHIiLCJhamF4VHlwZSIsInNhdmVkRGF0YSIsIkZvcm1EYXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZm9ybUpTT04iLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJpdGVtIiwibGNGaXJzdCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/contactPopup.js\n\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/components/addressPopup.js"](); -/******/ var __webpack_exports__ = {}; -/******/ __webpack_modules__["./resources/js/components/contactPopup.js"](); -/******/ -/******/ })() -; \ No newline at end of file +window.AddressPopUp=function(e,t){var o={active:!1,array:[],onAfterSave:function onAfterSave(){},onClose:function onClose(){}},a={},n=this;this.construct=function(e,t){console.log(" Address constructor called")},this.init=function(e,t){console.log(" Address nit called"),$.extend(o,e),$.extend(a,t),n.bindClickAction()},this.clearData=function(){a={},n.renderForm()},this.setData=function(e){$.extend(a,e)},this.show=function(){$(".addressModal").modal().show()},this.renderForm=function(){$(".addressModal input").val(""),$(".addressModal textarea").val(""),$.each(a,function(e,t){$(".addressModal *[name=address"+$.ucFirst(e)+"]").val(t)})},this.loadData=function(e){console.log("loading id:"+e),$(".addressModal .spinnerDiv").removeClass("d-none"),$(".addressModal .addressModalForm").addClass("d-none"),$(".addressModal").modal().show();var t=APP.getOpts().Url.addressPopup.show;t=t.replaceAll("*id*",e),$.ajax({url:t,type:"GET",headers:{"X-CSRF-TOKEN":APP.getApiToken()},success:function success(e){n.setData(e),n.renderForm(),$(".spinnerDiv").addClass("d-none"),$(".addressModalForm").removeClass("d-none")},error:function error(e,t,o){e.responseJSON.errors?ajaxErrorFieldHandler(e.responseJSON.errors):404==e.status?ajaxErrorFieldHandler([{detail:"Nincs ilyen elem."}]):ajaxErrorFieldHandler([{detail:"Általános hiba."}]),$(".addressModal").modal("hide")}})},this.getOpts=function(){return o},this.bindClickAction=function(){$(".addressModal .btn").unbind("click"),$(".addressModal .buttonClose").bind("click",n.clickActionButtonClose),$(".addressModal .buttonSave").bind("click",n.clickActionButtonSave)},this.clickActionButtonClose=function(e){console.log("click close"),o.onClose(e,n.formDataToDataObjectAPICall())},this.save=function(e){var t=$(".addressModal form").attr("action"),a="POST";return e.id&&(t=(t=APP.getOpts().Url.addressPopup.update).replaceAll("*id*",e.id),a="PUT"),e.status||(e.status=APP.getOpts().addressPopup.defaultStatus),debug("!!!!URL!!!!! "+t),$.ajax({url:t,type:a,headers:{"X-CSRF-TOKEN":APP.getApiToken()},data:e,success:function success(e){o.onAfterSave(e),$(".addressModal").modal("toggle")},error:function error(e,t,o){e.responseJSON.errors&&ajaxErrorFieldHandler(e.responseJSON.errors)}}),!1},this.clickActionButtonSave=function(e){console.log("click save");var t=n.formDataToDataObjectAPICall();return debug(t),!!n.save(t)},this.formDataToDataObjectAPICall=function(){var e=new FormData(document.querySelector(".addressModal form")),t=Object.fromEntries(e.entries());return $.each(t,function(e,o){debug($.lcFirst(e.replace("address",""))),t[$.lcFirst(e.replace("address",""))]=o,delete t[e]}),t.phone&&(t.phone=t.phone.replaceAll("_","")),t.email&&(t.email=t.email.replaceAll("_","")),t},this.construct(e,t)},window.ContactPopUp=function(e,t){var o={active:!1,array:[],onAfterSave:function onAfterSave(){},onClose:function onClose(){}},a={},n=this;this.construct=function(e,t){console.log(" ContactPopUp constructor called")},this.init=function(e,t){console.log(" ContactPopUp nit called"),$.extend(o,e),$.extend(a,t),n.bindClickAction(),$("select.contactType").select2({maximumSelectionLength:1})},this.clearData=function(){a={},n.renderForm()},this.setData=function(e){$.extend(a,e)},this.show=function(){$(".contactModal").modal().show()},this.renderForm=function(){$(".contactModal input").val(""),$(".contactModal textarea").val(""),$.each(a,function(e,t){$(".contactModal *[name=contact"+$.ucFirst(e)+"]").val(t)}),void 0===a.type||null===a.type?$("select.contactType").select2().val():$("select.contactType").select2().val(a.type.split(",")),$("select.contactType").select2().trigger("change")},this.loadData=function(e){console.log("loading id:"+e),$(".contactModal .spinnerDiv").removeClass("d-none"),$(".contactModal .contactModalForm").addClass("d-none"),$(".contactModal").modal().show();var t=APP.getOpts().Url.contactPopup.show;t=t.replaceAll("*contactId*",e),$.ajax({url:t,type:"GET",headers:{"X-CSRF-TOKEN":APP.getApiToken()},success:function success(e){n.setData(e),n.renderForm(),$(".spinnerDiv").addClass("d-none"),$(".contactModalForm").removeClass("d-none")},error:function error(e,t,o){e.responseJSON.errors?ajaxErrorFieldHandler(e.responseJSON.errors):404==e.status?ajaxErrorFieldHandler([{detail:"Nincs ilyen elem."}]):ajaxErrorFieldHandler([{detail:"Általános hiba."}]),$(".contactModal").modal("hide")}})},this.getOpts=function(){return o},this.bindClickAction=function(){$(".contactModal .btn").unbind("click"),$(".contactModal .buttonClose").bind("click",n.clickActionButtonClose),$(".contactModal .buttonSave").bind("click",n.clickActionButtonSave)},this.clickActionButtonClose=function(e){console.log("click close"),o.onClose(e,n.formDataToDataObjectAPICall())},this.saveContact=function(e){var t=$(".contactModal form").attr("action"),a="POST";return e.id&&(t=(t=APP.getOpts().Url.contactPopup.update).replaceAll("*contactId*",e.id),a="PUT"),e.status||(e.status=APP.getOpts().contactPopup.defaultStatus),$.ajax({url:t,type:a,headers:{"X-CSRF-TOKEN":APP.getApiToken()},data:e,success:function success(e){o.onAfterSave(e),$(".contactModal").modal("toggle")},error:function error(e,t,o){e.responseJSON.errors&&ajaxErrorFieldHandler(e.responseJSON.errors)}}),!1},this.clickActionButtonSave=function(e){console.log("click save");var t=n.formDataToDataObjectAPICall();return!!n.saveContact(t)&&(o.onAfterSave(e,t),$(".contactModal").modal("toggle"),!0)},this.formDataToDataObjectAPICall=function(){var e=new FormData(document.querySelector(".contactModal form")),t=Object.fromEntries(e.entries());return $.each(t,function(e,o){t[$.lcFirst(e.replace("contact",""))]=o,delete t[e]}),t.phone&&(t.phone=t.phone.replaceAll("_","")),t.email&&(t.email=t.email.replaceAll("_","")),t.type=$("select.contactType").select2().val(),t},this.construct(e,t)}; +//# sourceMappingURL=components.js.map \ No newline at end of file diff --git a/public/js/customize.js b/public/js/customize.js index a10dc38..3935c7b 100644 --- a/public/js/customize.js +++ b/public/js/customize.js @@ -8,14382 +8,8 @@ * * Date: 2023-08-28T13:37Z */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket trac-14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 - // Plus for old WebKit, typeof returns "function" for HTML collections - // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) - return typeof obj === "function" && typeof obj.nodeType !== "number" && - typeof obj.item !== "function"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var version = "3.7.1", - - rhtmlSuffix = /HTML$/i, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - - // Retrieve the text value of an array of DOM nodes - text: function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += jQuery.text( node ); - } - } - if ( nodeType === 1 || nodeType === 11 ) { - return elem.textContent; - } - if ( nodeType === 9 ) { - return elem.documentElement.textContent; - } - if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - isXMLDoc: function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Assume HTML when documentElement doesn't yet exist, such as inside - // document fragments. - return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), - function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); - } ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} -var pop = arr.pop; - - -var sort = arr.sort; - - -var splice = arr.splice; - - -var whitespace = "[\\x20\\t\\r\\n\\f]"; - - -var rtrimCSS = new RegExp( - "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", - "g" -); - - - - -// Note: an element does not contain itself -jQuery.contains = function( a, b ) { - var bup = b && b.parentNode; - - return a === bup || !!( bup && bup.nodeType === 1 && ( - - // Support: IE 9 - 11+ - // IE doesn't have `contains` on SVG. - a.contains ? - a.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); -}; - - - - -// CSS string/identifier serialization -// https://drafts.csswg.org/cssom/#common-serializing-idioms -var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; - -function fcssescape( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; -} - -jQuery.escapeSelector = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - - - - -var preferredDoc = document, - pushNative = push; - -( function() { - -var i, - Expr, - outermostContext, - sortInput, - hasDuplicate, - push = pushNative, - - // Local document vars - document, - documentElement, - documentIsHTML, - rbuggyQSA, - matches, - - // Instance-specific data - expando = jQuery.expando, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + - "loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + - whitespace + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - ID: new RegExp( "^#(" + identifier + ")" ), - CLASS: new RegExp( "^\\.(" + identifier + ")" ), - TAG: new RegExp( "^(" + identifier + "|[*])" ), - ATTR: new RegExp( "^" + attributes ), - PSEUDO: new RegExp( "^" + pseudos ), - CHILD: new RegExp( - "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - bool: new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - needsContext: new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - if ( nonHex ) { - - // Strip the backslash prefix from a non-hex escape sequence - return nonHex; - } - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - return high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // Used for iframes; see `setDocument`. - // Support: IE 9 - 11+, Edge 12 - 18+ - // Removing the function wrapper causes a "Permission Denied" - // error in IE/Edge. - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && nodeName( elem, "fieldset" ); - }, - { dir: "parentNode", next: "legend" } - ); - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android <=4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { - apply: function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - }, - call: function( target ) { - pushNative.apply( target, slice.call( arguments, 1 ) ); - } - }; -} - -function find( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE 9 only - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - push.call( results, elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE 9 only - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - find.contains( context, elem ) && - elem.id === m ) { - - push.call( results, elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when - // strict-comparing two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( newContext != context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = jQuery.escapeSelector( nid ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties - // (see https://github.com/jquery/sizzle/issues/157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by jQuery selector module - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - return nodeName( elem, "input" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && - elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11+ - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a jQuery selector context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [node] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -function setDocument( node ) { - var subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - documentElement = document.documentElement; - documentIsHTML = !jQuery.isXMLDoc( document ); - - // Support: iOS 7 only, IE 9 - 11+ - // Older browsers didn't support unprefixed `matches`. - matches = documentElement.matches || - documentElement.webkitMatchesSelector || - documentElement.msMatchesSelector; - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors - // (see trac-13936). - // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, - // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. - if ( documentElement.msMatchesSelector && - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 9 - 11+, Edge 12 - 18+ - subWindow.addEventListener( "unload", unloadHandler ); - } - - // Support: IE <10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - documentElement.appendChild( el ).id = jQuery.expando; - return !document.getElementsByName || - !document.getElementsByName( jQuery.expando ).length; - } ); - - // Support: IE 9 only - // Check to see if it's possible to do matchesSelector - // on a disconnected node. - support.disconnectedMatch = assert( function( el ) { - return matches.call( el, "*" ); - } ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // IE/Edge don't support the :scope pseudo-class. - support.scope = assert( function() { - return document.querySelectorAll( ":scope" ); - } ); - - // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only - // Make sure the `:has()` argument is parsed unforgivingly. - // We include `*` in the test to detect buggy implementations that are - // _selectively_ forgiving (specifically when the list includes at least - // one valid selector). - // Note that we treat complete lack of support for `:has()` as if it were - // spec-compliant support, which is fine because use of `:has()` in such - // environments will fail in the qSA path and fall back to jQuery traversal - // anyway. - support.cssHas = assert( function() { - try { - document.querySelector( ":has(*,:jqfake)" ); - return false; - } catch ( e ) { - return true; - } - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter.ID = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find.ID = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter.ID = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find.ID = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find.TAG = function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else { - return context.querySelectorAll( tag ); - } - }; - - // Class - Expr.find.CLASS = function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - rbuggyQSA = []; - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - documentElement.appendChild( el ).innerHTML = - "" + - ""; - - // Support: iOS <=7 - 8 only - // Boolean attributes and "value" are not treated correctly in some XML documents - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: iOS <=7 - 8 only - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: iOS 8 only - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ - // In some of the document kinds, these selectors wouldn't work natively. - // This is probably OK but for backwards compatibility we want to maintain - // handling them through jQuery traversal in jQuery 3.x. - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE 9 - 11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ - // In some of the document kinds, these selectors wouldn't work natively. - // This is probably OK but for backwards compatibility we want to maintain - // handling them through jQuery traversal in jQuery 3.x. - documentElement.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - } ); - - if ( !support.cssHas ) { - - // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ - // Our regular `try-catch` mechanism fails to detect natively-unsupported - // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) - // in browsers that parse the `:has()` argument as a forgiving selector list. - // https://drafts.csswg.org/selectors/#relational now requires the argument - // to be parsed unforgivingly, but browsers have not yet fully adjusted. - rbuggyQSA.push( ":has" ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a === document || a.ownerDocument == preferredDoc && - find.contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b === document || b.ownerDocument == preferredDoc && - find.contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - }; - - return document; -} - -find.matches = function( expr, elements ) { - return find( expr, null, null, elements ); -}; - -find.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return find( expr, document, null, [ elem ] ).length > 0; -}; - -find.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return jQuery.contains( context, elem ); -}; - - -find.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (see trac-13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - if ( val !== undefined ) { - return val; - } - - return elem.getAttribute( name ); -}; - -find.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -jQuery.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - // - // Support: Android <=4.0+ - // Testing for detecting duplicates is unpredictable so instead assume we can't - // depend on duplicate detection in all browsers without a stable sort. - hasDuplicate = !support.sortStable; - sortInput = !support.sortStable && slice.call( results, 0 ); - sort.call( results, sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - splice.call( results, duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -jQuery.fn.uniqueSort = function() { - return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); -}; - -Expr = jQuery.expr = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - ATTR: function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) - .replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - CHILD: function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - find.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) - ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - find.error( match[ 0 ] ); - } - - return match; - }, - - PSEUDO: function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr.CHILD.test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - TAG: function( nodeNameSelector ) { - var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return nodeName( elem, expectedNodeName ); - }; - }, - - CLASS: function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + ")" + className + - "(" + whitespace + "|$)" ) ) && - classCache( className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - ATTR: function( name, operator, check ) { - return function( elem ) { - var result = find.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - if ( operator === "=" ) { - return result === check; - } - if ( operator === "!=" ) { - return result !== check; - } - if ( operator === "^=" ) { - return check && result.indexOf( check ) === 0; - } - if ( operator === "*=" ) { - return check && result.indexOf( check ) > -1; - } - if ( operator === "$=" ) { - return check && result.slice( -check.length ) === check; - } - if ( operator === "~=" ) { - return ( " " + result.replace( rwhitespace, " " ) + " " ) - .indexOf( check ) > -1; - } - if ( operator === "|=" ) { - return result === check || result.slice( 0, check.length + 1 ) === check + "-"; - } - - return false; - }; - }, - - CHILD: function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - nodeName( node, name ) : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || ( parent[ expando ] = {} ); - cache = outerCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - cache = outerCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - nodeName( node, name ) : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - outerCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - PSEUDO: function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // https://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - find.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as jQuery does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - not: markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrimCSS, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element - // (see https://github.com/jquery/sizzle/issues/299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - has: markFunction( function( selector ) { - return function( elem ) { - return find( selector, elem ).length > 0; - }; - } ), - - contains: markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // https://www.w3.org/TR/selectors/#lang-pseudo - lang: markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - find.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - target: function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - root: function( elem ) { - return elem === documentElement; - }, - - focus: function( elem ) { - return elem === safeActiveElement() && - document.hasFocus() && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - enabled: createDisabledPseudo( false ), - disabled: createDisabledPseudo( true ), - - checked: function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - return ( nodeName( elem, "input" ) && !!elem.checked ) || - ( nodeName( elem, "option" ) && !!elem.selected ); - }, - - selected: function( elem ) { - - // Support: IE <=11+ - // Accessing the selectedIndex property - // forces the browser to treat the default option as - // selected when in an optgroup. - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - empty: function( elem ) { - - // https://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - parent: function( elem ) { - return !Expr.pseudos.empty( elem ); - }, - - // Element/input types - header: function( elem ) { - return rheader.test( elem.nodeName ); - }, - - input: function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - button: function( elem ) { - return nodeName( elem, "input" ) && elem.type === "button" || - nodeName( elem, "button" ); - }, - - text: function( elem ) { - var attr; - return nodeName( elem, "input" ) && elem.type === "text" && - - // Support: IE <10 only - // New HTML5 attribute values (e.g., "search") appear - // with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - first: createPositionalPseudo( function() { - return [ 0 ]; - } ), - - last: createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - even: createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - odd: createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - lt: createPositionalPseudo( function( matchIndexes, length, argument ) { - var i; - - if ( argument < 0 ) { - i = argument + length; - } else if ( argument > length ) { - i = length; - } else { - i = argument; - } - - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - gt: createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos.nth = Expr.pseudos.eq; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rleadingCombinator.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrimCSS, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - if ( parseOnly ) { - return soFar.length; - } - - return soFar ? - find.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - if ( skip && nodeName( elem, skip ) ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = outerCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - outerCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - find( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, matcherOut, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || - multipleContexts( selector || "*", - context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems; - - if ( matcher ) { - - // If we have a postFinder, or filtered seed, or non-seed postFilter - // or preexisting results, - matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results; - - // Find primary matches - matcher( matcherIn, matcherOut, context, xml ); - } else { - matcherOut = matcherIn; - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element - // (see https://github.com/jquery/sizzle/issues/299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrimCSS, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find.TAG( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: iOS <=7 - 9 only - // Tolerate NodeList properties (IE: "length"; Safari: ) matching - // elements by id. (see trac-14142) - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - push.call( results, elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - jQuery.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -function compile( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -} - -/** - * A low-level selection function that works with jQuery's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with jQuery selector compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find.ID( - token.matches[ 0 ].replace( runescape, funescape ), - context - ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && - testContext( context.parentNode ) || context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -} - -// One-time assignments - -// Support: Android <=4.0 - 4.1+ -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Initialize against the default document -setDocument(); - -// Support: Android <=4.0 - 4.1+ -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -jQuery.find = find; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.unique = jQuery.uniqueSort; - -// These have always been private, but they used to be documented as part of -// Sizzle so let's maintain them for now for backwards compatibility purposes. -find.compile = compile; -find.select = select; -find.setDocument = setDocument; -find.tokenize = tokenize; - -find.escape = jQuery.escapeSelector; -find.getText = jQuery.text; -find.isXML = jQuery.isXMLDoc; -find.selectors = jQuery.expr; -find.support = jQuery.support; -find.uniqueSort = jQuery.uniqueSort; - - /* eslint-enable */ - -} )(); - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (trac-9521) - // Strict HTML recognition (trac-11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to jQuery#find - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.error ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the error, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getErrorHook ) { - process.error = jQuery.Deferred.getErrorHook(); - - // The deprecated alias of the above. While the name suggests - // returning the stack, not an error instance, jQuery just passes - // it directly to `console.warn` so both will work; an instance - // just better cooperates with source maps. - } else if ( jQuery.Deferred.getStackHook ) { - process.error = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the primary Deferred - primary = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error -// captured before the async barrier to get the original error cause -// which may otherwise be hidden. -jQuery.Deferred.exceptionHook = function( error, asyncError ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, - error.stack, asyncError ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See trac-6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (trac-9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see trac-8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (trac-14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (trac-11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (trac-14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (trac-13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (trac-12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (trac-13208) - // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (trac-13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", true ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, isSetup ) { - - // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add - if ( !isSetup ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - if ( !saved ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - this[ type ](); - result = dataPriv.get( this, type ); - dataPriv.set( this, type, false ); - - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - - return result; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering - // the native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved ) { - - // ...and capture the result - dataPriv.set( this, type, jQuery.event.trigger( - saved[ 0 ], - saved.slice( 1 ), - this - ) ); - - // Abort handling of the native event by all jQuery handlers while allowing - // native handlers on the same element to run. On target, this is achieved - // by stopping immediate propagation just on the jQuery event. However, - // the native event is re-wrapped by a jQuery one on each level of the - // propagation so the only way to stop it for jQuery is to stop it for - // everyone via native `stopPropagation()`. This is not a problem for - // focus/blur which don't bubble, but it does also stop click on checkboxes - // and radios. We accept this limitation. - event.stopPropagation(); - event.isImmediatePropagationStopped = returnTrue; - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (trac-504, trac-13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - which: true -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - - function focusMappedHandler( nativeEvent ) { - if ( document.documentMode ) { - - // Support: IE 11+ - // Attach a single focusin/focusout handler on the document while someone wants - // focus/blur. This is because the former are synchronous in IE while the latter - // are async. In other browsers, all those handlers are invoked synchronously. - - // `handle` from private data would already wrap the event, but we need - // to change the `type` here. - var handle = dataPriv.get( this, "handle" ), - event = jQuery.event.fix( nativeEvent ); - event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; - event.isSimulated = true; - - // First, handle focusin/focusout - handle( nativeEvent ); - - // ...then, handle focus/blur - // - // focus/blur don't bubble while focusin/focusout do; simulate the former by only - // invoking the handler at the lower level. - if ( event.target === event.currentTarget ) { - - // The setup part calls `leverageNative`, which, in turn, calls - // `jQuery.event.add`, so event handle will already have been set - // by this point. - handle( event ); - } - } else { - - // For non-IE browsers, attach a single capturing handler on the document - // while someone wants focusin/focusout. - jQuery.event.simulate( delegateType, nativeEvent.target, - jQuery.event.fix( nativeEvent ) ); - } - } - - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - var attaches; - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, true ); - - if ( document.documentMode ) { - - // Support: IE 9 - 11+ - // We use the same native handler for focusin & focus (and focusout & blur) - // so we need to coordinate setup & teardown parts between those events. - // Use `delegateType` as the key as `type` is already used by `leverageNative`. - attaches = dataPriv.get( this, delegateType ); - if ( !attaches ) { - this.addEventListener( delegateType, focusMappedHandler ); - } - dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); - } else { - - // Return false to allow normal processing in the caller - return false; - } - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - teardown: function() { - var attaches; - - if ( document.documentMode ) { - attaches = dataPriv.get( this, delegateType ) - 1; - if ( !attaches ) { - this.removeEventListener( delegateType, focusMappedHandler ); - dataPriv.remove( this, delegateType ); - } else { - dataPriv.set( this, delegateType, attaches ); - } - } else { - - // Return false to indicate standard teardown should be applied - return false; - } - }, - - // Suppress native focus or blur if we're currently inside - // a leveraged native-event stack - _default: function( event ) { - return dataPriv.get( event.target, type ); - }, - - delegateType: delegateType - }; - - // Support: Firefox <=44 - // Firefox doesn't have focus(in | out) events - // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 - // - // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 - // focus(in | out) events fire after focus & blur events, - // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order - // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 - // - // Support: IE 9 - 11+ - // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, - // attach a single handler for both events in IE. - jQuery.event.special[ delegateType ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - dataHolder = document.documentMode ? this : doc, - attaches = dataPriv.get( dataHolder, delegateType ); - - // Support: IE 9 - 11+ - // We use the same native handler for focusin & focus (and focusout & blur) - // so we need to coordinate setup & teardown parts between those events. - // Use `delegateType` as the key as `type` is already used by `leverageNative`. - if ( !attaches ) { - if ( document.documentMode ) { - this.addEventListener( delegateType, focusMappedHandler ); - } else { - doc.addEventListener( type, focusMappedHandler, true ); - } - } - dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - dataHolder = document.documentMode ? this : doc, - attaches = dataPriv.get( dataHolder, delegateType ) - 1; - - if ( !attaches ) { - if ( document.documentMode ) { - this.removeEventListener( delegateType, focusMappedHandler ); - } else { - doc.removeEventListener( type, focusMappedHandler, true ); - } - dataPriv.remove( dataHolder, delegateType ); - } else { - dataPriv.set( dataHolder, delegateType, attaches ); - } - } - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (trac-8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Re-enable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - - // Unwrap a CDATA section containing script contents. This shouldn't be - // needed as in XML documents they're already not visible when - // inspecting element contents and in HTML documents they have no - // meaning but we're preserving that logic for backwards compatibility. - // This will be removed completely in 4.0. See gh-4904. - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew jQuery#find here for performance reasons: - // https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var rcustomProp = /^--/; - - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (trac-8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - // - // Support: Firefox 70+ - // Only Firefox includes border widths - // in computed dimensions. (gh-4529) - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "box-sizing:content-box;border:1px solid"; - - // Support: Chrome 86+ - // Height set through cssText does not get applied. - // Computed height then comes back as 0. - tr.style.height = "1px"; - trChild.style.height = "9px"; - - // Support: Android 8 Chrome 86+ - // In our bodyBackground.html iframe, - // display for all div elements is set to "inline", - // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is `display: block` - // gets around this issue. - trChild.style.display = "block"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - isCustomProp = rcustomProp.test( name ), - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, trac-12537) - // .css('--customProperty) (gh-3144) - if ( computed ) { - - // Support: IE <=9 - 11+ - // IE only supports `"float"` in `getPropertyValue`; in computed styles - // it's only available as `"cssFloat"`. We no longer modify properties - // sent to `.css()` apart from camelCasing, so we need to check both. - // Normally, this would create difference in behavior: if - // `getPropertyValue` returns an empty string, the value returned - // by `.css()` would be `undefined`. This is usually the case for - // disconnected elements. However, in IE even disconnected elements - // with no styles return `"none"` for `getPropertyValue( "float" )` - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( isCustomProp && ret ) { - - // Support: Firefox 105+, Chrome <=105+ - // Spec requires trimming whitespace for custom properties (gh-4926). - // Firefox only trims leading whitespace. Chrome just collapses - // both leading & trailing whitespace to a single space. - // - // Fall back to `undefined` if empty string returned. - // This collapses a missing definition with property defined - // and set to an empty string but there's no standard API - // allowing us to differentiate them without a performance penalty - // and returning `undefined` aligns with older jQuery. - // - // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED - // as whitespace while CSS does not, but this is not a problem - // because CSS preprocessing replaces them with U+000A LINE FEED - // (which *is* CSS whitespace) - // https://www.w3.org/TR/css-syntax-3/#input-preprocessing - ret = ret.replace( rtrimCSS, "$1" ) || undefined; - } - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0, - marginDelta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - // Count margin delta separately to only add it after scroll gutter adjustment. - // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). - if ( box === "margin" ) { - marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta + marginDelta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - animationIterationCount: true, - aspectRatio: true, - borderImageSlice: true, - columnCount: true, - flexGrow: true, - flexShrink: true, - fontWeight: true, - gridArea: true, - gridColumn: true, - gridColumnEnd: true, - gridColumnStart: true, - gridRow: true, - gridRowEnd: true, - gridRowStart: true, - lineHeight: true, - opacity: true, - order: true, - orphans: true, - scale: true, - widows: true, - zIndex: true, - zoom: true, - - // SVG-related - fillOpacity: true, - floodOpacity: true, - stopOpacity: true, - strokeMiterlimit: true, - strokeOpacity: true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (trac-7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug trac-9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (trac-7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // Use proper attribute retrieval (trac-12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classNames, cur, curValue, className, i, finalValue; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classNames = classesToArray( value ); - - if ( classNames.length ) { - return this.each( function() { - curValue = getClass( this ); - cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - if ( cur.indexOf( " " + className + " " ) < 0 ) { - cur += className + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - this.setAttribute( "class", finalValue ); - } - } - } ); - } - - return this; - }, - - removeClass: function( value ) { - var classNames, cur, curValue, className, i, finalValue; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classNames = classesToArray( value ); - - if ( classNames.length ) { - return this.each( function() { - curValue = getClass( this ); - - // This expression is here for better compressibility (see addClass) - cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - - // Remove *all* instances - while ( cur.indexOf( " " + className + " " ) > -1 ) { - cur = cur.replace( " " + className + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - this.setAttribute( "class", finalValue ); - } - } - } ); - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var classNames, className, i, self, - type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - classNames = classesToArray( value ); - - return this.each( function() { - if ( isValidValue ) { - - // Toggle individual class names - self = jQuery( this ); - - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (trac-14686, trac-14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (trac-2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - data - ) ); - } - return xml; -}; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (trac-9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (trac-6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ).filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ).map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // trac-7653, trac-8125, trac-8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - -originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes trac-9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (trac-10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket trac-12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // trac-9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script but not if jsonp - if ( !isSuccess && - jQuery.inArray( "script", s.dataTypes ) > -1 && - jQuery.inArray( "json", s.dataTypes ) < 0 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (trac-11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // trac-1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see trac-8605, trac-14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // trac-14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( "