diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index b1c262c..b979973 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,6 +3,8 @@ namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Http\JsonResponse; +use Illuminate\Support\Str; use Throwable; class Handler extends ExceptionHandler @@ -44,5 +46,47 @@ public function register(): void $this->reportable(function (Throwable $e) { // }); + + // AJAX kérések esetén mindig JSON választ adunk, egyedi referencia kóddal + $this->renderable(function (Throwable $e, $request) { + if ($request->ajax() || $request->wantsJson()) { + return $this->handleAjaxException($e, $request); + } + }); + } + + private function handleAjaxException(Throwable $e, $request): JsonResponse + { + // Validációs hibákat nem piszkáljuk – azokat a Laravel alapból kezeli + if ($e instanceof \Illuminate\Validation\ValidationException) { + return parent::render($request, $e); + } + + // Egyedi referencia kód generálása + $errorRef = 'ERR-' . now()->format('ymdHis') . '-' . strtoupper(Str::random(6)); + + // Teljes technikai részlet a logba + \Log::error("[$errorRef] Unhandled exception", [ + 'error_ref' => $errorRef, + 'message' => $e->getMessage(), + 'exception' => get_class($e), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'url' => $request->fullUrl(), + 'method' => $request->method(), + 'user_id' => auth()->id(), + 'input' => $request->except($this->dontFlash), + 'trace' => $e->getTraceAsString(), + ]); + + $statusCode = method_exists($e, 'getStatusCode') + ? $e->getStatusCode() + : 500; + + return response()->json([ + 'success' => false, + 'error_ref' => $errorRef, + 'message' => "Váratlan hiba történt. Hivatkozási kód: $errorRef", + ], $statusCode); } } diff --git a/bootstrap/app.php b/bootstrap/app.php index c183276..1657d4e 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -3,6 +3,9 @@ use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; +use Illuminate\Http\Request; +use Illuminate\Support\Str; +use Illuminate\Validation\ValidationException; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( @@ -14,5 +17,42 @@ // }) ->withExceptions(function (Exceptions $exceptions): void { - // + // AJAX kérések esetén mindig JSON választ adunk, egyedi referencia kóddal + $exceptions->renderable(function (Throwable $e, Request $request) { + if ($request->ajax() || $request->wantsJson()) { + // Validációs hibákat nem piszkáljuk – azokat a Laravel alapból kezeli + if ($e instanceof ValidationException) { + return null; + } + + // Egyedi referencia kód generálása + $errorRef = 'ERR-' . now()->format('ymdHis') . '-' . strtoupper(Str::random(6)); + + // Teljes technikai részlet a logba + \Log::error("[$errorRef] Unhandled exception", [ + 'error_ref' => $errorRef, + 'message' => $e->getMessage(), + 'exception' => get_class($e), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'url' => $request->fullUrl(), + 'method' => $request->method(), + 'user_id' => auth()->id(), + 'input' => $request->except(['current_password', 'password', 'password_confirmation']), + 'trace' => $e->getTraceAsString(), + ]); + + $statusCode = method_exists($e, 'getStatusCode') + ? $e->getStatusCode() + : 500; + + return response()->json([ + 'success' => false, + 'error_ref' => $errorRef, + 'message' => "Váratlan hiba történt. Hivatkozási kód: $errorRef", + ], $statusCode); + } + + return null; + }); })->create(); diff --git a/public/js/admin.js b/public/js/admin.js index d74d29f..5d545bb 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -65,7 +65,7 @@ eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"fun \****************************************/ () { -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('d1: Save success ');\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/YTdjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgU3VwcGxpZXI9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBTdXBwbGllciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllciBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHdpbmRvdy5TdXBwbGllcj1TdXBwbGllcjtcclxufVxyXG5cclxuXHJcbndpbmRvdy5TdXBwbGllckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgdG9rZW46bnVsbCxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJTdXBwbGllcicsXHJcbiAgICAgICAgdGVzdE1vZGU6ZmFsc2UsXHJcbiAgICAgICAgVVJMOntcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDonJyxcclxuICAgICAgICAgICAgaW5kZXg6JycsXHJcbiAgICAgICAgICAgIHNob3c6JycsXHJcbiAgICAgICAgICAgIGVkaXQ6JycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIHVwZGF0ZTonJyxcclxuICAgICAgICAgICAgZGVzdHJveTonJyxcclxuICAgICAgICAgICAgYXR0YWNoRmlsZTonJyxcclxuICAgICAgICAgICAgZGV0YWNoRmlsZTonJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZTp7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOlsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6ZnVuY3Rpb24gKCl7fVxyXG4gICAgfTtcclxuICAgIGxldCBTdXBwbGllciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93PSduZXcnO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYoIVN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdXBwbGllciBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XHJcbiAgICAgICAgICAgIGlmKCFBUFAuU3VwcGxpZXIpe1xyXG4gICAgICAgICAgICAgICAgQVBQLlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LlN1cHBsaWVyPUFQUC5TdXBwbGllcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENTU1NlbGVjdG9yKSk7XHJcbiAgICAgICAgLy9sZXQgZm9ybUpTT04gPSBPYmplY3QuZnJvbUVudHJpZXMoZGF0YS5lbnRyaWVzKCkpO1xyXG4gICAgICAgIHZhciBmb3JtSlNPTiA9IHt9O1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogZm9ybUpTT04uaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZm9ybUpTT04sIGtleSkpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZvcm1KU09OW2tleV0pKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSBbZm9ybUpTT05ba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9ybUpTT05ba2V5XS5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV09Zm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy9mb3JtSlNPTi5wcm9kdWN0R3JvdXBzPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcblxyXG4gICAgICAgIC8qTXVsdGlzZWxlY3Qgb3IgY2hlY2tib3ggdG8gYXJyYXk6XHJcbiAgICAgICAgYWpheERhdGFbJ3Byb2R1Y3RHcm91cCddPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcbiAgICAgICAgZm9ybUpTT04ubXVsdGlzZWxlY3ROYW1lID0gZGF0YS5nZXRBbGwoJ211bHRpc2VsZWN0TmFtZScpO1xyXG4gICAgICAgICQuZWFjaChmb3JtSlNPTiwgZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1KU09OWyQubGNGaXJzdChpdGVtLnJlcGxhY2UoJ2NvbnRhY3QnLCAnJykpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgZm9ybUpTT05baXRlbV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoZm9ybUpTT04ucGhvbmUpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5waG9uZT1mb3JtSlNPTi5waG9uZS5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZvcm1KU09OLmVtYWlsKXtcclxuICAgICAgICAgICAgZm9ybUpTT04uZW1haWw9Zm9ybUpTT04uZW1haWwucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIHJldHVybiBmb3JtSlNPTjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcclxuICAgICAgICBsZXQgYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXJTZXJ2aWNlJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllclNlcnZpY2VbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnY29udGFjdElkJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdjb250YWN0SWRbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywkKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGluZGV4S2V5PSQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICBpZihhamF4RGF0YS5nZXQoaW5kZXhLZXkpKXtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSxhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPVwiY2FuU2VlSW5PcmRlclwiXScpLnZhbCgpPT0xICYmICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XHJcbiAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbChDU1NTZWxlY3RvckZvcm0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xyXG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcclxuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XHJcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX21ldGhvZCcsJ1BVVCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVidWcoYWpheE1ldGhvZCk7XHJcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xyXG5cclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgdHlwZTphamF4TWV0aG9kLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGRlYnVnKCdkMTogU2F2ZSBzdWNjZXNzICcpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICAgICAgICAgICAgICBPcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZT1bMCwgJ2Rlc2MnXTtcclxuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJTaWtlcmVzIHLDtmd6w610w6lzIVwiLCBhamF4RGF0YS5nZXQoJ25hbWUnKStcIiBuZXbFsSBiZXN6w6FsbGzDrXTDsyBlbG1lbnR2ZVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgICAgICAgICAgICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmluZGV4Kyc/aW5pdD0wJyxyb290LmluaXRWaWV3TGlzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGV0YWlsc1ZpZXdEYXRhPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1Zygnc2V0RGV0YWlsc1ZpZXdEYXRhJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coU3VwcGxpZXIpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGxldCBuZWVkVG9TZXQ9W1xyXG4gICAgICAgICAgICAnbmFtZScsJ2hvb3JleWNhSWQnLCduYW1lSWQnLFxyXG4gICAgICAgICAgICAnb3JkZXJFbWFpbCcsJ29yZGVyRW1haWwyJywnYWRkcmVzcycsJ21haWxpbmdBZGRyZXNzJywncGhvbmUnLCdmYXgnLCdjdXN0b21lclNlcnZpY2VQaG9uZScsXHJcbiAgICAgICAgICAgICduYW1lMjInLFxyXG4gICAgICAgICAgICAnb3BlbkhvdXJzJywgJ29yZGVyc0RlYWRsaW5lJywgJ21pbk9yZGVyVmFsdWUnLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgJC5lYWNoKG5lZWRUb1NldCxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJykudmFsKHJvb3QuU3VwcGxpZXJbdGhpc10pO1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwocm9vdC5TdXBwbGllci5ub3RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ2VtYWlsQXR0YWNobWVudFR5cGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9ZW1haWxBdHRhY2htZW50VHlwZV1bdmFsdWU9Jytyb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10rJ10nKS5wcm9wKCdjaGVja2VkJyx0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuY2FuU2VlKyddJykuY2xpY2soKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9Y2FuU2VlSW5PcmRlcl1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuY2FuU2VlSW5PcmRlcisnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWhvb3JleWNhRGF0YUFjdGl2ZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuaG9vcmV5Y2FEYXRhQWN0aXZlKyddJykuY2xpY2soKTtcclxuICAgICAgICBsZXQgcHJvZHVjdEdyb3VwPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnByb2R1Y3RfZ3JvdXAsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwcm9kdWN0R3JvdXAucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnByb2R1Y3RDYXRlZ29yeVNlbGVjdCcpLnZhbChwcm9kdWN0R3JvdXApLmNoYW5nZSgpO1xyXG5cclxuICAgICAgICBsZXQgc2VydmljZT1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5zZXJ2aWNlLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VydmljZS5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuc2VydmljZVNlbGVjdCcpLnZhbChzZXJ2aWNlKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHByb2ZpdENlbnRlcj1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9maXRfY2VudGVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZml0Q2VudGVyLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyQoQ1NTU2VsZWN0b3JGb3JtKycgLnByb2ZpdENlbnRlclNlbGVjdCcpLnZhbChwcm9maXRDZW50ZXIpLmNoYW5nZSgpO1xyXG4gICAgICAgIC8vZGVidWcocHJvZml0Q2VudGVyKTtcclxuICAgICAgICAkLmVhY2gocHJvZml0Q2VudGVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdmFsdWU9XCInKyQuZXNjYXBlU2VsZWN0b3IodGhpcykrJ1wiXScpLnByb3AoIFwiY2hlY2tlZFwiLCB0cnVlICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlN1cHBsaWVyWydsb2dvRmlsZSddKSl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2RlYnVnKEFQUC5TdXBwbGllckFkbWluLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLnN1cHBsaWVyRm9ybScpWydwcm9kdWN0R3JvdXAnXSk7XHJcbiAgICAgICAgLy8kKCdbbmFtZT1wcm9kdWN0R3JvdXBdJykudmFsKFsnQsO8ZsOpw6FydV/DqWRlc2lwYXJpX3Rlcm3DqWtlaycsJ1RvasOhcyddKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL3Jvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIGlmKCFBUFAuQ29udGFjdFBvcFVwKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwID0gbmV3IHdpbmRvdy5Db250YWN0UG9wVXAoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmluaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcclxuICAgICAgICAgICAgb25BZnRlclNhdmU6cm9vdC5jb250YWN0QWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICAgICAgJCgnLnN1cHBsaWVyRm9ybSAuYnV0dG9uTmV3Q29udGFjdCcpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLlN1cHBsaWVyQWRtaW4uc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ25ldycpO1xyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xyXG4gICAgICAgIGluaXRSYWRpb0J1dHRvbnMoKTtcclxuICAgICAgICAkKFwiOmlucHV0XCIpLmlucHV0bWFzayh7XHJcbiAgICAgICAgICAgIFwib25pbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQodGhpcykuZGF0YSgncmVxdWlyZWQnKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPiAwIHx8ICQodGhpcykuZGF0YSgncmVxdWlyZWQnKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJvbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLXZhbGlkJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jbGVhcmVkXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjbGVhcmVkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xyXG4gICAgICAgIHJvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XHJcbiAgICAgICAgJChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCIuc2VydmljZVNlbGVjdFwiKS5zZWxlY3QyKHtcclxuICAgICAgICAgICAgdGFnczogdHJ1ZSxcclxuICAgICAgICAgICAgY3JlYXRlVGFnOiBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRlcm0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXJtLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhZzogdHJ1ZSAvLyBhZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8kKFwiLnByb2ZpdENlbnRlclNlbGVjdFwiKS5zZWxlY3QyKCk7XHJcbiAgICAgICAgJChcImlucHV0W25hbWU9bG9nb0ZpbGVdXCIpLmNoYW5nZShmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzZXRJbWFnZUZyb21Mb2NhbCh0aGlzLE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuaW1hZ2VMb2dvJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveEFsbCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygpO1xyXG4gICAgICAgICAgICAvL2xldCBjaGVja2VkPSQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKVxyXG4gICAgICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBpbnB1dC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBdHRhY2htZW50KCk7XHJcbiAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMoKTtcclxuICAgICAgICByb290LmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmUoKTtcclxuICAgICAgICBkZWJ1ZygnKiplbmQgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlPWZ1bmN0aW9uIChmaWxlSW5wdXQpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0LmF0dHIoJ25hbWUnKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XHJcbiAgICAgICAgKi9cclxuICAgICAgICBpZihmaWxlSW5wdXQpe1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgaWYoZmlsZUlucHV0WzBdLmZpbGVzWzBdKXtcclxuICAgICAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dChmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkRmlsZU5hbWUnKS50ZXh0KCcnKTtcclxuICAgICAgICAgICAgJCgnLmN1c3RvbS1maWxlLWxhYmVsLnNlbGVjdGVkJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLnVwbG9hZFN0YXR1c1JvdycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS1pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlLS0tLS0tLS0tLS0nKTtcclxuICAgICAgICBpZihyb290LlN1cHBsaWVyLmlkKXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkTm9uZScpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwKCctLS0tLS0tYnV0dG9uVXBsb2FkLS0tLS0tLS0tLS0nKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVJbnB1dD0kKCcjaW5wdXRHcm91cEF0dGFjaGVGaWxlJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJIaWJhIVwiLCAnVsOhbGxhc3pvbiBraSBmw6FqbHQhJywgVE9BU1RfU1RBVFVTLkRBTkdFUiwgMTAwMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhPSBuZXcgRm9ybURhdGEoJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKS5maW5kKCdmb3JtLnN1cHBsaWVyRm9ybScpWzBdKTtcclxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoZmlsZUlucHV0KTtcclxuICAgICAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuYXR0YWNoRmlsZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZGRBdHRhY2htZW50KGRhdGEuZGF0YS5hdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrTmV3Jyk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld0NhbGxCYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXI9bmV3IHdpbmRvdy5TdXBwbGllcigpO1xyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQ9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tTdXBwbGllckRlbGV0ZUNvbmZpcm1lZCcpO1xyXG4gICAgICAgIGRlYnVnKGV2ZW50KTtcclxuICAgICAgICBkZWJ1ZyhldmVudC5kYXRhKTtcclxuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLGV2ZW50LmRhdGEuaWQpO1xyXG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj0kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhhamF4VXJsKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhhamF4RGF0YSk7XHJcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cocm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIG1ldGhvZDpcIkRFTEVURVwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnJlbW92ZSgpLmRyYXcoKTtcclxuICAgICAgICAgICAgICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIGxldCBkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlPWZhbHNlO1xyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIENhbGxlZCcpO1xyXG4gICAgICAgIHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlPW5vZGU7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykub24oJ3Nob3cuYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB5b3UgY291bGQgaW5pdGlhdGUgYW4gQUpBWCByZXF1ZXN0IGhlcmUgKGFuZCB0aGVuIGRvIHRoZSB1cGRhdGluZyBpbiBhIGNhbGxiYWNrKS5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtb2RhbCdzIGNvbnRlbnQuIFdlJ2xsIHVzZSBqUXVlcnkgaGVyZSwgYnV0IHlvdSBjb3VsZCB1c2UgYSBkYXRhIGJpbmRpbmcgbGlicmFyeSBvciBvdGhlciBtZXRob2RzIGluc3RlYWQuXHJcbiAgICAgICAgICAgIHZhciBtb2RhbCA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC10aXRsZScpLnRleHQoJ01lZ2VyxZFzw610w6lzICcpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtYm9keScpLnRleHQoJ0JpenRvc2FuIHTDtnJsaSBhIGJlc3rDoWxsw610w7N0PycpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcuYnV0dG9uWWVzJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcuYnV0dG9uWWVzJykub24oJ2NsaWNrJyx7aWQ6cm93RGF0YS5pZH0scm9vdC5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcclxuICAgICAgICBsZXQgbm9kZT0kKGV2ZW50WzBdLmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcclxuICAgICAgICBsZXQgYWN0aW9uTmFtZT0nZGF0YXRhYmxlUm93QWN0aW9uJytub2RlLmRhdGEoJ2J1dHRvbnR5cGUnKS5jYXBpdGFsaXplKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByb290W2FjdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3RbYWN0aW9uTmFtZV0ocm93RGF0YSxub2RlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zdWNjZXNzIG5ld0l0ZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6J25ld0l0ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5vZGUpLnJlbW92ZUNsYXNzKCd1aS1idXR0b24nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnKTsqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0b2ZpbGxEZXRhaWxzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGRlYnVnKCdueWVyZXNyZSBhbGx1bmsnKTtcclxuICAgICAgICBsZXQgcmFuZG9tTnVtYmVyPWdldFJhbmRvbUludCg5OTk5KTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW5hbWVdJykudmFsKCdCZXN6YWzDrXTDsycrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPWhvb3JleWNhSWRdJykudmFsKCdoYicrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW5hbWVJZF0nKS52YWwoJ2JlJytyYW5kb21OdW1iZXIpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9b3JkZXJFbWFpbF0nKS52YWwoJ2thcGNzb2xhdCcrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9b3JkZXJFbWFpbDJdJykudmFsKCdpbmZvcm1hY2lvJytyYW5kb21OdW1iZXIrJ0BiZXN6YWxsaXRvLmh1Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1hZGRyZXNzXScpLnZhbCgnODk4OSBTdXBwbGllciB1dGNhICcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW1haWxpbmdBZGRyZXNzXScpLnZhbCgnODk4OSBQb3N0YWkgw7p0JytyYW5kb21OdW1iZXIpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9cGhvbmVdJykudmFsKCcrMzYzMDEyMzQ1NjcnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPWZheF0nKS52YWwoJzM2MzA4ODg5OTk5Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1jdXN0b21lclNlcnZpY2VQaG9uZV0nKS52YWwoJyszNjc2MTIzNDQ0NCcpO1xyXG4gICAgICAgICQoJ3RleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoJ01lZ2plZ3l6ZW0gJytyYW5kb21OdW1iZXIpO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMudGVzdE1vZGU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJyEhISF0ZXN0bW9kZSAhISEhJyk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllciA9IG5ldyB3aW5kb3cuU3VwcGxpZXIoe1xyXG4gICAgICAgICAgICAnY29udGFjdCc6W1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOjIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOjMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOjMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6J0vDs3NhIFZlcm9uaWthJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6J3N6YW1sYXphczRAZnVua2Npby5odScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lOid7e2Zvcm1hdHRlclBob25lTnVtYmVyKFwiKzM2MjA0NTg5MTgwXCIpfX0nXHJcbiAgICAgICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuICAgICAgICBPcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5pbml0Vmlld0RldGFpbHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICAgICByb290LlN1cHBsaWVyPVN1cHBsaWVySXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyQXR0YWNobWVudD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0F0dGFjaG1lbnQnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdhdHRhY2htZW50JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBhdHRhY2htZW50RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICBkYXRlPW5ldyBEYXRlKGF0dGFjaG1lbnREYXRhLmNyZWF0ZWRfYXQpO1xyXG4gICAgICAgICAgICBhdHRhY2htZW50RGF0YS5kYXRlPWRhdGUudG9Mb2NhbGVTdHJpbmcoKTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEubGluaz1hdHRhY2htZW50RGF0YS5QdWJsaWNVcmwrJy8nK2F0dGFjaG1lbnREYXRhLmZpbGVuYW1lO1xyXG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJBdHRhY2htZW50VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkQXR0YWNobWVudD1mdW5jdGlvbiAoYXR0YWNobWVudERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICByb290LlN1cHBsaWVyLmF0dGFjaG1lbnQucHVzaChhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiRsOhamwgaG96esOhYWR2YSFcIiwgYXR0YWNobWVudERhdGEub3JpZ2luYWxfZmlsZW5hbWUrXCIgZsOhamwgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckNvbnRhY3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdDb250YWN0cycpO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RGVsZXRlQ2xpY2spO1xyXG5cclxuICAgICAgICBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKTtcclxuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICBub2RlLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3RFZGl0Q2xpY2spO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JCgnLmF0dGFjaG1lbnRUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5hdHRhY2htZW50RGVsZXRlQ2xpY2spO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnRBdHRhY2htZW50Um93PWZhbHNlO1xyXG4gICAgdGhpcy5hdHRhY2htZW50RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9YXR0YWNobWVudElkXScpLnZhbCgpO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRldGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcbiAgICAgICAgLy9sZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgLy9kYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgbGV0IGRhdGE9e307XHJcbiAgICAgICAgZGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpO1xyXG4gICAgICAgIGRhdGEuYXR0YWNoZW1udElkPWlkO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmRhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAvL2NvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICAvL3Byb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50PXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT09ZGF0YS5kYXRhLiAgIGF0dGFjaG1lbnQuaWQqMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgLy9yb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5yZXNldEF0dGFjaG1lbnRUYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZXNldEF0dGFjaG1lbnRUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBdHRhY2htZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb250YWN0RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdD1yb290LlN1cHBsaWVyLmNvbnRhY3QuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgIH1cclxuICAgIHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBjb250YWN0UG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5sb2FkRGF0YShpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRTdXBwbGllcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gcm9vdC5TdXBwbGllcjtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGFjdEFjdGlvbj1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQ29udGFjdChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0Q29udGFjdD1mdW5jdGlvbiAoaWQsY29udGFjdERhdGEpe1xyXG5cclxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uIChpbmRleCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaWQ9PWlkKXtcclxuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9bmV3Q29udGFjdHM7XHJcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkthcGNzb2xhdCBhZGF0YWkgbcOzZG9zw610dmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWRkQ29udGFjdD1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdC5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm9vdC5TdXBwbGllci5jb250YWN0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiS2FwY3NvbGF0IHRhcnTDsyBob3p6w6FhZHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5jb25zdHJ1Y3Qob3B0aW9ucyxTdXBwbGllckl0ZW0pO1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLFFBQVEsS0FBRyxXQUFXLEVBQUM7RUFBQSxJQUN2QkEsU0FBUSwwQkFBQUMsVUFBQTtJ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LENBQUNxRCxFQUFFLElBQUVBLEVBQUUsRUFBQztRQUNYNkosV0FBVyxDQUFDbEwsSUFBSSxDQUFDaUssV0FBVyxDQUFDO01BQ2pDLENBQUMsTUFBSTtRQUNEaUIsV0FBVyxDQUFDbEwsSUFBSSxDQUFDLElBQUksQ0FBQztNQUMxQjtJQUNKLENBQUMsQ0FBQztJQUNGcEIsSUFBSSxDQUFDbkMsUUFBUSxDQUFDUSxPQUFPLEdBQUNpTyxXQUFXO0lBQ2pDdE0sSUFBSSxDQUFDb0wsaUJBQWlCLENBQUMsQ0FBQztJQUN4Qm5JLEtBQUssQ0FBQzFELE1BQU0sQ0FBQyw2QkFBNkIsRUFBRThMLFdBQVcsQ0FBQ3JILElBQUksR0FBQyxpQ0FBaUMsRUFBRWQsWUFBWSxDQUFDQyxPQUFPLEVBQUMsSUFBSSxDQUFDO0VBQzlILENBQUM7RUFDRCxJQUFJLENBQUNpSixVQUFVLEdBQUMsVUFBVWYsV0FBVyxFQUFDO0lBQ2xDO0FBQ1I7QUFDQTtJQUNRckwsSUFBSSxDQUFDbkMsUUFBUSxDQUFDUSxPQUFPLENBQUMrQyxJQUFJLENBQUNpSyxXQUFXLENBQUM7SUFDdkNBLFdBQVcsQ0FBQ2xCLE1BQU0sR0FBQ25LLElBQUksQ0FBQ25DLFFBQVEsQ0FBQ1EsT0FBTyxDQUFDK0csTUFBTTtJQUMvQyxJQUFJeUYsUUFBUSxHQUFDMUssQ0FBQyxDQUFDLCtDQUErQyxDQUFDLENBQUMySyxJQUFJLENBQUMsQ0FBQztJQUN0RSxJQUFJN0IsTUFBTSxHQUFDOEIsUUFBUSxDQUFDOUIsTUFBTSxDQUFDNEIsUUFBUSxFQUFDUSxXQUFXLENBQUM7SUFDaERsTCxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQ3lCLE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQztJQUN2Q2pKLElBQUksQ0FBQ2lMLHNCQUFzQixDQUFDLENBQUM7SUFDN0JoSSxLQUFLLENBQUNpSSxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ3pCakksS0FBSyxDQUFDMUQsTUFBTSxDQUFDLDRCQUE0QixFQUFFOEwsV0FBVyxDQUFDckgsSUFBSSxHQUFDLGlDQUFpQyxFQUFFZCxZQUFZLENBQUNDLE9BQU8sRUFBQyxJQUFJLENBQUM7RUFDN0gsQ0FBQztFQUdELElBQUksQ0FBQ2pELFNBQVMsQ0FBQ2pDLE9BQU8sRUFBQ1ksWUFBWSxDQUFDO0FBQ3hDLENBQUMiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL3N1cHBsaWVyLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}"); +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('d1: Save success ');\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű beszálllító elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\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({\n title: \"Kapcsolat adatai módosítva!\",\n message: contactData.name + \" nevű kapcsolattartó módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\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({\n title: \"Kapcsolattartó hozzáadva!\",\n message: contactData.name + \" nevű kapcsolattartó hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanMiLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiU3VwcGxpZXJBZG1pbiIsIlN1cHBsaWVySXRlbSIsIk9wdHMiLCJ0b2tlbiIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdE1vZGUiLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImF0dGFjaEZpbGUiLCJkZXRhY2hGaWxlIiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsIkFQUCIsImdldE9wdHMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQiLCJDU1NTZWxlY3RvciIsIkZvcm1EYXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZm9ybUpTT04iLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJSZWZsZWN0IiwiaGFzIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsImVhY2giLCJhdHRyIiwicmVwbGFjZSIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsIkNTU1NlbGVjdG9yRm9ybSIsImFqYXhEYXRhIiwiZ2V0QWxsIiwiYXBwZW5kIiwidmFsIiwiaW5kZXhLZXkiLCJnZXQiLCJzZXQiLCJjbGlja1NhdmVCdXR0b24iLCJldmVudCIsImRlYnVnIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiYWpheFVybCIsImFqYXhNZXRob2QiLCJpZCIsImFqYXgiLCJ1cmwiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJTVUNDRVNTIiwidGltZW91dCIsImxvYWRNYWluQ29udGVudCIsImluaXRWaWV3TGlzdCIsInNldERldGFpbHNWaWV3RGF0YSIsIm5lZWRUb1NldCIsIm5vdGUiLCJwcm9wIiwiY2FuU2VlIiwiY2xpY2siLCJjYW5TZWVJbk9yZGVyIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwicHJvZHVjdEdyb3VwIiwicHJvZHVjdF9ncm91cCIsIm5hbWUiLCJjaGFuZ2UiLCJzZXJ2aWNlIiwicHJvZml0Q2VudGVyIiwicHJvZml0X2NlbnRlciIsImVzY2FwZVNlbGVjdG9yIiwiaW5pdFZpZXdEZXRhaWxzIiwiQ29udGFjdFBvcFVwIiwiaW5pdCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJ0b29sdGlwIiwiaW5pdFJhZGlvQnV0dG9ucyIsImlucHV0bWFzayIsIm9uaW5jb21wbGV0ZSIsImxlbmd0aCIsImFkZENsYXNzIiwib25jb21wbGV0ZSIsInJlbW92ZUNsYXNzIiwib25jbGVhcmVkIiwib2ZmIiwib24iLCJzZWxlY3QyIiwidGFncyIsImNyZWF0ZVRhZyIsInBhcmFtcyIsInRlcm0iLCJ0cmltIiwidGV4dCIsIm5ld1RhZyIsInNldEltYWdlRnJvbUxvY2FsIiwiaXMiLCJyZW5kZXJBdHRhY2htZW50IiwiaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZSIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwiZ3JvdXAiLCJEQU5HRVIiLCJmaW5kIiwiZ3JvdXBFbmQiLCJiZWZvcmVTZW5kIiwiYWRkQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImNsaWNrTmV3IiwiY2xpY2tOZXdDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJyb3dEYXRhIiwibm9kZSIsImNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQiLCJtb2RhbCIsIl90b2tlbiIsInJvdyIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiRGF0YVRhYmxlIiwiZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwicGFyZW50cyIsIm1ldGhvZCIsInJlbW92ZSIsImRyYXciLCJkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwiZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJsYW5ndWFnZSIsInJlbmRlciIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJsYXRpbmlzZSIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImFwaSIsImNvbmZpZyIsImFjdGlvbiIsImUiLCJkdCIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwiYXV0b2ZpbGxEZXRhaWxzIiwicmFuZG9tTnVtYmVyIiwiZ2V0UmFuZG9tSW50Iiwicm93TnVtIiwiZ2V0RGF0YSIsImF0dGFjaG1lbnREYXRhIiwiZGF0ZSIsIkRhdGUiLCJjcmVhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJsaW5rIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJNdXN0YWNoZSIsImJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24iLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwiZW5hYmxlVGltZXJzIiwib3JpZ2luYWxfZmlsZW5hbWUiLCJyZXNldENvbnRhY3RUYWJsZSIsImNvbnRhY3REYXRhIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImF0dGFjaG1lbnREZWxldGVDbGljayIsImN1cnJlbnRBdHRhY2htZW50Um93IiwiY2xvc2VzdCIsImF0dGFjaGVtbnRJZCIsImZpbHRlciIsImFyciIsInJlc2V0QXR0YWNobWVudFRhYmxlIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJsb2FkRGF0YSIsImdldFN1cHBsaWVyIiwiYWRkQ29udGFjdCIsImVkaXRDb250YWN0IiwibmV3Q29udGFjdHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9zdXBwbGllci5qcz9hN2M0Il0sInNvdXJjZXNDb250ZW50IjpbImlmKHR5cGVvZiBTdXBwbGllcj09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIFN1cHBsaWVyIGV4dGVuZHMgRGF0YU1vZGVse1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgd2luZG93LlN1cHBsaWVyPVN1cHBsaWVyO1xyXG59XHJcblxyXG5cclxud2luZG93LlN1cHBsaWVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICB0b2tlbjpudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclN1cHBsaWVyJyxcclxuICAgICAgICB0ZXN0TW9kZTpmYWxzZSxcclxuICAgICAgICBVUkw6e1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxyXG4gICAgICAgICAgICBpbmRleDonJyxcclxuICAgICAgICAgICAgc2hvdzonJyxcclxuICAgICAgICAgICAgZWRpdDonJyxcclxuICAgICAgICAgICAgY3JlYXRlOicnLFxyXG4gICAgICAgICAgICBzdG9yZTonJyxcclxuICAgICAgICAgICAgdXBkYXRlOicnLFxyXG4gICAgICAgICAgICBkZXN0cm95OicnLFxyXG4gICAgICAgICAgICBhdHRhY2hGaWxlOicnLFxyXG4gICAgICAgICAgICBkZXRhY2hGaWxlOicnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVRhYmxlOntcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6WzEsICdhc2MnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczpmdW5jdGlvbiAoKXt9XHJcbiAgICB9O1xyXG4gICAgbGV0IFN1cHBsaWVyID0ge307XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICBsZXQgY29udGFjdFBvcHVwV29ya2Zsb3c9J25ldyc7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnU3VwcGxpZXJBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBpZighU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1cHBsaWVyIGxldHJlIGtlbGxldCBob3puaSAnKTtcclxuICAgICAgICAgICAgaWYoIUFQUC5TdXBwbGllcil7XHJcbiAgICAgICAgICAgICAgICBBUFAuU3VwcGxpZXI9bmV3IHdpbmRvdy5TdXBwbGllcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuU3VwcGxpZXI9QVBQLlN1cHBsaWVyO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQ9IGZ1bmN0aW9uIChDU1NTZWxlY3Rvcikge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQ1NTU2VsZWN0b3IpKTtcclxuICAgICAgICAvL2xldCBmb3JtSlNPTiA9IE9iamVjdC5mcm9tRW50cmllcyhkYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgdmFyIGZvcm1KU09OID0ge307XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFJlZmxlY3QuaGFzIGluIGZhdm9yIG9mOiBmb3JtSlNPTi5oYXNPd25Qcm9wZXJ0eShrZXkpXHJcbiAgICAgICAgICAgIGlmKCFSZWZsZWN0Lmhhcyhmb3JtSlNPTiwga2V5KSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTltrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZm9ybUpTT05ba2V5XSkpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IFtmb3JtSlNPTltrZXldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3JtSlNPTltrZXldLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgaWYoZm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXT1mb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV0ucmVwbGFjZSgvW18gXSskL2csXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvL2Zvcm1KU09OLnByb2R1Y3RHcm91cHM9JChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpLnZhbCgpO1xyXG5cclxuXHJcbiAgICAgICAgLypNdWx0aXNlbGVjdCBvciBjaGVja2JveCB0byBhcnJheTpcclxuICAgICAgICBhamF4RGF0YVsncHJvZHVjdEdyb3VwJ109JChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpLnZhbCgpO1xyXG5cclxuICAgICAgICBmb3JtSlNPTi5tdWx0aXNlbGVjdE5hbWUgPSBkYXRhLmdldEFsbCgnbXVsdGlzZWxlY3ROYW1lJyk7XHJcbiAgICAgICAgJC5lYWNoKGZvcm1KU09OLCBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgZm9ybUpTT05bJC5sY0ZpcnN0KGl0ZW0ucmVwbGFjZSgnY29udGFjdCcsICcnKSldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBmb3JtSlNPTltpdGVtXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZihmb3JtSlNPTi5waG9uZSl7XHJcbiAgICAgICAgICAgIGZvcm1KU09OLnBob25lPWZvcm1KU09OLnBob25lLnJlcGxhY2VBbGwoJ18nLCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZm9ybUpTT04uZW1haWwpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5lbWFpbD1mb3JtSlNPTi5lbWFpbC5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICAgICAgcmV0dXJuIGZvcm1KU09OO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2ZpdENlbnRlcltdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdzdXBwbGllclNlcnZpY2UnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyU2VydmljZVtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrU2F2ZUJ1dHRvbj1mdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBkZWJ1ZygnU2F2ZSBjbGlja2VkJyk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9XCJjYW5TZWVJbk9yZGVyXCJdJykudmFsKCk9PTEgJiYgJChDU1NTZWxlY3RvckZvcm0pWzBdLmNoZWNrVmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBmYWxzZScpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gb2snKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuc3RvcmU7XHJcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcclxuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJ2QxOiBTYXZlIHN1Y2Nlc3MgJyk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIGJlc3rDoWxsbMOtdMOzIGVsbWVudHZlXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFN1cHBsaWVyKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ29yZGVyRW1haWwnLCdvcmRlckVtYWlsMicsJ2FkZHJlc3MnLCdtYWlsaW5nQWRkcmVzcycsJ3Bob25lJywnZmF4JywnY3VzdG9tZXJTZXJ2aWNlUGhvbmUnLFxyXG4gICAgICAgICAgICAnbmFtZTIyJyxcclxuICAgICAgICAgICAgJ29wZW5Ib3VycycsICdvcmRlcnNEZWFkbGluZScsICdtaW5PcmRlclZhbHVlJyxcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclt0aGlzXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuU3VwcGxpZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWVtYWlsQXR0YWNobWVudFR5cGVdW3ZhbHVlPScrcm9vdC5TdXBwbGllclsnZW1haWxBdHRhY2htZW50VHlwZSddKyddJykucHJvcCgnY2hlY2tlZCcsdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZUluT3JkZXJdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZUluT3JkZXIrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9kdWN0X2dyb3VwLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZHVjdEdyb3VwLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3QnKS52YWwocHJvZHVjdEdyb3VwKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlcnZpY2U9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuc2VydmljZSxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlcnZpY2UucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnNlcnZpY2VTZWxlY3QnKS52YWwoc2VydmljZSkuY2hhbmdlKCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZml0X2NlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHByb2ZpdENlbnRlci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL2RlYnVnKHByb2ZpdENlbnRlcik7XHJcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3ZhbHVlPVwiJyskLmVzY2FwZVNlbGVjdG9yKHRoaXMpKydcIl0nKS5wcm9wKCBcImNoZWNrZWRcIiwgdHJ1ZSApO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydsb2dvRmlsZSddIT0ndW5kZWZpbmVkJyAmJiAocm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9kZWJ1ZyhBUFAuU3VwcGxpZXJBZG1pbi5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5zdXBwbGllckZvcm0nKVsncHJvZHVjdEdyb3VwJ10pO1xyXG4gICAgICAgIC8vJCgnW25hbWU9cHJvZHVjdEdyb3VwXScpLnZhbChbJ0LDvGbDqcOhcnVfw6lkZXNpcGFyaV90ZXJtw6lrZWsnLCdUb2rDoXMnXSkuY2hhbmdlKCk7XHJcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5TdXBwbGllckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XHJcbiAgICAgICAgJChcIjppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuICAgICAgICByb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgICAgICQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKTtcclxuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRydWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZVRhZzogZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vJChcIi5wcm9maXRDZW50ZXJTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcclxuICAgICAgICAgICAgLy9sZXQgY2hlY2tlZD0kKHRoaXMpLmlzKFwiOmNoZWNrZWRcIilcclxuICAgICAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gaW5wdXQucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywkKHRoaXMpLmlzKFwiOmNoZWNrZWRcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jdXN0b20tZmlsZS1sYWJlbC5zZWxlY3RlZCcpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBBdHRhY2hlRmlsZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiSGliYSFcIiwgJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcclxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcclxuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcclxuICAgICAgICBkZWJ1ZyhldmVudCk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XHJcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcclxuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcclxuICAgICAgICAgICAgJ2NvbnRhY3QnOltcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xyXG4gICAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRDb250YWN0VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuXHJcbiAgICAgICAgbm9kZT0kKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0Jyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQXR0YWNobWVudENsaWNrQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5hdHRhY2htZW50VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuYXR0YWNobWVudERlbGV0ZUNsaWNrKTtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcclxuICAgIHRoaXMuYXR0YWNobWVudERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXRhY2hGaWxlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgIC8vbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGxldCBkYXRhPXt9O1xyXG4gICAgICAgIGRhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKTtcclxuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidQT1NUJyxcclxuICAgICAgICAgICAgLy9jb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3VwcGxpZXIuYXR0YWNobWVudD1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRBdHRhY2htZW50VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1pZCoxKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgICByb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnRhY3RFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0Q29udGFjdChjb250YWN0RGF0YS5pZCxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0PW5ld0NvbnRhY3RzO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcGNzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRDb250YWN0PWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmNvbnRhY3QubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YSFcIiwgbWVzc2FnZTogY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnN0cnVjdChvcHRpb25zLFN1cHBsaWVySXRlbSk7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsUUFBUSxLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3ZCQSxTQUFRLDBCQUFBQyxVQUFBO0lBRVY7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsVUFBYUMsSUFBSSxFQUFDQyxPQUFPLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQUFDLGVBQUEsT0FBQUosU0FBQTtNQUN2QkcsS0FBQSxHQUFBRSxVQUFBLE9BQUFMLFNBQUEsR0FBTUMsSUFBSSxFQUFDQyxPQUFPO01BQ2xCLElBQUcsT0FBT0MsS0FBQSxDQUFLRyxPQUFPLEtBQUksV0FBVyxFQUFDO1FBQ2xDSCxLQUFBLENBQUtHLE9BQU8sR0FBQyxFQUFFO01BQ25CO01BQ0FDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDZCQUE2QixDQUFDO01BQUMsT0FBQUwsS0FBQTtJQUMvQztJQUFDTSxTQUFBLENBQUFULFNBQUEsRUFBQUQsVUFBQTtJQUFBLE9BQUFXLFlBQUEsQ0FBQVYsU0FBQTtFQUFBLEVBWGtCVyxTQUFTO0VBWS9CO0VBQ0RDLE1BQU0sQ0FBQ2QsUUFBUSxHQUFDQSxTQUFRO0FBQzVCO0FBR0FjLE1BQU0sQ0FBQ0MsYUFBYSxHQUFDLFVBQVVYLE9BQU8sRUFBQ1ksWUFBWSxFQUFFO0VBQ2pEO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUMsSUFBSSxHQUFHO0lBQ1BDLEtBQUssRUFBQyxJQUFJO0lBQ1ZDLG9CQUFvQixFQUFFLG9CQUFvQjtJQUMxQ0MsUUFBUSxFQUFDLEtBQUs7SUFDZEMsR0FBRyxFQUFDO01BQ0FDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLEtBQUssRUFBQyxFQUFFO01BQ1JDLElBQUksRUFBQyxFQUFFO01BQ1BDLElBQUksRUFBQyxFQUFFO01BQ1BDLE1BQU0sRUFBQyxFQUFF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\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}"); /***/ } diff --git a/public/js/app.js b/public/js/app.js index cc6886a..657dfd9 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -15,7 +15,7 @@ \*****************************/ (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { -eval("{function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _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 _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _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); }\n__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\n\n//----------------------------------------------------------------------\n/*\r\nHelper function\r\n*/\nwindow.getMonday = function (date, dateStr) {\n if (dateStr) {\n date = new Date(dateStr);\n }\n var day = date.getDay(),\n diff = date.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\nwindow.debug = function (txt) {\n try {\n console.log(txt);\n } catch (e) {}\n};\nwindow.buildFormData = function (formData, data, parentKey) {\n if (data && _typeof(data) === 'object' && !(data instanceof Date) && !(data instanceof File)) {\n Object.keys(data).forEach(function (key) {\n buildFormData(formData, data[key], parentKey ? \"\".concat(parentKey, \"[\").concat(key, \"]\") : key);\n });\n } else {\n var value = data == null ? '' : data;\n formData.append(parentKey, value);\n }\n};\nwindow.jsonToFormData = function (data) {\n var formData = new FormData();\n buildFormData(formData, data);\n return formData;\n};\nString.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n};\nwindow.arrayRemove = function (arr, value) {\n return arr.filter(function (ele) {\n return ele != value;\n });\n};\nwindow.getRandomInt = function () {\n var max = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.MAX_SAFE_INTEGER;\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n debug(max);\n debug(min);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nwindow.setImageFromLocal = function (input, targetImgCssSelector) {\n if (input.files && input.files[0]) {\n var reader = new FileReader();\n reader.onload = function (e) {\n $(targetImgCssSelector).attr('src', e.target.result);\n };\n reader.readAsDataURL(input.files[0]);\n }\n};\n__webpack_require__(/*! ./latinise */ \"./resources/js/latinise.js\");\n\n/*\r\ndisable back button\r\n */\n$(function () {\n if (window.history && window.history.pushState) {\n window.history.pushState('', null, window.location.href);\n $(window).on('popstate', function (event) {\n // alert('Back button was pressed.');\n //document.location.href = '#';\n window.history.pushState('', document.title, window.location.href);\n //console.log('mevagy');\n event.stopPropagation();\n });\n }\n});\n//----------------------------------------------------------------------\n/*\r\ninit custom radio buttons\r\n */\nwindow.initRadioButtons = function (Options) {\n var Opts = {\n onChange: function onChange(value, node) {}\n };\n $.extend(Opts, Options);\n var activeValue = $('.customRadioBtnGroup .active').data('title');\n var target = $('.customRadioBtnGroup .active').data('toggle');\n $('input[name=' + target + ']').prop('value', activeValue);\n $('.customRadioBtnGroup a').unbind('click');\n $('.customRadioBtnGroup a').bind('click', function () {\n var sel = $(this).data('title');\n var tog = $(this).data('toggle');\n $('input[name=' + tog + ']').prop('value', sel);\n $('a[data-toggle=\"' + tog + '\"]').not('[data-title=\"' + sel + '\"]').removeClass('active').addClass('notActive');\n $('a[data-toggle=\"' + tog + '\"][data-title=\"' + sel + '\"]').removeClass('notActive').addClass('active');\n Opts.onChange(sel, tog);\n });\n};\n\n//----------------------------------------------------------------------\n// Defaults\n//----------------------------------------------------------------------\n$.extend(true, $.fn.dataTable.defaults, {\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n lengthMenu: [[10, 25, 50, -1], ['10 sor', '25 sor', '50 sor', 'Összes']],\n buttons: {\n dom: {\n button: {\n className: 'fg-button ui-button dataTableHeaderButtons'\n }\n }\n },\n 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>'\n});\nInputmask.extendDefinitions({\n 'x': {\n validator: \"[\\.,-áéíóöőúàèìòùüűÁÉÍÓÖŐÚÀÈÌÒÙÜŰA-Za-z0-9 ]\"\n //cardinality: 1\n }\n});\n\n//----------------------------------------------------------------------\nToast.enableTimers(false);\n$.fn.select2.defaults.set('language', 'jp');\nwindow.select2CreateTag = function (params) {\n var term = $.trim(params.term);\n var count = 0;\n var existsVar = false;\n //check if there is any option already\n if ($('#keywords option').length > 0) {\n $('#keywords option').each(function () {\n if ($(this).text().toUpperCase() == term.toUpperCase()) {\n existsVar = true;\n return false;\n } else {\n existsVar = false;\n }\n });\n if (existsVar) {\n return null;\n }\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n //since select has 0 options, add new without comparing\n else {\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n};\nwindow.ajaxErrorHandler = function (xhr, ajaxOptions, thrownError) {\n debug(this);\n console.error(xhr);\n console.error(ajaxOptions);\n console.error(thrownError);\n if (xhr.responseJSON.errors) {\n console.error(\"d2---------------\");\n if (\"jsonapi\" in xhr.responseJSON) {\n ajaxErrorFieldHandlerJsonAPI(xhr.responseJSON.errors);\n } else {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n }\n } else {\n if (xhr.status == 404) {\n console.error(\"d3---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Nincs ilyen elem.'\n });\n } else {\n console.error(\"d4---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Általános hiba.'\n });\n }\n }\n};\nwindow.ajaxErrorFieldHandlerJsonAPI = function (errors, container) {\n console.error(\"d6---------------\");\n var toastBodyHtml = '';\n var toastTitle = 'Hiba';\n console.error(errors);\n $.each(errors, function (index, value) {\n console.error(value);\n toastTitle = 'Hiba';\n toastBodyHtml = '';\n if (\"title\" in value) {\n toastTitle = value.title;\n }\n if (\"detail\" in value) {\n toastBodyHtml += '