@adins/ucsearch 2.2.16 → 2.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["ng://@adins/ucsearch/lib/ucsearch.service.ts","ng://@adins/ucsearch/lib/model/AdInstConstant.ts","ng://@adins/ucsearch/lib/model/IntegrationObj.model.ts","ng://@adins/ucsearch/lib/model/InputSearchObj.Model.ts","ng://@adins/ucsearch/lib/model/CriteriaObj.model.ts","ng://@adins/ucsearch/lib/model/RequestCriteriaObj.model.ts","ng://@adins/ucsearch/lib/services/excel-service/excel-service.ts","ng://@adins/ucsearch/lib/model/KeyValueReport.model.ts","ng://@adins/ucsearch/lib/ucsearch.component.ts","ng://@adins/ucsearch/lib/ucsearch.module.ts"],"names":["UCSearchService","Injectable","args","providedIn","AdInsConstant","RestrictionBetween","RestrictionLike","RestrictionEq","RestrictionNeq","RestrictionGt","RestrictionGte","RestrictionLt","RestrictionLte","RestrictionIn","RestrictionNotIn","RestrictionOr","RestrictionOrNeq","RestrictionIsNull","RestrictionIsNotNull","RestrictionGTE","RestrictionLTE","showData","JoinTypeInner","JoinTypeLeft","IntegrationObj","this","baseUrl","apiPath","requestObj","Object","leftColumnToJoin","rightColumnToJoin","joinType","InputSearchObj","_url","enviromentUrl","title","apiQryPaging","arrCritObj","addCritInput","Array","ddlEnvironments","listEnvironments","whereValue","switchValue","integrationObj","isJoinExAPI","CriteriaObj","low","high","DataType","RequestCriteriaObj","includeCount","includeData","isLoading","queryString","rowVersion","ExcelService","prototype","exportAsExcelFile","json","excelFileName","worksheet","XLSX.utils","json_to_sheet","console","log","workbook","Sheets","data","SheetNames","excelBuffer","XLSX.write","bookType","type","saveAsExcelFile","buffer","fileName","Blob","FileSaver.saveAs","Date","getTime","ExportTypeConstant","EXP_TYPE_PDF","EXP_TYPE_XLS","EXP_TYPE_XLSX","EXP_TYPE_DOC","EXP_TYPE_DOCX","UCSearchComponent","defineProperty","content","searchForm","changeState","currentState","isHidden","ngOnInit","apiUrl","searchInput","arrCrit","js","_renderer2","createElement","text","appendChild","_document","body","value","cookieService","get","BisDt","DecryptString","initiateForm","_this","getJSON","subscribe","configuration","exportData","exportExcel","exportTypeList","undefined","length","ExportTypeList","ExportType","key","countForm","component","isDataLoaded","i","isFromURL","request","arrayCrit","criteriaObject","propName","criteriaPropName","criteriaPropValue","restriction","push","criteria","path","y","name","fullpath","environment","url","resolveObject","parseFloat","toLocaleString","includes","businessDate","operator","charAt","dateShow","tempMinus","split","numDay","parseInt","setDate","getDate","dateText","formatDate","http","postJSON","post","searchClick","order","orderby","pageNow","search","pageSize","reset","resetForm","pageNo","rowPerPage","orderBy","addCrit","IsQueryIn","IsBreak","querystring","whereQuery","x","i_1","critObj","myForm","nativeElement","getAttribute","nodeName","ddl","options","selectedIndex","trim","label","toastr","warning","ddlList","listValue","replace","toString","toUpperCase","response","qryPaging","result","emit","GenerateReport","genRpt","ElRef","lessThanFour","obj","crit","tempData","itemsUrl","ReturnObject","transformAmount","element","formattedAmount","target","transformToDecimal","exportAsXLSX","ExcelData","excelService","error","onChangeEvent","optValue","afFilter","jsonComp","affectedFilter","j","datatype","filterPropName","switchCase","condList","condition","conditions","idx","findIndex","property","isUser","username","localStorage","getItem","chipperText","chipperKey","chipperKeyArr","CryptoJS.enc","Utf8","parse","iv","CryptoJS.lib","WordArray","create","CryptoJS.AES","decrypt","Component","selector","template","providers","animations","trigger","state","style","height","opacity","overflow","transition","animate","HttpClient","Renderer2","Inject","DOCUMENT","ToastrService","CookieService","ViewChild","Input","Output","isReport","EventEmitter","amount","customCurrencyMaskConfig","align","allowNegative","allowZero","decimal","precision","prefix","suffix","thousands","nullable","inputMode","CurrencyMaskInputMode","NATURAL","UCSearchModule","NgModule","declarations","imports","CommonModule","FormsModule","UcShowErrorsModule","NgxCurrencyModule","forRoot","TranslateModule","forChild","exports"],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UCSearchService {\r\n\r\n constructor() { }\r\n}\r\n","import { formatDate } from \"@angular/common\";\r\n\r\nexport class AdInsConstant {\r\n public static RestrictionBetween = \"Between\"\r\n public static RestrictionLike = \"Like\";\r\n public static RestrictionEq = \"Eq\";\r\n public static RestrictionNeq = \"NEQ\";\r\n public static RestrictionGt = \"GT\";\r\n public static RestrictionGte = \"GTE\";\r\n public static RestrictionLt = \"LT\";\r\n public static RestrictionLte = \"LTE\";\r\n public static RestrictionIn = \"IN\";\r\n public static RestrictionNotIn = \"NotIn\";\r\n public static RestrictionOr = \"Or\"; //pastikan ada 1 criteria sebelumnya\r\n public static RestrictionOrNeq = \"OrNeq\"; //pastikan ada 1 criteria sebelumnya\r\n public static RestrictionIsNull = \"isnull\";\r\n public static RestrictionIsNotNull = \"isnotnull\";\r\n public static RestrictionGTE = \"GTE\";\r\n public static RestrictionLTE = \"LTE\";\r\n public static showData = \"10,50,100\";\r\n public static JoinTypeInner = \"INNER\";\r\n public static JoinTypeLeft = \"LEFT\";\r\n}\r\n","import { AdInsConstant } from \"./AdInstConstant\";\r\nexport class IntegrationObj {\r\n baseUrl: string;\r\n apiPath: string;\r\n requestObj: Object;\r\n leftColumnToJoin: string;\r\n rightColumnToJoin: string;\r\n joinType: string;\r\n \r\n constructor() {\r\n this.baseUrl = \"\";\r\n this.apiPath = \"\";\r\n this.requestObj = new Object();\r\n this.leftColumnToJoin = \"\";\r\n this.rightColumnToJoin = \"\";\r\n this.joinType = AdInsConstant.JoinTypeInner;\r\n }\r\n}","import { CriteriaObj } from \"./CriteriaObj.model\";\r\nimport { IntegrationObj } from \"./IntegrationObj.model\";\r\n \r\nexport class InputSearchObj {\r\n _url: string;\r\n enviromentUrl: string;\r\n title: string;\r\n apiQryPaging: string;\r\n arrCritObj: any;\r\n addCritInput: Array<CriteriaObj>;\r\n ddlEnvironments: Array<EnviObj>;\r\n listEnvironments: Array<EnvisObj>;\r\n whereValue: Array<WhereValueObj>;\r\n switchValue: Array<SwitchValueObj>;\r\n integrationObj: IntegrationObj;\r\n isJoinExAPI: boolean;\r\n \r\n constructor() {\r\n this._url = \"\";\r\n this.enviromentUrl = \"\";\r\n this.title = \"\";\r\n this.apiQryPaging = \"\";\r\n this.arrCritObj = null;\r\n this.addCritInput = new Array<CriteriaObj>();\r\n this.ddlEnvironments = new Array<EnviObj>();\r\n this.listEnvironments = new Array<EnvisObj>();\r\n this.whereValue = new Array<WhereValueObj>();\r\n this.switchValue = new Array<SwitchValueObj>();\r\n this.integrationObj = new IntegrationObj();\r\n this.isJoinExAPI = false;\r\n }\r\n}\r\n\r\nexport class EnviObj {\r\n name: string;\r\n environment: string;\r\n\r\n constructor() {\r\n this.name = \"\";\r\n this.environment = \"\";\r\n }\r\n}\r\n\r\nexport class WhereValueObj {\r\n property: string;\r\n value: any;\r\n\r\n constructor() {\r\n this.property = \"\";\r\n }\r\n}\r\n\r\nexport class SwitchValueObj {\r\n property: string;\r\n value: any;\r\n\r\n constructor() {\r\n this.property = \"\";\r\n }\r\n}\r\n\r\nexport class EnvisObj {\r\n environment: string;\r\n url: string;\r\n\r\n constructor() {\r\n this.environment = \"\";\r\n this.url = \"\";\r\n }\r\n}","export class CriteriaObj { \r\n propName: string;\r\n restriction: string;\r\n value: string;\r\n low: number;\r\n high: number;\r\n DataType: string;\r\n listValue: Array<any>;\r\n\r\n constructor() {\r\n this.low = 0;\r\n this.high = 0;\r\n this.DataType = 'Text';\r\n }\r\n\r\n}","import { AdInsConstant } from \"./AdInstConstant\";\r\nimport { CriteriaObj } from \"./CriteriaObj.model\";\r\nimport { IntegrationObj } from \"./IntegrationObj.model\";\r\n \r\nexport class RequestCriteriaObj{\r\n includeCount:boolean;\r\n includeData:boolean;\r\n pageNo:number;\r\n rowPerPage:number;\r\n orderBy:any;\r\n criteria:CriteriaObj[];\r\n isLoading : boolean;\r\n queryString: any;\r\n rowVersion: any;\r\n integrationObj: IntegrationObj;\r\n joinType: string;\r\n\r\n constructor()\r\n {\r\n this.includeCount=true;\r\n this.includeData=true;\r\n this.isLoading = true;\r\n this.queryString = '';\r\n this.rowVersion = '';\r\n this.integrationObj = new IntegrationObj();\r\n this.joinType = AdInsConstant.JoinTypeInner;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n\r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n\r\n@Injectable()\r\nexport class ExcelService {\r\n\r\n constructor() { }\r\n\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n \r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n console.log('worksheet',worksheet);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n //const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n\r\n private saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION);\r\n }\r\n\r\n}","export class KeyValueReportObj {\r\n key: number;\r\n value: string;\r\n\r\n constructor() {\r\n this.key = 0;\r\n this.value = \"\";\r\n }\r\n}\r\n\r\nexport class ExportTypeConstant {\r\n public static EXP_TYPE_PDF = 0;\r\n public static EXP_TYPE_XLS = 1;\r\n public static EXP_TYPE_XLSX = 2;\r\n public static EXP_TYPE_DOC = 3;\r\n public static EXP_TYPE_DOCX = 4;\r\n}","import { Component, OnInit, Input, ViewChild, ElementRef, Inject, Renderer2, EventEmitter, Output } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { FormGroup, NgForm } from '@angular/forms';\r\nimport { formatDate } from '@angular/common';\r\nimport { InputSearchObj } from './model/InputSearchObj.Model';\r\nimport { CriteriaObj } from './model/CriteriaObj.model';\r\nimport { RequestCriteriaObj } from './model/RequestCriteriaObj.model';\r\nimport { AdInsConstant } from './model/AdInstConstant';\r\nimport { DOCUMENT } from '@angular/platform-browser';\r\nimport { ExcelService } from './services/excel-service/excel-service';\r\nimport { trigger, transition, style, animate, state } from '@angular/animations';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { ExportTypeConstant, KeyValueReportObj } from './model/KeyValueReport.model';\r\nimport { CookieService } from 'ngx-cookie';\r\nimport * as CryptoJS from 'crypto-js';\r\n\r\n@Component({\r\n selector: 'lib-UCSearch',\r\n templateUrl: './ucsearch.component.html',\r\n styleUrls: ['./ucsearch.component.css'],\r\n providers: [ExcelService],\r\n animations: [\r\n trigger('changeDivSize', [\r\n state('initial', style({\r\n height: '*',\r\n opacity: '1',\r\n })),\r\n state('final', style({\r\n height: '0px',\r\n opacity: '0',\r\n overflow: 'hidden',\r\n })),\r\n transition('initial=>final', animate('300ms')),\r\n transition('final=>initial', animate('300ms'))\r\n ]),\r\n ]\r\n})\r\nexport class UCSearchComponent implements OnInit {\r\n // trus nad, bisa ga kalo misalkan gw mau bikin\r\n // kalo login di cabang IsSelectOne: true\r\n // kalo login di HO, IsSelectOne: false\r\n @ViewChild('enjiForm') set content(content: NgForm) {\r\n if (content) { // initially setter gets called with undefined\r\n this.searchForm = content;\r\n }\r\n }\r\n\r\n @ViewChild('formIdSearch') myForm: ElementRef;\r\n @Input() searchInput: InputSearchObj = new InputSearchObj();\r\n @Input() pageSize: number = 10;\r\n @Input() isReport: boolean = false;\r\n @Output() result: EventEmitter<any> = new EventEmitter();\r\n @Output() genRpt: EventEmitter<{ ExportType: number, ElRef: ElementRef }> = new EventEmitter<{ ExportType: number, ElRef: ElementRef }>();\r\n ExportTypeList: Array<KeyValueReportObj> = [\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_PDF,\r\n value: \"PDF\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_XLS,\r\n value: \"Excel 2003\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_XLSX,\r\n value: \"Excel 2007\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_DOC,\r\n value: \"Document\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_DOCX,\r\n value: \"Document XML\"\r\n },\r\n ];\r\n\r\n ExportType: number = 0;\r\n\r\n pageNow: any = 1;\r\n configuration: any;\r\n exportData: any;\r\n ExcelData: any;\r\n isDataLoaded: boolean = false;\r\n isHidden: boolean = false;\r\n BisDt: string;\r\n\r\n currentState = 'initial';\r\n\r\n form: FormGroup;\r\n countForm = 0;\r\n formattedAmount = '';\r\n amount = 0;\r\n apiUrl: string;\r\n arrCrit: any;\r\n searchForm: NgForm;\r\n\r\n constructor(private http: HttpClient, private excelService: ExcelService, private _renderer2: Renderer2,\r\n @Inject(DOCUMENT) private _document, public toastr: ToastrService, private cookieService: CookieService) {\r\n }\r\n\r\n changeState() {\r\n this.currentState = this.currentState === 'initial' ? 'final' : 'initial';\r\n this.isHidden = this.isHidden === false ? true : false;\r\n }\r\n\r\n ngOnInit() {\r\n console.log(\"ucsearch\");\r\n this.apiUrl = this.searchInput.enviromentUrl + this.searchInput.apiQryPaging;\r\n this.arrCrit = this.searchInput.arrCritObj;\r\n let js = this._renderer2.createElement('script');\r\n js.text = `\r\n $(document).ready(function(){\r\n $(\"#flip\").click(function(){\r\n $(\"#panel\").slideToggle(\"slow\");\r\n });\r\n });\r\n `;\r\n this._renderer2.appendChild(this._document.body, js);\r\n\r\n let value = this.cookieService.get('BusinessDateRaw');\r\n this.BisDt = this.DecryptString(value, \"AdInsFOU12345678\");\r\n this.initiateForm();\r\n }\r\n\r\n initiateForm() {\r\n this.getJSON(this.searchInput._url).subscribe(data => {\r\n this.configuration = data;\r\n this.exportData = data.exportExcel;\r\n if (data.exportTypeList != undefined && data.exportTypeList.length != 0) {\r\n this.ExportTypeList = data.exportTypeList;\r\n this.ExportType = this.ExportTypeList[0].key;\r\n }\r\n\r\n this.countForm = data.component.length;\r\n this.isDataLoaded = true;\r\n\r\n if (this.searchInput.title != undefined && this.searchInput.title != \"\") {\r\n this.configuration.title = this.searchInput.title;\r\n }\r\n\r\n for (var i = 0; i < this.countForm; i++) {\r\n //ini kalau datanya di load dari URL\r\n if (data.component[i].isFromURL == true) {\r\n var request = new RequestCriteriaObj();\r\n var arrayCrit = new Array();\r\n var criteriaObject = new CriteriaObj();\r\n criteriaObject.DataType = \"text\";\r\n criteriaObject.propName = data.component[i].criteriaPropName;\r\n criteriaObject.value = data.component[i].criteriaPropValue;\r\n criteriaObject.restriction = \"eq\";\r\n arrayCrit.push(criteriaObject);\r\n request.criteria = arrayCrit;\r\n request[data.component[i].criteriaPropName] = data.component[i].criteriaPropValue;\r\n\r\n // Pengecekan penggunaan url atau path\r\n if (data.component[i].path != undefined && data.component[i].path != \"\") {\r\n if (this.searchInput.ddlEnvironments != undefined && this.searchInput.ddlEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.ddlEnvironments.length; y++) {\r\n if (data.component[i].name == this.searchInput.ddlEnvironments[y].name) {\r\n data.component[i].fullpath = this.searchInput.ddlEnvironments[y].environment + data.component[i].path;\r\n break;\r\n }\r\n }\r\n } else if (this.searchInput.listEnvironments != undefined && this.searchInput.listEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.listEnvironments.length; y++) {\r\n if (data.component[i].environment == this.searchInput.listEnvironments[y].environment) {\r\n data.component[i].fullpath = this.searchInput.listEnvironments[y].url + data.component[i].path;\r\n break;\r\n }\r\n }\r\n } else {\r\n data.component[i].fullpath = data.component[i].url;\r\n }\r\n\r\n } else {\r\n data.component[i].fullpath = data.component[i].url;\r\n }\r\n //lempar objectnya sekalian sama urlnya, nnti di bind di dalem karena masalah di asyncnya\r\n //biar tiap function ada state2nya sendiri\r\n this.resolveObject(data.component[i], data.component[i].fullpath, request);\r\n }\r\n\r\n if (data.component[i].type == \"numeric\") {\r\n data.component[i].value = parseFloat(data.component[i].value).toLocaleString('en');\r\n }\r\n\r\n //pengecekan tanggal\r\n if (data.component[i].type == \"datepicker\") {\r\n if (data.component[i].value.includes(\"BD\")) {\r\n let businessDate = new Date();\r\n if (this.BisDt != null) {\r\n businessDate = new Date(this.BisDt);\r\n }\r\n var operator = data.component[i].value.charAt(2);\r\n var dateShow = new Date();\r\n if (operator == \"-\") {\r\n var tempMinus = data.component[i].value.split(\"-\", 2);\r\n var numDay = parseInt(tempMinus[1]);\r\n dateShow.setDate(businessDate.getDate() - numDay);\r\n }\r\n else if (operator == \"+\") {\r\n var tempMinus = data.component[i].value.split(\"+\", 2);\r\n var numDay = parseInt(tempMinus[1]);\r\n dateShow.setDate(businessDate.getDate() + numDay);\r\n } else {\r\n dateShow = businessDate;\r\n }\r\n var dateText = formatDate(dateShow, 'yyyy-MM-dd', 'en-US')\r\n data.component[i].value = dateText;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public getJSON(url: string): Observable<any> {\r\n return this.http.get(url);\r\n }\r\n\r\n public postJSON(url: string, criteria: any = null): Observable<any> {\r\n return this.http.post(url, criteria);\r\n }\r\n\r\n searchClick() {\r\n let order = null;\r\n if (this.configuration.orderby != null) {\r\n order = {\r\n key: this.configuration.orderby.key,\r\n value: this.configuration.orderby.value\r\n }\r\n }\r\n this.pageNow = 1;\r\n this.search(this.apiUrl, this.pageNow, this.pageSize, order, this.arrCrit);\r\n }\r\n\r\n reset() {\r\n this.searchForm.resetForm();\r\n this.ExportType = this.ExportTypeList[0].key;\r\n this.initiateForm();\r\n }\r\n\r\n search(apiUrl: string, pageNo: number, rowPerPage: number, orderBy: any, addCrit: CriteriaObj[] = new Array()) {\r\n let request = new RequestCriteriaObj();\r\n let arrCrit = new Array();\r\n let IsQueryIn = false;\r\n let IsBreak = false;\r\n\r\n // Inject whereQuery for where criteria\r\n if (this.searchInput.whereValue != undefined && this.searchInput.whereValue.length != 0) {\r\n this.configuration.querystring.whereQuery = new Array<any>();\r\n for (let x = 0; x < this.searchInput.whereValue.length; x++) {\r\n this.configuration.querystring.whereQuery.push(this.searchInput.whereValue[x].value);\r\n }\r\n }\r\n request.pageNo = pageNo;\r\n request.rowPerPage = rowPerPage;\r\n request.orderBy = orderBy;\r\n request.queryString = this.configuration.querystring;\r\n\r\n for (let i = 0; i < this.countForm; i++) {\r\n let critObj = new CriteriaObj();\r\n let component = this.myForm.nativeElement[i];\r\n\r\n // // popup message if required\r\n // if (component.getAttribute('data-required') != null && component.getAttribute('data-required') == \"true\") {\r\n // let val = component.value.trim();\r\n // if (val == \"\") {\r\n // IsBreak = true;\r\n // let label = component.getAttribute('label');\r\n // this.toastr.warning(\"Please input \" + label);\r\n // break;\r\n // }\r\n // }\r\n\r\n critObj.DataType = component.getAttribute('data-type');\r\n //Ini khusus kalau dari Drop Down\r\n if (component.getAttribute('query-in') != null && component.getAttribute('query-in') == \"true\") {\r\n IsQueryIn = true;\r\n }\r\n else {\r\n IsQueryIn = false;\r\n }\r\n if (component.value != \"\") {\r\n if (component.nodeName == 'SELECT') {\r\n let ddl = component.options;\r\n let text = ddl[ddl.selectedIndex].value.trim();\r\n if (text == \"one\") {\r\n IsBreak = true;\r\n let label = component.getAttribute('label');\r\n this.toastr.warning(\"Please select \" + label);\r\n break;\r\n }\r\n if (text != \"all\" && text != \"one\") {\r\n //Kalau Dari Dropdown udah pasti pake Eq\r\n critObj.restriction = AdInsConstant.RestrictionEq;\r\n critObj.propName = component.name;\r\n critObj.value = text;\r\n arrCrit.push(critObj);\r\n } else if (text == \"all\" && IsQueryIn == true && component.options.length != 0) {\r\n let ddlList = new Array();\r\n for (let x = 0; x < component.options.length; x++) {\r\n if (x != 0) {\r\n ddlList.push(component.options[x].value);\r\n }\r\n }\r\n if (ddlList.length != 0) {\r\n critObj.restriction = AdInsConstant.RestrictionIn;\r\n critObj.propName = component.name;\r\n critObj.listValue = ddlList;\r\n arrCrit.push(critObj);\r\n }\r\n }\r\n }\r\n else {\r\n //Kalau ada Percent maka yang dipake nnti adalah Restrictions Like\r\n if (component.name != \"\") {\r\n critObj.propName = component.name;\r\n } else {\r\n critObj.propName = component.getAttribute('data-name');\r\n }\r\n critObj.value = component.value.trim();\r\n if (component.value.includes(\"%\")) {\r\n critObj.restriction = AdInsConstant.RestrictionLike;\r\n }\r\n //kalau componentnya Date, restrictionsnya lgsg ambil dari property JSONnya\r\n else if (component.getAttribute('data-restriction') != \"\" && component.getAttribute('data-restriction') != null) {\r\n critObj.restriction = component.getAttribute('data-restriction');\r\n if (component.getAttribute('data-type') == 'numeric') {\r\n critObj.value = parseFloat(component.value.replace(/,/g, '')).toString();\r\n }\r\n if (critObj.restriction.toUpperCase() == \"LIKE\") {\r\n critObj.value = \"%\" + component.value.trim() + \"%\";\r\n critObj.restriction = AdInsConstant.RestrictionLike\r\n }\r\n }\r\n else {\r\n critObj.restriction = AdInsConstant.RestrictionEq\r\n }\r\n arrCrit.push(critObj);\r\n }\r\n }\r\n }\r\n\r\n if (IsBreak) {\r\n return;\r\n }\r\n\r\n if (addCrit != null && addCrit != undefined) {\r\n if (addCrit.length != 0) {\r\n for (var i = 0; i < addCrit.length; i++) {\r\n arrCrit.push(addCrit[i]);\r\n }\r\n } else if (this.searchInput.addCritInput != null || this.searchInput.addCritInput != undefined) {\r\n for (var i = 0; i < this.searchInput.addCritInput.length; i++) {\r\n arrCrit.push(this.searchInput.addCritInput[i]);\r\n }\r\n }\r\n }\r\n else if (this.searchInput.addCritInput != null || this.searchInput.addCritInput != undefined) {\r\n for (var i = 0; i < this.searchInput.addCritInput.length; i++) {\r\n arrCrit.push(this.searchInput.addCritInput[i]);\r\n }\r\n }\r\n\r\n request.criteria = arrCrit;\r\n\r\n if (!this.searchInput.isJoinExAPI) {\r\n request.integrationObj = null;\r\n } else {\r\n request.integrationObj = this.searchInput.integrationObj;\r\n }\r\n\r\n this.http.post(apiUrl, request).subscribe((response) => {\r\n let qryPaging = {\r\n response: response,\r\n pageNow: pageNo\r\n }\r\n console.log(qryPaging);\r\n this.result.emit(qryPaging);\r\n return response;\r\n });\r\n }\r\n\r\n GenerateReport() {\r\n this.genRpt.emit({ ExportType: this.ExportType, ElRef: this.myForm });\r\n }\r\n\r\n lessThanFour(): boolean {\r\n if (this.countForm > 3) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n resolveObject(obj: any, url: string, crit: RequestCriteriaObj = null) {\r\n const val = this.postJSON(url, crit);\r\n val.subscribe(tempData => {\r\n obj.itemsUrl = new Array();\r\n obj.itemsUrl = tempData.ReturnObject;\r\n });\r\n }\r\n\r\n transformAmount(element: any) {\r\n this.formattedAmount = parseFloat(element.target.value).toLocaleString('en');\r\n // to show the formatted amount in the textbox.\r\n element.target.value = this.formattedAmount;\r\n }\r\n\r\n transformToDecimal(element: any) {\r\n element.target.value = parseFloat(element.target.value.toString().replace(/,/g, ''));\r\n }\r\n\r\n exportAsXLSX(): void {\r\n var request = new RequestCriteriaObj();\r\n request.pageNo = 1;\r\n request.rowPerPage = 9999;\r\n request.orderBy = null;\r\n request.criteria = [];\r\n request.queryString = this.configuration.querystring;\r\n\r\n this.http.post(this.apiUrl, request).subscribe(\r\n response => {\r\n this.ExcelData = response[\"Data\"];\r\n this.excelService.exportAsExcelFile(this.ExcelData, 'sample');\r\n },\r\n (error) => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n onChangeEvent(optValue, afFilter) {\r\n var jsonComp = this.configuration.component;\r\n\r\n for (var i = 0; i < afFilter.affectedFilter.length; i++) {\r\n for (var j = 0; j < jsonComp.length; j++) {\r\n if (jsonComp[j].name == afFilter.affectedFilter[i]) {\r\n var request = new RequestCriteriaObj();\r\n var arrayCrit = new Array();\r\n\r\n if (optValue != \"all\" && optValue != \"one\") {\r\n var critObj = new CriteriaObj();\r\n critObj.DataType = afFilter.datatype;\r\n if (afFilter.filterPropName != undefined || afFilter.filterPropName != \"\") {\r\n request[afFilter.filterPropName] = optValue;\r\n critObj.propName = afFilter.filterPropName;\r\n } else {\r\n critObj.propName = afFilter.name;\r\n request[afFilter.name] = optValue;\r\n }\r\n critObj.value = optValue;\r\n critObj.restriction = AdInsConstant.RestrictionEq;\r\n arrayCrit.push(critObj);\r\n }\r\n request.criteria = arrayCrit;\r\n if (jsonComp[j].path != undefined && jsonComp[j].path != \"\") {\r\n if (this.searchInput.ddlEnvironments != undefined && this.searchInput.ddlEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.ddlEnvironments.length; y++) {\r\n if (jsonComp[j].name == this.searchInput.ddlEnvironments[y].name) {\r\n jsonComp[j].fullpath = this.searchInput.ddlEnvironments[y].environment + jsonComp[j].path;\r\n break;\r\n }\r\n }\r\n } else if (this.searchInput.listEnvironments != undefined && this.searchInput.listEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.listEnvironments.length; y++) {\r\n if (jsonComp.component[j].environment == this.searchInput.listEnvironments[y].environment) {\r\n jsonComp.component[j].fullpath = this.searchInput.listEnvironments[y].url + jsonComp.component[j].path;\r\n break;\r\n }\r\n }\r\n } else {\r\n jsonComp[j].fullpath = jsonComp[j].url;\r\n }\r\n\r\n } else {\r\n jsonComp[j].fullpath = jsonComp[j].url;\r\n }\r\n this.resolveObject(jsonComp[j], jsonComp[j].fullpath, request);\r\n }\r\n }\r\n }\r\n }\r\n\r\n switchCase(condList) {\r\n var condition = false;\r\n\r\n for (var i = 0; i < condList.conditions.length; i++) {\r\n var idx = this.searchInput.switchValue.findIndex(x => x.property == condList.conditions[i].property);\r\n if (condList.conditions[i].restriction == \"EQ\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value == condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value == username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"NEQ\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value != condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value != username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"GT\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value > condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value > username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"GTE\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value >= condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value >= username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"LT\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value < condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value < username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"LTE\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value <= condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value <= username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return condition;\r\n\r\n }\r\n\r\n private DecryptString(chipperText: string, chipperKey: string) {\r\n if (\r\n chipperKey == undefined || chipperKey.trim() == '' ||\r\n chipperText == undefined || chipperText.trim() == ''\r\n ) return chipperText;\r\n var chipperKeyArr = CryptoJS.enc.Utf8.parse(chipperKey);\r\n var iv = CryptoJS.lib.WordArray.create([0x00, 0x00, 0x00, 0x00]);\r\n var decrypted = CryptoJS.AES.decrypt(chipperText, chipperKeyArr, { iv: iv });\r\n var plainText = decrypted.toString(CryptoJS.enc.Utf8);\r\n return plainText;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { UCSearchComponent } from './ucsearch.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CurrencyMaskInputMode, NgxCurrencyModule } from 'ngx-currency';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { UcShowErrorsModule } from '@adins/uc-show-errors';\r\n\r\nexport const customCurrencyMaskConfig = { \r\n align: \"right\",\r\n allowNegative: false,\r\n allowZero: true,\r\n decimal: \".\",\r\n precision: 2,\r\n prefix: \"\",\r\n suffix: \"\",\r\n thousands: \",\",\r\n nullable: false,\r\n inputMode: CurrencyMaskInputMode.NATURAL };\r\n\r\n@NgModule({\r\n declarations: [UCSearchComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n UcShowErrorsModule,\r\n NgxCurrencyModule.forRoot(customCurrencyMaskConfig),\r\n TranslateModule.forChild()\r\n ],\r\n exports: [UCSearchComponent]\r\n})\r\nexport class UCSearchModule { }\r\n"]}
1
+ {"version":3,"sources":["ng://@adins/ucsearch/lib/ucsearch.service.ts","ng://@adins/ucsearch/lib/model/AdInstConstant.ts","ng://@adins/ucsearch/lib/model/IntegrationObj.model.ts","ng://@adins/ucsearch/lib/model/InputSearchObj.Model.ts","ng://@adins/ucsearch/lib/model/CriteriaObj.model.ts","ng://@adins/ucsearch/lib/model/RequestCriteriaObj.model.ts","ng://@adins/ucsearch/lib/services/excel-service/excel-service.ts","ng://@adins/ucsearch/lib/model/KeyValueReport.model.ts","ng://@adins/ucsearch/lib/ucsearch.component.ts","ng://@adins/ucsearch/lib/ucsearch.module.ts"],"names":["UCSearchService","Injectable","args","providedIn","AdInsConstant","RestrictionBetween","RestrictionLike","RestrictionEq","RestrictionNeq","RestrictionGt","RestrictionGte","RestrictionLt","RestrictionLte","RestrictionIn","RestrictionNotIn","RestrictionOr","RestrictionOrNeq","RestrictionIsNull","RestrictionIsNotNull","RestrictionGTE","RestrictionLTE","showData","JoinTypeInner","JoinTypeLeft","IntegrationObj","this","baseUrl","apiPath","requestObj","Object","leftColumnToJoin","rightColumnToJoin","joinType","InputSearchObj","_url","enviromentUrl","title","apiQryPaging","arrCritObj","addCritInput","Array","ddlEnvironments","listEnvironments","whereValue","switchValue","integrationObj","isJoinExAPI","CriteriaObj","low","high","DataType","RequestCriteriaObj","includeCount","includeData","isLoading","queryString","rowVersion","ExcelService","prototype","exportAsExcelFile","json","excelFileName","worksheet","XLSX.utils","json_to_sheet","console","log","workbook","Sheets","data","SheetNames","excelBuffer","XLSX.write","bookType","type","saveAsExcelFile","buffer","fileName","Blob","FileSaver.saveAs","Date","getTime","ExportTypeConstant","EXP_TYPE_PDF","EXP_TYPE_XLS","EXP_TYPE_XLSX","EXP_TYPE_DOC","EXP_TYPE_DOCX","UCSearchComponent","defineProperty","content","searchForm","changeState","currentState","isHidden","ngOnInit","apiUrl","searchInput","arrCrit","js","_renderer2","createElement","text","appendChild","_document","body","value","cookieService","get","BisDt","DecryptString","initiateForm","_this","getJSON","subscribe","configuration","exportData","exportExcel","exportTypeList","undefined","length","ExportTypeList","ExportType","key","countForm","component","isDataLoaded","i","isFromURL","request","arrayCrit","criteriaObject","propName","criteriaPropName","criteriaPropValue","restriction","push","criteria","path","y","name","fullpath","environment","url","resolveObject","parseFloat","toLocaleString","includes","businessDate","operator","charAt","dateShow","tempMinus","split","numDay","parseInt","setDate","getDate","dateText","formatDate","http","postJSON","post","searchClick","order","orderby","pageNow","search","pageSize","reset","resetForm","pageNo","rowPerPage","orderBy","addCrit","IsQueryIn","IsBreak","querystring","whereQuery","x","i_1","critObj","myForm","nativeElement","getAttribute","nodeName","ddl","options","selectedIndex","trim","label","toastr","warning","ddlList","listValue","replace","toString","toUpperCase","response","qryPaging","result","emit","GenerateReport","genRpt","ElRef","lessThanFour","obj","crit","tempData","itemsUrl","ReturnObject","transformAmount","element","formattedAmount","target","transformToDecimal","exportAsXLSX","ExcelData","excelService","error","onChangeEvent","optValue","afFilter","jsonComp","affectedFilter","j","datatype","filterPropName","switchCase","condList","condition","conditions","idx","findIndex","property","isUser","username","localStorage","getItem","chipperText","chipperKey","chipperKeyArr","CryptoJS.enc","Utf8","parse","iv","CryptoJS.lib","WordArray","create","CryptoJS.AES","decrypt","Component","selector","template","providers","animations","trigger","state","style","height","opacity","overflow","transition","animate","HttpClient","Renderer2","Inject","DOCUMENT","ToastrService","CookieService","ViewChild","Input","Output","isReport","EventEmitter","amount","customCurrencyMaskConfig","align","allowNegative","allowZero","decimal","precision","prefix","suffix","thousands","nullable","inputMode","CurrencyMaskInputMode","NATURAL","UCSearchModule","NgModule","declarations","imports","CommonModule","FormsModule","UcShowErrorsModule","NgxCurrencyModule","forRoot","TranslateModule","forChild","exports"],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UCSearchService {\r\n\r\n constructor() { }\r\n}\r\n","import { formatDate } from \"@angular/common\";\r\n\r\nexport class AdInsConstant {\r\n public static RestrictionBetween = \"Between\"\r\n public static RestrictionLike = \"Like\";\r\n public static RestrictionEq = \"Eq\";\r\n public static RestrictionNeq = \"NEQ\";\r\n public static RestrictionGt = \"GT\";\r\n public static RestrictionGte = \"GTE\";\r\n public static RestrictionLt = \"LT\";\r\n public static RestrictionLte = \"LTE\";\r\n public static RestrictionIn = \"IN\";\r\n public static RestrictionNotIn = \"NotIn\";\r\n public static RestrictionOr = \"Or\"; //pastikan ada 1 criteria sebelumnya\r\n public static RestrictionOrNeq = \"OrNeq\"; //pastikan ada 1 criteria sebelumnya\r\n public static RestrictionIsNull = \"isnull\";\r\n public static RestrictionIsNotNull = \"isnotnull\";\r\n public static RestrictionGTE = \"GTE\";\r\n public static RestrictionLTE = \"LTE\";\r\n public static showData = \"10,50,100\";\r\n public static JoinTypeInner = \"INNER\";\r\n public static JoinTypeLeft = \"LEFT\";\r\n}\r\n","import { AdInsConstant } from \"./AdInstConstant\";\r\nexport class IntegrationObj {\r\n baseUrl: string;\r\n apiPath: string;\r\n requestObj: Object;\r\n leftColumnToJoin: string;\r\n rightColumnToJoin: string;\r\n joinType: string;\r\n \r\n constructor() {\r\n this.baseUrl = \"\";\r\n this.apiPath = \"\";\r\n this.requestObj = new Object();\r\n this.leftColumnToJoin = \"\";\r\n this.rightColumnToJoin = \"\";\r\n this.joinType = AdInsConstant.JoinTypeInner;\r\n }\r\n}","import { CriteriaObj } from \"./CriteriaObj.model\";\r\nimport { IntegrationObj } from \"./IntegrationObj.model\";\r\n \r\nexport class InputSearchObj {\r\n _url: string;\r\n enviromentUrl: string;\r\n title: string;\r\n apiQryPaging: string;\r\n arrCritObj: any;\r\n addCritInput: Array<CriteriaObj>;\r\n ddlEnvironments: Array<EnviObj>;\r\n listEnvironments: Array<EnvisObj>;\r\n whereValue: Array<WhereValueObj>;\r\n switchValue: Array<SwitchValueObj>;\r\n integrationObj: IntegrationObj;\r\n isJoinExAPI: boolean;\r\n \r\n constructor() {\r\n this._url = \"\";\r\n this.enviromentUrl = \"\";\r\n this.title = \"\";\r\n this.apiQryPaging = \"\";\r\n this.arrCritObj = null;\r\n this.addCritInput = new Array<CriteriaObj>();\r\n this.ddlEnvironments = new Array<EnviObj>();\r\n this.listEnvironments = new Array<EnvisObj>();\r\n this.whereValue = new Array<WhereValueObj>();\r\n this.switchValue = new Array<SwitchValueObj>();\r\n this.integrationObj = new IntegrationObj();\r\n this.isJoinExAPI = false;\r\n }\r\n}\r\n\r\nexport class EnviObj {\r\n name: string;\r\n environment: string;\r\n\r\n constructor() {\r\n this.name = \"\";\r\n this.environment = \"\";\r\n }\r\n}\r\n\r\nexport class WhereValueObj {\r\n property: string;\r\n value: any;\r\n\r\n constructor() {\r\n this.property = \"\";\r\n }\r\n}\r\n\r\nexport class SwitchValueObj {\r\n property: string;\r\n value: any;\r\n\r\n constructor() {\r\n this.property = \"\";\r\n }\r\n}\r\n\r\nexport class EnvisObj {\r\n environment: string;\r\n url: string;\r\n\r\n constructor() {\r\n this.environment = \"\";\r\n this.url = \"\";\r\n }\r\n}","export class CriteriaObj { \r\n propName: string;\r\n restriction: string;\r\n value: string;\r\n low: number;\r\n high: number;\r\n DataType: string;\r\n listValue: Array<any>;\r\n\r\n constructor() {\r\n this.low = 0;\r\n this.high = 0;\r\n this.DataType = 'Text';\r\n }\r\n\r\n}","import { AdInsConstant } from \"./AdInstConstant\";\r\nimport { CriteriaObj } from \"./CriteriaObj.model\";\r\nimport { IntegrationObj } from \"./IntegrationObj.model\";\r\n \r\nexport class RequestCriteriaObj{\r\n includeCount:boolean;\r\n includeData:boolean;\r\n pageNo:number;\r\n rowPerPage:number;\r\n orderBy:any;\r\n criteria:CriteriaObj[];\r\n isLoading : boolean;\r\n queryString: any;\r\n rowVersion: any;\r\n integrationObj: IntegrationObj;\r\n joinType: string;\r\n\r\n constructor()\r\n {\r\n this.includeCount=true;\r\n this.includeData=true;\r\n this.isLoading = true;\r\n this.queryString = '';\r\n this.rowVersion = '';\r\n this.integrationObj = new IntegrationObj();\r\n this.joinType = AdInsConstant.JoinTypeInner;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n\r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n\r\n@Injectable()\r\nexport class ExcelService {\r\n\r\n constructor() { }\r\n\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n \r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n console.log('worksheet',worksheet);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n //const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n\r\n private saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION);\r\n }\r\n\r\n}","export class KeyValueReportObj {\r\n key: number;\r\n value: string;\r\n\r\n constructor() {\r\n this.key = 0;\r\n this.value = \"\";\r\n }\r\n}\r\n\r\nexport class ExportTypeConstant {\r\n public static EXP_TYPE_PDF = 0;\r\n public static EXP_TYPE_XLS = 1;\r\n public static EXP_TYPE_XLSX = 2;\r\n public static EXP_TYPE_DOC = 3;\r\n public static EXP_TYPE_DOCX = 4;\r\n}","import { Component, OnInit, Input, ViewChild, ElementRef, Inject, Renderer2, EventEmitter, Output } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { FormGroup, NgForm } from '@angular/forms';\r\nimport { formatDate } from '@angular/common';\r\nimport { InputSearchObj } from './model/InputSearchObj.Model';\r\nimport { CriteriaObj } from './model/CriteriaObj.model';\r\nimport { RequestCriteriaObj } from './model/RequestCriteriaObj.model';\r\nimport { AdInsConstant } from './model/AdInstConstant';\r\nimport { DOCUMENT } from '@angular/platform-browser';\r\nimport { ExcelService } from './services/excel-service/excel-service';\r\nimport { trigger, transition, style, animate, state } from '@angular/animations';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { ExportTypeConstant, KeyValueReportObj } from './model/KeyValueReport.model';\r\nimport { CookieService } from 'ngx-cookie';\r\nimport * as CryptoJS from 'crypto-js';\r\n\r\n@Component({\r\n selector: 'lib-UCSearch',\r\n templateUrl: './ucsearch.component.html',\r\n styleUrls: ['./ucsearch.component.css'],\r\n providers: [ExcelService],\r\n animations: [\r\n trigger('changeDivSize', [\r\n state('initial', style({\r\n height: '*',\r\n opacity: '1',\r\n })),\r\n state('final', style({\r\n height: '0px',\r\n opacity: '0',\r\n overflow: 'hidden',\r\n })),\r\n transition('initial=>final', animate('300ms')),\r\n transition('final=>initial', animate('300ms'))\r\n ]),\r\n ]\r\n})\r\nexport class UCSearchComponent implements OnInit {\r\n // trus nad, bisa ga kalo misalkan gw mau bikin\r\n // kalo login di cabang IsSelectOne: true\r\n // kalo login di HO, IsSelectOne: false\r\n @ViewChild('enjiForm') set content(content: NgForm) {\r\n if (content) { // initially setter gets called with undefined\r\n this.searchForm = content;\r\n }\r\n }\r\n\r\n @ViewChild('formIdSearch') myForm: ElementRef;\r\n @Input() searchInput: InputSearchObj = new InputSearchObj();\r\n @Input() pageSize: number = 10;\r\n @Input() isReport: boolean = false;\r\n @Output() result: EventEmitter<any> = new EventEmitter();\r\n @Output() genRpt: EventEmitter<{ ExportType: number, ElRef: ElementRef }> = new EventEmitter<{ ExportType: number, ElRef: ElementRef }>();\r\n ExportTypeList: Array<KeyValueReportObj> = [\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_PDF,\r\n value: \"PDF\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_XLS,\r\n value: \"Excel 2003\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_XLSX,\r\n value: \"Excel 2007\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_DOC,\r\n value: \"Document\"\r\n },\r\n {\r\n key: ExportTypeConstant.EXP_TYPE_DOCX,\r\n value: \"Document XML\"\r\n },\r\n ];\r\n\r\n ExportType: number = 0;\r\n\r\n pageNow: any = 1;\r\n configuration: any;\r\n exportData: any;\r\n ExcelData: any;\r\n isDataLoaded: boolean = false;\r\n isHidden: boolean = false;\r\n BisDt: string;\r\n\r\n currentState = 'initial';\r\n\r\n form: FormGroup;\r\n countForm = 0;\r\n formattedAmount = '';\r\n amount = 0;\r\n apiUrl: string;\r\n arrCrit: any;\r\n searchForm: NgForm;\r\n\r\n constructor(private http: HttpClient, private excelService: ExcelService, private _renderer2: Renderer2,\r\n @Inject(DOCUMENT) private _document, public toastr: ToastrService, private cookieService: CookieService) {\r\n }\r\n\r\n changeState() {\r\n this.currentState = this.currentState === 'initial' ? 'final' : 'initial';\r\n this.isHidden = this.isHidden === false ? true : false;\r\n }\r\n\r\n ngOnInit() {\r\n console.log(\"ucsearch\");\r\n this.apiUrl = this.searchInput.enviromentUrl + this.searchInput.apiQryPaging;\r\n this.arrCrit = this.searchInput.arrCritObj;\r\n let js = this._renderer2.createElement('script');\r\n js.text = `\r\n $(document).ready(function(){\r\n $(\"#flip\").click(function(){\r\n $(\"#panel\").slideToggle(\"slow\");\r\n });\r\n });\r\n `;\r\n this._renderer2.appendChild(this._document.body, js);\r\n\r\n let value = this.cookieService.get('BusinessDateRaw');\r\n this.BisDt = this.DecryptString(value, \"AdInsFOU12345678\");\r\n this.initiateForm();\r\n }\r\n\r\n initiateForm() {\r\n this.getJSON(this.searchInput._url).subscribe(data => {\r\n this.configuration = data;\r\n this.exportData = data.exportExcel;\r\n if (data.exportTypeList != undefined && data.exportTypeList.length != 0) {\r\n this.ExportTypeList = data.exportTypeList;\r\n this.ExportType = this.ExportTypeList[0].key;\r\n }\r\n\r\n this.countForm = data.component.length;\r\n this.isDataLoaded = true;\r\n\r\n if (this.searchInput.title != undefined && this.searchInput.title != \"\") {\r\n this.configuration.title = this.searchInput.title;\r\n }\r\n\r\n for (var i = 0; i < this.countForm; i++) {\r\n //ini kalau datanya di load dari URL\r\n if (data.component[i].isFromURL == true) {\r\n var request = new RequestCriteriaObj();\r\n var arrayCrit = new Array();\r\n var criteriaObject = new CriteriaObj();\r\n criteriaObject.DataType = \"text\";\r\n criteriaObject.propName = data.component[i].criteriaPropName;\r\n criteriaObject.value = data.component[i].criteriaPropValue;\r\n criteriaObject.restriction = \"eq\";\r\n arrayCrit.push(criteriaObject);\r\n request.criteria = arrayCrit;\r\n request[data.component[i].criteriaPropName] = data.component[i].criteriaPropValue;\r\n\r\n // Pengecekan penggunaan url atau path\r\n if (data.component[i].path != undefined && data.component[i].path != \"\") {\r\n if (this.searchInput.ddlEnvironments != undefined && this.searchInput.ddlEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.ddlEnvironments.length; y++) {\r\n if (data.component[i].name == this.searchInput.ddlEnvironments[y].name) {\r\n data.component[i].fullpath = this.searchInput.ddlEnvironments[y].environment + data.component[i].path;\r\n break;\r\n }\r\n }\r\n } else if (this.searchInput.listEnvironments != undefined && this.searchInput.listEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.listEnvironments.length; y++) {\r\n if (data.component[i].environment == this.searchInput.listEnvironments[y].environment) {\r\n data.component[i].fullpath = this.searchInput.listEnvironments[y].url + data.component[i].path;\r\n break;\r\n }\r\n }\r\n } else {\r\n data.component[i].fullpath = data.component[i].url;\r\n }\r\n\r\n } else {\r\n data.component[i].fullpath = data.component[i].url;\r\n }\r\n //lempar objectnya sekalian sama urlnya, nnti di bind di dalem karena masalah di asyncnya\r\n //biar tiap function ada state2nya sendiri\r\n this.resolveObject(data.component[i], data.component[i].fullpath, request);\r\n }\r\n\r\n if (data.component[i].type == \"numeric\") {\r\n data.component[i].value = parseFloat(data.component[i].value).toLocaleString('en');\r\n }\r\n\r\n //pengecekan tanggal\r\n if (data.component[i].type == \"datepicker\") {\r\n if (data.component[i].value.includes(\"BD\")) {\r\n let businessDate = new Date();\r\n if (this.BisDt != null) {\r\n businessDate = new Date(this.BisDt);\r\n }\r\n var operator = data.component[i].value.charAt(2);\r\n var dateShow = new Date();\r\n if (operator == \"-\") {\r\n var tempMinus = data.component[i].value.split(\"-\", 2);\r\n var numDay = parseInt(tempMinus[1]);\r\n dateShow.setDate(businessDate.getDate() - numDay);\r\n }\r\n else if (operator == \"+\") {\r\n var tempMinus = data.component[i].value.split(\"+\", 2);\r\n var numDay = parseInt(tempMinus[1]);\r\n dateShow.setDate(businessDate.getDate() + numDay);\r\n } else {\r\n dateShow = businessDate;\r\n }\r\n var dateText = formatDate(dateShow, 'mm-dd-yyyy', 'en-US')\r\n data.component[i].value = dateText;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public getJSON(url: string): Observable<any> {\r\n return this.http.get(url);\r\n }\r\n\r\n public postJSON(url: string, criteria: any = null): Observable<any> {\r\n return this.http.post(url, criteria);\r\n }\r\n\r\n searchClick() {\r\n let order = null;\r\n if (this.configuration.orderby != null) {\r\n order = {\r\n key: this.configuration.orderby.key,\r\n value: this.configuration.orderby.value\r\n }\r\n }\r\n this.pageNow = 1;\r\n this.search(this.apiUrl, this.pageNow, this.pageSize, order, this.arrCrit);\r\n }\r\n\r\n reset() {\r\n this.searchForm.resetForm();\r\n this.ExportType = this.ExportTypeList[0].key;\r\n this.initiateForm();\r\n }\r\n\r\n search(apiUrl: string, pageNo: number, rowPerPage: number, orderBy: any, addCrit: CriteriaObj[] = new Array()) {\r\n let request = new RequestCriteriaObj();\r\n let arrCrit = new Array();\r\n let IsQueryIn = false;\r\n let IsBreak = false;\r\n\r\n // Inject whereQuery for where criteria\r\n if (this.searchInput.whereValue != undefined && this.searchInput.whereValue.length != 0) {\r\n this.configuration.querystring.whereQuery = new Array<any>();\r\n for (let x = 0; x < this.searchInput.whereValue.length; x++) {\r\n this.configuration.querystring.whereQuery.push(this.searchInput.whereValue[x].value);\r\n }\r\n }\r\n request.pageNo = pageNo;\r\n request.rowPerPage = rowPerPage;\r\n request.orderBy = orderBy;\r\n request.queryString = this.configuration.querystring;\r\n\r\n for (let i = 0; i < this.countForm; i++) {\r\n let critObj = new CriteriaObj();\r\n let component = this.myForm.nativeElement[i];\r\n\r\n // // popup message if required\r\n // if (component.getAttribute('data-required') != null && component.getAttribute('data-required') == \"true\") {\r\n // let val = component.value.trim();\r\n // if (val == \"\") {\r\n // IsBreak = true;\r\n // let label = component.getAttribute('label');\r\n // this.toastr.warning(\"Please input \" + label);\r\n // break;\r\n // }\r\n // }\r\n\r\n critObj.DataType = component.getAttribute('data-type');\r\n //Ini khusus kalau dari Drop Down\r\n if (component.getAttribute('query-in') != null && component.getAttribute('query-in') == \"true\") {\r\n IsQueryIn = true;\r\n }\r\n else {\r\n IsQueryIn = false;\r\n }\r\n if (component.value != \"\") {\r\n if (component.nodeName == 'SELECT') {\r\n let ddl = component.options;\r\n let text = ddl[ddl.selectedIndex].value.trim();\r\n if (text == \"one\") {\r\n IsBreak = true;\r\n let label = component.getAttribute('label');\r\n this.toastr.warning(\"Please select \" + label);\r\n break;\r\n }\r\n if (text != \"all\" && text != \"one\") {\r\n //Kalau Dari Dropdown udah pasti pake Eq\r\n critObj.restriction = AdInsConstant.RestrictionEq;\r\n critObj.propName = component.name;\r\n critObj.value = text;\r\n arrCrit.push(critObj);\r\n } else if (text == \"all\" && IsQueryIn == true && component.options.length != 0) {\r\n let ddlList = new Array();\r\n for (let x = 0; x < component.options.length; x++) {\r\n if (x != 0) {\r\n ddlList.push(component.options[x].value);\r\n }\r\n }\r\n if (ddlList.length != 0) {\r\n critObj.restriction = AdInsConstant.RestrictionIn;\r\n critObj.propName = component.name;\r\n critObj.listValue = ddlList;\r\n arrCrit.push(critObj);\r\n }\r\n }\r\n }\r\n else {\r\n //Kalau ada Percent maka yang dipake nnti adalah Restrictions Like\r\n if (component.name != \"\") {\r\n critObj.propName = component.name;\r\n } else {\r\n critObj.propName = component.getAttribute('data-name');\r\n }\r\n critObj.value = component.value.trim();\r\n if (component.value.includes(\"%\")) {\r\n critObj.restriction = AdInsConstant.RestrictionLike;\r\n }\r\n //kalau componentnya Date, restrictionsnya lgsg ambil dari property JSONnya\r\n else if (component.getAttribute('data-restriction') != \"\" && component.getAttribute('data-restriction') != null) {\r\n critObj.restriction = component.getAttribute('data-restriction');\r\n if (component.getAttribute('data-type') == 'numeric') {\r\n critObj.value = parseFloat(component.value.replace(/,/g, '')).toString();\r\n }\r\n if (critObj.restriction.toUpperCase() == \"LIKE\") {\r\n critObj.value = \"%\" + component.value.trim() + \"%\";\r\n critObj.restriction = AdInsConstant.RestrictionLike\r\n }\r\n }\r\n else {\r\n critObj.restriction = AdInsConstant.RestrictionEq\r\n }\r\n arrCrit.push(critObj);\r\n }\r\n }\r\n }\r\n\r\n if (IsBreak) {\r\n return;\r\n }\r\n\r\n if (addCrit != null && addCrit != undefined) {\r\n if (addCrit.length != 0) {\r\n for (var i = 0; i < addCrit.length; i++) {\r\n arrCrit.push(addCrit[i]);\r\n }\r\n } else if (this.searchInput.addCritInput != null || this.searchInput.addCritInput != undefined) {\r\n for (var i = 0; i < this.searchInput.addCritInput.length; i++) {\r\n arrCrit.push(this.searchInput.addCritInput[i]);\r\n }\r\n }\r\n }\r\n else if (this.searchInput.addCritInput != null || this.searchInput.addCritInput != undefined) {\r\n for (var i = 0; i < this.searchInput.addCritInput.length; i++) {\r\n arrCrit.push(this.searchInput.addCritInput[i]);\r\n }\r\n }\r\n\r\n request.criteria = arrCrit;\r\n\r\n if (!this.searchInput.isJoinExAPI) {\r\n request.integrationObj = null;\r\n } else {\r\n request.integrationObj = this.searchInput.integrationObj;\r\n }\r\n\r\n this.http.post(apiUrl, request).subscribe((response) => {\r\n let qryPaging = {\r\n response: response,\r\n pageNow: pageNo\r\n }\r\n console.log(qryPaging);\r\n this.result.emit(qryPaging);\r\n return response;\r\n });\r\n }\r\n\r\n GenerateReport() {\r\n this.genRpt.emit({ ExportType: this.ExportType, ElRef: this.myForm });\r\n }\r\n\r\n lessThanFour(): boolean {\r\n if (this.countForm > 3) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n resolveObject(obj: any, url: string, crit: RequestCriteriaObj = null) {\r\n const val = this.postJSON(url, crit);\r\n val.subscribe(tempData => {\r\n obj.itemsUrl = new Array();\r\n obj.itemsUrl = tempData.ReturnObject;\r\n });\r\n }\r\n\r\n transformAmount(element: any) {\r\n this.formattedAmount = parseFloat(element.target.value).toLocaleString('en');\r\n // to show the formatted amount in the textbox.\r\n element.target.value = this.formattedAmount;\r\n }\r\n\r\n transformToDecimal(element: any) {\r\n element.target.value = parseFloat(element.target.value.toString().replace(/,/g, ''));\r\n }\r\n\r\n exportAsXLSX(): void {\r\n var request = new RequestCriteriaObj();\r\n request.pageNo = 1;\r\n request.rowPerPage = 9999;\r\n request.orderBy = null;\r\n request.criteria = [];\r\n request.queryString = this.configuration.querystring;\r\n\r\n this.http.post(this.apiUrl, request).subscribe(\r\n response => {\r\n this.ExcelData = response[\"Data\"];\r\n this.excelService.exportAsExcelFile(this.ExcelData, 'sample');\r\n },\r\n (error) => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n onChangeEvent(optValue, afFilter) {\r\n var jsonComp = this.configuration.component;\r\n\r\n for (var i = 0; i < afFilter.affectedFilter.length; i++) {\r\n for (var j = 0; j < jsonComp.length; j++) {\r\n if (jsonComp[j].name == afFilter.affectedFilter[i]) {\r\n var request = new RequestCriteriaObj();\r\n var arrayCrit = new Array();\r\n\r\n if (optValue != \"all\" && optValue != \"one\") {\r\n var critObj = new CriteriaObj();\r\n critObj.DataType = afFilter.datatype;\r\n if (afFilter.filterPropName != undefined || afFilter.filterPropName != \"\") {\r\n request[afFilter.filterPropName] = optValue;\r\n critObj.propName = afFilter.filterPropName;\r\n } else {\r\n critObj.propName = afFilter.name;\r\n request[afFilter.name] = optValue;\r\n }\r\n critObj.value = optValue;\r\n critObj.restriction = AdInsConstant.RestrictionEq;\r\n arrayCrit.push(critObj);\r\n }\r\n request.criteria = arrayCrit;\r\n if (jsonComp[j].path != undefined && jsonComp[j].path != \"\") {\r\n if (this.searchInput.ddlEnvironments != undefined && this.searchInput.ddlEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.ddlEnvironments.length; y++) {\r\n if (jsonComp[j].name == this.searchInput.ddlEnvironments[y].name) {\r\n jsonComp[j].fullpath = this.searchInput.ddlEnvironments[y].environment + jsonComp[j].path;\r\n break;\r\n }\r\n }\r\n } else if (this.searchInput.listEnvironments != undefined && this.searchInput.listEnvironments.length != 0) {\r\n for (let y = 0; y < this.searchInput.listEnvironments.length; y++) {\r\n if (jsonComp.component[j].environment == this.searchInput.listEnvironments[y].environment) {\r\n jsonComp.component[j].fullpath = this.searchInput.listEnvironments[y].url + jsonComp.component[j].path;\r\n break;\r\n }\r\n }\r\n } else {\r\n jsonComp[j].fullpath = jsonComp[j].url;\r\n }\r\n\r\n } else {\r\n jsonComp[j].fullpath = jsonComp[j].url;\r\n }\r\n this.resolveObject(jsonComp[j], jsonComp[j].fullpath, request);\r\n }\r\n }\r\n }\r\n }\r\n\r\n switchCase(condList) {\r\n var condition = false;\r\n\r\n for (var i = 0; i < condList.conditions.length; i++) {\r\n var idx = this.searchInput.switchValue.findIndex(x => x.property == condList.conditions[i].property);\r\n if (condList.conditions[i].restriction == \"EQ\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value == condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value == username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"NEQ\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value != condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value != username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"GT\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value > condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value > username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"GTE\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value >= condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value >= username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"LT\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value < condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value < username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n } else if (condList.conditions[i].restriction == \"LTE\") {\r\n if (condList.conditions[i].isUser != true) {\r\n if (this.searchInput.switchValue[idx].value <= condList.conditions[i].value) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n } else {\r\n var username = localStorage.getItem(\"Username\");\r\n if (this.searchInput.switchValue[idx].value <= username) {\r\n condition = true;\r\n } else {\r\n condition = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return condition;\r\n\r\n }\r\n\r\n private DecryptString(chipperText: string, chipperKey: string) {\r\n if (\r\n chipperKey == undefined || chipperKey.trim() == '' ||\r\n chipperText == undefined || chipperText.trim() == ''\r\n ) return chipperText;\r\n var chipperKeyArr = CryptoJS.enc.Utf8.parse(chipperKey);\r\n var iv = CryptoJS.lib.WordArray.create([0x00, 0x00, 0x00, 0x00]);\r\n var decrypted = CryptoJS.AES.decrypt(chipperText, chipperKeyArr, { iv: iv });\r\n var plainText = decrypted.toString(CryptoJS.enc.Utf8);\r\n return plainText;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { UCSearchComponent } from './ucsearch.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CurrencyMaskInputMode, NgxCurrencyModule } from 'ngx-currency';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { UcShowErrorsModule } from '@adins/uc-show-errors';\r\n\r\nexport const customCurrencyMaskConfig = { \r\n align: \"right\",\r\n allowNegative: false,\r\n allowZero: true,\r\n decimal: \".\",\r\n precision: 2,\r\n prefix: \"\",\r\n suffix: \"\",\r\n thousands: \",\",\r\n nullable: false,\r\n inputMode: CurrencyMaskInputMode.NATURAL };\r\n\r\n@NgModule({\r\n declarations: [UCSearchComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n UcShowErrorsModule,\r\n NgxCurrencyModule.forRoot(customCurrencyMaskConfig),\r\n TranslateModule.forChild()\r\n ],\r\n exports: [UCSearchComponent]\r\n})\r\nexport class UCSearchModule { }\r\n"]}
@@ -208,7 +208,7 @@ export class UCSearchComponent {
208
208
  dateShow = businessDate;
209
209
  }
210
210
  /** @type {?} */
211
- var dateText = formatDate(dateShow, 'yyyy-MM-dd', 'en-US');
211
+ var dateText = formatDate(dateShow, 'mm-dd-yyyy', 'en-US');
212
212
  data.component[i].value = dateText;
213
213
  }
214
214
  }
@@ -836,4 +836,4 @@ if (false) {
836
836
  */
837
837
  UCSearchComponent.prototype.cookieService;
838
838
  }
839
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWNzZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFkaW5zL3Vjc2VhcmNoLyIsInNvdXJjZXMiOlsibGliL3Vjc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFxQixNQUFNLDhCQUE4QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUF1QnRDLE1BQU0sT0FBTyxpQkFBaUI7Ozs7Ozs7OztJQTJENUIsWUFBb0IsSUFBZ0IsRUFBVSxZQUEwQixFQUFVLFVBQXFCLEVBQzNFLFNBQVMsRUFBUyxNQUFxQixFQUFVLGFBQTRCO1FBRHJGLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUFVLGVBQVUsR0FBVixVQUFVLENBQVc7UUFDM0UsY0FBUyxHQUFULFNBQVMsQ0FBQTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWpEaEcsZ0JBQVcsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuRCxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDekIsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLFdBQU0sR0FBNEQsSUFBSSxZQUFZLEVBQTZDLENBQUM7UUFDMUksbUJBQWMsR0FBNkI7WUFDekM7Z0JBQ0UsR0FBRyxFQUFFLGtCQUFrQixDQUFDLFlBQVk7Z0JBQ3BDLEtBQUssRUFBRSxLQUFLO2FBQ2I7WUFDRDtnQkFDRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsWUFBWTtnQkFDcEMsS0FBSyxFQUFFLFlBQVk7YUFDcEI7WUFDRDtnQkFDRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsYUFBYTtnQkFDckMsS0FBSyxFQUFFLFlBQVk7YUFDcEI7WUFDRDtnQkFDRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsWUFBWTtnQkFDcEMsS0FBSyxFQUFFLFVBQVU7YUFDbEI7WUFDRDtnQkFDRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsYUFBYTtnQkFDckMsS0FBSyxFQUFFLGNBQWM7YUFDdEI7U0FDRixDQUFDO1FBRUYsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUV2QixZQUFPLEdBQVEsQ0FBQyxDQUFDO1FBSWpCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFHMUIsaUJBQVksR0FBRyxTQUFTLENBQUM7UUFHekIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFPWCxDQUFDOzs7Ozs7OztJQXpERCxJQUEyQixPQUFPLENBQUMsT0FBZTtRQUNoRCxJQUFJLE9BQU8sRUFBRSxFQUFFLDhDQUE4QztZQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztTQUMzQjtJQUNILENBQUM7Ozs7SUF1REQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3pELENBQUM7Ozs7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQzdFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7O1lBQ3ZDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDaEQsRUFBRSxDQUFDLElBQUksR0FBRzs7Ozs7O1NBTUwsQ0FBQztRQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDOztZQUVqRCxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7O0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25DLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUN2RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7YUFDOUM7WUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBRXpCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7YUFDbkQ7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkMsb0NBQW9DO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTs7d0JBQ25DLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFOzt3QkFDbEMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFOzt3QkFDdkIsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFO29CQUN0QyxjQUFjLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztvQkFDakMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO29CQUM3RCxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7b0JBQzNELGNBQWMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUMvQixPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztvQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO29CQUVsRixzQ0FBc0M7b0JBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRTt3QkFDdkUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTs0QkFDakcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQ0FDaEUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0NBQ3RFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQ0FDdEcsTUFBTTtpQ0FDUDs2QkFDRjt5QkFDRjs2QkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTs0QkFDMUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dDQUNqRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO29DQUNyRixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQ0FDL0YsTUFBTTtpQ0FDUDs2QkFDRjt5QkFDRjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt5QkFDcEQ7cUJBRUY7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7cUJBQ3BEO29CQUNELHlGQUF5RjtvQkFDekYsMENBQTBDO29CQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQzVFO2dCQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFO29CQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3BGO2dCQUVELG9CQUFvQjtnQkFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUU7b0JBQzFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFOzs0QkFDdEMsWUFBWSxHQUFHLElBQUksSUFBSSxFQUFFO3dCQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFOzRCQUN0QixZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNyQzs7NEJBQ0csUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7OzRCQUM1QyxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUU7d0JBQ3pCLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTs7Z0NBQ2YsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztnQ0FDakQsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ25DLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO3lCQUNuRDs2QkFDSSxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7O2dDQUNwQixTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O2dDQUNqRCxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDbkMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7eUJBQ25EOzZCQUFNOzRCQUNMLFFBQVEsR0FBRyxZQUFZLENBQUM7eUJBQ3pCOzs0QkFDRyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDO3dCQUMxRCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7cUJBQ3BDO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7O0lBRU0sT0FBTyxDQUFDLEdBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDOzs7Ozs7SUFFTSxRQUFRLENBQUMsR0FBVyxFQUFFLFdBQWdCLElBQUk7UUFDL0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7OztJQUVELFdBQVc7O1lBQ0wsS0FBSyxHQUFHLElBQUk7UUFDaEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDdEMsS0FBSyxHQUFHO2dCQUNOLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSzthQUN4QyxDQUFBO1NBQ0Y7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQzs7OztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7Ozs7OztJQUVELE1BQU0sQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLFVBQWtCLEVBQUUsT0FBWSxFQUFFLFVBQXlCLElBQUksS0FBSyxFQUFFOztZQUN2RyxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRTs7WUFDbEMsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFFOztZQUNyQixTQUFTLEdBQUcsS0FBSzs7WUFDakIsT0FBTyxHQUFHLEtBQUs7UUFFbkIsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7WUFDN0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0RjtTQUNGO1FBQ0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDeEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDaEMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDMUIsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUVyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTs7Z0JBQ25DLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRTs7Z0JBQzNCLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFFNUMsK0JBQStCO1lBQy9CLDhHQUE4RztZQUM5RyxzQ0FBc0M7WUFDdEMscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0QixtREFBbUQ7WUFDbkQsb0RBQW9EO1lBQ3BELGFBQWE7WUFDYixNQUFNO1lBQ04sSUFBSTtZQUVKLE9BQU8sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2RCxpQ0FBaUM7WUFDakMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sRUFBRTtnQkFDOUYsU0FBUyxHQUFHLElBQUksQ0FBQzthQUNsQjtpQkFDSTtnQkFDSCxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBRTs7d0JBQzlCLEdBQUcsR0FBRyxTQUFTLENBQUMsT0FBTzs7d0JBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7b0JBQzlDLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTt3QkFDakIsT0FBTyxHQUFHLElBQUksQ0FBQzs7NEJBQ1gsS0FBSyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO3dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQzt3QkFDOUMsTUFBTTtxQkFDUDtvQkFDRCxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTt3QkFDbEMsd0NBQXdDO3dCQUN4QyxPQUFPLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7d0JBQ2xELE9BQU8sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDbEMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7d0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3ZCO3lCQUFNLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTs7NEJBQzFFLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBRTt3QkFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0NBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUMxQzt5QkFDRjt3QkFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFOzRCQUN2QixPQUFPLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7NEJBQ2xELE9BQU8sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzs0QkFDbEMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7NEJBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQ3ZCO3FCQUNGO2lCQUNGO3FCQUNJO29CQUNILGtFQUFrRTtvQkFDbEUsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRTt3QkFDeEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3FCQUNuQzt5QkFBTTt3QkFDTCxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQ3hEO29CQUNELE9BQU8sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDakMsT0FBTyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDO3FCQUNyRDtvQkFDRCwyRUFBMkU7eUJBQ3RFLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxFQUFFO3dCQUMvRyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDakUsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsRUFBRTs0QkFDcEQsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQzFFO3dCQUNELElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLEVBQUU7NEJBQy9DLE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDOzRCQUNuRCxPQUFPLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUE7eUJBQ3BEO3FCQUNGO3lCQUNJO3dCQUNILE9BQU8sQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQTtxQkFDbEQ7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdkI7YUFDRjtTQUNGO1FBRUQsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPO1NBQ1I7UUFFRCxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLFNBQVMsRUFBRTtZQUMzQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUI7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUU7Z0JBQzlGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzdELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEQ7YUFDRjtTQUNGO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksU0FBUyxFQUFFO1lBQzVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRDtTQUNGO1FBRUQsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFFM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQy9CO2FBQU07WUFDTCxPQUFPLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1NBQzFEO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxDQUFDLFFBQVEsRUFBRSxFQUFFOztnQkFDakQsU0FBUyxHQUFHO2dCQUNkLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsTUFBTTthQUNoQjtZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Ozs7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtZQUN0QixPQUFPLEtBQUssQ0FBQztTQUNkO2FBQ0k7WUFDSCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7Ozs7OztJQUVELGFBQWEsQ0FBQyxHQUFRLEVBQUUsR0FBVyxFQUFFLE9BQTJCLElBQUk7O2NBQzVELEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDcEMsR0FBRyxDQUFDLFNBQVM7Ozs7UUFBQyxRQUFRLENBQUMsRUFBRTtZQUN2QixHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDM0IsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFFRCxlQUFlLENBQUMsT0FBWTtRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RSwrQ0FBK0M7UUFDL0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QyxDQUFDOzs7OztJQUVELGtCQUFrQixDQUFDLE9BQVk7UUFDN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDOzs7O0lBRUQsWUFBWTs7WUFDTixPQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRTtRQUN0QyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUMxQixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN2QixPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUzs7OztRQUM1QyxRQUFRLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRSxDQUFDOzs7O1FBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7Ozs7SUFFRCxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVE7O1lBQzFCLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVM7UUFFM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7d0JBQzlDLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFOzt3QkFDbEMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFO29CQUUzQixJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRTs7NEJBQ3RDLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRTt3QkFDL0IsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO3dCQUNyQyxJQUFJLFFBQVEsQ0FBQyxjQUFjLElBQUksU0FBUyxJQUFJLFFBQVEsQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFOzRCQUN6RSxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FBQzs0QkFDNUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO3lCQUM1Qzs2QkFBTTs0QkFDTCxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO3lCQUNuQzt3QkFDRCxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQzt3QkFDekIsT0FBTyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDO3dCQUNsRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUN6QjtvQkFDRCxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztvQkFDN0IsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRTt3QkFDM0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTs0QkFDakcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQ0FDaEUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtvQ0FDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQ0FDMUYsTUFBTTtpQ0FDUDs2QkFDRjt5QkFDRjs2QkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTs0QkFDMUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dDQUNqRSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO29DQUN6RixRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQ0FDdkcsTUFBTTtpQ0FDUDs2QkFDRjt5QkFDRjs2QkFBTTs0QkFDTCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7eUJBQ3hDO3FCQUVGO3lCQUFNO3dCQUNMLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztxQkFDeEM7b0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDaEU7YUFDRjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxVQUFVLENBQUMsUUFBUTs7WUFDYixTQUFTLEdBQUcsS0FBSztRQUVyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2dCQUMvQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUzs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBQztZQUNwRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtnQkFDOUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7b0JBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO3dCQUMzRSxTQUFTLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjt5QkFBTTt3QkFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixNQUFNO3FCQUNQO2lCQUNGO3FCQUFNOzt3QkFDRCxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7b0JBQy9DLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRTt3QkFDdkQsU0FBUyxHQUFHLElBQUksQ0FBQztxQkFDbEI7eUJBQU07d0JBQ0wsU0FBUyxHQUFHLEtBQUssQ0FBQzt3QkFDbEIsTUFBTTtxQkFDUDtpQkFDRjthQUNGO2lCQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksS0FBSyxFQUFFO2dCQUN0RCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtvQkFDekMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7d0JBQzNFLFNBQVMsR0FBRyxJQUFJLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLFNBQVMsR0FBRyxLQUFLLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7cUJBQU07O3dCQUNELFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDL0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxFQUFFO3dCQUN2RCxTQUFTLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjt5QkFBTTt3QkFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7aUJBQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO29CQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTt3QkFDMUUsU0FBUyxHQUFHLElBQUksQ0FBQztxQkFDbEI7eUJBQU07d0JBQ0wsU0FBUyxHQUFHLEtBQUssQ0FBQzt3QkFDbEIsTUFBTTtxQkFDUDtpQkFDRjtxQkFBTTs7d0JBQ0QsUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUMvQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUU7d0JBQ3RELFNBQVMsR0FBRyxJQUFJLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLFNBQVMsR0FBRyxLQUFLLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtpQkFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLEtBQUssRUFBRTtnQkFDdEQsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7b0JBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO3dCQUMzRSxTQUFTLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjt5QkFBTTt3QkFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixNQUFNO3FCQUNQO2lCQUNGO3FCQUFNOzt3QkFDRCxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7b0JBQy9DLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRTt3QkFDdkQsU0FBUyxHQUFHLElBQUksQ0FBQztxQkFDbEI7eUJBQU07d0JBQ0wsU0FBUyxHQUFHLEtBQUssQ0FBQzt3QkFDbEIsTUFBTTtxQkFDUDtpQkFDRjthQUNGO2lCQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO2dCQUNyRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtvQkFDekMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7d0JBQzFFLFNBQVMsR0FBRyxJQUFJLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLFNBQVMsR0FBRyxLQUFLLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7cUJBQU07O3dCQUNELFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDL0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFO3dCQUN0RCxTQUFTLEdBQUcsSUFBSSxDQUFDO3FCQUNsQjt5QkFBTTt3QkFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7aUJBQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxLQUFLLEVBQUU7Z0JBQ3RELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO29CQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTt3QkFDM0UsU0FBUyxHQUFHLElBQUksQ0FBQztxQkFDbEI7eUJBQU07d0JBQ0wsU0FBUyxHQUFHLEtBQUssQ0FBQzt3QkFDbEIsTUFBTTtxQkFDUDtpQkFDRjtxQkFBTTs7d0JBQ0QsUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUMvQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLEVBQUU7d0JBQ3ZELFNBQVMsR0FBRyxJQUFJLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLFNBQVMsR0FBRyxLQUFLLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFFbkIsQ0FBQzs7Ozs7OztJQUVPLGFBQWEsQ0FBQyxXQUFtQixFQUFFLFVBQWtCO1FBQzNELElBQ0UsVUFBVSxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNsRCxXQUFXLElBQUksU0FBUyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELE9BQU8sV0FBVyxDQUFDOztZQUNqQixhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs7WUFDbkQsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztZQUM1RCxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7WUFDeEUsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDckQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7O1lBL2tCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHl5Z0JBQXdDO2dCQUV4QyxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ3pCLFVBQVUsRUFBRTtvQkFDVixPQUFPLENBQUMsZUFBZSxFQUFFO3dCQUN2QixLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQzs0QkFDckIsTUFBTSxFQUFFLEdBQUc7NEJBQ1gsT0FBTyxFQUFFLEdBQUc7eUJBQ2IsQ0FBQyxDQUFDO3dCQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDOzRCQUNuQixNQUFNLEVBQUUsS0FBSzs0QkFDYixPQUFPLEVBQUUsR0FBRzs0QkFDWixRQUFRLEVBQUUsUUFBUTt5QkFDbkIsQ0FBQyxDQUFDO3dCQUNILFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzlDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQy9DLENBQUM7aUJBQ0g7O2FBQ0Y7Ozs7WUFuQ1EsVUFBVTtZQVFWLFlBQVk7WUFWNkMsU0FBUzs0Q0FrR3RFLE1BQU0sU0FBQyxRQUFRO1lBdEZYLGFBQWE7WUFFYixhQUFhOzs7c0JBNEJuQixTQUFTLFNBQUMsVUFBVTtxQkFNcEIsU0FBUyxTQUFDLGNBQWM7MEJBQ3hCLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxLQUFLO3FCQUNMLE1BQU07cUJBQ04sTUFBTTs7OztJQUxQLG1DQUE4Qzs7SUFDOUMsd0NBQTREOztJQUM1RCxxQ0FBK0I7O0lBQy9CLHFDQUFtQzs7SUFDbkMsbUNBQXlEOztJQUN6RCxtQ0FBMEk7O0lBQzFJLDJDQXFCRTs7SUFFRix1Q0FBdUI7O0lBRXZCLG9DQUFpQjs7SUFDakIsMENBQW1COztJQUNuQix1Q0FBZ0I7O0lBQ2hCLHNDQUFlOztJQUNmLHlDQUE4Qjs7SUFDOUIscUNBQTBCOztJQUMxQixrQ0FBYzs7SUFFZCx5Q0FBeUI7O0lBRXpCLGlDQUFnQjs7SUFDaEIsc0NBQWM7O0lBQ2QsNENBQXFCOztJQUNyQixtQ0FBVzs7SUFDWCxtQ0FBZTs7SUFDZixvQ0FBYTs7SUFDYix1Q0FBbUI7Ozs7O0lBRVAsaUNBQXdCOzs7OztJQUFFLHlDQUFrQzs7Ozs7SUFBRSx1Q0FBNkI7Ozs7O0lBQ3JHLHNDQUFtQzs7SUFBRSxtQ0FBNEI7Ozs7O0lBQUUsMENBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdCwgUmVuZGVyZXIyLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5wdXRTZWFyY2hPYmogfSBmcm9tICcuL21vZGVsL0lucHV0U2VhcmNoT2JqLk1vZGVsJztcclxuaW1wb3J0IHsgQ3JpdGVyaWFPYmogfSBmcm9tICcuL21vZGVsL0NyaXRlcmlhT2JqLm1vZGVsJztcclxuaW1wb3J0IHsgUmVxdWVzdENyaXRlcmlhT2JqIH0gZnJvbSAnLi9tb2RlbC9SZXF1ZXN0Q3JpdGVyaWFPYmoubW9kZWwnO1xyXG5pbXBvcnQgeyBBZEluc0NvbnN0YW50IH0gZnJvbSAnLi9tb2RlbC9BZEluc3RDb25zdGFudCc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEV4Y2VsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXhjZWwtc2VydmljZS9leGNlbC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUsIHN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgRXhwb3J0VHlwZUNvbnN0YW50LCBLZXlWYWx1ZVJlcG9ydE9iaiB9IGZyb20gJy4vbW9kZWwvS2V5VmFsdWVSZXBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZSc7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1VQ1NlYXJjaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Vjc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91Y3NlYXJjaC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRXhjZWxTZXJ2aWNlXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdjaGFuZ2VEaXZTaXplJywgW1xyXG4gICAgICBzdGF0ZSgnaW5pdGlhbCcsIHN0eWxlKHtcclxuICAgICAgICBoZWlnaHQ6ICcqJyxcclxuICAgICAgICBvcGFjaXR5OiAnMScsXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJ2ZpbmFsJywgc3R5bGUoe1xyXG4gICAgICAgIGhlaWdodDogJzBweCcsXHJcbiAgICAgICAgb3BhY2l0eTogJzAnLFxyXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdpbml0aWFsPT5maW5hbCcsIGFuaW1hdGUoJzMwMG1zJykpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdmaW5hbD0+aW5pdGlhbCcsIGFuaW1hdGUoJzMwMG1zJykpXHJcbiAgICBdKSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVQ1NlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gdHJ1cyBuYWQsIGJpc2EgZ2Ega2FsbyBtaXNhbGthbiBndyBtYXUgYmlraW5cclxuICAvLyBrYWxvIGxvZ2luIGRpIGNhYmFuZyBJc1NlbGVjdE9uZTogdHJ1ZVxyXG4gIC8vIGthbG8gbG9naW4gZGkgSE8sIElzU2VsZWN0T25lOiBmYWxzZVxyXG4gIEBWaWV3Q2hpbGQoJ2VuamlGb3JtJykgc2V0IGNvbnRlbnQoY29udGVudDogTmdGb3JtKSB7XHJcbiAgICBpZiAoY29udGVudCkgeyAvLyBpbml0aWFsbHkgc2V0dGVyIGdldHMgY2FsbGVkIHdpdGggdW5kZWZpbmVkXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IGNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdmb3JtSWRTZWFyY2gnKSBteUZvcm06IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KCkgc2VhcmNoSW5wdXQ6IElucHV0U2VhcmNoT2JqID0gbmV3IElucHV0U2VhcmNoT2JqKCk7XHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xyXG4gIEBJbnB1dCgpIGlzUmVwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIHJlc3VsdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGdlblJwdDogRXZlbnRFbWl0dGVyPHsgRXhwb3J0VHlwZTogbnVtYmVyLCBFbFJlZjogRWxlbWVudFJlZiB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBFeHBvcnRUeXBlOiBudW1iZXIsIEVsUmVmOiBFbGVtZW50UmVmIH0+KCk7XHJcbiAgRXhwb3J0VHlwZUxpc3Q6IEFycmF5PEtleVZhbHVlUmVwb3J0T2JqPiA9IFtcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfUERGLFxyXG4gICAgICB2YWx1ZTogXCJQREZcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfWExTLFxyXG4gICAgICB2YWx1ZTogXCJFeGNlbCAyMDAzXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogRXhwb3J0VHlwZUNvbnN0YW50LkVYUF9UWVBFX1hMU1gsXHJcbiAgICAgIHZhbHVlOiBcIkV4Y2VsIDIwMDdcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfRE9DLFxyXG4gICAgICB2YWx1ZTogXCJEb2N1bWVudFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IEV4cG9ydFR5cGVDb25zdGFudC5FWFBfVFlQRV9ET0NYLFxyXG4gICAgICB2YWx1ZTogXCJEb2N1bWVudCBYTUxcIlxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICBFeHBvcnRUeXBlOiBudW1iZXIgPSAwO1xyXG5cclxuICBwYWdlTm93OiBhbnkgPSAxO1xyXG4gIGNvbmZpZ3VyYXRpb246IGFueTtcclxuICBleHBvcnREYXRhOiBhbnk7XHJcbiAgRXhjZWxEYXRhOiBhbnk7XHJcbiAgaXNEYXRhTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBCaXNEdDogc3RyaW5nO1xyXG5cclxuICBjdXJyZW50U3RhdGUgPSAnaW5pdGlhbCc7XHJcblxyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxuICBjb3VudEZvcm0gPSAwO1xyXG4gIGZvcm1hdHRlZEFtb3VudCA9ICcnO1xyXG4gIGFtb3VudCA9IDA7XHJcbiAgYXBpVXJsOiBzdHJpbmc7XHJcbiAgYXJyQ3JpdDogYW55O1xyXG4gIHNlYXJjaEZvcm06IE5nRm9ybTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGV4Y2VsU2VydmljZTogRXhjZWxTZXJ2aWNlLCBwcml2YXRlIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50LCBwdWJsaWMgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLCBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGNoYW5nZVN0YXRlKCkge1xyXG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gJ2luaXRpYWwnID8gJ2ZpbmFsJyA6ICdpbml0aWFsJztcclxuICAgIHRoaXMuaXNIaWRkZW4gPSB0aGlzLmlzSGlkZGVuID09PSBmYWxzZSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJ1Y3NlYXJjaFwiKTtcclxuICAgIHRoaXMuYXBpVXJsID0gdGhpcy5zZWFyY2hJbnB1dC5lbnZpcm9tZW50VXJsICsgdGhpcy5zZWFyY2hJbnB1dC5hcGlRcnlQYWdpbmc7XHJcbiAgICB0aGlzLmFyckNyaXQgPSB0aGlzLnNlYXJjaElucHV0LmFyckNyaXRPYmo7XHJcbiAgICBsZXQganMgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICBqcy50ZXh0ID0gYFxyXG4gICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChcIiNmbGlwXCIpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgJChcIiNwYW5lbFwiKS5zbGlkZVRvZ2dsZShcInNsb3dcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgYDtcclxuICAgIHRoaXMuX3JlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCBqcyk7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldCgnQnVzaW5lc3NEYXRlUmF3Jyk7XHJcbiAgICB0aGlzLkJpc0R0ID0gdGhpcy5EZWNyeXB0U3RyaW5nKHZhbHVlLCBcIkFkSW5zRk9VMTIzNDU2NzhcIik7XHJcbiAgICB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5nZXRKU09OKHRoaXMuc2VhcmNoSW5wdXQuX3VybCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBkYXRhO1xyXG4gICAgICB0aGlzLmV4cG9ydERhdGEgPSBkYXRhLmV4cG9ydEV4Y2VsO1xyXG4gICAgICBpZiAoZGF0YS5leHBvcnRUeXBlTGlzdCAhPSB1bmRlZmluZWQgJiYgZGF0YS5leHBvcnRUeXBlTGlzdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgIHRoaXMuRXhwb3J0VHlwZUxpc3QgPSBkYXRhLmV4cG9ydFR5cGVMaXN0O1xyXG4gICAgICAgIHRoaXMuRXhwb3J0VHlwZSA9IHRoaXMuRXhwb3J0VHlwZUxpc3RbMF0ua2V5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvdW50Rm9ybSA9IGRhdGEuY29tcG9uZW50Lmxlbmd0aDtcclxuICAgICAgdGhpcy5pc0RhdGFMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQudGl0bGUgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQudGl0bGUgIT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi50aXRsZSA9IHRoaXMuc2VhcmNoSW5wdXQudGl0bGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb3VudEZvcm07IGkrKykge1xyXG4gICAgICAgIC8vaW5pIGthbGF1IGRhdGFueWEgZGkgbG9hZCBkYXJpIFVSTFxyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5pc0Zyb21VUkwgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICAgICAgICB2YXIgYXJyYXlDcml0ID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgICB2YXIgY3JpdGVyaWFPYmplY3QgPSBuZXcgQ3JpdGVyaWFPYmooKTtcclxuICAgICAgICAgIGNyaXRlcmlhT2JqZWN0LkRhdGFUeXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgICBjcml0ZXJpYU9iamVjdC5wcm9wTmFtZSA9IGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcE5hbWU7XHJcbiAgICAgICAgICBjcml0ZXJpYU9iamVjdC52YWx1ZSA9IGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcFZhbHVlO1xyXG4gICAgICAgICAgY3JpdGVyaWFPYmplY3QucmVzdHJpY3Rpb24gPSBcImVxXCI7XHJcbiAgICAgICAgICBhcnJheUNyaXQucHVzaChjcml0ZXJpYU9iamVjdCk7XHJcbiAgICAgICAgICByZXF1ZXN0LmNyaXRlcmlhID0gYXJyYXlDcml0O1xyXG4gICAgICAgICAgcmVxdWVzdFtkYXRhLmNvbXBvbmVudFtpXS5jcml0ZXJpYVByb3BOYW1lXSA9IGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcFZhbHVlO1xyXG5cclxuICAgICAgICAgIC8vIFBlbmdlY2VrYW4gcGVuZ2d1bmFhbiB1cmwgYXRhdSBwYXRoXHJcbiAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0ucGF0aCAhPSB1bmRlZmluZWQgJiYgZGF0YS5jb21wb25lbnRbaV0ucGF0aCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50cyAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWFyY2hJbnB1dC5kZGxFbnZpcm9ubWVudHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2VhcmNoSW5wdXQuZGRsRW52aXJvbm1lbnRzLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0ubmFtZSA9PSB0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50c1t5XS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLmZ1bGxwYXRoID0gdGhpcy5zZWFyY2hJbnB1dC5kZGxFbnZpcm9ubWVudHNbeV0uZW52aXJvbm1lbnQgKyBkYXRhLmNvbXBvbmVudFtpXS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50cy5sZW5ndGg7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmVudmlyb25tZW50ID09IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS5lbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5mdWxscGF0aCA9IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS51cmwgKyBkYXRhLmNvbXBvbmVudFtpXS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0uZnVsbHBhdGggPSBkYXRhLmNvbXBvbmVudFtpXS51cmw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5mdWxscGF0aCA9IGRhdGEuY29tcG9uZW50W2ldLnVybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vbGVtcGFyIG9iamVjdG55YSBzZWthbGlhbiBzYW1hIHVybG55YSwgbm50aSBkaSBiaW5kIGRpIGRhbGVtIGthcmVuYSBtYXNhbGFoIGRpIGFzeW5jbnlhXHJcbiAgICAgICAgICAvL2JpYXIgdGlhcCBmdW5jdGlvbiBhZGEgc3RhdGUybnlhIHNlbmRpcmlcclxuICAgICAgICAgIHRoaXMucmVzb2x2ZU9iamVjdChkYXRhLmNvbXBvbmVudFtpXSwgZGF0YS5jb21wb25lbnRbaV0uZnVsbHBhdGgsIHJlcXVlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgPT0gXCJudW1lcmljXCIpIHtcclxuICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gcGFyc2VGbG9hdChkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSkudG9Mb2NhbGVTdHJpbmcoJ2VuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3BlbmdlY2VrYW4gdGFuZ2dhbFxyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS50eXBlID09IFwiZGF0ZXBpY2tlclwiKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0udmFsdWUuaW5jbHVkZXMoXCJCRFwiKSkge1xyXG4gICAgICAgICAgICBsZXQgYnVzaW5lc3NEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuQmlzRHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGJ1c2luZXNzRGF0ZSA9IG5ldyBEYXRlKHRoaXMuQmlzRHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLmNoYXJBdCgyKTtcclxuICAgICAgICAgICAgdmFyIGRhdGVTaG93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09IFwiLVwiKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXBNaW51cyA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLnNwbGl0KFwiLVwiLCAyKTtcclxuICAgICAgICAgICAgICB2YXIgbnVtRGF5ID0gcGFyc2VJbnQodGVtcE1pbnVzWzFdKTtcclxuICAgICAgICAgICAgICBkYXRlU2hvdy5zZXREYXRlKGJ1c2luZXNzRGF0ZS5nZXREYXRlKCkgLSBudW1EYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwiK1wiKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXBNaW51cyA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLnNwbGl0KFwiK1wiLCAyKTtcclxuICAgICAgICAgICAgICB2YXIgbnVtRGF5ID0gcGFyc2VJbnQodGVtcE1pbnVzWzFdKTtcclxuICAgICAgICAgICAgICBkYXRlU2hvdy5zZXREYXRlKGJ1c2luZXNzRGF0ZS5nZXREYXRlKCkgKyBudW1EYXkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRhdGVTaG93ID0gYnVzaW5lc3NEYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkYXRlVGV4dCA9IGZvcm1hdERhdGUoZGF0ZVNob3csICd5eXl5LU1NLWRkJywgJ2VuLVVTJylcclxuICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0udmFsdWUgPSBkYXRlVGV4dDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEpTT04odXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwb3N0SlNPTih1cmw6IHN0cmluZywgY3JpdGVyaWE6IGFueSA9IG51bGwpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgY3JpdGVyaWEpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQ2xpY2soKSB7XHJcbiAgICBsZXQgb3JkZXIgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5vcmRlcmJ5ICE9IG51bGwpIHtcclxuICAgICAgb3JkZXIgPSB7XHJcbiAgICAgICAga2V5OiB0aGlzLmNvbmZpZ3VyYXRpb24ub3JkZXJieS5rZXksXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbi5vcmRlcmJ5LnZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucGFnZU5vdyA9IDE7XHJcbiAgICB0aGlzLnNlYXJjaCh0aGlzLmFwaVVybCwgdGhpcy5wYWdlTm93LCB0aGlzLnBhZ2VTaXplLCBvcmRlciwgdGhpcy5hcnJDcml0KTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLnJlc2V0Rm9ybSgpO1xyXG4gICAgdGhpcy5FeHBvcnRUeXBlID0gdGhpcy5FeHBvcnRUeXBlTGlzdFswXS5rZXk7XHJcbiAgICB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoKGFwaVVybDogc3RyaW5nLCBwYWdlTm86IG51bWJlciwgcm93UGVyUGFnZTogbnVtYmVyLCBvcmRlckJ5OiBhbnksIGFkZENyaXQ6IENyaXRlcmlhT2JqW10gPSBuZXcgQXJyYXkoKSkge1xyXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICBsZXQgYXJyQ3JpdCA9IG5ldyBBcnJheSgpO1xyXG4gICAgbGV0IElzUXVlcnlJbiA9IGZhbHNlO1xyXG4gICAgbGV0IElzQnJlYWsgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBJbmplY3Qgd2hlcmVRdWVyeSBmb3Igd2hlcmUgY3JpdGVyaWFcclxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWUgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmcud2hlcmVRdWVyeSA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zZWFyY2hJbnB1dC53aGVyZVZhbHVlLmxlbmd0aDsgeCsrKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5c3RyaW5nLndoZXJlUXVlcnkucHVzaCh0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWVbeF0udmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0LnBhZ2VObyA9IHBhZ2VObztcclxuICAgIHJlcXVlc3Qucm93UGVyUGFnZSA9IHJvd1BlclBhZ2U7XHJcbiAgICByZXF1ZXN0Lm9yZGVyQnkgPSBvcmRlckJ5O1xyXG4gICAgcmVxdWVzdC5xdWVyeVN0cmluZyA9IHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeXN0cmluZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRGb3JtOyBpKyspIHtcclxuICAgICAgbGV0IGNyaXRPYmogPSBuZXcgQ3JpdGVyaWFPYmooKTtcclxuICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMubXlGb3JtLm5hdGl2ZUVsZW1lbnRbaV07XHJcblxyXG4gICAgICAvLyAvLyBwb3B1cCBtZXNzYWdlIGlmIHJlcXVpcmVkXHJcbiAgICAgIC8vIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVkJykgIT0gbnVsbCAmJiBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVkJykgPT0gXCJ0cnVlXCIpIHtcclxuICAgICAgLy8gICBsZXQgdmFsID0gY29tcG9uZW50LnZhbHVlLnRyaW0oKTtcclxuICAgICAgLy8gICBpZiAodmFsID09IFwiXCIpIHtcclxuICAgICAgLy8gICAgIElzQnJlYWsgPSB0cnVlO1xyXG4gICAgICAvLyAgICAgbGV0IGxhYmVsID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnbGFiZWwnKTtcclxuICAgICAgLy8gICAgIHRoaXMudG9hc3RyLndhcm5pbmcoXCJQbGVhc2UgaW5wdXQgXCIgKyBsYWJlbCk7XHJcbiAgICAgIC8vICAgICBicmVhaztcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGNyaXRPYmouRGF0YVR5cGUgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKTtcclxuICAgICAgLy9Jbmkga2h1c3VzIGthbGF1IGRhcmkgRHJvcCBEb3duXHJcbiAgICAgIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdxdWVyeS1pbicpICE9IG51bGwgJiYgY29tcG9uZW50LmdldEF0dHJpYnV0ZSgncXVlcnktaW4nKSA9PSBcInRydWVcIikge1xyXG4gICAgICAgIElzUXVlcnlJbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgSXNRdWVyeUluID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbXBvbmVudC52YWx1ZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudC5ub2RlTmFtZSA9PSAnU0VMRUNUJykge1xyXG4gICAgICAgICAgbGV0IGRkbCA9IGNvbXBvbmVudC5vcHRpb25zO1xyXG4gICAgICAgICAgbGV0IHRleHQgPSBkZGxbZGRsLnNlbGVjdGVkSW5kZXhdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgIGlmICh0ZXh0ID09IFwib25lXCIpIHtcclxuICAgICAgICAgICAgSXNCcmVhayA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBsYWJlbCA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2xhYmVsJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoXCJQbGVhc2Ugc2VsZWN0IFwiICsgbGFiZWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0ZXh0ICE9IFwiYWxsXCIgJiYgdGV4dCAhPSBcIm9uZVwiKSB7XHJcbiAgICAgICAgICAgIC8vS2FsYXUgRGFyaSBEcm9wZG93biB1ZGFoIHBhc3RpIHBha2UgRXFcclxuICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25FcTtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5uYW1lO1xyXG4gICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gdGV4dDtcclxuICAgICAgICAgICAgYXJyQ3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09IFwiYWxsXCIgJiYgSXNRdWVyeUluID09IHRydWUgJiYgY29tcG9uZW50Lm9wdGlvbnMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgbGV0IGRkbExpc3QgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBjb21wb25lbnQub3B0aW9ucy5sZW5ndGg7IHgrKykge1xyXG4gICAgICAgICAgICAgIGlmICh4ICE9IDApIHtcclxuICAgICAgICAgICAgICAgIGRkbExpc3QucHVzaChjb21wb25lbnQub3B0aW9uc1t4XS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZGxMaXN0Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25JbjtcclxuICAgICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gY29tcG9uZW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5saXN0VmFsdWUgPSBkZGxMaXN0O1xyXG4gICAgICAgICAgICAgIGFyckNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vS2FsYXUgYWRhIFBlcmNlbnQgbWFrYSB5YW5nIGRpcGFrZSBubnRpIGFkYWxhaCBSZXN0cmljdGlvbnMgTGlrZVxyXG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5uYW1lICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5uYW1lO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3JpdE9iai52YWx1ZSA9IGNvbXBvbmVudC52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnZhbHVlLmluY2x1ZGVzKFwiJVwiKSkge1xyXG4gICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkxpa2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2thbGF1IGNvbXBvbmVudG55YSBEYXRlLCByZXN0cmljdGlvbnNueWEgbGdzZyBhbWJpbCBkYXJpIHByb3BlcnR5IEpTT05ueWFcclxuICAgICAgICAgIGVsc2UgaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdHJpY3Rpb24nKSAhPSBcIlwiICYmIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdHJpY3Rpb24nKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJlc3RyaWN0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKSA9PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gcGFyc2VGbG9hdChjb21wb25lbnQudmFsdWUucmVwbGFjZSgvLC9nLCAnJykpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNyaXRPYmoucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxJS0VcIikge1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoudmFsdWUgPSBcIiVcIiArIGNvbXBvbmVudC52YWx1ZS50cmltKCkgKyBcIiVcIjtcclxuICAgICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkxpa2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uRXFcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFyckNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoSXNCcmVhaykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFkZENyaXQgIT0gbnVsbCAmJiBhZGRDcml0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoYWRkQ3JpdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkQ3JpdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgYXJyQ3JpdC5wdXNoKGFkZENyaXRbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dCAhPSBudWxsIHx8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWFyY2hJbnB1dC5hZGRDcml0SW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGFyckNyaXQucHVzaCh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dFtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dCAhPSBudWxsIHx8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJyQ3JpdC5wdXNoKHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0W2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlcXVlc3QuY3JpdGVyaWEgPSBhcnJDcml0O1xyXG5cclxuICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dC5pc0pvaW5FeEFQSSkge1xyXG4gICAgICByZXF1ZXN0LmludGVncmF0aW9uT2JqID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlcXVlc3QuaW50ZWdyYXRpb25PYmogPSB0aGlzLnNlYXJjaElucHV0LmludGVncmF0aW9uT2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaHR0cC5wb3N0KGFwaVVybCwgcmVxdWVzdCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICBsZXQgcXJ5UGFnaW5nID0ge1xyXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcclxuICAgICAgICBwYWdlTm93OiBwYWdlTm9cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhxcnlQYWdpbmcpO1xyXG4gICAgICB0aGlzLnJlc3VsdC5lbWl0KHFyeVBhZ2luZyk7XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgR2VuZXJhdGVSZXBvcnQoKSB7XHJcbiAgICB0aGlzLmdlblJwdC5lbWl0KHsgRXhwb3J0VHlwZTogdGhpcy5FeHBvcnRUeXBlLCBFbFJlZjogdGhpcy5teUZvcm0gfSk7XHJcbiAgfVxyXG5cclxuICBsZXNzVGhhbkZvdXIoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5jb3VudEZvcm0gPiAzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc29sdmVPYmplY3Qob2JqOiBhbnksIHVybDogc3RyaW5nLCBjcml0OiBSZXF1ZXN0Q3JpdGVyaWFPYmogPSBudWxsKSB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLnBvc3RKU09OKHVybCwgY3JpdCk7XHJcbiAgICB2YWwuc3Vic2NyaWJlKHRlbXBEYXRhID0+IHtcclxuICAgICAgb2JqLml0ZW1zVXJsID0gbmV3IEFycmF5KCk7XHJcbiAgICAgIG9iai5pdGVtc1VybCA9IHRlbXBEYXRhLlJldHVybk9iamVjdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtQW1vdW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtYXR0ZWRBbW91bnQgPSBwYXJzZUZsb2F0KGVsZW1lbnQudGFyZ2V0LnZhbHVlKS50b0xvY2FsZVN0cmluZygnZW4nKTtcclxuICAgIC8vIHRvIHNob3cgdGhlIGZvcm1hdHRlZCBhbW91bnQgaW4gdGhlIHRleHRib3guXHJcbiAgICBlbGVtZW50LnRhcmdldC52YWx1ZSA9IHRoaXMuZm9ybWF0dGVkQW1vdW50O1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtVG9EZWNpbWFsKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgZWxlbWVudC50YXJnZXQudmFsdWUgPSBwYXJzZUZsb2F0KGVsZW1lbnQudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnJykpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0QXNYTFNYKCk6IHZvaWQge1xyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICByZXF1ZXN0LnBhZ2VObyA9IDE7XHJcbiAgICByZXF1ZXN0LnJvd1BlclBhZ2UgPSA5OTk5O1xyXG4gICAgcmVxdWVzdC5vcmRlckJ5ID0gbnVsbDtcclxuICAgIHJlcXVlc3QuY3JpdGVyaWEgPSBbXTtcclxuICAgIHJlcXVlc3QucXVlcnlTdHJpbmcgPSB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmc7XHJcblxyXG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5hcGlVcmwsIHJlcXVlc3QpLnN1YnNjcmliZShcclxuICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIHRoaXMuRXhjZWxEYXRhID0gcmVzcG9uc2VbXCJEYXRhXCJdO1xyXG4gICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKHRoaXMuRXhjZWxEYXRhLCAnc2FtcGxlJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUV2ZW50KG9wdFZhbHVlLCBhZkZpbHRlcikge1xyXG4gICAgdmFyIGpzb25Db21wID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFmRmlsdGVyLmFmZmVjdGVkRmlsdGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwganNvbkNvbXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoanNvbkNvbXBbal0ubmFtZSA9PSBhZkZpbHRlci5hZmZlY3RlZEZpbHRlcltpXSkge1xyXG4gICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICAgICAgICB2YXIgYXJyYXlDcml0ID0gbmV3IEFycmF5KCk7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdFZhbHVlICE9IFwiYWxsXCIgJiYgb3B0VmFsdWUgIT0gXCJvbmVcIikge1xyXG4gICAgICAgICAgICB2YXIgY3JpdE9iaiA9IG5ldyBDcml0ZXJpYU9iaigpO1xyXG4gICAgICAgICAgICBjcml0T2JqLkRhdGFUeXBlID0gYWZGaWx0ZXIuZGF0YXR5cGU7XHJcbiAgICAgICAgICAgIGlmIChhZkZpbHRlci5maWx0ZXJQcm9wTmFtZSAhPSB1bmRlZmluZWQgfHwgYWZGaWx0ZXIuZmlsdGVyUHJvcE5hbWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgIHJlcXVlc3RbYWZGaWx0ZXIuZmlsdGVyUHJvcE5hbWVdID0gb3B0VmFsdWU7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGFmRmlsdGVyLmZpbHRlclByb3BOYW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoucHJvcE5hbWUgPSBhZkZpbHRlci5uYW1lO1xyXG4gICAgICAgICAgICAgIHJlcXVlc3RbYWZGaWx0ZXIubmFtZV0gPSBvcHRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gb3B0VmFsdWU7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uRXE7XHJcbiAgICAgICAgICAgIGFycmF5Q3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVxdWVzdC5jcml0ZXJpYSA9IGFycmF5Q3JpdDtcclxuICAgICAgICAgIGlmIChqc29uQ29tcFtqXS5wYXRoICE9IHVuZGVmaW5lZCAmJiBqc29uQ29tcFtqXS5wYXRoICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuZGRsRW52aXJvbm1lbnRzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50cy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zZWFyY2hJbnB1dC5kZGxFbnZpcm9ubWVudHMubGVuZ3RoOyB5KyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChqc29uQ29tcFtqXS5uYW1lID09IHRoaXMuc2VhcmNoSW5wdXQuZGRsRW52aXJvbm1lbnRzW3ldLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAganNvbkNvbXBbal0uZnVsbHBhdGggPSB0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50c1t5XS5lbnZpcm9ubWVudCArIGpzb25Db21wW2pdLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50cy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoanNvbkNvbXAuY29tcG9uZW50W2pdLmVudmlyb25tZW50ID09IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS5lbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgICBqc29uQ29tcC5jb21wb25lbnRbal0uZnVsbHBhdGggPSB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHNbeV0udXJsICsganNvbkNvbXAuY29tcG9uZW50W2pdLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBqc29uQ29tcFtqXS5mdWxscGF0aCA9IGpzb25Db21wW2pdLnVybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGpzb25Db21wW2pdLmZ1bGxwYXRoID0ganNvbkNvbXBbal0udXJsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXNvbHZlT2JqZWN0KGpzb25Db21wW2pdLCBqc29uQ29tcFtqXS5mdWxscGF0aCwgcmVxdWVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hDYXNlKGNvbmRMaXN0KSB7XHJcbiAgICB2YXIgY29uZGl0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25kTGlzdC5jb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBpZHggPSB0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlLmZpbmRJbmRleCh4ID0+IHgucHJvcGVydHkgPT0gY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eSk7XHJcbiAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiRVFcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID09IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPT0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIk5FUVwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgIT0gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSAhPSB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiR1RcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID4gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA+IHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJHVEVcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID49IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPj0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkxUXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA8IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPCB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiTFRFXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA8PSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciB1c2VybmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlcm5hbWVcIik7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlIDw9IHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZGl0aW9uO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgRGVjcnlwdFN0cmluZyhjaGlwcGVyVGV4dDogc3RyaW5nLCBjaGlwcGVyS2V5OiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgY2hpcHBlcktleSA9PSB1bmRlZmluZWQgfHwgY2hpcHBlcktleS50cmltKCkgPT0gJycgfHxcclxuICAgICAgY2hpcHBlclRleHQgPT0gdW5kZWZpbmVkIHx8IGNoaXBwZXJUZXh0LnRyaW0oKSA9PSAnJ1xyXG4gICAgKSByZXR1cm4gY2hpcHBlclRleHQ7XHJcbiAgICB2YXIgY2hpcHBlcktleUFyciA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGNoaXBwZXJLZXkpO1xyXG4gICAgdmFyIGl2ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcclxuICAgIHZhciBkZWNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaGlwcGVyVGV4dCwgY2hpcHBlcktleUFyciwgeyBpdjogaXYgfSk7XHJcbiAgICB2YXIgcGxhaW5UZXh0ID0gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgIHJldHVybiBwbGFpblRleHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
839
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWNzZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFkaW5zL3Vjc2VhcmNoLyIsInNvdXJjZXMiOlsibGliL3Vjc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFxQixNQUFNLDhCQUE4QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUF1QnRD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Q0FBZTs7SUFDZixvQ0FBYTs7SUFDYix1Q0FBbUI7Ozs7O0lBRVAsaUNBQXdCOzs7OztJQUFFLHlDQUFrQzs7Ozs7SUFBRSx1Q0FBNkI7Ozs7O0lBQ3JHLHNDQUFtQzs7SUFBRSxtQ0FBNEI7Ozs7O0lBQUUsMENBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdCwgUmVuZGVyZXIyLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5wdXRTZWFyY2hPYmogfSBmcm9tICcuL21vZGVsL0lucHV0U2VhcmNoT2JqLk1vZGVsJztcclxuaW1wb3J0IHsgQ3JpdGVyaWFPYmogfSBmcm9tICcuL21vZGVsL0NyaXRlcmlhT2JqLm1vZGVsJztcclxuaW1wb3J0IHsgUmVxdWVzdENyaXRlcmlhT2JqIH0gZnJvbSAnLi9tb2RlbC9SZXF1ZXN0Q3JpdGVyaWFPYmoubW9kZWwnO1xyXG5pbXBvcnQgeyBBZEluc0NvbnN0YW50IH0gZnJvbSAnLi9tb2RlbC9BZEluc3RDb25zdGFudCc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEV4Y2VsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXhjZWwtc2VydmljZS9leGNlbC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUsIHN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgRXhwb3J0VHlwZUNvbnN0YW50LCBLZXlWYWx1ZVJlcG9ydE9iaiB9IGZyb20gJy4vbW9kZWwvS2V5VmFsdWVSZXBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZSc7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1VQ1NlYXJjaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Vjc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91Y3NlYXJjaC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRXhjZWxTZXJ2aWNlXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdjaGFuZ2VEaXZTaXplJywgW1xyXG4gICAgICBzdGF0ZSgnaW5pdGlhbCcsIHN0eWxlKHtcclxuICAgICAgICBoZWlnaHQ6ICcqJyxcclxuICAgICAgICBvcGFjaXR5OiAnMScsXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJ2ZpbmFsJywgc3R5bGUoe1xyXG4gICAgICAgIGhlaWdodDogJzBweCcsXHJcbiAgICAgICAgb3BhY2l0eTogJzAnLFxyXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdpbml0aWFsPT5maW5hbCcsIGFuaW1hdGUoJzMwMG1zJykpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdmaW5hbD0+aW5pdGlhbCcsIGFuaW1hdGUoJzMwMG1zJykpXHJcbiAgICBdKSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVQ1NlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gdHJ1cyBuYWQsIGJpc2EgZ2Ega2FsbyBtaXNhbGthbiBndyBtYXUgYmlraW5cclxuICAvLyBrYWxvIGxvZ2luIGRpIGNhYmFuZyBJc1NlbGVjdE9uZTogdHJ1ZVxyXG4gIC8vIGthbG8gbG9naW4gZGkgSE8sIElzU2VsZWN0T25lOiBmYWxzZVxyXG4gIEBWaWV3Q2hpbGQoJ2VuamlGb3JtJykgc2V0IGNvbnRlbnQoY29udGVudDogTmdGb3JtKSB7XHJcbiAgICBpZiAoY29udGVudCkgeyAvLyBpbml0aWFsbHkgc2V0dGVyIGdldHMgY2FsbGVkIHdpdGggdW5kZWZpbmVkXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IGNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdmb3JtSWRTZWFyY2gnKSBteUZvcm06IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KCkgc2VhcmNoSW5wdXQ6IElucHV0U2VhcmNoT2JqID0gbmV3IElucHV0U2VhcmNoT2JqKCk7XHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xyXG4gIEBJbnB1dCgpIGlzUmVwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIHJlc3VsdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGdlblJwdDogRXZlbnRFbWl0dGVyPHsgRXhwb3J0VHlwZTogbnVtYmVyLCBFbFJlZjogRWxlbWVudFJlZiB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBFeHBvcnRUeXBlOiBudW1iZXIsIEVsUmVmOiBFbGVtZW50UmVmIH0+KCk7XHJcbiAgRXhwb3J0VHlwZUxpc3Q6IEFycmF5PEtleVZhbHVlUmVwb3J0T2JqPiA9IFtcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfUERGLFxyXG4gICAgICB2YWx1ZTogXCJQREZcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfWExTLFxyXG4gICAgICB2YWx1ZTogXCJFeGNlbCAyMDAzXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogRXhwb3J0VHlwZUNvbnN0YW50LkVYUF9UWVBFX1hMU1gsXHJcbiAgICAgIHZhbHVlOiBcIkV4Y2VsIDIwMDdcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfRE9DLFxyXG4gICAgICB2YWx1ZTogXCJEb2N1bWVudFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IEV4cG9ydFR5cGVDb25zdGFudC5FWFBfVFlQRV9ET0NYLFxyXG4gICAgICB2YWx1ZTogXCJEb2N1bWVudCBYTUxcIlxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICBFeHBvcnRUeXBlOiBudW1iZXIgPSAwO1xyXG5cclxuICBwYWdlTm93OiBhbnkgPSAxO1xyXG4gIGNvbmZpZ3VyYXRpb246IGFueTtcclxuICBleHBvcnREYXRhOiBhbnk7XHJcbiAgRXhjZWxEYXRhOiBhbnk7XHJcbiAgaXNEYXRhTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBCaXNEdDogc3RyaW5nO1xyXG5cclxuICBjdXJyZW50U3RhdGUgPSAnaW5pdGlhbCc7XHJcblxyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxuICBjb3VudEZvcm0gPSAwO1xyXG4gIGZvcm1hdHRlZEFtb3VudCA9ICcnO1xyXG4gIGFtb3VudCA9IDA7XHJcbiAgYXBpVXJsOiBzdHJpbmc7XHJcbiAgYXJyQ3JpdDogYW55O1xyXG4gIHNlYXJjaEZvcm06IE5nRm9ybTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGV4Y2VsU2VydmljZTogRXhjZWxTZXJ2aWNlLCBwcml2YXRlIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50LCBwdWJsaWMgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLCBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGNoYW5nZVN0YXRlKCkge1xyXG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gJ2luaXRpYWwnID8gJ2ZpbmFsJyA6ICdpbml0aWFsJztcclxuICAgIHRoaXMuaXNIaWRkZW4gPSB0aGlzLmlzSGlkZGVuID09PSBmYWxzZSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJ1Y3NlYXJjaFwiKTtcclxuICAgIHRoaXMuYXBpVXJsID0gdGhpcy5zZWFyY2hJbnB1dC5lbnZpcm9tZW50VXJsICsgdGhpcy5zZWFyY2hJbnB1dC5hcGlRcnlQYWdpbmc7XHJcbiAgICB0aGlzLmFyckNyaXQgPSB0aGlzLnNlYXJjaElucHV0LmFyckNyaXRPYmo7XHJcbiAgICBsZXQganMgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICBqcy50ZXh0ID0gYFxyXG4gICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChcIiNmbGlwXCIpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgJChcIiNwYW5lbFwiKS5zbGlkZVRvZ2dsZShcInNsb3dcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgYDtcclxuICAgIHRoaXMuX3JlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCBqcyk7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldCgnQnVzaW5lc3NEYXRlUmF3Jyk7XHJcbiAgICB0aGlzLkJpc0R0ID0gdGhpcy5EZWNyeXB0U3RyaW5nKHZhbHVlLCBcIkFkSW5zRk9VMTIzNDU2NzhcIik7XHJcbiAgICB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5nZXRKU09OKHRoaXMuc2VhcmNoSW5wdXQuX3VybCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBkYXRhO1xyXG4gICAgICB0aGlzLmV4cG9ydERhdGEgPSBkYXRhLmV4cG9ydEV4Y2VsO1xyXG4gICAgICBpZiAoZGF0YS5leHBvcnRUeXBlTGlzdCAhPSB1bmRlZmluZWQgJiYgZGF0YS5leHBvcnRUeXBlTGlzdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgIHRoaXMuRXhwb3J0VHlwZUxpc3QgPSBkYXRhLmV4cG9ydFR5cGVMaXN0O1xyXG4gICAgICAgIHRoaXMuRXhwb3J0VHlwZSA9IHRoaXMuRXhwb3J0VHlwZUxpc3RbMF0ua2V5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvdW50Rm9ybSA9IGRhdGEuY29tcG9uZW50Lmxlbmd0aDtcclxuICAgICAgdGhpcy5pc0RhdGFMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQudGl0bGUgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQudGl0bGUgIT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi50aXRsZSA9IHRoaXMuc2VhcmNoSW5wdXQudGl0bGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb3VudEZvcm07IGkrKykge1xyXG4gICAgICAgIC8vaW5pIGthbGF1IGRhdGFueWEgZGkgbG9hZCBkYXJpIFVSTFxyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5pc0Zyb21VUkwgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICAgICAgICB2YXIgYXJyYXlDcml0ID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgICB2YXIgY3JpdGVyaWFPYmplY3QgPSBuZXcgQ3JpdGVyaWFPYmooKTtcclxuICAgICAgICAgIGNyaXRlcmlhT2JqZWN0LkRhdGFUeXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgICBjcml0ZXJpYU9iamVjdC5wcm9wTmFtZSA9IGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcE5hbWU7XHJcbiAgICAgICAgICBjcml0ZXJpYU9iamVjdC52YWx1ZSA9IGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcFZhbHVlO1xyXG4gICAgICAgICAgY3JpdGVyaWFPYmplY3QucmVzdHJpY3Rpb24gPSBcImVxXCI7XHJcbiAgICAgICAgICBhcnJheUNyaXQucHVzaChjcml0ZXJpYU9iamVjdCk7XHJcbiAgICAgICAgICByZXF1ZXN0LmNyaXRlcmlhID0gYXJyYXlDcml0O1xyXG4gICAgICAgICAgcmVxdWVzdFtkYXRhLmNvbXBvbmVudFtpXS5jcml0ZXJpYVByb3BOYW1lXSA9IGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcFZhbHVlO1xyXG5cclxuICAgICAgICAgIC8vIFBlbmdlY2VrYW4gcGVuZ2d1bmFhbiB1cmwgYXRhdSBwYXRoXHJcbiAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0ucGF0aCAhPSB1bmRlZmluZWQgJiYgZGF0YS5jb21wb25lbnRbaV0ucGF0aCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50cyAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWFyY2hJbnB1dC5kZGxFbnZpcm9ubWVudHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2VhcmNoSW5wdXQuZGRsRW52aXJvbm1lbnRzLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0ubmFtZSA9PSB0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50c1t5XS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLmZ1bGxwYXRoID0gdGhpcy5zZWFyY2hJbnB1dC5kZGxFbnZpcm9ubWVudHNbeV0uZW52aXJvbm1lbnQgKyBkYXRhLmNvbXBvbmVudFtpXS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50cy5sZW5ndGg7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmVudmlyb25tZW50ID09IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS5lbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5mdWxscGF0aCA9IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS51cmwgKyBkYXRhLmNvbXBvbmVudFtpXS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0uZnVsbHBhdGggPSBkYXRhLmNvbXBvbmVudFtpXS51cmw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5mdWxscGF0aCA9IGRhdGEuY29tcG9uZW50W2ldLnVybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vbGVtcGFyIG9iamVjdG55YSBzZWthbGlhbiBzYW1hIHVybG55YSwgbm50aSBkaSBiaW5kIGRpIGRhbGVtIGthcmVuYSBtYXNhbGFoIGRpIGFzeW5jbnlhXHJcbiAgICAgICAgICAvL2JpYXIgdGlhcCBmdW5jdGlvbiBhZGEgc3RhdGUybnlhIHNlbmRpcmlcclxuICAgICAgICAgIHRoaXMucmVzb2x2ZU9iamVjdChkYXRhLmNvbXBvbmVudFtpXSwgZGF0YS5jb21wb25lbnRbaV0uZnVsbHBhdGgsIHJlcXVlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgPT0gXCJudW1lcmljXCIpIHtcclxuICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gcGFyc2VGbG9hdChkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSkudG9Mb2NhbGVTdHJpbmcoJ2VuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3BlbmdlY2VrYW4gdGFuZ2dhbFxyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS50eXBlID09IFwiZGF0ZXBpY2tlclwiKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0udmFsdWUuaW5jbHVkZXMoXCJCRFwiKSkge1xyXG4gICAgICAgICAgICBsZXQgYnVzaW5lc3NEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuQmlzRHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGJ1c2luZXNzRGF0ZSA9IG5ldyBEYXRlKHRoaXMuQmlzRHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLmNoYXJBdCgyKTtcclxuICAgICAgICAgICAgdmFyIGRhdGVTaG93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09IFwiLVwiKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXBNaW51cyA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLnNwbGl0KFwiLVwiLCAyKTtcclxuICAgICAgICAgICAgICB2YXIgbnVtRGF5ID0gcGFyc2VJbnQodGVtcE1pbnVzWzFdKTtcclxuICAgICAgICAgICAgICBkYXRlU2hvdy5zZXREYXRlKGJ1c2luZXNzRGF0ZS5nZXREYXRlKCkgLSBudW1EYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwiK1wiKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXBNaW51cyA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLnNwbGl0KFwiK1wiLCAyKTtcclxuICAgICAgICAgICAgICB2YXIgbnVtRGF5ID0gcGFyc2VJbnQodGVtcE1pbnVzWzFdKTtcclxuICAgICAgICAgICAgICBkYXRlU2hvdy5zZXREYXRlKGJ1c2luZXNzRGF0ZS5nZXREYXRlKCkgKyBudW1EYXkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRhdGVTaG93ID0gYnVzaW5lc3NEYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkYXRlVGV4dCA9IGZvcm1hdERhdGUoZGF0ZVNob3csICdtbS1kZC15eXl5JywgJ2VuLVVTJylcclxuICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0udmFsdWUgPSBkYXRlVGV4dDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEpTT04odXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwb3N0SlNPTih1cmw6IHN0cmluZywgY3JpdGVyaWE6IGFueSA9IG51bGwpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgY3JpdGVyaWEpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQ2xpY2soKSB7XHJcbiAgICBsZXQgb3JkZXIgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5vcmRlcmJ5ICE9IG51bGwpIHtcclxuICAgICAgb3JkZXIgPSB7XHJcbiAgICAgICAga2V5OiB0aGlzLmNvbmZpZ3VyYXRpb24ub3JkZXJieS5rZXksXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbi5vcmRlcmJ5LnZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucGFnZU5vdyA9IDE7XHJcbiAgICB0aGlzLnNlYXJjaCh0aGlzLmFwaVVybCwgdGhpcy5wYWdlTm93LCB0aGlzLnBhZ2VTaXplLCBvcmRlciwgdGhpcy5hcnJDcml0KTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLnJlc2V0Rm9ybSgpO1xyXG4gICAgdGhpcy5FeHBvcnRUeXBlID0gdGhpcy5FeHBvcnRUeXBlTGlzdFswXS5rZXk7XHJcbiAgICB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoKGFwaVVybDogc3RyaW5nLCBwYWdlTm86IG51bWJlciwgcm93UGVyUGFnZTogbnVtYmVyLCBvcmRlckJ5OiBhbnksIGFkZENyaXQ6IENyaXRlcmlhT2JqW10gPSBuZXcgQXJyYXkoKSkge1xyXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICBsZXQgYXJyQ3JpdCA9IG5ldyBBcnJheSgpO1xyXG4gICAgbGV0IElzUXVlcnlJbiA9IGZhbHNlO1xyXG4gICAgbGV0IElzQnJlYWsgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBJbmplY3Qgd2hlcmVRdWVyeSBmb3Igd2hlcmUgY3JpdGVyaWFcclxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWUgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmcud2hlcmVRdWVyeSA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zZWFyY2hJbnB1dC53aGVyZVZhbHVlLmxlbmd0aDsgeCsrKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5c3RyaW5nLndoZXJlUXVlcnkucHVzaCh0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWVbeF0udmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0LnBhZ2VObyA9IHBhZ2VObztcclxuICAgIHJlcXVlc3Qucm93UGVyUGFnZSA9IHJvd1BlclBhZ2U7XHJcbiAgICByZXF1ZXN0Lm9yZGVyQnkgPSBvcmRlckJ5O1xyXG4gICAgcmVxdWVzdC5xdWVyeVN0cmluZyA9IHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeXN0cmluZztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRGb3JtOyBpKyspIHtcclxuICAgICAgbGV0IGNyaXRPYmogPSBuZXcgQ3JpdGVyaWFPYmooKTtcclxuICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMubXlGb3JtLm5hdGl2ZUVsZW1lbnRbaV07XHJcblxyXG4gICAgICAvLyAvLyBwb3B1cCBtZXNzYWdlIGlmIHJlcXVpcmVkXHJcbiAgICAgIC8vIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVkJykgIT0gbnVsbCAmJiBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVkJykgPT0gXCJ0cnVlXCIpIHtcclxuICAgICAgLy8gICBsZXQgdmFsID0gY29tcG9uZW50LnZhbHVlLnRyaW0oKTtcclxuICAgICAgLy8gICBpZiAodmFsID09IFwiXCIpIHtcclxuICAgICAgLy8gICAgIElzQnJlYWsgPSB0cnVlO1xyXG4gICAgICAvLyAgICAgbGV0IGxhYmVsID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnbGFiZWwnKTtcclxuICAgICAgLy8gICAgIHRoaXMudG9hc3RyLndhcm5pbmcoXCJQbGVhc2UgaW5wdXQgXCIgKyBsYWJlbCk7XHJcbiAgICAgIC8vICAgICBicmVhaztcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGNyaXRPYmouRGF0YVR5cGUgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKTtcclxuICAgICAgLy9Jbmkga2h1c3VzIGthbGF1IGRhcmkgRHJvcCBEb3duXHJcbiAgICAgIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdxdWVyeS1pbicpICE9IG51bGwgJiYgY29tcG9uZW50LmdldEF0dHJpYnV0ZSgncXVlcnktaW4nKSA9PSBcInRydWVcIikge1xyXG4gICAgICAgIElzUXVlcnlJbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgSXNRdWVyeUluID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbXBvbmVudC52YWx1ZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudC5ub2RlTmFtZSA9PSAnU0VMRUNUJykge1xyXG4gICAgICAgICAgbGV0IGRkbCA9IGNvbXBvbmVudC5vcHRpb25zO1xyXG4gICAgICAgICAgbGV0IHRleHQgPSBkZGxbZGRsLnNlbGVjdGVkSW5kZXhdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgIGlmICh0ZXh0ID09IFwib25lXCIpIHtcclxuICAgICAgICAgICAgSXNCcmVhayA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBsYWJlbCA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2xhYmVsJyk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoXCJQbGVhc2Ugc2VsZWN0IFwiICsgbGFiZWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0ZXh0ICE9IFwiYWxsXCIgJiYgdGV4dCAhPSBcIm9uZVwiKSB7XHJcbiAgICAgICAgICAgIC8vS2FsYXUgRGFyaSBEcm9wZG93biB1ZGFoIHBhc3RpIHBha2UgRXFcclxuICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25FcTtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5uYW1lO1xyXG4gICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gdGV4dDtcclxuICAgICAgICAgICAgYXJyQ3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09IFwiYWxsXCIgJiYgSXNRdWVyeUluID09IHRydWUgJiYgY29tcG9uZW50Lm9wdGlvbnMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgbGV0IGRkbExpc3QgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBjb21wb25lbnQub3B0aW9ucy5sZW5ndGg7IHgrKykge1xyXG4gICAgICAgICAgICAgIGlmICh4ICE9IDApIHtcclxuICAgICAgICAgICAgICAgIGRkbExpc3QucHVzaChjb21wb25lbnQub3B0aW9uc1t4XS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZGxMaXN0Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25JbjtcclxuICAgICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gY29tcG9uZW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5saXN0VmFsdWUgPSBkZGxMaXN0O1xyXG4gICAgICAgICAgICAgIGFyckNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vS2FsYXUgYWRhIFBlcmNlbnQgbWFrYSB5YW5nIGRpcGFrZSBubnRpIGFkYWxhaCBSZXN0cmljdGlvbnMgTGlrZVxyXG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5uYW1lICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5uYW1lO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3JpdE9iai52YWx1ZSA9IGNvbXBvbmVudC52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnZhbHVlLmluY2x1ZGVzKFwiJVwiKSkge1xyXG4gICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkxpa2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2thbGF1IGNvbXBvbmVudG55YSBEYXRlLCByZXN0cmljdGlvbnNueWEgbGdzZyBhbWJpbCBkYXJpIHByb3BlcnR5IEpTT05ueWFcclxuICAgICAgICAgIGVsc2UgaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdHJpY3Rpb24nKSAhPSBcIlwiICYmIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdHJpY3Rpb24nKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJlc3RyaWN0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKSA9PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gcGFyc2VGbG9hdChjb21wb25lbnQudmFsdWUucmVwbGFjZSgvLC9nLCAnJykpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNyaXRPYmoucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxJS0VcIikge1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoudmFsdWUgPSBcIiVcIiArIGNvbXBvbmVudC52YWx1ZS50cmltKCkgKyBcIiVcIjtcclxuICAgICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkxpa2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uRXFcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFyckNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoSXNCcmVhaykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFkZENyaXQgIT0gbnVsbCAmJiBhZGRDcml0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoYWRkQ3JpdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkQ3JpdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgYXJyQ3JpdC5wdXNoKGFkZENyaXRbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dCAhPSBudWxsIHx8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWFyY2hJbnB1dC5hZGRDcml0SW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGFyckNyaXQucHVzaCh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dFtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dCAhPSBudWxsIHx8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJyQ3JpdC5wdXNoKHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0W2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlcXVlc3QuY3JpdGVyaWEgPSBhcnJDcml0O1xyXG5cclxuICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dC5pc0pvaW5FeEFQSSkge1xyXG4gICAgICByZXF1ZXN0LmludGVncmF0aW9uT2JqID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlcXVlc3QuaW50ZWdyYXRpb25PYmogPSB0aGlzLnNlYXJjaElucHV0LmludGVncmF0aW9uT2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaHR0cC5wb3N0KGFwaVVybCwgcmVxdWVzdCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICBsZXQgcXJ5UGFnaW5nID0ge1xyXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcclxuICAgICAgICBwYWdlTm93OiBwYWdlTm9cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhxcnlQYWdpbmcpO1xyXG4gICAgICB0aGlzLnJlc3VsdC5lbWl0KHFyeVBhZ2luZyk7XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgR2VuZXJhdGVSZXBvcnQoKSB7XHJcbiAgICB0aGlzLmdlblJwdC5lbWl0KHsgRXhwb3J0VHlwZTogdGhpcy5FeHBvcnRUeXBlLCBFbFJlZjogdGhpcy5teUZvcm0gfSk7XHJcbiAgfVxyXG5cclxuICBsZXNzVGhhbkZvdXIoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5jb3VudEZvcm0gPiAzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc29sdmVPYmplY3Qob2JqOiBhbnksIHVybDogc3RyaW5nLCBjcml0OiBSZXF1ZXN0Q3JpdGVyaWFPYmogPSBudWxsKSB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLnBvc3RKU09OKHVybCwgY3JpdCk7XHJcbiAgICB2YWwuc3Vic2NyaWJlKHRlbXBEYXRhID0+IHtcclxuICAgICAgb2JqLml0ZW1zVXJsID0gbmV3IEFycmF5KCk7XHJcbiAgICAgIG9iai5pdGVtc1VybCA9IHRlbXBEYXRhLlJldHVybk9iamVjdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtQW1vdW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtYXR0ZWRBbW91bnQgPSBwYXJzZUZsb2F0KGVsZW1lbnQudGFyZ2V0LnZhbHVlKS50b0xvY2FsZVN0cmluZygnZW4nKTtcclxuICAgIC8vIHRvIHNob3cgdGhlIGZvcm1hdHRlZCBhbW91bnQgaW4gdGhlIHRleHRib3guXHJcbiAgICBlbGVtZW50LnRhcmdldC52YWx1ZSA9IHRoaXMuZm9ybWF0dGVkQW1vdW50O1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtVG9EZWNpbWFsKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgZWxlbWVudC50YXJnZXQudmFsdWUgPSBwYXJzZUZsb2F0KGVsZW1lbnQudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnJykpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0QXNYTFNYKCk6IHZvaWQge1xyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICByZXF1ZXN0LnBhZ2VObyA9IDE7XHJcbiAgICByZXF1ZXN0LnJvd1BlclBhZ2UgPSA5OTk5O1xyXG4gICAgcmVxdWVzdC5vcmRlckJ5ID0gbnVsbDtcclxuICAgIHJlcXVlc3QuY3JpdGVyaWEgPSBbXTtcclxuICAgIHJlcXVlc3QucXVlcnlTdHJpbmcgPSB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmc7XHJcblxyXG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5hcGlVcmwsIHJlcXVlc3QpLnN1YnNjcmliZShcclxuICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIHRoaXMuRXhjZWxEYXRhID0gcmVzcG9uc2VbXCJEYXRhXCJdO1xyXG4gICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKHRoaXMuRXhjZWxEYXRhLCAnc2FtcGxlJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUV2ZW50KG9wdFZhbHVlLCBhZkZpbHRlcikge1xyXG4gICAgdmFyIGpzb25Db21wID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFmRmlsdGVyLmFmZmVjdGVkRmlsdGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwganNvbkNvbXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoanNvbkNvbXBbal0ubmFtZSA9PSBhZkZpbHRlci5hZmZlY3RlZEZpbHRlcltpXSkge1xyXG4gICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICAgICAgICB2YXIgYXJyYXlDcml0ID0gbmV3IEFycmF5KCk7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdFZhbHVlICE9IFwiYWxsXCIgJiYgb3B0VmFsdWUgIT0gXCJvbmVcIikge1xyXG4gICAgICAgICAgICB2YXIgY3JpdE9iaiA9IG5ldyBDcml0ZXJpYU9iaigpO1xyXG4gICAgICAgICAgICBjcml0T2JqLkRhdGFUeXBlID0gYWZGaWx0ZXIuZGF0YXR5cGU7XHJcbiAgICAgICAgICAgIGlmIChhZkZpbHRlci5maWx0ZXJQcm9wTmFtZSAhPSB1bmRlZmluZWQgfHwgYWZGaWx0ZXIuZmlsdGVyUHJvcE5hbWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgIHJlcXVlc3RbYWZGaWx0ZXIuZmlsdGVyUHJvcE5hbWVdID0gb3B0VmFsdWU7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGFmRmlsdGVyLmZpbHRlclByb3BOYW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoucHJvcE5hbWUgPSBhZkZpbHRlci5uYW1lO1xyXG4gICAgICAgICAgICAgIHJlcXVlc3RbYWZGaWx0ZXIubmFtZV0gPSBvcHRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gb3B0VmFsdWU7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uRXE7XHJcbiAgICAgICAgICAgIGFycmF5Q3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVxdWVzdC5jcml0ZXJpYSA9IGFycmF5Q3JpdDtcclxuICAgICAgICAgIGlmIChqc29uQ29tcFtqXS5wYXRoICE9IHVuZGVmaW5lZCAmJiBqc29uQ29tcFtqXS5wYXRoICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuZGRsRW52aXJvbm1lbnRzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50cy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zZWFyY2hJbnB1dC5kZGxFbnZpcm9ubWVudHMubGVuZ3RoOyB5KyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChqc29uQ29tcFtqXS5uYW1lID09IHRoaXMuc2VhcmNoSW5wdXQuZGRsRW52aXJvbm1lbnRzW3ldLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAganNvbkNvbXBbal0uZnVsbHBhdGggPSB0aGlzLnNlYXJjaElucHV0LmRkbEVudmlyb25tZW50c1t5XS5lbnZpcm9ubWVudCArIGpzb25Db21wW2pdLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50cy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoanNvbkNvbXAuY29tcG9uZW50W2pdLmVudmlyb25tZW50ID09IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS5lbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgICBqc29uQ29tcC5jb21wb25lbnRbal0uZnVsbHBhdGggPSB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHNbeV0udXJsICsganNvbkNvbXAuY29tcG9uZW50W2pdLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBqc29uQ29tcFtqXS5mdWxscGF0aCA9IGpzb25Db21wW2pdLnVybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGpzb25Db21wW2pdLmZ1bGxwYXRoID0ganNvbkNvbXBbal0udXJsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXNvbHZlT2JqZWN0KGpzb25Db21wW2pdLCBqc29uQ29tcFtqXS5mdWxscGF0aCwgcmVxdWVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hDYXNlKGNvbmRMaXN0KSB7XHJcbiAgICB2YXIgY29uZGl0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25kTGlzdC5jb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciBpZHggPSB0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlLmZpbmRJbmRleCh4ID0+IHgucHJvcGVydHkgPT0gY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eSk7XHJcbiAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiRVFcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID09IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPT0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIk5FUVwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgIT0gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSAhPSB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiR1RcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID4gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA+IHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJHVEVcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID49IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPj0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkxUXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA8IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPCB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiTFRFXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA8PSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciB1c2VybmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlcm5hbWVcIik7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlIDw9IHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZGl0aW9uO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgRGVjcnlwdFN0cmluZyhjaGlwcGVyVGV4dDogc3RyaW5nLCBjaGlwcGVyS2V5OiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgY2hpcHBlcktleSA9PSB1bmRlZmluZWQgfHwgY2hpcHBlcktleS50cmltKCkgPT0gJycgfHxcclxuICAgICAgY2hpcHBlclRleHQgPT0gdW5kZWZpbmVkIHx8IGNoaXBwZXJUZXh0LnRyaW0oKSA9PSAnJ1xyXG4gICAgKSByZXR1cm4gY2hpcHBlclRleHQ7XHJcbiAgICB2YXIgY2hpcHBlcktleUFyciA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGNoaXBwZXJLZXkpO1xyXG4gICAgdmFyIGl2ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcclxuICAgIHZhciBkZWNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaGlwcGVyVGV4dCwgY2hpcHBlcktleUFyciwgeyBpdjogaXYgfSk7XHJcbiAgICB2YXIgcGxhaW5UZXh0ID0gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgIHJldHVybiBwbGFpblRleHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==