sf-crud 12.1.1 → 12.3.0
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.
- package/bundles/sf-crud.umd.js +288 -31
- package/bundles/sf-crud.umd.js.map +1 -1
- package/esm2015/lib/components/control/control.component.js +23 -9
- package/esm2015/lib/components/form/form.component.js +27 -5
- package/esm2015/lib/components/registro/registro.component.js +180 -15
- package/esm2015/lib/directives/format-address.pipe.js +22 -0
- package/esm2015/lib/sf-crud.module.js +6 -3
- package/esm2015/lib/sf-crud.service.js +30 -1
- package/esm2015/lib/shared/models/shema.model.js +1 -1
- package/esm2015/lib/shared/services/step.service.js +2 -4
- package/fesm2015/sf-crud.js +280 -32
- package/fesm2015/sf-crud.js.map +1 -1
- package/lib/components/control/control.component.d.ts +4 -1
- package/lib/components/form/form.component.d.ts +6 -1
- package/lib/components/registro/registro.component.d.ts +15 -8
- package/lib/directives/format-address.pipe.d.ts +7 -0
- package/lib/sf-crud.module.d.ts +78 -77
- package/lib/sf-crud.service.d.ts +15 -0
- package/lib/shared/models/shema.model.d.ts +1 -0
- package/lib/shared/services/general.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -17,6 +17,7 @@ import * as i11 from "primeng/toast";
|
|
|
17
17
|
import * as i12 from "@angular/common";
|
|
18
18
|
import * as i13 from "primeng/tooltip";
|
|
19
19
|
import * as i14 from "primeng/ripple";
|
|
20
|
+
import * as i15 from "../../directives/format-address.pipe";
|
|
20
21
|
export class FormComponent {
|
|
21
22
|
constructor(messageService, crudService, domSanitizer, stepService, adoService, jwtService) {
|
|
22
23
|
this.messageService = messageService;
|
|
@@ -26,6 +27,7 @@ export class FormComponent {
|
|
|
26
27
|
this.adoService = adoService;
|
|
27
28
|
this.jwtService = jwtService;
|
|
28
29
|
this.isDialog = false;
|
|
30
|
+
this.isAddressDialog = false;
|
|
29
31
|
this.controlsLoaded = false;
|
|
30
32
|
this.isMobile = false;
|
|
31
33
|
this.loading = { inProgress: true, target: undefined };
|
|
@@ -41,6 +43,8 @@ export class FormComponent {
|
|
|
41
43
|
}
|
|
42
44
|
ngOnInit() {
|
|
43
45
|
try {
|
|
46
|
+
if (this.isAddressDialog)
|
|
47
|
+
this.currentAddress = this.data.currentValue;
|
|
44
48
|
this.jwtService.idKatios = this.crudService.idKatios;
|
|
45
49
|
this.jwtService.servidorIntegraciones = this.crudService.environment.ServidorIntegraciones;
|
|
46
50
|
this.adoService.servidorIntegraciones = this.crudService.environment.ServidorIntegraciones;
|
|
@@ -69,6 +73,9 @@ export class FormComponent {
|
|
|
69
73
|
this.controlsLoaded = false;
|
|
70
74
|
this.controls = [];
|
|
71
75
|
this.values = [];
|
|
76
|
+
//address
|
|
77
|
+
if (this.isAddressDialog)
|
|
78
|
+
this.newAddress = this.crudService.armarNuevaDireccion("string", this.data, this.crudService.getValue("$..separador", this.data));
|
|
72
79
|
this.uiEsquema.elements.forEach((layout, i) => {
|
|
73
80
|
var _a;
|
|
74
81
|
let isVisible = layout.conditions ? this.crudService.isConditionsCompleted(layout.conditions, this.registro.conditions || [], this.data) : true;
|
|
@@ -90,9 +97,17 @@ export class FormComponent {
|
|
|
90
97
|
this.values[i].push(undefined);
|
|
91
98
|
}
|
|
92
99
|
else {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
try {
|
|
101
|
+
this.controls[i].push(this.crudService.getControl(element.scope, this.esquema));
|
|
102
|
+
this.controls[i][j].scope = element.scope;
|
|
103
|
+
this.values[i].push(this.crudService.getValue(element.scope, this.data));
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
console.log(element);
|
|
107
|
+
console.error(e);
|
|
108
|
+
console.log(this.controls[i]);
|
|
109
|
+
console.log(this.values[i]);
|
|
110
|
+
}
|
|
96
111
|
}
|
|
97
112
|
});
|
|
98
113
|
});
|
|
@@ -199,6 +214,9 @@ export class FormComponent {
|
|
|
199
214
|
addObjectArray(element) {
|
|
200
215
|
this.stepService.addCustomChildrenEvent("onClickedAddButton", { element });
|
|
201
216
|
}
|
|
217
|
+
openPopUpDireccion(scope) {
|
|
218
|
+
this.stepService.addCustomChildrenEvent("onClickedAddress", { scope });
|
|
219
|
+
}
|
|
202
220
|
onStateDocument(state) {
|
|
203
221
|
this.data.pdf.signed = state.toUpperCase() == "FIRMADO";
|
|
204
222
|
}
|
|
@@ -244,7 +262,7 @@ export class FormComponent {
|
|
|
244
262
|
}
|
|
245
263
|
}
|
|
246
264
|
FormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormComponent, deps: [{ token: i1.MessageService }, { token: i2.SfCrudService }, { token: i3.DomSanitizer }, { token: i4.StepService }, { token: i5.AdoService }, { token: i5.JWTService }], target: i0.ɵɵFactoryTarget.Component });
|
|
247
|
-
FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FormComponent, selector: "app-form", inputs: { uiEsquema: "uiEsquema", esquema: "esquema", data: "data", isDialog: "isDialog" }, viewQueries: [{ propertyName: "tooltips", predicate: Tooltip, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"controlsLoaded\" class=\"frm-container\">\r\n <div *ngFor=\"let element of uiEsquema.elements; let i = index\" [class]=\"element?.class\" #a>\r\n <ng-container [ngSwitch]=\"element.type\" *ngIf=\"visible[i][0]\">\r\n <div class=\"label\" *ngSwitchCase=\"'Label'\" [style]=\"element?.style\">\r\n {{element?.label}}\r\n </div>\r\n <ng-container *ngSwitchCase=\"'HorizontalLayout'\">\r\n <div *ngFor=\"let el of element.elements; let j =index\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\" *ngIf=\"visible[i][j]\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"controls[i][j]\" [label]=\"el.label\"\r\n [value]=\"values[i][j]\" (setValue)=\"setValue($event, el.scope, i, j)\"\r\n (sendNotification)=\"sendNotification($event)\"\r\n (sendObject)=\"applyValuesFromObject($event)\"></sf-control>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'VerticalLayout'\">\r\n <div *ngFor=\"let el of element.elements; let j =index\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\" *ngIf=\"visible[i][j]\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"controls[i][j]\" [label]=\"el.label\"\r\n [value]=\"values[i][j]\" (setValue)=\"setValue($event, el.scope, i, j)\"\r\n (sendNotification)=\"sendNotification($event)\"\r\n (sendObject)=\"applyValuesFromObject($event)\"></sf-control>\r\n <div *ngSwitchCase=\"'PDF'\" class=\"pdf\">\r\n <iframe [src]=\"values[i][j]\" frameborder=\"0\" allow=\"geolocation *; camera *;\"></iframe>\r\n </div>\r\n <div *ngSwitchCase=\"'PDF-SIGN'\">\r\n <sf-sign [allowDownload]=\"true\" [idkatios]=\"idKatios\" [tdoc]=\"data.pdf.tdoc\" [ndoc]=\"data.pdf.ndoc\"\r\n [idDocument]=\"data.pdf.id\" [typeDocument]=\"data.pdf.idDoc\"\r\n (stateDocument)=\"onStateDocument($event)\"></sf-sign>\r\n </div>\r\n <ng-container *ngSwitchCase=\"'SIMULADOR'\">\r\n <sf-simulador [simulador]=\"data\" [otherToolTips]=\"data.otherTooltips\"\r\n (simuladorChange)=\"onSimuladorChange($event)\" (enProceso)=\"emitLoadingForm($event)\"></sf-simulador>\r\n </ng-container>\r\n\r\n <div *ngSwitchCase=\"'ADO'\" class=\"buttons\">\r\n <p-button *ngIf=\"!data?.ADO?.dataProceso?.idProceso\" [ngStyle]=\"el?.ngStyle\" (click)=\"goToADO()\" label=\"Validar identidad\"></p-button>\r\n </div>\r\n <div *ngSwitchCase=\"'ADO'\">\r\n <div *ngIf=\"data?.ADO?.dataProceso?.idProceso\">\r\n <div class=\"data-ado-container\">\r\n <ng-container *ngIf=\"proceso\">\r\n <i *ngIf=\"proceso?.respuestaProceso?.EsExitoso === true\" pTooltip=\"Validado\" tooltipPosition=\"top\" id=\"Validado\" class=\"pi pi-user\" style=\"color: green\"\r\n (touchstart)=\"onTouchDescription('Validado', false)\" (touchend)=\"onUnTouchDescription('Validado')\"></i>\r\n <i *ngIf=\"proceso?.respuestaProceso?.EsExitoso === false\" pTooltip=\"No validado\" tooltipPosition=\"top\" id=\"No-Validado\" class=\"pi pi-user\" style=\"color: red\"\r\n (touchstart)=\"onTouchDescription('No-Validado', false)\" (touchend)=\"onUnTouchDescription('No-Validado')\"></i>\r\n <i *ngIf=\"!proceso?.respuestaProceso\" pTooltip=\"Sin validar\" tooltipPosition=\"top\" class=\"pi pi-user\" id=\"Sin-Validar\" style=\"color: gray\"\r\n (touchstart)=\"onTouchDescription('Sin-Validar', false)\" (touchend)=\"onUnTouchDescription('Sin-Validar')\"></i>\r\n </ng-container>\r\n <div class=\"buttons\">\r\n <button pButton icon=\"pi pi-external-link\" (click)=\"goToADO()\" pTooltip=\"Abrir\" [disabled]=\"!proceso\"></button>\r\n <button pButton icon=\"pi pi-copy\" (click)=\"copyToClipboard(proceso.id)\" pTooltip=\"Copiar\" [disabled]=\"!proceso\"></button>\r\n <button pButton icon=\"pi pi-refresh\" (click)=\"refreshIntegracion(proceso.id)\" pTooltip=\"Refrescar\" [disabled]=\"!proceso\"></button>\r\n </div>\r\n </div>\r\n <p class=\"result-ado\" *ngIf=\"proceso && !proceso.respuestaProceso && proceso.estado == 'PROCESANDO'\">Procesando</p>\r\n <p class=\"result-ado\" *ngIf=\"proceso && proceso.respuestaProceso && proceso.estado == 'TERMINADO'\">{{proceso.respuestaProceso.Detalle ?? proceso.respuestaProceso.Mensaje}}</p>\r\n </div>\r\n </div>\r\n <ng-container *ngSwitchCase=\"'Table'\">\r\n <p-table [value]=\"values[i][j]\" [columns]=\"controls[i][j].config.columns\">\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <button pButton pRipple icon=\"pi pi-plus\" (click)=\"addObjectArray(el)\"\r\n class=\"p-button-success\" [disabled]=\"controls[i][j].disabled === true\"></button>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{col.label}}\r\n </th>\r\n <ng-container>\r\n <th></th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr>\r\n <ng-container *ngFor=\"let col of columns\" [ngSwitch]=\"col.type\">\r\n <ng-container *ngSwitchCase=\"'control'\">\r\n <sf-control [control]=\"extracControlFromTableElements(i, j, col)\" [label]=\"\"\r\n [value]=\"extracValueFromTableElements(i, j, rowIndex, col)\"\r\n (sendNotification)=\"sendNotification($event)\"\r\n (sendObject)=\"applyValuesFromObject($event)\"\r\n (setValue)=\"setValue($event, extracValueFromTableElements(i, j, rowIndex, col).scope, i, j)\"\r\n [showTempValue]=\"true\"\r\n >\r\n </sf-control>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <td>{{rowData[col.col]}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'currency:USD'\">\r\n <td>{{rowData[col.col] | currency: 'USD'}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date:yyyy-mm-dd'\">\r\n <td>{{rowData[col.col] | date: 'yyyy-mm-dd'}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date:dd/mm/yyyy'\">\r\n <td>{{rowData[col.col] | date: 'dd/MM/yyyy'}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <td>\r\n <i *ngIf=\"rowData[col.col]\" class=\"pi pi-check\"></i>\r\n <i *ngIf=\"!rowData[col.col]\" class=\"pi pi-times\"></i>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <td>\r\n <button pButton pRipple type=\"button\"\r\n (click)=\"editRow(el, rowData, rowIndex)\" icon=\"pi pi-pencil\"\r\n class=\"p-button-rounded p-button-info mr-1\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"deleteRow(el, rowIndex)\" [disabled]=\"controls[i][j].disabled === true\"\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-danger\"></button>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<p-toast *ngIf=\"isDialog\"></p-toast>", styles: [":not(.col-12) .label{display:flex;justify-content:center;align-items:center;padding-inline:.5rem;margin-bottom:15px;margin-top:20px;border-radius:13px;font-size:18px;font-size:inherit;background-color:var(--primary-color);text-align:center;color:var(--normal-text-color)}.pdf{display:flex;width:100%;height:80vh;& iframe{width:80%;margin-inline:10%}}.data-ado-container{display:flex;margin-inline:auto;align-items:center;width:-moz-fit-content;width:fit-content;&>*{margin-inline:4px}&>div{display:flex;align-items:center;&>*{margin-inline:4px}}}i.pi-user{font-size:2rem}.result-ado{min-height:1rem;text-align:center}sf-simulador{display:flow-root;width:80%;margin-inline:auto;margin-bottom:35px}sf-sign{display:block;margin-inline:auto;width:80%;& pdf-viewer{min-height:130vh!important;max-height:130vh!important}}.buttons{display:flex;justify-content:space-evenly}.buttons ::ng-deep .p-button.p-component{border-radius:35px}::ng-deep *{box-shadow:none}.frm-container ::ng-deep .p-inputtext:focus,.frm-container ::ng-deep .p-inputtext:active,.frm-container ::ng-deep .p-inputwrapper:focus,.frm-container ::ng-deep .p-inputwrapper:active{border-color:var(--button-color)}.frm-container ::ng-deep .p-button{background-color:var(--button-color);border-color:var(--button-color)}.frm-container ::ng-deep .p-button:hover{background-color:var(--button-color);filter:brightness(85%)}.frm-container ::ng-deep :not(:disabled):active,.frm-container ::ng-deep :not(.p-disabled) .p-inputtext:hover,.frm-container ::ng-deep :not(.p-disabled) .p-inputwrapper:hover,.frm-container ::ng-deep :not(.p-disabled) .p-inputwrapper-focus,.frm-container ::ng-deep .p-radiobutton-box .p-highlight,.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box:not(.p-disabled):hover{border-color:var(--button-color)}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box.p-highlight{background:var(--button-color);border-color:var(--button-color)!important}.frm-container ::ng-deep .p-button.p-button-success,.p-buttonset.p-button-success>.p-button,.p-splitbutton.p-button-success>.p-button{background:var(--button-color);border-color:var(--button-color)!important}@media screen and (max-width:765px){:not(.col-12) .label{height:-moz-fit-content;height:fit-content}.field{margin-bottom:.5rem}.pdf>iframe{width:100%;margin-inline:0}sf-sign{width:100%;& pdf-viewer{min-height:60vh!important;max-height:120vh!important}}sf-simulador{display:block;width:100%;margin-inline:auto}.data-ado-container{text-align:center;& .buttons{max-width:80vw;flex-direction:row}}.buttons{flex-direction:column;align-items:center}}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box:not(.p-disabled):not(.p-highlight):hover{border-color:var(--secondary-color)!important}.frm-container ::ng-deep .p-button.p-button-success:enabled:focus,.p-buttonset.p-button-success>.p-button:enabled:focus,.p-splitbutton.p-button-success>.p-button:enabled:focus{box-shadow:inset 0 0 #fff}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover{color:var(--secondary-color)!important}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box:not(.p-disabled).p-focus{box-shadow:inset 0 0 0 1px var(--secondary-color)!important}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box .p-radiobutton-icon{background-color:#fff}.frm-container ::ng-deep .p-slider:not(.p-disabled):hover{background-color:#e5e7eb}.frm-container ::ng-deep .p-slider{background-color:#e5e7eb}.frm-container ::ng-deep .p-slider:not(.p-disabled):hover .p-slider-range{background-color:var(--primary-color)!important}.frm-container ::ng-deep .p-button:enabled:active{background:var(--secondary-color)!important;border-color:var(--secondary-color)!important}.frm-container ::ng-deep .p-slider:not(.p-disabled):hover .p-slider-handle{border-color:var(--primary-color)!important}.frm-container ::ng-deep .p-button:focus{box-shadow:inset 0 0 0 1px var(--secondary-color)!important}.frm-container ::ng-deep .p-button:enabled:hover{background:var(--secondary-color)!important;border-color:var(--secondary-color)!important}.frm-container ::ng-deep .p-button.p-button-info,.p-buttonset.p-button-info>.p-button,.p-splitbutton.p-button-info>.p-button{background:var(--secondary-color)!important;border:1px solid var(--secondary-color)!important}\n"], components: [{ type: i6.ControlComponent, selector: "sf-control", inputs: ["showTempValue", "control", "label", "value", "appendTo"], outputs: ["setValue", "sendObject"] }, { type: i7.SignComponent, selector: "sf-sign", inputs: ["idkatios", "tdoc", "ndoc", "idDocument", "typeDocument", "allowDownload"], outputs: ["stateDocument", "loading"] }, { type: i8.SfSimuladorComponent, selector: "sf-simulador", inputs: ["simulador", "otherToolTips", "labels"], outputs: ["simuladorChange", "enProceso"] }, { type: i9.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i11.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i12.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i14.Ripple, selector: "[pRipple]" }], pipes: { "currency": i12.CurrencyPipe, "date": i12.DatePipe } });
|
|
265
|
+
FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FormComponent, selector: "app-form", inputs: { uiEsquema: "uiEsquema", esquema: "esquema", data: "data", isDialog: "isDialog", isAddressDialog: "isAddressDialog", separador: "separador" }, viewQueries: [{ propertyName: "tooltips", predicate: Tooltip, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"controlsLoaded\" class=\"frm-container\">\r\n <ng-container *ngIf=\"isAddressDialog && currentAddress\">\r\n Direcci\u00F3n actual: {{currentAddress | formatAddress: separador}}\r\n <br>\r\n </ng-container>\r\n <br>\r\n <ng-container *ngIf=\"isAddressDialog\">\r\n Direcci\u00F3n nueva: {{newAddress | formatAddress: separador}}\r\n </ng-container>\r\n <div *ngFor=\"let element of uiEsquema.elements; let i = index\" [class]=\"element?.class\" #a>\r\n <ng-container [ngSwitch]=\"element.type\" *ngIf=\"visible[i][0]\">\r\n <div class=\"label\" *ngSwitchCase=\"'Label'\" [style]=\"element?.style\">\r\n {{element?.label}}\r\n </div>\r\n <ng-container *ngSwitchCase=\"'HorizontalLayout'\">\r\n <div *ngFor=\"let el of element.elements; let j =index\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\" *ngIf=\"visible[i][j]\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"controls[i][j]\" [label]=\"el.label\"\r\n [value]=\"values[i][j]\" (setValue)=\"setValue($event, el.scope, i, j)\"\r\n (sendNotification)=\"sendNotification($event)\"\r\n (sendObject)=\"applyValuesFromObject($event)\"\r\n (addressClicked)=\"openPopUpDireccion(el.scope)\"></sf-control>\r\n <div *ngSwitchCase=\"'Texto'\" [ngStyle]=\"{'height': '100%', 'margin-block': 'auto'}\">\r\n <p>{{el.label}}</p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'VerticalLayout'\">\r\n <div *ngFor=\"let el of element.elements; let j =index\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\" *ngIf=\"visible[i][j]\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"controls[i][j]\" [label]=\"el.label\"\r\n [value]=\"values[i][j]\" (setValue)=\"setValue($event, el.scope, i, j)\"\r\n (sendNotification)=\"sendNotification($event)\"\r\n (sendObject)=\"applyValuesFromObject($event)\"\r\n (addressClicked)=\"openPopUpDireccion(el.scope)\"></sf-control>\r\n <div *ngSwitchCase=\"'PDF'\" class=\"pdf\">\r\n <iframe [src]=\"values[i][j]\" frameborder=\"0\" allow=\"geolocation *; camera *;\"></iframe>\r\n </div>\r\n <div *ngSwitchCase=\"'PDF-SIGN'\">\r\n <sf-sign [allowDownload]=\"true\" [idkatios]=\"idKatios\" [tdoc]=\"data.pdf.tdoc\" [ndoc]=\"data.pdf.ndoc\"\r\n [idDocument]=\"data.pdf.id\" [typeDocument]=\"data.pdf.idDoc\"\r\n (stateDocument)=\"onStateDocument($event)\"></sf-sign>\r\n </div>\r\n <ng-container *ngSwitchCase=\"'SIMULADOR'\">\r\n <sf-simulador [simulador]=\"data\" [otherToolTips]=\"data.otherTooltips\"\r\n (simuladorChange)=\"onSimuladorChange($event)\" (enProceso)=\"emitLoadingForm($event)\"></sf-simulador>\r\n </ng-container>\r\n <div *ngSwitchCase=\"'ADO'\" class=\"buttons\">\r\n <p-button *ngIf=\"!data?.ADO?.dataProceso?.idProceso\" [ngStyle]=\"el?.ngStyle\" (click)=\"goToADO()\" label=\"Validar identidad\"></p-button>\r\n </div>\r\n <div *ngSwitchCase=\"'ADO'\">\r\n <div *ngIf=\"data?.ADO?.dataProceso?.idProceso\">\r\n <div class=\"data-ado-container\">\r\n <ng-container *ngIf=\"proceso\">\r\n <i *ngIf=\"proceso?.respuestaProceso?.EsExitoso === true\" pTooltip=\"Validado\" tooltipPosition=\"top\" id=\"Validado\" class=\"pi pi-user\" style=\"color: green\"\r\n (touchstart)=\"onTouchDescription('Validado', false)\" (touchend)=\"onUnTouchDescription('Validado')\"></i>\r\n <i *ngIf=\"proceso?.respuestaProceso?.EsExitoso === false\" pTooltip=\"No validado\" tooltipPosition=\"top\" id=\"No-Validado\" class=\"pi pi-user\" style=\"color: red\"\r\n (touchstart)=\"onTouchDescription('No-Validado', false)\" (touchend)=\"onUnTouchDescription('No-Validado')\"></i>\r\n <i *ngIf=\"!proceso?.respuestaProceso\" pTooltip=\"Sin validar\" tooltipPosition=\"top\" class=\"pi pi-user\" id=\"Sin-Validar\" style=\"color: gray\"\r\n (touchstart)=\"onTouchDescription('Sin-Validar', false)\" (touchend)=\"onUnTouchDescription('Sin-Validar')\"></i>\r\n </ng-container>\r\n <div class=\"buttons\">\r\n <button pButton icon=\"pi pi-external-link\" (click)=\"goToADO()\" pTooltip=\"Abrir\" [disabled]=\"!proceso\"></button>\r\n <button pButton icon=\"pi pi-copy\" (click)=\"copyToClipboard(proceso.id)\" pTooltip=\"Copiar\" [disabled]=\"!proceso\"></button>\r\n <button pButton icon=\"pi pi-refresh\" (click)=\"refreshIntegracion(proceso.id)\" pTooltip=\"Refrescar\" [disabled]=\"!proceso\"></button>\r\n </div>\r\n </div>\r\n <p class=\"result-ado\" *ngIf=\"proceso && !proceso.respuestaProceso && proceso.estado == 'PROCESANDO'\">Procesando</p>\r\n <p class=\"result-ado\" *ngIf=\"proceso && proceso.respuestaProceso && proceso.estado == 'TERMINADO'\">{{proceso.respuestaProceso.Detalle ?? proceso.respuestaProceso.Mensaje}}</p>\r\n </div>\r\n </div>\r\n <ng-container *ngSwitchCase=\"'Table'\">\r\n <p-table [value]=\"values[i][j]\" [columns]=\"controls[i][j].config.columns\">\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <button pButton pRipple icon=\"pi pi-plus\" (click)=\"addObjectArray(el)\"\r\n class=\"p-button-success\" [disabled]=\"controls[i][j].disabled === true\"></button>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{col.label}}\r\n </th>\r\n <ng-container>\r\n <th></th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr>\r\n <ng-container *ngFor=\"let col of columns\" [ngSwitch]=\"col.type\">\r\n <ng-container *ngSwitchCase=\"'control'\">\r\n <sf-control [control]=\"extracControlFromTableElements(i, j, col)\" [label]=\"\"\r\n [value]=\"extracValueFromTableElements(i, j, rowIndex, col)\"\r\n (sendNotification)=\"sendNotification($event)\"\r\n (sendObject)=\"applyValuesFromObject($event)\"\r\n (setValue)=\"setValue($event, extracValueFromTableElements(i, j, rowIndex, col).scope, i, j)\"\r\n [showTempValue]=\"true\"\r\n >\r\n </sf-control>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <td>{{rowData[col.col]}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <td>{{rowData[col.col] | formatAddress: extracControlFromTableElements(i, j, col).separador }}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'currency:USD'\">\r\n <td>{{rowData[col.col] | currency: 'USD'}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date:yyyy-mm-dd'\">\r\n <td>{{rowData[col.col] | date: 'yyyy-mm-dd'}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date:dd/mm/yyyy'\">\r\n <td>{{rowData[col.col] | date: 'dd/MM/yyyy'}}</td>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <td>\r\n <i *ngIf=\"rowData[col.col]\" class=\"pi pi-check\"></i>\r\n <i *ngIf=\"!rowData[col.col]\" class=\"pi pi-times\"></i>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <td>\r\n <button pButton pRipple type=\"button\"\r\n (click)=\"editRow(el, rowData, rowIndex)\" icon=\"pi pi-pencil\"\r\n class=\"p-button-rounded p-button-info mr-1\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"deleteRow(el, rowIndex)\" [disabled]=\"controls[i][j].disabled === true\"\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-danger\"></button>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<p-toast *ngIf=\"isDialog\"></p-toast>\r\n", styles: [":not(.col-12) .label{display:flex;justify-content:center;align-items:center;padding-inline:.5rem;margin-bottom:15px;margin-top:20px;border-radius:13px;font-size:18px;font-size:inherit;background-color:var(--primary-color);text-align:center;color:var(--normal-text-color)}.pdf{display:flex;width:100%;height:80vh;& iframe{width:80%;margin-inline:10%}}.data-ado-container{display:flex;margin-inline:auto;align-items:center;width:-moz-fit-content;width:fit-content;&>*{margin-inline:4px}&>div{display:flex;align-items:center;&>*{margin-inline:4px}}}i.pi-user{font-size:2rem}.result-ado{min-height:1rem;text-align:center}sf-simulador{display:flow-root;width:80%;margin-inline:auto;margin-bottom:35px}sf-sign{display:block;margin-inline:auto;width:80%;& pdf-viewer{min-height:130vh!important;max-height:130vh!important}}.buttons{display:flex;justify-content:space-evenly}.buttons ::ng-deep .p-button.p-component{border-radius:35px}::ng-deep *{box-shadow:none}.frm-container ::ng-deep .p-inputtext:focus,.frm-container ::ng-deep .p-inputtext:active,.frm-container ::ng-deep .p-inputwrapper:focus,.frm-container ::ng-deep .p-inputwrapper:active{border-color:var(--button-color)}.frm-container ::ng-deep .p-button{background-color:var(--button-color);border-color:var(--button-color)}.frm-container ::ng-deep .p-button:hover{background-color:var(--button-color);filter:brightness(85%)}.frm-container ::ng-deep :not(:disabled):active,.frm-container ::ng-deep :not(.p-disabled) .p-inputtext:hover,.frm-container ::ng-deep :not(.p-disabled) .p-inputwrapper:hover,.frm-container ::ng-deep :not(.p-disabled) .p-inputwrapper-focus,.frm-container ::ng-deep .p-radiobutton-box .p-highlight,.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box:not(.p-disabled):hover{border-color:var(--button-color)}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box.p-highlight{background:var(--button-color);border-color:var(--button-color)!important}.frm-container ::ng-deep .p-button.p-button-success,.p-buttonset.p-button-success>.p-button,.p-splitbutton.p-button-success>.p-button{background:var(--button-color);border-color:var(--button-color)!important}@media screen and (max-width:765px){:not(.col-12) .label{height:-moz-fit-content;height:fit-content}.field{margin-bottom:.5rem}.pdf>iframe{width:100%;margin-inline:0}sf-sign{width:100%;& pdf-viewer{min-height:60vh!important;max-height:120vh!important}}sf-simulador{display:block;width:100%;margin-inline:auto}.data-ado-container{text-align:center;& .buttons{max-width:80vw;flex-direction:row}}.buttons{flex-direction:column;align-items:center}}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box:not(.p-disabled):not(.p-highlight):hover{border-color:var(--secondary-color)!important}.frm-container ::ng-deep .p-button.p-button-success:enabled:focus,.p-buttonset.p-button-success>.p-button:enabled:focus,.p-splitbutton.p-button-success>.p-button:enabled:focus{box-shadow:inset 0 0 #fff}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover{color:var(--secondary-color)!important}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box:not(.p-disabled).p-focus{box-shadow:inset 0 0 0 1px var(--secondary-color)!important}.frm-container ::ng-deep .p-radiobutton .p-radiobutton-box .p-radiobutton-icon{background-color:#fff}.frm-container ::ng-deep .p-slider:not(.p-disabled):hover{background-color:#e5e7eb}.frm-container ::ng-deep .p-slider{background-color:#e5e7eb}.frm-container ::ng-deep .p-slider:not(.p-disabled):hover .p-slider-range{background-color:var(--primary-color)!important}.frm-container ::ng-deep .p-button:enabled:active{background:var(--secondary-color)!important;border-color:var(--secondary-color)!important}.frm-container ::ng-deep .p-slider:not(.p-disabled):hover .p-slider-handle{border-color:var(--primary-color)!important}.frm-container ::ng-deep .p-button:focus{box-shadow:inset 0 0 0 1px var(--secondary-color)!important}.frm-container ::ng-deep .p-button:enabled:hover{background:var(--secondary-color)!important;border-color:var(--secondary-color)!important}.frm-container ::ng-deep .p-button.p-button-info,.p-buttonset.p-button-info>.p-button,.p-splitbutton.p-button-info>.p-button{background:var(--secondary-color)!important;border:1px solid var(--secondary-color)!important}\n"], components: [{ type: i6.ControlComponent, selector: "sf-control", inputs: ["showTempValue", "control", "label", "value", "appendTo"], outputs: ["setValue", "sendObject", "addressClicked"] }, { type: i7.SignComponent, selector: "sf-sign", inputs: ["idkatios", "tdoc", "ndoc", "idDocument", "typeDocument", "allowDownload"], outputs: ["stateDocument", "loading"] }, { type: i8.SfSimuladorComponent, selector: "sf-simulador", inputs: ["simulador", "otherToolTips", "labels"], outputs: ["simuladorChange", "enProceso"] }, { type: i9.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i11.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i12.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i14.Ripple, selector: "[pRipple]" }], pipes: { "formatAddress": i15.FormatAddressPipe, "currency": i12.CurrencyPipe, "date": i12.DatePipe } });
|
|
248
266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormComponent, decorators: [{
|
|
249
267
|
type: Component,
|
|
250
268
|
args: [{
|
|
@@ -260,8 +278,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
260
278
|
type: Input
|
|
261
279
|
}], isDialog: [{
|
|
262
280
|
type: Input
|
|
281
|
+
}], isAddressDialog: [{
|
|
282
|
+
type: Input
|
|
283
|
+
}], separador: [{
|
|
284
|
+
type: Input
|
|
263
285
|
}], tooltips: [{
|
|
264
286
|
type: ViewChildren,
|
|
265
287
|
args: [Tooltip]
|
|
266
288
|
}] } });
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUErQyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHNUcsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFHckMsT0FBTyxFQUFFLFVBQVUsRUFBMEIsTUFBTSx1QkFBdUIsQ0FBQztBQU0zRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPMUMsTUFBTSxPQUFPLGFBQWE7SUFtQnhCLFlBQ1UsY0FBOEIsRUFDOUIsV0FBMEIsRUFDMUIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsVUFBc0IsRUFDdEIsVUFBc0I7UUFMdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXJCdkIsYUFBUSxHQUFFLEtBQUssQ0FBQztRQUl6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUd2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBZ0JmLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsQ0FBQztRQUNyRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FB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QVksV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsT0FBTyxTQUFTLEVBQUUsQ0FBQTtRQUM1RyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQyxDQUFDOzsyR0ExUFUsYUFBYTsrRkFBYixhQUFhLHlLQWdCVixPQUFPLHFFQ25DdkIsb2lWQWtJb0M7NEZEL0d2QixhQUFhO2tCQUx6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixXQUFXLEVBQUUsdUJBQXVCO29CQUNwQyxTQUFTLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7d09BRVUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBWWlCLFFBQVE7c0JBQTlCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCAqIGFzIGpzb25wYXRoIGZyb20gJ2pzb25wYXRoJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFNoZW1hIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9zaGVtYS5tb2RlbCc7XHJcbmltcG9ydCB7IENoYW5nZURhdGEsIExvYWRpbmcsIFNmQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZi1jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWdSZWdpc3RybyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvY3J1ZC1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTdGVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaW11bGFkb3IgfSBmcm9tICdzZi1zaW11bGFkb3InO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgQWRvU2VydmljZSwgSldUU2VydmljZSwgUHJvY2Vzb0FETyB9IGZyb20gJ3NmLWFkbyc7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXR7XHJcbiAgQElucHV0KCkgdWlFc3F1ZW1hOiBhbnk7XHJcbiAgQElucHV0KCkgZXNxdWVtYSE6IFNoZW1hO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuICBASW5wdXQoKSBpc0RpYWxvZz0gZmFsc2U7XHJcbiAgcmVnaXN0cm8hOiBDb25maWdSZWdpc3RybztcclxuICB2YWx1ZXMhOiBhbnlbXVtdO1xyXG4gIGNvbnRyb2xzITogYW55W11bXTtcclxuICBjb250cm9sc0xvYWRlZCA9IGZhbHNlO1xyXG4gIGlkS2F0aW9zITogc3RyaW5nO1xyXG4gIHZpc2libGUhOiBib29sZWFuW11bXTtcclxuICBpc01vYmlsZSA9IGZhbHNlO1xyXG4gIHVybEFETz86IHN0cmluZztcclxuICBwcm9jZXNvOiBQcm9jZXNvQURPIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgbG9hZGluZyE6TG9hZGluZztcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihUb29sdGlwKSB0b29sdGlwcyE6IFF1ZXJ5TGlzdCA8VG9vbHRpcD47XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjcnVkU2VydmljZTogU2ZDcnVkU2VydmljZSxcclxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIHN0ZXBTZXJ2aWNlOiBTdGVwU2VydmljZSxcclxuICAgIHByaXZhdGUgYWRvU2VydmljZTogQWRvU2VydmljZSxcclxuICAgIHByaXZhdGUgand0U2VydmljZTogSldUU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0ge2luUHJvZ3Jlc3M6IHRydWUsIHRhcmdldDogdW5kZWZpbmVkfTtcclxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA3NjgpIHRoaXMuaXNNb2JpbGUgPSB0cnVlXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNzY4KSB0aGlzLmlzTW9iaWxlID0gdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuYnVpbGRDb250cm9scygpXHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmp3dFNlcnZpY2UuaWRLYXRpb3MgPSB0aGlzLmNydWRTZXJ2aWNlLmlkS2F0aW9zXHJcbiAgICAgIHRoaXMuand0U2VydmljZS5zZXJ2aWRvckludGVncmFjaW9uZXMgPSB0aGlzLmNydWRTZXJ2aWNlLmVudmlyb25tZW50LlNlcnZpZG9ySW50ZWdyYWNpb25lc1xyXG4gICAgICB0aGlzLmFkb1NlcnZpY2Uuc2Vydmlkb3JJbnRlZ3JhY2lvbmVzID0gdGhpcy5jcnVkU2VydmljZS5lbnZpcm9ubWVudC5TZXJ2aWRvckludGVncmFjaW9uZXNcclxuICAgICAgdGhpcy5pZEthdGlvcyA9IHRoaXMuY3J1ZFNlcnZpY2UuaWRLYXRpb3NcclxuICAgICAgdGhpcy5zdGVwU2VydmljZS5yZXF1ZXN0QXBwcm92ZWQkLnN1YnNjcmliZSgoYXBwcm92ZWQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNEaWFsb2cgJiYgYXBwcm92ZWQpe1xyXG4gICAgICAgICAgdGhpcy51aUVzcXVlbWEgPSB0aGlzLmNydWRTZXJ2aWNlLmdldFVJRXNxdWVtYSh0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleClcclxuICAgICAgICAgIHRoaXMuZXNxdWVtYSA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0RXNxdWVtYSh0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleClcclxuICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0RGF0YSh0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleCk7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdHJvID0gdGhpcy5jcnVkU2VydmljZS5nZXRSZWdpc3Rybyh0aGlzLnN0ZXBTZXJ2aWNlLmN1cnJlbnRJbmRleClcclxuICAgICAgICAgIHRoaXMuYnVpbGRDb250cm9scygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0TG9hZGluZ0Zvcm0oJGV2ZW50OiBib29sZWFuKXtcclxuICAgIHRoaXMubG9hZGluZy5pblByb2dyZXNzID0gJGV2ZW50XHJcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY3J1ZFNlcnZpY2UuZm9ybUxvYWRpbmcgPSB0aGlzLmxvYWRpbmcpLy9zaSBubyBzZSB1c2EgYXNpIGVsIGVucHJvY2VzbyB0b3RlYSBjb24gZWwgc2ltdWxhZG9yXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGJ1aWxkQ29udHJvbHMoKXtcclxuICAgIHRoaXMudmlzaWJsZSA9IFtdXHJcbiAgICB0aGlzLmNvbnRyb2xzTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbnRyb2xzID0gW11cclxuICAgIHRoaXMudmFsdWVzID0gW11cclxuICAgIHRoaXMudWlFc3F1ZW1hLmVsZW1lbnRzLmZvckVhY2goKGxheW91dDogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IGlzVmlzaWJsZSA9IGxheW91dC5jb25kaXRpb25zID8gdGhpcy5jcnVkU2VydmljZS5pc0NvbmRpdGlvbnNDb21wbGV0ZWQobGF5b3V0LmNvbmRpdGlvbnMsIHRoaXMucmVnaXN0cm8uY29uZGl0aW9ucyB8fCBbXSwgdGhpcy5kYXRhKTogdHJ1ZVxyXG4gICAgICB0aGlzLnZpc2libGUucHVzaChsYXlvdXQuZWxlbWVudHM/IGxheW91dC5lbGVtZW50cy5tYXAoKCkgPT4gaXNWaXNpYmxlKTogW2lzVmlzaWJsZV0pXHJcbiAgICAgIHRoaXMuY29udHJvbHMucHVzaChbXSlcclxuICAgICAgdGhpcy52YWx1ZXMucHVzaChbXSlcclxuXHJcbiAgICAgIGxheW91dC5lbGVtZW50cz8uZm9yRWFjaCgoZWxlbWVudDogYW55LCBqOiBudW1iZXIpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5jb25kaXRpb25zKSAgdGhpcy52aXNpYmxlW2ldW2pdID0gdGhpcy5jcnVkU2VydmljZS5pc0NvbmRpdGlvbnNDb21wbGV0ZWQoZWxlbWVudC5jb25kaXRpb25zLCB0aGlzLnJlZ2lzdHJvLmNvbmRpdGlvbnMgfHwgW10sIHRoaXMuZGF0YSlcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQubmdTdHlsZSAmJiB0eXBlb2YoZWxlbWVudC5uZ1N0eWxlKSA9PSBcInN0cmluZ1wiKSAgZWxlbWVudC5uZ1N0eWxlID0gSlNPTi5wYXJzZShlbGVtZW50Lm5nU3R5bGUpXHJcbiAgICAgICAgaWYgKGVsZW1lbnQudXJsKXtcclxuICAgICAgICAgIHRoaXMuY29udHJvbHNbaV0ucHVzaCh1bmRlZmluZWQpXHJcbiAgICAgICAgICBsZXQgdXJsID0gdGhpcy5jcnVkU2VydmljZS5hcHBseVN0cmluZ0tleXMoZWxlbWVudC51cmwpXHJcbiAgICAgICAgICB0aGlzLnZhbHVlc1tpXS5wdXNoKHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghZWxlbWVudC5zY29wZSl7XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzW2ldLnB1c2godW5kZWZpbmVkKVxyXG4gICAgICAgICAgdGhpcy52YWx1ZXNbaV0ucHVzaCh1bmRlZmluZWQpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzW2ldLnB1c2godGhpcy5jcnVkU2VydmljZS5nZXRDb250cm9sKGVsZW1lbnQuc2NvcGUsIHRoaXMuZXNxdWVtYSkpXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzW2ldW2pdLnNjb3BlID0gZWxlbWVudC5zY29wZVxyXG4gICAgICAgICAgdGhpcy52YWx1ZXNbaV0ucHVzaCh0aGlzLmNydWRTZXJ2aWNlLmdldFZhbHVlKGVsZW1lbnQuc2NvcGUsIHRoaXMuZGF0YSkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY29udHJvbHNMb2FkZWQgPSB0cnVlO1xyXG4gICAgbGV0IGlkUHJvY2VzbyA9IHRoaXMuZGF0YS5BRE8/LmRhdGFQcm9jZXNvPy5pZFByb2Nlc29cclxuICAgIGlmIChpZFByb2Nlc28gJiYgdGhpcy5wcm9jZXNvPy5pZCAhPSBpZFByb2Nlc28pIHRoaXMucmVmcmVzaEludGVncmFjaW9uKGlkUHJvY2VzbylcclxuICB9XHJcblxyXG4gIHJlZnJlc2hJbnRlZ3JhY2lvbihpZFByb2Nlc286IG51bWJlcil7XHJcbiAgICB0aGlzLmVtaXRMb2FkaW5nRm9ybSh0cnVlKVxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcclxuICAgICAgICB0aGlzLmFkb1NlcnZpY2UuZ2V0UHJvY2VzbyhpZFByb2Nlc28pLnRoZW4oKHByb2Nlc28pID0+IHtcclxuICAgICAgICAgIHRoaXMucHJvY2VzbyA9IHByb2Nlc29cclxuICAgICAgICAgIHRoaXMuZGF0YS5BRE8ucHJvY2VzbyA9IHRoaXMucHJvY2Vzb1xyXG4gICAgICAgIH0pXHJcbiAgICBdKVxyXG4gICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5lbWl0TG9hZGluZ0Zvcm0oZmFsc2UpKVxyXG4gIH1cclxuXHJcbiAgZXh0cmFjQ29udHJvbEZyb21UYWJsZUVsZW1lbnRzKGk6YW55LCBqOmFueSwgY29sOmFueSl7XHJcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuY29udHJvbHNbaV1bal0ucHJvcGVydGllc1tjb2wuY29sXTtcclxuICAgIHJldHVybiBwcm9wZXJ0eVxyXG4gIH1cclxuXHJcbiAgZXh0cmFjVmFsdWVGcm9tVGFibGVFbGVtZW50cyhpOmFueSwgajphbnksIGs6YW55LCBjb2w6YW55KXtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZXNbaV1bal1ba11bY29sLmNvbF07XHJcbiAgICByZXR1cm4gdmFsdWVcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHZhbHVlOiBhbnksIHNjb3BlOiBhbnksIGk6IG51bWJlciwgajogbnVtYmVyKSB7XHJcbiAgICBzY29wZSA9IHNjb3BlLnJlcGxhY2VBbGwoJy4ucHJvcGVydGllcycsICcnKVxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGxldCBjb250cm9sID0gdGhpcy5jb250cm9sc1tpXVtqXVxyXG4gICAgICB0aGlzLnZhbHVlc1tpXVtqXSA9IHZhbHVlO1xyXG4gICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHNjb3BlLCB2YWx1ZSk7XHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuY2hhbmdlRGF0YSA9IG5ldyBDaGFuZ2VEYXRhKHZhbHVlLCBzY29wZSwgdGhpcy5jcnVkU2VydmljZS5pbmRleClcclxuICAgICAgdGhpcy51aUVzcXVlbWEuZWxlbWVudHMuZm9yRWFjaCgobGF5b3V0OiBhbnksIGlMYXlvdXQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmIChsYXlvdXQuY29uZGl0aW9ucyl7XHJcbiAgICAgICAgICBsZXQgaXNWaXNpYmxlID0gdGhpcy5jcnVkU2VydmljZS5pc0NvbmRpdGlvbnNDb21wbGV0ZWQobGF5b3V0LmNvbmRpdGlvbnMsIHRoaXMuY3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8odGhpcy5jcnVkU2VydmljZS5pbmRleCkuY29uZGl0aW9ucyB8fCBbXSwgdGhpcy5kYXRhKVxyXG4gICAgICAgICAgaWYobGF5b3V0LmVsZW1lbnRzKSB0aGlzLnZpc2libGVbaUxheW91dF0gPSBsYXlvdXQuZWxlbWVudHMubWFwKCgpID0+IGlzVmlzaWJsZSlcclxuICAgICAgICAgIGVsc2UgdGhpcy52aXNpYmxlW2lMYXlvdXRdWzBdID0gaXNWaXNpYmxlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsYXlvdXQuZWxlbWVudHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaW5kZXhFbDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5jb25kaXRpb25zKXtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlW2lMYXlvdXRdW2luZGV4RWxdID0gdGhpcy5jcnVkU2VydmljZS5pc0NvbmRpdGlvbnNDb21wbGV0ZWQoZWxlbWVudC5jb25kaXRpb25zLCB0aGlzLnJlZ2lzdHJvLmNvbmRpdGlvbnMgfHwgW10sIHRoaXMuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICBjb250cm9sLmFwcGx5S2V5cz8uZm9yRWFjaCgoaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbGV0IGtleSA9IHRoaXMucmVnaXN0cm8ua2V5cyA/IHRoaXMucmVnaXN0cm8ua2V5c1tpXSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIGlmIChrZXkpIHRoaXMuY3J1ZFNlcnZpY2UuYXBwbHlLZXkoa2V5LCB0aGlzLnJlZ2lzdHJvLCBrZXkuaW5kZXhEYXRhID8gdGhpcy5jcnVkU2VydmljZS5nZXREYXRhKGtleS5pbmRleERhdGEpIDogdGhpcy5kYXRhKVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5idWlsZENvbnRyb2xzKClcclxuICAgIH1cclxuICAgIHRoaXMuY3J1ZFNlcnZpY2UuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNoYW5nZScsIHRoaXMuZXNxdWVtYSwgdW5kZWZpbmVkLCB0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcblxyXG4gIHNlbmROb3RpZmljYXRpb24obWVzc2FnZTogTWVzc2FnZSkge1xyXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQobWVzc2FnZSlcclxuICB9XHJcblxyXG4gIGFwcGx5VmFsdWVzRnJvbU9iamVjdChldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQub3B0aW9uVmFsdWUpe1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50Lm9wdGlvblZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uVmFsID0gZXZlbnQub3B0aW9uVmFsdWVbaV07XHJcbiAgICAgICAgY29uc3QgbmV3VmFsID0gZXZlbnQuZGF0YSA/IHRoaXMuYXBseUZvcm1hdFZhbHVlKG9wdGlvblZhbC5zY29wZSwgZXZlbnQuZGF0YVtvcHRpb25WYWwua2V5XSk6IG51bGw7XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBvcHRpb25WYWwuc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCcnKSwgdGhpcy5hcGx5Rm9ybWF0VmFsdWUob3B0aW9uVmFsLnNjb3BlLCBldmVudC5kYXRhW29wdGlvblZhbC5rZXldKSlcclxuICAgICAgICB0aGlzLnNldFZhbHVlQnlTY29wZShvcHRpb25WYWwuc2NvcGUsIG5ld1ZhbClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVCeVNjb3BlKHNjb3BlOiBzdHJpbmcsIG5ld1ZhbDogYW55KXtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb250cm9scy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLmNvbnRyb2xzW2ldO1xyXG4gICAgICByb3cuZm9yRWFjaCgoZWwsIGopID0+IHtcclxuICAgICAgICBpZiAoZWwuc2NvcGUgJiYgZWwuc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCcnKT09IHNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywnJykpe1xyXG4gICAgICAgICAgdGhpcy52YWx1ZXNbaV1bal0gPSBuZXdWYWxcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcGx5Rm9ybWF0VmFsdWUoc2NvcGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgY29uc3QgY29udHJvbCA9IGpzb25wYXRoLnF1ZXJ5KHRoaXMuZXNxdWVtYSwgc2NvcGUpWzBdXHJcbiAgICBsZXQgcmVzcDtcclxuICAgIHN3aXRjaCAoY29udHJvbC50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgIHJlc3AgPSBuZXcgRGF0ZShgJHt2YWx1ZX1gKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdudW1lcmljJzpcclxuICAgICAgICByZXNwID0gK3ZhbHVlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmVzcCA9IHZhbHVlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcFxyXG4gIH1cclxuXHJcbiAgZWRpdFJvdyhlbGVtZW50OiBhbnksIGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGVwU2VydmljZS5hZGRDdXN0b21DaGlsZHJlbkV2ZW50KFwib25DbGlja2VkRWRpdEJ1dHRvblwiLCB7ZWxlbWVudCwgZGF0YSwgaW5kZXh9KVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlUm93KGVsZW1lbnQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGVwU2VydmljZS5hZGRDdXN0b21DaGlsZHJlbkV2ZW50KFwib25DbGlja2VkRGVsZXRlQnV0dG9uXCIsIHtlbGVtZW50LCBpbmRleH0pXHJcbiAgfVxyXG5cclxuICBhZGRPYmplY3RBcnJheShlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UuYWRkQ3VzdG9tQ2hpbGRyZW5FdmVudChcIm9uQ2xpY2tlZEFkZEJ1dHRvblwiLCB7ZWxlbWVudH0pXHJcbiAgfVxyXG5cclxuICBvblN0YXRlRG9jdW1lbnQoc3RhdGU6IHN0cmluZyl7XHJcbiAgICB0aGlzLmRhdGEucGRmLnNpZ25lZCA9IHN0YXRlLnRvVXBwZXJDYXNlKCkgPT0gXCJGSVJNQURPXCJcclxuICB9XHJcblxyXG4gIG9uU2ltdWxhZG9yQ2hhbmdlKCRldmVudDogU2ltdWxhZG9yKSB7XHJcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCAkZXZlbnQpKVxyXG4gIH1cclxuXHJcbiAgZ29Ub0FETygpe1xyXG4gICAgbGV0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgbGV0IGNhbGxiYWNrID0gdXJsLnNwbGl0KCc/JylbMF0gKyBgP2lkPSR7dGhpcy5kYXRhLmlkRm9ybX1gO1xyXG4gICAgbGV0IGlkUHJvY2VzbyA9IHRoaXMuZGF0YS5BRE8uZGF0YVByb2Nlc28/LmlkUHJvY2Vzb1xyXG4gICAgbGV0IGRhdGFQcm9jZXNvID0gdGhpcy5kYXRhLkFETy5kYXRhUHJvY2Vzb1xyXG4gICAgZGF0YVByb2Nlc28uY3Rpdm8gPSB0aGlzLmRhdGEuaWRGb3JtXHJcbiAgICAvL3RoaXMuZGF0YS5BRE8uaWRUcmFuc2FjdGlvbiA9IG51bGxcclxuICAgIC8vdGhpcy5kYXRhLkFETy5pZFByb2Nlc28gPSBudWxsXHJcbiAgICBpZiAoaWRQcm9jZXNvKXtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmNydWRTZXJ2aWNlLmVudmlyb25tZW50LldlYlV0aWxpdGllc31HV1YvQURPLyR7dGhpcy5jcnVkU2VydmljZS5pZEthdGlvc30/aWQ9JHtpZFByb2Nlc299YFxyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChkYXRhUHJvY2Vzbyl7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5jcnVkU2VydmljZS5lbnZpcm9ubWVudC5XZWJVdGlsaXRpZXN9R1dWL0FETy8ke3RoaXMuY3J1ZFNlcnZpY2UuaWRLYXRpb3N9P2RhdGFQcm9jZXNvPSR7YnRvYShKU09OLnN0cmluZ2lmeShkYXRhUHJvY2VzbykpfSZjYWxsYmFjaz0ke2VuY29kZVVSSUNvbXBvbmVudChjYWxsYmFjayl9YFxyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uVG91Y2hEZXNjcmlwdGlvbihpZDogc3RyaW5nLCBhbGlnblJpZ2h0PXRydWUpIHtcclxuICAgIGNvbnN0IGZvdW5kVG9vbHRpcCA9IHRoaXMudG9vbHRpcHMuZmluZCh0b29sdGlwID0+IHRvb2x0aXAuZWwubmF0aXZlRWxlbWVudC5pZCA9PT0gaWQpITtcclxuICAgIHRyeXtcclxuICAgICAgZm91bmRUb29sdGlwLmFjdGl2YXRlKCk7XHJcbiAgICAgIGFsaWduUmlnaHQgPyBmb3VuZFRvb2x0aXAuYWxpZ25SaWdodCgpOiBmb3VuZFRvb2x0aXAuYWxpZ25Ub3AoKTtcclxuICAgIH1jYXRjaChleCl7fVxyXG4gIH1cclxuXHJcbiAgb25VblRvdWNoRGVzY3JpcHRpb24oZGVzY3JpcGNpb246IHN0cmluZykge1xyXG4gICAgY29uc3QgZm91bmRUb29sdGlwID0gdGhpcy50b29sdGlwcy5maW5kKHRvb2x0aXAgPT4gdG9vbHRpcC5lbC5uYXRpdmVFbGVtZW50LmlkID09PSBkZXNjcmlwY2lvbikhO1xyXG4gICAgdHJ5e1xyXG4gICAgICBmb3VuZFRvb2x0aXAuZGVhY3RpdmF0ZSgpO1xyXG4gICAgfWNhdGNoKGV4KXt9XHJcbiAgfVxyXG5cclxuICBjb3B5VG9DbGlwYm9hcmQoaWRQcm9jZXNvOiBzdHJpbmcpe1xyXG4gICAgbGV0IHVybCA9IGAke3RoaXMuY3J1ZFNlcnZpY2UuZW52aXJvbm1lbnQuV2ViVXRpbGl0aWVzfUdXVi9BRE8vJHt0aGlzLmNydWRTZXJ2aWNlLmlkS2F0aW9zfT9pZD0ke2lkUHJvY2Vzb31gXHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh1cmwpXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJjb250cm9sc0xvYWRlZFwiIGNsYXNzPVwiZnJtLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiB1aUVzcXVlbWEuZWxlbWVudHM7IGxldCBpID0gaW5kZXhcIiBbY2xhc3NdPVwiZWxlbWVudD8uY2xhc3NcIiAjYT5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbGVtZW50LnR5cGVcIiAqbmdJZj1cInZpc2libGVbaV1bMF1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgKm5nU3dpdGNoQ2FzZT1cIidMYWJlbCdcIiBbc3R5bGVdPVwiZWxlbWVudD8uc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7ZWxlbWVudD8ubGFiZWx9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hvcml6b250YWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbCBvZiBlbGVtZW50LmVsZW1lbnRzOyBsZXQgaiA9aW5kZXhcIiBbY2xhc3NdPVwiZWw/LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWwudHlwZVwiICpuZ0lmPVwidmlzaWJsZVtpXVtqXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2YtY29udHJvbCAqbmdTd2l0Y2hDYXNlPVwiJ0NvbnRyb2wnXCIgW2NvbnRyb2xdPVwiY29udHJvbHNbaV1bal1cIiBbbGFiZWxdPVwiZWwubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlc1tpXVtqXVwiIChzZXRWYWx1ZSk9XCJzZXRWYWx1ZSgkZXZlbnQsIGVsLnNjb3BlLCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE5vdGlmaWNhdGlvbik9XCJzZW5kTm90aWZpY2F0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbmRPYmplY3QpPVwiYXBwbHlWYWx1ZXNGcm9tT2JqZWN0KCRldmVudClcIj48L3NmLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidWZXJ0aWNhbExheW91dCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGVsIG9mIGVsZW1lbnQuZWxlbWVudHM7IGxldCBqID1pbmRleFwiIFtjbGFzc109XCJlbD8uY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbC50eXBlXCIgKm5nSWY9XCJ2aXNpYmxlW2ldW2pdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZi1jb250cm9sICpuZ1N3aXRjaENhc2U9XCInQ29udHJvbCdcIiBbY29udHJvbF09XCJjb250cm9sc1tpXVtqXVwiIFtsYWJlbF09XCJlbC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVzW2ldW2pdXCIgKHNldFZhbHVlKT1cInNldFZhbHVlKCRldmVudCwgZWwuc2NvcGUsIGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE9iamVjdCk9XCJhcHBseVZhbHVlc0Zyb21PYmplY3QoJGV2ZW50KVwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1BERidcIiBjbGFzcz1cInBkZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBbc3JjXT1cInZhbHVlc1tpXVtqXVwiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93PVwiZ2VvbG9jYXRpb24gKjsgY2FtZXJhICo7XCI+PC9pZnJhbWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInUERGLVNJR04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2Ytc2lnbiBbYWxsb3dEb3dubG9hZF09XCJ0cnVlXCIgW2lka2F0aW9zXT1cImlkS2F0aW9zXCIgW3Rkb2NdPVwiZGF0YS5wZGYudGRvY1wiIFtuZG9jXT1cImRhdGEucGRmLm5kb2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZERvY3VtZW50XT1cImRhdGEucGRmLmlkXCIgW3R5cGVEb2N1bWVudF09XCJkYXRhLnBkZi5pZERvY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlRG9jdW1lbnQpPVwib25TdGF0ZURvY3VtZW50KCRldmVudClcIj48L3NmLXNpZ24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU0lNVUxBRE9SJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNmLXNpbXVsYWRvciAgW3NpbXVsYWRvcl09XCJkYXRhXCIgW290aGVyVG9vbFRpcHNdPVwiZGF0YS5vdGhlclRvb2x0aXBzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2ltdWxhZG9yQ2hhbmdlKT1cIm9uU2ltdWxhZG9yQ2hhbmdlKCRldmVudClcIiAoZW5Qcm9jZXNvKT1cImVtaXRMb2FkaW5nRm9ybSgkZXZlbnQpXCI+PC9zZi1zaW11bGFkb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0FETydcIiBjbGFzcz1cImJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cIiFkYXRhPy5BRE8/LmRhdGFQcm9jZXNvPy5pZFByb2Nlc29cIiBbbmdTdHlsZV09XCJlbD8ubmdTdHlsZVwiIChjbGljayk9XCJnb1RvQURPKClcIiBsYWJlbD1cIlZhbGlkYXIgaWRlbnRpZGFkXCI+PC9wLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidBRE8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGE/LkFETz8uZGF0YVByb2Nlc28/LmlkUHJvY2Vzb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEtYWRvLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvY2Vzb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicHJvY2Vzbz8ucmVzcHVlc3RhUHJvY2Vzbz8uRXNFeGl0b3NvID09PSB0cnVlXCIgcFRvb2x0aXA9XCJWYWxpZGFkb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGlkPVwiVmFsaWRhZG9cIiBjbGFzcz1cInBpIHBpLXVzZXJcIiBzdHlsZT1cImNvbG9yOiBncmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaERlc2NyaXB0aW9uKCdWYWxpZGFkbycsIGZhbHNlKVwiICh0b3VjaGVuZCk9XCJvblVuVG91Y2hEZXNjcmlwdGlvbignVmFsaWRhZG8nKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInByb2Nlc28/LnJlc3B1ZXN0YVByb2Nlc28/LkVzRXhpdG9zbyA9PT0gZmFsc2VcIiBwVG9vbHRpcD1cIk5vIHZhbGlkYWRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWQ9XCJOby1WYWxpZGFkb1wiIGNsYXNzPVwicGkgcGktdXNlclwiIHN0eWxlPVwiY29sb3I6IHJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaERlc2NyaXB0aW9uKCdOby1WYWxpZGFkbycsIGZhbHNlKVwiICh0b3VjaGVuZCk9XCJvblVuVG91Y2hEZXNjcmlwdGlvbignTm8tVmFsaWRhZG8nKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFwcm9jZXNvPy5yZXNwdWVzdGFQcm9jZXNvXCIgcFRvb2x0aXA9XCJTaW4gdmFsaWRhclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGNsYXNzPVwicGkgcGktdXNlclwiIGlkPVwiU2luLVZhbGlkYXJcIiBzdHlsZT1cImNvbG9yOiBncmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblRvdWNoRGVzY3JpcHRpb24oJ1Npbi1WYWxpZGFyJywgZmFsc2UpXCIgKHRvdWNoZW5kKT1cIm9uVW5Ub3VjaERlc2NyaXB0aW9uKCdTaW4tVmFsaWRhcicpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gaWNvbj1cInBpIHBpLWV4dGVybmFsLWxpbmtcIiAoY2xpY2spPVwiZ29Ub0FETygpXCIgcFRvb2x0aXA9XCJBYnJpclwiIFtkaXNhYmxlZF09XCIhcHJvY2Vzb1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktY29weVwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQocHJvY2Vzby5pZClcIiBwVG9vbHRpcD1cIkNvcGlhclwiIFtkaXNhYmxlZF09XCIhcHJvY2Vzb1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiIChjbGljayk9XCJyZWZyZXNoSW50ZWdyYWNpb24ocHJvY2Vzby5pZClcIiBwVG9vbHRpcD1cIlJlZnJlc2NhclwiIFtkaXNhYmxlZF09XCIhcHJvY2Vzb1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJyZXN1bHQtYWRvXCIgKm5nSWY9XCJwcm9jZXNvICYmICFwcm9jZXNvLnJlc3B1ZXN0YVByb2Nlc28gJiYgcHJvY2Vzby5lc3RhZG8gPT0gJ1BST0NFU0FORE8nXCI+UHJvY2VzYW5kbzwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicmVzdWx0LWFkb1wiICpuZ0lmPVwicHJvY2VzbyAmJiBwcm9jZXNvLnJlc3B1ZXN0YVByb2Nlc28gJiYgcHJvY2Vzby5lc3RhZG8gPT0gJ1RFUk1JTkFETydcIj57e3Byb2Nlc28ucmVzcHVlc3RhUHJvY2Vzby5EZXRhbGxlID8/IHByb2Nlc28ucmVzcHVlc3RhUHJvY2Vzby5NZW5zYWplfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVGFibGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10YWJsZSBbdmFsdWVdPVwidmFsdWVzW2ldW2pdXCIgW2NvbHVtbnNdPVwiY29udHJvbHNbaV1bal0uY29uZmlnLmNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS1wbHVzXCIgKGNsaWNrKT1cImFkZE9iamVjdEFycmF5KGVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgW2Rpc2FibGVkXT1cImNvbnRyb2xzW2ldW2pdLmRpc2FibGVkID09PSB0cnVlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb2wubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY29udHJvbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgW2NvbnRyb2xdPVwiZXh0cmFjQ29udHJvbEZyb21UYWJsZUVsZW1lbnRzKGksIGosIGNvbClcIiBbbGFiZWxdPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJleHRyYWNWYWx1ZUZyb21UYWJsZUVsZW1lbnRzKGksIGosIHJvd0luZGV4LCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE9iamVjdCk9XCJhcHBseVZhbHVlc0Zyb21PYmplY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0VmFsdWUpPVwic2V0VmFsdWUoJGV2ZW50LCBleHRyYWNWYWx1ZUZyb21UYWJsZUVsZW1lbnRzKGksIGosIHJvd0luZGV4LCBjb2wpLnNjb3BlLCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RlbXBWYWx1ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZi1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyb3dEYXRhW2NvbC5jb2xdfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeTpVU0QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Jvd0RhdGFbY29sLmNvbF0gfCBjdXJyZW5jeTogJ1VTRCd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGU6eXl5eS1tbS1kZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cm93RGF0YVtjb2wuY29sXSB8IGRhdGU6ICd5eXl5LW1tLWRkJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZTpkZC9tbS95eXl5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyb3dEYXRhW2NvbC5jb2xdIHwgZGF0ZTogJ2RkL01NL3l5eXknfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInJvd0RhdGFbY29sLmNvbF1cIiBjbGFzcz1cInBpIHBpLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcm93RGF0YVtjb2wuY29sXVwiIGNsYXNzPVwicGkgcGktdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0Um93KGVsLCByb3dEYXRhLCByb3dJbmRleClcIiBpY29uPVwicGkgcGktcGVuY2lsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1pbmZvIG1yLTFcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVSb3coZWwsIHJvd0luZGV4KVwiIFtkaXNhYmxlZF09XCJjb250cm9sc1tpXVtqXS5kaXNhYmxlZCA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tZGFuZ2VyXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPHAtdG9hc3QgKm5nSWY9XCJpc0RpYWxvZ1wiPjwvcC10b2FzdD4iXX0=
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUErQyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHNUcsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFHckMsT0FBTyxFQUFFLFVBQVUsRUFBMEIsTUFBTSx1QkFBdUIsQ0FBQztBQU0zRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyxhQUFhO0lBdUJ4QixZQUNVLGNBQThCLEVBQzlCLFdBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3RCLFVBQXNCO1FBTHRCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF6QnZCLGFBQVEsR0FBRSxLQUFLLENBQUM7UUFDaEIsb0JBQWUsR0FBRSxLQUFLLENBQUM7UUFPaEMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQWdCZixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLENBQUM7UUFDckQs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QVcsRUFBRSx1QkFBdUI7b0JBQ3BDLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzt3T0FFVSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBY2lCLFFBQVE7c0JBQTlCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCAqIGFzIGpzb25wYXRoIGZyb20gJ2pzb25wYXRoJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFNoZW1hIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9zaGVtYS5tb2RlbCc7XHJcbmltcG9ydCB7IENoYW5nZURhdGEsIExvYWRpbmcsIFNmQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZi1jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWdSZWdpc3RybyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvY3J1ZC1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTdGVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaW11bGFkb3IgfSBmcm9tICdzZi1zaW11bGFkb3InO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgQWRvU2VydmljZSwgSldUU2VydmljZSwgUHJvY2Vzb0FETyB9IGZyb20gJ3NmLWFkbyc7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXR7XHJcbiAgQElucHV0KCkgdWlFc3F1ZW1hOiBhbnk7XHJcbiAgQElucHV0KCkgZXNxdWVtYSE6IFNoZW1hO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuICBASW5wdXQoKSBpc0RpYWxvZz0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNBZGRyZXNzRGlhbG9nPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXBhcmFkb3I/OiBzdHJpbmc7XHJcbiAgbmV3QWRkcmVzcz86IHN0cmluZztcclxuICBjdXJyZW50QWRkcmVzcz86IHN0cmluZztcclxuICByZWdpc3RybyE6IENvbmZpZ1JlZ2lzdHJvO1xyXG4gIHZhbHVlcyE6IGFueVtdW107XHJcbiAgY29udHJvbHMhOiBhbnlbXVtdO1xyXG4gIGNvbnRyb2xzTG9hZGVkID0gZmFsc2U7XHJcbiAgaWRLYXRpb3MhOiBzdHJpbmc7XHJcbiAgdmlzaWJsZSE6IGJvb2xlYW5bXVtdO1xyXG4gIGlzTW9iaWxlID0gZmFsc2U7XHJcbiAgdXJsQURPPzogc3RyaW5nO1xyXG4gIHByb2Nlc286IFByb2Nlc29BRE8gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBsb2FkaW5nITpMb2FkaW5nO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRvb2x0aXApIHRvb2x0aXBzITogUXVlcnlMaXN0IDxUb29sdGlwPjtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNydWRTZXJ2aWNlOiBTZkNydWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgc3RlcFNlcnZpY2U6IFN0ZXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhZG9TZXJ2aWNlOiBBZG9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBqd3RTZXJ2aWNlOiBKV1RTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB7aW5Qcm9ncmVzczogdHJ1ZSwgdGFyZ2V0OiB1bmRlZmluZWR9O1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2OCkgdGhpcy5pc01vYmlsZSA9IHRydWVcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA3NjgpIHRoaXMuaXNNb2JpbGUgPSB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5idWlsZENvbnRyb2xzKClcclxuICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmlzQWRkcmVzc0RpYWxvZykgdGhpcy5jdXJyZW50QWRkcmVzcyA9IHRoaXMuZGF0YS5jdXJyZW50VmFsdWVcclxuICAgICAgdGhpcy5qd3RTZXJ2aWNlLmlkS2F0aW9zID0gdGhpcy5jcnVkU2VydmljZS5pZEthdGlvc1xyXG4gICAgICB0aGlzLmp3dFNlcnZpY2Uuc2Vydmlkb3JJbnRlZ3JhY2lvbmVzID0gdGhpcy5jcnVkU2VydmljZS5lbnZpcm9ubWVudC5TZXJ2aWRvckludGVncmFjaW9uZXNcclxuICAgICAgdGhpcy5hZG9TZXJ2aWNlLnNlcnZpZG9ySW50ZWdyYWNpb25lcyA9IHRoaXMuY3J1ZFNlcnZpY2UuZW52aXJvbm1lbnQuU2Vydmlkb3JJbnRlZ3JhY2lvbmVzXHJcbiAgICAgIHRoaXMuaWRLYXRpb3MgPSB0aGlzLmNydWRTZXJ2aWNlLmlkS2F0aW9zXHJcbiAgICAgIHRoaXMuc3RlcFNlcnZpY2UucmVxdWVzdEFwcHJvdmVkJC5zdWJzY3JpYmUoKGFwcHJvdmVkKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlhbG9nICYmIGFwcHJvdmVkKXtcclxuICAgICAgICAgIHRoaXMudWlFc3F1ZW1hID0gdGhpcy5jcnVkU2VydmljZS5nZXRVSUVzcXVlbWEodGhpcy5zdGVwU2VydmljZS5jdXJyZW50SW5kZXgpXHJcbiAgICAgICAgICB0aGlzLmVzcXVlbWEgPSB0aGlzLmNydWRTZXJ2aWNlLmdldEVzcXVlbWEodGhpcy5zdGVwU2VydmljZS5jdXJyZW50SW5kZXgpXHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmNydWRTZXJ2aWNlLmdldERhdGEodGhpcy5zdGVwU2VydmljZS5jdXJyZW50SW5kZXgpO1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RybyA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8odGhpcy5zdGVwU2VydmljZS5jdXJyZW50SW5kZXgpXHJcbiAgICAgICAgICB0aGlzLmJ1aWxkQ29udHJvbHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdExvYWRpbmdGb3JtKCRldmVudDogYm9vbGVhbil7XHJcbiAgICB0aGlzLmxvYWRpbmcuaW5Qcm9ncmVzcyA9ICRldmVudFxyXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNydWRTZXJ2aWNlLmZvcm1Mb2FkaW5nID0gdGhpcy5sb2FkaW5nKS8vc2kgbm8gc2UgdXNhIGFzaSBlbCBlbnByb2Nlc28gdG90ZWEgY29uIGVsIHNpbXVsYWRvclxyXG4gIH1cclxuXHJcblxyXG5cclxuICBidWlsZENvbnRyb2xzKCl7XHJcbiAgICB0aGlzLnZpc2libGUgPSBbXVxyXG4gICAgdGhpcy5jb250cm9sc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb250cm9scyA9IFtdXHJcbiAgICB0aGlzLnZhbHVlcyA9IFtdXHJcblxyXG4gICAgLy9hZGRyZXNzXHJcbiAgICBpZiAodGhpcy5pc0FkZHJlc3NEaWFsb2cpIHRoaXMubmV3QWRkcmVzcyA9IHRoaXMuY3J1ZFNlcnZpY2UuYXJtYXJOdWV2YURpcmVjY2lvbihcInN0cmluZ1wiLCB0aGlzLmRhdGEsIHRoaXMuY3J1ZFNlcnZpY2UuZ2V0VmFsdWUoXCIkLi5zZXBhcmFkb3JcIiwgdGhpcy5kYXRhKSlcclxuXHJcbiAgICB0aGlzLnVpRXNxdWVtYS5lbGVtZW50cy5mb3JFYWNoKChsYXlvdXQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGxldCBpc1Zpc2libGUgPSBsYXlvdXQuY29uZGl0aW9ucyA/IHRoaXMuY3J1ZFNlcnZpY2UuaXNDb25kaXRpb25zQ29tcGxldGVkKGxheW91dC5jb25kaXRpb25zLCB0aGlzLnJlZ2lzdHJvLmNvbmRpdGlvbnMgfHwgW10sIHRoaXMuZGF0YSk6IHRydWVcclxuICAgICAgdGhpcy52aXNpYmxlLnB1c2gobGF5b3V0LmVsZW1lbnRzPyBsYXlvdXQuZWxlbWVudHMubWFwKCgpID0+IGlzVmlzaWJsZSk6IFtpc1Zpc2libGVdKVxyXG4gICAgICB0aGlzLmNvbnRyb2xzLnB1c2goW10pXHJcbiAgICAgIHRoaXMudmFsdWVzLnB1c2goW10pXHJcblxyXG4gICAgICBsYXlvdXQuZWxlbWVudHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSwgajogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY29uZGl0aW9ucykgIHRoaXMudmlzaWJsZVtpXVtqXSA9IHRoaXMuY3J1ZFNlcnZpY2UuaXNDb25kaXRpb25zQ29tcGxldGVkKGVsZW1lbnQuY29uZGl0aW9ucywgdGhpcy5yZWdpc3Ryby5jb25kaXRpb25zIHx8IFtdLCB0aGlzLmRhdGEpXHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50Lm5nU3R5bGUgJiYgdHlwZW9mKGVsZW1lbnQubmdTdHlsZSkgPT0gXCJzdHJpbmdcIikgIGVsZW1lbnQubmdTdHlsZSA9IEpTT04ucGFyc2UoZWxlbWVudC5uZ1N0eWxlKVxyXG4gICAgICAgIGlmIChlbGVtZW50LnVybCl7XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xzW2ldLnB1c2godW5kZWZpbmVkKVxyXG4gICAgICAgICAgbGV0IHVybCA9IHRoaXMuY3J1ZFNlcnZpY2UuYXBwbHlTdHJpbmdLZXlzKGVsZW1lbnQudXJsKVxyXG4gICAgICAgICAgdGhpcy52YWx1ZXNbaV0ucHVzaCh0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWVsZW1lbnQuc2NvcGUpe1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sc1tpXS5wdXNoKHVuZGVmaW5lZClcclxuICAgICAgICAgIHRoaXMudmFsdWVzW2ldLnB1c2godW5kZWZpbmVkKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xzW2ldLnB1c2godGhpcy5jcnVkU2VydmljZS5nZXRDb250cm9sKGVsZW1lbnQuc2NvcGUsIHRoaXMuZXNxdWVtYSkpXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbHNbaV1bal0uc2NvcGUgPSBlbGVtZW50LnNjb3BlXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldLnB1c2godGhpcy5jcnVkU2VydmljZS5nZXRWYWx1ZShlbGVtZW50LnNjb3BlLCB0aGlzLmRhdGEpKVxyXG4gICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbGVtZW50KVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29udHJvbHNbaV0pXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmFsdWVzW2ldKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb250cm9sc0xvYWRlZCA9IHRydWU7XHJcbiAgICBsZXQgaWRQcm9jZXNvID0gdGhpcy5kYXRhLkFETz8uZGF0YVByb2Nlc28/LmlkUHJvY2Vzb1xyXG4gICAgaWYgKGlkUHJvY2VzbyAmJiB0aGlzLnByb2Nlc28/LmlkICE9IGlkUHJvY2VzbykgdGhpcy5yZWZyZXNoSW50ZWdyYWNpb24oaWRQcm9jZXNvKVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaEludGVncmFjaW9uKGlkUHJvY2VzbzogbnVtYmVyKXtcclxuICAgIHRoaXMuZW1pdExvYWRpbmdGb3JtKHRydWUpXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgIHRoaXMuYWRvU2VydmljZS5nZXRQcm9jZXNvKGlkUHJvY2VzbykudGhlbigocHJvY2VzbykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNvID0gcHJvY2Vzb1xyXG4gICAgICAgICAgdGhpcy5kYXRhLkFETy5wcm9jZXNvID0gdGhpcy5wcm9jZXNvXHJcbiAgICAgICAgfSlcclxuICAgIF0pXHJcbiAgICAuZmluYWxseSgoKSA9PiB0aGlzLmVtaXRMb2FkaW5nRm9ybShmYWxzZSkpXHJcbiAgfVxyXG5cclxuICBleHRyYWNDb250cm9sRnJvbVRhYmxlRWxlbWVudHMoaTphbnksIGo6YW55LCBjb2w6YW55KXtcclxuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5jb250cm9sc1tpXVtqXS5wcm9wZXJ0aWVzW2NvbC5jb2xdO1xyXG4gICAgcmV0dXJuIHByb3BlcnR5XHJcbiAgfVxyXG5cclxuICBleHRyYWNWYWx1ZUZyb21UYWJsZUVsZW1lbnRzKGk6YW55LCBqOmFueSwgazphbnksIGNvbDphbnkpe1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlc1tpXVtqXVtrXVtjb2wuY29sXTtcclxuICAgIHJldHVybiB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodmFsdWU6IGFueSwgc2NvcGU6IGFueSwgaTogbnVtYmVyLCBqOiBudW1iZXIpIHtcclxuICAgIHNjb3BlID0gc2NvcGUucmVwbGFjZUFsbCgnLi5wcm9wZXJ0aWVzJywgJycpXHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgbGV0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xzW2ldW2pdXHJcbiAgICAgIHRoaXMudmFsdWVzW2ldW2pdID0gdmFsdWU7XHJcbiAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgc2NvcGUsIHZhbHVlKTtcclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5jaGFuZ2VEYXRhID0gbmV3IENoYW5nZURhdGEodmFsdWUsIHNjb3BlLCB0aGlzLmNydWRTZXJ2aWNlLmluZGV4KVxyXG4gICAgICB0aGlzLnVpRXNxdWVtYS5lbGVtZW50cy5mb3JFYWNoKChsYXlvdXQ6IGFueSwgaUxheW91dDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKGxheW91dC5jb25kaXRpb25zKXtcclxuICAgICAgICAgIGxldCBpc1Zpc2libGUgPSB0aGlzLmNydWRTZXJ2aWNlLmlzQ29uZGl0aW9uc0NvbXBsZXRlZChsYXlvdXQuY29uZGl0aW9ucywgdGhpcy5jcnVkU2VydmljZS5nZXRSZWdpc3Rybyh0aGlzLmNydWRTZXJ2aWNlLmluZGV4KS5jb25kaXRpb25zIHx8IFtdLCB0aGlzLmRhdGEpXHJcbiAgICAgICAgICBpZihsYXlvdXQuZWxlbWVudHMpIHRoaXMudmlzaWJsZVtpTGF5b3V0XSA9IGxheW91dC5lbGVtZW50cy5tYXAoKCkgPT4gaXNWaXNpYmxlKVxyXG4gICAgICAgICAgZWxzZSB0aGlzLnZpc2libGVbaUxheW91dF1bMF0gPSBpc1Zpc2libGVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxheW91dC5lbGVtZW50cz8uZm9yRWFjaCgoZWxlbWVudDogYW55LCBpbmRleEVsOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmNvbmRpdGlvbnMpe1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGVbaUxheW91dF1baW5kZXhFbF0gPSB0aGlzLmNydWRTZXJ2aWNlLmlzQ29uZGl0aW9uc0NvbXBsZXRlZChlbGVtZW50LmNvbmRpdGlvbnMsIHRoaXMucmVnaXN0cm8uY29uZGl0aW9ucyB8fCBbXSwgdGhpcy5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnRyb2wuYXBwbHlLZXlzPy5mb3JFYWNoKChpOiBudW1iZXIpID0+IHtcclxuICAgICAgICBsZXQga2V5ID0gdGhpcy5yZWdpc3Ryby5rZXlzID8gdGhpcy5yZWdpc3Ryby5rZXlzW2ldIDogdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKGtleSkgdGhpcy5jcnVkU2VydmljZS5hcHBseUtleShrZXksIHRoaXMucmVnaXN0cm8sIGtleS5pbmRleERhdGEgPyB0aGlzLmNydWRTZXJ2aWNlLmdldERhdGEoa2V5LmluZGV4RGF0YSkgOiB0aGlzLmRhdGEpXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmJ1aWxkQ29udHJvbHMoKVxyXG4gICAgfVxyXG4gICAgdGhpcy5jcnVkU2VydmljZS5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2hhbmdlJywgdGhpcy5lc3F1ZW1hLCB1bmRlZmluZWQsIHRoaXMuZGF0YSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2VuZE5vdGlmaWNhdGlvbihtZXNzYWdlOiBNZXNzYWdlKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZChtZXNzYWdlKVxyXG4gIH1cclxuXHJcbiAgYXBwbHlWYWx1ZXNGcm9tT2JqZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC5vcHRpb25WYWx1ZSl7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnQub3B0aW9uVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBvcHRpb25WYWwgPSBldmVudC5vcHRpb25WYWx1ZVtpXTtcclxuICAgICAgICBjb25zdCBuZXdWYWwgPSBldmVudC5kYXRhID8gdGhpcy5hcGx5Rm9ybWF0VmFsdWUob3B0aW9uVmFsLnNjb3BlLCBldmVudC5kYXRhW29wdGlvblZhbC5rZXldKTogbnVsbDtcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIG9wdGlvblZhbC5zY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsJycpLCB0aGlzLmFwbHlGb3JtYXRWYWx1ZShvcHRpb25WYWwuc2NvcGUsIGV2ZW50LmRhdGFbb3B0aW9uVmFsLmtleV0pKVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVCeVNjb3BlKG9wdGlvblZhbC5zY29wZSwgbmV3VmFsKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZUJ5U2NvcGUoc2NvcGU6IHN0cmluZywgbmV3VmFsOiBhbnkpe1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRyb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuY29udHJvbHNbaV07XHJcbiAgICAgIHJvdy5mb3JFYWNoKChlbCwgaikgPT4ge1xyXG4gICAgICAgIGlmIChlbC5zY29wZSAmJiBlbC5zY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsJycpPT0gc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCcnKSl7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlc1tpXVtqXSA9IG5ld1ZhbFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwbHlGb3JtYXRWYWx1ZShzY29wZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBjb25zdCBjb250cm9sID0ganNvbnBhdGgucXVlcnkodGhpcy5lc3F1ZW1hLCBzY29wZSlbMF1cclxuICAgIGxldCByZXNwO1xyXG4gICAgc3dpdGNoIChjb250cm9sLnR5cGUpIHtcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgcmVzcCA9IG5ldyBEYXRlKGAke3ZhbHVlfWApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ251bWVyaWMnOlxyXG4gICAgICAgIHJlc3AgPSArdmFsdWVcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXNwID0gdmFsdWVcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwXHJcbiAgfVxyXG5cclxuICBlZGl0Um93KGVsZW1lbnQ6IGFueSwgZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLmFkZEN1c3RvbUNoaWxkcmVuRXZlbnQoXCJvbkNsaWNrZWRFZGl0QnV0dG9uXCIsIHtlbGVtZW50LCBkYXRhLCBpbmRleH0pXHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3coZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN0ZXBTZXJ2aWNlLmFkZEN1c3RvbUNoaWxkcmVuRXZlbnQoXCJvbkNsaWNrZWREZWxldGVCdXR0b25cIiwge2VsZW1lbnQsIGluZGV4fSlcclxuICB9XHJcblxyXG4gIGFkZE9iamVjdEFycmF5KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zdGVwU2VydmljZS5hZGRDdXN0b21DaGlsZHJlbkV2ZW50KFwib25DbGlja2VkQWRkQnV0dG9uXCIsIHtlbGVtZW50fSlcclxuICB9XHJcblxyXG4gIG9wZW5Qb3BVcERpcmVjY2lvbihzY29wZTogc3RyaW5nKXtcclxuICAgIHRoaXMuc3RlcFNlcnZpY2UuYWRkQ3VzdG9tQ2hpbGRyZW5FdmVudChcIm9uQ2xpY2tlZEFkZHJlc3NcIiwge3Njb3BlfSlcclxuICB9XHJcblxyXG4gIG9uU3RhdGVEb2N1bWVudChzdGF0ZTogc3RyaW5nKXtcclxuICAgIHRoaXMuZGF0YS5wZGYuc2lnbmVkID0gc3RhdGUudG9VcHBlckNhc2UoKSA9PSBcIkZJUk1BRE9cIlxyXG4gIH1cclxuXHJcbiAgb25TaW11bGFkb3JDaGFuZ2UoJGV2ZW50OiBTaW11bGFkb3IpIHtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsICRldmVudCkpXHJcbiAgfVxyXG5cclxuICBnb1RvQURPKCl7XHJcbiAgICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICBsZXQgY2FsbGJhY2sgPSB1cmwuc3BsaXQoJz8nKVswXSArIGA/aWQ9JHt0aGlzLmRhdGEuaWRGb3JtfWA7XHJcbiAgICBsZXQgaWRQcm9jZXNvID0gdGhpcy5kYXRhLkFETy5kYXRhUHJvY2Vzbz8uaWRQcm9jZXNvXHJcbiAgICBsZXQgZGF0YVByb2Nlc28gPSB0aGlzLmRhdGEuQURPLmRhdGFQcm9jZXNvXHJcbiAgICBkYXRhUHJvY2Vzby5jdGl2byA9IHRoaXMuZGF0YS5pZEZvcm1cclxuICAgIC8vdGhpcy5kYXRhLkFETy5pZFRyYW5zYWN0aW9uID0gbnVsbFxyXG4gICAgLy90aGlzLmRhdGEuQURPLmlkUHJvY2VzbyA9IG51bGxcclxuICAgIGlmIChpZFByb2Nlc28pe1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke3RoaXMuY3J1ZFNlcnZpY2UuZW52aXJvbm1lbnQuV2ViVXRpbGl0aWVzfUdXVi9BRE8vJHt0aGlzLmNydWRTZXJ2aWNlLmlkS2F0aW9zfT9pZD0ke2lkUHJvY2Vzb31gXHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGRhdGFQcm9jZXNvKXtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmNydWRTZXJ2aWNlLmVudmlyb25tZW50LldlYlV0aWxpdGllc31HV1YvQURPLyR7dGhpcy5jcnVkU2VydmljZS5pZEthdGlvc30/ZGF0YVByb2Nlc289JHtidG9hKEpTT04uc3RyaW5naWZ5KGRhdGFQcm9jZXNvKSl9JmNhbGxiYWNrPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbGxiYWNrKX1gXHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25Ub3VjaERlc2NyaXB0aW9uKGlkOiBzdHJpbmcsIGFsaWduUmlnaHQ9dHJ1ZSkge1xyXG4gICAgY29uc3QgZm91bmRUb29sdGlwID0gdGhpcy50b29sdGlwcy5maW5kKHRvb2x0aXAgPT4gdG9vbHRpcC5lbC5uYXRpdmVFbGVtZW50LmlkID09PSBpZCkhO1xyXG4gICAgdHJ5e1xyXG4gICAgICBmb3VuZFRvb2x0aXAuYWN0aXZhdGUoKTtcclxuICAgICAgYWxpZ25SaWdodCA/IGZvdW5kVG9vbHRpcC5hbGlnblJpZ2h0KCk6IGZvdW5kVG9vbHRpcC5hbGlnblRvcCgpO1xyXG4gICAgfWNhdGNoKGV4KXt9XHJcbiAgfVxyXG5cclxuICBvblVuVG91Y2hEZXNjcmlwdGlvbihkZXNjcmlwY2lvbjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmb3VuZFRvb2x0aXAgPSB0aGlzLnRvb2x0aXBzLmZpbmQodG9vbHRpcCA9PiB0b29sdGlwLmVsLm5hdGl2ZUVsZW1lbnQuaWQgPT09IGRlc2NyaXBjaW9uKSE7XHJcbiAgICB0cnl7XHJcbiAgICAgIGZvdW5kVG9vbHRpcC5kZWFjdGl2YXRlKCk7XHJcbiAgICB9Y2F0Y2goZXgpe31cclxuICB9XHJcblxyXG4gIGNvcHlUb0NsaXBib2FyZChpZFByb2Nlc286IHN0cmluZyl7XHJcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5jcnVkU2VydmljZS5lbnZpcm9ubWVudC5XZWJVdGlsaXRpZXN9R1dWL0FETy8ke3RoaXMuY3J1ZFNlcnZpY2UuaWRLYXRpb3N9P2lkPSR7aWRQcm9jZXNvfWBcclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHVybClcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImNvbnRyb2xzTG9hZGVkXCIgY2xhc3M9XCJmcm0tY29udGFpbmVyXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWRkcmVzc0RpYWxvZyAmJiBjdXJyZW50QWRkcmVzc1wiPlxyXG4gICAgRGlyZWNjacOzbiBhY3R1YWw6IHt7Y3VycmVudEFkZHJlc3MgfCBmb3JtYXRBZGRyZXNzOiBzZXBhcmFkb3J9fVxyXG4gICAgPGJyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxicj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBZGRyZXNzRGlhbG9nXCI+XHJcbiAgICBEaXJlY2Npw7NuIG51ZXZhOiB7e25ld0FkZHJlc3MgfCBmb3JtYXRBZGRyZXNzOiBzZXBhcmFkb3J9fVxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiB1aUVzcXVlbWEuZWxlbWVudHM7IGxldCBpID0gaW5kZXhcIiBbY2xhc3NdPVwiZWxlbWVudD8uY2xhc3NcIiAjYT5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbGVtZW50LnR5cGVcIiAqbmdJZj1cInZpc2libGVbaV1bMF1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgKm5nU3dpdGNoQ2FzZT1cIidMYWJlbCdcIiBbc3R5bGVdPVwiZWxlbWVudD8uc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7ZWxlbWVudD8ubGFiZWx9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hvcml6b250YWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbCBvZiBlbGVtZW50LmVsZW1lbnRzOyBsZXQgaiA9aW5kZXhcIiBbY2xhc3NdPVwiZWw/LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWwudHlwZVwiICpuZ0lmPVwidmlzaWJsZVtpXVtqXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2YtY29udHJvbCAqbmdTd2l0Y2hDYXNlPVwiJ0NvbnRyb2wnXCIgW2NvbnRyb2xdPVwiY29udHJvbHNbaV1bal1cIiBbbGFiZWxdPVwiZWwubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlc1tpXVtqXVwiIChzZXRWYWx1ZSk9XCJzZXRWYWx1ZSgkZXZlbnQsIGVsLnNjb3BlLCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE5vdGlmaWNhdGlvbik9XCJzZW5kTm90aWZpY2F0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbmRPYmplY3QpPVwiYXBwbHlWYWx1ZXNGcm9tT2JqZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHJlc3NDbGlja2VkKT1cIm9wZW5Qb3BVcERpcmVjY2lvbihlbC5zY29wZSlcIj48L3NmLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1RleHRvJ1wiIFtuZ1N0eWxlXT1cInsnaGVpZ2h0JzogJzEwMCUnLCAnbWFyZ2luLWJsb2NrJzogJ2F1dG8nfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3tlbC5sYWJlbH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVmVydGljYWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbCBvZiBlbGVtZW50LmVsZW1lbnRzOyBsZXQgaiA9aW5kZXhcIiBbY2xhc3NdPVwiZWw/LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWwudHlwZVwiICpuZ0lmPVwidmlzaWJsZVtpXVtqXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2YtY29udHJvbCAqbmdTd2l0Y2hDYXNlPVwiJ0NvbnRyb2wnXCIgW2NvbnRyb2xdPVwiY29udHJvbHNbaV1bal1cIiBbbGFiZWxdPVwiZWwubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlc1tpXVtqXVwiIChzZXRWYWx1ZSk9XCJzZXRWYWx1ZSgkZXZlbnQsIGVsLnNjb3BlLCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE5vdGlmaWNhdGlvbik9XCJzZW5kTm90aWZpY2F0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbmRPYmplY3QpPVwiYXBwbHlWYWx1ZXNGcm9tT2JqZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHJlc3NDbGlja2VkKT1cIm9wZW5Qb3BVcERpcmVjY2lvbihlbC5zY29wZSlcIj48L3NmLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidQREYnXCIgY2xhc3M9XCJwZGZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZnJhbWUgW3NyY109XCJ2YWx1ZXNbaV1bal1cIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvdz1cImdlb2xvY2F0aW9uICo7IGNhbWVyYSAqO1wiPjwvaWZyYW1lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1BERi1TSUdOJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNmLXNpZ24gW2FsbG93RG93bmxvYWRdPVwidHJ1ZVwiIFtpZGthdGlvc109XCJpZEthdGlvc1wiIFt0ZG9jXT1cImRhdGEucGRmLnRkb2NcIiBbbmRvY109XCJkYXRhLnBkZi5uZG9jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWREb2N1bWVudF09XCJkYXRhLnBkZi5pZFwiIFt0eXBlRG9jdW1lbnRdPVwiZGF0YS5wZGYuaWREb2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZURvY3VtZW50KT1cIm9uU3RhdGVEb2N1bWVudCgkZXZlbnQpXCI+PC9zZi1zaWduPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1NJTVVMQURPUidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZi1zaW11bGFkb3IgIFtzaW11bGFkb3JdPVwiZGF0YVwiIFtvdGhlclRvb2xUaXBzXT1cImRhdGEub3RoZXJUb29sdGlwc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpbXVsYWRvckNoYW5nZSk9XCJvblNpbXVsYWRvckNoYW5nZSgkZXZlbnQpXCIgKGVuUHJvY2Vzbyk9XCJlbWl0TG9hZGluZ0Zvcm0oJGV2ZW50KVwiPjwvc2Ytc2ltdWxhZG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0FETydcIiBjbGFzcz1cImJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cIiFkYXRhPy5BRE8/LmRhdGFQcm9jZXNvPy5pZFByb2Nlc29cIiBbbmdTdHlsZV09XCJlbD8ubmdTdHlsZVwiIChjbGljayk9XCJnb1RvQURPKClcIiBsYWJlbD1cIlZhbGlkYXIgaWRlbnRpZGFkXCI+PC9wLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidBRE8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGE/LkFETz8uZGF0YVByb2Nlc28/LmlkUHJvY2Vzb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEtYWRvLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvY2Vzb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicHJvY2Vzbz8ucmVzcHVlc3RhUHJvY2Vzbz8uRXNFeGl0b3NvID09PSB0cnVlXCIgcFRvb2x0aXA9XCJWYWxpZGFkb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGlkPVwiVmFsaWRhZG9cIiBjbGFzcz1cInBpIHBpLXVzZXJcIiBzdHlsZT1cImNvbG9yOiBncmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaERlc2NyaXB0aW9uKCdWYWxpZGFkbycsIGZhbHNlKVwiICh0b3VjaGVuZCk9XCJvblVuVG91Y2hEZXNjcmlwdGlvbignVmFsaWRhZG8nKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInByb2Nlc28/LnJlc3B1ZXN0YVByb2Nlc28/LkVzRXhpdG9zbyA9PT0gZmFsc2VcIiBwVG9vbHRpcD1cIk5vIHZhbGlkYWRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWQ9XCJOby1WYWxpZGFkb1wiIGNsYXNzPVwicGkgcGktdXNlclwiIHN0eWxlPVwiY29sb3I6IHJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaERlc2NyaXB0aW9uKCdOby1WYWxpZGFkbycsIGZhbHNlKVwiICh0b3VjaGVuZCk9XCJvblVuVG91Y2hEZXNjcmlwdGlvbignTm8tVmFsaWRhZG8nKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFwcm9jZXNvPy5yZXNwdWVzdGFQcm9jZXNvXCIgcFRvb2x0aXA9XCJTaW4gdmFsaWRhclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGNsYXNzPVwicGkgcGktdXNlclwiIGlkPVwiU2luLVZhbGlkYXJcIiBzdHlsZT1cImNvbG9yOiBncmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblRvdWNoRGVzY3JpcHRpb24oJ1Npbi1WYWxpZGFyJywgZmFsc2UpXCIgKHRvdWNoZW5kKT1cIm9uVW5Ub3VjaERlc2NyaXB0aW9uKCdTaW4tVmFsaWRhcicpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gaWNvbj1cInBpIHBpLWV4dGVybmFsLWxpbmtcIiAoY2xpY2spPVwiZ29Ub0FETygpXCIgcFRvb2x0aXA9XCJBYnJpclwiIFtkaXNhYmxlZF09XCIhcHJvY2Vzb1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktY29weVwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQocHJvY2Vzby5pZClcIiBwVG9vbHRpcD1cIkNvcGlhclwiIFtkaXNhYmxlZF09XCIhcHJvY2Vzb1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiIChjbGljayk9XCJyZWZyZXNoSW50ZWdyYWNpb24ocHJvY2Vzby5pZClcIiBwVG9vbHRpcD1cIlJlZnJlc2NhclwiIFtkaXNhYmxlZF09XCIhcHJvY2Vzb1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJyZXN1bHQtYWRvXCIgKm5nSWY9XCJwcm9jZXNvICYmICFwcm9jZXNvLnJlc3B1ZXN0YVByb2Nlc28gJiYgcHJvY2Vzby5lc3RhZG8gPT0gJ1BST0NFU0FORE8nXCI+UHJvY2VzYW5kbzwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicmVzdWx0LWFkb1wiICpuZ0lmPVwicHJvY2VzbyAmJiBwcm9jZXNvLnJlc3B1ZXN0YVByb2Nlc28gJiYgcHJvY2Vzby5lc3RhZG8gPT0gJ1RFUk1JTkFETydcIj57e3Byb2Nlc28ucmVzcHVlc3RhUHJvY2Vzby5EZXRhbGxlID8/IHByb2Nlc28ucmVzcHVlc3RhUHJvY2Vzby5NZW5zYWplfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVGFibGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10YWJsZSBbdmFsdWVdPVwidmFsdWVzW2ldW2pdXCIgW2NvbHVtbnNdPVwiY29udHJvbHNbaV1bal0uY29uZmlnLmNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS1wbHVzXCIgKGNsaWNrKT1cImFkZE9iamVjdEFycmF5KGVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgW2Rpc2FibGVkXT1cImNvbnRyb2xzW2ldW2pdLmRpc2FibGVkID09PSB0cnVlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb2wubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY29udHJvbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgW2NvbnRyb2xdPVwiZXh0cmFjQ29udHJvbEZyb21UYWJsZUVsZW1lbnRzKGksIGosIGNvbClcIiBbbGFiZWxdPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJleHRyYWNWYWx1ZUZyb21UYWJsZUVsZW1lbnRzKGksIGosIHJvd0luZGV4LCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE9iamVjdCk9XCJhcHBseVZhbHVlc0Zyb21PYmplY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0VmFsdWUpPVwic2V0VmFsdWUoJGV2ZW50LCBleHRyYWNWYWx1ZUZyb21UYWJsZUVsZW1lbnRzKGksIGosIHJvd0luZGV4LCBjb2wpLnNjb3BlLCBpLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RlbXBWYWx1ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZi1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyb3dEYXRhW2NvbC5jb2xdfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhZGRyZXNzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cm93RGF0YVtjb2wuY29sXSB8IGZvcm1hdEFkZHJlc3M6IGV4dHJhY0NvbnRyb2xGcm9tVGFibGVFbGVtZW50cyhpLCBqLCBjb2wpLnNlcGFyYWRvciB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5OlVTRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cm93RGF0YVtjb2wuY29sXSB8IGN1cnJlbmN5OiAnVVNEJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZTp5eXl5LW1tLWRkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyb3dEYXRhW2NvbC5jb2xdIHwgZGF0ZTogJ3l5eXktbW0tZGQnfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlOmRkL21tL3l5eXknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Jvd0RhdGFbY29sLmNvbF0gfCBkYXRlOiAnZGQvTU0veXl5eSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicm93RGF0YVtjb2wuY29sXVwiIGNsYXNzPVwicGkgcGktY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyb3dEYXRhW2NvbC5jb2xdXCIgY2xhc3M9XCJwaSBwaS10aW1lc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRSb3coZWwsIHJvd0RhdGEsIHJvd0luZGV4KVwiIGljb249XCJwaSBwaS1wZW5jaWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWluZm8gbXItMVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZVJvdyhlbCwgcm93SW5kZXgpXCIgW2Rpc2FibGVkXT1cImNvbnRyb2xzW2ldW2pdLmRpc2FibGVkID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48cC10b2FzdCAqbmdJZj1cImlzRGlhbG9nXCI+PC9wLXRvYXN0PlxyXG4iXX0=
|