sf-crud 12.0.1-beta33 → 12.0.1-beta34

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.
@@ -39,7 +39,6 @@ export class RegistroComponent {
39
39
  }
40
40
  ngOnInit() {
41
41
  this.loadConfigCrud();
42
- this.setLabelSumbit();
43
42
  }
44
43
  loadConfigCrud() {
45
44
  this.enProceso = true;
@@ -47,14 +46,14 @@ export class RegistroComponent {
47
46
  .then(res => {
48
47
  this.setDataTemp(res.esquema, this.dataTemp);
49
48
  this.crudConfig = res;
50
- console.log(this.crudConfig);
51
- if (this.trx != 'c')
52
- this.getInfoRegistro(this.crudConfig.registro);
53
- else {
49
+ if (this.trx == 'c') {
54
50
  this.data = this.createObject(this.crudConfig.esquema);
51
+ this.setLabelSumbit();
55
52
  this.enProceso = false;
53
+ this.configOperation = this.crudConfig.registro.operations.find(x => x.type.startsWith(this.trx)) || new Operations();
56
54
  }
57
- this.configOperation = this.crudConfig.registro.operations.find(x => x.type.startsWith(this.trx)) || new Operations();
55
+ else
56
+ this.getInfoRegistro(this.crudConfig.registro);
58
57
  })
59
58
  .catch(err => {
60
59
  console.log(err);
@@ -75,11 +74,24 @@ export class RegistroComponent {
75
74
  let op = configRegistro.operations.find(x => x.type == 'read');
76
75
  let endpoint = (op === null || op === void 0 ? void 0 : op.endpoint) || '';
77
76
  endpoint = endpoint.replace('@idKatios', this.idKatios);
77
+ endpoint = endpoint.replace('@ndocactivo', this.user.UsuarioSistema.NDOC);
78
78
  endpoint = endpoint.replace('@id', this.id);
79
79
  this.generalService.genericRequest((op === null || op === void 0 ? void 0 : op.method) || '', (op === null || op === void 0 ? void 0 : op.server) || '', endpoint)
80
80
  .then((res) => {
81
- this.data = res.data;
81
+ if (res === null || res === void 0 ? void 0 : res.data) {
82
+ if (Array.isArray(res.data))
83
+ this.data = res.data[0];
84
+ else
85
+ this.data = res.data;
86
+ this.trx = 'u';
87
+ }
88
+ else {
89
+ this.trx = 'c';
90
+ this.data = this.createObject(this.crudConfig.esquema);
91
+ }
82
92
  this.enProceso = false;
93
+ this.configOperation = this.crudConfig.registro.operations.find(x => x.type.startsWith(this.trx)) || new Operations();
94
+ this.setLabelSumbit();
83
95
  })
84
96
  .catch(err => {
85
97
  console.log(err);
@@ -150,8 +162,6 @@ export class RegistroComponent {
150
162
  this.enProceso = false;
151
163
  if ((_a = this.configOperation) === null || _a === void 0 ? void 0 : _a.redirect)
152
164
  this.router.navigate([(_b = this.configOperation) === null || _b === void 0 ? void 0 : _b.redirect]);
153
- else
154
- this.back();
155
165
  }, 2000);
156
166
  })
157
167
  .catch(err => {
@@ -325,7 +335,7 @@ export class RegistroComponent {
325
335
  }
326
336
  }
327
337
  RegistroComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroComponent, deps: [{ token: i1.GeneralService }, { token: i2.Router }, { token: i3.MessageService }, { token: i4.DialogService }, { token: i5.SfCrudService }], target: i0.ɵɵFactoryTarget.Component });
328
- RegistroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroComponent, selector: "sf-registro", inputs: { idKatios: "idKatios", idEntidad: "idEntidad", trx: "trx", id: "id", user: "user" }, outputs: { sendData: "sendData" }, providers: [MessageService, DialogService, DynamicDialogConfig, DynamicDialogRef], ngImport: i0, template: "<p-blockUI [blocked]=\"enProceso\">\r\n <i class=\"pi pi-cog pi-spin\" style=\"font-size: 50px\"></i>\r\n</p-blockUI>\r\n\r\n<p-toast></p-toast>\r\n\r\n<div class=\"card\" *ngIf=\"!enProceso\">\r\n <h5 class=\"card-header mb-2\" style=\"display: flex; justify-content: space-between;align-items: center;\">\r\n <span>{{crudConfig.registro?.label || idEntidad}} {{id != '' ? '-' + id : ''}}</span>\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-arrow-left\" (click)=\"back()\"></button>\r\n </h5>\r\n <div *ngFor=\"let element of crudConfig.uiEsquema.elements\" [class]=\"element?.class\">\r\n <ng-container [ngSwitch]=\"element.type\">\r\n <div *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\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($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\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($event)\"></sf-control>\r\n <ng-container *ngSwitchCase=\"'Table'\">\r\n <p-table [value]=\"getValue(el.scope)\" [columns]=\"getControl(el.scope).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\"></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 *ngIf=\"trx == 'c' || trx == 'u'\">\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=\"'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>\r\n <ng-container *ngIf=\"trx == 'c' || trx == 'u'\">\r\n <td>\r\n <!-- <button pButton pRipple type=\"button\" (click)=\"editRow(el, rowData)\" icon=\"pi pi-pencil\" class=\"p-button-rounded p-button-info mr-1\"></button> -->\r\n <button pButton pRipple type=\"button\" (click)=\"deleteRow(el, rowIndex)\" 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 *ngSwitchCase=\"'Control'\">\r\n <sf-control [control]=\"getControl(element.scope)\" [label]=\"element.label\"></sf-control>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"card-footer mt-2\" *ngIf=\"btnSubmit\">\r\n <button pButton pRipple type=\"button\" [icon]=\"btnSubmit.icon\" [label]=\"btnSubmit.label\"\r\n (click)=\"submit()\"></button>\r\n </div>\r\n</div>\r\n", components: [{ type: i6.BlockUI, selector: "p-blockUI", inputs: ["target", "autoZIndex", "baseZIndex", "styleClass", "blocked"] }, { type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i8.ControlComponent, selector: "sf-control", inputs: ["control", "label", "value", "appendTo"], outputs: ["setValue", "sendNotification"] }, { type: i9.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"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i12.Ripple, selector: "[pRipple]" }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }], pipes: { "currency": i10.CurrencyPipe } });
338
+ RegistroComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroComponent, selector: "sf-registro", inputs: { idKatios: "idKatios", idEntidad: "idEntidad", trx: "trx", id: "id", user: "user" }, outputs: { sendData: "sendData" }, providers: [MessageService, DialogService, DynamicDialogConfig, DynamicDialogRef], ngImport: i0, template: "<p-blockUI [blocked]=\"enProceso\">\r\n <i class=\"pi pi-cog pi-spin\" style=\"font-size: 50px\"></i>\r\n</p-blockUI>\r\n\r\n<p-toast></p-toast>\r\n\r\n<div class=\"card\" *ngIf=\"!enProceso\">\r\n <h5 class=\"card-header mb-2\" style=\"display: flex; justify-content: space-between;align-items: center;\">\r\n <span>{{crudConfig.registro?.label || idEntidad}} {{id != '' ? '-' + id : ''}}</span>\r\n <button *ngIf=\"crudConfig.registro?.canBack\" pButton pRipple type=\"button\" icon=\"pi pi-arrow-left\" (click)=\"back()\"></button>\r\n </h5>\r\n <div *ngFor=\"let element of crudConfig.uiEsquema.elements\" [class]=\"element?.class\">\r\n <ng-container [ngSwitch]=\"element.type\">\r\n <div *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\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($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\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($event)\"></sf-control>\r\n <ng-container *ngSwitchCase=\"'Table'\">\r\n <p-table [value]=\"getValue(el.scope)\" [columns]=\"getControl(el.scope).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\"></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 *ngIf=\"trx == 'c' || trx == 'u'\">\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=\"'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>\r\n <ng-container *ngIf=\"trx == 'c' || trx == 'u'\">\r\n <td>\r\n <!-- <button pButton pRipple type=\"button\" (click)=\"editRow(el, rowData)\" icon=\"pi pi-pencil\" class=\"p-button-rounded p-button-info mr-1\"></button> -->\r\n <button pButton pRipple type=\"button\" (click)=\"deleteRow(el, rowIndex)\" 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 *ngSwitchCase=\"'Control'\">\r\n <sf-control [control]=\"getControl(element.scope)\" [label]=\"element.label\"></sf-control>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"card-footer mt-2\" *ngIf=\"btnSubmit\">\r\n <button pButton pRipple type=\"button\" [icon]=\"btnSubmit.icon\" [label]=\"btnSubmit.label\"\r\n (click)=\"submit()\"></button>\r\n </div>\r\n</div>\r\n", components: [{ type: i6.BlockUI, selector: "p-blockUI", inputs: ["target", "autoZIndex", "baseZIndex", "styleClass", "blocked"] }, { type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i8.ControlComponent, selector: "sf-control", inputs: ["control", "label", "value", "appendTo"], outputs: ["setValue", "sendNotification"] }, { type: i9.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"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i12.Ripple, selector: "[pRipple]" }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }], pipes: { "currency": i10.CurrencyPipe } });
329
339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroComponent, decorators: [{
330
340
  type: Component,
331
341
  args: [{
@@ -347,4 +357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
347
357
  }], sendData: [{
348
358
  type: Output
349
359
  }] } });
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWtCLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0YsT0FBTyxFQUFXLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUdwRixPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUdyQyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRakMsTUFBTSxPQUFPLGlCQUFpQjtJQWtCNUIsWUFDVSxjQUE4QixFQUM5QixNQUFjLEVBQ2QsYUFBNkIsRUFDN0IsYUFBNEIsRUFDNUIsYUFBNEI7UUFKNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFyQjdCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsY0FBUyxHQUFXLEVB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QUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO2dCQUNySCxNQUFNO1lBQ1IsS0FBSyxpQkFBaUI7Z0JBQ3BCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO2dCQUN0SCxNQUFNO1lBQ1IsS0FBSyxnQkFBZ0I7Z0JBQ25CLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO2dCQUNySCxNQUFNO1lBQ1IsS0FBSyxlQUFlO2dCQUNsQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtnQkFDcEgsTUFBTTtZQUNWO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBYyxFQUFFLFFBQWU7UUFDekMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OytHQXRUVSxpQkFBaUI7bUdBQWpCLGlCQUFpQix1S0FIakIsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLDBCQ2hCbkYsdzRLQWtGQTs0RkQvRGEsaUJBQWlCO2tCQU43QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxTQUFTLEVBQUUsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDO29CQUNqRixlQUFlLEVBQUUsbUJBQW1CO2lCQUNyQzsrTUFHVSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlnUmVnaXN0cm8sIENydWRDb25maWcsIE9wZXJhdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2NydWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEdlbmVyYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2dlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBSZWdpc3Ryb0NoaWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVnaXN0cm8tY2hpbGQvcmVnaXN0cm8tY2hpbGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU2hlbWEgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3NoZW1hLm1vZGVsJztcclxuaW1wb3J0ICogYXMganNvbnBhdGggZnJvbSAnanNvbnBhdGgnO1xyXG5pbXBvcnQgeyBEYXRhVGVtcENydWQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2RhdGEtdGVtcC1jcnVkLm1vZGVsJztcclxuaW1wb3J0IHsgU2ZDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NmLWNydWQuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZi1yZWdpc3RybycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lzdHJvLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSwgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZl0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbUmVnaXN0cm9Db21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3Ryb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGlkS2F0aW9zOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBpZEVudGlkYWQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHRyeDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHVzZXI6IGFueTtcclxuICBAT3V0cHV0KCkgc2VuZERhdGE6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgZGF0YVRlbXA6IERhdGFUZW1wQ3J1ZFtdID0gW107XHJcbiAgcHVibGljIGNydWRDb25maWc6IENydWRDb25maWcgPSBuZXcgQ3J1ZENvbmZpZygpO1xyXG4gIHB1YmxpYyBlblByb2Nlc286IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYnRuU3VibWl0OiBhbnk7XHJcbiAgcHVibGljIGRhdGE6IGFueTtcclxuICBwdWJsaWMgY29uZmlnT3BlcmF0aW9uOiBPcGVyYXRpb25zID0gbmV3IE9wZXJhdGlvbnMoKTtcclxuICBwdWJsaWMgaXNMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnZW5lcmFsU2VydmljZTogR2VuZXJhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VyaWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgc2ZDcnVkU2VydmljZTogU2ZDcnVkU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5kYXRhVGVtcCA9IHRoaXMuc2ZDcnVkU2VydmljZS5nZXREYXRhVGVtcCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRDb25maWdDcnVkKCk7XHJcbiAgICB0aGlzLnNldExhYmVsU3VtYml0KCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ29uZmlnQ3J1ZCgpIHtcclxuICAgIHRoaXMuZW5Qcm9jZXNvID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2V0Q3J1ZEJ5RW50aWRhZCh0aGlzLmlkS2F0aW9zLCB0aGlzLmlkRW50aWRhZClcclxuICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICB0aGlzLnNldERhdGFUZW1wKHJlcy5lc3F1ZW1hLCB0aGlzLmRhdGFUZW1wKTtcclxuICAgICAgICB0aGlzLmNydWRDb25maWcgPSByZXM7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5jcnVkQ29uZmlnKVxyXG4gICAgICAgIGlmICh0aGlzLnRyeCAhPSAnYycpIHRoaXMuZ2V0SW5mb1JlZ2lzdHJvKHRoaXMuY3J1ZENvbmZpZy5yZWdpc3Rybyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmNyZWF0ZU9iamVjdCh0aGlzLmNydWRDb25maWcuZXNxdWVtYSk7XHJcbiAgICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbmZpZ09wZXJhdGlvbiA9IHRoaXMuY3J1ZENvbmZpZy5yZWdpc3Ryby5vcGVyYXRpb25zLmZpbmQoeCA9PiB4LnR5cGUuc3RhcnRzV2l0aCh0aGlzLnRyeCkpIHx8IG5ldyBPcGVyYXRpb25zKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHNldExhYmVsU3VtYml0KCkge1xyXG4gICAgaWYgKHRoaXMudHJ4ID09ICdjJykgdGhpcy5idG5TdWJtaXQgPSB7IGxhYmVsOiAnR3VhcmRhcicsIGljb246ICdwaSBwaS1zYXZlJyB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnRyeCA9PSAncicpIHRoaXMuYnRuU3VibWl0ID0gdW5kZWZpbmVkO1xyXG4gICAgZWxzZSBpZiAodGhpcy50cnggPT0gJ3UnKSB0aGlzLmJ0blN1Ym1pdCA9IHsgbGFiZWw6ICdBY3R1YWxpemFyJywgaWNvbjogJ3BpIHBpLXN5bmMnIH1cclxuICAgIGVsc2UgaWYgKHRoaXMudHJ4ID09ICdkJykgdGhpcy5idG5TdWJtaXQgPSB7IGxhYmVsOiAnRWxpbWluYXInLCBpY29uOiAncGkgcGktdHJhc2gnIH1cclxuICB9XHJcblxyXG4gIGdldEluZm9SZWdpc3Rybyhjb25maWdSZWdpc3RybzogQ29uZmlnUmVnaXN0cm8pIHtcclxuICAgIGxldCBvcCA9IGNvbmZpZ1JlZ2lzdHJvLm9wZXJhdGlvbnMuZmluZCh4ID0+IHgudHlwZSA9PSAncmVhZCcpO1xyXG4gICAgbGV0IGVuZHBvaW50ID0gb3A/LmVuZHBvaW50IHx8ICcnO1xyXG4gICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKCdAaWRLYXRpb3MnLCB0aGlzLmlkS2F0aW9zKTtcclxuICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgnQGlkJywgdGhpcy5pZCk7XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KG9wPy5tZXRob2QgfHwgJycsIG9wPy5zZXJ2ZXIgfHwgJycsIGVuZHBvaW50KVxyXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmNydWRDb25maWcucmVnaXN0cm8uYnRuQmFjayk7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sKHNjb3BlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBqc29ucGF0aC5xdWVyeSh0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgc2NvcGUpWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWUoc2NvcGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCAnJykpWzBdO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodmFsdWU6IGFueSwgc2NvcGU6IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh0eXBlb2YgKHZhbHVlKSkge1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUuZm9yRWFjaCgodmFsOiBhbnkpID0+IGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgdmFsLnNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpLCB2YWwudmFsdWUpKVxyXG4gICAgICAgIGVsc2UganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBzY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSwgdmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCAnJyksIHZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNoYW5nZScsIHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZU9iamVjdChlc3F1ZW1hOiBTaGVtYSkge1xyXG4gICAgbGV0IG9iamVjdCA9IHt9O1xyXG4gICAgc3dpdGNoIChlc3F1ZW1hLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbnVtZXJpYyc6XHJcbiAgICAgICAgcmV0dXJuIGVzcXVlbWE/LmRlZmF1bHQgfHwgMDtcclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgcmV0dXJuIGVzcXVlbWE/LmRlZmF1bHQgPyB0aGlzLnNldERlZmF1bHRWYWx1ZShlc3F1ZW1hLmRlZmF1bHQpIDogbnVsbDtcclxuICAgICAgY2FzZSAnYm9vbGVhbic6XHJcbiAgICAgICAgcmV0dXJuIGVzcXVlbWE/LmRlZmF1bHQgfHwgZmFsc2U7XHJcbiAgICAgIGNhc2UgJ2FycmF5JzpcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIGNhc2UgJ2ZpbGUnOlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVzcXVlbWE/LnByb3BlcnRpZXMpIHtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgeyB2YWx1ZTogdGhpcy5jcmVhdGVPYmplY3QoZXNxdWVtYT8ucHJvcGVydGllc1trZXldKSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXHJcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVEYXRhKCkpIHJldHVybjtcclxuICAgIHRoaXMuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvblN1Ym1pdCcsIHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hKVxyXG4gICAgdGhpcy5lblByb2Nlc28gPSB0cnVlO1xyXG4gICAgbGV0IGVuZHBvaW50ID0gdGhpcy5jb25maWdPcGVyYXRpb24uZW5kcG9pbnQ7XHJcbiAgICBlbmRwb2ludCA9IGVuZHBvaW50LnJlcGxhY2UoJ0BpZEthdGlvcycsIHRoaXMuaWRLYXRpb3MpXHJcbiAgICBlbmRwb2ludCA9IGVuZHBvaW50LnJlcGxhY2UoJ0BpZCcsIHRoaXMuaWQpXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29uZmlnT3BlcmF0aW9uLm1ldGhvZCwgdGhpcy5jb25maWdPcGVyYXRpb24uc2VydmVyLCBlbmRwb2ludCwgdGhpcy5kYXRhKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VyaWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIGRldGFpbDogYFByb2Nlc28gZXhpdG9zbyFgIH0pXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnT3BlcmF0aW9uPy5yZWRpcmVjdCkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuY29uZmlnT3BlcmF0aW9uPy5yZWRpcmVjdF0pXHJcbiAgICAgICAgICBlbHNlIHRoaXMuYmFjaygpXHJcbiAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBkZXRhaWw6IGAke2Vycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIG5vIGNvbnRyb2xhZG8sIHBvciBmYXZvciBjb211bmljYXJzZSBjb24gZGVsIGFkbWluLid9YCB9KVxyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWdPcGVyYXRpb24udmFsaWRhdGlvbnMudHlwZSA9PSAnbG9jYWwnKSByZXR1cm4gdGhpcy52YWxpZGF0ZURhdGFMb2NhbCgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZURhdGFMb2NhbCgpIHtcclxuICAgIGxldCBlcnI6IHN0cmluZ1tdID0gW11cclxuICAgIHRoaXMuY29uZmlnT3BlcmF0aW9uLnZhbGlkYXRpb25zPy5yZXF1aXJlZD8uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgaWYgKCFqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIHguZmllbGQpWzBdKSBlcnIucHVzaCh4Lm1lc3NhZ2UpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuY29uZmlnT3BlcmF0aW9uLnZhbGlkYXRpb25zPy5vcGVyYXRpb25zPy5mb3JFYWNoKChvcDogYW55KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAob3AuYWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc3VtQXJyYXknOlxyXG4gICAgICAgICAgbGV0IHZhcjEgPSBqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIG9wLnNjb3BlWzBdKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKz0gY3VyW29wLmtleV0sIDApO1xyXG4gICAgICAgICAgbGV0IHZhcjIgPSBqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIG9wLnNjb3BlWzFdKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKz0gY3VyW29wLmtleV0sIDApO1xyXG4gICAgICAgICAgaWYgKHZhcjEgIT0gdmFyMikgZXJyLnB1c2gob3AubWVzc2FnZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChlcnIubGVuZ3RoICE9IDApIHRoaXMubWVzc2FnZVNlcmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBkZXRhaWw6IGVyci5qb2luKCcuICcpIH0pXHJcbiAgICByZXR1cm4gZXJyLmxlbmd0aCA9PSAwO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgY2FzZSAnQHVhY3Rpdm8nOlxyXG4gICAgICAgIGRhdGEgPSBgJHt0aGlzLnVzZXIuVXN1YXJpb1Npc3RlbWEuVERPQ30tJHt0aGlzLnVzZXIuVXN1YXJpb1Npc3RlbWEuTkRPQ31gXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0B0ZG9jYWN0aXZvJzpcclxuICAgICAgICBkYXRhID0gdGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLlRET0NcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQG5kb2NhY3Rpdm8nOlxyXG4gICAgICAgIGRhdGEgPSB0aGlzLnVzZXIuVXN1YXJpb1Npc3RlbWEuTkRPQ1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdAaG95JzpcclxuICAgICAgICBkYXRhID0gbmV3IERhdGUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkYXRhID0gdmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YVxyXG4gIH1cclxuXHJcbiAgc2VuZE5vdGlmaWNhdGlvbihtZXNzYWdlOiBNZXNzYWdlKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJpY2UuYWRkKG1lc3NhZ2UpXHJcbiAgfVxyXG5cclxuICBhZGRPYmplY3RBcnJheShlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oUmVnaXN0cm9DaGlsZENvbXBvbmVudCwge1xyXG4gICAgICBoZWFkZXI6IGBEZXRhbGxlYCxcclxuICAgICAgd2lkdGg6ICc3MCUnLFxyXG4gICAgICBtb2RhbDogdHJ1ZSxcclxuICAgICAgY2xvc2FibGU6IGZhbHNlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdWlFc3F1ZW1hOiB7IC4uLmVsZW1lbnQuZWxlbWVudHMgfSxcclxuICAgICAgICBlc3F1ZW1hOiB0aGlzLmdldENvbnRyb2woZWxlbWVudC5zY29wZSksXHJcbiAgICAgICAgaWQ6IHRoaXMuZ2V0VmFsdWUoZWxlbWVudC5zY29wZSkubGVuZ3RoICsgMVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkgdGhpcy5kYXRhW2VsZW1lbnQuc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJyldLnB1c2goZGF0YSk7XHJcbiAgICAgIHRoaXMuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNoYW5nZScsIHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hLCBlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGVkaXRSb3coZWxlbWVudDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oUmVnaXN0cm9DaGlsZENvbXBvbmVudCwge1xyXG4gICAgICBoZWFkZXI6IGBEZXRhbGxlYCxcclxuICAgICAgd2lkdGg6ICc3MCUnLFxyXG4gICAgICBtb2RhbDogdHJ1ZSxcclxuICAgICAgY2xvc2FibGU6IGZhbHNlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdWlFc3F1ZW1hOiB7IC4uLmVsZW1lbnQuZWxlbWVudHMgfSxcclxuICAgICAgICBlc3F1ZW1hOiB0aGlzLmdldENvbnRyb2woZWxlbWVudC5zY29wZSksXHJcbiAgICAgICAgZGF0YTogeyAuLi5kYXRhIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHRoaXMuZGF0YVtlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpXVtkYXRhLmlkIC0gMV0gPSBkYXRhO1xyXG4gICAgICB0aGlzLmFwcGx5VmFsdWVzT25FdmVudCgnb25DaGFuZ2UnLCB0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3coZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRhdGFbZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKV0uc3BsaWNlKGluZGV4IC0gMSwgMSk7XHJcbiAgICBpbmRleCA9IDE7XHJcbiAgICB0aGlzLmRhdGFbZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKV0uZm9yRWFjaCgoZWw6IGFueSkgPT4ge1xyXG4gICAgICBlbC5pZCA9IGluZGV4O1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfSlcclxuICAgIHRoaXMuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNoYW5nZScsIHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hLCBlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpKVxyXG4gIH1cclxuXHJcbiAgYXBwbHlWYWx1ZXNPbkV2ZW50KGV2ZW50OiBzdHJpbmcsIGVzcXVlbWE6IFNoZW1hLCBrZXk/OiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgaWYgKGVzcXVlbWEucHJvcGVydGllc1trZXldW2V2ZW50XSkge1xyXG4gICAgICAgIGVzcXVlbWEucHJvcGVydGllc1trZXldW2V2ZW50XS5mb3JFYWNoKCh2YWx1ZTogeyBzY29wZTogc3RyaW5nW10sIG9wOiBzdHJpbmcsIGtleT86IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbHVlRXZlbnQodGhpcy5kYXRhLCB2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXNxdWVtYS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgaWYgKGVzcXVlbWEucHJvcGVydGllc1trZXldW2V2ZW50XSkge1xyXG4gICAgICAgICAgZXNxdWVtYS5wcm9wZXJ0aWVzW2tleV1bZXZlbnRdLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUV2ZW50KHRoaXMuZGF0YSwgdmFsdWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFZhbHVlRXZlbnQoZGF0YTogYW55LCBwYXJhbXM6IHsgc2NvcGU6IHN0cmluZ1tdLCBvcDogc3RyaW5nLCBrZXk/OiBhbnksIHNlcGFyYXRvcj86IHN0cmluZyB9KSB7XHJcbiAgICBsZXQgZGF0ZSA9IG1vbWVudChuZXcgRGF0ZSgpKTtcclxuICAgIHN3aXRjaCAocGFyYW1zLm9wKSB7XHJcbiAgICAgIGNhc2UgJ3N1bSc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUoZGF0YSwgcGFyYW1zLnNjb3BlWzFdLCBqc29ucGF0aC5xdWVyeShkYXRhLCBwYXJhbXMuc2NvcGVbMF0pLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArPSBwYXJhbXM/LmtleSA/IGN1cltwYXJhbXMua2V5XSA6IGN1ciwgMCkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NvbmNhdCc6XHJcbiAgICAgICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IFtdXHJcbiAgICAgICAgcGFyYW1zPy5rZXk/LnJlZHVjZSgoYWNjOiBhbnlbXSwgY3VyOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGFycmF5LnB1c2goanNvbnBhdGgucXVlcnkoZGF0YSwgY3VyKVswXSlcclxuICAgICAgICB9LCBbXSlcclxuICAgICAgICBpZiAocGFyYW1zPy5zZXBhcmF0b3IpIGpzb25wYXRoLnZhbHVlKGRhdGEsIHBhcmFtcy5zY29wZVswXSwgYXJyYXkuam9pbihwYXJhbXM/LnNlcGFyYXRvciB8fCAnICcpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlbmFibGUnOlxyXG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hLCBwYXJhbXMuc2NvcGVbMF0sIGZhbHNlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkaXNhYmxlZCc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIHBhcmFtcy5zY29wZVswXSwgdHJ1ZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVwbGFjZTplbmRwb2ludCc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIHBhcmFtcy5zY29wZVswXSwgdGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEuY29uZmlnLmVuZHBvaW50dGVtcC5yZXBsYWNlKHBhcmFtcy5zY29wZVsxXSwganNvbnBhdGgucXVlcnkoZGF0YSwgYCQuLiR7cGFyYW1zLmtleX1gKSkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3NldE51bGwnOlxyXG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgYCQuJHtwYXJhbXMua2V5fWAsIG51bGwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGVkaWZmOnllYXJzJzpcclxuICAgICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzBdLCBkYXRlLmRpZmYobW9tZW50KGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzFdKVswXSksICd5ZWFycycpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZGF0ZWRpZmY6bW9udGhzJzpcclxuICAgICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzBdLCBkYXRlLmRpZmYobW9tZW50KGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzFdKVswXSksICdtb250aHMnKSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGVkaWZmOndlZWtzJzpcclxuICAgICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzBdLCBkYXRlLmRpZmYobW9tZW50KGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzFdKVswXSksICd3ZWVrcycpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZGF0ZWRpZmY6ZGF5cyc6XHJcbiAgICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVswXSwgZGF0ZS5kaWZmKG1vbWVudChqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVsxXSlbMF0pLCAnZGF5cycpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXREYXRhVGVtcChlc3F1ZW1hOiBTaGVtYSwgZGF0YVRlbXA6IGFueVtdKSB7XHJcbiAgICBkYXRhVGVtcC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBqc29ucGF0aC52YWx1ZShlc3F1ZW1hLCBkYXRhLnNjb3BlLCBkYXRhLnZhbHVlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxwLWJsb2NrVUkgW2Jsb2NrZWRdPVwiZW5Qcm9jZXNvXCI+XHJcbiAgICA8aSBjbGFzcz1cInBpIHBpLWNvZyBwaS1zcGluXCIgc3R5bGU9XCJmb250LXNpemU6IDUwcHhcIj48L2k+XHJcbjwvcC1ibG9ja1VJPlxyXG5cclxuPHAtdG9hc3Q+PC9wLXRvYXN0PlxyXG5cclxuPGRpdiBjbGFzcz1cImNhcmRcIiAqbmdJZj1cIiFlblByb2Nlc29cIj5cclxuICAgIDxoNSBjbGFzcz1cImNhcmQtaGVhZGVyIG1iLTJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgIDxzcGFuPnt7Y3J1ZENvbmZpZy5yZWdpc3Rybz8ubGFiZWwgfHwgaWRFbnRpZGFkfX0ge3tpZCAhPSAnJyA/ICctJyArIGlkIDogJyd9fTwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWFycm93LWxlZnRcIiAoY2xpY2spPVwiYmFjaygpXCI+PC9idXR0b24+XHJcbiAgICA8L2g1PlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBjcnVkQ29uZmlnLnVpRXNxdWVtYS5lbGVtZW50c1wiIFtjbGFzc109XCJlbGVtZW50Py5jbGFzc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVsZW1lbnQudHlwZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInTGFiZWwnXCIgW3N0eWxlXT1cImVsZW1lbnQ/LnN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICB7e2VsZW1lbnQ/LmxhYmVsfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidIb3Jpem9udGFsTGF5b3V0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZWwgb2YgZWxlbWVudC5lbGVtZW50c1wiIFtjbGFzc109XCJlbD8uY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbC50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZi1jb250cm9sICpuZ1N3aXRjaENhc2U9XCInQ29udHJvbCdcIiBbY29udHJvbF09XCJnZXRDb250cm9sKGVsLnNjb3BlKVwiIFtsYWJlbF09XCJlbC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUoZWwuc2NvcGUpXCIgKHNldFZhbHVlKT1cInNldFZhbHVlKCRldmVudCwgZWwuc2NvcGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1ZlcnRpY2FsTGF5b3V0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZWwgb2YgZWxlbWVudC5lbGVtZW50c1wiIFtjbGFzc109XCJlbD8uY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbC50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZi1jb250cm9sICpuZ1N3aXRjaENhc2U9XCInQ29udHJvbCdcIiBbY29udHJvbF09XCJnZXRDb250cm9sKGVsLnNjb3BlKVwiIFtsYWJlbF09XCJlbC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUoZWwuc2NvcGUpXCIgKHNldFZhbHVlKT1cInNldFZhbHVlKCRldmVudCwgZWwuc2NvcGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1RhYmxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGUgW3ZhbHVlXT1cImdldFZhbHVlKGVsLnNjb3BlKVwiIFtjb2x1bW5zXT1cImdldENvbnRyb2woZWwuc2NvcGUpLmNvbmZpZy5jb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBpY29uPVwicGkgcGktcGx1c1wiIChjbGljayk9XCJhZGRPYmplY3RBcnJheShlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29sLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJ4ID09ICdjJyB8fCB0cnggPT0gJ3UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cm93RGF0YVtjb2wuY29sXX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3k6VVNEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyb3dEYXRhW2NvbC5jb2xdIHwgY3VycmVuY3k6ICdVU0QnfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJ4ID09ICdjJyB8fCB0cnggPT0gJ3UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZWRpdFJvdyhlbCwgcm93RGF0YSlcIiBpY29uPVwicGkgcGktcGVuY2lsXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWluZm8gbXItMVwiPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVSb3coZWwsIHJvd0luZGV4KVwiIGljb249XCJwaSBwaS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgW2NvbnRyb2xdPVwiZ2V0Q29udHJvbChlbGVtZW50LnNjb3BlKVwiIFtsYWJlbF09XCJlbGVtZW50LmxhYmVsXCI+PC9zZi1jb250cm9sPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIG10LTJcIiAqbmdJZj1cImJ0blN1Ym1pdFwiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBbaWNvbl09XCJidG5TdWJtaXQuaWNvblwiIFtsYWJlbF09XCJidG5TdWJtaXQubGFiZWxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic3VibWl0KClcIj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWtCLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0YsT0FBTyxFQUFXLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUdwRixPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUdyQyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRakMsTUFBTSxPQUFPLGlCQUFpQjtJQWtCNUIsWUFDVSxjQUE4QixFQUM5QixNQUFjLEVBQ2QsYUFBNkIsRUFDN0IsYUFBNEIsRUFDNUIsYUFBNEI7UUFKNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFyQjdCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsY0FBUyxHQUFXLEVB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QUUsZ0JBQWdCLENBQUMsMEJDaEJuRiwrNktBa0ZBOzRGRC9EYSxpQkFBaUI7a0JBTjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFdBQVcsRUFBRSwyQkFBMkI7b0JBQ3hDLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ2pGLGVBQWUsRUFBRSxtQkFBbUI7aUJBQ3JDOytNQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maWdSZWdpc3RybywgQ3J1ZENvbmZpZywgT3BlcmF0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvY3J1ZC1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgR2VuZXJhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlZ2lzdHJvQ2hpbGRDb21wb25lbnQgfSBmcm9tICcuLi9yZWdpc3Ryby1jaGlsZC9yZWdpc3Ryby1jaGlsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvc2hlbWEubW9kZWwnO1xyXG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XHJcbmltcG9ydCB7IERhdGFUZW1wQ3J1ZCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZGF0YS10ZW1wLWNydWQubW9kZWwnO1xyXG5pbXBvcnQgeyBTZkNydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2YtY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NmLXJlZ2lzdHJvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVnaXN0cm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlLCBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtSZWdpc3Ryb0NvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgaWRLYXRpb3M6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkRW50aWRhZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdHJ4OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBpZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdXNlcjogYW55O1xyXG4gIEBPdXRwdXQoKSBzZW5kRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBkYXRhVGVtcDogRGF0YVRlbXBDcnVkW10gPSBbXTtcclxuICBwdWJsaWMgY3J1ZENvbmZpZzogQ3J1ZENvbmZpZyA9IG5ldyBDcnVkQ29uZmlnKCk7XHJcbiAgcHVibGljIGVuUHJvY2VzbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBidG5TdWJtaXQ6IGFueTtcclxuICBwdWJsaWMgZGF0YTogYW55O1xyXG4gIHB1YmxpYyBjb25maWdPcGVyYXRpb246IE9wZXJhdGlvbnMgPSBuZXcgT3BlcmF0aW9ucygpO1xyXG4gIHB1YmxpYyBpc0xvY2FsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWZcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGdlbmVyYWxTZXJ2aWNlOiBHZW5lcmFsU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZkNydWRTZXJ2aWNlOiBTZkNydWRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRhdGFUZW1wID0gdGhpcy5zZkNydWRTZXJ2aWNlLmdldERhdGFUZW1wKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZENvbmZpZ0NydWQoKTtcclxuICB9XHJcblxyXG4gIGxvYWRDb25maWdDcnVkKCkge1xyXG4gICAgdGhpcy5lblByb2Nlc28gPSB0cnVlO1xyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZXRDcnVkQnlFbnRpZGFkKHRoaXMuaWRLYXRpb3MsIHRoaXMuaWRFbnRpZGFkKVxyXG4gICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YVRlbXAocmVzLmVzcXVlbWEsIHRoaXMuZGF0YVRlbXApO1xyXG4gICAgICAgIHRoaXMuY3J1ZENvbmZpZyA9IHJlcztcclxuICAgICAgICBpZiAodGhpcy50cnggPT0gJ2MnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmNyZWF0ZU9iamVjdCh0aGlzLmNydWRDb25maWcuZXNxdWVtYSk7XHJcbiAgICAgICAgICB0aGlzLnNldExhYmVsU3VtYml0KCk7XHJcbiAgICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWdPcGVyYXRpb24gPSB0aGlzLmNydWRDb25maWcucmVnaXN0cm8ub3BlcmF0aW9ucy5maW5kKHggPT4geC50eXBlLnN0YXJ0c1dpdGgodGhpcy50cngpKSB8fCBuZXcgT3BlcmF0aW9ucygpO1xyXG4gICAgICAgIH0gZWxzZSB0aGlzLmdldEluZm9SZWdpc3Rybyh0aGlzLmNydWRDb25maWcucmVnaXN0cm8pO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZXRMYWJlbFN1bWJpdCgpIHtcclxuICAgIGlmICh0aGlzLnRyeCA9PSAnYycpIHRoaXMuYnRuU3VibWl0ID0geyBsYWJlbDogJ0d1YXJkYXInLCBpY29uOiAncGkgcGktc2F2ZScgfVxyXG4gICAgZWxzZSBpZiAodGhpcy50cnggPT0gJ3InKSB0aGlzLmJ0blN1Ym1pdCA9IHVuZGVmaW5lZDtcclxuICAgIGVsc2UgaWYgKHRoaXMudHJ4ID09ICd1JykgdGhpcy5idG5TdWJtaXQgPSB7IGxhYmVsOiAnQWN0dWFsaXphcicsIGljb246ICdwaSBwaS1zeW5jJyB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnRyeCA9PSAnZCcpIHRoaXMuYnRuU3VibWl0ID0geyBsYWJlbDogJ0VsaW1pbmFyJywgaWNvbjogJ3BpIHBpLXRyYXNoJyB9XHJcbiAgfVxyXG5cclxuICBnZXRJbmZvUmVnaXN0cm8oY29uZmlnUmVnaXN0cm86IENvbmZpZ1JlZ2lzdHJvKSB7XHJcbiAgICBsZXQgb3AgPSBjb25maWdSZWdpc3Ryby5vcGVyYXRpb25zLmZpbmQoeCA9PiB4LnR5cGUgPT0gJ3JlYWQnKTtcclxuICAgIGxldCBlbmRwb2ludCA9IG9wPy5lbmRwb2ludCB8fCAnJztcclxuICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgnQGlkS2F0aW9zJywgdGhpcy5pZEthdGlvcyk7XHJcbiAgICBlbmRwb2ludCA9IGVuZHBvaW50LnJlcGxhY2UoJ0BuZG9jYWN0aXZvJywgdGhpcy51c2VyLlVzdWFyaW9TaXN0ZW1hLk5ET0MpO1xyXG4gICAgZW5kcG9pbnQgPSBlbmRwb2ludC5yZXBsYWNlKCdAaWQnLCB0aGlzLmlkKTtcclxuICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2VuZXJpY1JlcXVlc3Qob3A/Lm1ldGhvZCB8fCAnJywgb3A/LnNlcnZlciB8fCAnJywgZW5kcG9pbnQpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmRhdGEpe1xyXG4gICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXMuZGF0YSkpIHRoaXMuZGF0YSA9IHJlcy5kYXRhWzBdXHJcbiAgICAgICAgICBlbHNlIHRoaXMuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy50cnggPSAndSc7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudHJ4ID0gJ2MnO1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5jcmVhdGVPYmplY3QodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVuUHJvY2VzbyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnT3BlcmF0aW9uID0gdGhpcy5jcnVkQ29uZmlnLnJlZ2lzdHJvLm9wZXJhdGlvbnMuZmluZCh4ID0+IHgudHlwZS5zdGFydHNXaXRoKHRoaXMudHJ4KSkgfHwgbmV3IE9wZXJhdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNldExhYmVsU3VtYml0KCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGJhY2soKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3J1ZENvbmZpZy5yZWdpc3Ryby5idG5CYWNrKTtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2woc2NvcGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGpzb25wYXRoLnF1ZXJ5KHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hLCBzY29wZSlbMF07XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZShzY29wZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ganNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBzY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSlbMF07XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2YWx1ZTogYW55LCBzY29wZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGVvZiAodmFsdWUpKSB7XHJcbiAgICAgIGNhc2UgJ29iamVjdCc6XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB2YWx1ZS5mb3JFYWNoKCh2YWw6IGFueSkgPT4ganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCB2YWwuc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCAnJyksIHZhbC52YWx1ZSkpXHJcbiAgICAgICAgZWxzZSBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpLCB2YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBzY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSwgdmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2hhbmdlJywgdGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlT2JqZWN0KGVzcXVlbWE6IFNoZW1hKSB7XHJcbiAgICBsZXQgb2JqZWN0ID0ge307XHJcbiAgICBzd2l0Y2ggKGVzcXVlbWEudHlwZSkge1xyXG4gICAgICBjYXNlICdudW1lcmljJzpcclxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCB8fCAwO1xyXG4gICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCA/IHRoaXMuc2V0RGVmYXVsdFZhbHVlKGVzcXVlbWEuZGVmYXVsdCkgOiBudWxsO1xyXG4gICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCB8fCBmYWxzZTtcclxuICAgICAgY2FzZSAnYXJyYXknOlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgY2FzZSAnZmlsZSc6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNhc2UgJ29iamVjdCc6XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXNxdWVtYT8ucHJvcGVydGllcykge1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7IHZhbHVlOiB0aGlzLmNyZWF0ZU9iamVjdChlc3F1ZW1hPy5wcm9wZXJ0aWVzW2tleV0pLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iamVjdDtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSlcclxuICAgIGlmICghdGhpcy52YWxpZGF0ZURhdGEoKSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uU3VibWl0JywgdGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEpXHJcbiAgICB0aGlzLmVuUHJvY2VzbyA9IHRydWU7XHJcbiAgICBsZXQgZW5kcG9pbnQgPSB0aGlzLmNvbmZpZ09wZXJhdGlvbi5lbmRwb2ludDtcclxuICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgnQGlkS2F0aW9zJywgdGhpcy5pZEthdGlvcylcclxuICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZSgnQGlkJywgdGhpcy5pZClcclxuICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuZ2VuZXJpY1JlcXVlc3QodGhpcy5jb25maWdPcGVyYXRpb24ubWV0aG9kLCB0aGlzLmNvbmZpZ09wZXJhdGlvbi5zZXJ2ZXIsIGVuZHBvaW50LCB0aGlzLmRhdGEpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgZGV0YWlsOiBgUHJvY2VzbyBleGl0b3NvIWAgfSlcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5Qcm9jZXNvID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWdPcGVyYXRpb24/LnJlZGlyZWN0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5jb25maWdPcGVyYXRpb24/LnJlZGlyZWN0XSlcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VyaWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIGRldGFpbDogYCR7ZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3Igbm8gY29udHJvbGFkbywgcG9yIGZhdm9yIGNvbXVuaWNhcnNlIGNvbiBkZWwgYWRtaW4uJ31gIH0pXHJcbiAgICAgICAgdGhpcy5lblByb2Nlc28gPSBmYWxzZTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ09wZXJhdGlvbi52YWxpZGF0aW9ucy50eXBlID09ICdsb2NhbCcpIHJldHVybiB0aGlzLnZhbGlkYXRlRGF0YUxvY2FsKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRGF0YUxvY2FsKCkge1xyXG4gICAgbGV0IGVycjogc3RyaW5nW10gPSBbXVxyXG4gICAgdGhpcy5jb25maWdPcGVyYXRpb24udmFsaWRhdGlvbnM/LnJlcXVpcmVkPy5mb3JFYWNoKHggPT4ge1xyXG4gICAgICBpZiAoIWpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgeC5maWVsZClbMF0pIGVyci5wdXNoKHgubWVzc2FnZSk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5jb25maWdPcGVyYXRpb24udmFsaWRhdGlvbnM/Lm9wZXJhdGlvbnM/LmZvckVhY2goKG9wOiBhbnkpID0+IHtcclxuICAgICAgc3dpdGNoIChvcC5hY3Rpb24pIHtcclxuICAgICAgICBjYXNlICdzdW1BcnJheSc6XHJcbiAgICAgICAgICBsZXQgdmFyMSA9IGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgb3Auc2NvcGVbMF0pLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArPSBjdXJbb3Aua2V5XSwgMCk7XHJcbiAgICAgICAgICBsZXQgdmFyMiA9IGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgb3Auc2NvcGVbMV0pLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArPSBjdXJbb3Aua2V5XSwgMCk7XHJcbiAgICAgICAgICBpZiAodmFyMSAhPSB2YXIyKSBlcnIucHVzaChvcC5tZXNzYWdlKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKGVyci5sZW5ndGggIT0gMCkgdGhpcy5tZXNzYWdlU2VyaWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIGRldGFpbDogZXJyLmpvaW4oJy4gJykgfSlcclxuICAgIHJldHVybiBlcnIubGVuZ3RoID09IDA7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgbGV0IGRhdGEgPSBudWxsO1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICBjYXNlICdAdWFjdGl2byc6XHJcbiAgICAgICAgZGF0YSA9IGAke3RoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5URE9DfS0ke3RoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5ORE9DfWBcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQHRkb2NhY3Rpdm8nOlxyXG4gICAgICAgIGRhdGEgPSB0aGlzLnVzZXIuVXN1YXJpb1Npc3RlbWEuVERPQ1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdAbmRvY2FjdGl2byc6XHJcbiAgICAgICAgZGF0YSA9IHRoaXMudXNlci5Vc3VhcmlvU2lzdGVtYS5ORE9DXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0Bob3knOlxyXG4gICAgICAgIGRhdGEgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGRhdGEgPSB2YWx1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhXHJcbiAgfVxyXG5cclxuICBzZW5kTm90aWZpY2F0aW9uKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcclxuICAgIHRoaXMubWVzc2FnZVNlcmljZS5hZGQobWVzc2FnZSlcclxuICB9XHJcblxyXG4gIGFkZE9iamVjdEFycmF5KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihSZWdpc3Ryb0NoaWxkQ29tcG9uZW50LCB7XHJcbiAgICAgIGhlYWRlcjogYERldGFsbGVgLFxyXG4gICAgICB3aWR0aDogJzcwJScsXHJcbiAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogZmFsc2UsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB1aUVzcXVlbWE6IHsgLi4uZWxlbWVudC5lbGVtZW50cyB9LFxyXG4gICAgICAgIGVzcXVlbWE6IHRoaXMuZ2V0Q29udHJvbChlbGVtZW50LnNjb3BlKSxcclxuICAgICAgICBpZDogdGhpcy5nZXRWYWx1ZShlbGVtZW50LnNjb3BlKS5sZW5ndGggKyAxXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB0aGlzLmRhdGFbZWxlbWVudC5zY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKV0ucHVzaChkYXRhKTtcclxuICAgICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2hhbmdlJywgdGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIGVsZW1lbnQuc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJykpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZWRpdFJvdyhlbGVtZW50OiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihSZWdpc3Ryb0NoaWxkQ29tcG9uZW50LCB7XHJcbiAgICAgIGhlYWRlcjogYERldGFsbGVgLFxyXG4gICAgICB3aWR0aDogJzcwJScsXHJcbiAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogZmFsc2UsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB1aUVzcXVlbWE6IHsgLi4uZWxlbWVudC5lbGVtZW50cyB9LFxyXG4gICAgICAgIGVzcXVlbWE6IHRoaXMuZ2V0Q29udHJvbChlbGVtZW50LnNjb3BlKSxcclxuICAgICAgICBkYXRhOiB7IC4uLmRhdGEgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkgdGhpcy5kYXRhW2VsZW1lbnQuc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJyldW2RhdGEuaWQgLSAxXSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNoYW5nZScsIHRoaXMuY3J1ZENvbmZpZy5lc3F1ZW1hLCBlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJvdyhlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGF0YVtlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpXS5zcGxpY2UoaW5kZXggLSAxLCAxKTtcclxuICAgIGluZGV4ID0gMTtcclxuICAgIHRoaXMuZGF0YVtlbGVtZW50LnNjb3BlLnJlcGxhY2UoJyQuLnByb3BlcnRpZXMuJywgJycpXS5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgIGVsLmlkID0gaW5kZXg7XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2hhbmdlJywgdGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIGVsZW1lbnQuc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJykpXHJcbiAgfVxyXG5cclxuICBhcHBseVZhbHVlc09uRXZlbnQoZXZlbnQ6IHN0cmluZywgZXNxdWVtYTogU2hlbWEsIGtleT86IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBpZiAoZXNxdWVtYS5wcm9wZXJ0aWVzW2tleV1bZXZlbnRdKSB7XHJcbiAgICAgICAgZXNxdWVtYS5wcm9wZXJ0aWVzW2tleV1bZXZlbnRdLmZvckVhY2goKHZhbHVlOiB7IHNjb3BlOiBzdHJpbmdbXSwgb3A6IHN0cmluZywga2V5Pzogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsdWVFdmVudCh0aGlzLmRhdGEsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBlc3F1ZW1hLnByb3BlcnRpZXMpIHtcclxuICAgICAgICBpZiAoZXNxdWVtYS5wcm9wZXJ0aWVzW2tleV1bZXZlbnRdKSB7XHJcbiAgICAgICAgICBlc3F1ZW1hLnByb3BlcnRpZXNba2V5XVtldmVudF0uZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRXZlbnQodGhpcy5kYXRhLCB2YWx1ZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVFdmVudChkYXRhOiBhbnksIHBhcmFtczogeyBzY29wZTogc3RyaW5nW10sIG9wOiBzdHJpbmcsIGtleT86IGFueSwgc2VwYXJhdG9yPzogc3RyaW5nIH0pIHtcclxuICAgIGxldCBkYXRlID0gbW9tZW50KG5ldyBEYXRlKCkpO1xyXG4gICAgc3dpdGNoIChwYXJhbXMub3ApIHtcclxuICAgICAgY2FzZSAnc3VtJzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZShkYXRhLCBwYXJhbXMuc2NvcGVbMV0sIGpzb25wYXRoLnF1ZXJ5KGRhdGEsIHBhcmFtcy5zY29wZVswXSkucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICs9IHBhcmFtcz8ua2V5ID8gY3VyW3BhcmFtcy5rZXldIDogY3VyLCAwKSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY29uY2F0JzpcclxuICAgICAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gW11cclxuICAgICAgICBwYXJhbXM/LmtleT8ucmVkdWNlKChhY2M6IGFueVtdLCBjdXI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgYXJyYXkucHVzaChqc29ucGF0aC5xdWVyeShkYXRhLCBjdXIpWzBdKVxyXG4gICAgICAgIH0sIFtdKVxyXG4gICAgICAgIGlmIChwYXJhbXM/LnNlcGFyYXRvcikganNvbnBhdGgudmFsdWUoZGF0YSwgcGFyYW1zLnNjb3BlWzBdLCBhcnJheS5qb2luKHBhcmFtcz8uc2VwYXJhdG9yIHx8ICcgJykpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VuYWJsZSc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5jcnVkQ29uZmlnLmVzcXVlbWEsIHBhcmFtcy5zY29wZVswXSwgZmFsc2UpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Rpc2FibGVkJzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgcGFyYW1zLnNjb3BlWzBdLCB0cnVlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXBsYWNlOmVuZHBvaW50JzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmNydWRDb25maWcuZXNxdWVtYSwgcGFyYW1zLnNjb3BlWzBdLCB0aGlzLmNydWRDb25maWcuZXNxdWVtYS5jb25maWcuZW5kcG9pbnR0ZW1wLnJlcGxhY2UocGFyYW1zLnNjb3BlWzFdLCBqc29ucGF0aC5xdWVyeShkYXRhLCBgJC4uJHtwYXJhbXMua2V5fWApKSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc2V0TnVsbCc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBgJC4ke3BhcmFtcy5rZXl9YCwgbnVsbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZGF0ZWRpZmY6eWVhcnMnOlxyXG4gICAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGRhdGUuZGlmZihtb21lbnQoanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMV0pWzBdKSwgJ3llYXJzJykpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkYXRlZGlmZjptb250aHMnOlxyXG4gICAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGRhdGUuZGlmZihtb21lbnQoanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMV0pWzBdKSwgJ21vbnRocycpKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZGF0ZWRpZmY6d2Vla3MnOlxyXG4gICAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGRhdGUuZGlmZihtb21lbnQoanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMV0pWzBdKSwgJ3dlZWtzJykpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkYXRlZGlmZjpkYXlzJzpcclxuICAgICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzBdLCBkYXRlLmRpZmYobW9tZW50KGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzFdKVswXSksICdkYXlzJykpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERhdGFUZW1wKGVzcXVlbWE6IFNoZW1hLCBkYXRhVGVtcDogYW55W10pIHtcclxuICAgIGRhdGFUZW1wLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgIGpzb25wYXRoLnZhbHVlKGVzcXVlbWEsIGRhdGEuc2NvcGUsIGRhdGEudmFsdWUpXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPHAtYmxvY2tVSSBbYmxvY2tlZF09XCJlblByb2Nlc29cIj5cclxuICAgIDxpIGNsYXNzPVwicGkgcGktY29nIHBpLXNwaW5cIiBzdHlsZT1cImZvbnQtc2l6ZTogNTBweFwiPjwvaT5cclxuPC9wLWJsb2NrVUk+XHJcblxyXG48cC10b2FzdD48L3AtdG9hc3Q+XHJcblxyXG48ZGl2IGNsYXNzPVwiY2FyZFwiICpuZ0lmPVwiIWVuUHJvY2Vzb1wiPlxyXG4gICAgPGg1IGNsYXNzPVwiY2FyZC1oZWFkZXIgbWItMlwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgPHNwYW4+e3tjcnVkQ29uZmlnLnJlZ2lzdHJvPy5sYWJlbCB8fCBpZEVudGlkYWR9fSB7e2lkICE9ICcnID8gJy0nICsgaWQgOiAnJ319PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJjcnVkQ29uZmlnLnJlZ2lzdHJvPy5jYW5CYWNrXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktYXJyb3ctbGVmdFwiIChjbGljayk9XCJiYWNrKClcIj48L2J1dHRvbj5cclxuICAgIDwvaDU+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGNydWRDb25maWcudWlFc3F1ZW1hLmVsZW1lbnRzXCIgW2NsYXNzXT1cImVsZW1lbnQ/LmNsYXNzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWxlbWVudC50eXBlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidMYWJlbCdcIiBbc3R5bGVdPVwiZWxlbWVudD8uc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7ZWxlbWVudD8ubGFiZWx9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hvcml6b250YWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbCBvZiBlbGVtZW50LmVsZW1lbnRzXCIgW2NsYXNzXT1cImVsPy5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVsLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiIFtjb250cm9sXT1cImdldENvbnRyb2woZWwuc2NvcGUpXCIgW2xhYmVsXT1cImVsLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZShlbC5zY29wZSlcIiAoc2V0VmFsdWUpPVwic2V0VmFsdWUoJGV2ZW50LCBlbC5zY29wZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbmROb3RpZmljYXRpb24pPVwic2VuZE5vdGlmaWNhdGlvbigkZXZlbnQpXCI+PC9zZi1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVmVydGljYWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbCBvZiBlbGVtZW50LmVsZW1lbnRzXCIgW2NsYXNzXT1cImVsPy5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVsLnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiIFtjb250cm9sXT1cImdldENvbnRyb2woZWwuc2NvcGUpXCIgW2xhYmVsXT1cImVsLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZShlbC5zY29wZSlcIiAoc2V0VmFsdWUpPVwic2V0VmFsdWUoJGV2ZW50LCBlbC5zY29wZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbmROb3RpZmljYXRpb24pPVwic2VuZE5vdGlmaWNhdGlvbigkZXZlbnQpXCI+PC9zZi1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVGFibGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10YWJsZSBbdmFsdWVdPVwiZ2V0VmFsdWUoZWwuc2NvcGUpXCIgW2NvbHVtbnNdPVwiZ2V0Q29udHJvbChlbC5zY29wZSkuY29uZmlnLmNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS1wbHVzXCIgKGNsaWNrKT1cImFkZE9iamVjdEFycmF5KGVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb2wubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cnggPT0gJ2MnIHx8IHRyeCA9PSAndSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtuZ1N3aXRjaF09XCJjb2wudHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyb3dEYXRhW2NvbC5jb2xdfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeTpVU0QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Jvd0RhdGFbY29sLmNvbF0gfCBjdXJyZW5jeTogJ1VTRCd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cnggPT0gJ2MnIHx8IHRyeCA9PSAndSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJlZGl0Um93KGVsLCByb3dEYXRhKVwiIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24taW5mbyBtci0xXCI+PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZVJvdyhlbCwgcm93SW5kZXgpXCIgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWRhbmdlclwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NvbnRyb2wnXCI+XHJcbiAgICAgICAgICAgICAgICA8c2YtY29udHJvbCBbY29udHJvbF09XCJnZXRDb250cm9sKGVsZW1lbnQuc2NvcGUpXCIgW2xhYmVsXT1cImVsZW1lbnQubGFiZWxcIj48L3NmLWNvbnRyb2w+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgbXQtMlwiICpuZ0lmPVwiYnRuU3VibWl0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIFtpY29uXT1cImJ0blN1Ym1pdC5pY29uXCIgW2xhYmVsXT1cImJ0blN1Ym1pdC5sYWJlbFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXQoKVwiPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -198,7 +198,7 @@ export class RegistroChildComponent {
198
198
  }
199
199
  }
200
200
  RegistroChildComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroChildComponent, deps: [{ token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Component });
201
- RegistroChildComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroChildComponent, selector: "lib-registro-child", providers: [MessageService], ngImport: i0, template: "<p-toast></p-toast>\n<div *ngFor=\"let element of uiEsquema.elements\" [class]=\"element?.class\" #a>\n <ng-container [ngSwitch]=\"element.type\">\n <div *ngSwitchCase=\"'Label'\" [style]=\"element?.style\">\n {{element?.label}}\n </div>\n <ng-container *ngSwitchCase=\"'HorizontalLayout'\">\n <div *ngFor=\"let el of element.elements\" [class]=\"el?.class\">\n <ng-container [ngSwitch]=\"el.type\">\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\n (sendNotification)=\"sendNotification($event)\"></sf-control>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'VerticalLayout'\">\n <div *ngFor=\"let el of element.elements\" [class]=\"el?.class\">\n <ng-container [ngSwitch]=\"el.type\">\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\n (sendNotification)=\"sendNotification($event)\"></sf-control>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Control'\">\n <sf-control [control]=\"getControl(element.scope)\" [label]=\"element.label\"></sf-control>\n </ng-container>\n </ng-container>\n</div>\n<div class=\"card-footer mt-2\">\n <button pButton pRipple type=\"button\" label=\"Guardar\" (click)=\"submit()\" class=\"mr-2\"></button>\n <button pButton pRipple type=\"button\" label=\"Cancelar\" (click)=\"cancel()\" class=\"p-button-danger\"></button>\n</div>", components: [{ type: i3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i4.ControlComponent, selector: "sf-control", inputs: ["control", "label", "value", "appendTo"], outputs: ["setValue", "sendNotification"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i7.Ripple, selector: "[pRipple]" }] });
201
+ RegistroChildComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RegistroChildComponent, selector: "lib-registro-child", providers: [MessageService], ngImport: i0, template: "<p-toast></p-toast>\r\n<div *ngFor=\"let element of uiEsquema.elements\" [class]=\"element?.class\" #a>\r\n <ng-container [ngSwitch]=\"element.type\">\r\n <div *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\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($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\" [class]=\"el?.class\">\r\n <ng-container [ngSwitch]=\"el.type\">\r\n <sf-control *ngSwitchCase=\"'Control'\" [control]=\"getControl(el.scope)\" [label]=\"el.label\"\r\n [value]=\"getValue(el.scope)\" (setValue)=\"setValue($event, el.scope)\"\r\n (sendNotification)=\"sendNotification($event)\"></sf-control>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Control'\">\r\n <sf-control [control]=\"getControl(element.scope)\" [label]=\"element.label\"></sf-control>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n<div class=\"card-footer mt-2\">\r\n <button pButton pRipple type=\"button\" label=\"Guardar\" (click)=\"submit()\" class=\"mr-2\"></button>\r\n <button pButton pRipple type=\"button\" label=\"Cancelar\" (click)=\"cancel()\" class=\"p-button-danger\"></button>\r\n</div>", components: [{ type: i3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i4.ControlComponent, selector: "sf-control", inputs: ["control", "label", "value", "appendTo"], outputs: ["setValue", "sendNotification"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i7.Ripple, selector: "[pRipple]" }] });
202
202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RegistroChildComponent, decorators: [{
203
203
  type: Component,
204
204
  args: [{
@@ -207,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
207
207
  providers: [MessageService]
208
208
  }]
209
209
  }], ctorParameters: function () { return [{ type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }, { type: i2.MessageService }]; } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8tY2hpbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8tY2hpbGQvcmVnaXN0cm8tY2hpbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8tY2hpbGQvcmVnaXN0cm8tY2hpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBT2pDLE1BQU0sT0FBTyxzQkFBc0I7SUFNakMsWUFDUyxHQUFxQixFQUNyQixNQUEyQixFQUMxQixjQUE4QjtRQUYvQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFOakMsWUFBTyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7SUFPaEMsQ0FBQztJQUVMLFFBQVE7O1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSwwQ0FBRSxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVLEVBQUUsS0FBYTtRQUNoQyxRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBOztvQkFDNUgsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RSxNQUFNO1lBQ1I7Z0JBQ0UsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuRSxNQUFNO1NBQ1Q7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBYztRQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3BCLEtBQUssU0FBUztnQkFDWixPQUFPLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUM7WUFDL0IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDekUsS0FBSyxTQUFTO2dCQUNaLE9BQU8sQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsT0FBTyxLQUFJLEtBQUssQ0FBQztZQUNuQyxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssUUFBUTtnQkFDWCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxVQUFVLEVBQUU7b0JBQ3JDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7aUJBQ2pKO2dCQUNELE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDO1FBQ1osUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtnQkFDakUsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBOztvQkFDdkQsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDM0UsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtnQkFDakUsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBOztvQkFDdkQsSUFBSSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFBO2dCQUN2QyxNQUFNO1lBQ1IsS0FBSyxhQUFhO2dCQUNoQixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO2dCQUNqRSxJQUFJLENBQUMsT0FBTztvQkFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7O29CQUN2RCxJQUFJLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUE7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU07WUFDUjtnQkFDRSxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNiLE1BQU07U0FDVDtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU87UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzlFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksR0FBRyxHQUFhLEVBQUUsQ0FBQTtRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzFGLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWEsRUFBRSxPQUFjLEVBQUUsS0FBYztRQUM5RCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUN0QyxDQUFDLENBQUMsQ0FBQTthQUNIO1NBQ0Y7YUFBTTtZQUNMLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDcEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO3dCQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7b0JBQ3RDLENBQUMsQ0FBQyxDQUFBO2lCQUNIO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLE1BQW9FOztRQUMzRixJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUIsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ2pCLEtBQUssS0FBSztnQkFDUixLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDbEgsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLEtBQUssR0FBYSxFQUFFLENBQUE7Z0JBQ3hCLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEdBQUcsMENBQUUsTUFBTSxDQUFDLENBQUMsR0FBVSxFQUFFLEdBQVcsRUFBRSxFQUFFO29CQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDTixJQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxTQUFTO29CQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxTQUFTLEtBQUksR0FBRyxDQUFDLENBQUMsQ0FBQTtnQkFDbEcsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDcEQsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDbkQsTUFBTTtZQUNSLEtBQUssa0JBQWtCO2dCQUNyQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNsSyxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtZQUNSLEtBQUssZ0JBQWdCO2dCQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtnQkFDckgsTUFBTTtZQUNSLEtBQUssaUJBQWlCO2dCQUNwQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtnQkFDdEgsTUFBTTtZQUNSLEtBQUssZ0JBQWdCO2dCQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtnQkFDckgsTUFBTTtZQUNSLEtBQUssZUFBZTtnQkFDbEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7Z0JBQ3BILE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxDQUFDOztvSEF6TFUsc0JBQXNCO3dHQUF0QixzQkFBc0IsNkNBRnRCLENBQUMsY0FBYyxDQUFDLDBCQ1g3QiwwMkRBZ0NNOzRGRG5CTyxzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsV0FBVyxFQUFFLGlDQUFpQztvQkFDOUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IFNoZW1hIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9zaGVtYS5tb2RlbCc7XG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvaTE4bi9pMThuX2FzdCc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXJlZ2lzdHJvLWNoaWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lzdHJvLWNoaWxkLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJvQ2hpbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyB1aUVzcXVlbWE6IGFueTtcbiAgcHVibGljIGVzcXVlbWE6IFNoZW1hID0gbmV3IFNoZW1hKCk7XG4gIHB1YmxpYyBkYXRhOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcbiAgICBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51aUVzcXVlbWEgPSB0aGlzLmNvbmZpZy5kYXRhLnVpRXNxdWVtYVswXTtcbiAgICB0aGlzLmVzcXVlbWEgPSB0aGlzLmNvbmZpZy5kYXRhLmVzcXVlbWE7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5jb25maWcuZGF0YT8uZGF0YTtcbiAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5jcmVhdGVPYmplY3QodGhpcy5lc3F1ZW1hKTtcbiAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgJyQuLmlkJywgdGhpcy5jb25maWcuZGF0YS5pZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udHJvbChzY29wZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGpzb25wYXRoLnF1ZXJ5KHRoaXMuZXNxdWVtYSwgc2NvcGUpWzBdO1xuICB9XG5cbiAgZ2V0VmFsdWUoc2NvcGU6IHN0cmluZykge1xuICAgIHJldHVybiBqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIHNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpKVswXTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBhbnksIHNjb3BlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiAodmFsdWUpKSB7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlLmZvckVhY2goKHZhbDogYW55KSA9PiBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHZhbC5zY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSwgdmFsLnZhbHVlKSlcbiAgICAgICAgZWxzZSBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBzY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSwgdmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2hhbmdlJywgdGhpcy5lc3F1ZW1hLCBzY29wZS5yZXBsYWNlKCckLi5wcm9wZXJ0aWVzLicsICcnKSk7XG4gIH1cblxuICBjcmVhdGVPYmplY3QoZXNxdWVtYTogU2hlbWEpIHtcbiAgICBsZXQgb2JqZWN0ID0ge307XG4gICAgc3dpdGNoIChlc3F1ZW1hLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bWVyaWMnOlxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCB8fCAwO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCA/IHRoaXMuc2V0RGVmYXVsdFZhbHVlKGVzcXVlbWEuZGVmYXVsdCkgOiBudWxsO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiBlc3F1ZW1hPy5kZWZhdWx0IHx8IGZhbHNlO1xuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXNxdWVtYT8ucHJvcGVydGllcykge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgeyB2YWx1ZTogdGhpcy5jcmVhdGVPYmplY3QoZXNxdWVtYT8ucHJvcGVydGllc1trZXldKSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBzZXREZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICBsZXQgdWFjdGl2bztcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdAdWFjdGl2byc6XG4gICAgICAgIHVhY3Rpdm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvU2Vzc2lvblRGTScpIHx8ICd7fScpXG4gICAgICAgIGlmICghdWFjdGl2bykgY29uc29sZS5sb2coJ1ZhbGlkYXIgY29uZmlndXJhY2lvbiBkZSBzZXNpb24nKVxuICAgICAgICBlbHNlIGRhdGEgPSBgJHt1YWN0aXZvLlVzdWFyaW9TaXN0ZW1hLlRET0N9LSR7dWFjdGl2by5Vc3VhcmlvU2lzdGVtYS5ORE9DfWBcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdAdGRvY2FjdGl2byc6XG4gICAgICAgIHVhY3Rpdm8gPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzclNlc2lvbicpIHx8ICd7fScpXG4gICAgICAgIGlmICghdWFjdGl2bykgY29uc29sZS5sb2coJ1ZhbGlkYXIgY29uZmlndXJhY2lvbiBkZSBzZXNpb24nKVxuICAgICAgICBlbHNlIGRhdGEgPSB1YWN0aXZvLlVzdWFyaW9TaXN0ZW1hLlRET0NcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdAbmRvY2FjdGl2byc6XG4gICAgICAgIHVhY3Rpdm8gPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzclNlc2lvbicpIHx8ICd7fScpXG4gICAgICAgIGlmICghdWFjdGl2bykgY29uc29sZS5sb2coJ1ZhbGlkYXIgY29uZmlndXJhY2lvbiBkZSBzZXNpb24nKVxuICAgICAgICBlbHNlIGRhdGEgPSB1YWN0aXZvLlVzdWFyaW9TaXN0ZW1hLk5ET0NcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdAaG95JzpcbiAgICAgICAgZGF0YSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZGF0YSA9IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmFwcGx5VmFsdWVzT25FdmVudCgnb25TdWJtaXQnLCB0aGlzLmVzcXVlbWEpO1xuICAgIGlmICghdGhpcy52YWxpZGF0ZURhdGEoKSkgcmV0dXJuO1xuICAgIHRoaXMucmVmLmNsb3NlKHRoaXMuZGF0YSk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uQ2FuY2VsJywgdGhpcy5lc3F1ZW1hKTtcbiAgICB0aGlzLnJlZi5jbG9zZSgpO1xuICB9XG5cbiAgdmFsaWRhdGVEYXRhKCkge1xuICAgIGlmICh0aGlzLmVzcXVlbWEudmFsaWRhdGlvbnMudHlwZSA9PSAnbG9jYWwnKSByZXR1cm4gdGhpcy52YWxpZGF0ZURhdGFMb2NhbCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFsaWRhdGVEYXRhTG9jYWwoKSB7XG4gICAgbGV0IGVycjogc3RyaW5nW10gPSBbXVxuICAgIHRoaXMuZXNxdWVtYS52YWxpZGF0aW9ucy5yZXF1aXJlZC5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgIGlmICghanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCB4LmZpZWxkKVswXSkgZXJyLnB1c2goeC5tZXNzYWdlKTtcbiAgICB9KVxuICAgIGlmIChlcnIubGVuZ3RoICE9IDApIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgZGV0YWlsOiBlcnIuam9pbignLiAnKSB9KVxuICAgIHJldHVybiBlcnIubGVuZ3RoID09IDA7XG4gIH1cblxuICBhcHBseVZhbHVlc09uRXZlbnQoZXZlbnQ6IHN0cmluZywgZXNxdWVtYTogU2hlbWEsIHNjb3BlPzogc3RyaW5nKSB7XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBpZiAoZXNxdWVtYS5wcm9wZXJ0aWVzW3Njb3BlXVtldmVudF0pIHtcbiAgICAgICAgZXNxdWVtYS5wcm9wZXJ0aWVzW3Njb3BlXVtldmVudF0uZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWVFdmVudCh0aGlzLmRhdGEsIHZhbHVlKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBlc3F1ZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKGVzcXVlbWEucHJvcGVydGllc1trZXldW2V2ZW50XSkge1xuICAgICAgICAgIGVzcXVlbWEucHJvcGVydGllc1trZXldW2V2ZW50XS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRXZlbnQodGhpcy5kYXRhLCB2YWx1ZSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWVFdmVudChkYXRhOiBhbnksIHBhcmFtczogeyBvcDogc3RyaW5nLCBzY29wZTogc3RyaW5nW10sIGtleTogYW55LCBzZXBhcmF0b3I6IHN0cmluZyB9KSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGxldCBkYXRlID0gbW9tZW50KG5ldyBEYXRlKCkpO1xuICAgIHN3aXRjaCAocGFyYW1zLm9wKSB7XG4gICAgICBjYXNlICdzdW0nOlxuICAgICAgICB2YWx1ZSA9IGpzb25wYXRoLnF1ZXJ5KGRhdGEsIHBhcmFtcz8uc2NvcGVbMF0pLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArPSBwYXJhbXM/LmtleSA/IGN1cltwYXJhbXMua2V5XSA6IGN1ciwgMClcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb25jYXQnOlxuICAgICAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gW11cbiAgICAgICAgcGFyYW1zPy5rZXk/LnJlZHVjZSgoYWNjOiBhbnlbXSwgY3VyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBhcnJheS5wdXNoKGpzb25wYXRoLnF1ZXJ5KGRhdGEsIGN1cilbMF0pXG4gICAgICAgIH0sIFtdKVxuICAgICAgICBpZiAocGFyYW1zPy5zZXBhcmF0b3IpIGpzb25wYXRoLnZhbHVlKGRhdGEsIHBhcmFtcy5zY29wZVswXSwgYXJyYXkuam9pbihwYXJhbXM/LnNlcGFyYXRvciB8fCAnICcpKVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VuYWJsZSc6XG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZXNxdWVtYSwgcGFyYW1zLnNjb3BlWzBdLCBmYWxzZSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZXNxdWVtYSwgcGFyYW1zLnNjb3BlWzBdLCB0cnVlKVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlcGxhY2U6ZW5kcG9pbnQnOlxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmVzcXVlbWEsIHBhcmFtcy5zY29wZVswXSwganNvbnBhdGgucXVlcnkodGhpcy5lc3F1ZW1hLCBwYXJhbXMuc2NvcGVbMV0pWzBdLnJlcGxhY2UocGFyYW1zLnNjb3BlWzJdLCBqc29ucGF0aC5xdWVyeShkYXRhLCBgJC4uJHtwYXJhbXMua2V5fWApKSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZXROdWxsJzpcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBgJC4ke3BhcmFtcy5rZXl9YCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZWRpZmY6eWVhcnMnOlxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVswXSwgZGF0ZS5kaWZmKG1vbWVudChqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVsxXSlbMF0pLCAneWVhcnMnKSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlZGlmZjptb250aHMnOlxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVswXSwgZGF0ZS5kaWZmKG1vbWVudChqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVsxXSlbMF0pLCAnbW9udGhzJykpXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZWRpZmY6d2Vla3MnOlxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVswXSwgZGF0ZS5kaWZmKG1vbWVudChqc29ucGF0aC5xdWVyeSh0aGlzLmRhdGEsIHBhcmFtcy5zY29wZVsxXSlbMF0pLCAnd2Vla3MnKSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlZGlmZjpkYXlzJzpcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGRhdGUuZGlmZihtb21lbnQoanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMV0pWzBdKSwgJ2RheXMnKSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc2VuZE5vdGlmaWNhdGlvbihtZXNzYWdlOiBNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQobWVzc2FnZSlcbiAgfVxufVxuIiwiPHAtdG9hc3Q+PC9wLXRvYXN0PlxuPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiB1aUVzcXVlbWEuZWxlbWVudHNcIiBbY2xhc3NdPVwiZWxlbWVudD8uY2xhc3NcIiAjYT5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbGVtZW50LnR5cGVcIj5cbiAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0xhYmVsJ1wiIFtzdHlsZV09XCJlbGVtZW50Py5zdHlsZVwiPlxuICAgICAgICAgICAge3tlbGVtZW50Py5sYWJlbH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSG9yaXpvbnRhbExheW91dCdcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGVsIG9mIGVsZW1lbnQuZWxlbWVudHNcIiBbY2xhc3NdPVwiZWw/LmNsYXNzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWwudHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c2YtY29udHJvbCAqbmdTd2l0Y2hDYXNlPVwiJ0NvbnRyb2wnXCIgW2NvbnRyb2xdPVwiZ2V0Q29udHJvbChlbC5zY29wZSlcIiBbbGFiZWxdPVwiZWwubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFZhbHVlKGVsLnNjb3BlKVwiIChzZXRWYWx1ZSk9XCJzZXRWYWx1ZSgkZXZlbnQsIGVsLnNjb3BlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE5vdGlmaWNhdGlvbik9XCJzZW5kTm90aWZpY2F0aW9uKCRldmVudClcIj48L3NmLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidWZXJ0aWNhbExheW91dCdcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGVsIG9mIGVsZW1lbnQuZWxlbWVudHNcIiBbY2xhc3NdPVwiZWw/LmNsYXNzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWwudHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c2YtY29udHJvbCAqbmdTd2l0Y2hDYXNlPVwiJ0NvbnRyb2wnXCIgW2NvbnRyb2xdPVwiZ2V0Q29udHJvbChlbC5zY29wZSlcIiBbbGFiZWxdPVwiZWwubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFZhbHVlKGVsLnNjb3BlKVwiIChzZXRWYWx1ZSk9XCJzZXRWYWx1ZSgkZXZlbnQsIGVsLnNjb3BlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VuZE5vdGlmaWNhdGlvbik9XCJzZW5kTm90aWZpY2F0aW9uKCRldmVudClcIj48L3NmLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiPlxuICAgICAgICAgICAgPHNmLWNvbnRyb2wgW2NvbnRyb2xdPVwiZ2V0Q29udHJvbChlbGVtZW50LnNjb3BlKVwiIFtsYWJlbF09XCJlbGVtZW50LmxhYmVsXCI+PC9zZi1jb250cm9sPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIG10LTJcIj5cbiAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJHdWFyZGFyXCIgKGNsaWNrKT1cInN1Ym1pdCgpXCIgY2xhc3M9XCJtci0yXCI+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiQ2FuY2VsYXJcIiAoY2xpY2spPVwiY2FuY2VsKClcIiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiPjwvYnV0dG9uPlxuPC9kaXY+Il19
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cm8tY2hpbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8tY2hpbGQvcmVnaXN0cm8tY2hpbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvcmVnaXN0cm8tY2hpbGQvcmVnaXN0cm8tY2hpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBT2pDLE1BQU0sT0FBTyxzQkFBc0I7SUFNakMsWUFDUyxHQUFxQixFQUNyQixNQUEyQixFQUMxQixjQUE4QjtRQUYvQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFOakMsWUFBTyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7SUFPaEMsQ0FBQztJQUVMLFFBQVE7O1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFBLElBQUksQ0FBQyxNQUFN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RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxDQUFDOztvSEF6TFUsc0JBQXNCO3dHQUF0QixzQkFBc0IsNkNBRnRCLENBQUMsY0FBYyxDQUFDLDBCQ1g3QiwwNkRBZ0NNOzRGRG5CTyxzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsV0FBVyxFQUFFLGlDQUFpQztvQkFDOUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBTaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvc2hlbWEubW9kZWwnO1xyXG5pbXBvcnQgKiBhcyBqc29ucGF0aCBmcm9tICdqc29ucGF0aCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL2kxOG4vaTE4bl9hc3QnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXJlZ2lzdHJvLWNoaWxkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVnaXN0cm8tY2hpbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVnaXN0cm9DaGlsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyB1aUVzcXVlbWE6IGFueTtcclxuICBwdWJsaWMgZXNxdWVtYTogU2hlbWEgPSBuZXcgU2hlbWEoKTtcclxuICBwdWJsaWMgZGF0YTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudWlFc3F1ZW1hID0gdGhpcy5jb25maWcuZGF0YS51aUVzcXVlbWFbMF07XHJcbiAgICB0aGlzLmVzcXVlbWEgPSB0aGlzLmNvbmZpZy5kYXRhLmVzcXVlbWE7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmNvbmZpZy5kYXRhPy5kYXRhO1xyXG4gICAgaWYgKCF0aGlzLmRhdGEpIHtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5jcmVhdGVPYmplY3QodGhpcy5lc3F1ZW1hKTtcclxuICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCAnJC4uaWQnLCB0aGlzLmNvbmZpZy5kYXRhLmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRyb2woc2NvcGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGpzb25wYXRoLnF1ZXJ5KHRoaXMuZXNxdWVtYSwgc2NvcGUpWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWUoc2NvcGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCAnJykpWzBdO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodmFsdWU6IGFueSwgc2NvcGU6IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh0eXBlb2YgKHZhbHVlKSkge1xyXG4gICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUuZm9yRWFjaCgodmFsOiBhbnkpID0+IGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgdmFsLnNjb3BlLnJlcGxhY2UoJy5wcm9wZXJ0aWVzJywgJycpLCB2YWwudmFsdWUpKVxyXG4gICAgICAgIGVsc2UganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBzY29wZS5yZXBsYWNlKCcucHJvcGVydGllcycsICcnKSwgdmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgc2NvcGUucmVwbGFjZSgnLnByb3BlcnRpZXMnLCAnJyksIHZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNoYW5nZScsIHRoaXMuZXNxdWVtYSwgc2NvcGUucmVwbGFjZSgnJC4ucHJvcGVydGllcy4nLCAnJykpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlT2JqZWN0KGVzcXVlbWE6IFNoZW1hKSB7XHJcbiAgICBsZXQgb2JqZWN0ID0ge307XHJcbiAgICBzd2l0Y2ggKGVzcXVlbWEudHlwZSkge1xyXG4gICAgICBjYXNlICdudW1lcmljJzpcclxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCB8fCAwO1xyXG4gICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCA/IHRoaXMuc2V0RGVmYXVsdFZhbHVlKGVzcXVlbWEuZGVmYXVsdCkgOiBudWxsO1xyXG4gICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgICByZXR1cm4gZXNxdWVtYT8uZGVmYXVsdCB8fCBmYWxzZTtcclxuICAgICAgY2FzZSAnZmlsZSc6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNhc2UgJ2FycmF5JzpcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlc3F1ZW1hPy5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgdmFsdWU6IHRoaXMuY3JlYXRlT2JqZWN0KGVzcXVlbWE/LnByb3BlcnRpZXNba2V5XSksIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgIGxldCB1YWN0aXZvO1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICBjYXNlICdAdWFjdGl2byc6XHJcbiAgICAgICAgdWFjdGl2byA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29TZXNzaW9uVEZNJykgfHwgJ3t9JylcclxuICAgICAgICBpZiAoIXVhY3Rpdm8pIGNvbnNvbGUubG9nKCdWYWxpZGFyIGNvbmZpZ3VyYWNpb24gZGUgc2VzaW9uJylcclxuICAgICAgICBlbHNlIGRhdGEgPSBgJHt1YWN0aXZvLlVzdWFyaW9TaXN0ZW1hLlRET0N9LSR7dWFjdGl2by5Vc3VhcmlvU2lzdGVtYS5ORE9DfWBcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQHRkb2NhY3Rpdm8nOlxyXG4gICAgICAgIHVhY3Rpdm8gPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzclNlc2lvbicpIHx8ICd7fScpXHJcbiAgICAgICAgaWYgKCF1YWN0aXZvKSBjb25zb2xlLmxvZygnVmFsaWRhciBjb25maWd1cmFjaW9uIGRlIHNlc2lvbicpXHJcbiAgICAgICAgZWxzZSBkYXRhID0gdWFjdGl2by5Vc3VhcmlvU2lzdGVtYS5URE9DXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0BuZG9jYWN0aXZvJzpcclxuICAgICAgICB1YWN0aXZvID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c3JTZXNpb24nKSB8fCAne30nKVxyXG4gICAgICAgIGlmICghdWFjdGl2bykgY29uc29sZS5sb2coJ1ZhbGlkYXIgY29uZmlndXJhY2lvbiBkZSBzZXNpb24nKVxyXG4gICAgICAgIGVsc2UgZGF0YSA9IHVhY3Rpdm8uVXN1YXJpb1Npc3RlbWEuTkRPQ1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdAaG95JzpcclxuICAgICAgICBkYXRhID0gbmV3IERhdGUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkYXRhID0gdmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YVxyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgdGhpcy5hcHBseVZhbHVlc09uRXZlbnQoJ29uU3VibWl0JywgdGhpcy5lc3F1ZW1hKTtcclxuICAgIGlmICghdGhpcy52YWxpZGF0ZURhdGEoKSkgcmV0dXJuO1xyXG4gICAgdGhpcy5yZWYuY2xvc2UodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuYXBwbHlWYWx1ZXNPbkV2ZW50KCdvbkNhbmNlbCcsIHRoaXMuZXNxdWVtYSk7XHJcbiAgICB0aGlzLnJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuZXNxdWVtYS52YWxpZGF0aW9ucy50eXBlID09ICdsb2NhbCcpIHJldHVybiB0aGlzLnZhbGlkYXRlRGF0YUxvY2FsKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRGF0YUxvY2FsKCkge1xyXG4gICAgbGV0IGVycjogc3RyaW5nW10gPSBbXVxyXG4gICAgdGhpcy5lc3F1ZW1hLnZhbGlkYXRpb25zLnJlcXVpcmVkLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgeC5maWVsZClbMF0pIGVyci5wdXNoKHgubWVzc2FnZSk7XHJcbiAgICB9KVxyXG4gICAgaWYgKGVyci5sZW5ndGggIT0gMCkgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBkZXRhaWw6IGVyci5qb2luKCcuICcpIH0pXHJcbiAgICByZXR1cm4gZXJyLmxlbmd0aCA9PSAwO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlWYWx1ZXNPbkV2ZW50KGV2ZW50OiBzdHJpbmcsIGVzcXVlbWE6IFNoZW1hLCBzY29wZT86IHN0cmluZykge1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGlmIChlc3F1ZW1hLnByb3BlcnRpZXNbc2NvcGVdW2V2ZW50XSkge1xyXG4gICAgICAgIGVzcXVlbWEucHJvcGVydGllc1tzY29wZV1bZXZlbnRdLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsdWVFdmVudCh0aGlzLmRhdGEsIHZhbHVlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGVzcXVlbWEucHJvcGVydGllcykge1xyXG4gICAgICAgIGlmIChlc3F1ZW1hLnByb3BlcnRpZXNba2V5XVtldmVudF0pIHtcclxuICAgICAgICAgIGVzcXVlbWEucHJvcGVydGllc1trZXldW2V2ZW50XS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVFdmVudCh0aGlzLmRhdGEsIHZhbHVlKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFZhbHVlRXZlbnQoZGF0YTogYW55LCBwYXJhbXM6IHsgb3A6IHN0cmluZywgc2NvcGU6IHN0cmluZ1tdLCBrZXk6IGFueSwgc2VwYXJhdG9yOiBzdHJpbmcgfSkge1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IGRhdGUgPSBtb21lbnQobmV3IERhdGUoKSk7XHJcbiAgICBzd2l0Y2ggKHBhcmFtcy5vcCkge1xyXG4gICAgICBjYXNlICdzdW0nOlxyXG4gICAgICAgIHZhbHVlID0ganNvbnBhdGgucXVlcnkoZGF0YSwgcGFyYW1zPy5zY29wZVswXSkucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICs9IHBhcmFtcz8ua2V5ID8gY3VyW3BhcmFtcy5rZXldIDogY3VyLCAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjb25jYXQnOlxyXG4gICAgICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXVxyXG4gICAgICAgIHBhcmFtcz8ua2V5Py5yZWR1Y2UoKGFjYzogYW55W10sIGN1cjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBhcnJheS5wdXNoKGpzb25wYXRoLnF1ZXJ5KGRhdGEsIGN1cilbMF0pXHJcbiAgICAgICAgfSwgW10pXHJcbiAgICAgICAgaWYgKHBhcmFtcz8uc2VwYXJhdG9yKSBqc29ucGF0aC52YWx1ZShkYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGFycmF5LmpvaW4ocGFyYW1zPy5zZXBhcmF0b3IgfHwgJyAnKSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZW5hYmxlJzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmVzcXVlbWEsIHBhcmFtcy5zY29wZVswXSwgZmFsc2UpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Rpc2FibGVkJzpcclxuICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmVzcXVlbWEsIHBhcmFtcy5zY29wZVswXSwgdHJ1ZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVwbGFjZTplbmRwb2ludCc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5lc3F1ZW1hLCBwYXJhbXMuc2NvcGVbMF0sIGpzb25wYXRoLnF1ZXJ5KHRoaXMuZXNxdWVtYSwgcGFyYW1zLnNjb3BlWzFdKVswXS5yZXBsYWNlKHBhcmFtcy5zY29wZVsyXSwganNvbnBhdGgucXVlcnkoZGF0YSwgYCQuLiR7cGFyYW1zLmtleX1gKSkpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3NldE51bGwnOlxyXG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgYCQuJHtwYXJhbXMua2V5fWAsIG51bGwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlZGlmZjp5ZWFycyc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGRhdGUuZGlmZihtb21lbnQoanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMV0pWzBdKSwgJ3llYXJzJykpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RhdGVkaWZmOm1vbnRocyc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGRhdGUuZGlmZihtb21lbnQoanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMV0pWzBdKSwgJ21vbnRocycpKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlZGlmZjp3ZWVrcyc6XHJcbiAgICAgICAganNvbnBhdGgudmFsdWUodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMF0sIGRhdGUuZGlmZihtb21lbnQoanNvbnBhdGgucXVlcnkodGhpcy5kYXRhLCBwYXJhbXMuc2NvcGVbMV0pWzBdKSwgJ3dlZWtzJykpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RhdGVkaWZmOmRheXMnOlxyXG4gICAgICAgIGpzb25wYXRoLnZhbHVlKHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzBdLCBkYXRlLmRpZmYobW9tZW50KGpzb25wYXRoLnF1ZXJ5KHRoaXMuZGF0YSwgcGFyYW1zLnNjb3BlWzFdKVswXSksICdkYXlzJykpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZW5kTm90aWZpY2F0aW9uKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKG1lc3NhZ2UpXHJcbiAgfVxyXG59XHJcbiIsIjxwLXRvYXN0PjwvcC10b2FzdD5cclxuPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiB1aUVzcXVlbWEuZWxlbWVudHNcIiBbY2xhc3NdPVwiZWxlbWVudD8uY2xhc3NcIiAjYT5cclxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVsZW1lbnQudHlwZVwiPlxyXG4gICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidMYWJlbCdcIiBbc3R5bGVdPVwiZWxlbWVudD8uc3R5bGVcIj5cclxuICAgICAgICAgICAge3tlbGVtZW50Py5sYWJlbH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hvcml6b250YWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGVsIG9mIGVsZW1lbnQuZWxlbWVudHNcIiBbY2xhc3NdPVwiZWw/LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbC50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiIFtjb250cm9sXT1cImdldENvbnRyb2woZWwuc2NvcGUpXCIgW2xhYmVsXT1cImVsLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFZhbHVlKGVsLnNjb3BlKVwiIChzZXRWYWx1ZSk9XCJzZXRWYWx1ZSgkZXZlbnQsIGVsLnNjb3BlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVmVydGljYWxMYXlvdXQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGVsIG9mIGVsZW1lbnQuZWxlbWVudHNcIiBbY2xhc3NdPVwiZWw/LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbC50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNmLWNvbnRyb2wgKm5nU3dpdGNoQ2FzZT1cIidDb250cm9sJ1wiIFtjb250cm9sXT1cImdldENvbnRyb2woZWwuc2NvcGUpXCIgW2xhYmVsXT1cImVsLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFZhbHVlKGVsLnNjb3BlKVwiIChzZXRWYWx1ZSk9XCJzZXRWYWx1ZSgkZXZlbnQsIGVsLnNjb3BlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZW5kTm90aWZpY2F0aW9uKT1cInNlbmROb3RpZmljYXRpb24oJGV2ZW50KVwiPjwvc2YtY29udHJvbD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ29udHJvbCdcIj5cclxuICAgICAgICAgICAgPHNmLWNvbnRyb2wgW2NvbnRyb2xdPVwiZ2V0Q29udHJvbChlbGVtZW50LnNjb3BlKVwiIFtsYWJlbF09XCJlbGVtZW50LmxhYmVsXCI+PC9zZi1jb250cm9sPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgbXQtMlwiPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiR3VhcmRhclwiIChjbGljayk9XCJzdWJtaXQoKVwiIGNsYXNzPVwibXItMlwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiQ2FuY2VsYXJcIiAoY2xpY2spPVwiY2FuY2VsKClcIiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiPjwvYnV0dG9uPlxyXG48L2Rpdj4iXX0=