{"version":3,"sources":["node_modules/browser-pack/_prelude.js","TypeScripts/Common/saop-common.ts","TypeScripts/Components/saop-checkbox-switch.ts","TypeScripts/Components/saop-floating-label.ts","TypeScripts/Components/saop-grid-filter.ts","TypeScripts/Components/saop-grid.ts","TypeScripts/Components/saop-input-wfl.ts","TypeScripts/Components/saop-inputmask.ts","TypeScripts/Components/saop-menu-sidebar.ts","TypeScripts/Components/saop-message-dlg.ts","TypeScripts/Components/saop-multiselect.ts","TypeScripts/Components/saop-popup-dialog.ts","TypeScripts/Components/saop-right-sidebar.ts","TypeScripts/Components/saop-select-wfl.ts","TypeScripts/Components/saop-toggle-panel.ts","TypeScripts/Components/saop-view-spinner.ts","TypeScripts/Core/saop-services-core.ts","TypeScripts/Core/saop-translate.ts","TypeScripts/Core/saop-utils.ts","TypeScripts/main.ts"],"names":[],"mappings":"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","file":"saop_core_bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\r\n\r\nexport abstract class global {\r\n public static debugMode: boolean;\r\n public static siteBaseUrl: string;\r\n\r\n public static ConsoleLogDegug(message: any): void {\r\n if (this.debugMode) console.log(message);\r\n }\r\n\r\n public static GetClientLogModeStorageKeyValue(): string {\r\n return \"SaopMojInfo.globalClientLogModeVal\";\r\n }\r\n\r\n public static GetClientLogModeStorageValue(): boolean {\r\n let debugModeDefaultValue = false;\r\n\r\n var debugModeStringVal = this.ReadVariableFromStorage(global.GetClientLogModeStorageKeyValue());\r\n\r\n let debugModeVal = debugModeDefaultValue;\r\n if (debugModeStringVal) {\r\n debugModeVal = debugModeStringVal === \"true\" ? true : false;\r\n }\r\n\r\n return debugModeVal;\r\n }\r\n\r\n public static SetClientLogModeStorageValue(): void {\r\n let logMode = this.GetClientLogModeStorageValue();\r\n this.WriteVariableToStorage(global.GetClientLogModeStorageKeyValue(), !logMode);\r\n\r\n alertify.message(\"Client log mode enabled: \" + !logMode);\r\n }\r\n\r\n public static getSiteBaseUrl(): string {\r\n return $(\"#siteBaseUrl\").val() as string;\r\n }\r\n\r\n public static setHelpLink(): void {\r\n //nastavi help link, v odvisnosti od lokalizacije\r\n let _this = this;\r\n let svgHelp: any = document.getElementById('saop-help');\r\n\r\n if(svgHelp != null)\r\n {\r\n let language = svgHelp.getAttribute(\"data-language\");\r\n\r\n //počakamo da se gneszdeni objekt naloži\r\n svgHelp.addEventListener(\"load\", function () {\r\n let svgHelpLink = svgHelp.contentDocument.getElementById(\"saop-help-link\");\r\n if (_this.isUnDefined(svgHelpLink) == false) {\r\n if (language == \"hr\") {\r\n svgHelpLink.setAttribute(\"href\", \"http://help.saop.hr/hr/mojinfo\");\r\n }\r\n else if (language == \"sr\") {\r\n svgHelpLink.setAttribute(\"href\", \"http://www.saop.rs/icenter/100/uputstva-za-upotrebu/\");\r\n }\r\n else {\r\n svgHelpLink.setAttribute(\"href\", \"https://si-icenter.knowledgeowl.com/help/mojinfo-navodila-za-uporabo-prenovljenega-portala\");\r\n }\r\n }\r\n });\r\n\r\n //zaradi braskalnik - mozilla firefox - izgleda, da je object ''loaded'' preden mu dodamo on loaded\r\n if($('#saop-help-link') != null)\r\n {\r\n const event = new Event('load');\r\n svgHelp.dispatchEvent(event);\r\n }\r\n }\r\n }\r\n\r\n public static formatDate(date: Date, format: string): string {\r\n const to2 = (n: number): string => ((Math.abs(n) < 10 ? '0' : '') + Math.abs(n));\r\n return format.replace(/[ydmh]+/gi, (match: string): string => {\r\n switch (match) {\r\n case 'yyyy': return date.getFullYear().toString();\r\n case 'd': return date.getDate().toString();\r\n case 'dd': return to2(date.getDate());\r\n case 'm': return (date.getMonth() + 1).toString();\r\n case 'mm': return to2(date.getMonth() + 1);\r\n case 'H': return date.getHours().toString();\r\n case 'HH': return to2(date.getHours());\r\n case 'MM': return to2(date.getMinutes());\r\n default:\r\n return match;\r\n }\r\n });\r\n }\r\n\r\n public static convertString2Date(stringDate: string, format: string): Date {\r\n global.ConsoleLogDegug(\"convertString2Date\");\r\n\r\n switch (format) {\r\n case \"dd.mm.yyyy\":\r\n let day = stringDate.substring(0, 2);\r\n let month = stringDate.substring(3, 5);\r\n let year = stringDate.substring(6, 10);\r\n\r\n return new Date(+year, +month - 1, +day);\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n public static setModalFormZIndex(modalFormId: string): void {\r\n global.ConsoleLogDegug(\"setModalFormZIndex\");\r\n global.ConsoleLogDegug(\"modalFormId:\" + modalFormId);\r\n var zIndex = 1050 + (10 * $('.modal:visible').length);\r\n\r\n $(modalFormId).css('z-index', zIndex);\r\n setTimeout(function () {\r\n $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');\r\n }, 0);\r\n }\r\n\r\n public static isEmpty(str: string) {\r\n return (!str || str.length === 0);\r\n }\r\n\r\n public static isUnDefined(_obj: any) {\r\n return (!_obj || _obj === null || typeof _obj === \"undefined\");\r\n }\r\n\r\n public static ReadVariableFromStorage(variableName: string): string {\r\n return localStorage.getItem(variableName);\r\n }\r\n\r\n public static WriteVariableToStorage(variableName: string, value: any): void {\r\n localStorage.setItem(variableName, value);\r\n }\r\n\r\n public static filterTableRows(filterVal: string, idTableElement: string): void {\r\n global.ConsoleLogDegug(\"filterTableRows\");\r\n\r\n let val = $.trim(filterVal).replace(/ +/g, ' ').toLowerCase();\r\n let rows = $(idTableElement + \" tr:has(td)\");\r\n\r\n rows.show().filter(function () {\r\n var text = $(this).text().replace(/\\s+/g, ' ').toLowerCase();\r\n return !~text.indexOf(val);\r\n }).hide();\r\n }\r\n\r\n public static setFirstFormControlToFocus(formId: string): void {\r\n global.ConsoleLogDegug(\"setFirstFormControlToFocus\");\r\n\r\n // brez timeout funkcije focus ne dela :(\r\n setTimeout(function () {\r\n var firstFormControl = $(formId + \" .form-control:visible:not(:disabled):first\");\r\n if (firstFormControl) {\r\n firstFormControl.focus();\r\n }\r\n }, 500);\r\n }\r\n\r\n public static getRelativeSiteURL(controller: string): string {\r\n let _url = window.location.href;\r\n let iC = _url.indexOf(controller);\r\n if (iC > 0) {\r\n return _url.substring(0, iC) + controller;\r\n } else {\r\n return window.location.href;\r\n }\r\n }\r\n\r\n public static getSiteAbsoluteURL(relativePath: string): string {\r\n let controller = relativePath.split(\"/\")[0];\r\n let method = relativePath.replace(controller, \"\").replace(\"//\", \"\");\r\n\r\n // če relative path že vsebuje http, ga ne dodamo\r\n if (relativePath.indexOf(\"http\") >= 0) {\r\n return relativePath;\r\n }\r\n\r\n return global.getSiteBaseUrl() + \"/\" + controller + method;\r\n }\r\n\r\n public static relodeCurrentPage(): void {\r\n window.location.reload();\r\n }\r\n\r\n}\r\n\r\n","import { global } from \"../Common/saop-common\";\r\n\r\nexport class SaopCheckboxSwitch {\r\n\r\n init(parentElement: string = \"\") {\r\n this.checkboxSwitchOnClick(parentElement);\r\n this.switchLabelOnClick(parentElement);\r\n }\r\n\r\n checkboxSwitchOnClick(parentElement: string) {\r\n global.ConsoleLogDegug(\"saop-switch-checkbox...\");\r\n global.ConsoleLogDegug(\"saop-switch-checkbox parentElement: \" + parentElement);\r\n\r\n let _frame = $(\"\" + parentElement + \" *>.saop-switch-checkbox\");\r\n _frame.off(\"click\");\r\n _frame.click(function (event: any) {\r\n let _checkBox = event.target;\r\n let _atrParent = \"#\"+$(_checkBox).attr(\"for\");\r\n let _checkBoxP = $(\"\" + parentElement + \" *>\" + _atrParent);\r\n let _label1 = _checkBoxP.find(\"#saop-switch-label1\");\r\n let _label2 = _checkBoxP.find(\"#saop-switch-label2\");\r\n if (_checkBox.checked) {\r\n global.ConsoleLogDegug(\"checked\");\r\n _label1.removeClass('switch-label-on');\r\n _label1.addClass('switch-label-off');\r\n _label2.removeClass('switch-label-off');\r\n _label2.addClass('switch-label-on');\r\n } else {\r\n global.ConsoleLogDegug(\"unchecked\");\r\n _label1.removeClass('switch-label-off');\r\n _label1.addClass('switch-label-on');\r\n _label2.removeClass('switch-label-on');\r\n _label2.addClass('switch-label-off');\r\n }\r\n });\r\n }\r\n\r\n switchLabelOnClick(parentElement: string) {\r\n global.ConsoleLogDegug(\"saop-switch-label...\");\r\n global.ConsoleLogDegug(\"saop-switch-label parentElement: \" + parentElement);\r\n\r\n let _frame = $(\"\" + parentElement + \" *>.saop-switch-label\");\r\n _frame.off(\"click\");\r\n _frame.click(function (event: any) {\r\n let _switchLabel = event.target;\r\n let _atrCheckBox = \"#\"+$(_switchLabel).attr(\"for\");\r\n let _checkBox = $(_atrCheckBox);\r\n $(_checkBox).prop( 'checked', 'flase');\r\n });\r\n }\r\n\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { global } from \"../Common/saop-common\";\r\n\r\nexport class SaopFloatingLabel {\r\n\r\n init() {\r\n let _this = this;\r\n $('.has-float-label > .form-control').off(\"focus\",_this.saopInputOnFocus);\r\n $('.has-float-label > .form-control').on(\"focus\",_this.saopInputOnFocus);\r\n\r\n $('.has-float-label > .form-control').off(\"blur\",_this.saopInputOnBlur);\r\n $('.has-float-label > .form-control').on(\"blur\",_this.saopInputOnBlur);\r\n \r\n $('.has-float-label > .form-control').off(\"focusout\",_this.saopInputOnChange);\r\n $('.has-float-label > .form-control').on(\"focusout\",_this.saopInputOnChange);\r\n\r\n }\r\n\r\n saopInputOnChange(e:any) {\r\n global.ConsoleLogDegug(\"saop-floating-label...saopInputOnChange\");\r\n let htmlElement = e.target;\r\n let _node = $(\"#\"+htmlElement.id);\r\n if (_node.length > 0){\r\n let _parentN = _node.parent();\r\n if (_parentN.length > 0){\r\n _parentN.removeClass(\"saop-error-input\");\r\n let _label = _parentN.find(\".text-danger\");\r\n if (_label.length > 0){\r\n _label.remove();\r\n }\r\n }\r\n }\r\n } \r\n\r\n saopInputOnFocus(e:any) {\r\n global.ConsoleLogDegug(\"saop-floating-label...\");\r\n //barvanje \"floating label\"\r\n let htmlElement = e.target;\r\n htmlElement.parentElement.querySelector('.saop-floating-label').classList.add(\"saop-txt-primary\");\r\n }\r\n \r\n saopInputOnBlur(e:any) {\r\n global.ConsoleLogDegug(\"saop-floating-label...\");\r\n //barvanje \"floating label\" on input blur (focus lost) nazaj v sivo (remove razred \"saop-txt-primary\")\r\n let htmlElement = e.target;\r\n htmlElement.parentElement.querySelector('.saop-floating-label').classList.remove(\"saop-txt-primary\");\r\n }\r\n\r\n\r\n setCaptionAsRequired(labelId:string,required:boolean):void{\r\n let _element = $(labelId);\r\n let _elementVal = _element.text().toString();\r\n _elementVal = _elementVal.replace(\"*\",\"\");\r\n if (required) {\r\n _element.text(_elementVal+\"*\");\r\n } else {\r\n _element.text(_elementVal);\r\n }\r\n } \r\n\r\n //\r\n}","/// \r\nimport { SaopInputWFL,SaopInputWFLProperties } from './saop-input-wfl'\r\nimport { SaopselectWFL } from './saop-select-wfl'\r\n\r\nexport class SaopWebGridFilter {\r\n public id:string = \"wgf1\";\r\n public modalFilterArray: any = [];\r\n //This function initializes the content inside the filter modal\r\n configFilter(libName:string,htmlTable: any, colArray: any) {\r\n let _this = this;\r\n setTimeout(function () {\r\n var tableName = htmlTable[0].id;\r\n var columns = htmlTable.api().columns();\r\n $.each(colArray, function (i, arg) {\r\n let _colNo = arg.toString();\r\n $('#' + tableName + ' th:eq(' + _colNo + ')').attr(\"id\",\"column-header-\"+ _colNo +\"\");\r\n $('#' + tableName + ' th:eq(' + _colNo + ')').append('');\r\n $('#' + tableName + ' th:eq(' + _colNo + ')').append(\"   \");\r\n $('#' + tableName + ' th:eq(' + _colNo + ')').append(\"
\");\r\n });\r\n\r\n var template =\r\n '
' +\r\n '
' +\r\n '{0}
' +\r\n '
' +\r\n 'V redu' + \r\n 'Zbriši' +\r\n 'Prekliči' +\r\n '
' +\r\n '
';\r\n\r\n $.each(colArray, function (index: any, value: any) {\r\n columns.every(function (i: any) {\r\n if (value === i) {\r\n var column = this, \r\n content = '';//'
';\r\n var columnName = $(this.header()).text().replace(/\\s+/g, \"_\");\r\n var distinctArray: any[] = [];\r\n column.data().each(function (d: string, j: any) {\r\n if (distinctArray.indexOf(d) == -1) {\r\n var id = tableName + \"_\" + columnName + \"_\" + j; // onchange=\"formatValues(this,' + value + ');\r\n content += '
';\r\n distinctArray.push(d);\r\n }\r\n }); \r\n var newTemplate = $(template.replace('{0}', content).replace('{1}', value).replace('{1}', value).replace('{2}', tableName).replace('{2}', tableName));\r\n $('body').append(newTemplate);\r\n _this.modalFilterArray[tableName + \"_\" + value] = newTemplate;\r\n content = '';\r\n }\r\n });\r\n });\r\n }, 50);\r\n\r\n }\r\n\r\n\r\n //User to show the filter modal\r\n showFilter(e: any, index: any) {\r\n $('.modalFilter').hide();\r\n $(this.modalFilterArray[index]).css({ left: 0, top: 0 });\r\n var th = $(e.target).parent();\r\n var pos = th.offset();\r\n let arrayItem = this.modalFilterArray[index];\r\n //$(this.modalFilterArray[index]).width(th.width() * 0.75);\r\n $(arrayItem).css({ 'left': pos.left, 'top': pos.top, 'min-width':(th.width() * 0.75) });\r\n $(arrayItem).show();\r\n e.stopPropagation();\r\n }\r\n\r\n updateTableHeaderStatus(tableId:string,columnId:string,activeFilter:boolean){\r\n let _colFilterId = columnId+\"-filter\";\r\n let _colFilter = $(tableId).find(_colFilterId)[0];\r\n let _colFilterAtr = _colFilter.getAttribute(\"class\");\r\n if(activeFilter){\r\n _colFilterAtr.replace(\"saop-img-filter\", \"saop-img-filter saop-cl-blue\");\r\n } else {\r\n _colFilterAtr.replace(\"saop-img-filter saop-cl-blue\", \"saop-img-filter\");\r\n \r\n }\r\n }\r\n\r\n //This function is to use the searchbox to filter the checkbox\r\n filterValues(node: any) {\r\n var searchString = $(node).val().toString().toUpperCase().trim();\r\n var rootNode = $(node).parent();\r\n if (searchString == '') {\r\n rootNode.find('div').show();\r\n } else {\r\n rootNode.find(\"div\").hide();\r\n rootNode.find(\"div:contains('\" + searchString + \"')\").show();\r\n }\r\n }\r\n\r\n //Execute the filter on the table for a given column\r\n performFilter(node: any, i: any, tableId: any) {\r\n var rootNode = $(node).parent().parent();\r\n var searchString = '', counter = 0;\r\n\r\n rootNode.find('input:checkbox').each(function (index: any, checkbox: any) {\r\n if (checkbox.checked) {\r\n searchString += (counter == 0) ? checkbox.value : '|' + checkbox.value;\r\n counter++;\r\n }\r\n });\r\n\r\n let _colId = \"#column-header-\"+i.toString();\r\n if(counter > 0){\r\n this.updateTableHeaderStatus('#' +tableId,_colId,true);\r\n } else {\r\n this.updateTableHeaderStatus('#' +tableId,_colId,false);\r\n }\r\n\r\n $('#' + tableId).DataTable().column(i).search(\r\n searchString,\r\n true, false\r\n ).draw();\r\n rootNode.hide();\r\n }\r\n\r\n //Removes the filter from the table for a given column\r\n clearFilter(node: any, i: any, tableId: any) {\r\n var rootNode = $(node).parent().parent();\r\n rootNode.find(\".filterSearchText\").val('');\r\n rootNode.find('input:checkbox').each(function (index: any, checkbox: any) {\r\n checkbox.checked = false;\r\n $(checkbox).parent().show();\r\n });\r\n\r\n let _colId = \"#column-header-\"+i.toString();\r\n this.updateTableHeaderStatus('#' +tableId,_colId,false);\r\n\r\n $('#' + tableId).DataTable().column(i).search(\r\n '',\r\n true, false\r\n ).draw();\r\n rootNode.hide();\r\n }\r\n\r\n hideFilter(node: any, i: any, tableId: any) {\r\n $('.modalFilter').hide();\r\n }\r\n\r\n setResizeEvent(gridId:string){\r\n var _tableDiv = $(\"table\"+gridId+\" th\") as any;\r\n\t var thHeight = $(\"table\"+gridId+\" th:first\").height();\r\n\t _tableDiv.resizable({\r\n\t\t handles: \"e\",\r\n\t\t minHeight: thHeight,\r\n\t\t maxHeight: thHeight,\r\n\t\t minWidth: 40,\r\n\t\t resize: function (event:any, ui:any) {\r\n console.log(\"resize...\");\r\n var sizerid = \"#\" + $(event.target).attr(\"id\") + \"-sizer\";\r\n $(sizerid).width(ui.size.width);\r\n\t\t }\r\n\t }); \r\n }\r\n\r\n setSortElementEvent(gridId: string):void{\r\n let _this = this;\r\n $(gridId).on('click', 'th', function () {\r\n _this.setSortElement(gridId);\r\n });\r\n }\r\n \r\n setSortElement(gridId: string):void {\r\n $(\"\" + gridId + \" thead:first th\").each(function (i, th) {\r\n let _col = $(th);\r\n let _colId = \"#\"+_col.attr('id');\r\n //let _sortType = _col.attr(\"column-sort\");\r\n let _colIconIdUp = _colId+\"-icon-up\";\r\n let _colIconId = _colId+\"-icon\";\r\n let _colIconUpElement = $(gridId+' '+_colIconIdUp);\r\n let _colIconElement = $(gridId+' '+_colIconId);\r\n let cls = $(th).attr('class');\r\n\r\n //if (_sortType != null) {\r\n if (cls != null && cls.indexOf(\"no-sort\") >= 0) {\r\n _colIconUpElement.removeClass(\"saop-img-arrow-down\");\r\n _colIconElement.removeClass(\"saop-img-arrow-up\");\r\n _colIconElement.removeClass(\"saop-img-arrow-down\"); \r\n _colIconElement.removeClass(\"saop-cl-blue\"); \r\n } \r\n else if (cls != null && cls.indexOf(\"sorting_asc\") >= 0) {\r\n _colIconUpElement.removeClass(\"saop-img-arrow-down\");\r\n _colIconElement.removeClass(\"saop-img-arrow-down\");\r\n _colIconElement.addClass(\"saop-img-arrow-up saop-cl-blue\");\r\n } else if (cls != null && cls.indexOf(\"sorting_desc\") >= 0) {\r\n _colIconUpElement.removeClass(\"saop-img-arrow-down\");\r\n _colIconElement.removeClass(\"saop-img-arrow-up\");\r\n _colIconElement.addClass(\"saop-img-arrow-down saop-cl-blue\"); \r\n } else {\r\n _colIconElement.removeClass(\"saop-img-arrow-up\");\r\n _colIconElement.removeClass(\"saop-img-arrow-down\"); \r\n _colIconElement.removeClass(\"saop-cl-blue\"); \r\n _colIconElement.addClass(\"saop-img-arrow-up\");\r\n _colIconUpElement.addClass(\"saop-img-arrow-down\");\r\n }\r\n //}\r\n });\r\n } \r\n\r\n configSimpleFilter(dataTable: any):void {\r\n let _this = this;\r\n let tableId = \"#\"+dataTable[0].id;\r\n let _iCount = 0;\r\n var _filterEnable = false;\r\n let _th_columns = $(tableId).find('th');\r\n _th_columns.each( \r\n function () {\r\n _iCount = _iCount + 1;\r\n let _element = $(this);\r\n let _filterType = _element.attr(\"column-filter\"); \r\n let _nosort = _element.hasClass(\"no-sort\");\r\n let _actionColumn = _element.hasClass(\"saop-table-th-last\");\r\n _element.attr(\"id\",\"column-header-\"+ _iCount +\"\");\r\n _element.css(\"outline\",\"none\");\r\n let col_title = _element.text();\r\n //let col_max_width = col_title.length * 7;\r\n _element.text(\"\");\r\n\r\n //_element.append(\"
\"+col_title+\"
\");\r\n _element.append(\"
\"+col_title+\"
\");\r\n \r\n if (_filterType != null && _filterType.toLowerCase() == \"text\"){\r\n _filterEnable = true;\r\n } else if (_filterType != null && _filterType.toLowerCase() == \"dropdown\"){\r\n _filterEnable = true;\r\n }\r\n\r\n if (_actionColumn != null && _actionColumn == true){\r\n _nosort = true;\r\n }\r\n\r\n if (_nosort == null ||_nosort == false){\r\n _element.append(\"
\");\r\n _element.append(\"
\"); \r\n }\r\n _element.append(\"
\");\r\n }\r\n );\r\n\r\n if (_filterEnable) {\r\n $(tableId+' thead tr')\r\n .clone(true)\r\n .addClass('filters')\r\n .appendTo(tableId+' thead');\r\n\r\n // Setup - add a text input to each footer cell\r\n let _filters = $(tableId).find('.filters');\r\n let _filters_th = _filters.find('th');\r\n _iCount = 0;\r\n _filters_th.each( \r\n function () {\r\n _iCount = _iCount + 1;\r\n let _element = $(this);\r\n _element.off();\r\n\r\n _element.html(\"\");\r\n\r\n let _filterType = _element.attr(\"column-filter\");\r\n\r\n while(_element[0].attributes.length > 0)\r\n _element[0].removeAttribute(_element[0].attributes[0].name);\r\n\r\n let _colId = \"col_\"+_iCount.toString(); \r\n _element.attr(\"id\",_colId);\r\n let _inputId = _colId+\"_filter\"; \r\n let title = _element.text();\r\n \r\n if (_filterType != null && _filterType.toLowerCase() == \"text\"){\r\n let _inputE = new SaopInputWFL({id:_inputId,caption:title,placeholder:title}).getInnerHtml();\r\n _element.html(_inputE);\r\n } else if (_filterType != null && _filterType.toLowerCase() == \"dropdown\"){\r\n let _selectId = _colId+\"_select\"; \r\n let selectHtml = new SaopselectWFL({id:_selectId,caption:\"\",placeholder:\"\"}).getInnerHtml();\r\n let select = $(selectHtml); \r\n //\r\n\r\n let _index = _iCount;\r\n _index = _index - 1;\r\n\r\n dataTable.DataTable()\r\n .column(_index+':visible')\r\n .data()\r\n .unique()\r\n .sort()\r\n .each(function (d:any, j:any) {\r\n if (d.length > 0){\r\n let _content = d;\r\n let _firstChar = _content[0];\r\n if (_firstChar.charCodeAt(0) > 1000) {_content = _content.replace(_firstChar+\" \",\"\");}\r\n select.find('select').last().append('');\r\n }\r\n });\r\n\r\n _element.append(select);\r\n } \r\n } \r\n );\r\n\r\n // Apply the filter\r\n $(tableId+\" thead input\").on( 'keyup change', function () {\r\n const target = event.target as HTMLInputElement;\r\n let _index = $(this).parent().parent().index();\r\n dataTable.DataTable()\r\n .column(_index+':visible')\r\n .search( target.value )\r\n .draw();\r\n\r\n var val = $.fn.dataTable.util.escapeRegex(target.value);\r\n dataTable.DataTable().search(val ? '^' + val + '$' : '', true, false).draw();\r\n\r\n } ); \r\n \r\n // Apply the dropdown filter\r\n $(tableId+\" thead select\").on( 'change', function () {\r\n const target = event.target as HTMLInputElement;\r\n let _index = $(this).parent().parent().index();\r\n var val = $.fn.dataTable.util.escapeRegex(target.value);\r\n dataTable.DataTable()\r\n .column(_index+':visible')\r\n .search(val ? '^' + val + '$' : '', true, false)\r\n .draw();\r\n } ); \r\n\r\n //\r\n }\r\n\r\n\r\n }\r\n\r\n configSimpleSort(gridId: string):void {\r\n this.setSortElement(gridId);\r\n this.setSortElementEvent(gridId);\r\n }\r\n\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","/// \r\nimport { global } from \"../Common/saop-common\";\r\nimport { SaopWebGridFilter } from \"../Components/saop-grid-filter\";\r\nimport { DataTables } from \"../@types/data-tables/types\";\r\nimport { SaopTranslationService } from '../Core/saop-translate';\r\n\r\n\r\n// function statusFormatter(row: number, cell: number, value: any, columnDef: Slick.Column, dataContext: Slick.SlickData) {\r\n// if (value == null || value === \"\") {\r\n// return \"-\";\r\n// } else if (value < 50) {\r\n// return \"\" + value + \"%\";\r\n// } else {\r\n// return \"\" + value + \"%\";\r\n// }\r\n// }\r\n\r\nexport interface SaopWebGridToolbar {\r\n id?:string,\r\n caption:string,\r\n buttons?:SaopWebGridToolbarButton[]\r\n itemsTemplateId?: string;\r\n} \r\n\r\nexport interface SaopWebGridToolbarButton {\r\n id:string,\r\n caption :string, \r\n class? :string,\r\n attributes?:string,\r\n onClickEvent?:string,\r\n template?: string;\r\n} \r\n\r\nexport interface SaopWebGridTogglePanel {\r\n enabled:boolean\r\n} \r\n\r\nexport interface SaopWebGridProperties {\r\n gridId:string\r\n ,css?:string\r\n ,togglePanel?:SaopWebGridTogglePanel\r\n ,toolbar?:SaopWebGridToolbar \r\n ,dataTable?:SaopWebDataTable\r\n}\r\n\r\nexport interface SaopWebDataTable {\r\n enabled:boolean\r\n ,columnDefsSettings?: DataTables.ColumnDefsSettings[]\r\n ,ordering?:boolean\r\n ,columns?:any[]\r\n ,data?: any\r\n ,order?: Array<(number | string)> | Array>\r\n}\r\n\r\nexport class SaopWebGrid {\r\n private _properties:SaopWebGridProperties\r\n private _tableDiv:HTMLTableElement;\r\n private _translationService: SaopTranslationService;\r\n //\r\n public libName: string; \r\n public webGridFilter:SaopWebGridFilter;\r\n public dataTable: DataTables.Api;\r\n public markedColumnCheckbox: JQuery;\r\n\r\n constructor(libName: string) {\r\n this.libName = libName;\r\n this.webGridFilter = new SaopWebGridFilter();\r\n this._translationService = new SaopTranslationService();\r\n } \r\n\r\n setTerminologyList(){\r\n let _terminology: string[] = ['Ni podatkov za prikaz.'];\r\n this._translationService.setTranslationsList(_terminology);\r\n }\r\n\r\n //\r\n init(gridProp:SaopWebGridProperties) {\r\n this._properties = gridProp;\r\n this._tableDiv = document.querySelector(gridProp.gridId) as HTMLTableElement;\r\n //\r\n let _togglePanelDefault = {enabled:true};\r\n gridProp.togglePanel = {..._togglePanelDefault, ...gridProp.togglePanel}\r\n if (global.isUnDefined(gridProp.togglePanel)){\r\n gridProp.togglePanel = _togglePanelDefault;\r\n } \r\n //\r\n\r\n this.webGridFilter.id = gridProp.gridId+\"filter\";\r\n this.generateHtmlTable();\r\n this.addGridToolbar();\r\n // det defaults\r\n let _Msg_emptyTable = this._translationService.translate(\"Ni podatkov za prikaz.\")\r\n\r\n let _dataTableDef = {enabled:true,ordering:true};\r\n gridProp.dataTable = {..._dataTableDef, ...gridProp.dataTable}\r\n\r\n if (global.isUnDefined(gridProp.dataTable)){\r\n gridProp.dataTable = gridProp.dataTable;\r\n } \r\n\r\n let _columnDefsSettingsDef = [{orderable: true, targets: \"no-sort\"}];\r\n gridProp.dataTable.columnDefsSettings = {..._columnDefsSettingsDef,...gridProp.dataTable.columnDefsSettings}\r\n\r\n if (global.isUnDefined(gridProp.dataTable.columnDefsSettings)){\r\n gridProp.dataTable.columnDefsSettings = _columnDefsSettingsDef;\r\n }\r\n //\r\n if (!global.isUnDefined(this._properties.dataTable) \r\n && this._properties.dataTable.enabled\r\n ){\r\n let _this = this;\r\n this.dataTable = \r\n $(gridProp.gridId).DataTable(\r\n {\r\n \"paging\": false\r\n , \"searching\": true\r\n ,\"autoWidth\": true\r\n ,orderCellsTop: true\r\n //, \"dom\": \"Rlfrtip\"\r\n , initComplete: function () {\r\n if (gridProp.dataTable.ordering){\r\n _this.webGridFilter.configSimpleFilter(this); \r\n _this.webGridFilter.configSimpleSort(_this._properties.gridId); \r\n }\r\n //if(!isUnDefined(_this._properties.dataTable.filters)) {\r\n // _this.webGridFilter.configFilter(_this.libName,this, _this._properties.dataTable.filters);\r\n //}\r\n }\r\n ,order: _this._properties.dataTable.order\r\n // ,ajax: function (data, callback, settings) {\r\n // callback({ data: data }) //reloads data \r\n // } \r\n ,columnDefs: _this._properties.dataTable.columnDefsSettings \r\n ,ordering : gridProp.dataTable.ordering \r\n ,language : {emptyTable:_Msg_emptyTable,zeroRecords:_Msg_emptyTable}\r\n }\r\n ); \r\n //\r\n $(gridProp.gridId+\"_filter\").remove();\r\n $(gridProp.gridId+\"_info\").remove(); \r\n this.webGridFilter.setResizeEvent(this._properties.gridId);\r\n //\r\n }\r\n \r\n //\r\n\r\n }\r\n\r\n addToolbarButtons(gridPanel: JQuery,buttons:SaopWebGridToolbarButton[]){\r\n if(global.isUnDefined(buttons) == false){\r\n buttons.forEach(_button => {\r\n var buttonTemplate = \r\n `\r\n
\r\n \r\n
\r\n `;\r\n\r\n if (_button.template != null) {\r\n buttonTemplate = _button.template;\r\n }\r\n\r\n gridPanel.find(\"#toolbarButtons\").append(buttonTemplate); \r\n });\r\n }\r\n }\r\n\r\n generateHtmlTable() {\r\n this.generateTableBody(); \r\n this.generateTableHead();\r\n }\r\n\r\n generateTableHead() {\r\n if (!global.isUnDefined(this._properties.dataTable)){\r\n if(!global.isUnDefined(this._properties.dataTable.columns)){\r\n let thead = this._tableDiv.createTHead();\r\n let row = thead.insertRow();\r\n for (let key of this._properties.dataTable.columns) {\r\n let th = document.createElement(\"th\");\r\n let text = document.createTextNode(key.name);\r\n th.appendChild(text);\r\n row.appendChild(th);\r\n }\r\n }\r\n }\r\n }\r\n \r\n generateTableBody() {\r\n if (!global.isUnDefined(this._properties.dataTable)){\r\n if (!global.isUnDefined(this._properties.dataTable.data)){\r\n for (let element of this._properties.dataTable.data) {\r\n let row = this._tableDiv.insertRow();\r\n for (let key in element) {\r\n let cell = row.insertCell();\r\n let text = document.createTextNode(element[key]);\r\n cell.appendChild(text);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addGridToolbar() {\r\n let gridPanel: JQuery;\r\n let _css = global.isUnDefined(this._properties.css) == false ? this._properties.css :\"\";\r\n\r\n let gridPanelTemplate = `\r\n
\r\n
\r\n
\r\n `;\r\n if (!global.isUnDefined(this._properties.toolbar)) {\r\n if (global.isUnDefined(this._properties.toolbar.id)) {\r\n this._properties.toolbar.id = this._properties.gridId+\"TB\";\r\n }\r\n let gridTogglePanel = ``;\r\n let gridTogglePanelClass = \"\";\r\n let gridBorderBottom = \"\";\r\n if(this._properties.togglePanel.enabled) {\r\n gridTogglePanelClass = \"collapse show\";\r\n gridBorderBottom = \"saop-border-bottom\";\r\n\r\n gridTogglePanel = \r\n `\r\n
\r\n

\r\n ${this._properties.toolbar.caption} \r\n

\r\n
\r\n `; \r\n }\r\n\r\n let _toolbarItems = ``;\r\n if (!global.isUnDefined(this._properties.toolbar.itemsTemplateId)){\r\n let _toolbarItemsTemplate = $(this._properties.toolbar.itemsTemplateId);\r\n if (_toolbarItemsTemplate.length > 0){\r\n _toolbarItems = _toolbarItemsTemplate.html();\r\n _toolbarItemsTemplate.remove();\r\n }\r\n }\r\n\r\n gridPanelTemplate = `\r\n
\r\n ${gridTogglePanel}\r\n
\r\n
\r\n
\r\n ${_toolbarItems}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n `;\r\n }\r\n gridPanelTemplate = gridPanelTemplate.replace(\"#slickGrid#\",this._properties.gridId.replace(\"#\",\"\"));\r\n gridPanel = $(gridPanelTemplate);\r\n if (!global.isUnDefined(this._properties.toolbar)) {\r\n this.addToolbarButtons(gridPanel,this._properties.toolbar.buttons);\r\n }\r\n\r\n let _tableHtml = this._tableDiv;\r\n\r\n $(this._properties.gridId).replaceWith(gridPanel);\r\n\r\n $(this._properties.gridId).replaceWith(_tableHtml);\r\n }\r\n\r\n refreshData(data:any) {\r\n let _this = this;\r\n this.dataTable.clear();\r\n data.each(function( index:any, tr:string ) {\r\n _this.dataTable.row.add($(tr));\r\n });\r\n this.dataTable.draw(); \r\n }\r\n\r\n replaceGridRows(htmlContent:string) {\r\n let _this = this;\r\n this.dataTable.clear();\r\n $(this._properties.gridId+\" > tbody > tr\", $(htmlContent)).each(\r\n function(index:any,tr:any) {\r\n _this.dataTable.row.add($(tr));\r\n }\r\n );\r\n this.dataTable.draw(); \r\n } \r\n\r\n setTabelFoother():void {\r\n $(this._properties.gridId+' body') \r\n }\r\n\r\n initWebGridColumnCheckboxBindClickEvent() {\r\n let _this = this;\r\n this.markedColumnCheckbox = null;\r\n\r\n if (global.isUnDefined(this._tableDiv)) {\r\n return;\r\n }\r\n\r\n $(\"#\" + this._tableDiv.id + \" .saop-td-input-checkbox\").off(\"change\");\r\n $(\"#\" + this._tableDiv.id + \" .saop-td-input-checkbox\").on('change', function (row) {\r\n _this.markedColumnCheckbox = $(\"#\" + _this._tableDiv.id + \" #\" + row.currentTarget.id);\r\n\r\n // odznacimo vse ostale checkboxe\r\n $(\"#\" + _this._tableDiv.id + \" input.saop-td-input-checkbox:not(#\" + row.currentTarget.id + \")\").each(\r\n function () {\r\n $(\"#\" + _this._tableDiv.id + \" #\" + this.id).prop(\"checked\", false);\r\n }\r\n );\r\n\r\n _this.afterColumnCheckboxChanged();\r\n });\r\n }\r\n\r\n afterColumnCheckboxChanged(): void {\r\n\r\n }\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","\r\nexport interface SaopInputWFLProperties {\r\n id:string;\r\n placeholder:string;\r\n caption:string;\r\n}\r\n\r\nexport class SaopInputWFL {\r\n private _inputTemplate:string;\r\n constructor(properties:SaopInputWFLProperties) {\r\n this._inputTemplate = \r\n `\r\n \r\n \r\n \r\n \r\n `; \r\n // this._inputTemplate = \r\n // `\r\n // \r\n // \r\n // \r\n // \r\n // \r\n // `; \r\n }\r\n\r\n getElement():JQuery{\r\n let _element = $(this._inputTemplate);\r\n return _element;\r\n }\r\n\r\n getInnerHtml():string{\r\n return this._inputTemplate;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","\r\n/// \r\nimport { global } from \"../Common/saop-common\";\r\n\r\nexport class SaopInputMask {\r\n\r\n init() {\r\n global.ConsoleLogDegug(\"SaopInputMask.init...\");\r\n var inputDivs = document.querySelectorAll('input[data-inputmask-alias]');\r\n Inputmask().mask(inputDivs);\r\n\r\n $(\".saop-decimal-2\").inputmask({\r\n 'alias': 'decimal',\r\n 'radixPoint': ',',\r\n 'digits': 2,\r\n 'digitsOptional': false,\r\n 'placeholder': '0,00'\r\n });\r\n\r\n $(\".saop-decimal-3\").inputmask({\r\n 'alias': 'decimal',\r\n 'radixPoint': ',',\r\n 'digits': 3,\r\n 'digitsOptional': false,\r\n 'placeholder': '0,000'\r\n }); \r\n\r\n inputDivs.forEach(element => {\r\n global.ConsoleLogDegug(\"element.init......................\" + element.id);\r\n\r\n let spanDiv:any;\r\n let elementAtrr = $(element).attr(\"data-inputmask-alias\");\r\n if (global.isEmpty(elementAtrr)) {return;};\r\n global.ConsoleLogDegug(elementAtrr);\r\n spanDiv = $(element).parent();\r\n if (spanDiv === null) { return;};\r\n if (spanDiv.hasClass(\"has-float-label\")===false) { return;};\r\n global.ConsoleLogDegug(spanDiv.get(0).id);\r\n\r\n let languageAtrr = (String)($(\"#siteLanguage\").val());\r\n global.ConsoleLogDegug(\"language:\"+languageAtrr);\r\n languageAtrr = global.isEmpty(languageAtrr) ? \"sl\" :languageAtrr;\r\n global.ConsoleLogDegug(\"language:\"+languageAtrr);\r\n\r\n if (elementAtrr === \"hh:mm:ss\") {\r\n let iconBtn = $(spanDiv).find(\"#timeIcon\");\r\n global.ConsoleLogDegug(\"clock...\");\r\n\r\n global.ConsoleLogDegug(\"clock.blur.init:\" + element.id);\r\n $(element).blur(function (event: any) {\r\n global.ConsoleLogDegug(\"call.clock.blur:\" + event.target.id);\r\n var controlValue = event.target.value;\r\n if (controlValue.includes(\"h\")) {\r\n event.target.value = \"\";\r\n return;\r\n }\r\n controlValue = controlValue.replace(\"mm\", \"00\");\r\n controlValue = controlValue.replace(\"m\", \"0\");\r\n controlValue = controlValue.replace(\"ss\", \"00\");\r\n controlValue = controlValue.replace(\"s\", \"0\");\r\n event.target.value = controlValue;\r\n });\r\n\r\n global.ConsoleLogDegug(\"clock.click.init:\" + element.id);\r\n $(iconBtn).click(function (event: any) {\r\n global.ConsoleLogDegug(\"clockIcon.clicked:\" + element.id);\r\n var ctrlInputCtrl = $(element).get(0) as HTMLInputElement;\r\n var ctrlInputCtrlStrLength = ctrlInputCtrl.value.length * 2;\r\n ctrlInputCtrl.focus();\r\n ctrlInputCtrl.setSelectionRange(ctrlInputCtrlStrLength, ctrlInputCtrlStrLength);\r\n });\r\n } else if (elementAtrr === \"dd.mm.yyyy\" \r\n // || elementAtrr === \"dd.mm.yyyy hh:mm\" \r\n // || elementAtrr === \"dd.mm.yyyy hh:mm:ss\"\r\n ) {\r\n\r\n let iconBtn = $(spanDiv).find(\"#calendarIcon\");\r\n\r\n global.ConsoleLogDegug(\"calendar...\");\r\n\r\n let datepickerStartDate = new Date();\r\n if ($(element).attr(\"data-enable-select-pastdates\") != undefined) {\r\n if (($(element).attr(\"data-enable-select-pastdates\")).toLowerCase() == 'true') {\r\n datepickerStartDate = null;\r\n }\r\n }\r\n\r\n if ($(element).attr(\"data-min-start-date\") != undefined) {\r\n var datepickerStartDate1 = $(element).attr(\"data-min-start-date\");\r\n datepickerStartDate = global.convertString2Date(datepickerStartDate1, \"dd.mm.yyyy\");\r\n }\r\n\r\n let datepickerEndDate = null;\r\n if ($(element).attr(\"data-max-end-date\") != undefined) {\r\n datepickerEndDate = $(element).attr(\"data-max-end-date\"); \r\n datepickerEndDate = global.convertString2Date(datepickerEndDate, \"dd.mm.yyyy\");\r\n }\r\n\r\n $(element).datepicker({\r\n startDate: datepickerStartDate,\r\n endDate: datepickerEndDate,\r\n autoclose: true,\r\n keyboardNavigation: false,\r\n weekStart: 1,\r\n format: \"dd.mm.yyyy\",\r\n language: languageAtrr,\r\n orientation: \"bottom right\",\r\n showOnFocus:false\r\n //forceParse:false,\r\n }); \r\n\r\n $(iconBtn).click(function() \r\n {\r\n global.ConsoleLogDegug(\"calendar...click\");\r\n var datepickerInputCtrl = $(element).get(0) as HTMLInputElement;\r\n var datepickerInputCtrlStrLength = datepickerInputCtrl.value.length * 2;\r\n //datepickerInputCtrl.focus();\r\n $(element).datepicker(\"show\");\r\n datepickerInputCtrl.setSelectionRange(datepickerInputCtrlStrLength, datepickerInputCtrlStrLength)\r\n }); \r\n \r\n } else if (elementAtrr === \"dd.mm.yyyy hh:mm\") {\r\n global.ConsoleLogDegug(\"datetimepicker hh:mm ...\");\r\n \r\n let iconBtn = $(spanDiv).find(\"#calendarIcon\");\r\n //\r\n $(element)\r\n .bind('keydown',function(e){\r\n\r\n e.stopImmediatePropagation();\r\n }) \r\n .datetimepicker({\r\n format: 'DD.MM.YYYY H:mm',\r\n locale: languageAtrr,\r\n showTodayButton: true,\r\n });\r\n\r\n $(element).off(\"focus\");\r\n\r\n $(iconBtn).click(function() \r\n {\r\n $(element).data(\"DateTimePicker\").show();\r\n }); \r\n \r\n } else if (elementAtrr === \"dd.mm.yyyy hh:mm:ss\") {\r\n global.ConsoleLogDegug(\"datetimepicker hh:mm:ss ...\");\r\n \r\n let iconBtn = $(spanDiv).find(\"#calendarIcon\");\r\n //\r\n $(element)\r\n .bind('keydown',function(e){\r\n\r\n e.stopImmediatePropagation();\r\n }) \r\n .datetimepicker({\r\n format: 'DD.MM.YYYY H:mm:ss',\r\n locale: languageAtrr,\r\n showTodayButton: true,\r\n });\r\n\r\n $(element).off(\"focus\");\r\n //$(element).off(\"keydown\");\r\n // .on('dp.hide', function(e){\r\n // console.log('dp.hide');\r\n // }) \r\n // .on('dp.show', function(e){\r\n // console.log('dp.show');\r\n // }); \r\n //\r\n $(iconBtn).click(function() \r\n {\r\n // global.ConsoleLogDegug(\"calendar...click\");\r\n // if ($(document).find(\".datepicker-dropdown\").is(\":visible\")) {\r\n $(element).data(\"DateTimePicker\").show();\r\n }); \r\n \r\n // $(element).focus(function (event: any) {\r\n // $(element).data(\"DateTimePicker\").hide(); \r\n // }); \r\n } else {\r\n console.log(\"not implemented...\");\r\n }\r\n\r\n });\r\n\r\n this.initMultiDateSelectDatepicker();\r\n\r\n global.ConsoleLogDegug(\"initInputs...done\");\r\n }\r\n\r\n private initMultiDateSelectDatepicker(): void {\r\n global.ConsoleLogDegug(\"SaopInputMask.initMultiDateSelectDatepicker...\");\r\n\r\n var inputDivs = document.querySelectorAll('input[data-izbor-vec-dni]');\r\n\r\n inputDivs.forEach(element => {\r\n global.ConsoleLogDegug(\"element.init......................\" + element.id);\r\n\r\n let spanDiv: any;\r\n spanDiv = $(element).parent();\r\n if (spanDiv === null) { return; };\r\n if (spanDiv.hasClass(\"has-float-label\") === false) { return; };\r\n global.ConsoleLogDegug(spanDiv.get(0).id);\r\n\r\n let languageAtrr = (String)($(\"#siteLanguage\").val());\r\n global.ConsoleLogDegug(\"language:\" + languageAtrr);\r\n languageAtrr = global.isEmpty(languageAtrr) ? \"sl\" : languageAtrr;\r\n global.ConsoleLogDegug(\"language:\" + languageAtrr);\r\n\r\n let iconBtn = $(spanDiv).find(\"#calendarIcon\");\r\n\r\n global.ConsoleLogDegug(\"calendar...\");\r\n\r\n let datepickerStartDate = new Date();\r\n if ($(element).attr(\"data-enable-select-pastdates\") != undefined) {\r\n if (($(element).attr(\"data-enable-select-pastdates\")).toLowerCase() == 'true') {\r\n datepickerStartDate = null;\r\n }\r\n }\r\n\r\n if ($(element).attr(\"data-min-start-date\") != undefined) {\r\n var datepickerStartDate1 = $(element).attr(\"data-min-start-date\");\r\n datepickerStartDate = global.convertString2Date(datepickerStartDate1, \"dd.mm.yyyy\");\r\n }\r\n\r\n let datepickerEndDate = null;\r\n if ($(element).attr(\"data-max-end-date\") != undefined) {\r\n datepickerEndDate = $(element).attr(\"data-max-end-date\");\r\n datepickerEndDate = global.convertString2Date(datepickerEndDate, \"dd.mm.yyyy\");\r\n }\r\n\r\n $(element).datepicker({\r\n startDate: datepickerStartDate,\r\n endDate: datepickerEndDate,\r\n autoclose: false,\r\n multidate: true,\r\n keyboardNavigation: false,\r\n weekStart: 1,\r\n format: \"dd.mm.yyyy\",\r\n language: languageAtrr,\r\n orientation: \"bottom right\"\r\n });\r\n\r\n $(iconBtn).click(function () {\r\n global.ConsoleLogDegug(\"calendar...click\");\r\n var datepickerInputCtrl = $(element).get(0) as HTMLInputElement;\r\n var datepickerInputCtrlStrLength = datepickerInputCtrl.value.length * 2;\r\n datepickerInputCtrl.focus();\r\n datepickerInputCtrl.setSelectionRange(datepickerInputCtrlStrLength, datepickerInputCtrlStrLength)\r\n });\r\n\r\n });\r\n\r\n global.ConsoleLogDegug(\"SaopInputMask.initMultiDateSelectDatepicker...done\");\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { global } from \"../Common/saop-common\";\r\n\r\nexport class MenuSidebar {\r\n\r\n protected _collElement: HTMLElement;\r\n protected _expElement: HTMLElement;\r\n\r\n\r\n init(): void {\r\n global.ConsoleLogDegug(\"MenuSidebar.init...\");\r\n\r\n this._collElement = document.getElementById(\"collapse-icon-coll\");\r\n this._expElement = document.getElementById(\"collapse-icon-exp\");\r\n if (this._collElement != null) this._collElement.style.display = \"none\";\r\n if (this._expElement != null) this._expElement.style.display = \"block\";\r\n\r\n let _this = this;\r\n // Collapse click\r\n $('[data-toggle=sidebar-colapse]').click(\r\n function () {\r\n _this.sidebarCollapse();\r\n }\r\n );\r\n \r\n //menu item click\r\n $(\".saop-bg-item\").click(\r\n function(){\r\n sessionStorage.setItem(\"saop-menu-previous-item-id\", sessionStorage.getItem(\"saop-menu-item-id\")); \r\n sessionStorage.setItem(\"saop-menu-item-id\", this.id); \r\n sessionStorage.setItem(\"saop-menu-subitem-id\", \"0\"); \r\n }\r\n )\r\n \r\n //menu sub-item click\r\n $(\".saop-bg-subitem\").click(\r\n function(){\r\n sessionStorage.setItem(\"saop-menu-subitem-id\", this.id); \r\n }\r\n )\r\n\r\n if (document.getElementById(\"menu-sidebar\") != null)\r\n this.GetSessionStorageValues();\r\n else\r\n this.DeleteSessionStorageValues();\r\n }\r\n\r\n protected sidebarCollapse():void {\r\n global.ConsoleLogDegug(\"MenuSidebar.sidebarCollapse\");\r\n $('#menuTopIconLarge').toggleClass('d-none');\r\n $('#menuTopIconSmall').toggleClass('d-none');\r\n $('.sidebar-menu-caption').toggleClass('d-none');\r\n $('#sidebar-container').toggleClass('sidebar-expanded sidebar-collapsed');\r\n $('.saop-bg-subitems').toggleClass('d-none');\r\n $('#menuCloseButton').toggleClass('d-none');\r\n var SeparatorTitle = $('#sidebar-container');\r\n if (SeparatorTitle.hasClass('sidebar-collapsed')) {\r\n sessionStorage.setItem(\"saop-menu-sidebar-expanded\", \"true\")\r\n this._collElement.style.display = \"block\";\r\n this._expElement.style.display = \"none\";\r\n } else {\r\n sessionStorage.setItem(\"saop-menu-sidebar-expanded\", \"false\")\r\n this._collElement.style.display = \"none\";\r\n this._expElement.style.display = \"block\";\r\n }\r\n }\r\n\r\n protected menuItemCollapse(): void {\r\n global.ConsoleLogDegug(\"MenuSidebar.menuItemCollapse\");\r\n var previousItemID = sessionStorage.getItem(\"saop-menu-item-id\");\r\n var itemID = sessionStorage.getItem(\"saop-menu-item-id\");\r\n var subitemsID = itemID+\"-collapse\";\r\n var subitemID = sessionStorage.getItem(\"saop-menu-subitem-id\");\r\n\r\n var previous = $(\"#\" + previousItemID);\r\n var item = $('#'+itemID);\r\n var subitems = $(\"#\" + subitemsID);\r\n var subitem = $(\"#\"+subitemsID+\">#\"+subitemID);\r\n\r\n previous.removeClass(\"saop-bg-item-selected\");//'un-color' previous item\r\n previous[0].setAttribute(\"aria-expanded\", \"false\");\r\n item[0].setAttribute(\"aria-expanded\", \"true\");\r\n item.addClass(\"saop-bg-item-selected\");//color item\r\n subitems.addClass('show');//expand collapse\r\n subitem.addClass(\"saop-bg-subitem-selected\");//color subitem\r\n }\r\n\r\n protected GetSessionStorageValues():void {\r\n global.ConsoleLogDegug(\"MenuSidebar.GetSessionStorageValues\");\r\n //defaults\r\n if (sessionStorage.getItem(\"saop-menu-item-id\") == null) {\r\n sessionStorage.setItem(\"saop-menu-sidebar-expanded\", null);\r\n sessionStorage.setItem(\"saop-menu-previous-item-id\", null);\r\n sessionStorage.setItem(\"saop-menu-item-id\", \"namizje\"); \r\n sessionStorage.setItem(\"saop-menu-subitem-id\", \"0\"); \r\n }\r\n\r\n //sidebar expanded/contracted\r\n if (sessionStorage.getItem(\"saop-menu-sidebar-expanded\") == \"true\") {\r\n this.sidebarCollapse();\r\n }\r\n\r\n //selected-menu item\r\n this.menuItemCollapse()\r\n }\r\n\r\n protected DeleteSessionStorageValues():void {\r\n global.ConsoleLogDegug(\"MenuSidebar.DeleteSessionStorageValues\");\r\n\r\n sessionStorage.removeItem(\"saop-menu-sidebar-expanded\");\r\n sessionStorage.removeItem(\"saop-menu-previous-item-id\");\r\n sessionStorage.removeItem(\"saop-menu-item-id\");\r\n sessionStorage.removeItem(\"saop-menu-subitem-id\");\r\n }\r\n}\r\n\r\n\r\n\r\n","import { global } from \"../Common/saop-common\";\r\n\r\nexport enum SaopMsgDlgType {\r\n mtInformation = 1\r\n ,mtWarning = 2\r\n ,mtError = 3\r\n //, mtConfirmation, mtCustom\r\n}\r\n\r\nexport enum SaopMsgDlgButton {\r\n mbNone = 0\r\n ,mbOK = 1\r\n ,mbCancel = 2\r\n ,mbYes = 3\r\n ,mbNo = 4\r\n}\r\n\r\nexport interface SaopMsgDlgEvent {\r\n parent:any;\r\n data:any;\r\n}\r\n\r\ntype SaopMsgDlgButtons = Array;\r\n\r\n\r\n\r\nexport class SaopMessageDlg {\r\n private _sender:SaopMsgDlgEvent;\r\n public onOk: (sender:any) => any = null;\r\n public onCancel: (sender:any) => any = null;\r\n public onYes: (sender:any) => any = null;\r\n public onNo: (sender:any) => any = null;\r\n\r\n constructor(sender:SaopMsgDlgEvent){\r\n this._sender = sender;\r\n }\r\n\r\n Show(Msg:string,Title:string,DlgType:SaopMsgDlgType = SaopMsgDlgType.mtInformation,Buttons:SaopMsgDlgButtons = [SaopMsgDlgButton.mbOK]):SaopMsgDlgButton{\r\n console.log(\"message:\"+Msg);\r\n console.log(\"title:\"+Title);\r\n let _this = this;\r\n\r\n let titleDiv = $('#alert-modal-title-div');\r\n let bodyTag = $('#alert-modal-body');\r\n\r\n if (DlgType == SaopMsgDlgType.mtInformation){\r\n $(\"#alert-modal-title-div\").css(\"background-color\",\"white\");\r\n } else if (DlgType == SaopMsgDlgType.mtError) {\r\n $(\"#alert-modal-title-div\").css(\"background-color\",\"#D82C25\");\r\n } else {\r\n $(\"#alert-modal-title-div\").css(\"background-color\",\"silver\"); \r\n }\r\n\r\n if (!global.isEmpty(Title)){\r\n titleDiv.html(Title);\r\n }\r\n \r\n bodyTag.html(Msg);\r\n\r\n if (Buttons !== null) {\r\n let _element_mbOK = Buttons.find(element => element === SaopMsgDlgButton.mbOK);\r\n if (global.isUnDefined(_element_mbOK)) {\r\n $(\"#btnAlertOK\").remove();\r\n } else {\r\n $(\"#btnAlertOK\").off(\"click\");\r\n $(\"#btnAlertOK\").click(\r\n function () {\r\n if (!global.isUnDefined(_this.onOk)){\r\n _this.onOk(_this._sender);\r\n }\r\n return SaopMsgDlgButton.mbOK;\r\n }\r\n ); \r\n }\r\n //\r\n let _element_mbCancel = Buttons.find(element => element === SaopMsgDlgButton.mbCancel);\r\n if (global.isUnDefined(_element_mbCancel)) {\r\n $(\"#btnAlertCancel\").remove();\r\n } else {\r\n $(\"#btnAlertCancel\").off(\"click\");\r\n $(\"#btnAlertCancel\").click(\r\n function () {\r\n if (!global.isUnDefined(_this.onCancel)){\r\n _this.onCancel(_this._sender);\r\n }\r\n return SaopMsgDlgButton.mbCancel;\r\n }\r\n ); \r\n }\r\n //\r\n let _element_mbYes = Buttons.find(element => element === SaopMsgDlgButton.mbYes);\r\n if (global.isUnDefined(_element_mbYes)) {\r\n $(\"#btnAlertYes\").remove();\r\n } else {\r\n $(\"#btnAlertYes\").off(\"click\");\r\n $(\"#btnAlertYes\").click(\r\n function () {\r\n if (!global.isUnDefined(_this.onYes)){\r\n _this.onYes(_this._sender);\r\n }\r\n return SaopMsgDlgButton.mbYes;\r\n }\r\n ); \r\n } \r\n //\r\n let _element_mbNo = Buttons.find(element => element === SaopMsgDlgButton.mbNo);\r\n if (global.isUnDefined(_element_mbNo)) {\r\n $(\"#btnAlertNo\").remove();\r\n } else {\r\n $(\"#btnAlertNo\").off(\"click\");\r\n $(\"#btnAlertNo\").click(\r\n function () {\r\n if (!global.isUnDefined(_this.onNo)){\r\n _this.onNo(_this._sender);\r\n }\r\n return SaopMsgDlgButton.mbNo;\r\n }\r\n ); \r\n } \r\n } else {\r\n $(\"#btnAlertOK\").remove();\r\n $(\"#btnAlertCancel\").remove();\r\n $(\"#btnAlertYes\").remove();\r\n $(\"#btnAlertNo\").remove();\r\n return SaopMsgDlgButton.mbNone;\r\n }\r\n\r\n $('#alert-modal').on('hidden.bs.modal', function (e) {\r\n $(\"#alert-modal-btn-ok\").unbind(\"click\");\r\n $(this).modal('dispose');\r\n })\r\n \r\n $('#alert-modal').modal('show');\r\n global.setModalFormZIndex('#alert-modal'); \r\n }\r\n\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","/// \r\nimport { SaopTranslationService } from '../Core/saop-translate';\r\n\r\nimport { global } from \"../Common/saop-common\";\r\n\r\nexport interface SaopMultiselectParams {\r\n target:string,\r\n selectAll?:boolean\r\n}\r\n\r\nexport interface SaopMultiselectOptions {\r\n templatesButton?: string\r\n}\r\n\r\nexport class SaopMultiselect {\r\n private _libName:string;\r\n private _translationService: SaopTranslationService;\r\n private _caption: string = \"Skupina\";\r\n private _multiSelectObject: any;\r\n private _options: SaopMultiselectOptions;\r\n //\r\n public msContainer:JQuery;\r\n public msButton: JQuery;\r\n\r\n public msContainerLabel:JQuery;\r\n public selectedCB:any;\r\n\r\n constructor(libName:string = \"\", options:SaopMultiselectOptions = null) {\r\n global.ConsoleLogDegug(\"SaopMultiselect\");\r\n this._translationService = new SaopTranslationService();\r\n this.setOptions(options);\r\n } \r\n\r\n setOptions(options: SaopMultiselectOptions): void {\r\n // first set default options\r\n this._options = {\r\n templatesButton: ''\r\n }\r\n\r\n if (options != null) {\r\n this._options = options;\r\n if (options.templatesButton != null) {\r\n this._options.templatesButton = options.templatesButton;\r\n }\r\n }\r\n }\r\n\r\n setTerminologyList() {\r\n let _terminology: string[] = ['Išči', 'Vsi', 'Izberi prikazane', 'izbranih'];\r\n if (!global.isEmpty(this._caption)) {\r\n _terminology = ['Išči', 'Vsi', 'Izberi prikazane', 'izbranih', this._caption];\r\n } \r\n this._translationService.setTranslationsList(_terminology);\r\n }\r\n\r\n bindDiv(elemet:any){\r\n this.msContainer = $(elemet.$container);\r\n this.msButton = $(elemet.$button);\r\n this.msContainerLabel = this.msContainer.find(\"#containerLabel\");\r\n //this.selectedCB = elemet.$select;\r\n\r\n if (this.selectedCB.val().length){\r\n this.setMsFloatingLabel(false);\r\n } else {\r\n this.setMsFloatingLabel(true);\r\n } \r\n }\r\n\r\n setMsFloatingLabel(isEmpry:boolean){\r\n if (isEmpry){\r\n this.msContainerLabel.addClass('ms-float-label-empty');\r\n this.msContainerLabel.removeClass('ms-float-label-selected');\r\n } else {\r\n this.msContainerLabel.removeClass('ms-float-label-empty');\r\n this.msContainerLabel.addClass('ms-float-label-selected'); \r\n } \r\n }\r\n\r\n onInitializedControl(element: any) {\r\n global.ConsoleLogDegug(\"SaopMultiselect.onInitializedControl\");\r\n\r\n if (this.selectedCB.hasClass(\"input-validation-error\")) {\r\n this.msButton.addClass(\"saop-error-input\");\r\n this.msContainerLabel.addClass(\"saop-error-input-text\");\r\n }\r\n\r\n this.afterInitializedControl(element);\r\n }\r\n\r\n init(target: string = \"\", caption = \"\" ){\r\n global.ConsoleLogDegug(\"SaopMultiselect.init\");\r\n\r\n this._caption = caption;\r\n\r\n // poiscemo prevode (tudi za this._caption)\r\n this.setTerminologyList();\r\n\r\n if (global.isEmpty(target)) {target = \".saop-multiselect\";}\r\n\r\n this.selectedCB = $(target);\r\n\r\n // ali ima selectedCB data-caption\r\n let selectCaption = \"\";\r\n if (!global.isEmpty(this._caption)) {\r\n selectCaption = this._translationService.translate(this._caption);\r\n }\r\n let dataCaption = this.selectedCB.attr(\"data-caption\");\r\n if (!global.isEmpty(dataCaption)) {\r\n selectCaption = dataCaption;\r\n }\r\n\r\n let _this = this;\r\n\r\n $(target).multiselect({\r\n maxHeight: 350, \r\n enableFiltering: true,\r\n includeSelectAllOption: true,\r\n enableCaseInsensitiveFiltering: true,\r\n enableFullValueFiltering: false,\r\n filterPlaceholder: this._translationService.translate(\"Išči\"),\r\n nonSelectedText: '',\r\n allSelectedText:this._translationService.translate(\"Vsi\"),\r\n selectAllText:this._translationService.translate(\"Izberi prikazane\"),\r\n nSelectedText:this._translationService.translate(\"izbranih\"),\r\n includeFilterClearBtn: true,\r\n disableIfEmpty: false,\r\n numberDisplayed: 2,\r\n buttonWidth: '200px',\r\n buttonClass :'saop-control form-control shadow-none ms-image-down pr-0',\r\n buttonContainer: '
',\r\n onSelectAll: function (selectedOptions: JQuery) {\r\n _this.bindDiv(this);\r\n _this.afterSelectAll(selectedOptions);\r\n _this.afterChangeCommonEvent(this.$select);\r\n }, \r\n onDeselectAll: function(selectedOptions:JQuery){\r\n _this.bindDiv(this);\r\n _this.afterDeselectAll(selectedOptions);\r\n _this.afterChangeCommonEvent(this.$select);\r\n }, \r\n onChange: function(option: JQuery, checked: boolean){\r\n _this.bindDiv(this);\r\n _this.afterChange(option, checked);\r\n _this.afterChangeCommonEvent(this.$select);\r\n },\r\n onInitialized: function ($select, $container) {\r\n _this._multiSelectObject = this;\r\n _this.bindDiv(this);\r\n _this.onInitializedControl(this);\r\n },\r\n templates: {\r\n button: this._options.templatesButton,\r\n filter: '
  • ',\r\n } \r\n })\r\n .multiselect('selectAll', false, true)\r\n .multiselect('updateButtonText');\r\n ; \r\n }\r\n afterSelectAll(selectedOptions:JQuery){\r\n\r\n }\r\n\r\n afterDeselectAll(selectedOptions:JQuery){\r\n\r\n }\r\n\r\n afterChange(option: JQuery, checked: boolean){\r\n\r\n }\r\n\r\n afterChangeCommonEvent(element:any){\r\n\r\n }\r\n\r\n afterInitializedControl(element: any){\r\n global.ConsoleLogDegug(\"SaopMultiselect.afterInitializedControl\");\r\n }\r\n\r\n // selectValues vrednosti\r\n setSelectValues(selectValues: string[]): void {\r\n // odznacimo vse zaposlene\r\n this.selectedCB.multiselect('deselectAll');\r\n\r\n if (selectValues != null) {\r\n // oznacimo izbrane\r\n this.selectedCB.multiselect('select', selectValues);\r\n }\r\n this.selectedCB.multiselect('refresh');\r\n\r\n if (this._multiSelectObject != null) {\r\n this.bindDiv(this._multiSelectObject);\r\n this.afterChangeCommonEvent(this._multiSelectObject.$select);\r\n } \r\n }\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { global } from \"../Common/saop-common\";\r\n\r\nexport class SaopPopupDialogOptions {\r\n title: string;\r\n body: string;\r\n showCancelButton: boolean;\r\n confirmButtonCaption: string;\r\n cancelButtonCaption: string;\r\n confirmAction: string;\r\n confirmActiondata: object;\r\n onSuccess: (params:any) => any;\r\n constructor() {\r\n this.title = \"\";\r\n this.body = \"body text\";\r\n this.showCancelButton = true;\r\n this.confirmButtonCaption = \"Ok\";\r\n this.cancelButtonCaption = \"Cancel\";\r\n this.confirmAction = \"\";\r\n this.confirmActiondata = {};\r\n this.onSuccess = null;\r\n }\r\n}\r\n\r\nexport class SaopPopupDialog {\r\n private _options:SaopPopupDialogOptions;\r\n\r\n\r\n constructor(options:SaopPopupDialogOptions) {\r\n this._options = options;\r\n } \r\n \r\n save(callback: (n: number) => any) : void {\r\n callback(42);\r\n }\r\n\r\n ShowLoadingSaop() {\r\n var obj = $(\"#saopLoading\");\r\n if (obj.length)\r\n obj.show();\r\n }\r\n\r\n HideLoadingSaop() {\r\n var obj = $(\"#saopLoading\");\r\n if (obj.length)\r\n obj.hide();\r\n } \r\n\r\n ShowPopupDialog():void {\r\n let _this = this;\r\n // Display info message to the user in a modal\r\n let titleDiv = $('#info-modal-title-div');\r\n let titleH = $('#info-modal-title');\r\n let confirmButton = $('#info-modal-btn-ok');\r\n let cancelButton = $('#info-modal-btn-cancel');\r\n\r\n cancelButton.html(this._options.cancelButtonCaption);\r\n\r\n // show or hide header div based on title property\r\n titleDiv.css(\"display\", \"\");\r\n if (this._options.title) {\r\n titleH.html(this._options.title);\r\n }\r\n else {\r\n titleDiv.css(\"display\", \"none\");\r\n }\r\n\r\n if (this._options.confirmButtonCaption){\r\n confirmButton.html(this._options.confirmButtonCaption);\r\n confirmButton.css(\"display\", \"\"); \r\n } else {\r\n confirmButton.css(\"display\", \"none\");\r\n }\r\n\r\n if (this._options.showCancelButton) {\r\n cancelButton.html(this._options.cancelButtonCaption);\r\n cancelButton.css(\"display\", \"\"); \r\n } else {\r\n cancelButton.css(\"display\", \"none\");\r\n }\r\n\r\n $('#info-modal-body').html(this._options.body);\r\n\r\n $(\"#info-modal-btn-ok\").click(\r\n function () {\r\n _this.popupDialogConfirm();\r\n }\r\n );\r\n\r\n $('#info-modal').on('hidden.bs.modal', function (e) {\r\n $(\"#info-modal-btn-ok\").unbind(\"click\");\r\n $(this).modal('dispose');\r\n })\r\n\r\n $('#info-modal').modal('show');\r\n global.setModalFormZIndex('#info-modal');\r\n } \r\n\r\n popupDialogConfirm() {\r\n let _this = this;\r\n let cancelButton = $('#info-modal-btn-cancel');\r\n\r\n if (this._options.confirmAction !== \"\") {\r\n $.ajax({\r\n url: this._options.confirmAction,\r\n type: \"POST\",\r\n data: this._options.confirmActiondata,\r\n beforeSend: function () { _this.ShowLoadingSaop(); },\r\n complete: function () { _this.HideLoadingSaop(); },\r\n success: function (result) {\r\n // close dialog\r\n cancelButton.trigger(\"click\");\r\n\r\n if(_this._options.onSuccess !== null){\r\n _this._options.onSuccess(result);\r\n }\r\n \r\n },\r\n error: function (response) {\r\n // close dialog\r\n cancelButton.trigger(\"click\");\r\n alert(response.responseJSON.message);\r\n }\r\n });\r\n }\r\n else {\r\n //close dialog\r\n cancelButton.trigger(\"click\");\r\n\r\n if (this._options.onSuccess != null) {\r\n this._options.onSuccess(null);\r\n }\r\n }\r\n }\r\n\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { global } from \"../Common/saop-common\";\r\nimport { SaopServicesCore } from \"../Core/saop-services-core\";\r\n\r\nexport enum SaopRightSidebarView {\r\n Dashboard = 0\r\n ,Absence = 1\r\n ,AttendanceDay = 2\r\n ,AttendanceMonth = 3 \r\n ,TravelOrders = 4\r\n ,InternalOrders = 5\r\n}\r\n\r\nexport class SaopRightSidebar {\r\n private _saopServicesCore :SaopServicesCore;\r\n\r\n constructor() {\r\n this._saopServicesCore = new SaopServicesCore();\r\n }\r\n\r\n\r\n bindCarouselDiv(contentId:string,view:SaopRightSidebarView){\r\n global.ConsoleLogDegug(\"SaopRightSidebar.bindDiv\"); \r\n this._saopServicesCore.afterDone = function(response){\r\n $(contentId).html(response);\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action:\"RightSideBar/GetCarouselView?view=\"+view.toString()\r\n ,data:null\r\n ,type:\"GET\"\r\n ,spinnerDivId:\"#saopLoadingSidebarr\"\r\n ,async:false\r\n }); \r\n }\r\n\r\n refreshDopustZaKoriscenjeSummary(contentId: string, spinnerDivId: string = \"#saopLoadingSidebarr\"): void {\r\n global.ConsoleLogDegug(\"SaopRightSidebar.refreshDopustZaKoriscenjeSummary\");\r\n\r\n this._saopServicesCore.afterDone = function(response){\r\n $(contentId).html(response);\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action:\"RightSideBar/DopustZaKoriscenjeSummaryPartial\"\r\n ,data:null\r\n ,type:\"GET\"\r\n ,spinnerDivId: spinnerDivId\r\n }); \r\n }\r\n\r\n refreshUreZaKoriscenjeSummary(contentId: string, spinnerDivId: string = \"#saopLoadingSidebarr\"): void {\r\n global.ConsoleLogDegug(\"SaopRightSidebar.refreshUreZaKoriscenjeSummary\");\r\n\r\n this._saopServicesCore.afterDone = function(response){\r\n $(contentId).html(response);\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action:\"RightSideBar/UreZaKoriscenjeSummaryPartial\"\r\n ,data:null\r\n ,type:\"GET\"\r\n ,spinnerDivId: spinnerDivId\r\n });\r\n }\r\n\r\n refreshRegUraDogodkiSummary(contentId: string, selectedPeriod:string, spinnerDivId:string): void {\r\n global.ConsoleLogDegug(\"SaopRightSidebar.refreshRegUraDogodkiSummary\");\r\n\r\n this._saopServicesCore.afterDone = function(response){\r\n $(contentId).html(response);\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action:\"RightSideBar/RegUraDogodkiSummaryPartial?selectedPeriod=\"+selectedPeriod\r\n ,data:null\r\n ,type:\"GET\"\r\n ,spinnerDivId:spinnerDivId\r\n //,spinnerDivId:\"#saopLoadingSidebarr\"\r\n });\r\n }\r\n\r\n refreshRegOPNPotniNalogiSummary(contentId: string, spinnerDivId:string): void {\r\n global.ConsoleLogDegug(\"SaopRightSidebar.refreshRegOPNPotniNalogiSummary\");\r\n\r\n this._saopServicesCore.afterDone = function(response){\r\n $(contentId).html(response);\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action:\"TravelOrder/TravelOrdersSummary\"\r\n ,data:null\r\n ,type:\"GET\"\r\n ,spinnerDivId:spinnerDivId\r\n //,spinnerDivId:\"#saopLoadingSidebarr\"\r\n });\r\n }\r\n\r\n refreshNdkInternalOrdersSummary(contentId: string, spinnerDivId: string): void {\r\n global.ConsoleLogDegug(\"SaopRightSidebar.refreshNdkInternalOrdersSummary\");\r\n\r\n this._saopServicesCore.afterDone = function (response) {\r\n $(contentId).html(response);\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action: \"RightSideBar/InternalOrdersSummary\"\r\n , data: null\r\n , type: \"GET\"\r\n , spinnerDivId: spinnerDivId\r\n //,spinnerDivId:\"#saopLoadingSidebarr\"\r\n });\r\n }\r\n\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n","\r\nexport interface SaopInputWFLProperties {\r\n id:string;\r\n placeholder:string;\r\n caption:string;\r\n}\r\n\r\nexport class SaopselectWFL {\r\n private _inputTemplate:string;\r\n constructor(properties:SaopInputWFLProperties) {\r\n this._inputTemplate = \r\n `\r\n \r\n \r\n \r\n \r\n \r\n `; \r\n }\r\n\r\n getElement():JQuery{\r\n let _element = $(this._inputTemplate);\r\n return _element;\r\n }\r\n\r\n getInnerHtml():string{\r\n return this._inputTemplate;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { global } from \"../Common/saop-common\";\r\n\r\nexport class SaopTogglePanel {\r\n\r\n init():void{\r\n global.ConsoleLogDegug(\"SaopTogglePanel.init...\");\r\n this.setClickEventOnFrame(\"body\");\r\n }\r\n\r\n setClickEventOnFrame(frameName:string = \"body\"):void {\r\n global.ConsoleLogDegug(\"SaopTogglePanel.setClickEventOnFrame...\");\r\n\r\n let _frame = $(\"\"+frameName+\" *> .saop-toggle-panel\");\r\n _frame.off(\"click\");\r\n _frame.click(function () {\r\n //na klik se puščica obrne gor / dol\r\n var arrowDiv = $(this).find(\".saop-toggle-arrow\");\r\n\r\n for (var i = 0; i < arrowDiv.length; i++) {\r\n if (arrowDiv[i].classList.contains(\"saop-img-down\")) {\r\n arrowDiv[i].classList.remove(\"saop-img-down\");\r\n arrowDiv[i].classList.add(\"saop-img-up\");\r\n } else {\r\n arrowDiv[i].classList.remove(\"saop-img-up\");\r\n arrowDiv[i].classList.add(\"saop-img-down\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { global } from \"../Common/saop-common\";\r\n\r\n\r\nexport class SaopViewSpinner {\r\n\r\n generateSpinnerDiv(spinnerId: string = '#saopLoading'): string {\r\n global.ConsoleLogDegug(\"generateSpinnerDiv \" + spinnerId);\r\n let spinnrDiv =\r\n '
    '\r\n + '\t
    '\r\n + '\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t\t
    '\r\n + '\t
    '\r\n + '
    ';\r\n\r\n return spinnrDiv;\r\n }\r\n\r\n showLoadingSaop(elementId: string = \"#saopLoading\") {\r\n global.ConsoleLogDegug(\"showLoadingSaop \" + elementId);\r\n var obj = $(elementId);\r\n if (obj.length) {\r\n global.ConsoleLogDegug(\"Show... \");\r\n obj.show();\r\n //setModalFormZIndex(elementId);\r\n }\r\n }\r\n\r\n hideLoadingSaop(elementId: string = \"#saopLoading\") {\r\n global.ConsoleLogDegug(\"hideLoadingSaop \" + elementId);\r\n var obj = $(elementId);\r\n if (obj.length)\r\n obj.hide();\r\n }\r\n\r\n // showLoadingSaop(elementId: string = \"\") {\r\n // global.ConsoleLogDegug(\"showLoadingSaop \" + elementId);\r\n // if (!isEmpty(elementId)) {\r\n // let elementDiv = $(elementId);\r\n // if (elementDiv.length) {\r\n // let spinnerID = elementId + \"Loading\";\r\n // spinnerID = spinnerID.replace(\"#\",\"\");\r\n // let spinnerDiv = $(spinnerID);\r\n // if (!spinnerDiv.length) {\r\n // let _div = this.generateSpinnerDiv(spinnerID);\r\n // elementDiv.append(_div);\r\n // spinnerDiv = $(spinnerID);\r\n // }\r\n // spinnerDiv.show();\r\n // }\r\n // }\r\n // }\r\n\r\n // hideLoadingSaop(elementId: string = \"\") {\r\n // global.ConsoleLogDegug(\"hideLoadingSaop \" + elementId);\r\n // if (!isEmpty(elementId)) {\r\n // let elementDiv = $(elementId);\r\n // if (elementDiv.length) {\r\n // let spinnerID = elementId + \"Loading\";\r\n // let spinnerDiv = $(spinnerID);\r\n // if (!spinnerDiv.length) {\r\n // elementDiv.append(this.generateSpinnerDiv(spinnerID));\r\n // spinnerDiv = $(spinnerID);\r\n // }\r\n // spinnerDiv.hide();\r\n // }\r\n // }\r\n // }\r\n // //\r\n}\r\n","import { global } from \"../Common/saop-common\";\r\nimport { SaopViewSpinner } from '../Components/saop-view-spinner'\r\n\r\nexport interface SaopServicesCoreParams {\r\n action:string;\r\n async?:boolean\r\n type?:string;\r\n data?:any;\r\n spinnerDivId?:string;\r\n // contentType?: string | false | undefined;\r\n // dataType?: 'xml' | 'html' | 'script' | 'json' | 'jsonp' | 'text' | string | undefined;\r\n // processData?: boolean | undefined;\r\n}\r\n\r\nexport enum SaopServicesCoreResult {\r\n success = 1\r\n , error = 2\r\n}\r\n\r\nexport enum SaopServicesCoreHTTPResultStatusCode {\r\n ok = 200,\r\n unauthorized = 401,\r\n internalServerError = 500\r\n}\r\n\r\nexport interface SaopServicesCoreResponse {\r\n response: SaopServicesCoreResult;\r\n data: any;\r\n};\r\n\r\n// function syncDelay(milliseconds:any){\r\n// var start = new Date().getTime();\r\n// var end=0;\r\n// while( (end-start) < milliseconds){\r\n// end = new Date().getTime();\r\n// }\r\n// }\r\n\r\nexport class SaopServicesCore {\r\n private _saopViewSpinner:SaopViewSpinner = new SaopViewSpinner();\r\n private _params:SaopServicesCoreParams;\r\n private _defaultParams:SaopServicesCoreParams;\r\n // \r\n //public _result:SaopServicesCoreResponse = {response:null,data:null}; \r\n\r\n constructor(){\r\n this._defaultParams = {\r\n action:\"\"\r\n ,type:\"GET\"\r\n ,async:true\r\n ,data:null\r\n ,spinnerDivId:\"\"\r\n };\r\n }\r\n\r\n private onDone(result:any){\r\n global.ConsoleLogDegug(\"SaopServicesCore.onDone\");\r\n this.afterDone(result);\r\n //this._saopViewSpinner.hideLoadingSaop(this._params.spinnerDivId); \r\n }\r\n\r\n afterDone(result:any):void{\r\n global.ConsoleLogDegug(\"SaopServicesCore.afterDone\");\r\n } \r\n\r\n private onSuccess(result:any):void{\r\n global.ConsoleLogDegug(\"SaopServicesCore.success\");\r\n let _result:SaopServicesCoreResponse = {response:null,data:null}; \r\n if (typeof result.success === \"undefined\" || result.success === null) {\r\n _result.response = SaopServicesCoreResult.success;\r\n } else {\r\n _result.response = result.success == true ? SaopServicesCoreResult.success : SaopServicesCoreResult.error;\r\n }\r\n \r\n _result.data = result;\r\n this.afterSuccess(_result);\r\n }\r\n\r\n afterSuccess(result:any):void{\r\n global.ConsoleLogDegug(\"SaopServicesCore.afterSuccess\");\r\n } \r\n\r\n private onError(result:any):void{\r\n global.ConsoleLogDegug(\"SaopServicesCore.error\");\r\n \r\n if (result.status == SaopServicesCoreHTTPResultStatusCode.unauthorized) {\r\n // redirect to login\r\n this.unAuthorizedRedirectToLoginPage();\r\n return;\r\n }\r\n\r\n if (result.status = SaopServicesCoreHTTPResultStatusCode.internalServerError && !global.isUnDefined(result.responseText)) {\r\n alert(\"Internal error!\");\r\n }\r\n\r\n let _result:SaopServicesCoreResponse = {response:null,data:null}; \r\n _result.response = SaopServicesCoreResult.error;\r\n _result.data = result;\r\n this.afterError(_result);\r\n }\r\n\r\n afterError(result:any):void{\r\n global.ConsoleLogDegug(\"SaopServicesCore.afterSuccess\");\r\n } \r\n\r\n ExecuteAction(params:SaopServicesCoreParams):void {\r\n global.ConsoleLogDegug(\"SaopServicesCore.ExecuteAction\");\r\n let options = { ...this._defaultParams, ...params };\r\n params = options;\r\n this._params = params;\r\n let _this = this;\r\n let _ajaxAction = global.getSiteAbsoluteURL(params.action);\r\n\r\n //@Url.Action(\"crearCampManual\", \"DPS\")\r\n\r\n try {\r\n $.ajax({\r\n async: params.async,\r\n url: _ajaxAction,\r\n type: !global.isEmpty(params.type) ? params.type : \"POST\",\r\n data: params.data,\r\n // contentType: params.contentType == null ? 'application/x-www-form-urlencoded; charset=UTF-8' : params.contentType,\r\n // dataType: params.type == null ? 'Intelligent Guess (xml, json, script, or html)' : params.type, \r\n // processData : params.processData == null ? true : params.processData, \r\n beforeSend: function () { _this._saopViewSpinner.showLoadingSaop(params.spinnerDivId); },\r\n complete: function () { _this._saopViewSpinner.hideLoadingSaop(params.spinnerDivId); },\r\n success: this.onSuccess.bind(_this),\r\n error: this.onError.bind(_this)\r\n }).done(function (result) {\r\n global.ConsoleLogDegug(\"Done...\");\r\n _this.onDone(result);\r\n });\r\n }\r\n catch(err) {\r\n alert(\"Internal error!\");\r\n } \r\n\r\n \r\n }\r\n\r\n ExecuteBlobAction(params: SaopServicesCoreParams): void {\r\n global.ConsoleLogDegug(\"SaopServicesCore.ExecuteBlobAction\");\r\n let options = { ...this._defaultParams, ...params };\r\n params = options;\r\n this._params = params;\r\n let _this = this;\r\n let _ajaxAction = global.getSiteAbsoluteURL(params.action);\r\n\r\n try {\r\n $.ajax({\r\n type: \"POST\",\r\n url: _ajaxAction,\r\n data: params.data,\r\n xhrFields: {\r\n responseType: 'blob' // to avoid binary data being mangled on charset conversion\r\n },\r\n success: function (blob, status, xhr) {\r\n // check for a filename\r\n var filename = \"\";\r\n var disposition = xhr.getResponseHeader('Content-Disposition');\r\n if (disposition && disposition.indexOf('attachment') !== -1) {\r\n var filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n var matches = filenameRegex.exec(disposition);\r\n if (matches != null && matches[1]) filename = matches[1].replace(/['\"]/g, '');\r\n }\r\n\r\n //if (typeof window.navigator.msSaveBlob !== 'undefined') {\r\n // // IE workaround for \"HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed.\"\r\n // window.navigator.msSaveBlob(blob, filename);\r\n //} else\r\n //{\r\n var URL = window.URL || window.webkitURL;\r\n var downloadUrl = URL.createObjectURL(blob);\r\n\r\n if (filename) {\r\n // use HTML5 a[download] attribute to specify filename\r\n var a = document.createElement(\"a\");\r\n // safari doesn't support this yet\r\n if (typeof a.download === 'undefined') {\r\n window.location.href = downloadUrl;\r\n } else {\r\n a.href = downloadUrl;\r\n a.download = filename;\r\n document.body.appendChild(a);\r\n a.click();\r\n }\r\n } else {\r\n window.location.href = downloadUrl;\r\n }\r\n\r\n setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup\r\n //}\r\n },\r\n error: this.onError.bind(_this)\r\n }).done(function (result) {\r\n global.ConsoleLogDegug(\"Done...\");\r\n _this.onDone(result);\r\n });\r\n }\r\n catch (err) {\r\n alert(\"Internal error!\");\r\n }\r\n }\r\n \r\n public handleSubmitError(response: any): void {\r\n global.ConsoleLogDegug(\"SaopServicesCore.HandleSubmitError\");\r\n\r\n if (response.status == SaopServicesCoreHTTPResultStatusCode.unauthorized) {\r\n this.unAuthorizedRedirectToLoginPage();\r\n return;\r\n }\r\n\r\n // display error\r\n console.log(\"response\", response);\r\n alert(response.statusText);\r\n }\r\n\r\n public unAuthorizedRedirectToLoginPage(): void {\r\n global.ConsoleLogDegug(\"SaopServicesCore.redirectToLoginPage\");\r\n\r\n window.location.reload();\r\n }\r\n \r\n //\r\n}\r\n","import { global } from \"../Common/saop-common\";\r\nimport { SaopServicesCore } from \"../Core/saop-services-core\";\r\n\r\nexport class SaopTranslation {\r\n public key: string = \"#\";\r\n public translation: string = null;\r\n}\r\n\r\nexport class SaopTranslations {\r\n public translationsList:[SaopTranslation?] = [];\r\n}\r\n\r\n\r\nexport interface SaopTranslationServiceParams {\r\n controller:string,\r\n action:string,\r\n}\r\n\r\n\r\nexport class SaopTranslationService {\r\n private _params:SaopTranslationServiceParams;\r\n private _saopServicesCore: SaopServicesCore;\r\n //\r\n public _terminology:SaopTranslations;\r\n\r\n\r\n constructor(params:SaopTranslationServiceParams = null){\r\n if(!global.isUnDefined(params)){\r\n this._params = params;\r\n } else {\r\n this._params = {controller:\"Translation\",action:\"GetTranslations\"};\r\n }\r\n \r\n this._saopServicesCore = new SaopServicesCore();\r\n this._terminology = new SaopTranslations();\r\n }\r\n \r\n setTranslationsList(translations:string[]):any{\r\n let _this = this;\r\n translations.forEach(function (value) {\r\n _this._terminology.translationsList.push({key:value,translation:value}); \r\n }); \r\n return this.getTranslations(this._terminology);\r\n }\r\n\r\n getTranslations(translations:SaopTranslations):any{\r\n let jsonData = JSON.stringify(translations);\r\n let _data = {jsonInput:jsonData};\r\n let _response:any;\r\n this._saopServicesCore.afterDone = function (response) {\r\n _response = response;\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action: this._params.controller+\"/\"+this._params.action+\"\"\r\n , type: \"POST\"\r\n , data: _data\r\n , async: false\r\n });\r\n this._terminology.translationsList = _response.translationsList;\r\n return _response;\r\n }\r\n\r\n translate(key:string):string{\r\n let _tr = this._terminology.translationsList.find(e => e.key == key) as any;\r\n if (global.isUnDefined(_tr)) { \r\n return key;\r\n } else {\r\n return _tr.translation;\r\n }\r\n }\r\n\r\n //\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","/// \r\n\r\nexport class SaopUtils {\r\n checkCompatibility():boolean {\r\n return SaopCommon.checkCompatibility();\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { global } from \"./Common/saop-common\";\r\nimport { SaopUtils } from \"./Core/saop-utils\";\r\nimport { SaopTogglePanel } from \"./Components/saop-toggle-panel\";\r\nimport { SaopInputMask } from \"./Components/saop-inputmask\";\r\nimport { SaopCheckboxSwitch } from \"./Components/saop-checkbox-switch\";\r\nimport { SaopMultiselect } from \"./Components/saop-multiselect\";\r\nimport { SaopViewSpinner } from './Components/saop-view-spinner';\r\nimport { SaopRightSidebar } from './Components/saop-right-sidebar';\r\nimport { MenuSidebar } from \"./Components/saop-menu-sidebar\";\r\nimport { SaopMessageDlg } from \"./Components/saop-message-dlg\";\r\nimport { SaopPopupDialog } from './Components/saop-popup-dialog'\r\nimport { SaopFloatingLabel } from \"./Components/saop-floating-label\";\r\nimport { SaopServicesCore } from './Core/saop-services-core';\r\nimport { SaopTranslationService } from './Core/saop-translate';\r\nimport { SaopWebGrid } from './Components/saop-grid';\r\n\r\nexport function echoTest(msg:string): void {\r\n console.log(\"echo: \"+msg);\r\n}\r\n\r\nexport function checkCompatibility(): boolean {\r\n global.ConsoleLogDegug(\"checkCompatibility\");\r\n let utils = new SaopUtils();\r\n return utils.checkCompatibility();\r\n}\r\n\r\nexport function initClientLogModeValue() {\r\n global.debugMode = global.GetClientLogModeStorageValue();\r\n}\r\n\r\nexport function initSiteBaseUrlValue() {\r\n global.siteBaseUrl = global.getSiteBaseUrl()\r\n}\r\n\r\nexport function initializeSiteJS() {\r\n global.ConsoleLogDegug(\"initializeSiteJS\");\r\n new MenuSidebar().init();\r\n new SaopTogglePanel().init();\r\n\r\n document.addEventListener('keydown', function (e) {\r\n if (e.ctrlKey && e.altKey && e.keyCode == 79) {\r\n // CTRL + ALT + O\r\n global.SetClientLogModeStorageValue();\r\n global.debugMode = global.GetClientLogModeStorageValue();\r\n }\r\n });\r\n\r\n global.setHelpLink();\r\n}\r\n\r\nexport function setFirstControlToFocus(formId: string) {\r\n global.setFirstFormControlToFocus(formId);\r\n}\r\n\r\nexport {global};\r\n\r\n\r\n\r\nexport class SaopTogglePanelEx extends SaopTogglePanel{};\r\n\r\nexport class SaopInputMaskEx extends SaopInputMask{};\r\n\r\nexport class SaopCheckboxSwitchEx extends SaopCheckboxSwitch{};\r\n\r\nexport class SaopMultiselectEx extends SaopMultiselect{};\r\n\r\nexport class SaopMessageDlgEx extends SaopMessageDlg{};\r\n\r\nexport class SaopPopupDialogEx extends SaopPopupDialog{};\r\n\r\nexport class SaopViewSpinnerEX extends SaopViewSpinner { };\r\n\r\nexport class SaopRightSidebarEx extends SaopRightSidebar { };\r\n\r\nexport class SaopFloatingLabelEx extends SaopFloatingLabel { };\r\n\r\nexport class SaopServicesCoreEx extends SaopServicesCore { };\r\n\r\nexport class SaopTranslationServiceEx extends SaopTranslationService { };\r\n\r\nexport class SaopWebGridEx extends SaopWebGrid { };\r\n//\r\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJUeXBlU2NyaXB0cy9Db21tb24vc2FvcC1jb21tb24udHMiLCJUeXBlU2NyaXB0cy9Db21wb25lbnRzL3Nhb3AtY2hlY2tib3gtc3dpdGNoLnRzIiwiVHlwZVNjcmlwdHMvQ29tcG9uZW50cy9zYW9wLWZsb2F0aW5nLWxhYmVsLnRzIiwiVHlwZVNjcmlwdHMvQ29tcG9uZW50cy9zYW9wLWdyaWQtZmlsdGVyLnRzIiwiVHlwZVNjcmlwdHMvQ29tcG9uZW50cy9zYW9wLWdyaWQudHMiLCJUeXBlU2NyaXB0cy9Db21wb25lbnRzL3Nhb3AtaW5wdXQtd2ZsLnRzIiwiVHlwZVNjcmlwdHMvQ29tcG9uZW50cy9zYW9wLWlucHV0bWFzay50cyIsIlR5cGVTY3JpcHRzL0NvbXBvbmVudHMvc2FvcC1tZW51LXNpZGViYXIudHMiLCJUeXBlU2NyaXB0cy9Db21wb25lbnRzL3Nhb3AtbWVzc2FnZS1kbGcudHMiLCJUeXBlU2NyaXB0cy9Db21wb25lbnRzL3Nhb3AtbXVsdGlzZWxlY3QudHMiLCJUeXBlU2NyaXB0cy9Db21wb25lbnRzL3Nhb3AtcG9wdXAtZGlhbG9nLnRzIiwiVHlwZVNjcmlwdHMvQ29tcG9uZW50cy9zYW9wLXJpZ2h0LXNpZGViYXIudHMiLCJUeXBlU2NyaXB0cy9Db21wb25lbnRzL3Nhb3Atc2VsZWN0LXdmbC50cyIsIlR5cGVTY3JpcHRzL0NvbXBvbmVudHMvc2FvcC10b2dnbGUtcGFuZWwudHMiLCJUeXBlU2NyaXB0cy9Db21wb25lbnRzL3Nhb3Atdmlldy1zcGlubmVyLnRzIiwiVHlwZVNjcmlwdHMvQ29yZS9zYW9wLXNlcnZpY2VzLWNvcmUudHMiLCJUeXBlU2NyaXB0cy9Db3JlL3Nhb3AtdHJhbnNsYXRlLnRzIiwiVHlwZVNjcmlwdHMvQ29yZS9zYW9wLXV0aWxzLnRzIiwiVHlwZVNjcmlwdHMvbWFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQzs7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QUEsZ0I7O0FBQXhDLFFBQUEsa0JBQUEsR0FBQSxrQkFBQTtBQUE0RDs7SUFFL0Msd0I7Ozs7Ozs7Ozs7RUFBaUMsaUJBQUEsc0I7O0FBQTlDLFFBQUEsd0JBQUEsR0FBQSx3QkFBQTtBQUF3RTs7SUFFM0QsYTs7Ozs7Ozs7OztFQUFzQixZQUFBLFc7O0FBQW5DLFFBQUEsYUFBQSxHQUFBLGFBQUE7QUFBa0Q7QUFDbEQiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCLvu78vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vQHR5cGVzL2FsZXJ0aWZ5L2luZGV4LmQudHNcIiAvPlxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIGdsb2JhbCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRlYnVnTW9kZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2l0ZUJhc2VVcmw6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIENvbnNvbGVMb2dEZWd1ZyhtZXNzYWdlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUpIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0Q2xpZW50TG9nTW9kZVN0b3JhZ2VLZXlWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcIlNhb3BNb2pJbmZvLmdsb2JhbENsaWVudExvZ01vZGVWYWxcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldENsaWVudExvZ01vZGVTdG9yYWdlVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGRlYnVnTW9kZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgZGVidWdNb2RlU3RyaW5nVmFsID0gdGhpcy5SZWFkVmFyaWFibGVGcm9tU3RvcmFnZShnbG9iYWwuR2V0Q2xpZW50TG9nTW9kZVN0b3JhZ2VLZXlWYWx1ZSgpKTtcclxuXHJcbiAgICAgICAgbGV0IGRlYnVnTW9kZVZhbCA9IGRlYnVnTW9kZURlZmF1bHRWYWx1ZTtcclxuICAgICAgICBpZiAoZGVidWdNb2RlU3RyaW5nVmFsKSB7XHJcbiAgICAgICAgICAgIGRlYnVnTW9kZVZhbCA9IGRlYnVnTW9kZVN0cmluZ1ZhbCA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZGVidWdNb2RlVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgU2V0Q2xpZW50TG9nTW9kZVN0b3JhZ2VWYWx1ZSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbG9nTW9kZSA9IHRoaXMuR2V0Q2xpZW50TG9nTW9kZVN0b3JhZ2VWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuV3JpdGVWYXJpYWJsZVRvU3RvcmFnZShnbG9iYWwuR2V0Q2xpZW50TG9nTW9kZVN0b3JhZ2VLZXlWYWx1ZSgpLCAhbG9nTW9kZSk7XHJcblxyXG4gICAgICAgIGFsZXJ0aWZ5Lm1lc3NhZ2UoXCJDbGllbnQgbG9nIG1vZGUgZW5hYmxlZDogXCIgKyAhbG9nTW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRTaXRlQmFzZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAkKFwiI3NpdGVCYXNlVXJsXCIpLnZhbCgpIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHNldEhlbHBMaW5rKCk6IHZvaWQge1xyXG4gICAgICAgIC8vbmFzdGF2aSBoZWxwIGxpbmssIHYgb2R2aXNub3N0aSBvZCBsb2thbGl6YWNpamVcclxuICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGxldCBzdmdIZWxwOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FvcC1oZWxwJyk7XHJcblxyXG4gICAgICAgIGlmKHN2Z0hlbHAgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxldCBsYW5ndWFnZSA9IHN2Z0hlbHAuZ2V0QXR0cmlidXRlKFwiZGF0YS1sYW5ndWFnZVwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vcG/EjWFrYW1vIGRhIHNlIGduZXN6ZGVuaSBvYmpla3QgbmFsb8W+aVxyXG4gICAgICAgICAgICBzdmdIZWxwLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdmdIZWxwTGluayA9IHN2Z0hlbHAuY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2FvcC1oZWxwLWxpbmtcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNVbkRlZmluZWQoc3ZnSGVscExpbmspID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmd1YWdlID09IFwiaHJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdmdIZWxwTGluay5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIFwiaHR0cDovL2hlbHAuc2FvcC5oci9oci9tb2ppbmZvXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChsYW5ndWFnZSA9PSBcInNyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnSGVscExpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBcImh0dHA6Ly93d3cuc2FvcC5ycy9pY2VudGVyLzEwMC91cHV0c3R2YS16YS11cG90cmVidS9cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdmdIZWxwTGluay5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIFwiaHR0cHM6Ly9zaS1pY2VudGVyLmtub3dsZWRnZW93bC5jb20vaGVscC9tb2ppbmZvLW5hdm9kaWxhLXphLXVwb3JhYm8tcHJlbm92bGplbmVnYS1wb3J0YWxhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvL3phcmFkaSBicmFza2FsbmlrIC0gbW96aWxsYSBmaXJlZm94IC0gaXpnbGVkYSwgZGEgamUgb2JqZWN0ICcnbG9hZGVkJycgcHJlZGVuIG11IGRvZGFtbyBvbiBsb2FkZWRcclxuICAgICAgICAgICAgaWYoJCgnI3Nhb3AtaGVscC1saW5rJykgIT0gbnVsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ2xvYWQnKTtcclxuICAgICAgICAgICAgICAgIHN2Z0hlbHAuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBmb3JtYXREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB0bzIgPSAobjogbnVtYmVyKTogc3RyaW5nID0+ICgoTWF0aC5hYnMobikgPCAxMCA/ICcwJyA6ICcnKSArIE1hdGguYWJzKG4pKTtcclxuICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t5ZG1oXSsvZ2ksIChtYXRjaDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICAgICAgc3dpdGNoIChtYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAneXl5eSc6IHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiByZXR1cm4gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2RkJzogcmV0dXJuIHRvMihkYXRlLmdldERhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdtJzogcmV0dXJuIChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbW0nOiByZXR1cm4gdG8yKGRhdGUuZ2V0TW9udGgoKSArIDEpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnSCc6IHJldHVybiBkYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0hIJzogcmV0dXJuIHRvMihkYXRlLmdldEhvdXJzKCkpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnTU0nOiByZXR1cm4gdG8yKGRhdGUuZ2V0TWludXRlcygpKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb252ZXJ0U3RyaW5nMkRhdGUoc3RyaW5nRGF0ZTogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IERhdGUge1xyXG4gICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJjb252ZXJ0U3RyaW5nMkRhdGVcIik7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZC5tbS55eXl5XCI6XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF5ID0gc3RyaW5nRGF0ZS5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9udGggPSBzdHJpbmdEYXRlLnN1YnN0cmluZygzLCA1KTtcclxuICAgICAgICAgICAgICAgIGxldCB5ZWFyID0gc3RyaW5nRGF0ZS5zdWJzdHJpbmcoNiwgMTApO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgreWVhciwgK21vbnRoIC0gMSwgK2RheSk7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0TW9kYWxGb3JtWkluZGV4KG1vZGFsRm9ybUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwic2V0TW9kYWxGb3JtWkluZGV4XCIpO1xyXG4gICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJtb2RhbEZvcm1JZDpcIiArIG1vZGFsRm9ybUlkKTtcclxuICAgICAgICB2YXIgekluZGV4ID0gMTA1MCArICgxMCAqICQoJy5tb2RhbDp2aXNpYmxlJykubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgJChtb2RhbEZvcm1JZCkuY3NzKCd6LWluZGV4JywgekluZGV4KTtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnLm1vZGFsLWJhY2tkcm9wJykubm90KCcubW9kYWwtc3RhY2snKS5jc3MoJ3otaW5kZXgnLCB6SW5kZXggLSAxKS5hZGRDbGFzcygnbW9kYWwtc3RhY2snKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzRW1wdHkoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gKCFzdHIgfHwgc3RyLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc1VuRGVmaW5lZChfb2JqOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gKCFfb2JqIHx8IF9vYmogPT09IG51bGwgfHwgdHlwZW9mIF9vYmogPT09IFwidW5kZWZpbmVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgUmVhZFZhcmlhYmxlRnJvbVN0b3JhZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh2YXJpYWJsZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgV3JpdGVWYXJpYWJsZVRvU3RvcmFnZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHZhcmlhYmxlTmFtZSwgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZmlsdGVyVGFibGVSb3dzKGZpbHRlclZhbDogc3RyaW5nLCBpZFRhYmxlRWxlbWVudDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImZpbHRlclRhYmxlUm93c1wiKTtcclxuXHJcbiAgICAgICAgbGV0IHZhbCA9ICQudHJpbShmaWx0ZXJWYWwpLnJlcGxhY2UoLyArL2csICcgJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBsZXQgcm93cyA9ICQoaWRUYWJsZUVsZW1lbnQgKyBcIiB0cjpoYXModGQpXCIpO1xyXG5cclxuICAgICAgICByb3dzLnNob3coKS5maWx0ZXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgdGV4dCA9ICQodGhpcykudGV4dCgpLnJlcGxhY2UoL1xccysvZywgJyAnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gIX50ZXh0LmluZGV4T2YodmFsKTtcclxuICAgICAgICB9KS5oaWRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzZXRGaXJzdEZvcm1Db250cm9sVG9Gb2N1cyhmb3JtSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJzZXRGaXJzdEZvcm1Db250cm9sVG9Gb2N1c1wiKTtcclxuXHJcbiAgICAgICAgLy8gYnJleiB0aW1lb3V0IGZ1bmtjaWplIGZvY3VzIG5lIGRlbGEgOihcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Rm9ybUNvbnRyb2wgPSAkKGZvcm1JZCArIFwiIC5mb3JtLWNvbnRyb2w6dmlzaWJsZTpub3QoOmRpc2FibGVkKTpmaXJzdFwiKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0Rm9ybUNvbnRyb2wuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZWxhdGl2ZVNpdGVVUkwoY29udHJvbGxlcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgX3VybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgIGxldCBpQyA9IF91cmwuaW5kZXhPZihjb250cm9sbGVyKTtcclxuICAgICAgICBpZiAoaUMgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfdXJsLnN1YnN0cmluZygwLCBpQykgKyBjb250cm9sbGVyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRTaXRlQWJzb2x1dGVVUkwocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjb250cm9sbGVyID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKVswXTtcclxuICAgICAgICBsZXQgbWV0aG9kID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoY29udHJvbGxlciwgXCJcIikucmVwbGFjZShcIi8vXCIsIFwiXCIpO1xyXG5cclxuICAgICAgICAvLyDEjWUgcmVsYXRpdmUgcGF0aCDFvmUgdnNlYnVqZSBodHRwLCBnYSBuZSBkb2RhbW9cclxuICAgICAgICBpZiAocmVsYXRpdmVQYXRoLmluZGV4T2YoXCJodHRwXCIpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlUGF0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnbG9iYWwuZ2V0U2l0ZUJhc2VVcmwoKSArIFwiL1wiICsgY29udHJvbGxlciArIG1ldGhvZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlbG9kZUN1cnJlbnRQYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbiIsIu+7v2ltcG9ydCB7IGdsb2JhbCB9IGZyb20gXCIuLi9Db21tb24vc2FvcC1jb21tb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wQ2hlY2tib3hTd2l0Y2gge1xyXG5cclxuICAgIGluaXQocGFyZW50RWxlbWVudDogc3RyaW5nID0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hTd2l0Y2hPbkNsaWNrKHBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuc3dpdGNoTGFiZWxPbkNsaWNrKHBhcmVudEVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrYm94U3dpdGNoT25DbGljayhwYXJlbnRFbGVtZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwic2FvcC1zd2l0Y2gtY2hlY2tib3guLi5cIik7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcInNhb3Atc3dpdGNoLWNoZWNrYm94IHBhcmVudEVsZW1lbnQ6IFwiICsgcGFyZW50RWxlbWVudCk7XHJcblxyXG4gICAgICAgIGxldCBfZnJhbWUgPSAkKFwiXCIgKyBwYXJlbnRFbGVtZW50ICsgXCIgKj4uc2FvcC1zd2l0Y2gtY2hlY2tib3hcIik7XHJcbiAgICAgICAgX2ZyYW1lLm9mZihcImNsaWNrXCIpO1xyXG4gICAgICAgIF9mcmFtZS5jbGljayhmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICBsZXQgX2NoZWNrQm94ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgICAgICBsZXQgX2F0clBhcmVudCA9IFwiI1wiKyQoX2NoZWNrQm94KS5hdHRyKFwiZm9yXCIpO1xyXG4gICAgICAgICAgICBsZXQgX2NoZWNrQm94UCA9ICQoXCJcIiArIHBhcmVudEVsZW1lbnQgKyBcIiAqPlwiICsgX2F0clBhcmVudCk7XHJcbiAgICAgICAgICAgIGxldCBfbGFiZWwxID0gX2NoZWNrQm94UC5maW5kKFwiI3Nhb3Atc3dpdGNoLWxhYmVsMVwiKTtcclxuICAgICAgICAgICAgbGV0IF9sYWJlbDIgPSBfY2hlY2tCb3hQLmZpbmQoXCIjc2FvcC1zd2l0Y2gtbGFiZWwyXCIpO1xyXG4gICAgICAgICAgICBpZiAoX2NoZWNrQm94LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJjaGVja2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgX2xhYmVsMS5yZW1vdmVDbGFzcygnc3dpdGNoLWxhYmVsLW9uJyk7XHJcbiAgICAgICAgICAgICAgICBfbGFiZWwxLmFkZENsYXNzKCdzd2l0Y2gtbGFiZWwtb2ZmJyk7XHJcbiAgICAgICAgICAgICAgICBfbGFiZWwyLnJlbW92ZUNsYXNzKCdzd2l0Y2gtbGFiZWwtb2ZmJyk7XHJcbiAgICAgICAgICAgICAgICBfbGFiZWwyLmFkZENsYXNzKCdzd2l0Y2gtbGFiZWwtb24nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJ1bmNoZWNrZWRcIik7XHJcbiAgICAgICAgICAgICAgICBfbGFiZWwxLnJlbW92ZUNsYXNzKCdzd2l0Y2gtbGFiZWwtb2ZmJyk7XHJcbiAgICAgICAgICAgICAgICBfbGFiZWwxLmFkZENsYXNzKCdzd2l0Y2gtbGFiZWwtb24nKTtcclxuICAgICAgICAgICAgICAgIF9sYWJlbDIucmVtb3ZlQ2xhc3MoJ3N3aXRjaC1sYWJlbC1vbicpO1xyXG4gICAgICAgICAgICAgICAgX2xhYmVsMi5hZGRDbGFzcygnc3dpdGNoLWxhYmVsLW9mZicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoTGFiZWxPbkNsaWNrKHBhcmVudEVsZW1lbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJzYW9wLXN3aXRjaC1sYWJlbC4uLlwiKTtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwic2FvcC1zd2l0Y2gtbGFiZWwgcGFyZW50RWxlbWVudDogXCIgKyBwYXJlbnRFbGVtZW50KTtcclxuXHJcbiAgICAgICAgbGV0IF9mcmFtZSA9ICQoXCJcIiArIHBhcmVudEVsZW1lbnQgKyBcIiAqPi5zYW9wLXN3aXRjaC1sYWJlbFwiKTtcclxuICAgICAgICBfZnJhbWUub2ZmKFwiY2xpY2tcIik7XHJcbiAgICAgICAgX2ZyYW1lLmNsaWNrKGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCBfc3dpdGNoTGFiZWwgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgICAgIGxldCBfYXRyQ2hlY2tCb3ggPSBcIiNcIiskKF9zd2l0Y2hMYWJlbCkuYXR0cihcImZvclwiKTtcclxuICAgICAgICAgICAgbGV0IF9jaGVja0JveCA9ICQoX2F0ckNoZWNrQm94KTtcclxuICAgICAgICAgICAgJChfY2hlY2tCb3gpLnByb3AoICdjaGVja2VkJywgJ2ZsYXNlJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCLvu79pbXBvcnQgeyBnbG9iYWwgfSBmcm9tIFwiLi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcEZsb2F0aW5nTGFiZWwge1xyXG5cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgICAgICAkKCcuaGFzLWZsb2F0LWxhYmVsID4gLmZvcm0tY29udHJvbCcpLm9mZihcImZvY3VzXCIsX3RoaXMuc2FvcElucHV0T25Gb2N1cyk7XHJcbiAgICAgICAgJCgnLmhhcy1mbG9hdC1sYWJlbCA+IC5mb3JtLWNvbnRyb2wnKS5vbihcImZvY3VzXCIsX3RoaXMuc2FvcElucHV0T25Gb2N1cyk7XHJcblxyXG4gICAgICAgICQoJy5oYXMtZmxvYXQtbGFiZWwgPiAuZm9ybS1jb250cm9sJykub2ZmKFwiYmx1clwiLF90aGlzLnNhb3BJbnB1dE9uQmx1cik7XHJcbiAgICAgICAgJCgnLmhhcy1mbG9hdC1sYWJlbCA+IC5mb3JtLWNvbnRyb2wnKS5vbihcImJsdXJcIixfdGhpcy5zYW9wSW5wdXRPbkJsdXIpO1xyXG4gICAgXHJcbiAgICAgICAgJCgnLmhhcy1mbG9hdC1sYWJlbCA+IC5mb3JtLWNvbnRyb2wnKS5vZmYoXCJmb2N1c291dFwiLF90aGlzLnNhb3BJbnB1dE9uQ2hhbmdlKTtcclxuICAgICAgICAkKCcuaGFzLWZsb2F0LWxhYmVsID4gLmZvcm0tY29udHJvbCcpLm9uKFwiZm9jdXNvdXRcIixfdGhpcy5zYW9wSW5wdXRPbkNoYW5nZSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHNhb3BJbnB1dE9uQ2hhbmdlKGU6YW55KSB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcInNhb3AtZmxvYXRpbmctbGFiZWwuLi5zYW9wSW5wdXRPbkNoYW5nZVwiKTtcclxuICAgICAgICBsZXQgaHRtbEVsZW1lbnQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgX25vZGUgPSAkKFwiI1wiK2h0bWxFbGVtZW50LmlkKTtcclxuICAgICAgICBpZiAoX25vZGUubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGxldCBfcGFyZW50TiA9IF9ub2RlLnBhcmVudCgpO1xyXG4gICAgICAgICAgICBpZiAoX3BhcmVudE4ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBfcGFyZW50Ti5yZW1vdmVDbGFzcyhcInNhb3AtZXJyb3ItaW5wdXRcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgX2xhYmVsID0gX3BhcmVudE4uZmluZChcIi50ZXh0LWRhbmdlclwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChfbGFiZWwubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgX2xhYmVsLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSAgICBcclxuXHJcbiAgICBzYW9wSW5wdXRPbkZvY3VzKGU6YW55KSB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcInNhb3AtZmxvYXRpbmctbGFiZWwuLi5cIik7XHJcbiAgICAgICAgLy9iYXJ2YW5qZSBcImZsb2F0aW5nIGxhYmVsXCJcclxuICAgICAgICBsZXQgaHRtbEVsZW1lbnQgPSBlLnRhcmdldDtcclxuICAgICAgICBodG1sRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zYW9wLWZsb2F0aW5nLWxhYmVsJykuY2xhc3NMaXN0LmFkZChcInNhb3AtdHh0LXByaW1hcnlcIik7XHJcbiAgICB9XHJcbiAgICAgICAgXHJcbiAgICBzYW9wSW5wdXRPbkJsdXIoZTphbnkpIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwic2FvcC1mbG9hdGluZy1sYWJlbC4uLlwiKTtcclxuICAgICAgICAvL2JhcnZhbmplIFwiZmxvYXRpbmcgbGFiZWxcIiBvbiBpbnB1dCBibHVyIChmb2N1cyBsb3N0KSBuYXphaiB2IHNpdm8gKHJlbW92ZSByYXpyZWQgXCJzYW9wLXR4dC1wcmltYXJ5XCIpXHJcbiAgICAgICAgbGV0IGh0bWxFbGVtZW50ID0gZS50YXJnZXQ7XHJcbiAgICAgICAgaHRtbEVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2FvcC1mbG9hdGluZy1sYWJlbCcpLmNsYXNzTGlzdC5yZW1vdmUoXCJzYW9wLXR4dC1wcmltYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRDYXB0aW9uQXNSZXF1aXJlZChsYWJlbElkOnN0cmluZyxyZXF1aXJlZDpib29sZWFuKTp2b2lke1xyXG4gICAgICAgIGxldCBfZWxlbWVudCA9ICQobGFiZWxJZCk7XHJcbiAgICAgICAgbGV0IF9lbGVtZW50VmFsID0gX2VsZW1lbnQudGV4dCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgX2VsZW1lbnRWYWwgPSBfZWxlbWVudFZhbC5yZXBsYWNlKFwiKlwiLFwiXCIpO1xyXG4gICAgICAgIGlmIChyZXF1aXJlZCkge1xyXG4gICAgICAgICAgICBfZWxlbWVudC50ZXh0KF9lbGVtZW50VmFsK1wiKlwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfZWxlbWVudC50ZXh0KF9lbGVtZW50VmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9ICBcclxuXHJcbiAgICAvL1xyXG59Iiwi77u/Ly8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL0B0eXBlcy9kYXRhLXRhYmxlcy90eXBlcy5kLnRzXCIgLz5cclxuaW1wb3J0IHsgU2FvcElucHV0V0ZMLFNhb3BJbnB1dFdGTFByb3BlcnRpZXMgfSBmcm9tICcuL3Nhb3AtaW5wdXQtd2ZsJ1xyXG5pbXBvcnQgeyBTYW9wc2VsZWN0V0ZMIH0gZnJvbSAnLi9zYW9wLXNlbGVjdC13ZmwnXHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFdlYkdyaWRGaWx0ZXIge1xyXG4gIHB1YmxpYyBpZDpzdHJpbmcgPSBcIndnZjFcIjtcclxuICBwdWJsaWMgbW9kYWxGaWx0ZXJBcnJheTogYW55ID0gW107XHJcbiAgLy9UaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBjb250ZW50IGluc2lkZSB0aGUgZmlsdGVyIG1vZGFsXHJcbiAgY29uZmlnRmlsdGVyKGxpYk5hbWU6c3RyaW5nLGh0bWxUYWJsZTogYW55LCBjb2xBcnJheTogYW55KSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB0YWJsZU5hbWUgPSBodG1sVGFibGVbMF0uaWQ7XHJcbiAgICAgIHZhciBjb2x1bW5zID0gaHRtbFRhYmxlLmFwaSgpLmNvbHVtbnMoKTtcclxuICAgICAgJC5lYWNoKGNvbEFycmF5LCBmdW5jdGlvbiAoaSwgYXJnKSB7XHJcbiAgICAgICAgbGV0IF9jb2xObyA9IGFyZy50b1N0cmluZygpO1xyXG4gICAgICAgICQoJyMnICsgdGFibGVOYW1lICsgJyB0aDplcSgnICsgX2NvbE5vICsgJyknKS5hdHRyKFwiaWRcIixcImNvbHVtbi1oZWFkZXItXCIrIF9jb2xObyArXCJcIik7XHJcbiAgICAgICAgJCgnIycgKyB0YWJsZU5hbWUgKyAnIHRoOmVxKCcgKyBfY29sTm8gKyAnKScpLmFwcGVuZCgnPHNwYW4gaWQ9XCJjb2x1bW4taGVhZGVyLScrIF9jb2xObyArJy1maWx0ZXJcIiBjbGFzcz1cInNhb3AtaW1nLWZpbHRlciBzaS14c1wiIG9uY2xpY2s9XCInK2xpYk5hbWUrJy53ZWJHcmlkRmlsdGVyLnNob3dGaWx0ZXIoZXZlbnQsXFwnJyArIHRhYmxlTmFtZSArICdfJyArIF9jb2xObyArICdcXCcpO1wiPjwvc3Bhbj4nKTtcclxuICAgICAgICAkKCcjJyArIHRhYmxlTmFtZSArICcgdGg6ZXEoJyArIF9jb2xObyArICcpJykuYXBwZW5kKFwiPHNwYW4gaWQ9J2NvbHVtbi1oZWFkZXItXCIrIF9jb2xObyArXCItc29ydCcgY2xhc3M9Jyc+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPlwiKTtcclxuICAgICAgICAkKCcjJyArIHRhYmxlTmFtZSArICcgdGg6ZXEoJyArIF9jb2xObyArICcpJykuYXBwZW5kKFwiPGRpdiBpZD0nY29sdW1uLWhlYWRlci1cIisgX2NvbE5vICtcIi1zaXplcic+XCIpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciB0ZW1wbGF0ZSA9XHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJtb2RhbEZpbHRlclwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPicgK1xyXG4gICAgICAgICd7MH08L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPicgK1xyXG4gICAgICAgICc8YSBocmVmPVwiIyFcIiBvbmNsaWNrPVwiJytsaWJOYW1lKycud2ViR3JpZEZpbHRlci5wZXJmb3JtRmlsdGVyKHRoaXMsIHsxfSwgXFwnezJ9XFwnKTtcIiAgY2xhc3M9XCIgYnRuIHJpZ2h0IHdhdmVzLWVmZmVjdCB3YXZlcy1saWdodFwiPlYgcmVkdTwvYT4nICsgICAgICAgIFxyXG4gICAgICAgICc8YSBocmVmPVwiIyFcIiBvbmNsaWNrPVwiJytsaWJOYW1lKycud2ViR3JpZEZpbHRlci5jbGVhckZpbHRlcih0aGlzLCB7MX0sIFxcJ3syfVxcJyk7XCIgIGNsYXNzPVwiIGJ0biBsZWZ0IHdhdmVzLWVmZmVjdCB3YXZlcy1saWdodFwiPlpicmnFoWk8L2E+JyArXHJcbiAgICAgICAgJzxhIGhyZWY9XCIjIVwiIG9uY2xpY2s9XCInK2xpYk5hbWUrJy53ZWJHcmlkRmlsdGVyLmhpZGVGaWx0ZXIoKTtcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGNsYXNzPVwiIGJ0biBsZWZ0IHdhdmVzLWVmZmVjdCB3YXZlcy1saWdodFwiPlByZWtsacSNaTwvYT4nICtcclxuICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAkLmVhY2goY29sQXJyYXksIGZ1bmN0aW9uIChpbmRleDogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29sdW1ucy5ldmVyeShmdW5jdGlvbiAoaTogYW55KSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09IGkpIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMsIFxyXG4gICAgICAgICAgICBjb250ZW50ID0gJyc7Ly8nPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmaWx0ZXJTZWFyY2hUZXh0XCIgb25rZXl1cD1cImZpbHRlclZhbHVlcyh0aGlzKVwiIC8+IDxici8+JztcclxuICAgICAgICAgICAgdmFyIGNvbHVtbk5hbWUgPSAkKHRoaXMuaGVhZGVyKCkpLnRleHQoKS5yZXBsYWNlKC9cXHMrL2csIFwiX1wiKTtcclxuICAgICAgICAgICAgdmFyIGRpc3RpbmN0QXJyYXk6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbHVtbi5kYXRhKCkuZWFjaChmdW5jdGlvbiAoZDogc3RyaW5nLCBqOiBhbnkpIHtcclxuICAgICAgICAgICAgICBpZiAoZGlzdGluY3RBcnJheS5pbmRleE9mKGQpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0YWJsZU5hbWUgKyBcIl9cIiArIGNvbHVtbk5hbWUgKyBcIl9cIiArIGo7IC8vIG9uY2hhbmdlPVwiZm9ybWF0VmFsdWVzKHRoaXMsJyArIHZhbHVlICsgJyk7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ICs9ICc8ZGl2PjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBkICsgJ1wiICBpZD1cIicgKyBpZCArICdcIi8+PGxhYmVsIGZvcj1cIicgKyBpZCArICdcIj4gJyArIGQgKyAnPC9sYWJlbD48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgZGlzdGluY3RBcnJheS5wdXNoKGQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7IFxyXG4gICAgICAgICAgICB2YXIgbmV3VGVtcGxhdGUgPSAkKHRlbXBsYXRlLnJlcGxhY2UoJ3swfScsIGNvbnRlbnQpLnJlcGxhY2UoJ3sxfScsIHZhbHVlKS5yZXBsYWNlKCd7MX0nLCB2YWx1ZSkucmVwbGFjZSgnezJ9JywgdGFibGVOYW1lKS5yZXBsYWNlKCd7Mn0nLCB0YWJsZU5hbWUpKTtcclxuICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZChuZXdUZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgIF90aGlzLm1vZGFsRmlsdGVyQXJyYXlbdGFibGVOYW1lICsgXCJfXCIgKyB2YWx1ZV0gPSBuZXdUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY29udGVudCA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0sIDUwKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9Vc2VyIHRvIHNob3cgdGhlIGZpbHRlciBtb2RhbFxyXG4gIHNob3dGaWx0ZXIoZTogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICAkKCcubW9kYWxGaWx0ZXInKS5oaWRlKCk7XHJcbiAgICAkKHRoaXMubW9kYWxGaWx0ZXJBcnJheVtpbmRleF0pLmNzcyh7IGxlZnQ6IDAsIHRvcDogMCB9KTtcclxuICAgIHZhciB0aCA9ICQoZS50YXJnZXQpLnBhcmVudCgpO1xyXG4gICAgdmFyIHBvcyA9IHRoLm9mZnNldCgpO1xyXG4gICAgbGV0IGFycmF5SXRlbSA9IHRoaXMubW9kYWxGaWx0ZXJBcnJheVtpbmRleF07XHJcbiAgICAvLyQodGhpcy5tb2RhbEZpbHRlckFycmF5W2luZGV4XSkud2lkdGgodGgud2lkdGgoKSAqIDAuNzUpO1xyXG4gICAgJChhcnJheUl0ZW0pLmNzcyh7ICdsZWZ0JzogcG9zLmxlZnQsICd0b3AnOiBwb3MudG9wLCAnbWluLXdpZHRoJzoodGgud2lkdGgoKSAqIDAuNzUpIH0pO1xyXG4gICAgJChhcnJheUl0ZW0pLnNob3coKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUYWJsZUhlYWRlclN0YXR1cyh0YWJsZUlkOnN0cmluZyxjb2x1bW5JZDpzdHJpbmcsYWN0aXZlRmlsdGVyOmJvb2xlYW4pe1xyXG4gICAgbGV0IF9jb2xGaWx0ZXJJZCA9IGNvbHVtbklkK1wiLWZpbHRlclwiO1xyXG4gICAgbGV0IF9jb2xGaWx0ZXIgPSAkKHRhYmxlSWQpLmZpbmQoX2NvbEZpbHRlcklkKVswXTtcclxuICAgIGxldCBfY29sRmlsdGVyQXRyID0gX2NvbEZpbHRlci5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcclxuICAgIGlmKGFjdGl2ZUZpbHRlcil7XHJcbiAgICAgICAgX2NvbEZpbHRlckF0ci5yZXBsYWNlKFwic2FvcC1pbWctZmlsdGVyXCIsIFwic2FvcC1pbWctZmlsdGVyIHNhb3AtY2wtYmx1ZVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgX2NvbEZpbHRlckF0ci5yZXBsYWNlKFwic2FvcC1pbWctZmlsdGVyIHNhb3AtY2wtYmx1ZVwiLCBcInNhb3AtaW1nLWZpbHRlclwiKTtcclxuICAgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RoaXMgZnVuY3Rpb24gaXMgdG8gdXNlIHRoZSBzZWFyY2hib3ggdG8gZmlsdGVyIHRoZSBjaGVja2JveFxyXG4gIGZpbHRlclZhbHVlcyhub2RlOiBhbnkpIHtcclxuICAgIHZhciBzZWFyY2hTdHJpbmcgPSAkKG5vZGUpLnZhbCgpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKS50cmltKCk7XHJcbiAgICB2YXIgcm9vdE5vZGUgPSAkKG5vZGUpLnBhcmVudCgpO1xyXG4gICAgaWYgKHNlYXJjaFN0cmluZyA9PSAnJykge1xyXG4gICAgICByb290Tm9kZS5maW5kKCdkaXYnKS5zaG93KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb290Tm9kZS5maW5kKFwiZGl2XCIpLmhpZGUoKTtcclxuICAgICAgcm9vdE5vZGUuZmluZChcImRpdjpjb250YWlucygnXCIgKyBzZWFyY2hTdHJpbmcgKyBcIicpXCIpLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRXhlY3V0ZSB0aGUgZmlsdGVyIG9uIHRoZSB0YWJsZSBmb3IgYSBnaXZlbiBjb2x1bW5cclxuICBwZXJmb3JtRmlsdGVyKG5vZGU6IGFueSwgaTogYW55LCB0YWJsZUlkOiBhbnkpIHtcclxuICAgIHZhciByb290Tm9kZSA9ICQobm9kZSkucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICB2YXIgc2VhcmNoU3RyaW5nID0gJycsIGNvdW50ZXIgPSAwO1xyXG5cclxuICAgIHJvb3ROb2RlLmZpbmQoJ2lucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbiAoaW5kZXg6IGFueSwgY2hlY2tib3g6IGFueSkge1xyXG4gICAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkge1xyXG4gICAgICAgIHNlYXJjaFN0cmluZyArPSAoY291bnRlciA9PSAwKSA/IGNoZWNrYm94LnZhbHVlIDogJ3wnICsgY2hlY2tib3gudmFsdWU7XHJcbiAgICAgICAgY291bnRlcisrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgX2NvbElkID0gXCIjY29sdW1uLWhlYWRlci1cIitpLnRvU3RyaW5nKCk7XHJcbiAgICBpZihjb3VudGVyID4gMCl7XHJcbiAgICAgIHRoaXMudXBkYXRlVGFibGVIZWFkZXJTdGF0dXMoJyMnICt0YWJsZUlkLF9jb2xJZCx0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVGFibGVIZWFkZXJTdGF0dXMoJyMnICt0YWJsZUlkLF9jb2xJZCxmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgJCgnIycgKyB0YWJsZUlkKS5EYXRhVGFibGUoKS5jb2x1bW4oaSkuc2VhcmNoKFxyXG4gICAgICBzZWFyY2hTdHJpbmcsXHJcbiAgICAgIHRydWUsIGZhbHNlXHJcbiAgICApLmRyYXcoKTtcclxuICAgIHJvb3ROb2RlLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIC8vUmVtb3ZlcyB0aGUgZmlsdGVyIGZyb20gdGhlIHRhYmxlIGZvciBhIGdpdmVuIGNvbHVtblxyXG4gIGNsZWFyRmlsdGVyKG5vZGU6IGFueSwgaTogYW55LCB0YWJsZUlkOiBhbnkpIHtcclxuICAgIHZhciByb290Tm9kZSA9ICQobm9kZSkucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICByb290Tm9kZS5maW5kKFwiLmZpbHRlclNlYXJjaFRleHRcIikudmFsKCcnKTtcclxuICAgIHJvb3ROb2RlLmZpbmQoJ2lucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbiAoaW5kZXg6IGFueSwgY2hlY2tib3g6IGFueSkge1xyXG4gICAgICBjaGVja2JveC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICQoY2hlY2tib3gpLnBhcmVudCgpLnNob3coKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBfY29sSWQgPSBcIiNjb2x1bW4taGVhZGVyLVwiK2kudG9TdHJpbmcoKTtcclxuICAgIHRoaXMudXBkYXRlVGFibGVIZWFkZXJTdGF0dXMoJyMnICt0YWJsZUlkLF9jb2xJZCxmYWxzZSk7XHJcblxyXG4gICAgJCgnIycgKyB0YWJsZUlkKS5EYXRhVGFibGUoKS5jb2x1bW4oaSkuc2VhcmNoKFxyXG4gICAgICAnJyxcclxuICAgICAgdHJ1ZSwgZmFsc2VcclxuICAgICkuZHJhdygpO1xyXG4gICAgcm9vdE5vZGUuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUZpbHRlcihub2RlOiBhbnksIGk6IGFueSwgdGFibGVJZDogYW55KSB7XHJcbiAgICAkKCcubW9kYWxGaWx0ZXInKS5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRSZXNpemVFdmVudChncmlkSWQ6c3RyaW5nKXtcclxuICAgIHZhciBfdGFibGVEaXYgPSAkKFwidGFibGVcIitncmlkSWQrXCIgdGhcIikgYXMgYW55O1xyXG5cdCAgdmFyIHRoSGVpZ2h0ID0gJChcInRhYmxlXCIrZ3JpZElkK1wiIHRoOmZpcnN0XCIpLmhlaWdodCgpO1xyXG5cdCAgX3RhYmxlRGl2LnJlc2l6YWJsZSh7XHJcblx0XHQgIGhhbmRsZXM6IFwiZVwiLFxyXG5cdFx0ICBtaW5IZWlnaHQ6IHRoSGVpZ2h0LFxyXG5cdFx0ICBtYXhIZWlnaHQ6IHRoSGVpZ2h0LFxyXG5cdFx0ICBtaW5XaWR0aDogNDAsXHJcblx0XHQgIHJlc2l6ZTogZnVuY3Rpb24gKGV2ZW50OmFueSwgdWk6YW55KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXNpemUuLi5cIik7XHJcbiAgICAgICAgdmFyIHNpemVyaWQgPSBcIiNcIiArICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwiaWRcIikgKyBcIi1zaXplclwiO1xyXG4gICAgICAgICQoc2l6ZXJpZCkud2lkdGgodWkuc2l6ZS53aWR0aCk7XHJcblx0XHQgIH1cclxuXHQgIH0pOyAgICBcclxuICB9XHJcblxyXG4gIHNldFNvcnRFbGVtZW50RXZlbnQoZ3JpZElkOiBzdHJpbmcpOnZvaWR7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgJChncmlkSWQpLm9uKCdjbGljaycsICd0aCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgX3RoaXMuc2V0U29ydEVsZW1lbnQoZ3JpZElkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBzZXRTb3J0RWxlbWVudChncmlkSWQ6IHN0cmluZyk6dm9pZCB7XHJcbiAgICAgICQoXCJcIiArIGdyaWRJZCArIFwiIHRoZWFkOmZpcnN0IHRoXCIpLmVhY2goZnVuY3Rpb24gKGksIHRoKSB7XHJcbiAgICAgICAgbGV0IF9jb2wgPSAkKHRoKTtcclxuICAgICAgICBsZXQgX2NvbElkID0gXCIjXCIrX2NvbC5hdHRyKCdpZCcpO1xyXG4gICAgICAgIC8vbGV0IF9zb3J0VHlwZSA9IF9jb2wuYXR0cihcImNvbHVtbi1zb3J0XCIpO1xyXG4gICAgICAgIGxldCBfY29sSWNvbklkVXAgPSBfY29sSWQrXCItaWNvbi11cFwiO1xyXG4gICAgICAgIGxldCBfY29sSWNvbklkID0gX2NvbElkK1wiLWljb25cIjtcclxuICAgICAgICBsZXQgX2NvbEljb25VcEVsZW1lbnQgPSAkKGdyaWRJZCsnICcrX2NvbEljb25JZFVwKTtcclxuICAgICAgICBsZXQgX2NvbEljb25FbGVtZW50ID0gJChncmlkSWQrJyAnK19jb2xJY29uSWQpO1xyXG4gICAgICAgIGxldCBjbHMgPSAkKHRoKS5hdHRyKCdjbGFzcycpO1xyXG5cclxuICAgICAgICAvL2lmIChfc29ydFR5cGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKGNscyAhPSBudWxsICYmIGNscy5pbmRleE9mKFwibm8tc29ydFwiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIF9jb2xJY29uVXBFbGVtZW50LnJlbW92ZUNsYXNzKFwic2FvcC1pbWctYXJyb3ctZG93blwiKTtcclxuICAgICAgICAgICAgX2NvbEljb25FbGVtZW50LnJlbW92ZUNsYXNzKFwic2FvcC1pbWctYXJyb3ctdXBcIik7XHJcbiAgICAgICAgICAgIF9jb2xJY29uRWxlbWVudC5yZW1vdmVDbGFzcyhcInNhb3AtaW1nLWFycm93LWRvd25cIik7ICAgICAgICAgXHJcbiAgICAgICAgICAgIF9jb2xJY29uRWxlbWVudC5yZW1vdmVDbGFzcyhcInNhb3AtY2wtYmx1ZVwiKTsgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICAgICAgZWxzZSBpZiAoY2xzICE9IG51bGwgJiYgY2xzLmluZGV4T2YoXCJzb3J0aW5nX2FzY1wiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIF9jb2xJY29uVXBFbGVtZW50LnJlbW92ZUNsYXNzKFwic2FvcC1pbWctYXJyb3ctZG93blwiKTtcclxuICAgICAgICAgICAgX2NvbEljb25FbGVtZW50LnJlbW92ZUNsYXNzKFwic2FvcC1pbWctYXJyb3ctZG93blwiKTtcclxuICAgICAgICAgICAgX2NvbEljb25FbGVtZW50LmFkZENsYXNzKFwic2FvcC1pbWctYXJyb3ctdXAgc2FvcC1jbC1ibHVlXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjbHMgIT0gbnVsbCAmJiBjbHMuaW5kZXhPZihcInNvcnRpbmdfZGVzY1wiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIF9jb2xJY29uVXBFbGVtZW50LnJlbW92ZUNsYXNzKFwic2FvcC1pbWctYXJyb3ctZG93blwiKTtcclxuICAgICAgICAgICAgX2NvbEljb25FbGVtZW50LnJlbW92ZUNsYXNzKFwic2FvcC1pbWctYXJyb3ctdXBcIik7XHJcbiAgICAgICAgICAgIF9jb2xJY29uRWxlbWVudC5hZGRDbGFzcyhcInNhb3AtaW1nLWFycm93LWRvd24gc2FvcC1jbC1ibHVlXCIpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgX2NvbEljb25FbGVtZW50LnJlbW92ZUNsYXNzKFwic2FvcC1pbWctYXJyb3ctdXBcIik7XHJcbiAgICAgICAgICAgIF9jb2xJY29uRWxlbWVudC5yZW1vdmVDbGFzcyhcInNhb3AtaW1nLWFycm93LWRvd25cIik7ICAgICAgICAgXHJcbiAgICAgICAgICAgIF9jb2xJY29uRWxlbWVudC5yZW1vdmVDbGFzcyhcInNhb3AtY2wtYmx1ZVwiKTsgICBcclxuICAgICAgICAgICAgX2NvbEljb25FbGVtZW50LmFkZENsYXNzKFwic2FvcC1pbWctYXJyb3ctdXBcIik7XHJcbiAgICAgICAgICAgIF9jb2xJY29uVXBFbGVtZW50LmFkZENsYXNzKFwic2FvcC1pbWctYXJyb3ctZG93blwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAvL31cclxuICAgICAgfSk7XHJcbiAgfSBcclxuXHJcbiAgY29uZmlnU2ltcGxlRmlsdGVyKGRhdGFUYWJsZTogYW55KTp2b2lkIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgdGFibGVJZCA9IFwiI1wiK2RhdGFUYWJsZVswXS5pZDtcclxuICAgIGxldCBfaUNvdW50ID0gMDtcclxuICAgIHZhciBfZmlsdGVyRW5hYmxlID0gZmFsc2U7XHJcbiAgICBsZXQgX3RoX2NvbHVtbnMgPSAkKHRhYmxlSWQpLmZpbmQoJ3RoJyk7XHJcbiAgICBfdGhfY29sdW1ucy5lYWNoKCBcclxuICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIF9pQ291bnQgPSBfaUNvdW50ICsgMTtcclxuICAgICAgICBsZXQgX2VsZW1lbnQgPSAkKHRoaXMpO1xyXG4gICAgICAgIGxldCBfZmlsdGVyVHlwZSA9IF9lbGVtZW50LmF0dHIoXCJjb2x1bW4tZmlsdGVyXCIpOyAgIFxyXG4gICAgICAgIGxldCBfbm9zb3J0ID0gX2VsZW1lbnQuaGFzQ2xhc3MoXCJuby1zb3J0XCIpO1xyXG4gICAgICAgIGxldCBfYWN0aW9uQ29sdW1uID0gX2VsZW1lbnQuaGFzQ2xhc3MoXCJzYW9wLXRhYmxlLXRoLWxhc3RcIik7XHJcbiAgICAgICAgX2VsZW1lbnQuYXR0cihcImlkXCIsXCJjb2x1bW4taGVhZGVyLVwiKyBfaUNvdW50ICtcIlwiKTtcclxuICAgICAgICBfZWxlbWVudC5jc3MoXCJvdXRsaW5lXCIsXCJub25lXCIpO1xyXG4gICAgICAgIGxldCBjb2xfdGl0bGUgPSBfZWxlbWVudC50ZXh0KCk7XHJcbiAgICAgICAgLy9sZXQgY29sX21heF93aWR0aCA9IGNvbF90aXRsZS5sZW5ndGggKiA3O1xyXG4gICAgICAgIF9lbGVtZW50LnRleHQoXCJcIik7XHJcblxyXG4gICAgICAgIC8vX2VsZW1lbnQuYXBwZW5kKFwiPGRpdiBjbGFzcz0nc2FvcC10YWJsZS1oZWFkZXItY2FwdGlvbiBzYW9wLXRhYmxlLXRleHQtdHJ1bmNhdGUnIGlkPSdjb2x1bW4taGVhZGVyLVwiKyBfaUNvdW50ICtcIi1jYXB0aW9uJyBzdHlsZT0nbWF4LXdpZHRoOlwiK2NvbF9tYXhfd2lkdGgudG9TdHJpbmcoKStcInB4ICFpbXBvcnRhbnQ7Jz5cIitjb2xfdGl0bGUrXCI8L2Rpdj5cIik7XHJcbiAgICAgICAgX2VsZW1lbnQuYXBwZW5kKFwiPGRpdiBjbGFzcz0nc2FvcC10YWJsZS1oZWFkZXItY2FwdGlvbiBzYW9wLXRhYmxlLXRleHQtdHJ1bmNhdGUnIGlkPSdjb2x1bW4taGVhZGVyLVwiKyBfaUNvdW50ICtcIi1jYXB0aW9uJz5cIitjb2xfdGl0bGUrXCI8L2Rpdj5cIik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKF9maWx0ZXJUeXBlICE9IG51bGwgJiYgX2ZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSA9PSBcInRleHRcIil7XHJcbiAgICAgICAgICBfZmlsdGVyRW5hYmxlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKF9maWx0ZXJUeXBlICE9IG51bGwgJiYgX2ZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSA9PSBcImRyb3Bkb3duXCIpe1xyXG4gICAgICAgICAgX2ZpbHRlckVuYWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX2FjdGlvbkNvbHVtbiAhPSBudWxsICYmIF9hY3Rpb25Db2x1bW4gPT0gdHJ1ZSl7XHJcbiAgICAgICAgICBfbm9zb3J0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfbm9zb3J0ID09IG51bGwgfHxfbm9zb3J0ID09IGZhbHNlKXtcclxuICAgICAgICAgIF9lbGVtZW50LmFwcGVuZChcIjxkaXYgaWQ9J2NvbHVtbi1oZWFkZXItXCIrIF9pQ291bnQgK1wiLWljb24nIHN0eWxlPSdmbG9hdDogcmlnaHQ7aGVpZ2h0OiAyMHB4O3dpZHRoOiAyMHB4O2Rpc3BsYXk6IGlubGluZS1mbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7Jz5cIik7XHJcbiAgICAgICAgICBfZWxlbWVudC5hcHBlbmQoXCI8ZGl2IGlkPSdjb2x1bW4taGVhZGVyLVwiKyBfaUNvdW50ICtcIi1pY29uLXVwJyBzdHlsZT0nZmxvYXQ6IHJpZ2h0O2hlaWdodDogMjBweDt3aWR0aDogNXB4O2Rpc3BsYXk6IGlubGluZS1mbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7Jz5cIik7ICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgX2VsZW1lbnQuYXBwZW5kKFwiPGRpdiBpZD0nY29sdW1uLWhlYWRlci1cIisgX2lDb3VudCArXCItc2l6ZXInPlwiKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoX2ZpbHRlckVuYWJsZSkge1xyXG4gICAgICAkKHRhYmxlSWQrJyB0aGVhZCB0cicpXHJcbiAgICAgIC5jbG9uZSh0cnVlKVxyXG4gICAgICAuYWRkQ2xhc3MoJ2ZpbHRlcnMnKVxyXG4gICAgICAuYXBwZW5kVG8odGFibGVJZCsnIHRoZWFkJyk7XHJcblxyXG4gICAgICAvLyBTZXR1cCAtIGFkZCBhIHRleHQgaW5wdXQgdG8gZWFjaCBmb290ZXIgY2VsbFxyXG4gICAgICBsZXQgX2ZpbHRlcnMgPSAkKHRhYmxlSWQpLmZpbmQoJy5maWx0ZXJzJyk7XHJcbiAgICAgIGxldCBfZmlsdGVyc190aCA9IF9maWx0ZXJzLmZpbmQoJ3RoJyk7XHJcbiAgICAgIF9pQ291bnQgPSAwO1xyXG4gICAgICBfZmlsdGVyc190aC5lYWNoKCBcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBfaUNvdW50ID0gX2lDb3VudCArIDE7XHJcbiAgICAgICAgICBsZXQgX2VsZW1lbnQgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgX2VsZW1lbnQub2ZmKCk7XHJcblxyXG4gICAgICAgICAgX2VsZW1lbnQuaHRtbChcIlwiKTtcclxuXHJcbiAgICAgICAgICBsZXQgX2ZpbHRlclR5cGUgPSBfZWxlbWVudC5hdHRyKFwiY29sdW1uLWZpbHRlclwiKTtcclxuXHJcbiAgICAgICAgICB3aGlsZShfZWxlbWVudFswXS5hdHRyaWJ1dGVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICBfZWxlbWVudFswXS5yZW1vdmVBdHRyaWJ1dGUoX2VsZW1lbnRbMF0uYXR0cmlidXRlc1swXS5uYW1lKTtcclxuXHJcbiAgICAgICAgICBsZXQgX2NvbElkID0gXCJjb2xfXCIrX2lDb3VudC50b1N0cmluZygpOyAgICAgICAgXHJcbiAgICAgICAgICBfZWxlbWVudC5hdHRyKFwiaWRcIixfY29sSWQpO1xyXG4gICAgICAgICAgbGV0IF9pbnB1dElkID0gX2NvbElkK1wiX2ZpbHRlclwiOyAgICAgICAgXHJcbiAgICAgICAgICBsZXQgdGl0bGUgPSBfZWxlbWVudC50ZXh0KCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmIChfZmlsdGVyVHlwZSAhPSBudWxsICYmIF9maWx0ZXJUeXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJ0ZXh0XCIpe1xyXG4gICAgICAgICAgICBsZXQgX2lucHV0RSA9IG5ldyBTYW9wSW5wdXRXRkwoe2lkOl9pbnB1dElkLGNhcHRpb246dGl0bGUscGxhY2Vob2xkZXI6dGl0bGV9KS5nZXRJbm5lckh0bWwoKTtcclxuICAgICAgICAgICAgX2VsZW1lbnQuaHRtbChfaW5wdXRFKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoX2ZpbHRlclR5cGUgIT0gbnVsbCAmJiBfZmlsdGVyVHlwZS50b0xvd2VyQ2FzZSgpID09IFwiZHJvcGRvd25cIil7XHJcbiAgICAgICAgICAgIGxldCBfc2VsZWN0SWQgPSBfY29sSWQrXCJfc2VsZWN0XCI7ICAgXHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RIdG1sID0gbmV3IFNhb3BzZWxlY3RXRkwoe2lkOl9zZWxlY3RJZCxjYXB0aW9uOlwiXCIscGxhY2Vob2xkZXI6XCJcIn0pLmdldElubmVySHRtbCgpO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0ID0gJChzZWxlY3RIdG1sKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgLy9cclxuXHJcbiAgICAgICAgICAgIGxldCBfaW5kZXggPSBfaUNvdW50O1xyXG4gICAgICAgICAgICBfaW5kZXggPSBfaW5kZXggLSAxO1xyXG5cclxuICAgICAgICAgICAgZGF0YVRhYmxlLkRhdGFUYWJsZSgpXHJcbiAgICAgICAgICAgIC5jb2x1bW4oX2luZGV4Kyc6dmlzaWJsZScpXHJcbiAgICAgICAgICAgIC5kYXRhKClcclxuICAgICAgICAgICAgLnVuaXF1ZSgpXHJcbiAgICAgICAgICAgIC5zb3J0KClcclxuICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQ6YW55LCBqOmFueSkge1xyXG4gICAgICAgICAgICAgIGlmIChkLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgbGV0IF9jb250ZW50ID0gZDtcclxuICAgICAgICAgICAgICAgIGxldCBfZmlyc3RDaGFyID0gX2NvbnRlbnRbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoX2ZpcnN0Q2hhci5jaGFyQ29kZUF0KDApID4gMTAwMCkge19jb250ZW50ID0gX2NvbnRlbnQucmVwbGFjZShfZmlyc3RDaGFyK1wiIFwiLFwiXCIpO31cclxuICAgICAgICAgICAgICAgIHNlbGVjdC5maW5kKCdzZWxlY3QnKS5sYXN0KCkuYXBwZW5kKCc8b3B0aW9uIHZhbHVlPVwiJyArIGQgKyAnXCI+JyArIF9jb250ZW50ICsgJzwvb3B0aW9uPicpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBfZWxlbWVudC5hcHBlbmQoc2VsZWN0KTtcclxuICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgfSBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXJcclxuICAgICAgJCh0YWJsZUlkK1wiIHRoZWFkIGlucHV0XCIpLm9uKCAna2V5dXAgY2hhbmdlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgIGxldCBfaW5kZXggPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmluZGV4KCk7XHJcbiAgICAgICAgZGF0YVRhYmxlLkRhdGFUYWJsZSgpXHJcbiAgICAgICAgICAgIC5jb2x1bW4oX2luZGV4Kyc6dmlzaWJsZScpXHJcbiAgICAgICAgICAgIC5zZWFyY2goIHRhcmdldC52YWx1ZSApXHJcbiAgICAgICAgICAgIC5kcmF3KCk7XHJcblxyXG4gICAgICAgIHZhciB2YWwgPSAkLmZuLmRhdGFUYWJsZS51dGlsLmVzY2FwZVJlZ2V4KHRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgZGF0YVRhYmxlLkRhdGFUYWJsZSgpLnNlYXJjaCh2YWwgPyAnXicgKyB2YWwgKyAnJCcgOiAnJywgdHJ1ZSwgZmFsc2UpLmRyYXcoKTtcclxuXHJcbiAgICAgIH0gKTsgICAgXHJcbiBcclxuICAgICAgLy8gQXBwbHkgdGhlIGRyb3Bkb3duIGZpbHRlclxyXG4gICAgICAkKHRhYmxlSWQrXCIgdGhlYWQgc2VsZWN0XCIpLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgIGxldCBfaW5kZXggPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmluZGV4KCk7XHJcbiAgICAgICAgdmFyIHZhbCA9ICQuZm4uZGF0YVRhYmxlLnV0aWwuZXNjYXBlUmVnZXgodGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICBkYXRhVGFibGUuRGF0YVRhYmxlKClcclxuICAgICAgICAgICAgLmNvbHVtbihfaW5kZXgrJzp2aXNpYmxlJylcclxuICAgICAgICAgICAgLnNlYXJjaCh2YWwgPyAnXicgKyB2YWwgKyAnJCcgOiAnJywgdHJ1ZSwgZmFsc2UpXHJcbiAgICAgICAgICAgIC5kcmF3KCk7XHJcbiAgICAgIH0gKTsgIFxyXG5cclxuICAgICAgLy9cclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgY29uZmlnU2ltcGxlU29ydChncmlkSWQ6IHN0cmluZyk6dm9pZCB7XHJcbiAgICB0aGlzLnNldFNvcnRFbGVtZW50KGdyaWRJZCk7XHJcbiAgICB0aGlzLnNldFNvcnRFbGVtZW50RXZlbnQoZ3JpZElkKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuIiwi77u/Ly8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL0B0eXBlcy9kYXRhLXRhYmxlcy90eXBlcy5kLnRzXCIgLz5cclxuaW1wb3J0IHsgZ2xvYmFsIH0gZnJvbSBcIi4uL0NvbW1vbi9zYW9wLWNvbW1vblwiO1xyXG5pbXBvcnQgeyBTYW9wV2ViR3JpZEZpbHRlciB9IGZyb20gXCIuLi9Db21wb25lbnRzL3Nhb3AtZ3JpZC1maWx0ZXJcIjtcclxuaW1wb3J0IHsgRGF0YVRhYmxlcyB9IGZyb20gXCIuLi9AdHlwZXMvZGF0YS10YWJsZXMvdHlwZXNcIjtcclxuaW1wb3J0IHsgU2FvcFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uL0NvcmUvc2FvcC10cmFuc2xhdGUnO1xyXG5cclxuXHJcbi8vIGZ1bmN0aW9uIHN0YXR1c0Zvcm1hdHRlcihyb3c6IG51bWJlciwgY2VsbDogbnVtYmVyLCB2YWx1ZTogYW55LCBjb2x1bW5EZWY6IFNsaWNrLkNvbHVtbjxTbGljay5TbGlja0RhdGE+LCBkYXRhQ29udGV4dDogU2xpY2suU2xpY2tEYXRhKSB7XHJcbi8vICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcclxuLy8gICAgIHJldHVybiBcIi1cIjtcclxuLy8gICB9IGVsc2UgaWYgKHZhbHVlIDwgNTApIHtcclxuLy8gICAgIHJldHVybiBcIjxzcGFuIHN0eWxlPSdjb2xvcjpyZWQ7Zm9udC13ZWlnaHQ6Ym9sZDsnPlwiICsgdmFsdWUgKyBcIiU8L3NwYW4+XCI7XHJcbi8vICAgfSBlbHNlIHtcclxuLy8gICAgIHJldHVybiBcIjxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+XCIgKyB2YWx1ZSArIFwiJTwvc3Bhbj5cIjtcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2FvcFdlYkdyaWRUb29sYmFyIHtcclxuICBpZD86c3RyaW5nLFxyXG4gIGNhcHRpb246c3RyaW5nLFxyXG4gIGJ1dHRvbnM/OlNhb3BXZWJHcmlkVG9vbGJhckJ1dHRvbltdXHJcbiAgaXRlbXNUZW1wbGF0ZUlkPzogc3RyaW5nO1xyXG59IFxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTYW9wV2ViR3JpZFRvb2xiYXJCdXR0b24ge1xyXG4gIGlkOnN0cmluZyxcclxuICBjYXB0aW9uIDpzdHJpbmcsICBcclxuICBjbGFzcz8gOnN0cmluZyxcclxuICBhdHRyaWJ1dGVzPzpzdHJpbmcsXHJcbiAgb25DbGlja0V2ZW50PzpzdHJpbmcsXHJcbiAgdGVtcGxhdGU/OiBzdHJpbmc7XHJcbn0gXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhb3BXZWJHcmlkVG9nZ2xlUGFuZWwge1xyXG4gIGVuYWJsZWQ6Ym9vbGVhblxyXG59IFxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTYW9wV2ViR3JpZFByb3BlcnRpZXMge1xyXG4gIGdyaWRJZDpzdHJpbmdcclxuICAsY3NzPzpzdHJpbmdcclxuICAsdG9nZ2xlUGFuZWw/OlNhb3BXZWJHcmlkVG9nZ2xlUGFuZWxcclxuICAsdG9vbGJhcj86U2FvcFdlYkdyaWRUb29sYmFyICBcclxuICAsZGF0YVRhYmxlPzpTYW9wV2ViRGF0YVRhYmxlXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2FvcFdlYkRhdGFUYWJsZSB7XHJcbiAgZW5hYmxlZDpib29sZWFuXHJcbiAgLGNvbHVtbkRlZnNTZXR0aW5ncz86IERhdGFUYWJsZXMuQ29sdW1uRGVmc1NldHRpbmdzW11cclxuICAsb3JkZXJpbmc/OmJvb2xlYW5cclxuICAsY29sdW1ucz86YW55W11cclxuICAsZGF0YT86IGFueVxyXG4gICxvcmRlcj86IEFycmF5PChudW1iZXIgfCBzdHJpbmcpPiB8IEFycmF5PEFycmF5PChudW1iZXIgfCBzdHJpbmcpPj5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BXZWJHcmlkIHtcclxuICBwcml2YXRlIF9wcm9wZXJ0aWVzOlNhb3BXZWJHcmlkUHJvcGVydGllc1xyXG4gIHByaXZhdGUgX3RhYmxlRGl2OkhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBfdHJhbnNsYXRpb25TZXJ2aWNlOiBTYW9wVHJhbnNsYXRpb25TZXJ2aWNlO1xyXG4gIC8vXHJcbiAgcHVibGljIGxpYk5hbWU6IHN0cmluZzsgIFxyXG4gIHB1YmxpYyB3ZWJHcmlkRmlsdGVyOlNhb3BXZWJHcmlkRmlsdGVyO1xyXG4gIHB1YmxpYyBkYXRhVGFibGU6IERhdGFUYWJsZXMuQXBpPGFueT47XHJcbiAgcHVibGljIG1hcmtlZENvbHVtbkNoZWNrYm94OiBKUXVlcnk8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKGxpYk5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5saWJOYW1lID0gbGliTmFtZTtcclxuICAgIHRoaXMud2ViR3JpZEZpbHRlciA9IG5ldyBTYW9wV2ViR3JpZEZpbHRlcigpO1xyXG4gICAgdGhpcy5fdHJhbnNsYXRpb25TZXJ2aWNlID0gbmV3IFNhb3BUcmFuc2xhdGlvblNlcnZpY2UoKTtcclxuICB9ICBcclxuXHJcbiAgc2V0VGVybWlub2xvZ3lMaXN0KCl7XHJcbiAgICBsZXQgX3Rlcm1pbm9sb2d5OiBzdHJpbmdbXSA9IFsnTmkgcG9kYXRrb3YgemEgcHJpa2F6LiddO1xyXG4gICAgdGhpcy5fdHJhbnNsYXRpb25TZXJ2aWNlLnNldFRyYW5zbGF0aW9uc0xpc3QoX3Rlcm1pbm9sb2d5KTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgaW5pdChncmlkUHJvcDpTYW9wV2ViR3JpZFByb3BlcnRpZXMpIHtcclxuICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBncmlkUHJvcDtcclxuICAgIHRoaXMuX3RhYmxlRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihncmlkUHJvcC5ncmlkSWQpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAvL1xyXG4gICAgbGV0IF90b2dnbGVQYW5lbERlZmF1bHQgPSB7ZW5hYmxlZDp0cnVlfTtcclxuICAgIGdyaWRQcm9wLnRvZ2dsZVBhbmVsID0gey4uLl90b2dnbGVQYW5lbERlZmF1bHQsIC4uLmdyaWRQcm9wLnRvZ2dsZVBhbmVsfVxyXG4gICAgaWYgKGdsb2JhbC5pc1VuRGVmaW5lZChncmlkUHJvcC50b2dnbGVQYW5lbCkpe1xyXG4gICAgICBncmlkUHJvcC50b2dnbGVQYW5lbCA9IF90b2dnbGVQYW5lbERlZmF1bHQ7XHJcbiAgICB9ICAgICAgXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMud2ViR3JpZEZpbHRlci5pZCA9IGdyaWRQcm9wLmdyaWRJZCtcImZpbHRlclwiO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUh0bWxUYWJsZSgpO1xyXG4gICAgdGhpcy5hZGRHcmlkVG9vbGJhcigpO1xyXG4gICAgLy8gZGV0IGRlZmF1bHRzXHJcbiAgICBsZXQgX01zZ19lbXB0eVRhYmxlID0gdGhpcy5fdHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZShcIk5pIHBvZGF0a292IHphIHByaWthei5cIilcclxuXHJcbiAgICBsZXQgX2RhdGFUYWJsZURlZiA9IHtlbmFibGVkOnRydWUsb3JkZXJpbmc6dHJ1ZX07XHJcbiAgICBncmlkUHJvcC5kYXRhVGFibGUgPSB7Li4uX2RhdGFUYWJsZURlZiwgLi4uZ3JpZFByb3AuZGF0YVRhYmxlfVxyXG5cclxuICAgIGlmIChnbG9iYWwuaXNVbkRlZmluZWQoZ3JpZFByb3AuZGF0YVRhYmxlKSl7XHJcbiAgICAgIGdyaWRQcm9wLmRhdGFUYWJsZSA9IGdyaWRQcm9wLmRhdGFUYWJsZTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgbGV0IF9jb2x1bW5EZWZzU2V0dGluZ3NEZWYgPSBbe29yZGVyYWJsZTogdHJ1ZSwgdGFyZ2V0czogIFwibm8tc29ydFwifV07XHJcbiAgICBncmlkUHJvcC5kYXRhVGFibGUuY29sdW1uRGVmc1NldHRpbmdzID0gey4uLl9jb2x1bW5EZWZzU2V0dGluZ3NEZWYsLi4uZ3JpZFByb3AuZGF0YVRhYmxlLmNvbHVtbkRlZnNTZXR0aW5nc31cclxuXHJcbiAgICBpZiAoZ2xvYmFsLmlzVW5EZWZpbmVkKGdyaWRQcm9wLmRhdGFUYWJsZS5jb2x1bW5EZWZzU2V0dGluZ3MpKXtcclxuICAgICAgZ3JpZFByb3AuZGF0YVRhYmxlLmNvbHVtbkRlZnNTZXR0aW5ncyA9IF9jb2x1bW5EZWZzU2V0dGluZ3NEZWY7XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgaWYgKCFnbG9iYWwuaXNVbkRlZmluZWQodGhpcy5fcHJvcGVydGllcy5kYXRhVGFibGUpIFxyXG4gICAgICAmJiB0aGlzLl9wcm9wZXJ0aWVzLmRhdGFUYWJsZS5lbmFibGVkXHJcbiAgICAgICl7XHJcbiAgICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gXHJcbiAgICAgICAgJChncmlkUHJvcC5ncmlkSWQpLkRhdGFUYWJsZShcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcInBhZ2luZ1wiOiBmYWxzZVxyXG4gICAgICAgICAgICAgICwgXCJzZWFyY2hpbmdcIjogdHJ1ZVxyXG4gICAgICAgICAgICAgICxcImF1dG9XaWR0aFwiOiB0cnVlXHJcbiAgICAgICAgICAgICAgLG9yZGVyQ2VsbHNUb3A6IHRydWVcclxuICAgICAgICAgICAgICAvLywgXCJkb21cIjogXCJSbGZydGlwXCJcclxuICAgICAgICAgICAgICAsIGluaXRDb21wbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyaWRQcm9wLmRhdGFUYWJsZS5vcmRlcmluZyl7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLndlYkdyaWRGaWx0ZXIuY29uZmlnU2ltcGxlRmlsdGVyKHRoaXMpOyAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBfdGhpcy53ZWJHcmlkRmlsdGVyLmNvbmZpZ1NpbXBsZVNvcnQoX3RoaXMuX3Byb3BlcnRpZXMuZ3JpZElkKTsgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vaWYoIWlzVW5EZWZpbmVkKF90aGlzLl9wcm9wZXJ0aWVzLmRhdGFUYWJsZS5maWx0ZXJzKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICBfdGhpcy53ZWJHcmlkRmlsdGVyLmNvbmZpZ0ZpbHRlcihfdGhpcy5saWJOYW1lLHRoaXMsIF90aGlzLl9wcm9wZXJ0aWVzLmRhdGFUYWJsZS5maWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgIC8vfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAsb3JkZXI6IF90aGlzLl9wcm9wZXJ0aWVzLmRhdGFUYWJsZS5vcmRlclxyXG4gICAgICAgICAgICAgIC8vICxhamF4OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2ssIHNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBjYWxsYmFjayh7IGRhdGE6IGRhdGEgfSkgLy9yZWxvYWRzIGRhdGEgXHJcbiAgICAgICAgICAgICAgLy8gfSBcclxuICAgICAgICAgICAgICAsY29sdW1uRGVmczogX3RoaXMuX3Byb3BlcnRpZXMuZGF0YVRhYmxlLmNvbHVtbkRlZnNTZXR0aW5ncyBcclxuICAgICAgICAgICAgICAsb3JkZXJpbmcgOiBncmlkUHJvcC5kYXRhVGFibGUub3JkZXJpbmcgXHJcbiAgICAgICAgICAgICAgLGxhbmd1YWdlIDoge2VtcHR5VGFibGU6X01zZ19lbXB0eVRhYmxlLHplcm9SZWNvcmRzOl9Nc2dfZW1wdHlUYWJsZX1cclxuICAgICAgICAgIH1cclxuICAgICAgICApOyAgICBcclxuICAgICAgLy9cclxuICAgICAgJChncmlkUHJvcC5ncmlkSWQrXCJfZmlsdGVyXCIpLnJlbW92ZSgpO1xyXG4gICAgICAkKGdyaWRQcm9wLmdyaWRJZCtcIl9pbmZvXCIpLnJlbW92ZSgpOyBcclxuICAgICAgdGhpcy53ZWJHcmlkRmlsdGVyLnNldFJlc2l6ZUV2ZW50KHRoaXMuX3Byb3BlcnRpZXMuZ3JpZElkKTtcclxuICAgICAgLy9cclxuICAgIH1cclxuICAgXHJcbiAgICAvL1xyXG5cclxuICB9XHJcblxyXG4gIGFkZFRvb2xiYXJCdXR0b25zKGdyaWRQYW5lbDogSlF1ZXJ5PEhUTUxFbGVtZW50PixidXR0b25zOlNhb3BXZWJHcmlkVG9vbGJhckJ1dHRvbltdKXtcclxuICAgIGlmKGdsb2JhbC5pc1VuRGVmaW5lZChidXR0b25zKSA9PSBmYWxzZSl7XHJcbiAgICAgIGJ1dHRvbnMuZm9yRWFjaChfYnV0dG9uID0+IHtcclxuICAgICAgICB2YXIgYnV0dG9uVGVtcGxhdGUgPSBcclxuICAgICAgICBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIG15LWF1dG9cIiBzdHlsZT1cInBhZGRpbmctbGVmdDoyMXB4O1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBzYW9wLWJ1dHRvbi1wcmltYXJ5IG14LWF1dG8gZC1ibG9ja1wiIGlkPVwiJHtfYnV0dG9uLmlkfVwiIHR5cGU9XCJzdWJtaXRcIiBvbmNsaWNrPVwiJHtfYnV0dG9uLm9uQ2xpY2tFdmVudH1cIiBzdHlsZT1cInBhZGRpbmctbGVmdDoxMHB4O1wiPjxzcGFuIGNsYXNzPVwic2FvcC1pbWctcGx1c1wiPjwvc3Bhbj4ke19idXR0b24uY2FwdGlvbn08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgaWYgKF9idXR0b24udGVtcGxhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgYnV0dG9uVGVtcGxhdGUgPSBfYnV0dG9uLnRlbXBsYXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JpZFBhbmVsLmZpbmQoXCIjdG9vbGJhckJ1dHRvbnNcIikuYXBwZW5kKGJ1dHRvblRlbXBsYXRlKTsgICAgICBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUh0bWxUYWJsZSgpIHtcclxuICAgIHRoaXMuZ2VuZXJhdGVUYWJsZUJvZHkoKTsgICAgICAgIFxyXG4gICAgdGhpcy5nZW5lcmF0ZVRhYmxlSGVhZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUYWJsZUhlYWQoKSB7XHJcbiAgICBpZiAoIWdsb2JhbC5pc1VuRGVmaW5lZCh0aGlzLl9wcm9wZXJ0aWVzLmRhdGFUYWJsZSkpe1xyXG4gICAgICBpZighZ2xvYmFsLmlzVW5EZWZpbmVkKHRoaXMuX3Byb3BlcnRpZXMuZGF0YVRhYmxlLmNvbHVtbnMpKXtcclxuICAgICAgICBsZXQgdGhlYWQgPSB0aGlzLl90YWJsZURpdi5jcmVhdGVUSGVhZCgpO1xyXG4gICAgICAgIGxldCByb3cgPSB0aGVhZC5pbnNlcnRSb3coKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgdGhpcy5fcHJvcGVydGllcy5kYXRhVGFibGUuY29sdW1ucykge1xyXG4gICAgICAgICAgbGV0IHRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRoXCIpO1xyXG4gICAgICAgICAgbGV0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXkubmFtZSk7XHJcbiAgICAgICAgICB0aC5hcHBlbmRDaGlsZCh0ZXh0KTtcclxuICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGdlbmVyYXRlVGFibGVCb2R5KCkge1xyXG4gICAgaWYgKCFnbG9iYWwuaXNVbkRlZmluZWQodGhpcy5fcHJvcGVydGllcy5kYXRhVGFibGUpKXtcclxuICAgICAgaWYgKCFnbG9iYWwuaXNVbkRlZmluZWQodGhpcy5fcHJvcGVydGllcy5kYXRhVGFibGUuZGF0YSkpe1xyXG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgdGhpcy5fcHJvcGVydGllcy5kYXRhVGFibGUuZGF0YSkge1xyXG4gICAgICAgICAgbGV0IHJvdyA9IHRoaXMuX3RhYmxlRGl2Lmluc2VydFJvdygpO1xyXG4gICAgICAgICAgZm9yIChsZXQga2V5IGluIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgbGV0IGNlbGwgPSByb3cuaW5zZXJ0Q2VsbCgpO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGVsZW1lbnRba2V5XSk7XHJcbiAgICAgICAgICAgIGNlbGwuYXBwZW5kQ2hpbGQodGV4dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRHcmlkVG9vbGJhcigpIHtcclxuICAgIGxldCBncmlkUGFuZWw6IEpRdWVyeTxIVE1MRWxlbWVudD47XHJcbiAgICBsZXQgX2NzcyA9IGdsb2JhbC5pc1VuRGVmaW5lZCh0aGlzLl9wcm9wZXJ0aWVzLmNzcykgPT0gZmFsc2UgPyB0aGlzLl9wcm9wZXJ0aWVzLmNzcyA6XCJcIjtcclxuXHJcbiAgICBsZXQgZ3JpZFBhbmVsVGVtcGxhdGUgPSBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNhb3AtdGFibGUtZml4aGVhZCAke19jc3N9XCI+XHJcbiAgICAgICAgICA8dGFibGUgaWQ9XCIjc2xpY2tHcmlkI1wiPjwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgO1xyXG4gICAgaWYgKCFnbG9iYWwuaXNVbkRlZmluZWQodGhpcy5fcHJvcGVydGllcy50b29sYmFyKSkge1xyXG4gICAgICBpZiAoZ2xvYmFsLmlzVW5EZWZpbmVkKHRoaXMuX3Byb3BlcnRpZXMudG9vbGJhci5pZCkpIHtcclxuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzLnRvb2xiYXIuaWQgPSB0aGlzLl9wcm9wZXJ0aWVzLmdyaWRJZCtcIlRCXCI7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGdyaWRUb2dnbGVQYW5lbCA9IGBgO1xyXG4gICAgICBsZXQgZ3JpZFRvZ2dsZVBhbmVsQ2xhc3MgPSBcIlwiO1xyXG4gICAgICBsZXQgZ3JpZEJvcmRlckJvdHRvbSA9IFwiXCI7XHJcbiAgICAgIGlmKHRoaXMuX3Byb3BlcnRpZXMudG9nZ2xlUGFuZWwuZW5hYmxlZCkge1xyXG4gICAgICAgIGdyaWRUb2dnbGVQYW5lbENsYXNzID0gXCJjb2xsYXBzZSBzaG93XCI7XHJcbiAgICAgICAgZ3JpZEJvcmRlckJvdHRvbSA9IFwic2FvcC1ib3JkZXItYm90dG9tXCI7XHJcblxyXG4gICAgICAgIGdyaWRUb2dnbGVQYW5lbCA9IFxyXG4gICAgICAgICAgYFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNhb3AtZm9ybS1wYW5lbC1oZWFkaW5nIHNhb3AtdG9nZ2xlLXBhbmVsXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwic2FvcC10eHQtMyBtLTBcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgYXJpYS1leHBhbmRlZD1cInRydWVcIiBkYXRhLXRhcmdldD1cIiNjb2xsYXBzZSR7dGhpcy5fcHJvcGVydGllcy50b29sYmFyLmlkfVwiPlxyXG4gICAgICAgICAgICAke3RoaXMuX3Byb3BlcnRpZXMudG9vbGJhci5jYXB0aW9ufSA8c3BhbiBjbGFzcz1cInNhb3AtaW1nLWRvd24gc2ktbSBzYW9wLXRvZ2dsZS1hcnJvdyByaWdodFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBgOyAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgX3Rvb2xiYXJJdGVtcyA9IGBgO1xyXG4gICAgICBpZiAoIWdsb2JhbC5pc1VuRGVmaW5lZCh0aGlzLl9wcm9wZXJ0aWVzLnRvb2xiYXIuaXRlbXNUZW1wbGF0ZUlkKSl7XHJcbiAgICAgICAgbGV0IF90b29sYmFySXRlbXNUZW1wbGF0ZSA9ICQodGhpcy5fcHJvcGVydGllcy50b29sYmFyLml0ZW1zVGVtcGxhdGVJZCk7XHJcbiAgICAgICAgaWYgKF90b29sYmFySXRlbXNUZW1wbGF0ZS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgIF90b29sYmFySXRlbXMgPSBfdG9vbGJhckl0ZW1zVGVtcGxhdGUuaHRtbCgpO1xyXG4gICAgICAgICAgX3Rvb2xiYXJJdGVtc1RlbXBsYXRlLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZ3JpZFBhbmVsVGVtcGxhdGUgPSBgXHJcbiAgICAgICAgPGRpdiBpZD1cIiR7dGhpcy5fcHJvcGVydGllcy50b29sYmFyLmlkfVwiIGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdCAke2dyaWRCb3JkZXJCb3R0b219XCI+XHJcbiAgICAgICAgICAke2dyaWRUb2dnbGVQYW5lbH1cclxuICAgICAgICAgIDxkaXYgaWQ9XCJjb2xsYXBzZSR7dGhpcy5fcHJvcGVydGllcy50b29sYmFyLmlkfVwiIGNsYXNzPVwic2FvcC1mb3JtLXBhbmVsLWJvZHkgJHtncmlkVG9nZ2xlUGFuZWxDbGFzc31cIj5cclxuICAgICAgICAgICAgPGRpdiBpZD1cImdyaWQtdG9vbGJhclwiIGNsYXNzPVwic2FvcC10YWJsZS10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBpZD1cInRvb2xiYXJCdXR0b25zXCIgY2xhc3M9XCJyb3cgbXItMCBtbC0wIGp1c3RpZnktY29udGVudC1zdGFydFwiIHN0eWxlPVwiaGVpZ2h0OjEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgJHtfdG9vbGJhckl0ZW1zfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhb3AtdGFibGUtZml4aGVhZCAke19jc3N9XCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGlkPVwiI3NsaWNrR3JpZCNcIj48L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgO1xyXG4gICAgfVxyXG4gICAgZ3JpZFBhbmVsVGVtcGxhdGUgPSBncmlkUGFuZWxUZW1wbGF0ZS5yZXBsYWNlKFwiI3NsaWNrR3JpZCNcIix0aGlzLl9wcm9wZXJ0aWVzLmdyaWRJZC5yZXBsYWNlKFwiI1wiLFwiXCIpKTtcclxuICAgIGdyaWRQYW5lbCA9ICQoZ3JpZFBhbmVsVGVtcGxhdGUpO1xyXG4gICAgaWYgKCFnbG9iYWwuaXNVbkRlZmluZWQodGhpcy5fcHJvcGVydGllcy50b29sYmFyKSkge1xyXG4gICAgICB0aGlzLmFkZFRvb2xiYXJCdXR0b25zKGdyaWRQYW5lbCx0aGlzLl9wcm9wZXJ0aWVzLnRvb2xiYXIuYnV0dG9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IF90YWJsZUh0bWwgPSB0aGlzLl90YWJsZURpdjtcclxuXHJcbiAgICAkKHRoaXMuX3Byb3BlcnRpZXMuZ3JpZElkKS5yZXBsYWNlV2l0aChncmlkUGFuZWwpO1xyXG5cclxuICAgICQodGhpcy5fcHJvcGVydGllcy5ncmlkSWQpLnJlcGxhY2VXaXRoKF90YWJsZUh0bWwpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaERhdGEoZGF0YTphbnkpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpO1xyXG4gICAgZGF0YS5lYWNoKGZ1bmN0aW9uKCBpbmRleDphbnksIHRyOnN0cmluZyApIHtcclxuICAgICAgX3RoaXMuZGF0YVRhYmxlLnJvdy5hZGQoJCh0cikpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgcmVwbGFjZUdyaWRSb3dzKGh0bWxDb250ZW50OnN0cmluZykge1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCk7XHJcbiAgICAkKHRoaXMuX3Byb3BlcnRpZXMuZ3JpZElkK1wiID4gdGJvZHkgPiB0clwiLCAkKGh0bWxDb250ZW50KSkuZWFjaChcclxuICAgICAgZnVuY3Rpb24oaW5kZXg6YW55LHRyOmFueSkge1xyXG4gICAgICAgIF90aGlzLmRhdGFUYWJsZS5yb3cuYWRkKCQodHIpKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTsgICAgXHJcbiAgfSAgXHJcblxyXG4gIHNldFRhYmVsRm9vdGhlcigpOnZvaWQge1xyXG4gICAgJCh0aGlzLl9wcm9wZXJ0aWVzLmdyaWRJZCsnIGJvZHknKSAgXHJcbiAgfVxyXG5cclxuICBpbml0V2ViR3JpZENvbHVtbkNoZWNrYm94QmluZENsaWNrRXZlbnQoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgdGhpcy5tYXJrZWRDb2x1bW5DaGVja2JveCA9IG51bGw7XHJcblxyXG4gICAgaWYgKGdsb2JhbC5pc1VuRGVmaW5lZCh0aGlzLl90YWJsZURpdikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgICQoXCIjXCIgKyB0aGlzLl90YWJsZURpdi5pZCArIFwiIC5zYW9wLXRkLWlucHV0LWNoZWNrYm94XCIpLm9mZihcImNoYW5nZVwiKTtcclxuICAgICQoXCIjXCIgKyB0aGlzLl90YWJsZURpdi5pZCArIFwiIC5zYW9wLXRkLWlucHV0LWNoZWNrYm94XCIpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAocm93KSB7XHJcbiAgICAgIF90aGlzLm1hcmtlZENvbHVtbkNoZWNrYm94ID0gJChcIiNcIiArIF90aGlzLl90YWJsZURpdi5pZCArIFwiICNcIiArIHJvdy5jdXJyZW50VGFyZ2V0LmlkKTtcclxuXHJcbiAgICAgIC8vIG9kem5hY2ltbyB2c2Ugb3N0YWxlIGNoZWNrYm94ZVxyXG4gICAgICAkKFwiI1wiICsgX3RoaXMuX3RhYmxlRGl2LmlkICsgXCIgaW5wdXQuc2FvcC10ZC1pbnB1dC1jaGVja2JveDpub3QoI1wiICsgcm93LmN1cnJlbnRUYXJnZXQuaWQgKyBcIilcIikuZWFjaChcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAkKFwiI1wiICsgX3RoaXMuX3RhYmxlRGl2LmlkICsgXCIgI1wiICsgdGhpcy5pZCkucHJvcChcImNoZWNrZWRcIiwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgX3RoaXMuYWZ0ZXJDb2x1bW5DaGVja2JveENoYW5nZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWZ0ZXJDb2x1bW5DaGVja2JveENoYW5nZWQoKTogdm9pZCB7XHJcblxyXG4gIH1cclxuICAvL1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiIsIu+7v1xyXG5leHBvcnQgaW50ZXJmYWNlIFNhb3BJbnB1dFdGTFByb3BlcnRpZXMge1xyXG4gICAgaWQ6c3RyaW5nO1xyXG4gICAgcGxhY2Vob2xkZXI6c3RyaW5nO1xyXG4gICAgY2FwdGlvbjpzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wSW5wdXRXRkwge1xyXG4gICAgcHJpdmF0ZSBfaW5wdXRUZW1wbGF0ZTpzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOlNhb3BJbnB1dFdGTFByb3BlcnRpZXMpIHtcclxuICAgICAgICB0aGlzLl9pbnB1dFRlbXBsYXRlID0gXHJcbiAgICAgICAgYFxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2FvcC1jb2wtZmlsdGVyLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzaGFkb3ctbm9uZSBzYW9wLWNvbnRyb2wgc2FvcC1jb250cm9sLWxpc3RCb3ggc2FvcC1jb2wtZmlsdGVyLWlucHV0XCIgc3R5bGU9XCJ3aWR0aDo5NSUgIWltcG9ydGFudDtcIiBpZD1cIiR7cHJvcGVydGllcy5pZH1cIiBuYW1lPVwiJHtwcm9wZXJ0aWVzLmlkfVwiIHBsYWNlaG9sZGVyPVwiJHtwcm9wZXJ0aWVzLnBsYWNlaG9sZGVyfVwiIHRhYmluZGV4PVwiMFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIj5cclxuICAgICAgICAgICAgPGkgaWQ9XCJzZWFyY2hJY29uXCIgY2xhc3M9XCJzYW9wLWltZy1zZWFyY2ggc2ktcyBmb3JtLWNvbnRyb2wtZmVlZGJhY2tcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyO3RvcDo1cHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDogY2FsYygxMDAlIC0gNDBweCkgIWltcG9ydGFudDtcIi8+XHJcbiAgICAgICAgPC9zcGFuPiAgICAgICAgXHJcbiAgICAgICAgYDsgICAgICAgICAgICAgIFxyXG4gICAgICAgIC8vIHRoaXMuX2lucHV0VGVtcGxhdGUgPSBcclxuICAgICAgICAvLyBgXHJcbiAgICAgICAgLy8gPHNwYW4gY2xhc3M9XCJoYXMtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAvLyAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHNoYWRvdy1ub25lIHNhb3AtY29udHJvbCBzYW9wLWNvbnRyb2wtbGlzdEJveFwiIGRhdGEtaW5wdXRtYXNrLWFsaWFzPVwiZGQubW0ueXl5eSBoaDptbVwiIGlkPVwiJHtwcm9wZXJ0aWVzLmlkfVwiIG5hbWU9XCIke3Byb3BlcnRpZXMuaWR9XCIgcGxhY2Vob2xkZXI9XCIke3Byb3BlcnRpZXMucGxhY2Vob2xkZXJ9XCIgdGFiaW5kZXg9XCIwXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIlwiIGRpc2FibGVkPVwiXCI+XHJcbiAgICAgICAgLy8gICAgIDxsYWJlbCBjbGFzcz1cInNhb3AtZmxvYXRpbmctbGFiZWwgc2FvcC10eHQtN1wiIGZvcj1cIiR7cHJvcGVydGllcy5pZH1cIj4ke3Byb3BlcnRpZXMuY2FwdGlvbn08L2xhYmVsPlxyXG4gICAgICAgIC8vICAgICA8aSBpZD1cImNhbGVuZGFySWNvblwiIGNsYXNzPVwic2FvcC1pbWctY2FsZW5kYXIgc2ktcyBmb3JtLWNvbnRyb2wtZmVlZGJhY2tcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyO2xlZnQ6MjMwcHg7dG9wOjVweDtwb3NpdGlvbjphYnNvbHV0ZTtcIi8+XHJcbiAgICAgICAgLy8gPC9zcGFuPiAgICAgICAgXHJcbiAgICAgICAgLy8gYDsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGdldEVsZW1lbnQoKTpKUXVlcnk8SFRNTEVsZW1lbnQ+e1xyXG4gICAgICAgIGxldCBfZWxlbWVudCA9ICQodGhpcy5faW5wdXRUZW1wbGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIF9lbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldElubmVySHRtbCgpOnN0cmluZ3tcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRUZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCLvu79cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL0B0eXBlcy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvaW5kZXguZC50c1wiIC8+XHJcbmltcG9ydCB7ICBnbG9iYWwgfSBmcm9tIFwiLi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcElucHV0TWFzayB7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcElucHV0TWFzay5pbml0Li4uXCIpO1xyXG4gICAgICAgIHZhciBpbnB1dERpdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignaW5wdXRbZGF0YS1pbnB1dG1hc2stYWxpYXNdJyk7XHJcbiAgICAgICAgSW5wdXRtYXNrKCkubWFzayhpbnB1dERpdnMpO1xyXG5cclxuICAgICAgICAkKFwiLnNhb3AtZGVjaW1hbC0yXCIpLmlucHV0bWFzayh7XHJcbiAgICAgICAgICAgICdhbGlhcyc6ICdkZWNpbWFsJyxcclxuICAgICAgICAgICAgJ3JhZGl4UG9pbnQnOiAnLCcsXHJcbiAgICAgICAgICAgICdkaWdpdHMnOiAyLFxyXG4gICAgICAgICAgICAnZGlnaXRzT3B0aW9uYWwnOiBmYWxzZSxcclxuICAgICAgICAgICAgJ3BsYWNlaG9sZGVyJzogJzAsMDAnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoXCIuc2FvcC1kZWNpbWFsLTNcIikuaW5wdXRtYXNrKHtcclxuICAgICAgICAgICAgJ2FsaWFzJzogJ2RlY2ltYWwnLFxyXG4gICAgICAgICAgICAncmFkaXhQb2ludCc6ICcsJyxcclxuICAgICAgICAgICAgJ2RpZ2l0cyc6IDMsXHJcbiAgICAgICAgICAgICdkaWdpdHNPcHRpb25hbCc6IGZhbHNlLFxyXG4gICAgICAgICAgICAncGxhY2Vob2xkZXInOiAnMCwwMDAnXHJcbiAgICAgICAgfSk7ICBcclxuXHJcbiAgICAgICAgaW5wdXREaXZzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJlbGVtZW50LmluaXQuLi4uLi4uLi4uLi4uLi4uLi4uLi4uXCIgKyBlbGVtZW50LmlkKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzcGFuRGl2OmFueTtcclxuICAgICAgICAgICAgbGV0IGVsZW1lbnRBdHJyID0gJChlbGVtZW50KS5hdHRyKFwiZGF0YS1pbnB1dG1hc2stYWxpYXNcIik7XHJcbiAgICAgICAgICAgIGlmIChnbG9iYWwuaXNFbXB0eShlbGVtZW50QXRycikpIHtyZXR1cm47fTtcclxuICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhlbGVtZW50QXRycik7XHJcbiAgICAgICAgICAgIHNwYW5EaXYgPSAkKGVsZW1lbnQpLnBhcmVudCgpO1xyXG4gICAgICAgICAgICBpZiAoc3BhbkRpdiA9PT0gbnVsbCkgeyByZXR1cm47fTtcclxuICAgICAgICAgICAgaWYgKHNwYW5EaXYuaGFzQ2xhc3MoXCJoYXMtZmxvYXQtbGFiZWxcIik9PT1mYWxzZSkgeyByZXR1cm47fTtcclxuICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhzcGFuRGl2LmdldCgwKS5pZCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgbGFuZ3VhZ2VBdHJyID0gKFN0cmluZykoJChcIiNzaXRlTGFuZ3VhZ2VcIikudmFsKCkpO1xyXG4gICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwibGFuZ3VhZ2U6XCIrbGFuZ3VhZ2VBdHJyKTtcclxuICAgICAgICAgICAgbGFuZ3VhZ2VBdHJyID0gZ2xvYmFsLmlzRW1wdHkobGFuZ3VhZ2VBdHJyKSA/IFwic2xcIiA6bGFuZ3VhZ2VBdHJyO1xyXG4gICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwibGFuZ3VhZ2U6XCIrbGFuZ3VhZ2VBdHJyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50QXRyciA9PT0gXCJoaDptbTpzc1wiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaWNvbkJ0biA9ICQoc3BhbkRpdikuZmluZChcIiN0aW1lSWNvblwiKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJjbG9jay4uLlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiY2xvY2suYmx1ci5pbml0OlwiICsgZWxlbWVudC5pZCk7XHJcbiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmJsdXIoZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiY2FsbC5jbG9jay5ibHVyOlwiICsgZXZlbnQudGFyZ2V0LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sVmFsdWUuaW5jbHVkZXMoXCJoXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFZhbHVlID0gY29udHJvbFZhbHVlLnJlcGxhY2UoXCJtbVwiLCBcIjAwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xWYWx1ZSA9IGNvbnRyb2xWYWx1ZS5yZXBsYWNlKFwibVwiLCBcIjBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFZhbHVlID0gY29udHJvbFZhbHVlLnJlcGxhY2UoXCJzc1wiLCBcIjAwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xWYWx1ZSA9IGNvbnRyb2xWYWx1ZS5yZXBsYWNlKFwic1wiLCBcIjBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gY29udHJvbFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImNsb2NrLmNsaWNrLmluaXQ6XCIgKyBlbGVtZW50LmlkKTtcclxuICAgICAgICAgICAgICAgICQoaWNvbkJ0bikuY2xpY2soZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiY2xvY2tJY29uLmNsaWNrZWQ6XCIgKyBlbGVtZW50LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3RybElucHV0Q3RybCA9ICQoZWxlbWVudCkuZ2V0KDApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN0cmxJbnB1dEN0cmxTdHJMZW5ndGggPSBjdHJsSW5wdXRDdHJsLnZhbHVlLmxlbmd0aCAqIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybElucHV0Q3RybC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN0cmxJbnB1dEN0cmwuc2V0U2VsZWN0aW9uUmFuZ2UoY3RybElucHV0Q3RybFN0ckxlbmd0aCwgY3RybElucHV0Q3RybFN0ckxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50QXRyciA9PT0gXCJkZC5tbS55eXl5XCIgXHJcbiAgICAgICAgICAgICAgICAvLyB8fCBlbGVtZW50QXRyciA9PT0gXCJkZC5tbS55eXl5IGhoOm1tXCIgXHJcbiAgICAgICAgICAgICAgICAvLyB8fCBlbGVtZW50QXRyciA9PT0gXCJkZC5tbS55eXl5IGhoOm1tOnNzXCJcclxuICAgICAgICAgICAgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGljb25CdG4gPSAkKHNwYW5EaXYpLmZpbmQoXCIjY2FsZW5kYXJJY29uXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJjYWxlbmRhci4uLlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZXBpY2tlclN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS5hdHRyKFwiZGF0YS1lbmFibGUtc2VsZWN0LXBhc3RkYXRlc1wiKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKCQoZWxlbWVudCkuYXR0cihcImRhdGEtZW5hYmxlLXNlbGVjdC1wYXN0ZGF0ZXNcIikpLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVwaWNrZXJTdGFydERhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS5hdHRyKFwiZGF0YS1taW4tc3RhcnQtZGF0ZVwiKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZXBpY2tlclN0YXJ0RGF0ZTEgPSAkKGVsZW1lbnQpLmF0dHIoXCJkYXRhLW1pbi1zdGFydC1kYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGVwaWNrZXJTdGFydERhdGUgPSBnbG9iYWwuY29udmVydFN0cmluZzJEYXRlKGRhdGVwaWNrZXJTdGFydERhdGUxLCBcImRkLm1tLnl5eXlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGVwaWNrZXJFbmREYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQpLmF0dHIoXCJkYXRhLW1heC1lbmQtZGF0ZVwiKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRlcGlja2VyRW5kRGF0ZSA9ICQoZWxlbWVudCkuYXR0cihcImRhdGEtbWF4LWVuZC1kYXRlXCIpOyAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGVwaWNrZXJFbmREYXRlID0gZ2xvYmFsLmNvbnZlcnRTdHJpbmcyRGF0ZShkYXRlcGlja2VyRW5kRGF0ZSwgXCJkZC5tbS55eXl5XCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQoZWxlbWVudCkuZGF0ZXBpY2tlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlOiBkYXRlcGlja2VyU3RhcnREYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGU6IGRhdGVwaWNrZXJFbmREYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jbG9zZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBrZXlib2FyZE5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdlZWtTdGFydDogMSxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGQubW0ueXl5eVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZUF0cnIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb246IFwiYm90dG9tIHJpZ2h0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd09uRm9jdXM6ZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAvL2ZvcmNlUGFyc2U6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTsgICBcclxuXHJcbiAgICAgICAgICAgICAgICAkKGljb25CdG4pLmNsaWNrKGZ1bmN0aW9uKCkgXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImNhbGVuZGFyLi4uY2xpY2tcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGVwaWNrZXJJbnB1dEN0cmwgPSAkKGVsZW1lbnQpLmdldCgwKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlcGlja2VySW5wdXRDdHJsU3RyTGVuZ3RoID0gZGF0ZXBpY2tlcklucHV0Q3RybC52YWx1ZS5sZW5ndGggKiAyO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vZGF0ZXBpY2tlcklucHV0Q3RybC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuZGF0ZXBpY2tlcihcInNob3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXBpY2tlcklucHV0Q3RybC5zZXRTZWxlY3Rpb25SYW5nZShkYXRlcGlja2VySW5wdXRDdHJsU3RyTGVuZ3RoLCBkYXRlcGlja2VySW5wdXRDdHJsU3RyTGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgfSk7ICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRBdHJyID09PSBcImRkLm1tLnl5eXkgaGg6bW1cIikge1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImRhdGV0aW1lcGlja2VyIGhoOm1tIC4uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGljb25CdG4gPSAkKHNwYW5EaXYpLmZpbmQoXCIjY2FsZW5kYXJJY29uXCIpO1xyXG4gICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgICQoZWxlbWVudClcclxuICAgICAgICAgICAgICAgIC5iaW5kKCdrZXlkb3duJyxmdW5jdGlvbihlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIH0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLmRhdGV0aW1lcGlja2VyKHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdERC5NTS5ZWVlZIEg6bW0nLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZTogbGFuZ3VhZ2VBdHJyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dUb2RheUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoZWxlbWVudCkub2ZmKFwiZm9jdXNcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgJChpY29uQnRuKS5jbGljayhmdW5jdGlvbigpIFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuZGF0YShcIkRhdGVUaW1lUGlja2VyXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgXHJcbiAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudEF0cnIgPT09IFwiZGQubW0ueXl5eSBoaDptbTpzc1wiKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiZGF0ZXRpbWVwaWNrZXIgaGg6bW06c3MgLi4uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBsZXQgaWNvbkJ0biA9ICQoc3BhbkRpdikuZmluZChcIiNjYWxlbmRhckljb25cIik7XHJcbiAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgJChlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgLmJpbmQoJ2tleWRvd24nLGZ1bmN0aW9uKGUpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAuZGF0ZXRpbWVwaWNrZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ0RELk1NLllZWVkgSDptbTpzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlOiBsYW5ndWFnZUF0cnIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1RvZGF5QnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChlbGVtZW50KS5vZmYoXCJmb2N1c1wiKTtcclxuICAgICAgICAgICAgICAgIC8vJChlbGVtZW50KS5vZmYoXCJrZXlkb3duXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gLm9uKCdkcC5oaWRlJywgZnVuY3Rpb24oZSl7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coJ2RwLmhpZGUnKTtcclxuICAgICAgICAgICAgICAgIC8vICAgfSkgICBcclxuICAgICAgICAgICAgICAgIC8vIC5vbignZHAuc2hvdycsIGZ1bmN0aW9uKGUpe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCdkcC5zaG93Jyk7XHJcbiAgICAgICAgICAgICAgICAvLyB9KTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgJChpY29uQnRuKS5jbGljayhmdW5jdGlvbigpIFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJjYWxlbmRhci4uLmNsaWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmICgkKGRvY3VtZW50KS5maW5kKFwiLmRhdGVwaWNrZXItZHJvcGRvd25cIikuaXMoXCI6dmlzaWJsZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuZGF0YShcIkRhdGVUaW1lUGlja2VyXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gJChlbGVtZW50KS5mb2N1cyhmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgICQoZWxlbWVudCkuZGF0YShcIkRhdGVUaW1lUGlja2VyXCIpLmhpZGUoKTsgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gfSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJub3QgaW1wbGVtZW50ZWQuLi5cIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdE11bHRpRGF0ZVNlbGVjdERhdGVwaWNrZXIoKTtcclxuXHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImluaXRJbnB1dHMuLi5kb25lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdE11bHRpRGF0ZVNlbGVjdERhdGVwaWNrZXIoKTogdm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BJbnB1dE1hc2suaW5pdE11bHRpRGF0ZVNlbGVjdERhdGVwaWNrZXIuLi5cIik7XHJcblxyXG4gICAgICAgIHZhciBpbnB1dERpdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignaW5wdXRbZGF0YS1pemJvci12ZWMtZG5pXScpO1xyXG5cclxuICAgICAgICBpbnB1dERpdnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImVsZW1lbnQuaW5pdC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cIiArIGVsZW1lbnQuaWQpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNwYW5EaXY6IGFueTtcclxuICAgICAgICAgICAgc3BhbkRpdiA9ICQoZWxlbWVudCkucGFyZW50KCk7XHJcbiAgICAgICAgICAgIGlmIChzcGFuRGl2ID09PSBudWxsKSB7IHJldHVybjsgfTtcclxuICAgICAgICAgICAgaWYgKHNwYW5EaXYuaGFzQ2xhc3MoXCJoYXMtZmxvYXQtbGFiZWxcIikgPT09IGZhbHNlKSB7IHJldHVybjsgfTtcclxuICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhzcGFuRGl2LmdldCgwKS5pZCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgbGFuZ3VhZ2VBdHJyID0gKFN0cmluZykoJChcIiNzaXRlTGFuZ3VhZ2VcIikudmFsKCkpO1xyXG4gICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwibGFuZ3VhZ2U6XCIgKyBsYW5ndWFnZUF0cnIpO1xyXG4gICAgICAgICAgICBsYW5ndWFnZUF0cnIgPSBnbG9iYWwuaXNFbXB0eShsYW5ndWFnZUF0cnIpID8gXCJzbFwiIDogbGFuZ3VhZ2VBdHJyO1xyXG4gICAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwibGFuZ3VhZ2U6XCIgKyBsYW5ndWFnZUF0cnIpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGljb25CdG4gPSAkKHNwYW5EaXYpLmZpbmQoXCIjY2FsZW5kYXJJY29uXCIpO1xyXG5cclxuICAgICAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImNhbGVuZGFyLi4uXCIpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGVwaWNrZXJTdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoJChlbGVtZW50KS5hdHRyKFwiZGF0YS1lbmFibGUtc2VsZWN0LXBhc3RkYXRlc1wiKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoJChlbGVtZW50KS5hdHRyKFwiZGF0YS1lbmFibGUtc2VsZWN0LXBhc3RkYXRlc1wiKSkudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRlcGlja2VyU3RhcnREYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkuYXR0cihcImRhdGEtbWluLXN0YXJ0LWRhdGVcIikgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZXBpY2tlclN0YXJ0RGF0ZTEgPSAkKGVsZW1lbnQpLmF0dHIoXCJkYXRhLW1pbi1zdGFydC1kYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgZGF0ZXBpY2tlclN0YXJ0RGF0ZSA9IGdsb2JhbC5jb252ZXJ0U3RyaW5nMkRhdGUoZGF0ZXBpY2tlclN0YXJ0RGF0ZTEsIFwiZGQubW0ueXl5eVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGVwaWNrZXJFbmREYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkuYXR0cihcImRhdGEtbWF4LWVuZC1kYXRlXCIpICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgZGF0ZXBpY2tlckVuZERhdGUgPSAkKGVsZW1lbnQpLmF0dHIoXCJkYXRhLW1heC1lbmQtZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgIGRhdGVwaWNrZXJFbmREYXRlID0gZ2xvYmFsLmNvbnZlcnRTdHJpbmcyRGF0ZShkYXRlcGlja2VyRW5kRGF0ZSwgXCJkZC5tbS55eXl5XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGVsZW1lbnQpLmRhdGVwaWNrZXIoe1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlOiBkYXRlcGlja2VyU3RhcnREYXRlLFxyXG4gICAgICAgICAgICAgICAgZW5kRGF0ZTogZGF0ZXBpY2tlckVuZERhdGUsXHJcbiAgICAgICAgICAgICAgICBhdXRvY2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXVsdGlkYXRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAga2V5Ym9hcmROYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHdlZWtTdGFydDogMSxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZC5tbS55eXl5XCIsXHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VBdHJyLFxyXG4gICAgICAgICAgICAgICAgb3JpZW50YXRpb246IFwiYm90dG9tIHJpZ2h0XCJcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAkKGljb25CdG4pLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJjYWxlbmRhci4uLmNsaWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGVwaWNrZXJJbnB1dEN0cmwgPSAkKGVsZW1lbnQpLmdldCgwKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGVwaWNrZXJJbnB1dEN0cmxTdHJMZW5ndGggPSBkYXRlcGlja2VySW5wdXRDdHJsLnZhbHVlLmxlbmd0aCAqIDI7XHJcbiAgICAgICAgICAgICAgICBkYXRlcGlja2VySW5wdXRDdHJsLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBkYXRlcGlja2VySW5wdXRDdHJsLnNldFNlbGVjdGlvblJhbmdlKGRhdGVwaWNrZXJJbnB1dEN0cmxTdHJMZW5ndGgsIGRhdGVwaWNrZXJJbnB1dEN0cmxTdHJMZW5ndGgpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BJbnB1dE1hc2suaW5pdE11bHRpRGF0ZVNlbGVjdERhdGVwaWNrZXIuLi5kb25lXCIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuIiwi77u/aW1wb3J0IHsgZ2xvYmFsIH0gZnJvbSBcIi4uL0NvbW1vbi9zYW9wLWNvbW1vblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1lbnVTaWRlYmFyIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NvbGxFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIHByb3RlY3RlZCBfZXhwRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcblxyXG5cclxuICAgIGluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIk1lbnVTaWRlYmFyLmluaXQuLi5cIik7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbGxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2xsYXBzZS1pY29uLWNvbGxcIik7XHJcbiAgICAgICAgdGhpcy5fZXhwRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sbGFwc2UtaWNvbi1leHBcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbGxFbGVtZW50ICE9IG51bGwpIHRoaXMuX2NvbGxFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICBpZiAodGhpcy5fZXhwRWxlbWVudCAhPSBudWxsKSB0aGlzLl9leHBFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcblxyXG4gICAgICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgLy8gQ29sbGFwc2UgY2xpY2tcclxuICAgICAgICAkKCdbZGF0YS10b2dnbGU9c2lkZWJhci1jb2xhcHNlXScpLmNsaWNrKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zaWRlYmFyQ29sbGFwc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9tZW51IGl0ZW0gY2xpY2tcclxuICAgICAgICAkKFwiLnNhb3AtYmctaXRlbVwiKS5jbGljayhcclxuICAgICAgICAgICAgZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJzYW9wLW1lbnUtcHJldmlvdXMtaXRlbS1pZFwiLCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwic2FvcC1tZW51LWl0ZW0taWRcIikpOyAgXHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwic2FvcC1tZW51LWl0ZW0taWRcIiwgdGhpcy5pZCk7ICBcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJzYW9wLW1lbnUtc3ViaXRlbS1pZFwiLCBcIjBcIik7ICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgICBcclxuICAgICAgICAvL21lbnUgc3ViLWl0ZW0gY2xpY2tcclxuICAgICAgICAkKFwiLnNhb3AtYmctc3ViaXRlbVwiKS5jbGljayhcclxuICAgICAgICAgICAgZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJzYW9wLW1lbnUtc3ViaXRlbS1pZFwiLCB0aGlzLmlkKTsgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZW51LXNpZGViYXJcIikgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5HZXRTZXNzaW9uU3RvcmFnZVZhbHVlcygpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5EZWxldGVTZXNzaW9uU3RvcmFnZVZhbHVlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaWRlYmFyQ29sbGFwc2UoKTp2b2lkIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiTWVudVNpZGViYXIuc2lkZWJhckNvbGxhcHNlXCIpO1xyXG4gICAgICAgICQoJyNtZW51VG9wSWNvbkxhcmdlJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQoJyNtZW51VG9wSWNvblNtYWxsJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQoJy5zaWRlYmFyLW1lbnUtY2FwdGlvbicpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAkKCcjc2lkZWJhci1jb250YWluZXInKS50b2dnbGVDbGFzcygnc2lkZWJhci1leHBhbmRlZCBzaWRlYmFyLWNvbGxhcHNlZCcpO1xyXG4gICAgICAgICQoJy5zYW9wLWJnLXN1Yml0ZW1zJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQoJyNtZW51Q2xvc2VCdXR0b24nKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgdmFyIFNlcGFyYXRvclRpdGxlID0gJCgnI3NpZGViYXItY29udGFpbmVyJyk7XHJcbiAgICAgICAgaWYgKFNlcGFyYXRvclRpdGxlLmhhc0NsYXNzKCdzaWRlYmFyLWNvbGxhcHNlZCcpKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJzYW9wLW1lbnUtc2lkZWJhci1leHBhbmRlZFwiLCBcInRydWVcIilcclxuICAgICAgICAgICAgdGhpcy5fY29sbEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgICAgICAgICAgdGhpcy5fZXhwRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInNhb3AtbWVudS1zaWRlYmFyLWV4cGFuZGVkXCIsIFwiZmFsc2VcIilcclxuICAgICAgICAgICAgdGhpcy5fY29sbEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgICAgICB0aGlzLl9leHBFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtZW51SXRlbUNvbGxhcHNlKCk6IHZvaWQge1xyXG4gICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJNZW51U2lkZWJhci5tZW51SXRlbUNvbGxhcHNlXCIpO1xyXG4gICAgICAgIHZhciBwcmV2aW91c0l0ZW1JRCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJzYW9wLW1lbnUtaXRlbS1pZFwiKTtcclxuICAgICAgICB2YXIgaXRlbUlEID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInNhb3AtbWVudS1pdGVtLWlkXCIpO1xyXG4gICAgICAgIHZhciBzdWJpdGVtc0lEID0gaXRlbUlEK1wiLWNvbGxhcHNlXCI7XHJcbiAgICAgICAgdmFyIHN1Yml0ZW1JRCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJzYW9wLW1lbnUtc3ViaXRlbS1pZFwiKTtcclxuXHJcbiAgICAgICAgdmFyIHByZXZpb3VzID0gJChcIiNcIiArIHByZXZpb3VzSXRlbUlEKTtcclxuICAgICAgICB2YXIgaXRlbSA9ICQoJyMnK2l0ZW1JRCk7XHJcbiAgICAgICAgdmFyIHN1Yml0ZW1zID0gJChcIiNcIiArIHN1Yml0ZW1zSUQpO1xyXG4gICAgICAgIHZhciBzdWJpdGVtID0gJChcIiNcIitzdWJpdGVtc0lEK1wiPiNcIitzdWJpdGVtSUQpO1xyXG5cclxuICAgICAgICBwcmV2aW91cy5yZW1vdmVDbGFzcyhcInNhb3AtYmctaXRlbS1zZWxlY3RlZFwiKTsvLyd1bi1jb2xvcicgcHJldmlvdXMgaXRlbVxyXG4gICAgICAgIHByZXZpb3VzWzBdLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICBpdGVtWzBdLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgIGl0ZW0uYWRkQ2xhc3MoXCJzYW9wLWJnLWl0ZW0tc2VsZWN0ZWRcIik7Ly9jb2xvciBpdGVtXHJcbiAgICAgICAgc3ViaXRlbXMuYWRkQ2xhc3MoJ3Nob3cnKTsvL2V4cGFuZCBjb2xsYXBzZVxyXG4gICAgICAgIHN1Yml0ZW0uYWRkQ2xhc3MoXCJzYW9wLWJnLXN1Yml0ZW0tc2VsZWN0ZWRcIik7Ly9jb2xvciBzdWJpdGVtXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIEdldFNlc3Npb25TdG9yYWdlVmFsdWVzKCk6dm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIk1lbnVTaWRlYmFyLkdldFNlc3Npb25TdG9yYWdlVmFsdWVzXCIpO1xyXG4gICAgICAgIC8vZGVmYXVsdHNcclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInNhb3AtbWVudS1pdGVtLWlkXCIpID09IG51bGwpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInNhb3AtbWVudS1zaWRlYmFyLWV4cGFuZGVkXCIsIG51bGwpO1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwic2FvcC1tZW51LXByZXZpb3VzLWl0ZW0taWRcIiwgbnVsbCk7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJzYW9wLW1lbnUtaXRlbS1pZFwiLCBcIm5hbWl6amVcIik7ICBcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInNhb3AtbWVudS1zdWJpdGVtLWlkXCIsIFwiMFwiKTsgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9zaWRlYmFyIGV4cGFuZGVkL2NvbnRyYWN0ZWRcclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInNhb3AtbWVudS1zaWRlYmFyLWV4cGFuZGVkXCIpID09IFwidHJ1ZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2lkZWJhckNvbGxhcHNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3NlbGVjdGVkLW1lbnUgaXRlbVxyXG4gICAgICAgIHRoaXMubWVudUl0ZW1Db2xsYXBzZSgpXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIERlbGV0ZVNlc3Npb25TdG9yYWdlVmFsdWVzKCk6dm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIk1lbnVTaWRlYmFyLkRlbGV0ZVNlc3Npb25TdG9yYWdlVmFsdWVzXCIpO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwic2FvcC1tZW51LXNpZGViYXItZXhwYW5kZWRcIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInNhb3AtbWVudS1wcmV2aW91cy1pdGVtLWlkXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJzYW9wLW1lbnUtaXRlbS1pZFwiKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwic2FvcC1tZW51LXN1Yml0ZW0taWRcIik7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5cclxuIiwi77u/aW1wb3J0IHsgZ2xvYmFsIH0gZnJvbSBcIi4uL0NvbW1vbi9zYW9wLWNvbW1vblwiO1xyXG5cclxuZXhwb3J0IGVudW0gU2FvcE1zZ0RsZ1R5cGUge1xyXG4gICAgbXRJbmZvcm1hdGlvbiA9IDFcclxuICAgICxtdFdhcm5pbmcgPSAyXHJcbiAgICAsbXRFcnJvciA9IDNcclxuICAgIC8vLCBtdENvbmZpcm1hdGlvbiwgbXRDdXN0b21cclxufVxyXG5cclxuZXhwb3J0IGVudW0gU2FvcE1zZ0RsZ0J1dHRvbiB7XHJcbiAgICBtYk5vbmUgPSAwXHJcbiAgICAsbWJPSyA9IDFcclxuICAgICxtYkNhbmNlbCA9IDJcclxuICAgICxtYlllcyA9IDNcclxuICAgICxtYk5vID0gNFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhb3BNc2dEbGdFdmVudCB7XHJcbiAgICBwYXJlbnQ6YW55O1xyXG4gICAgZGF0YTphbnk7XHJcbn1cclxuXHJcbnR5cGUgU2FvcE1zZ0RsZ0J1dHRvbnMgPSBBcnJheTxTYW9wTXNnRGxnQnV0dG9uPjtcclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BNZXNzYWdlRGxnIHtcclxuICAgIHByaXZhdGUgX3NlbmRlcjpTYW9wTXNnRGxnRXZlbnQ7XHJcbiAgICBwdWJsaWMgb25PazogKHNlbmRlcjphbnkpID0+IGFueSA9IG51bGw7XHJcbiAgICBwdWJsaWMgb25DYW5jZWw6IChzZW5kZXI6YW55KSA9PiBhbnkgPSBudWxsO1xyXG4gICAgcHVibGljIG9uWWVzOiAoc2VuZGVyOmFueSkgPT4gYW55ID0gbnVsbDtcclxuICAgIHB1YmxpYyBvbk5vOiAoc2VuZGVyOmFueSkgPT4gYW55ID0gbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZW5kZXI6U2FvcE1zZ0RsZ0V2ZW50KXtcclxuICAgICAgICB0aGlzLl9zZW5kZXIgPSBzZW5kZXI7XHJcbiAgICB9XHJcblxyXG4gICAgU2hvdyhNc2c6c3RyaW5nLFRpdGxlOnN0cmluZyxEbGdUeXBlOlNhb3BNc2dEbGdUeXBlID0gU2FvcE1zZ0RsZ1R5cGUubXRJbmZvcm1hdGlvbixCdXR0b25zOlNhb3BNc2dEbGdCdXR0b25zID0gW1Nhb3BNc2dEbGdCdXR0b24ubWJPS10pOlNhb3BNc2dEbGdCdXR0b257XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJtZXNzYWdlOlwiK01zZyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aXRsZTpcIitUaXRsZSk7XHJcbiAgICAgICAgbGV0IF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgbGV0IHRpdGxlRGl2ID0gJCgnI2FsZXJ0LW1vZGFsLXRpdGxlLWRpdicpO1xyXG4gICAgICAgIGxldCBib2R5VGFnID0gJCgnI2FsZXJ0LW1vZGFsLWJvZHknKTtcclxuXHJcbiAgICAgICAgaWYgKERsZ1R5cGUgPT0gU2FvcE1zZ0RsZ1R5cGUubXRJbmZvcm1hdGlvbil7XHJcbiAgICAgICAgICAgICQoXCIjYWxlcnQtbW9kYWwtdGl0bGUtZGl2XCIpLmNzcyhcImJhY2tncm91bmQtY29sb3JcIixcIndoaXRlXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoRGxnVHlwZSA9PSBTYW9wTXNnRGxnVHlwZS5tdEVycm9yKSB7XHJcbiAgICAgICAgICAgICQoXCIjYWxlcnQtbW9kYWwtdGl0bGUtZGl2XCIpLmNzcyhcImJhY2tncm91bmQtY29sb3JcIixcIiNEODJDMjVcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChcIiNhbGVydC1tb2RhbC10aXRsZS1kaXZcIikuY3NzKFwiYmFja2dyb3VuZC1jb2xvclwiLFwic2lsdmVyXCIpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFnbG9iYWwuaXNFbXB0eShUaXRsZSkpe1xyXG4gICAgICAgICAgICB0aXRsZURpdi5odG1sKFRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgYm9keVRhZy5odG1sKE1zZyk7XHJcblxyXG4gICAgICAgIGlmIChCdXR0b25zICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBfZWxlbWVudF9tYk9LID0gQnV0dG9ucy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudCA9PT0gU2FvcE1zZ0RsZ0J1dHRvbi5tYk9LKTtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5pc1VuRGVmaW5lZChfZWxlbWVudF9tYk9LKSkge1xyXG4gICAgICAgICAgICAgICAgJChcIiNidG5BbGVydE9LXCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJChcIiNidG5BbGVydE9LXCIpLm9mZihcImNsaWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNidG5BbGVydE9LXCIpLmNsaWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbG9iYWwuaXNVbkRlZmluZWQoX3RoaXMub25Paykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25PayhfdGhpcy5fc2VuZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2FvcE1zZ0RsZ0J1dHRvbi5tYk9LO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIGxldCBfZWxlbWVudF9tYkNhbmNlbCA9IEJ1dHRvbnMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQgPT09IFNhb3BNc2dEbGdCdXR0b24ubWJDYW5jZWwpO1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmlzVW5EZWZpbmVkKF9lbGVtZW50X21iQ2FuY2VsKSkge1xyXG4gICAgICAgICAgICAgICAgJChcIiNidG5BbGVydENhbmNlbFwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICQoXCIjYnRuQWxlcnRDYW5jZWxcIikub2ZmKFwiY2xpY2tcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2J0bkFsZXJ0Q2FuY2VsXCIpLmNsaWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbG9iYWwuaXNVbkRlZmluZWQoX3RoaXMub25DYW5jZWwpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uQ2FuY2VsKF90aGlzLl9zZW5kZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTYW9wTXNnRGxnQnV0dG9uLm1iQ2FuY2VsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICBsZXQgX2VsZW1lbnRfbWJZZXMgPSBCdXR0b25zLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50ID09PSBTYW9wTXNnRGxnQnV0dG9uLm1iWWVzKTtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5pc1VuRGVmaW5lZChfZWxlbWVudF9tYlllcykpIHtcclxuICAgICAgICAgICAgICAgICQoXCIjYnRuQWxlcnRZZXNcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2J0bkFsZXJ0WWVzXCIpLm9mZihcImNsaWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNidG5BbGVydFllc1wiKS5jbGljayhcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2xvYmFsLmlzVW5EZWZpbmVkKF90aGlzLm9uWWVzKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5vblllcyhfdGhpcy5fc2VuZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2FvcE1zZ0RsZ0J1dHRvbi5tYlllcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgbGV0IF9lbGVtZW50X21iTm8gPSBCdXR0b25zLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50ID09PSBTYW9wTXNnRGxnQnV0dG9uLm1iTm8pO1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmlzVW5EZWZpbmVkKF9lbGVtZW50X21iTm8pKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2J0bkFsZXJ0Tm9cIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2J0bkFsZXJ0Tm9cIikub2ZmKFwiY2xpY2tcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2J0bkFsZXJ0Tm9cIikuY2xpY2soXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbC5pc1VuRGVmaW5lZChfdGhpcy5vbk5vKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbk5vKF90aGlzLl9zZW5kZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTYW9wTXNnRGxnQnV0dG9uLm1iTm87XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoXCIjYnRuQWxlcnRPS1wiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgJChcIiNidG5BbGVydENhbmNlbFwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgJChcIiNidG5BbGVydFllc1wiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgJChcIiNidG5BbGVydE5vXCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gU2FvcE1zZ0RsZ0J1dHRvbi5tYk5vbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKCcjYWxlcnQtbW9kYWwnKS5vbignaGlkZGVuLmJzLm1vZGFsJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgJChcIiNhbGVydC1tb2RhbC1idG4tb2tcIikudW5iaW5kKFwiY2xpY2tcIik7XHJcbiAgICAgICAgICAgICQodGhpcykubW9kYWwoJ2Rpc3Bvc2UnKTtcclxuICAgICAgICB9KVxyXG4gICAgXHJcbiAgICAgICAgJCgnI2FsZXJ0LW1vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgICAgICBnbG9iYWwuc2V0TW9kYWxGb3JtWkluZGV4KCcjYWxlcnQtbW9kYWwnKTsgXHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiIsIu+7vy8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9AdHlwZXMvYm9vdHN0cmFwLW11bHRpc2VsZWN0L2luZGV4LmQudHNcIiAvPlxyXG5pbXBvcnQgeyBTYW9wVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vQ29yZS9zYW9wLXRyYW5zbGF0ZSc7XHJcblxyXG5pbXBvcnQgeyBnbG9iYWwgfSBmcm9tIFwiLi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhb3BNdWx0aXNlbGVjdFBhcmFtcyB7XHJcbiAgICB0YXJnZXQ6c3RyaW5nLFxyXG4gICAgc2VsZWN0QWxsPzpib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2FvcE11bHRpc2VsZWN0T3B0aW9ucyB7XHJcbiAgICB0ZW1wbGF0ZXNCdXR0b24/OiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BNdWx0aXNlbGVjdCB7XHJcbiAgICBwcml2YXRlIF9saWJOYW1lOnN0cmluZztcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uU2VydmljZTogU2FvcFRyYW5zbGF0aW9uU2VydmljZTtcclxuICAgIHByaXZhdGUgX2NhcHRpb246IHN0cmluZyA9IFwiU2t1cGluYVwiO1xyXG4gICAgcHJpdmF0ZSBfbXVsdGlTZWxlY3RPYmplY3Q6IGFueTtcclxuICAgIHByaXZhdGUgX29wdGlvbnM6IFNhb3BNdWx0aXNlbGVjdE9wdGlvbnM7XHJcbiAgICAvL1xyXG4gICAgcHVibGljIG1zQ29udGFpbmVyOkpRdWVyeTxIVE1MRWxlbWVudD47XHJcbiAgICBwdWJsaWMgbXNCdXR0b246IEpRdWVyeTxIVE1MQnV0dG9uRWxlbWVudD47XHJcblxyXG4gICAgcHVibGljIG1zQ29udGFpbmVyTGFiZWw6SlF1ZXJ5PEhUTUxFbGVtZW50PjtcclxuICAgIHB1YmxpYyBzZWxlY3RlZENCOmFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihsaWJOYW1lOnN0cmluZyA9IFwiXCIsIG9wdGlvbnM6U2FvcE11bHRpc2VsZWN0T3B0aW9ucyA9IG51bGwpIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcE11bHRpc2VsZWN0XCIpO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0aW9uU2VydmljZSA9IG5ldyBTYW9wVHJhbnNsYXRpb25TZXJ2aWNlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgfSBcclxuXHJcbiAgICBzZXRPcHRpb25zKG9wdGlvbnM6IFNhb3BNdWx0aXNlbGVjdE9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICAvLyBmaXJzdCBzZXQgZGVmYXVsdCBvcHRpb25zXHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgdGVtcGxhdGVzQnV0dG9uOiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtdWx0aXNlbGVjdCBkcm9wZG93bi10b2dnbGUgcHItMFwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIj48c3BhbiBjbGFzcz1cIm11bHRpc2VsZWN0LXNlbGVjdGVkLXRleHRcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJzYW9wLWltZy1kb3duIHNpLXMgZmxvYXQtcmlnaHRcIj48L3NwYW4+PC9idXR0b24+J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGVtcGxhdGVzQnV0dG9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMudGVtcGxhdGVzQnV0dG9uID0gb3B0aW9ucy50ZW1wbGF0ZXNCdXR0b247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVybWlub2xvZ3lMaXN0KCkge1xyXG4gICAgICAgIGxldCBfdGVybWlub2xvZ3k6IHN0cmluZ1tdID0gWydJxaHEjWknLCAnVnNpJywgJ0l6YmVyaSBwcmlrYXphbmUnLCAnaXpicmFuaWgnXTtcclxuICAgICAgICBpZiAoIWdsb2JhbC5pc0VtcHR5KHRoaXMuX2NhcHRpb24pKSB7XHJcbiAgICAgICAgICAgIF90ZXJtaW5vbG9neSA9IFsnScWhxI1pJywgJ1ZzaScsICdJemJlcmkgcHJpa2F6YW5lJywgJ2l6YnJhbmloJywgdGhpcy5fY2FwdGlvbl07XHJcbiAgICAgICAgfSBcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGlvblNlcnZpY2Uuc2V0VHJhbnNsYXRpb25zTGlzdChfdGVybWlub2xvZ3kpO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmREaXYoZWxlbWV0OmFueSl7XHJcbiAgICAgICAgdGhpcy5tc0NvbnRhaW5lciA9ICQoZWxlbWV0LiRjb250YWluZXIpO1xyXG4gICAgICAgIHRoaXMubXNCdXR0b24gPSAkKGVsZW1ldC4kYnV0dG9uKTtcclxuICAgICAgICB0aGlzLm1zQ29udGFpbmVyTGFiZWwgPSB0aGlzLm1zQ29udGFpbmVyLmZpbmQoXCIjY29udGFpbmVyTGFiZWxcIik7XHJcbiAgICAgICAgLy90aGlzLnNlbGVjdGVkQ0IgPSBlbGVtZXQuJHNlbGVjdDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDQi52YWwoKS5sZW5ndGgpe1xyXG4gICAgICAgICAgICB0aGlzLnNldE1zRmxvYXRpbmdMYWJlbChmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNc0Zsb2F0aW5nTGFiZWwodHJ1ZSk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TXNGbG9hdGluZ0xhYmVsKGlzRW1wcnk6Ym9vbGVhbil7XHJcbiAgICAgICAgaWYgKGlzRW1wcnkpe1xyXG4gICAgICAgICAgICB0aGlzLm1zQ29udGFpbmVyTGFiZWwuYWRkQ2xhc3MoJ21zLWZsb2F0LWxhYmVsLWVtcHR5Jyk7XHJcbiAgICAgICAgICAgIHRoaXMubXNDb250YWluZXJMYWJlbC5yZW1vdmVDbGFzcygnbXMtZmxvYXQtbGFiZWwtc2VsZWN0ZWQnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1zQ29udGFpbmVyTGFiZWwucmVtb3ZlQ2xhc3MoJ21zLWZsb2F0LWxhYmVsLWVtcHR5Jyk7XHJcbiAgICAgICAgICAgIHRoaXMubXNDb250YWluZXJMYWJlbC5hZGRDbGFzcygnbXMtZmxvYXQtbGFiZWwtc2VsZWN0ZWQnKTsgICAgICAgICAgICBcclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBvbkluaXRpYWxpemVkQ29udHJvbChlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcE11bHRpc2VsZWN0Lm9uSW5pdGlhbGl6ZWRDb250cm9sXCIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENCLmhhc0NsYXNzKFwiaW5wdXQtdmFsaWRhdGlvbi1lcnJvclwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1zQnV0dG9uLmFkZENsYXNzKFwic2FvcC1lcnJvci1pbnB1dFwiKTtcclxuICAgICAgICAgICAgdGhpcy5tc0NvbnRhaW5lckxhYmVsLmFkZENsYXNzKFwic2FvcC1lcnJvci1pbnB1dC10ZXh0XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hZnRlckluaXRpYWxpemVkQ29udHJvbChlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KHRhcmdldDogc3RyaW5nID0gXCJcIiwgY2FwdGlvbiA9IFwiXCIgKXtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcE11bHRpc2VsZWN0LmluaXRcIik7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhcHRpb24gPSBjYXB0aW9uO1xyXG5cclxuICAgICAgICAvLyBwb2lzY2VtbyBwcmV2b2RlICh0dWRpIHphIHRoaXMuX2NhcHRpb24pXHJcbiAgICAgICAgdGhpcy5zZXRUZXJtaW5vbG9neUxpc3QoKTtcclxuXHJcbiAgICAgICAgaWYgKGdsb2JhbC5pc0VtcHR5KHRhcmdldCkpIHt0YXJnZXQgPSBcIi5zYW9wLW11bHRpc2VsZWN0XCI7fVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ0IgPSAkKHRhcmdldCk7XHJcblxyXG4gICAgICAgIC8vIGFsaSBpbWEgc2VsZWN0ZWRDQiBkYXRhLWNhcHRpb25cclxuICAgICAgICBsZXQgc2VsZWN0Q2FwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwuaXNFbXB0eSh0aGlzLl9jYXB0aW9uKSkge1xyXG4gICAgICAgICAgICBzZWxlY3RDYXB0aW9uID0gdGhpcy5fdHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSh0aGlzLl9jYXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGFDYXB0aW9uID0gdGhpcy5zZWxlY3RlZENCLmF0dHIoXCJkYXRhLWNhcHRpb25cIik7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwuaXNFbXB0eShkYXRhQ2FwdGlvbikpIHtcclxuICAgICAgICAgICAgc2VsZWN0Q2FwdGlvbiA9IGRhdGFDYXB0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IF90aGlzID0gdGhpcztcclxuXHJcbiAgICAgICAgJCh0YXJnZXQpLm11bHRpc2VsZWN0KHtcclxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAzNTAsICBcclxuICAgICAgICAgICAgZW5hYmxlRmlsdGVyaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBpbmNsdWRlU2VsZWN0QWxsT3B0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICBlbmFibGVDYXNlSW5zZW5zaXRpdmVGaWx0ZXJpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGVuYWJsZUZ1bGxWYWx1ZUZpbHRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIGZpbHRlclBsYWNlaG9sZGVyOiB0aGlzLl90cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKFwiScWhxI1pXCIpLFxyXG4gICAgICAgICAgICBub25TZWxlY3RlZFRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxTZWxlY3RlZFRleHQ6dGhpcy5fdHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZShcIlZzaVwiKSxcclxuICAgICAgICAgICAgc2VsZWN0QWxsVGV4dDp0aGlzLl90cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKFwiSXpiZXJpIHByaWthemFuZVwiKSxcclxuICAgICAgICAgICAgblNlbGVjdGVkVGV4dDp0aGlzLl90cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKFwiaXpicmFuaWhcIiksXHJcbiAgICAgICAgICAgIGluY2x1ZGVGaWx0ZXJDbGVhckJ0bjogdHJ1ZSxcclxuICAgICAgICAgICAgZGlzYWJsZUlmRW1wdHk6IGZhbHNlLFxyXG4gICAgICAgICAgICBudW1iZXJEaXNwbGF5ZWQ6IDIsXHJcbiAgICAgICAgICAgIGJ1dHRvbldpZHRoOiAnMjAwcHgnLFxyXG4gICAgICAgICAgICBidXR0b25DbGFzcyA6J3Nhb3AtY29udHJvbCBmb3JtLWNvbnRyb2wgc2hhZG93LW5vbmUgbXMtaW1hZ2UtZG93biBwci0wJyxcclxuICAgICAgICAgICAgYnV0dG9uQ29udGFpbmVyOiAnPGRpdiBpZD1cInNlbGVjdGVkLXBhcmVudHMtY29udGFpbmVyXCI+PGxhYmVsIGlkID1cImNvbnRhaW5lckxhYmVsXCIgY2xhc3M9XCJtcy1mbG9hdC1sYWJlbCBtcy1mbG9hdC1sYWJlbC1zZWxlY3RlZCBzYW9wLXR4dC03XCIgZm9yPVwiTmFtZVwiPicrc2VsZWN0Q2FwdGlvbisnPC9sYWJlbD48L2Rpdj4nLFxyXG4gICAgICAgICAgICBvblNlbGVjdEFsbDogZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uczogSlF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5iaW5kRGl2KHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWZ0ZXJTZWxlY3RBbGwoc2VsZWN0ZWRPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFmdGVyQ2hhbmdlQ29tbW9uRXZlbnQodGhpcy4kc2VsZWN0KTtcclxuICAgICAgICAgICAgfSwgICAgICAgIFxyXG4gICAgICAgICAgICBvbkRlc2VsZWN0QWxsOiBmdW5jdGlvbihzZWxlY3RlZE9wdGlvbnM6SlF1ZXJ5KXtcclxuICAgICAgICAgICAgICAgIF90aGlzLmJpbmREaXYodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hZnRlckRlc2VsZWN0QWxsKHNlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hZnRlckNoYW5nZUNvbW1vbkV2ZW50KHRoaXMuJHNlbGVjdCk7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbihvcHRpb246IEpRdWVyeSwgY2hlY2tlZDogYm9vbGVhbil7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5iaW5kRGl2KHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWZ0ZXJDaGFuZ2Uob3B0aW9uLCBjaGVja2VkKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFmdGVyQ2hhbmdlQ29tbW9uRXZlbnQodGhpcy4kc2VsZWN0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25Jbml0aWFsaXplZDogZnVuY3Rpb24gKCRzZWxlY3QsICRjb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9tdWx0aVNlbGVjdE9iamVjdCA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5iaW5kRGl2KHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMub25Jbml0aWFsaXplZENvbnRyb2wodGhpcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uOiB0aGlzLl9vcHRpb25zLnRlbXBsYXRlc0J1dHRvbixcclxuICAgICAgICAgICAgICAgIGZpbHRlcjogJzxsaSBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW0gbXVsdGlzZWxlY3QtZmlsdGVyXCI+PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTNcIj48aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXVsdGlzZWxlY3Qtc2VhcmNoXCIgdHlwZT1cInRleHRcIiAvPjxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+PHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IHNhb3AtaW1nLXNlYXJjaCBzaS14c1wiPjwvc3Bhbj48L2Rpdj48L2Rpdj48L2xpPicsXHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tdWx0aXNlbGVjdCgnc2VsZWN0QWxsJywgZmFsc2UsIHRydWUpXHJcbiAgICAgICAgLm11bHRpc2VsZWN0KCd1cGRhdGVCdXR0b25UZXh0Jyk7XHJcbiAgICAgICAgOyAgXHJcbiAgICB9XHJcbiAgICBhZnRlclNlbGVjdEFsbChzZWxlY3RlZE9wdGlvbnM6SlF1ZXJ5KXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJEZXNlbGVjdEFsbChzZWxlY3RlZE9wdGlvbnM6SlF1ZXJ5KXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJDaGFuZ2Uob3B0aW9uOiBKUXVlcnksIGNoZWNrZWQ6IGJvb2xlYW4pe1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZnRlckNoYW5nZUNvbW1vbkV2ZW50KGVsZW1lbnQ6YW55KXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJJbml0aWFsaXplZENvbnRyb2woZWxlbWVudDogYW55KXtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcE11bHRpc2VsZWN0LmFmdGVySW5pdGlhbGl6ZWRDb250cm9sXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlbGVjdFZhbHVlcyB2cmVkbm9zdGlcclxuICAgIHNldFNlbGVjdFZhbHVlcyhzZWxlY3RWYWx1ZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgLy8gb2R6bmFjaW1vIHZzZSB6YXBvc2xlbmVcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ0IubXVsdGlzZWxlY3QoJ2Rlc2VsZWN0QWxsJyk7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBvem5hY2ltbyBpemJyYW5lXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDQi5tdWx0aXNlbGVjdCgnc2VsZWN0Jywgc2VsZWN0VmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENCLm11bHRpc2VsZWN0KCdyZWZyZXNoJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tdWx0aVNlbGVjdE9iamVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZERpdih0aGlzLl9tdWx0aVNlbGVjdE9iamVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2VDb21tb25FdmVudCh0aGlzLl9tdWx0aVNlbGVjdE9iamVjdC4kc2VsZWN0KTtcclxuICAgICAgICB9IFxyXG4gICAgfVxyXG4gICAgLy9cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCLvu79pbXBvcnQgeyBnbG9iYWwgfSBmcm9tIFwiLi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFBvcHVwRGlhbG9nT3B0aW9ucyB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgYm9keTogc3RyaW5nO1xyXG4gICAgc2hvd0NhbmNlbEJ1dHRvbjogYm9vbGVhbjtcclxuICAgIGNvbmZpcm1CdXR0b25DYXB0aW9uOiBzdHJpbmc7XHJcbiAgICBjYW5jZWxCdXR0b25DYXB0aW9uOiBzdHJpbmc7XHJcbiAgICBjb25maXJtQWN0aW9uOiBzdHJpbmc7XHJcbiAgICBjb25maXJtQWN0aW9uZGF0YTogb2JqZWN0O1xyXG4gICAgb25TdWNjZXNzOiAocGFyYW1zOmFueSkgPT4gYW55O1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5ib2R5ID0gXCJib2R5IHRleHRcIjtcclxuICAgICAgICB0aGlzLnNob3dDYW5jZWxCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlybUJ1dHRvbkNhcHRpb24gPSBcIk9rXCI7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxCdXR0b25DYXB0aW9uID0gXCJDYW5jZWxcIjtcclxuICAgICAgICB0aGlzLmNvbmZpcm1BY3Rpb24gPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuY29uZmlybUFjdGlvbmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLm9uU3VjY2VzcyA9IG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wUG9wdXBEaWFsb2cge1xyXG4gICAgcHJpdmF0ZSBfb3B0aW9uczpTYW9wUG9wdXBEaWFsb2dPcHRpb25zO1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOlNhb3BQb3B1cERpYWxvZ09wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcclxuICAgIH0gICAgXHJcbiAgICBcclxuICAgIHNhdmUoY2FsbGJhY2s6IChuOiBudW1iZXIpID0+IGFueSkgOiB2b2lkIHtcclxuICAgICAgICBjYWxsYmFjayg0Mik7XHJcbiAgICB9XHJcblxyXG4gICAgU2hvd0xvYWRpbmdTYW9wKCkge1xyXG4gICAgICAgIHZhciBvYmogPSAkKFwiI3Nhb3BMb2FkaW5nXCIpO1xyXG4gICAgICAgIGlmIChvYmoubGVuZ3RoKVxyXG4gICAgICAgICAgICBvYmouc2hvdygpO1xyXG4gICAgfVxyXG5cclxuICAgIEhpZGVMb2FkaW5nU2FvcCgpIHtcclxuICAgICAgICB2YXIgb2JqID0gJChcIiNzYW9wTG9hZGluZ1wiKTtcclxuICAgICAgICBpZiAob2JqLmxlbmd0aClcclxuICAgICAgICAgICAgb2JqLmhpZGUoKTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgU2hvd1BvcHVwRGlhbG9nKCk6dm9pZCB7XHJcbiAgICAgICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBEaXNwbGF5IGluZm8gbWVzc2FnZSB0byB0aGUgdXNlciBpbiBhIG1vZGFsXHJcbiAgICAgICAgbGV0IHRpdGxlRGl2ID0gJCgnI2luZm8tbW9kYWwtdGl0bGUtZGl2Jyk7XHJcbiAgICAgICAgbGV0IHRpdGxlSCA9ICQoJyNpbmZvLW1vZGFsLXRpdGxlJyk7XHJcbiAgICAgICAgbGV0IGNvbmZpcm1CdXR0b24gPSAkKCcjaW5mby1tb2RhbC1idG4tb2snKTtcclxuICAgICAgICBsZXQgY2FuY2VsQnV0dG9uID0gJCgnI2luZm8tbW9kYWwtYnRuLWNhbmNlbCcpO1xyXG5cclxuICAgICAgICBjYW5jZWxCdXR0b24uaHRtbCh0aGlzLl9vcHRpb25zLmNhbmNlbEJ1dHRvbkNhcHRpb24pO1xyXG5cclxuICAgICAgICAvLyBzaG93IG9yIGhpZGUgaGVhZGVyIGRpdiBiYXNlZCBvbiB0aXRsZSBwcm9wZXJ0eVxyXG4gICAgICAgIHRpdGxlRGl2LmNzcyhcImRpc3BsYXlcIiwgXCJcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudGl0bGUpIHtcclxuICAgICAgICAgICAgdGl0bGVILmh0bWwodGhpcy5fb3B0aW9ucy50aXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aXRsZURpdi5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmNvbmZpcm1CdXR0b25DYXB0aW9uKXtcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvbi5odG1sKHRoaXMuX29wdGlvbnMuY29uZmlybUJ1dHRvbkNhcHRpb24pO1xyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uLmNzcyhcImRpc3BsYXlcIiwgXCJcIik7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvbi5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNob3dDYW5jZWxCdXR0b24pIHtcclxuICAgICAgICAgICAgY2FuY2VsQnV0dG9uLmh0bWwodGhpcy5fb3B0aW9ucy5jYW5jZWxCdXR0b25DYXB0aW9uKTtcclxuICAgICAgICAgICAgY2FuY2VsQnV0dG9uLmNzcyhcImRpc3BsYXlcIiwgXCJcIik7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FuY2VsQnV0dG9uLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJCgnI2luZm8tbW9kYWwtYm9keScpLmh0bWwodGhpcy5fb3B0aW9ucy5ib2R5KTtcclxuXHJcbiAgICAgICAgJChcIiNpbmZvLW1vZGFsLWJ0bi1va1wiKS5jbGljayhcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucG9wdXBEaWFsb2dDb25maXJtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAkKCcjaW5mby1tb2RhbCcpLm9uKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAkKFwiI2luZm8tbW9kYWwtYnRuLW9rXCIpLnVuYmluZChcImNsaWNrXCIpO1xyXG4gICAgICAgICAgICAkKHRoaXMpLm1vZGFsKCdkaXNwb3NlJyk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgJCgnI2luZm8tbW9kYWwnKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgICAgIGdsb2JhbC5zZXRNb2RhbEZvcm1aSW5kZXgoJyNpbmZvLW1vZGFsJyk7XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIHBvcHVwRGlhbG9nQ29uZmlybSgpIHtcclxuICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGxldCBjYW5jZWxCdXR0b24gPSAkKCcjaW5mby1tb2RhbC1idG4tY2FuY2VsJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmNvbmZpcm1BY3Rpb24gIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5fb3B0aW9ucy5jb25maXJtQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9vcHRpb25zLmNvbmZpcm1BY3Rpb25kYXRhLFxyXG4gICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgeyBfdGhpcy5TaG93TG9hZGluZ1Nhb3AoKTsgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IF90aGlzLkhpZGVMb2FkaW5nU2FvcCgpOyB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGRpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbi50cmlnZ2VyKFwiY2xpY2tcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKF90aGlzLl9vcHRpb25zLm9uU3VjY2VzcyAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9vcHRpb25zLm9uU3VjY2VzcyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGRpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbi50cmlnZ2VyKFwiY2xpY2tcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQocmVzcG9uc2UucmVzcG9uc2VKU09OLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vY2xvc2UgZGlhbG9nXHJcbiAgICAgICAgICAgIGNhbmNlbEJ1dHRvbi50cmlnZ2VyKFwiY2xpY2tcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5vblN1Y2Nlc3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5vblN1Y2Nlc3MobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiIsIu+7v2ltcG9ydCB7IGdsb2JhbCB9IGZyb20gXCIuLi9Db21tb24vc2FvcC1jb21tb25cIjtcclxuaW1wb3J0IHsgU2FvcFNlcnZpY2VzQ29yZSB9IGZyb20gXCIuLi9Db3JlL3Nhb3Atc2VydmljZXMtY29yZVwiO1xyXG5cclxuZXhwb3J0IGVudW0gU2FvcFJpZ2h0U2lkZWJhclZpZXcge1xyXG4gICAgRGFzaGJvYXJkID0gMFxyXG4gICAgLEFic2VuY2UgPSAxXHJcbiAgICAsQXR0ZW5kYW5jZURheSA9IDJcclxuICAgICxBdHRlbmRhbmNlTW9udGggPSAzICAgIFxyXG4gICAgLFRyYXZlbE9yZGVycyA9IDRcclxuICAgICxJbnRlcm5hbE9yZGVycyA9IDVcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BSaWdodFNpZGViYXIge1xyXG4gICAgcHJpdmF0ZSBfc2FvcFNlcnZpY2VzQ29yZSA6U2FvcFNlcnZpY2VzQ29yZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9zYW9wU2VydmljZXNDb3JlID0gbmV3IFNhb3BTZXJ2aWNlc0NvcmUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYmluZENhcm91c2VsRGl2KGNvbnRlbnRJZDpzdHJpbmcsdmlldzpTYW9wUmlnaHRTaWRlYmFyVmlldyl7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BSaWdodFNpZGViYXIuYmluZERpdlwiKTsgXHJcbiAgICAgICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5hZnRlckRvbmUgPSBmdW5jdGlvbihyZXNwb25zZSl7XHJcbiAgICAgICAgICAgICQoY29udGVudElkKS5odG1sKHJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3Nhb3BTZXJ2aWNlc0NvcmUuRXhlY3V0ZUFjdGlvbih7XHJcbiAgICAgICAgICAgIGFjdGlvbjpcIlJpZ2h0U2lkZUJhci9HZXRDYXJvdXNlbFZpZXc/dmlldz1cIit2aWV3LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgLGRhdGE6bnVsbFxyXG4gICAgICAgICAgICAsdHlwZTpcIkdFVFwiXHJcbiAgICAgICAgICAgICxzcGlubmVyRGl2SWQ6XCIjc2FvcExvYWRpbmdTaWRlYmFyclwiXHJcbiAgICAgICAgICAgICxhc3luYzpmYWxzZVxyXG4gICAgICAgIH0pOyAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaERvcHVzdFphS29yaXNjZW5qZVN1bW1hcnkoY29udGVudElkOiBzdHJpbmcsIHNwaW5uZXJEaXZJZDogc3RyaW5nID0gXCIjc2FvcExvYWRpbmdTaWRlYmFyclwiKTogdm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BSaWdodFNpZGViYXIucmVmcmVzaERvcHVzdFphS29yaXNjZW5qZVN1bW1hcnlcIik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Nhb3BTZXJ2aWNlc0NvcmUuYWZ0ZXJEb25lID0gZnVuY3Rpb24ocmVzcG9uc2Upe1xyXG4gICAgICAgICAgICAkKGNvbnRlbnRJZCkuaHRtbChyZXNwb25zZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9zYW9wU2VydmljZXNDb3JlLkV4ZWN1dGVBY3Rpb24oe1xyXG4gICAgICAgICAgICBhY3Rpb246XCJSaWdodFNpZGVCYXIvRG9wdXN0WmFLb3Jpc2NlbmplU3VtbWFyeVBhcnRpYWxcIlxyXG4gICAgICAgICAgICAsZGF0YTpudWxsXHJcbiAgICAgICAgICAgICx0eXBlOlwiR0VUXCJcclxuICAgICAgICAgICAgLHNwaW5uZXJEaXZJZDogc3Bpbm5lckRpdklkXHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoVXJlWmFLb3Jpc2NlbmplU3VtbWFyeShjb250ZW50SWQ6IHN0cmluZywgc3Bpbm5lckRpdklkOiBzdHJpbmcgPSBcIiNzYW9wTG9hZGluZ1NpZGViYXJyXCIpOiB2b2lkIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcFJpZ2h0U2lkZWJhci5yZWZyZXNoVXJlWmFLb3Jpc2NlbmplU3VtbWFyeVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5hZnRlckRvbmUgPSBmdW5jdGlvbihyZXNwb25zZSl7XHJcbiAgICAgICAgICAgICQoY29udGVudElkKS5odG1sKHJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3Nhb3BTZXJ2aWNlc0NvcmUuRXhlY3V0ZUFjdGlvbih7XHJcbiAgICAgICAgICAgIGFjdGlvbjpcIlJpZ2h0U2lkZUJhci9VcmVaYUtvcmlzY2VuamVTdW1tYXJ5UGFydGlhbFwiXHJcbiAgICAgICAgICAgICxkYXRhOm51bGxcclxuICAgICAgICAgICAgLHR5cGU6XCJHRVRcIlxyXG4gICAgICAgICAgICAsc3Bpbm5lckRpdklkOiBzcGlubmVyRGl2SWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoUmVnVXJhRG9nb2RraVN1bW1hcnkoY29udGVudElkOiBzdHJpbmcsIHNlbGVjdGVkUGVyaW9kOnN0cmluZywgc3Bpbm5lckRpdklkOnN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJTYW9wUmlnaHRTaWRlYmFyLnJlZnJlc2hSZWdVcmFEb2dvZGtpU3VtbWFyeVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5hZnRlckRvbmUgPSBmdW5jdGlvbihyZXNwb25zZSl7XHJcbiAgICAgICAgICAgICQoY29udGVudElkKS5odG1sKHJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3Nhb3BTZXJ2aWNlc0NvcmUuRXhlY3V0ZUFjdGlvbih7XHJcbiAgICAgICAgICAgIGFjdGlvbjpcIlJpZ2h0U2lkZUJhci9SZWdVcmFEb2dvZGtpU3VtbWFyeVBhcnRpYWw/c2VsZWN0ZWRQZXJpb2Q9XCIrc2VsZWN0ZWRQZXJpb2RcclxuICAgICAgICAgICAgLGRhdGE6bnVsbFxyXG4gICAgICAgICAgICAsdHlwZTpcIkdFVFwiXHJcbiAgICAgICAgICAgICxzcGlubmVyRGl2SWQ6c3Bpbm5lckRpdklkXHJcbiAgICAgICAgICAgIC8vLHNwaW5uZXJEaXZJZDpcIiNzYW9wTG9hZGluZ1NpZGViYXJyXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoUmVnT1BOUG90bmlOYWxvZ2lTdW1tYXJ5KGNvbnRlbnRJZDogc3RyaW5nLCBzcGlubmVyRGl2SWQ6c3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BSaWdodFNpZGViYXIucmVmcmVzaFJlZ09QTlBvdG5pTmFsb2dpU3VtbWFyeVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5hZnRlckRvbmUgPSBmdW5jdGlvbihyZXNwb25zZSl7XHJcbiAgICAgICAgICAgICQoY29udGVudElkKS5odG1sKHJlc3BvbnNlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3Nhb3BTZXJ2aWNlc0NvcmUuRXhlY3V0ZUFjdGlvbih7XHJcbiAgICAgICAgICAgIGFjdGlvbjpcIlRyYXZlbE9yZGVyL1RyYXZlbE9yZGVyc1N1bW1hcnlcIlxyXG4gICAgICAgICAgICAsZGF0YTpudWxsXHJcbiAgICAgICAgICAgICx0eXBlOlwiR0VUXCJcclxuICAgICAgICAgICAgLHNwaW5uZXJEaXZJZDpzcGlubmVyRGl2SWRcclxuICAgICAgICAgICAgLy8sc3Bpbm5lckRpdklkOlwiI3Nhb3BMb2FkaW5nU2lkZWJhcnJcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2hOZGtJbnRlcm5hbE9yZGVyc1N1bW1hcnkoY29udGVudElkOiBzdHJpbmcsIHNwaW5uZXJEaXZJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BSaWdodFNpZGViYXIucmVmcmVzaE5ka0ludGVybmFsT3JkZXJzU3VtbWFyeVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5hZnRlckRvbmUgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgJChjb250ZW50SWQpLmh0bWwocmVzcG9uc2UpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5FeGVjdXRlQWN0aW9uKHtcclxuICAgICAgICAgICAgYWN0aW9uOiBcIlJpZ2h0U2lkZUJhci9JbnRlcm5hbE9yZGVyc1N1bW1hcnlcIlxyXG4gICAgICAgICAgICAsIGRhdGE6IG51bGxcclxuICAgICAgICAgICAgLCB0eXBlOiBcIkdFVFwiXHJcbiAgICAgICAgICAgICwgc3Bpbm5lckRpdklkOiBzcGlubmVyRGl2SWRcclxuICAgICAgICAgICAgLy8sc3Bpbm5lckRpdklkOlwiI3Nhb3BMb2FkaW5nU2lkZWJhcnJcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiIsIu+7v1xyXG5leHBvcnQgaW50ZXJmYWNlIFNhb3BJbnB1dFdGTFByb3BlcnRpZXMge1xyXG4gICAgaWQ6c3RyaW5nO1xyXG4gICAgcGxhY2Vob2xkZXI6c3RyaW5nO1xyXG4gICAgY2FwdGlvbjpzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wc2VsZWN0V0ZMIHtcclxuICAgIHByaXZhdGUgX2lucHV0VGVtcGxhdGU6c3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczpTYW9wSW5wdXRXRkxQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdGhpcy5faW5wdXRUZW1wbGF0ZSA9IFxyXG4gICAgICAgIGBcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy1mbG9hdC1sYWJlbCBzYW9wLWRyb3Bkb3duIHNlbGVjdEVsZW1lbnRcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzaGFkb3ctbm9uZSBzYW9wLWNvbnRyb2wgc2FvcC1jaGlsZC1zZWxlY3RcIiBkYXRhLWNob3Nlbj1cIlRcIiBpZD1cIiR7cHJvcGVydGllcy5pZH1cIiBuYW1lPVwiJHtwcm9wZXJ0aWVzLmlkfVwiIHRhYmluZGV4PVwiMFwiIHN0eWxlPVwiaGVpZ2h0OiAzMHB4O3BhZGRpbmc6IDAuMDc1cmVtIDAuNzVyZW07XCI+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIvPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2FvcC1mbG9hdGluZy1sYWJlbFwiIGZvcj1cIiR7cHJvcGVydGllcy5pZH1cIj4ke3Byb3BlcnRpZXMuY2FwdGlvbn08L2xhYmVsPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cInNlbGVjdC1kcm9wZG93biBzYW9wLWltZy1kb3duIHNpLXNcIi8+XHJcbiAgICAgICAgPC9zcGFuPiAgICAgXHJcbiAgICAgICAgYDsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGdldEVsZW1lbnQoKTpKUXVlcnk8SFRNTEVsZW1lbnQ+e1xyXG4gICAgICAgIGxldCBfZWxlbWVudCA9ICQodGhpcy5faW5wdXRUZW1wbGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIF9lbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldElubmVySHRtbCgpOnN0cmluZ3tcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRUZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCLvu79pbXBvcnQgeyBnbG9iYWwgfSBmcm9tIFwiLi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFRvZ2dsZVBhbmVsIHtcclxuXHJcbiAgICBpbml0KCk6dm9pZHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcFRvZ2dsZVBhbmVsLmluaXQuLi5cIik7XHJcbiAgICAgICAgdGhpcy5zZXRDbGlja0V2ZW50T25GcmFtZShcImJvZHlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2xpY2tFdmVudE9uRnJhbWUoZnJhbWVOYW1lOnN0cmluZyA9IFwiYm9keVwiKTp2b2lkIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcFRvZ2dsZVBhbmVsLnNldENsaWNrRXZlbnRPbkZyYW1lLi4uXCIpO1xyXG5cclxuICAgICAgICBsZXQgX2ZyYW1lID0gJChcIlwiK2ZyYW1lTmFtZStcIiAqPiAuc2FvcC10b2dnbGUtcGFuZWxcIik7XHJcbiAgICAgICAgX2ZyYW1lLm9mZihcImNsaWNrXCIpO1xyXG4gICAgICAgIF9mcmFtZS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vbmEga2xpayBzZSBwdcWhxI1pY2Egb2JybmUgZ29yIC8gZG9sXHJcbiAgICAgICAgICAgIHZhciBhcnJvd0RpdiA9ICQodGhpcykuZmluZChcIi5zYW9wLXRvZ2dsZS1hcnJvd1wiKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyb3dEaXYubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJvd0RpdltpXS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYW9wLWltZy1kb3duXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dEaXZbaV0uY2xhc3NMaXN0LnJlbW92ZShcInNhb3AtaW1nLWRvd25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dEaXZbaV0uY2xhc3NMaXN0LmFkZChcInNhb3AtaW1nLXVwXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJvd0RpdltpXS5jbGFzc0xpc3QucmVtb3ZlKFwic2FvcC1pbWctdXBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dEaXZbaV0uY2xhc3NMaXN0LmFkZChcInNhb3AtaW1nLWRvd25cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiIsIu+7v2ltcG9ydCB7IGdsb2JhbCB9IGZyb20gXCIuLi9Db21tb24vc2FvcC1jb21tb25cIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFZpZXdTcGlubmVyIHtcclxuXHJcbiAgZ2VuZXJhdGVTcGlubmVyRGl2KHNwaW5uZXJJZDogc3RyaW5nID0gJyNzYW9wTG9hZGluZycpOiBzdHJpbmcge1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImdlbmVyYXRlU3Bpbm5lckRpdiBcIiArIHNwaW5uZXJJZCk7XHJcbiAgICBsZXQgc3Bpbm5yRGl2ID1cclxuICAgICAgJzxkaXYgaWQ9XCInICsgc3Bpbm5lcklkICsgJ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBjbGFzcz1cIlwiPiAnXHJcbiAgICAgICsgJ1x0PGRpdiBpZD1cIicgKyBzcGlubmVySWQgKyAnU3Bpbm5lckJhY2tncm91bmdcIiBjbGFzcz1cInNwaW5uZXItYmFja2dyb3VuZCBcIi8+ICdcclxuICAgICAgKyAnXHQ8ZGl2IGlkPVwiJyArIHNwaW5uZXJJZCArICdTcGlubmVyXCIgY2xhc3M9XCJzcGlubmVyIHNwaW5uZXItY2VudGVyLWRhc2hib2FyZFNpZGViYXJyXCI+ICdcclxuICAgICAgKyAnXHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyLWJsYWRlXCIvPiAnXHJcbiAgICAgICsgJ1x0XHQ8ZGl2IGNsYXNzPVwic3Bpbm5lci1ibGFkZVwiLz4gJ1xyXG4gICAgICArICdcdFx0PGRpdiBjbGFzcz1cInNwaW5uZXItYmxhZGVcIi8+ICdcclxuICAgICAgKyAnXHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyLWJsYWRlXCIvPiAnXHJcbiAgICAgICsgJ1x0XHQ8ZGl2IGNsYXNzPVwic3Bpbm5lci1ibGFkZVwiLz4gJ1xyXG4gICAgICArICdcdFx0PGRpdiBjbGFzcz1cInNwaW5uZXItYmxhZGVcIi8+ICdcclxuICAgICAgKyAnXHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyLWJsYWRlXCIvPiAnXHJcbiAgICAgICsgJ1x0XHQ8ZGl2IGNsYXNzPVwic3Bpbm5lci1ibGFkZVwiLz4gJ1xyXG4gICAgICArICdcdFx0PGRpdiBjbGFzcz1cInNwaW5uZXItYmxhZGVcIi8+ICdcclxuICAgICAgKyAnXHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyLWJsYWRlXCIvPiAnXHJcbiAgICAgICsgJ1x0XHQ8ZGl2IGNsYXNzPVwic3Bpbm5lci1ibGFkZVwiLz4gJ1xyXG4gICAgICArICdcdFx0PGRpdiBjbGFzcz1cInNwaW5uZXItYmxhZGVcIi8+ICdcclxuICAgICAgKyAnXHQ8L2Rpdj4gJ1xyXG4gICAgICArICc8L2Rpdj4gJztcclxuXHJcbiAgICByZXR1cm4gc3Bpbm5yRGl2O1xyXG4gIH1cclxuXHJcbiAgc2hvd0xvYWRpbmdTYW9wKGVsZW1lbnRJZDogc3RyaW5nID0gXCIjc2FvcExvYWRpbmdcIikge1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcInNob3dMb2FkaW5nU2FvcCBcIiArIGVsZW1lbnRJZCk7XHJcbiAgICB2YXIgb2JqID0gJChlbGVtZW50SWQpO1xyXG4gICAgaWYgKG9iai5sZW5ndGgpIHtcclxuICAgICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNob3cuLi4gXCIpO1xyXG4gICAgICBvYmouc2hvdygpO1xyXG4gICAgICAvL3NldE1vZGFsRm9ybVpJbmRleChlbGVtZW50SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZUxvYWRpbmdTYW9wKGVsZW1lbnRJZDogc3RyaW5nID0gXCIjc2FvcExvYWRpbmdcIikge1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImhpZGVMb2FkaW5nU2FvcCBcIiArIGVsZW1lbnRJZCk7XHJcbiAgICB2YXIgb2JqID0gJChlbGVtZW50SWQpO1xyXG4gICAgaWYgKG9iai5sZW5ndGgpXHJcbiAgICAgIG9iai5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBzaG93TG9hZGluZ1Nhb3AoZWxlbWVudElkOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgLy8gICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwic2hvd0xvYWRpbmdTYW9wIFwiICsgZWxlbWVudElkKTtcclxuICAvLyAgIGlmICghaXNFbXB0eShlbGVtZW50SWQpKSB7XHJcbiAgLy8gICAgIGxldCBlbGVtZW50RGl2ID0gJChlbGVtZW50SWQpO1xyXG4gIC8vICAgICBpZiAoZWxlbWVudERpdi5sZW5ndGgpIHtcclxuICAvLyAgICAgICBsZXQgc3Bpbm5lcklEID0gZWxlbWVudElkICsgXCJMb2FkaW5nXCI7XHJcbiAgLy8gICAgICAgc3Bpbm5lcklEID0gc3Bpbm5lcklELnJlcGxhY2UoXCIjXCIsXCJcIik7XHJcbiAgLy8gICAgICAgbGV0IHNwaW5uZXJEaXYgPSAkKHNwaW5uZXJJRCk7XHJcbiAgLy8gICAgICAgaWYgKCFzcGlubmVyRGl2Lmxlbmd0aCkge1xyXG4gIC8vICAgICAgICAgbGV0IF9kaXYgPSB0aGlzLmdlbmVyYXRlU3Bpbm5lckRpdihzcGlubmVySUQpO1xyXG4gIC8vICAgICAgICAgZWxlbWVudERpdi5hcHBlbmQoX2Rpdik7XHJcbiAgLy8gICAgICAgICBzcGlubmVyRGl2ID0gJChzcGlubmVySUQpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBzcGlubmVyRGl2LnNob3coKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gaGlkZUxvYWRpbmdTYW9wKGVsZW1lbnRJZDogc3RyaW5nID0gXCJcIikge1xyXG4gIC8vICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImhpZGVMb2FkaW5nU2FvcCBcIiArIGVsZW1lbnRJZCk7XHJcbiAgLy8gICBpZiAoIWlzRW1wdHkoZWxlbWVudElkKSkge1xyXG4gIC8vICAgICBsZXQgZWxlbWVudERpdiA9ICQoZWxlbWVudElkKTtcclxuICAvLyAgICAgaWYgKGVsZW1lbnREaXYubGVuZ3RoKSB7XHJcbiAgLy8gICAgICAgbGV0IHNwaW5uZXJJRCA9IGVsZW1lbnRJZCArIFwiTG9hZGluZ1wiO1xyXG4gIC8vICAgICAgIGxldCBzcGlubmVyRGl2ID0gJChzcGlubmVySUQpO1xyXG4gIC8vICAgICAgIGlmICghc3Bpbm5lckRpdi5sZW5ndGgpIHtcclxuICAvLyAgICAgICAgIGVsZW1lbnREaXYuYXBwZW5kKHRoaXMuZ2VuZXJhdGVTcGlubmVyRGl2KHNwaW5uZXJJRCkpO1xyXG4gIC8vICAgICAgICAgc3Bpbm5lckRpdiA9ICQoc3Bpbm5lcklEKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgc3Bpbm5lckRpdi5oaWRlKCk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcbiAgLy8gLy9cclxufVxyXG4iLCLvu79pbXBvcnQgeyBnbG9iYWwgfSBmcm9tIFwiLi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcbmltcG9ydCB7IFNhb3BWaWV3U3Bpbm5lciB9IGZyb20gJy4uL0NvbXBvbmVudHMvc2FvcC12aWV3LXNwaW5uZXInXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhb3BTZXJ2aWNlc0NvcmVQYXJhbXMge1xyXG4gIGFjdGlvbjpzdHJpbmc7XHJcbiAgYXN5bmM/OmJvb2xlYW5cclxuICB0eXBlPzpzdHJpbmc7XHJcbiAgZGF0YT86YW55O1xyXG4gIHNwaW5uZXJEaXZJZD86c3RyaW5nO1xyXG4gIC8vIGNvbnRlbnRUeXBlPzogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQ7XHJcbiAgLy8gZGF0YVR5cGU/OiAneG1sJyB8ICdodG1sJyB8ICdzY3JpcHQnIHwgJ2pzb24nIHwgJ2pzb25wJyB8ICd0ZXh0JyB8IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBwcm9jZXNzRGF0YT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNhb3BTZXJ2aWNlc0NvcmVSZXN1bHQge1xyXG4gIHN1Y2Nlc3MgPSAxXHJcbiAgLCBlcnJvciA9IDJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU2FvcFNlcnZpY2VzQ29yZUhUVFBSZXN1bHRTdGF0dXNDb2RlIHtcclxuICBvayA9IDIwMCxcclxuICB1bmF1dGhvcml6ZWQgPSA0MDEsXHJcbiAgaW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwMFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhb3BTZXJ2aWNlc0NvcmVSZXNwb25zZSB7XHJcbiAgcmVzcG9uc2U6IFNhb3BTZXJ2aWNlc0NvcmVSZXN1bHQ7XHJcbiAgZGF0YTogYW55O1xyXG59O1xyXG5cclxuLy8gZnVuY3Rpb24gc3luY0RlbGF5KG1pbGxpc2Vjb25kczphbnkpe1xyXG4vLyAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4vLyAgIHZhciBlbmQ9MDtcclxuLy8gICB3aGlsZSggKGVuZC1zdGFydCkgPCBtaWxsaXNlY29uZHMpe1xyXG4vLyAgICAgICBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuLy8gICB9XHJcbi8vICB9XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFNlcnZpY2VzQ29yZSB7XHJcbiAgcHJpdmF0ZSBfc2FvcFZpZXdTcGlubmVyOlNhb3BWaWV3U3Bpbm5lciA9IG5ldyBTYW9wVmlld1NwaW5uZXIoKTtcclxuICBwcml2YXRlIF9wYXJhbXM6U2FvcFNlcnZpY2VzQ29yZVBhcmFtcztcclxuICBwcml2YXRlIF9kZWZhdWx0UGFyYW1zOlNhb3BTZXJ2aWNlc0NvcmVQYXJhbXM7XHJcbiAgLy8gIFxyXG4gIC8vcHVibGljIF9yZXN1bHQ6U2FvcFNlcnZpY2VzQ29yZVJlc3BvbnNlID0ge3Jlc3BvbnNlOm51bGwsZGF0YTpudWxsfTsgIFxyXG5cclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgdGhpcy5fZGVmYXVsdFBhcmFtcyA9IHtcclxuICAgICAgYWN0aW9uOlwiXCJcclxuICAgICAgLHR5cGU6XCJHRVRcIlxyXG4gICAgICAsYXN5bmM6dHJ1ZVxyXG4gICAgICAsZGF0YTpudWxsXHJcbiAgICAgICxzcGlubmVyRGl2SWQ6XCJcIlxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Eb25lKHJlc3VsdDphbnkpe1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BTZXJ2aWNlc0NvcmUub25Eb25lXCIpO1xyXG4gICAgdGhpcy5hZnRlckRvbmUocmVzdWx0KTtcclxuICAgIC8vdGhpcy5fc2FvcFZpZXdTcGlubmVyLmhpZGVMb2FkaW5nU2FvcCh0aGlzLl9wYXJhbXMuc3Bpbm5lckRpdklkKTsgICAgICBcclxuICB9XHJcblxyXG4gIGFmdGVyRG9uZShyZXN1bHQ6YW55KTp2b2lke1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BTZXJ2aWNlc0NvcmUuYWZ0ZXJEb25lXCIpO1xyXG4gIH0gIFxyXG5cclxuICBwcml2YXRlIG9uU3VjY2VzcyhyZXN1bHQ6YW55KTp2b2lke1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BTZXJ2aWNlc0NvcmUuc3VjY2Vzc1wiKTtcclxuICAgIGxldCBfcmVzdWx0OlNhb3BTZXJ2aWNlc0NvcmVSZXNwb25zZSA9IHtyZXNwb25zZTpudWxsLGRhdGE6bnVsbH07IFxyXG4gICAgaWYgKHR5cGVvZiByZXN1bHQuc3VjY2VzcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCByZXN1bHQuc3VjY2VzcyA9PT0gbnVsbCkge1xyXG4gICAgICBfcmVzdWx0LnJlc3BvbnNlID0gU2FvcFNlcnZpY2VzQ29yZVJlc3VsdC5zdWNjZXNzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgX3Jlc3VsdC5yZXNwb25zZSA9IHJlc3VsdC5zdWNjZXNzID09IHRydWUgPyBTYW9wU2VydmljZXNDb3JlUmVzdWx0LnN1Y2Nlc3MgOiBTYW9wU2VydmljZXNDb3JlUmVzdWx0LmVycm9yO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfcmVzdWx0LmRhdGEgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmFmdGVyU3VjY2VzcyhfcmVzdWx0KTtcclxuICB9XHJcblxyXG4gIGFmdGVyU3VjY2VzcyhyZXN1bHQ6YW55KTp2b2lke1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BTZXJ2aWNlc0NvcmUuYWZ0ZXJTdWNjZXNzXCIpO1xyXG4gIH0gIFxyXG5cclxuICBwcml2YXRlIG9uRXJyb3IocmVzdWx0OmFueSk6dm9pZHtcclxuICAgIGdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJTYW9wU2VydmljZXNDb3JlLmVycm9yXCIpO1xyXG4gICAgXHJcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PSBTYW9wU2VydmljZXNDb3JlSFRUUFJlc3VsdFN0YXR1c0NvZGUudW5hdXRob3JpemVkKSB7XHJcbiAgICAgIC8vIHJlZGlyZWN0IHRvIGxvZ2luXHJcbiAgICAgIHRoaXMudW5BdXRob3JpemVkUmVkaXJlY3RUb0xvZ2luUGFnZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPSBTYW9wU2VydmljZXNDb3JlSFRUUFJlc3VsdFN0YXR1c0NvZGUuaW50ZXJuYWxTZXJ2ZXJFcnJvciAmJiAhZ2xvYmFsLmlzVW5EZWZpbmVkKHJlc3VsdC5yZXNwb25zZVRleHQpKSB7XHJcbiAgICAgIGFsZXJ0KFwiSW50ZXJuYWwgZXJyb3IhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBfcmVzdWx0OlNhb3BTZXJ2aWNlc0NvcmVSZXNwb25zZSA9IHtyZXNwb25zZTpudWxsLGRhdGE6bnVsbH07IFxyXG4gICAgX3Jlc3VsdC5yZXNwb25zZSA9IFNhb3BTZXJ2aWNlc0NvcmVSZXN1bHQuZXJyb3I7XHJcbiAgICBfcmVzdWx0LmRhdGEgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmFmdGVyRXJyb3IoX3Jlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBhZnRlckVycm9yKHJlc3VsdDphbnkpOnZvaWR7XHJcbiAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcFNlcnZpY2VzQ29yZS5hZnRlclN1Y2Nlc3NcIik7XHJcbiAgfSBcclxuXHJcbiAgRXhlY3V0ZUFjdGlvbihwYXJhbXM6U2FvcFNlcnZpY2VzQ29yZVBhcmFtcyk6dm9pZCB7XHJcbiAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcFNlcnZpY2VzQ29yZS5FeGVjdXRlQWN0aW9uXCIpO1xyXG4gICAgbGV0IG9wdGlvbnMgPSB7IC4uLnRoaXMuX2RlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9O1xyXG4gICAgcGFyYW1zID0gb3B0aW9ucztcclxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgX2FqYXhBY3Rpb24gPSBnbG9iYWwuZ2V0U2l0ZUFic29sdXRlVVJMKHBhcmFtcy5hY3Rpb24pO1xyXG5cclxuICAgIC8vQFVybC5BY3Rpb24oXCJjcmVhckNhbXBNYW51YWxcIiwgXCJEUFNcIilcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAkLmFqYXgoe1xyXG4gICAgICAgIGFzeW5jOiBwYXJhbXMuYXN5bmMsXHJcbiAgICAgICAgdXJsOiBfYWpheEFjdGlvbixcclxuICAgICAgICB0eXBlOiAhZ2xvYmFsLmlzRW1wdHkocGFyYW1zLnR5cGUpID8gcGFyYW1zLnR5cGUgOiBcIlBPU1RcIixcclxuICAgICAgICBkYXRhOiBwYXJhbXMuZGF0YSxcclxuICAgICAgICAvLyBjb250ZW50VHlwZTogcGFyYW1zLmNvbnRlbnRUeXBlID09IG51bGwgPyAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04JyA6IHBhcmFtcy5jb250ZW50VHlwZSxcclxuICAgICAgICAvLyBkYXRhVHlwZTogcGFyYW1zLnR5cGUgPT0gbnVsbCA/ICdJbnRlbGxpZ2VudCBHdWVzcyAoeG1sLCBqc29uLCBzY3JpcHQsIG9yIGh0bWwpJyA6IHBhcmFtcy50eXBlLCAgXHJcbiAgICAgICAgLy8gcHJvY2Vzc0RhdGEgOiBwYXJhbXMucHJvY2Vzc0RhdGEgPT0gbnVsbCA/IHRydWUgOiBwYXJhbXMucHJvY2Vzc0RhdGEsIFxyXG4gICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICgpIHsgX3RoaXMuX3Nhb3BWaWV3U3Bpbm5lci5zaG93TG9hZGluZ1Nhb3AocGFyYW1zLnNwaW5uZXJEaXZJZCk7IH0sXHJcbiAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgX3RoaXMuX3Nhb3BWaWV3U3Bpbm5lci5oaWRlTG9hZGluZ1Nhb3AocGFyYW1zLnNwaW5uZXJEaXZJZCk7IH0sXHJcbiAgICAgICAgc3VjY2VzczogdGhpcy5vblN1Y2Nlc3MuYmluZChfdGhpcyksXHJcbiAgICAgICAgZXJyb3I6IHRoaXMub25FcnJvci5iaW5kKF90aGlzKVxyXG4gICAgICB9KS5kb25lKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiRG9uZS4uLlwiKTtcclxuICAgICAgICBfdGhpcy5vbkRvbmUocmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaChlcnIpIHtcclxuICAgICAgYWxlcnQoXCJJbnRlcm5hbCBlcnJvciFcIik7XHJcbiAgICB9ICAgIFxyXG5cclxuICBcclxuICB9XHJcblxyXG4gIEV4ZWN1dGVCbG9iQWN0aW9uKHBhcmFtczogU2FvcFNlcnZpY2VzQ29yZVBhcmFtcyk6IHZvaWQge1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BTZXJ2aWNlc0NvcmUuRXhlY3V0ZUJsb2JBY3Rpb25cIik7XHJcbiAgICBsZXQgb3B0aW9ucyA9IHsgLi4udGhpcy5fZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zIH07XHJcbiAgICBwYXJhbXMgPSBvcHRpb25zO1xyXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGxldCBfYWpheEFjdGlvbiA9IGdsb2JhbC5nZXRTaXRlQWJzb2x1dGVVUkwocGFyYW1zLmFjdGlvbik7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiBcIlBPU1RcIixcclxuICAgICAgICB1cmw6IF9hamF4QWN0aW9uLFxyXG4gICAgICAgIGRhdGE6IHBhcmFtcy5kYXRhLFxyXG4gICAgICAgIHhockZpZWxkczoge1xyXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicgLy8gdG8gYXZvaWQgYmluYXJ5IGRhdGEgYmVpbmcgbWFuZ2xlZCBvbiBjaGFyc2V0IGNvbnZlcnNpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChibG9iLCBzdGF0dXMsIHhocikge1xyXG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgYSBmaWxlbmFtZVxyXG4gICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBcIlwiO1xyXG4gICAgICAgICAgICB2YXIgZGlzcG9zaXRpb24gPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2l0aW9uICYmIGRpc3Bvc2l0aW9uLmluZGV4T2YoJ2F0dGFjaG1lbnQnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxlbmFtZVJlZ2V4ID0gL2ZpbGVuYW1lW147PVxcbl0qPSgoWydcIl0pLio/XFwyfFteO1xcbl0qKS87XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGZpbGVuYW1lUmVnZXguZXhlYyhkaXNwb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSBudWxsICYmIG1hdGNoZXNbMV0pIGZpbGVuYW1lID0gbWF0Y2hlc1sxXS5yZXBsYWNlKC9bJ1wiXS9nLCAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8vICAgIC8vIElFIHdvcmthcm91bmQgZm9yIFwiSFRNTDcwMDc6IE9uZSBvciBtb3JlIGJsb2IgVVJMcyB3ZXJlIHJldm9rZWQgYnkgY2xvc2luZyB0aGUgYmxvYiBmb3Igd2hpY2ggdGhleSB3ZXJlIGNyZWF0ZWQuIFRoZXNlIFVSTHMgd2lsbCBubyBsb25nZXIgcmVzb2x2ZSBhcyB0aGUgZGF0YSBiYWNraW5nIHRoZSBVUkwgaGFzIGJlZW4gZnJlZWQuXCJcclxuICAgICAgICAgICAgLy8gICAgd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGJsb2IsIGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgLy99IGVsc2VcclxuICAgICAgICAgICAgLy97XHJcbiAgICAgICAgICAgIHZhciBVUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XHJcbiAgICAgICAgICAgIHZhciBkb3dubG9hZFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHVzZSBIVE1MNSBhW2Rvd25sb2FkXSBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBmaWxlbmFtZVxyXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICAgIC8vIHNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgdGhpcyB5ZXRcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYS5kb3dubG9hZCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGRvd25sb2FkVXJsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcclxuICAgICAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGRvd25sb2FkVXJsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7IH0sIDEwMCk7IC8vIGNsZWFudXBcclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogdGhpcy5vbkVycm9yLmJpbmQoX3RoaXMpXHJcbiAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiRG9uZS4uLlwiKTtcclxuICAgICAgICAgIF90aGlzLm9uRG9uZShyZXN1bHQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgYWxlcnQoXCJJbnRlcm5hbCBlcnJvciFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHB1YmxpYyBoYW5kbGVTdWJtaXRFcnJvcihyZXNwb25zZTogYW55KTogdm9pZCB7XHJcbiAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiU2FvcFNlcnZpY2VzQ29yZS5IYW5kbGVTdWJtaXRFcnJvclwiKTtcclxuXHJcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFNhb3BTZXJ2aWNlc0NvcmVIVFRQUmVzdWx0U3RhdHVzQ29kZS51bmF1dGhvcml6ZWQpIHtcclxuICAgICAgICB0aGlzLnVuQXV0aG9yaXplZFJlZGlyZWN0VG9Mb2dpblBhZ2UoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGlzcGxheSBlcnJvclxyXG4gICAgY29uc29sZS5sb2coXCJyZXNwb25zZVwiLCByZXNwb25zZSk7XHJcbiAgICBhbGVydChyZXNwb25zZS5zdGF0dXNUZXh0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1bkF1dGhvcml6ZWRSZWRpcmVjdFRvTG9naW5QYWdlKCk6IHZvaWQge1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BTZXJ2aWNlc0NvcmUucmVkaXJlY3RUb0xvZ2luUGFnZVwiKTtcclxuXHJcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgfVxyXG4gXHJcbiAgLy9cclxufVxyXG4iLCLvu79pbXBvcnQgeyBnbG9iYWwgfSBmcm9tIFwiLi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcbmltcG9ydCB7IFNhb3BTZXJ2aWNlc0NvcmUgfSBmcm9tIFwiLi4vQ29yZS9zYW9wLXNlcnZpY2VzLWNvcmVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wVHJhbnNsYXRpb24ge1xyXG4gIHB1YmxpYyBrZXk6IHN0cmluZyA9IFwiI1wiO1xyXG4gIHB1YmxpYyB0cmFuc2xhdGlvbjogc3RyaW5nID0gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BUcmFuc2xhdGlvbnMge1xyXG4gIHB1YmxpYyB0cmFuc2xhdGlvbnNMaXN0OltTYW9wVHJhbnNsYXRpb24/XSA9IFtdO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTYW9wVHJhbnNsYXRpb25TZXJ2aWNlUGFyYW1zIHtcclxuICBjb250cm9sbGVyOnN0cmluZyxcclxuICBhY3Rpb246c3RyaW5nLFxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BUcmFuc2xhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgX3BhcmFtczpTYW9wVHJhbnNsYXRpb25TZXJ2aWNlUGFyYW1zO1xyXG4gIHByaXZhdGUgX3Nhb3BTZXJ2aWNlc0NvcmU6IFNhb3BTZXJ2aWNlc0NvcmU7XHJcbiAgLy9cclxuICBwdWJsaWMgX3Rlcm1pbm9sb2d5OlNhb3BUcmFuc2xhdGlvbnM7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihwYXJhbXM6U2FvcFRyYW5zbGF0aW9uU2VydmljZVBhcmFtcyA9IG51bGwpe1xyXG4gICAgaWYoIWdsb2JhbC5pc1VuRGVmaW5lZChwYXJhbXMpKXtcclxuICAgICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcGFyYW1zID0ge2NvbnRyb2xsZXI6XCJUcmFuc2xhdGlvblwiLGFjdGlvbjpcIkdldFRyYW5zbGF0aW9uc1wifTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZSA9IG5ldyBTYW9wU2VydmljZXNDb3JlKCk7XHJcbiAgICB0aGlzLl90ZXJtaW5vbG9neSA9IG5ldyBTYW9wVHJhbnNsYXRpb25zKCk7XHJcbiAgfVxyXG4gIFxyXG4gIHNldFRyYW5zbGF0aW9uc0xpc3QodHJhbnNsYXRpb25zOnN0cmluZ1tdKTphbnl7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgdHJhbnNsYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgIF90aGlzLl90ZXJtaW5vbG9neS50cmFuc2xhdGlvbnNMaXN0LnB1c2goe2tleTp2YWx1ZSx0cmFuc2xhdGlvbjp2YWx1ZX0pOyAgXHJcbiAgICB9KTsgICBcclxuICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0aW9ucyh0aGlzLl90ZXJtaW5vbG9neSk7XHJcbiAgfVxyXG5cclxuICBnZXRUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zOlNhb3BUcmFuc2xhdGlvbnMpOmFueXtcclxuICAgIGxldCBqc29uRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRyYW5zbGF0aW9ucyk7XHJcbiAgICBsZXQgX2RhdGEgPSB7anNvbklucHV0Ompzb25EYXRhfTtcclxuICAgIGxldCBfcmVzcG9uc2U6YW55O1xyXG4gICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5hZnRlckRvbmUgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgX3Jlc3BvbnNlID0gcmVzcG9uc2U7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5fc2FvcFNlcnZpY2VzQ29yZS5FeGVjdXRlQWN0aW9uKHtcclxuICAgICAgICBhY3Rpb246IHRoaXMuX3BhcmFtcy5jb250cm9sbGVyK1wiL1wiK3RoaXMuX3BhcmFtcy5hY3Rpb24rXCJcIlxyXG4gICAgICAgICwgdHlwZTogXCJQT1NUXCJcclxuICAgICAgICAsIGRhdGE6IF9kYXRhXHJcbiAgICAgICAgLCBhc3luYzogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fdGVybWlub2xvZ3kudHJhbnNsYXRpb25zTGlzdCA9IF9yZXNwb25zZS50cmFuc2xhdGlvbnNMaXN0O1xyXG4gICAgcmV0dXJuIF9yZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHRyYW5zbGF0ZShrZXk6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICBsZXQgX3RyID0gdGhpcy5fdGVybWlub2xvZ3kudHJhbnNsYXRpb25zTGlzdC5maW5kKGUgPT4gZS5rZXkgPT0ga2V5KSBhcyBhbnk7XHJcbiAgICBpZiAoZ2xvYmFsLmlzVW5EZWZpbmVkKF90cikpIHsgXHJcbiAgICAgIHJldHVybiBrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gX3RyLnRyYW5zbGF0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCLvu78vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vQHR5cGVzL3R5cGluZ3MuZC50c1wiIC8+XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFV0aWxzIHtcclxuICAgIGNoZWNrQ29tcGF0aWJpbGl0eSgpOmJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBTYW9wQ29tbW9uLmNoZWNrQ29tcGF0aWJpbGl0eSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuIiwi77u/aW1wb3J0IHsgZ2xvYmFsIH0gZnJvbSBcIi4vQ29tbW9uL3Nhb3AtY29tbW9uXCI7XHJcbmltcG9ydCB7IFNhb3BVdGlscyB9IGZyb20gXCIuL0NvcmUvc2FvcC11dGlsc1wiO1xyXG5pbXBvcnQgeyBTYW9wVG9nZ2xlUGFuZWwgfSBmcm9tIFwiLi9Db21wb25lbnRzL3Nhb3AtdG9nZ2xlLXBhbmVsXCI7XHJcbmltcG9ydCB7IFNhb3BJbnB1dE1hc2sgfSBmcm9tIFwiLi9Db21wb25lbnRzL3Nhb3AtaW5wdXRtYXNrXCI7XHJcbmltcG9ydCB7IFNhb3BDaGVja2JveFN3aXRjaCB9IGZyb20gXCIuL0NvbXBvbmVudHMvc2FvcC1jaGVja2JveC1zd2l0Y2hcIjtcclxuaW1wb3J0IHsgU2FvcE11bHRpc2VsZWN0ICB9IGZyb20gXCIuL0NvbXBvbmVudHMvc2FvcC1tdWx0aXNlbGVjdFwiO1xyXG5pbXBvcnQgeyBTYW9wVmlld1NwaW5uZXIgfSBmcm9tICcuL0NvbXBvbmVudHMvc2FvcC12aWV3LXNwaW5uZXInO1xyXG5pbXBvcnQgeyBTYW9wUmlnaHRTaWRlYmFyIH0gZnJvbSAnLi9Db21wb25lbnRzL3Nhb3AtcmlnaHQtc2lkZWJhcic7XHJcbmltcG9ydCB7IE1lbnVTaWRlYmFyIH0gZnJvbSBcIi4vQ29tcG9uZW50cy9zYW9wLW1lbnUtc2lkZWJhclwiO1xyXG5pbXBvcnQgeyBTYW9wTWVzc2FnZURsZyB9IGZyb20gXCIuL0NvbXBvbmVudHMvc2FvcC1tZXNzYWdlLWRsZ1wiO1xyXG5pbXBvcnQgeyBTYW9wUG9wdXBEaWFsb2cgfSBmcm9tICcuL0NvbXBvbmVudHMvc2FvcC1wb3B1cC1kaWFsb2cnXHJcbmltcG9ydCB7IFNhb3BGbG9hdGluZ0xhYmVsIH0gZnJvbSBcIi4vQ29tcG9uZW50cy9zYW9wLWZsb2F0aW5nLWxhYmVsXCI7XHJcbmltcG9ydCB7IFNhb3BTZXJ2aWNlc0NvcmUgfSBmcm9tICcuL0NvcmUvc2FvcC1zZXJ2aWNlcy1jb3JlJztcclxuaW1wb3J0IHsgU2FvcFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vQ29yZS9zYW9wLXRyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IFNhb3BXZWJHcmlkIH0gZnJvbSAnLi9Db21wb25lbnRzL3Nhb3AtZ3JpZCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWNob1Rlc3QobXNnOnN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJlY2hvOiBcIittc2cpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb21wYXRpYmlsaXR5KCk6IGJvb2xlYW4ge1xyXG4gICAgZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcImNoZWNrQ29tcGF0aWJpbGl0eVwiKTtcclxuICAgIGxldCB1dGlscyA9IG5ldyBTYW9wVXRpbHMoKTtcclxuICAgIHJldHVybiB1dGlscy5jaGVja0NvbXBhdGliaWxpdHkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXRDbGllbnRMb2dNb2RlVmFsdWUoKSB7XHJcbiAgICBnbG9iYWwuZGVidWdNb2RlID0gZ2xvYmFsLkdldENsaWVudExvZ01vZGVTdG9yYWdlVmFsdWUoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXRTaXRlQmFzZVVybFZhbHVlKCkge1xyXG4gICAgZ2xvYmFsLnNpdGVCYXNlVXJsID0gZ2xvYmFsLmdldFNpdGVCYXNlVXJsKClcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVTaXRlSlMoKSB7XHJcbiAgICBnbG9iYWwuQ29uc29sZUxvZ0RlZ3VnKFwiaW5pdGlhbGl6ZVNpdGVKU1wiKTtcclxuICAgIG5ldyBNZW51U2lkZWJhcigpLmluaXQoKTtcclxuICAgIG5ldyBTYW9wVG9nZ2xlUGFuZWwoKS5pbml0KCk7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKGUuY3RybEtleSAmJiBlLmFsdEtleSAmJiBlLmtleUNvZGUgPT0gNzkpIHtcclxuICAgICAgICAgICAgLy8gQ1RSTCArIEFMVCArIE9cclxuICAgICAgICAgICAgZ2xvYmFsLlNldENsaWVudExvZ01vZGVTdG9yYWdlVmFsdWUoKTtcclxuICAgICAgICAgICAgZ2xvYmFsLmRlYnVnTW9kZSA9IGdsb2JhbC5HZXRDbGllbnRMb2dNb2RlU3RvcmFnZVZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZ2xvYmFsLnNldEhlbHBMaW5rKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRGaXJzdENvbnRyb2xUb0ZvY3VzKGZvcm1JZDogc3RyaW5nKSB7XHJcbiAgICBnbG9iYWwuc2V0Rmlyc3RGb3JtQ29udHJvbFRvRm9jdXMoZm9ybUlkKTtcclxufVxyXG5cclxuZXhwb3J0IHtnbG9iYWx9O1xyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFRvZ2dsZVBhbmVsRXggZXh0ZW5kcyBTYW9wVG9nZ2xlUGFuZWx7fTtcclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wSW5wdXRNYXNrRXggZXh0ZW5kcyBTYW9wSW5wdXRNYXNre307XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcENoZWNrYm94U3dpdGNoRXggZXh0ZW5kcyBTYW9wQ2hlY2tib3hTd2l0Y2h7fTtcclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wTXVsdGlzZWxlY3RFeCBleHRlbmRzIFNhb3BNdWx0aXNlbGVjdHt9O1xyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BNZXNzYWdlRGxnRXggZXh0ZW5kcyBTYW9wTWVzc2FnZURsZ3t9O1xyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BQb3B1cERpYWxvZ0V4IGV4dGVuZHMgU2FvcFBvcHVwRGlhbG9ne307XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFZpZXdTcGlubmVyRVggZXh0ZW5kcyBTYW9wVmlld1NwaW5uZXIgeyB9O1xyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BSaWdodFNpZGViYXJFeCBleHRlbmRzIFNhb3BSaWdodFNpZGViYXIgeyB9O1xyXG5cclxuZXhwb3J0IGNsYXNzIFNhb3BGbG9hdGluZ0xhYmVsRXggZXh0ZW5kcyBTYW9wRmxvYXRpbmdMYWJlbCB7IH07XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFNlcnZpY2VzQ29yZUV4IGV4dGVuZHMgU2FvcFNlcnZpY2VzQ29yZSB7IH07XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFRyYW5zbGF0aW9uU2VydmljZUV4IGV4dGVuZHMgU2FvcFRyYW5zbGF0aW9uU2VydmljZSB7IH07XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFdlYkdyaWRFeCBleHRlbmRzIFNhb3BXZWJHcmlkIHsgfTtcclxuLy9cclxuIl19"}