general-library-union 2.4.60 → 2.4.62

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.
@@ -657,20 +657,24 @@ export class FuenteReporteComponent {
657
657
  {
658
658
  label: this.translateService.instant('from'),
659
659
  routerLink: 'personal',
660
+ styleClass: this.actual === 0 ? 'enfocado' : '',
660
661
  title: 'Seleccione las tablas o vistas de donde desea obtener la informacion.'
661
662
  },
662
663
  {
663
664
  label: this.translateService.instant('join'),
664
665
  routerLink: 'personal',
666
+ styleClass: this.actual === 1 ? 'enfocado' : '',
665
667
  title: 'Indique de que manera se relaccionan los objetos entre si.'
666
668
  },
667
669
  {
668
670
  label: this.translateService.instant('where'),
669
671
  routerLink: 'personal',
672
+ styleClass: this.actual === 2 ? 'enfocado' : '',
670
673
  title: 'Indique los filtros adicionales que desee realizar sobre la informacion.'
671
674
  },
672
675
  {
673
676
  label: this.translateService.instant('campos'),
677
+ styleClass: this.actual === 3 ? 'enfocado' : '',
674
678
  routerLink: 'confirmation',
675
679
  }
676
680
  ];
@@ -684,13 +688,13 @@ export class FuenteReporteComponent {
684
688
  return this.camposSeleccionar.every(elemento => elemento.seleccionado);
685
689
  }
686
690
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FuenteReporteComponent, deps: [{ token: i1.MenuService }, { token: i2.ToastService }, { token: i3.ReportesService }, { token: i4.GeneralService }, { token: i5.UtilsService }, { token: i6.ConfirmationService }, { token: i7.TranslateService }, { token: i6.MessageService }], target: i0.ɵɵFactoryTarget.Component });
687
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: FuenteReporteComponent, isStandalone: true, selector: "app-fuente-reporte", providers: [MessageService, ConfirmationService], viewQueries: [{ propertyName: "popupTablasFuenteUI", first: true, predicate: ["popupTablasFuenteUI"], descendants: true }], ngImport: i0, template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView>\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Evaluadores\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"false\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n <div class=\"cardInstrucciones mt-4 mb-3\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <button pButton label=\"{{'link_anterior' | translate}}\" icon=\"pi pi-plus\" (click)=\"anterior()\" *ngIf=\"actual > 0\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n <button pButton label=\"{{'link_siguiente' | translate}}\" icon=\"pi pi-plus\" (click)=\"siguiente()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div> -->\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\" dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\" [(ngModel)]=\"seleccionGeneral\"\r\n [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"], dependencies: [{ kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: PopupTablasFuenteComponent, selector: "app-popup-tablas-fuente", outputs: ["aplicarDestinoOcultar"] }, { kind: "ngmodule", type: StepsModule }, { kind: "component", type: i10.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass", "exact"], outputs: ["activeIndexChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i11.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i11.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i12.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: i13.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i13.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i14.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i16.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i16.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i16.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "component", type: TablaGeneralComponent, selector: "app-tabla-general", inputs: ["dataKey", "value", "columns", "rows", "totalRecords", "loading", "ocultarFraccionador"], outputs: ["onLoad", "onRowSelect"] }, { kind: "component", type: FiltroGeneralComponent, selector: "app-filtro-general", inputs: ["filtros", "datatable"], outputs: ["metodoRegresar", "metodoRegresarAdicional"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i15.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i17.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ConfirmPopupModule }] });
691
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: FuenteReporteComponent, isStandalone: true, selector: "app-fuente-reporte", providers: [MessageService, ConfirmationService], viewQueries: [{ propertyName: "popupTablasFuenteUI", first: true, predicate: ["popupTablasFuenteUI"], descendants: true }], ngImport: i0, template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView>\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Evaluadores\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"false\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\" class=\"enfocado\"></p-steps>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div> -->\r\n <div class=\"cardInstrucciones mt-4 mb-3\">\r\n <div class=\"flex align-items-center justify-content-between\" >\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <button pButton label=\"{{'link_anterior' | translate}}\" icon=\"pi pi-plus\" (click)=\"anterior()\" *ngIf=\"actual > 0\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n <button pButton label=\"{{'link_siguiente' | translate}}\" icon=\"pi pi-plus\" (click)=\"siguiente()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div> -->\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\" dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\" [(ngModel)]=\"seleccionGeneral\"\r\n [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}:host ::ng-deep .p-steps{background:transparent!important}:host ::ng-deep .p-steps .p-steps-item .p-menuitem-link:not(.p-disabled):focus .p-steps-number{background:var(--color-400)!important;font-size:bold!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-number{background:#fff!important;color:#3b82f6!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-title{color:#3b82f6!important}\n"], dependencies: [{ kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: PopupTablasFuenteComponent, selector: "app-popup-tablas-fuente", outputs: ["aplicarDestinoOcultar"] }, { kind: "ngmodule", type: StepsModule }, { kind: "component", type: i10.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass", "exact"], outputs: ["activeIndexChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i11.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i11.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i12.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: i13.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i13.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i14.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i16.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i16.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i16.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "component", type: TablaGeneralComponent, selector: "app-tabla-general", inputs: ["dataKey", "value", "columns", "rows", "totalRecords", "loading", "ocultarFraccionador"], outputs: ["onLoad", "onRowSelect"] }, { kind: "component", type: FiltroGeneralComponent, selector: "app-filtro-general", inputs: ["filtros", "datatable"], outputs: ["metodoRegresar", "metodoRegresarAdicional"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i15.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i17.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ConfirmPopupModule }] });
688
692
  }
689
693
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FuenteReporteComponent, decorators: [{
690
694
  type: Component,
691
- args: [{ selector: 'app-fuente-reporte', standalone: true, imports: [TooltipModule, CheckboxModule, PopupTablasFuenteComponent, StepsModule, CommonModule, TabViewModule, SplitButtonModule, NgIf, TranslateModule, InputTextModule, CommonModule, AccordionModule, DropdownModule, FormsModule, TableModule, TablaGeneralComponent, FiltroGeneralComponent, ButtonModule, ReactiveFormsModule, GeneralPipe, InputTextareaModule, ConfirmPopupModule, ButtonModule], providers: [MessageService, ConfirmationService], template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView>\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Evaluadores\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"false\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n <div class=\"cardInstrucciones mt-4 mb-3\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <button pButton label=\"{{'link_anterior' | translate}}\" icon=\"pi pi-plus\" (click)=\"anterior()\" *ngIf=\"actual > 0\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n <button pButton label=\"{{'link_siguiente' | translate}}\" icon=\"pi pi-plus\" (click)=\"siguiente()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div> -->\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\" dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\" [(ngModel)]=\"seleccionGeneral\"\r\n [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"] }]
695
+ args: [{ selector: 'app-fuente-reporte', standalone: true, imports: [TooltipModule, CheckboxModule, PopupTablasFuenteComponent, StepsModule, CommonModule, TabViewModule, SplitButtonModule, NgIf, TranslateModule, InputTextModule, CommonModule, AccordionModule, DropdownModule, FormsModule, TableModule, TablaGeneralComponent, FiltroGeneralComponent, ButtonModule, ReactiveFormsModule, GeneralPipe, InputTextareaModule, ConfirmPopupModule, ButtonModule], providers: [MessageService, ConfirmationService], template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView>\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Evaluadores\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"false\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\" class=\"enfocado\"></p-steps>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div> -->\r\n <div class=\"cardInstrucciones mt-4 mb-3\">\r\n <div class=\"flex align-items-center justify-content-between\" >\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <button pButton label=\"{{'link_anterior' | translate}}\" icon=\"pi pi-plus\" (click)=\"anterior()\" *ngIf=\"actual > 0\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n <button pButton label=\"{{'link_siguiente' | translate}}\" icon=\"pi pi-plus\" (click)=\"siguiente()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div> -->\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\" dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\" [(ngModel)]=\"seleccionGeneral\"\r\n [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}:host ::ng-deep .p-steps{background:transparent!important}:host ::ng-deep .p-steps .p-steps-item .p-menuitem-link:not(.p-disabled):focus .p-steps-number{background:var(--color-400)!important;font-size:bold!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-number{background:#fff!important;color:#3b82f6!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-title{color:#3b82f6!important}\n"] }]
692
696
  }], ctorParameters: () => [{ type: i1.MenuService }, { type: i2.ToastService }, { type: i3.ReportesService }, { type: i4.GeneralService }, { type: i5.UtilsService }, { type: i6.ConfirmationService }, { type: i7.TranslateService }, { type: i6.MessageService }], propDecorators: { popupTablasFuenteUI: [{
693
697
  type: ViewChild,
694
698
  args: ['popupTablasFuenteUI']
695
699
  }] } });
696
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxtQkFBbUIsRUFBWSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1B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QWlCLEVBQUMsSUFBSSxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxhQUNwWCxDQUFDLGNBQWMsRUFBQyxtQkFBbUIsQ0FBQzsrUkFzQ2IsbUJBQW1CO3NCQUFwRCxTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29sdW1uYUZ1ZW50ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvQ29sdW1uYUZ1ZW50ZU1vZGVsJztcclxuaW1wb3J0IHsgRnVlbnRlRGF0b01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRnVlbnRlRGF0byc7XHJcbmltcG9ydCB7IFJlcG9ydGVDb2x1bW5hTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9SZXBvcnRlQ29sdW1uYSc7XHJcbmltcG9ydCB7IFRhYmxhRnJvbU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvVGFibGFGcm9tTW9kZWwnO1xyXG5pbXBvcnQgeyBKb2luRnJvbU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvSm9pbkZyb21Nb2RlbCc7XHJcbmltcG9ydCB7IFJlcG9ydGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMbGF2ZUZvcmFuZWFNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0xsYXZlRm9yYW5lYU1vZGVsJztcclxuaW1wb3J0IHsgRm9yZWluZ1dyYXBlck1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRm9yZWluZ1dyYXBlck1vZGVsJztcclxuaW1wb3J0IHsgR2VuZXJhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljaW9zL2dlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyYWxNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0dlbmVyYWxNb2RlbCc7XHJcbmltcG9ydCB7IENvbHVtbmFXcmFwZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0NvbHVtbmFXcmFwZXJNb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25zdGFudGVzR2VuZXJhbGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL2NvbnN0YW50ZXMvQ29uc3RhbnRlc0dlbmVyYWxlcyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ29uZmlybVBvcHVwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jb25maXJtcG9wdXAnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2FjY29yZGlvbic7XHJcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2dlbmVyYWwucGlwZSc7XHJcbmltcG9ydCB7IFRhYmxhR2VuZXJhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29tcG9uZW50ZXMvdGFibGEtZ2VuZXJhbC90YWJsYS1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRyb0dlbmVyYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudGVzL2ZpbHRyby1nZW5lcmFsL2ZpbHRyby1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3BsaXRCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcclxuaW1wb3J0IHsgVGFiVmlld01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcbmltcG9ydCB7IFN0ZXBzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zdGVwcyc7XHJcbmltcG9ydCB7IFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG9wdXBzL3BvcHVwLXRhYmxhcy1mdWVudGUvcG9wdXAtdGFibGFzLWZ1ZW50ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtZnVlbnRlLXJlcG9ydGUnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW1Rvb2x0aXBNb2R1bGUsQ2hlY2tib3hNb2R1bGUsUG9wdXBUYWJsYXNGdWVudGVDb21wb25lbnQsU3RlcHNNb2R1bGUsQ29tbW9uTW9kdWxlLFRhYlZpZXdNb2R1bGUsU3BsaXRCdXR0b25Nb2R1bGUsTmdJZixUcmFuc2xhdGVNb2R1bGUsIElucHV0VGV4dE1vZHVsZSxDb21tb25Nb2R1bGUsIEFjY29yZGlvbk1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBUYWJsZU1vZHVsZSwgVGFibGFHZW5lcmFsQ29tcG9uZW50LCBGaWx0cm9HZW5lcmFsQ29tcG9uZW50LCBCdXR0b25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEdlbmVyYWxQaXBlLCBJbnB1dFRleHRhcmVhTW9kdWxlLCBDb25maXJtUG9wdXBNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXHJcblx0cHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2UsQ29uZmlybWF0aW9uU2VydmljZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Z1ZW50ZS1yZXBvcnRlLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGdWVudGVSZXBvcnRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblx0cHVibGljIGZ1ZW50ZTogRnVlbnRlRGF0b01vZGVsID0gbmV3IEZ1ZW50ZURhdG9Nb2RlbCgpO1xyXG5cdHB1YmxpYyB2aXN0YVZpc3VhbGl6YXI6IHN0cmluZ1xyXG5cdHB1YmxpYyB0YWJsYXNGcm9tOiBUYWJsYUZyb21Nb2RlbFtdID0gW107IC8vIGZyb20gVGFibGFGcm9tXHJcblx0cHVibGljIGpvaW5zRnJvbTogSm9pbkZyb21Nb2RlbFtdID0gW107ICAgLy9mcm9tIEpvaW5Gcm9tIFxyXG5cdHB1YmxpYyBjb2x1bW5hczogUmVwb3J0ZUNvbHVtbmFNb2RlbFtdID0gW107XHJcblx0cHVibGljIGxpc3RhQ29sdW1uYXM6IGFueVtdID0gW107XHJcblx0cHVibGljIGxpc3RhSm9pbjogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgY29sMTogc3RyaW5nO1xyXG5cdHB1YmxpYyBjb2wyOiBzdHJpbmc7XHJcblx0cHVibGljIGNhbXBvczogQ29sdW1uYUZ1ZW50ZU1vZGVsW10gPSBbXTtcclxuXHRwdWJsaWMgY2FtcG9zU2VsZWNjaW9uYXI6IENvbHVtbmFXcmFwZXJNb2RlbFtdID0gW107XHJcblx0cHVibGljIG1vc3RyYXJTZWxlY2Npb25hcjogYm9vbGVhbjtcclxuXHRwdWJsaWMgY2FtcG9Gb3JtdWxhOiBDb2x1bW5hRnVlbnRlTW9kZWwgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0cHVibGljIGFjdHVhbDogbnVtYmVyO1xyXG5cdHB1YmxpYyB0YWJQcmluY2lwYWw6IG51bWJlcjtcclxuXHRwdWJsaWMgYmFzaWNvOiBib29sZWFuO1xyXG5cdHB1YmxpYyBzZWxlY2Npb25HZW5lcmFsOiBib29sZWFuO1xyXG5cdHB1YmxpYyBmb3JhbmVhczogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgZGVzY3JpcGNpb246IHN0cmluZztcclxuXHRwdWJsaWMgcXVlcnk6IHN0cmluZztcclxuXHRwdWJsaWMgcGFnaW5hZG9yOiBGdWVudGVEYXRvTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBmaWx0cm86IEZ1ZW50ZURhdG9Nb2RlbCA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRwdWJsaWMgcGFnaW5hdG9yID0ge1xyXG5cdFx0cm93czogMTAsXHJcblx0XHR0b3RhbFJlY29yZHM6IDAsXHJcblx0fTtcclxuXHRwdWJsaWMgY29sdW1ucyA6IGFueVtdID0gW107XHJcbiAgXHRwdWJsaWMgZmlsdGVycyA6IGFueVtdID0gW107XHJcblx0cHVibGljIGxvYWRpbmcgOiBib29sZWFuO1xyXG5cdHB1YmxpYyBtZW51OiBNZW51SXRlbVtdID0gW107XHJcblx0cHVibGljIGl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcblx0cHVibGljIG1hcGFNZW5zYWplczogTWFwPG51bWJlcixzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsc3RyaW5nPigpO1xyXG5cdEBWaWV3Q2hpbGQoJ3BvcHVwVGFibGFzRnVlbnRlVUknKSBwb3B1cFRhYmxhc0Z1ZW50ZVVJOiBQb3B1cFRhYmxhc0Z1ZW50ZUNvbXBvbmVudDtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UscHJpdmF0ZSBub3RpZmljYXRpb25CdXNTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgcmVwb3J0ZXNTdmM6IFJlcG9ydGVzU2VydmljZSwgcHJpdmF0ZSBnZW5lcmFsU3ZjOiBHZW5lcmFsU2VydmljZSwgcHJpdmF0ZSB1dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSwgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlKSB7IH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmxpc3RhQ29sdW1uYXMgPSBbXTtcclxuXHRcdHRoaXMuY2FtcG9zID0gW107XHJcblx0XHR0aGlzLmxpc3RhSm9pbiA9IFtdO1xyXG5cdFx0dGhpcy5jb2x1bW5hcyA9IFtdO1xyXG5cdFx0dGhpcy50YWJsYXNGcm9tID0gW107XHJcblx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyID0gW107XHJcblx0XHR0aGlzLmpvaW5zRnJvbSA9IFtdO1xyXG5cdFx0dGhpcy5hY3R1YWwgPSAwO1xyXG5cdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnIH1dKTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IFtcclxuXHRcdCAge1xyXG5cdFx0XHRmaWVsZDogICdkZXNjcmlwY2lvbicsXHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Rlc2NyaXBjaW9uJyksXHJcblx0XHRcdHdpZHRoOiAxMDAsXHJcblx0XHQgIH0sXHJcblx0XHRdO1xyXG5cdFx0dGhpcy5maWx0ZXJzID0gW1xyXG5cdFx0ICB7XHJcblx0XHRcdGZpZWxkOiAnZGVzY3JpcGNpb24nLFxyXG5cdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkZXNjcmlwY2lvbicpLFxyXG5cdFx0XHRtYXRjaE1vZGU6ICdjb250YWlucycsXHJcblx0XHQgIH1cclxuXHRcdF07XHJcblx0XHR0aGlzLmluaXRTdGVwKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgbG9hZChldmVudCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5sb2FkaW5nID10cnVlO1xyXG5cdFx0XHR0aGlzLmNvbG9jYXJGaWx0cm8oKTtcclxuXHRcdFx0dGhpcy5maWx0cm8ucGFnaW5hY2lvblJlZ2lzdHJvSW5pY2lhbCA9IGV2ZW50Py5maXJzdCAhPSBudWxsID8gZXZlbnQ/LmZpcnN0IDogMCxcclxuXHRcdFx0XHR0aGlzLmZpbHRyby5wYWdpbmFjaW9uUmVnaXN0cm9GaW5hbCA9IGV2ZW50Py5yb3dzICE9IG51bGwgPyBldmVudD8ucm93cyA6IDEwLFxyXG5cdFx0XHRcdHRoaXMucGFnaW5hZG9yID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5jb25zdWx0YXJGdWVudGVEYXRvKHRoaXMuZmlsdHJvKS50b1Byb21pc2UoKTtcclxuXHRcdFx0dGhpcy5wYWdpbmF0b3IudG90YWxSZWNvcmRzID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5jYW50aWRhZEZ1ZW50ZURhdG8odGhpcy5maWx0cm8pLnRvUHJvbWlzZSgpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sb2FkaW5nID1mYWxzZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjb2xvY2FyRmlsdHJvKCkge1xyXG5cdFx0dGhpcy5maWx0cm8ub3JpZ2VuID0gKFwiRlwiKTtcclxuXHRcdHRoaXMuZmlsdHJvLmRlc2NyaXBjaW9uID0gKG51bGwpO1xyXG5cdFx0aWYgKHRoaXMudXRpbHNTZXJ2aWNlLmlzTm90QmxhbmsodGhpcy5kZXNjcmlwY2lvbikpIHtcclxuXHRcdFx0dGhpcy5maWx0cm8uZGVzY3JpcGNpb24gPSAoQ29uc3RhbnRlc0dlbmVyYWxlcy5QT1JDRU5UQUpFICsgdGhpcy5kZXNjcmlwY2lvbiArIENvbnN0YW50ZXNHZW5lcmFsZXMuUE9SQ0VOVEFKRSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHVibGljIGxpbXBpYXJDYW1wb3MoKSB7XHJcblx0XHR0aGlzLmRlc2NyaXBjaW9uID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBzaWd1aWVudGUoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy52YWxpZGFyV2l6YXJkKCkpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5hY3R1YWwgPCAzKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5hY3R1YWwgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzID0gW107XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoID09IDApIHsgLy8gTm8gc2VsZWNjaW9ubyBuaW5ndW5hIHRhYmxhXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiRGViZSBzZWxlY2Npb25hciBhbCBtZW5vcyB1biBvYmpldG8uXCIpO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoID09IDEpIHsgLy8gU29sbyBzZWxlY2Npb25vIHVuYSwgcG9yIGVzbyBubyBoYXkgcXVlIGdlbmVyYXIgam9pbnMuXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hY3R1YWwrKztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgbm9tYnJlc1RhYmxhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFub21icmVzVGFibGFzLmluY2x1ZGVzKHRhYmxhLnRhYmxhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRub21icmVzVGFibGFzLnB1c2godGFibGEudGFibGEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzID0gW107XHJcblx0XHRcdFx0XHRcdFx0Ly9MaXN0PExsYXZlRm9yYW5lYT4gXHJcblx0XHRcdFx0XHRcdFx0bGV0IGxsYXZlczogTGxhdmVGb3JhbmVhTW9kZWxbXSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuZ2V0TGxhdmVzKG5vbWJyZXNUYWJsYXMpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsYXNGcm9tLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudGFibGFzRnJvbS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JhbmVhIG9mIGxsYXZlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb3JhbmVhLnRhYmxhMSA9PSAodGhpcy50YWJsYXNGcm9tW2ldLnRhYmxhKSAmJiBmb3JhbmVhLnRhYmxhMiA9PSAodGhpcy50YWJsYXNGcm9tW2pdLnRhYmxhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG51ZXZvOiBGb3JlaW5nV3JhcGVyTW9kZWwgPSBuZXcgRm9yZWluZ1dyYXBlck1vZGVsKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWV2by5hbGlhczEgPSAodGhpcy50YWJsYXNGcm9tW2ldLmFsaWFzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG51ZXZvLmFsaWFzMiA9ICh0aGlzLnRhYmxhc0Zyb21bal0uYWxpYXMpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVldm8ubGxhdmUgPSAoZm9yYW5lYSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzLnB1c2gobnVldm8pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIENhcmdvIGxhcyBjb2x1bW5hcyBwYXJhIGxvcyBzaWd1aWVudGVzIHByb2Nlc29zLlxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5hcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RhQ29sdW1uYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hciA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZnJvbSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRcdFx0XHQvL1JlcG9ydGVDb2x1bW5hRFRPIFxyXG5cdFx0XHRcdFx0XHRcdGxldCB0YSA9IG5ldyBSZXBvcnRlQ29sdW1uYU1vZGVsKCk7XHJcblx0XHRcdFx0XHRcdFx0dGEucmVwb3J0ZUZ1ZW50ZSA9IChmcm9tLnRhYmxhKTtcclxuXHRcdFx0XHRcdFx0XHQvL0xpc3Q8UmVwb3J0ZUNvbHVtbmFEVE8+IFxyXG5cdFx0XHRcdFx0XHRcdGxldCBudWV2YXM6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSA9IGF3YWl0IHRoaXMuZ2VuZXJhbFN2Yy5xdWVyeUZvckxpc3QobmV3IEdlbmVyYWxNb2RlbCgnUmVwb3J0ZUNvbHVtbmFEVE8nLCAnUmVwb3J0ZXMuY29uc3VsdGFyQ29sdW1uYXMnLCBmYWxzZSwgdGEpKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNhcmdhckxpc3Rhc0NvbHVtbmFzKG51ZXZhcywgZnJvbS5hbGlhcyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmFjdHVhbCsrO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnRlcm1pbmFyUGFzb3MoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2FyZ2FyTGlzdGFzQ29sdW1uYXMobnVldmFzOiBSZXBvcnRlQ29sdW1uYU1vZGVsW10sIGFsaWFzOiBzdHJpbmcpIHtcclxuXHRcdGZvciAobGV0IGNvbCBvZiBudWV2YXMpIHtcclxuXHRcdFx0Y29sLnJlcG9ydGVGdWVudGUgPSAoYWxpYXMpO1xyXG5cdFx0XHR0aGlzLmNvbHVtbmFzLnB1c2goY29sKTtcclxuXHRcdFx0dGhpcy5saXN0YUNvbHVtbmFzLnB1c2goeyB2YWx1ZTogY29sLnJlcG9ydGVGdWVudGUgKyAnLicgKyBjb2wubm9tYnJlLCBsYWJlbDogY29sLnJlcG9ydGVGdWVudGUgKyAnLicgKyBjb2wubm9tYnJlIH0pO1xyXG5cdFx0XHRsZXQgY2FtcG8gPSBuZXcgQ29sdW1uYVdyYXBlck1vZGVsKCk7XHJcblx0XHRcdGNhbXBvLmNvbHVtbmEgPSBjb2w7XHJcblx0XHRcdGNhbXBvLmFsaWFzID0gY29sLm5vbWJyZTtcclxuXHRcdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hci5wdXNoKGNhbXBvKTtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKCdjYW1wb3NTZWxlY2Npb25hcicsdGhpcy5jYW1wb3NTZWxlY2Npb25hcik7XHJcblx0XHRcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyB0ZXJtaW5hclBhc29zKCkge1xyXG5cdFx0bGV0IGNhbXBvc1NxbCA9IFwiXCI7XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRpZiAoY29sLnNlbGVjY2lvbmFkbykge1xyXG5cdFx0XHRcdGNhbXBvc1NxbCArPSAoaSA9PSAwID8gXCJcIiA6IFwiLFwiKSArIGNvbC5jb2x1bW5hLm5vbWJyZSArIFwiIGFzIFwiICsgY29sLmFsaWFzO1xyXG5cdFx0XHRcdGkrKztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZnVlbnRlLndoZXJlSm9pbiA9ICh0aGlzLmdlbmVyYXJTcWxKb2luKCkpO1xyXG5cdFx0dGhpcy5mdWVudGUuZnJvbVNxbCA9ICh0aGlzLmdlbmVyYXJTcWxGcm9tKCkpO1xyXG5cdFx0bGV0IHdoZXJlID0gXCJcIjtcclxuXHRcdGxldCBlc3RhQmxhbmNvV2hlcmVKb2luOiBib29sZWFuID0gdGhpcy5mdWVudGUud2hlcmVKb2luID09IG51bGwgfHwgXCJcIiA9PSAodGhpcy5mdWVudGUud2hlcmVKb2luKTtcclxuXHRcdGxldCBlc3RhQmxhbmNvV2hlcmVBZGljaW9uYWw6IGJvb2xlYW4gPSB0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCA9PSBudWxsIHx8IFwiXCIgPT0gKHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsKTtcclxuXHRcdGlmICghZXN0YUJsYW5jb1doZXJlSm9pbiB8fCAhZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsKSB7XHJcblx0XHRcdHdoZXJlID0gXCIgXFxuV0hFUkUgXCI7XHJcblx0XHRcdGlmICghZXN0YUJsYW5jb1doZXJlSm9pbiAmJiAhZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsKSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVKb2luICsgXCIgQU5EIFxcbihcIiArIHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsICsgXCIpXCI7XHJcblx0XHRcdH0gZWxzZSBpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4pIHtcclxuXHRcdFx0XHR3aGVyZSArPSB0aGlzLmZ1ZW50ZS53aGVyZUpvaW47XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVBZGljaW9uYWw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKCd3aGVyZScsd2hlcmUpO1xyXG5cdFx0XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgc3FsID0gXCJTRUxFQ1QgXFxuXCIgKyBjYW1wb3NTcWwgKyBcIiBcXG5GUk9NIFxcblwiICsgdGhpcy5mdWVudGUuZnJvbVNxbCArIHdoZXJlO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLnZhbGlkYXJRdWVyeShzcWwpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9IChzcWwpO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gc3FsO1xyXG5cdFx0XHR0aGlzLnRhYlByaW5jaXBhbCA9IDA7XHJcblx0XHRcdHRoaXMuY29uc3RydWlyQ29sdW1uYXMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBhZGljaW9uYXJGb3JhbmVhKGV2ZW50bykge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9Gb3JlaW5nV3JhcGVyIFxyXG5cdFx0XHRsZXQgZm9yYW5lYTogRm9yZWluZ1dyYXBlck1vZGVsID0gZXZlbnRvLmRhdGE7XHJcblx0XHRcdGZvciAobGV0IHJlbCBvZiBmb3JhbmVhLmxsYXZlLnJlbGFjaW9uZXMpIHtcclxuXHRcdFx0XHRsZXQgcGFyID0gcmVsLnNwbGl0KFwiOlwiKTtcclxuXHRcdFx0XHRsZXQgam9pbiA9IG5ldyBKb2luRnJvbU1vZGVsKCk7XHJcblx0XHRcdFx0am9pbi5jb2x1bW5hMSA9IChmb3JhbmVhLmFsaWFzMSArIFwiLlwiICsgcGFyWzBdKTtcclxuXHRcdFx0XHRqb2luLmNvbHVtbmEyID0gKGZvcmFuZWEuYWxpYXMyICsgXCIuXCIgKyBwYXJbMV0pO1xyXG5cdFx0XHRcdHRoaXMuam9pbnNGcm9tLnB1c2goam9pbik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBlbGltaW5hcigpIHtcclxuXHRcdHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuXHRcdFx0dGFyZ2V0OiBldmVudC50YXJnZXQsXHJcblx0XHRcdG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtZW5zYWplX2FsZXJ0YScpLFxyXG5cdFx0XHRpY29uOiAnY29uZmlybWFyJyxcclxuXHRcdFx0YWNjZXB0OiAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zZXRSZXNwdWVzdGEodHJ1ZSlcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVqZWN0OiAoKSA9PiB7XHJcblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBzZXRSZXNwdWVzdGEocmVzcHVlc3RhOiBib29sZWFuKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAocmVzcHVlc3RhKSB7XHJcblx0XHRcdFx0dGhpcy5yZXBvcnRlc1N2Yy5lbGltaW5hckZ1ZW50ZURhdG9zQ29uSGlqb3ModGhpcy5mdWVudGUpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdHRoaXMuZnVlbnRlID0gbnVsbDtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJMYSBmdWVudGUgaGEgc2lkbyBlbGltaW5hZGEuXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYW50ZXJpb3IoKSB7XHJcblx0XHRpZiAodGhpcy5hY3R1YWwgPiAwKVxyXG5cdFx0XHR0aGlzLmFjdHVhbC0tO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHZhbGlkYXJRdWVyeSgpIHtcclxuXHRcdHRyeSB7XHJcblxyXG5cdFx0XHRpZiAodGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclRleHRvU1FMKHRoaXMucXVlcnksIHRydWUsIHRydWUsIDgwMDAsIHRydWUpKSB7XHJcblx0XHRcdFx0dGhpcy5yZXBvcnRlc1N2Yy52YWxpZGFyUXVlcnkodGhpcy5xdWVyeSk7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiRWwgcXVlcnkgZXN0YSBjb3JyZWN0by5cIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Ly9WYWxpZGFkb3IuYWRpY2lvbmFyTWVuc2FqZShcImZ1ZW50ZUZvcm06dGFiOnF1ZXJ5XCIsIGUuZ2V0TWVzc2FnZSgpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZGljaW9uYXJKb2luKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHRoaXMuY29sMSAhPSBudWxsICYmIHRoaXMuY29sMiAhPSBudWxsKSB7XHJcblx0XHRcdFx0Ly8gVE9ETzogRmFsdGEgdmFsaWRhciBlbCB0aXBvXHJcblx0XHRcdFx0bGV0IG51ZXZvID0gbmV3IEpvaW5Gcm9tTW9kZWwoKTtcclxuXHRcdFx0XHRudWV2by5jb2x1bW5hMSA9ICh0aGlzLmNvbDEpO1xyXG5cdFx0XHRcdG51ZXZvLmNvbHVtbmEyID0gKHRoaXMuY29sMik7XHJcblx0XHRcdFx0dGhpcy5qb2luc0Zyb20ucHVzaChudWV2byk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRGViZSBzZWxlY2Npb25hciBkb3MgY2FtcG9zXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWxpbWluYXJKb2luKGFlKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvL2xldCAgam9pbiA9IChKb2luRnJvbSkgKChVSVBhcmFtZXRlcikgYWUuZ2V0Q29tcG9uZW50KCkuZmluZENvbXBvbmVudChcImpvaW5cIikpLmdldFZhbHVlKCk7XHJcblx0XHRcdHRoaXMuam9pbnNGcm9tLmZpbHRlcigoZGF0YSkgPT4gZGF0YSA9PT0gYWUuZGF0YSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWxpbWluYXJUYWJsYShhZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9UYWJsYUZyb20gdGFibGEgPSAoVGFibGFGcm9tKSAoKFVJUGFyYW1ldGVyKSBhZS5nZXRDb21wb25lbnQoKS5maW5kQ29tcG9uZW50KFwidGFibGFcIikpLmdldFZhbHVlKCk7XHJcblx0XHRcdHRoaXMudGFibGFzRnJvbS5maWx0ZXIoKGRhdGEpID0+IGRhdGEgPT09IGFlKTtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRmFsdGEgZWxpbWluYXIgbGFzIGNvbHVtbmFzIGRlIGxhIHRhYmxhID8/P1wiKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBidXNjYXJUYWJsYSgpIHtcclxuXHRcdHRoaXMucG9wdXBUYWJsYXNGdWVudGVVSS5idXNjYXJUYWJsYShcImZ1ZW50ZVVJLnRhYmxhU2VsZWNjaW9uYWRhXCIpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldFRhYmxhU2VsZWNjaW9uYWRhKHRhYmxhU2VsZWNjaW9uYWRhOiBzdHJpbmcpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCB0YWJsYXMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgdGFibGEgb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdFx0aWYgKCF0YWJsYXMuaW5jbHVkZXModGFibGEudGFibGEpKSB7XHJcblx0XHRcdFx0XHR0YWJsYXMucHVzaCh0YWJsYS50YWJsYSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuY2FyZ2FyVGFibGFFbkxpc3RhKHRhYmxhU2VsZWNjaW9uYWRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FyZ2FyVGFibGFFbkxpc3RhKHRhYmxhOiBzdHJpbmcpIHtcclxuXHRcdGxldCBwYXIgPSB0YWJsYS5zcGxpdChcIl9cIik7XHJcblx0XHRsZXQgYWxpYXMgPSBwYXJbMF07XHJcblx0XHRsZXQgaSA9IDE7XHJcblx0XHRsZXQgdGFibGFUZW1wID0gbmV3IFRhYmxhRnJvbU1vZGVsKClcclxuXHRcdHRhYmxhVGVtcC5hbGlhcyA9IGFsaWFzO1xyXG5cdFx0d2hpbGUgKHRoaXMudGFibGFzRnJvbS5pbmNsdWRlcyh0YWJsYVRlbXApKSB7XHJcblx0XHRcdGFsaWFzID0gdGFibGEgKyAoaSsrKTtcclxuXHRcdH1cclxuXHRcdGxldCB0ZW0gPSBuZXcgVGFibGFGcm9tTW9kZWwoKTtcclxuXHRcdHRlbS50YWJsYSA9IHRhYmxhO1xyXG5cdFx0dGVtLmFsaWFzID0gYWxpYXM7XHJcblx0XHR0aGlzLnRhYmxhc0Zyb20ucHVzaCh0ZW0pO1xyXG5cdFx0cmV0dXJuIGFsaWFzO1xyXG5cdH1cclxuXHJcblxyXG5cclxuXHRwdWJsaWMgY2FtYmlvSm9pbihjZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5saXN0YUpvaW4gPSBbXTtcclxuXHRcdFx0bGV0IG51ZXZvID0gY2UudmFsdWU7XHJcblx0XHRcdGlmIChudWV2byAhPSBudWxsKSB7XHJcblx0XHRcdFx0Ly9SZXBvcnRlQ29sdW1uYURUTyBcclxuXHRcdFx0XHRsZXQgYWN0OiBSZXBvcnRlQ29sdW1uYU1vZGVsID0gbnVsbDtcclxuXHRcdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdFx0aWYgKG51ZXZvLmVxdWFscyhjb2wucmVwb3J0ZUZ1ZW50ZSArIFwiLlwiICsgY29sLm5vbWJyZSkpIHtcclxuXHRcdFx0XHRcdFx0YWN0ID0gY29sO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY29sdW1uYXMpIHtcclxuXHRcdFx0XHRcdGlmICghY29sLnJlcG9ydGVGdWVudGUuc3RhcnRzV2l0aChhY3QucmVwb3J0ZUZ1ZW50ZSkgJiYgY29sLnRpcG9EYXRvID09IChhY3QudGlwb0RhdG8pICYmIGNvbC5vcmRlbiA9PSAoYWN0Lm9yZGVuKSkge1xyXG5cdFx0XHRcdFx0XHRsZXQgdmFsID0gY29sLnJlcG9ydGVGdWVudGUgKyBcIi5cIiArIGNvbC5ub21icmU7XHJcblx0XHRcdFx0XHRcdHRoaXMubGlzdGFKb2luLnB1c2goeyB2YWx1ZTogdmFsLCBrZXk6IHZhbCB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlZGl0YXJDYW1wbyhldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCBjb2w6IENvbHVtbmFGdWVudGVNb2RlbCA9IGV2ZW50by5kYXRhO1xyXG5cdFx0XHR0aGlzLmNhbXBvRm9ybXVsYSA9IGNvbDtcclxuXHRcdFx0bGV0IHZhcnMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgY2FtcG8gb2YgdGhpcy5jYW1wb3MpIHtcclxuXHRcdFx0XHRsZXQgdmFyMTogYW55O1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNhbXBvLm5vbWJyZSk7XHJcblx0XHRcdFx0dmFyMS50aXBvID0gKGNhbXBvLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGNvbC5nZXRTaW50YXhpcygpLCBcImZ1ZW50ZVVJLmZvcm11bGFcIiwgdmFycyk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWRpdGFyV2hlcmUoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgdmFycyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdC8vVmFyaWFibGVGb3JtdWxhIFxyXG5cdFx0XHRcdGxldCB2YXIxO1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlKTtcclxuXHRcdFx0XHR2YXIxLnRpcG8oY29sLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGZ1ZW50ZS5nZXRXaGVyZUFkaWNpb25hbCgpLCBcImZ1ZW50ZVVJLmZ1ZW50ZS53aGVyZUFkaWNpb25hbFwiLCB2YXJzKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRGb3JtdWxhKGZvcm11bGEpIHtcclxuXHRcdGlmICh0aGlzLmNhbXBvRm9ybXVsYSAhPSBudWxsKSB7XHJcblx0XHRcdHRoaXMuY2FtcG9Gb3JtdWxhLnNpbnRheGlzID0gKGZvcm11bGEpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jYW1wb0Zvcm11bGEgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFkaWNpb25hckNvbHVtbmFzKCkge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0Y29sLnNlbGVjY2lvbmFkbyA9IChmYWxzZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLm1vc3RyYXJTZWxlY2Npb25hciA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWdyZWdhclNlbGVjY2lvbmFkb3MoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRcdGlmIChjb2wuc2VsZWNjaW9uYWRvKSB7XHJcblx0XHRcdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdFx0XHRsZXQgY2FtcG8gPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdFx0XHRjYW1wby5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0XHRcdGNhbXBvLm5vbWJyZSA9IChjb2wuY29sdW1uYS5ub21icmUpO1xyXG5cdFx0XHRcdFx0Y2FtcG8uc2ludGF4aXMgPSAoY29sLmNvbHVtbmEubm9tYnJlKTtcclxuXHRcdFx0XHRcdHRoaXMuY2FtcG9zLnB1c2goY2FtcG8pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLm9jdWx0YXJTZWxlY2Npb25hcigpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIG9jdWx0YXJTZWxlY2Npb25hcigpIHtcclxuXHRcdHRoaXMubW9zdHJhclNlbGVjY2lvbmFyID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdmVyRGV0YWxsZShldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHRsZXQgZnVlbnRlRGF0b0RUTyA9IGV2ZW50bztcclxuXHRcdFx0dGhpcy5mdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0XHRcdHRoaXMuZnVlbnRlLmxsYXZlID0gKGZ1ZW50ZURhdG9EVE8ubGxhdmUpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY29uc3VsdGFyVW5pY2FGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0aWYgKHRoaXMuZnVlbnRlLnF1ZXJ5MiAhPSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeSA9IHRoaXMuZnVlbnRlLnF1ZXJ5ICsgdGhpcy5mdWVudGUucXVlcnkyO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucXVlcnkgPSB0aGlzLmZ1ZW50ZS5xdWVyeTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdGxldCBjb2wgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdGNvbC5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNvbnN1bHRhckNvbHVtbmFzRnVlbnRlKGNvbCkudG9Qcm9taXNlKCk7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnLCB9LCB7bGFiZWw6ICdNYW50ZW5pbWllbnRvIEZ1ZW50ZSd9XSk7XHJcblx0XHRcdHRoaXMuY2FyZ2FzT3BjaW9uZXMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBudWV2bygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRcdFx0dGhpcy5mdWVudGUub3JpZ2VuID0gKFwiRlwiKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBudWxsO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gbnVsbDtcclxuXHRcdFx0dGhpcy50YWJQcmluY2lwYWwgPSAwO1xyXG5cdFx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJywgfSwge2xhYmVsOiAnTWFudGVuaW1pZW50byBGdWVudGUnfV0pO1xyXG5cdFx0XHR0aGlzLmNhcmdhc09wY2lvbmVzKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYXJnYXNPcGNpb25lcygpe1xyXG5cdFx0dGhpcy5tZW51PSBbe2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua19lbGltaW5hcicpLCBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWJpbicsIHZpc2libGU6IHRoaXMuZnVlbnRlLmxsYXZlICE9IG51bGwsIGNvbW1hbmQ6IChldmVudCkgPT4ge3RoaXMuZWxpbWluYXIoKX19LFxyXG5cdFx0e2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua192YWxpZGFyJyksIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtcHJpbnQnLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLnZhbGlkYXJRdWVyeSgpfX0sXHJcblx0XHR7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX2dlbmVyYXInKSwgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1iZWxsJyx2aXNpYmxlOiB0aGlzLmZ1ZW50ZS5sbGF2ZSAhPSBudWxsLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLmNvbnN0cnVpckNvbHVtbmFzKCl9fSxcclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHJlZ3Jlc2FyKCl7XHJcblx0XHR0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcblx0XHR0aGlzLm5nT25Jbml0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHZhbGlkYXIoKTogYm9vbGVhbiB7XHJcblx0XHRsZXQgcmVzID0gdHJ1ZTtcclxuXHRcdHJlcyA9IHJlcyAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLmZ1ZW50ZS5kZXNjcmlwY2lvbik7XHJcblx0XHRyZXMgPSByZXMgJiYgKHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSA9PSBudWxsKTtcclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWdpc3RyYS9hY3R1YWxpemEgbGEgaW5mb3JtYWNpb24gZ2VuZXJhbCBkZSBsYSBmdWVudGUgZGUgZGF0b3NcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgZ3VhcmRhcigpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXIoKSkge1xyXG5cdFx0XHRcdGlmICh0aGlzLnF1ZXJ5Lmxlbmd0aCA+IDQwMDApIHtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5ID0gKHRoaXMucXVlcnkuc3Vic3RyaW5nKDAsIDM5OTkpKTtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5MiA9ICh0aGlzLnF1ZXJ5LnN1YnN0cmluZygzOTk5LCB0aGlzLnF1ZXJ5Lmxlbmd0aCkpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9ICh0aGlzLnF1ZXJ5KTtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5MiA9IChudWxsKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLmZ1ZW50ZS5sbGF2ZSA9PSBudWxsKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5sbGF2ZSA9ICh0aGlzLnV0aWxzU2VydmljZS5nZW5lcmFyTGxhdmUoKSk7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmluc2VydGFyRnVlbnRlRGF0byh0aGlzLmZ1ZW50ZSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuYWN0dWFsaXphckZ1ZW50ZURhdG8odGhpcy5mdWVudGUpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJMb3MgY2FtYmlvcyBoYW4gc2lkbyBndWFyZGFkb3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9Ly9ndWFyZGFyXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZ2lzdHJhL2FjdHVhbGl6YSBsYXMgY29sdW1uYXMgZ2VuZXJhZG9zIHBhcmEgbGEgZnVlbnRlIGRlIGRhdG9zIGNvbW8gcmVnaXN0cm9zIGRlIHRpcG8gJ0NvbHVtbmFGdWVudGUnXHJcblx0ICovXHJcblx0cHVibGljIGFzeW5jIGd1YXJkYXJDYW1wb3MoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy5mdWVudGUubGxhdmUgPT0gbnVsbCkge1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIlBvciBmYXZvciBkaWxpZ2VuY2llIHByaW1lcm8gbG9zIGRhdG9zIGRlIGxhIGZ1ZW50ZVwiKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMudmFsaWRhckNhbXBvcygpKSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5hY3R1YWxpemFyQ29sdW1uYXNGdWVudGUodGhpcy5mdWVudGUsIHRoaXMuY2FtcG9zKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJTZSBoYW4gZ3VhcmRhZG8gbG9zIGNhbXBvc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH0vL2d1YXJkYXJDYW1wb3NcclxuXHJcblx0LyoqXHJcblx0ICogVmVyaWZpY2EgcXVlIGxvcyB2YWxvcmVzIGFzb2NpYWRvcyBhIGxvcyBjYW1wb3MgcGFyYSBsYSBjcmVhY2lvbiBkZSBsYXMgY29sdW1uYXMgZGUgbGEgZnVlbnRlIHNlYW4gdsOhbGlkb3NcclxuXHQgKiBAcmV0dXJuIGZhbHNlIGVuIGNhc28gZGUgcXVlIGxvcyB2YWxvcmVzIGFzaWduYWRvcyBhIGxvcyBjYW1wb3Mgc2VhbiBudWxvcyBvIG5vIHNlYW4gcGFsYWJyYXMgdsOhbGlkYXMgZGUgYWN1ZXJkbyBcclxuXHQgKiBjb24gbGFzIGNvbmRpY2lvbmVzIGRhZGFzIHBvciBWYWxpZGFkb3JVdGlsLnZhbGlkYXJQYWxhYnJhKCkpLFxyXG5cdCAqIGVuIGNhc28gY29udHJhcmlvIHJldG9ybmEgdHJ1ZVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgdmFsaWRhckNhbXBvcygpIHtcclxuXHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNhbXBvcykge1xyXG5cdFx0XHRpZiAoY29sLm5vbWJyZSA9PSBudWxsIHx8ICF0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyUGFsYWJyYShjb2wubm9tYnJlKSkge1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIk5vbWJyZSBubyB2YWxpZG8gKFwiICsgY29sLm5vbWJyZSArIFwiKVwiKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnV5ZSBsYXMgY29sdW1uYXMgZGUgbGEgZnVlbnRlIGRlIGRhdG9zLCBjb24gYmFzZSBlbiBsb3MgY2FtcG9zIG9idGVuaWRvcyBcclxuXHQgKiBkZSBsYSBjb25zdWx0YSBTUUwgYXNvY2lhZGFcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgY29uc3RydWlyQ29sdW1uYXMoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLmNhbXBvcyA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuZ2V0Q29sdW1uYXNTcWwodGhpcy5xdWVyeSkudG9Qcm9taXNlKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fS8vY29uc3RydWlyQ29sdW1uYXNcclxuXHJcblxyXG5cclxuXHRwcml2YXRlIHZhbGlkYXJXaXphcmQoKSB7XHJcblx0XHRsZXQgYWxpYXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0aWYgKGFsaWFzLmluY2x1ZGVzKHRhYmxhLmFsaWFzKSkge1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIk5vIHNlIHB1ZWRlIHJlcGV0aXIgZWwgYWxpYXMgZGUgbGFzIHRhYmxhcy5cIik7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFsaWFzLnB1c2godGFibGEuYWxpYXMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRhbGlhcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0aWYgKGNvbC5zZWxlY2Npb25hZG8pIHtcclxuXHRcdFx0XHRpZiAoYWxpYXMuaW5jbHVkZXMoY29sLmFsaWFzKSkge1xyXG5cdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTm8gc2UgcHVlZGUgcmVwZXRpciBlbCBhbGlhcyBkZSBsYXMgY29sdW1uYXMuXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhbGlhcy5wdXNoKGNvbC5hbGlhcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdlbmVyYXJTcWxGcm9tKCkge1xyXG5cdFx0bGV0IHJlcyA9IFwiXCI7XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0cmVzICs9IChpID09IDAgPyBcIlwiIDogXCIsXCIpICsgdGFibGEudGFibGEgKyBcIiBcIiArIHRhYmxhLmFsaWFzO1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZW5lcmFyU3FsSm9pbigpIHtcclxuXHRcdGxldCByZXMgPSBcIlwiO1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0Zm9yIChsZXQgam9pbiBvZiB0aGlzLmpvaW5zRnJvbSkge1xyXG5cdFx0XHRyZXMgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIiBBTkQgXCIpICsgam9pbi5jb2x1bW5hMSArIFwiID0gXCIgKyBqb2luLmNvbHVtbmEyO1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzO1xyXG5cdH1cclxuXHJcblx0Ly9JTVBMRU1FTlRBQ0lPTiBTVEVQRVJcclxuXHRpbml0U3RlcCgpe1xyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDAsJ1NlbGVjY2lvbmUgbGFzIHRhYmxhcyBvIHZpc3RhcyBkZSBkb25kZSBkZXNlYSBvYnRlbmVyIGxhIGluZm9ybWFjaW9uLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMSwnSW5kaXF1ZSBkZSBxdWUgbWFuZXJhIHNlIHJlbGFjY2lvbmFuIGxvcyBvYmpldG9zIGVudHJlIHNpLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMiwnSW5kaXF1ZSBsb3MgZmlsdHJvcyBhZGljaW9uYWxlcyBxdWUgZGVzZWUgcmVhbGl6YXIgc29icmUgbGEgaW5mb3JtYWNpb24uJylcclxuXHRcdHRoaXMubWFwYU1lbnNhamVzLnNldCgzLCdDYW1wb3MnKVxyXG5cdFx0dGhpcy5pdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdmcm9tJyksXHJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiAncGVyc29uYWwnLFxyXG5cdFx0XHRcdHRpdGxlOidTZWxlY2Npb25lIGxhcyB0YWJsYXMgbyB2aXN0YXMgZGUgZG9uZGUgZGVzZWEgb2J0ZW5lciBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnam9pbicpLFxyXG5cdFx0XHRcdHJvdXRlckxpbms6ICdwZXJzb25hbCcsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luZGlxdWUgZGUgcXVlIG1hbmVyYSBzZSByZWxhY2Npb25hbiBsb3Mgb2JqZXRvcyBlbnRyZSBzaS4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnd2hlcmUnKSxcclxuXHRcdFx0XHRyb3V0ZXJMaW5rOiAncGVyc29uYWwnLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbmRpcXVlIGxvcyBmaWx0cm9zIGFkaWNpb25hbGVzIHF1ZSBkZXNlZSByZWFsaXphciBzb2JyZSBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY2FtcG9zJyksXHJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiAnY29uZmlybWF0aW9uJyxcclxuXHRcdFx0XHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcblx0fVxyXG5cclxuXHRhY3R1YWxpemFyU2VsZWNjaW9uKGJvb2xlYW5vZ2VuZXJhbDogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hci5mb3JFYWNoKChlbGVtZW50bykgPT4ge1xyXG5cdFx0XHRlbGVtZW50by5zZWxlY2Npb25hZG8gPSBib29sZWFub2dlbmVyYWw7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHRvZG9zU2VsZWNjaW9uYWRvcygpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLmV2ZXJ5KGVsZW1lbnRvID0+IGVsZW1lbnRvLnNlbGVjY2lvbmFkbyk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuIiwiQGlmKHZpc3RhVmlzdWFsaXphciA9PSBudWxsKXtcclxuPGgxPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGV9fSB7eydyZXBvcnRlJ3wgdHJhbnNsYXRlfX08L2gxPlxyXG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgPGFwcC1maWx0cm8tZ2VuZXJhbCBbZmlsdHJvc109XCJmaWx0ZXJzXCIgW2RhdGF0YWJsZV09XCJ0YWJsYUdlbmVyYWxcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWZvcm0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBhdXRvZm9jdXMgdHlwZT1cInRleHRcIiBpZD1cImRlc2NyaXBjaW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2ZpbHRybycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2FwcC1maWx0cm8tZ2VuZXJhbD5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfbnVldm8nIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwibnVldm8oKVwiIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuPGFwcC10YWJsYS1nZW5lcmFsICN0YWJsYUdlbmVyYWwgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFt2YWx1ZV09XCJwYWdpbmFkb3JcIiBbcm93c109XCJwYWdpbmF0b3Iucm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInBhZ2luYXRvci50b3RhbFJlY29yZHNcIiAob25Mb2FkKT1cImxvYWQoJGV2ZW50KVwiIChvblJvd1NlbGVjdCk9XCJ2ZXJEZXRhbGxlKCRldmVudClcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiPjwvYXBwLXRhYmxhLWdlbmVyYWw+XHJcbn1cclxuQGlmKHZpc3RhVmlzdWFsaXphciAhPSBudWxsKXtcclxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgIDxoMT57eydmdWVudGUnIHwgdHJhbnNsYXRlfX0ge3sncmVwb3J0ZSd8IHRyYW5zbGF0ZX19PC9oMT5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJyZWdyZXNhcigpXCIgbGFiZWw9XCJSZWdyZXNhclwiIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBmb250LXNlbWlib2xkXCI+PC9idXR0b24+XHJcbjwvZGl2PlxyXG48cC10YWJWaWV3PlxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ2Z1ZW50ZSd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgIDxoNT48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J2RhdG9zJ3wgdHJhbnNsYXRlfX0ge3snYmFzaWNvcyd8IHRyYW5zbGF0ZX19PC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgYXV0b2ZvY3VzIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwZXNvXCIgWyhuZ01vZGVsKV09XCJmdWVudGUuZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBlc29cIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ3LWZ1bGxcIiBpZD1cImZsb2F0LWlucHV0XCIgcm93cz1cIjVcIiBjb2xzPVwiMzBcIiBwSW5wdXRUZXh0YXJlYSBbKG5nTW9kZWwpXT1cInF1ZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1cyBbYXV0b1Jlc2l6ZV09XCJ0cnVlXCI+IDwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2NvbnN1bHRhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIiBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWZsb3BweS1zYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHAtc3BsaXRCdXR0b24gY2xhc3M9XCJtbC0yXCIgbGFiZWw9XCJBY2Npb25lcyBFdmFsdWFkb3Jlc1wiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVcIj48L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCIgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyQ2FtcG9zKClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHAtdGFibGUgI3RhYmxhR2VuZXJhbEVudHJhZGEgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiY2FtcG9zXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwiZmFsc2VcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJsbGF2ZVRhYmxhXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3NpbnRheGlzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0aXBvJyB8IHRyYW5zbGF0ZX19IGRlIHt7J2RhdG8nIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtY2FtcG8gbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cImNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYW1wby5ub21icmUgXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuXHJcblxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ3dpemFyZCd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPHAtc3RlcHMgW21vZGVsXT1cIml0ZW1zXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgW2FjdGl2ZUluZGV4XT1cImFjdHVhbFwiPjwvcC1zdGVwcz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJhbnRlcmlvcigpXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1hbmdsZS1sZWZ0XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJBbnRlcmlvclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBsYWNlaG9sZGVyPVwiVG9wXCIgW2Rpc2FibGVkXT1cImFjdHVhbCA8PSAwXCIgLz5cclxuICAgICAgICAgICAgPHAtYnV0dG9uIChvbkNsaWNrKT1cInNpZ3VpZW50ZSgpXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1hbmdsZS1yaWdodFwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJhY3R1YWwgID09PSAzID8gJ1Rlcm1pbmFyJzogJ1NpZ3VpZW50ZSdcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwbGFjZWhvbGRlcj1cIlRvcFwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRJbnN0cnVjY2lvbmVzIG10LTQgbWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25vXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1iZWxsXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVuZWRvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57e21hcGFNZW5zYWplcz8uZ2V0KGFjdHVhbCl9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfYW50ZXJpb3InIHwgdHJhbnNsYXRlfX1cIiAgaWNvbj1cInBpIHBpLXBsdXNcIiAoY2xpY2spPVwiYW50ZXJpb3IoKVwiICpuZ0lmPVwiYWN0dWFsID4gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBtYi0yXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfc2lndWllbnRlJyB8IHRyYW5zbGF0ZX19XCIgIGljb249XCJwaSBwaS1wbHVzXCIgKGNsaWNrKT1cInNpZ3VpZW50ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXJpcHBsZSBwLWVsZW1lbnQgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24tc2Vjb25kYXJ5IG1iLTJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICBAaWYoYWN0dWFsID09PSAwKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snZnVlbnRlJyB8IHRyYW5zbGF0ZX19XCIgaWNvbj1cInBpIHBpLXBsdXNcIiAoY2xpY2spPVwiYnVzY2FyVGFibGEoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxwLXRhYmxlICN0YWJsYUdlbmVyYWxFbnRyYWRhIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cInRhYmxhc0Zyb21cIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgZWRpdE1vZGU9XCJyb3dcIiBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBkYXRhS2V5PVwibGxhdmVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3RhYmxhJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snYWxpYXMnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj4gPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwidGFibGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLnRhYmxhfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRUxJTUlOQVIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIHBEZWxldGVFZGl0YWJsZVJvdyBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWxpbWluYXJUYWJsYSh0YWJsYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwLXJpcHBsZSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLW91dGxpbmVkIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJwLTMgZm9udC1tZWRpdW0gZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYoYWN0dWFsID09IDEpe1xyXG5cclxuICAgICAgICA8cC10YWJsZSAjdGFibGFHZW5lcmFsRW50cmFkYSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJmb3JhbmVhc1wiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJ0cnVlXCIgZGF0YUtleT1cImxsYXZlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eycnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7JycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8dHIgW3BFZGl0YWJsZVJvd109XCJ0YWJsYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzMX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5hbGlhczJ9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEubGxhdmUubm9tYnJlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZihhY3R1YWwgPT0gMil7XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aDU+PGkgY2xhc3M9XCJnbHlwaGljb25zIGdseXBoaWNvbnMtYm9va1wiPjwvaT57eyd3aGVyZSd8IHRyYW5zbGF0ZX19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsXCIgaWQ9XCJmbG9hdC1pbnB1dFwiIHJvd3M9XCI1XCIgY29scz1cIjMwXCIgcElucHV0VGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZnVlbnRlLndoZXJlQWRpY2lvbmFsXCIgYXV0b2ZvY3VzIFthdXRvUmVzaXplXT1cInRydWVcIj4gPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snY29uc3VsdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWZsb3BweS1zYXZlXCIgbGFiZWw9XCJ7eydsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0YXJXaGVyZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYoYWN0dWFsID09IDMpe1xyXG5cclxuICAgICAgICA8cC10YWJsZSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJjYW1wb3NTZWxlY2Npb25hclwiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aFwiIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBbcGFnaW5hdG9yXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aCA+IDEwXCJcclxuICAgICAgICAgICAgW3Jvd3NdPVwiMTBcIiBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjAsIDMwXVwiIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCJcclxuICAgICAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgZWRpdE1vZGU9XCJyb3dcIlxyXG4gICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwiZmFsc2VcIiBkYXRhS2V5PVwiYWxpYXNcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiIGFsaWduRnJvemVuPVwibGVmdFwiIHBGcm96ZW5Db2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFtzdHlsZV09XCJ7J21hcmdpbi1sZWZ0JzogJzElJywnbWFyZ2luLXJpZ2h0JzonMSUnfVwiIFsobmdNb2RlbCldPVwic2VsZWNjaW9uR2VuZXJhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIiBbbmdNb2RlbF09XCJ0b2Rvc1NlbGVjY2lvbmFkb3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJhY3R1YWxpemFyU2VsZWNjaW9uKCRldmVudClcIj48L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J2NvbHVtbmEnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdGFibGE+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IGNsYXNzPVwibXItMiBcIiBbKG5nTW9kZWwpXT1cInRhYmxhLnNlbGVjY2lvbmFkb1wiIFtiaW5hcnldPVwidHJ1ZVwiIGlucHV0SWQ9XCJiaW5hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEucmVwb3J0ZUZ1ZW50ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5jb2x1bW5hLm5vbWJyZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInAtMyBmb250LW1lZGl1bSBlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3AtdGFibGU+XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbjwvcC10YWJWaWV3PlxyXG5cclxufVxyXG5cclxuPGFwcC1wb3B1cC10YWJsYXMtZnVlbnRlICNwb3B1cFRhYmxhc0Z1ZW50ZVVJXHJcbiAgICAoYXBsaWNhckRlc3Rpbm9PY3VsdGFyKT1cInNldFRhYmxhU2VsZWNjaW9uYWRhKCRldmVudClcIj48L2FwcC1wb3B1cC10YWJsYXMtZnVlbnRlPiJdfQ==
700
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxtQkFBbUIsRUFBWSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1B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d2ZBQUMsMEJBQTBCLHVHQUFDLFdBQVcseU1BQUMsWUFBWSw4QkFBQyxhQUFhLDZrQkFBQyxpQkFBaUIsMG1DQUFNLGVBQWUsMkZBQUUsZUFBZSx5SEFBZSxlQUFlLDhCQUFFLGNBQWMsOEJBQUUsV0FBVyw4d0JBQUUsV0FBVyxnckVBQUUscUJBQXFCLHFNQUFFLHNCQUFzQix3SkFBRSxZQUFZLDhCQUFFLG1CQUFtQixpVkFBZSxtQkFBbUIsc0tBQUUsa0JBQWtCOzsyRkFLcFcsc0JBQXNCO2tCQVJsQyxTQUFTOytCQUNDLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUMsY0FBYyxFQUFDLDBCQUEwQixFQUFDLFdBQVcsRUFBQyxZQUFZLEVBQUMsYUFBYSxFQUFDLGlCQUFpQixFQUFDLElBQUksRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsYUFDcFgsQ0FBQyxjQUFjLEVBQUMsbUJBQW1CLENBQUM7K1JBc0NiLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbHVtbmFGdWVudGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0NvbHVtbmFGdWVudGVNb2RlbCc7XHJcbmltcG9ydCB7IEZ1ZW50ZURhdG9Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0Z1ZW50ZURhdG8nO1xyXG5pbXBvcnQgeyBSZXBvcnRlQ29sdW1uYU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvUmVwb3J0ZUNvbHVtbmEnO1xyXG5pbXBvcnQgeyBUYWJsYUZyb21Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL1RhYmxhRnJvbU1vZGVsJztcclxuaW1wb3J0IHsgSm9pbkZyb21Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0pvaW5Gcm9tTW9kZWwnO1xyXG5pbXBvcnQgeyBSZXBvcnRlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGxhdmVGb3JhbmVhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9MbGF2ZUZvcmFuZWFNb2RlbCc7XHJcbmltcG9ydCB7IEZvcmVpbmdXcmFwZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0ZvcmVpbmdXcmFwZXJNb2RlbCc7XHJcbmltcG9ydCB7IEdlbmVyYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2lvcy9nZW5lcmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmFsTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9HZW5lcmFsTW9kZWwnO1xyXG5pbXBvcnQgeyBDb2x1bW5hV3JhcGVyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9Db2x1bW5hV3JhcGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRlc0dlbmVyYWxlcyB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9jb25zdGFudGVzL0NvbnN0YW50ZXNHZW5lcmFsZXMnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IENvbmZpcm1Qb3B1cE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybXBvcHVwJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0YXJlYU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0YXJlYSc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWNjb3JkaW9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hY2NvcmRpb24nO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgR2VuZXJhbFBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9nZW5lcmFsLnBpcGUnO1xyXG5pbXBvcnQgeyBUYWJsYUdlbmVyYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudGVzL3RhYmxhLWdlbmVyYWwvdGFibGEtZ2VuZXJhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWx0cm9HZW5lcmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnRlcy9maWx0cm8tZ2VuZXJhbC9maWx0cm8tZ2VuZXJhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNwbGl0QnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zcGxpdGJ1dHRvbic7XHJcbmltcG9ydCB7IFRhYlZpZXdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnZpZXcnO1xyXG5pbXBvcnQgeyBTdGVwc01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc3RlcHMnO1xyXG5pbXBvcnQgeyBQb3B1cFRhYmxhc0Z1ZW50ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9wb3B1cC10YWJsYXMtZnVlbnRlL3BvcHVwLXRhYmxhcy1mdWVudGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWZ1ZW50ZS1yZXBvcnRlJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtUb29sdGlwTW9kdWxlLENoZWNrYm94TW9kdWxlLFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50LFN0ZXBzTW9kdWxlLENvbW1vbk1vZHVsZSxUYWJWaWV3TW9kdWxlLFNwbGl0QnV0dG9uTW9kdWxlLE5nSWYsVHJhbnNsYXRlTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsQ29tbW9uTW9kdWxlLCBBY2NvcmRpb25Nb2R1bGUsIERyb3Bkb3duTW9kdWxlLCBGb3Jtc01vZHVsZSwgVGFibGVNb2R1bGUsIFRhYmxhR2VuZXJhbENvbXBvbmVudCwgRmlsdHJvR2VuZXJhbENvbXBvbmVudCwgQnV0dG9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBHZW5lcmFsUGlwZSwgSW5wdXRUZXh0YXJlYU1vZHVsZSwgQ29uZmlybVBvcHVwTW9kdWxlLCBCdXR0b25Nb2R1bGVdLFxyXG5cdHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlLENvbmZpcm1hdGlvblNlcnZpY2VdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9mdWVudGUtcmVwb3J0ZS5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2Z1ZW50ZS1yZXBvcnRlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRnVlbnRlUmVwb3J0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cdHB1YmxpYyBmdWVudGU6IEZ1ZW50ZURhdG9Nb2RlbCA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRwdWJsaWMgdmlzdGFWaXN1YWxpemFyOiBzdHJpbmdcclxuXHRwdWJsaWMgdGFibGFzRnJvbTogVGFibGFGcm9tTW9kZWxbXSA9IFtdOyAvLyBmcm9tIFRhYmxhRnJvbVxyXG5cdHB1YmxpYyBqb2luc0Zyb206IEpvaW5Gcm9tTW9kZWxbXSA9IFtdOyAgIC8vZnJvbSBKb2luRnJvbSBcclxuXHRwdWJsaWMgY29sdW1uYXM6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBsaXN0YUNvbHVtbmFzOiBhbnlbXSA9IFtdO1xyXG5cdHB1YmxpYyBsaXN0YUpvaW46IGFueVtdID0gW107XHJcblx0cHVibGljIGNvbDE6IHN0cmluZztcclxuXHRwdWJsaWMgY29sMjogc3RyaW5nO1xyXG5cdHB1YmxpYyBjYW1wb3M6IENvbHVtbmFGdWVudGVNb2RlbFtdID0gW107XHJcblx0cHVibGljIGNhbXBvc1NlbGVjY2lvbmFyOiBDb2x1bW5hV3JhcGVyTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBtb3N0cmFyU2VsZWNjaW9uYXI6IGJvb2xlYW47XHJcblx0cHVibGljIGNhbXBvRm9ybXVsYTogQ29sdW1uYUZ1ZW50ZU1vZGVsID0gbmV3IENvbHVtbmFGdWVudGVNb2RlbCgpO1xyXG5cdHB1YmxpYyBhY3R1YWw6IG51bWJlcjtcclxuXHRwdWJsaWMgdGFiUHJpbmNpcGFsOiBudW1iZXI7XHJcblx0cHVibGljIGJhc2ljbzogYm9vbGVhbjtcclxuXHRwdWJsaWMgc2VsZWNjaW9uR2VuZXJhbDogYm9vbGVhbjtcclxuXHRwdWJsaWMgZm9yYW5lYXM6IGFueVtdID0gW107XHJcblx0cHVibGljIGRlc2NyaXBjaW9uOiBzdHJpbmc7XHJcblx0cHVibGljIHF1ZXJ5OiBzdHJpbmc7XHJcblx0cHVibGljIHBhZ2luYWRvcjogRnVlbnRlRGF0b01vZGVsW10gPSBbXTtcclxuXHRwdWJsaWMgZmlsdHJvOiBGdWVudGVEYXRvTW9kZWwgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0cHVibGljIHBhZ2luYXRvciA9IHtcclxuXHRcdHJvd3M6IDEwLFxyXG5cdFx0dG90YWxSZWNvcmRzOiAwLFxyXG5cdH07XHJcblx0cHVibGljIGNvbHVtbnMgOiBhbnlbXSA9IFtdO1xyXG4gIFx0cHVibGljIGZpbHRlcnMgOiBhbnlbXSA9IFtdO1xyXG5cdHB1YmxpYyBsb2FkaW5nIDogYm9vbGVhbjtcclxuXHRwdWJsaWMgbWVudTogTWVudUl0ZW1bXSA9IFtdO1xyXG5cdHB1YmxpYyBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cdHB1YmxpYyBtYXBhTWVuc2FqZXM6IE1hcDxudW1iZXIsc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLHN0cmluZz4oKTtcclxuXHRAVmlld0NoaWxkKCdwb3B1cFRhYmxhc0Z1ZW50ZVVJJykgcG9wdXBUYWJsYXNGdWVudGVVSTogUG9wdXBUYWJsYXNGdWVudGVDb21wb25lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLHByaXZhdGUgbm90aWZpY2F0aW9uQnVzU2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIHJlcG9ydGVzU3ZjOiBSZXBvcnRlc1NlcnZpY2UsIHByaXZhdGUgZ2VuZXJhbFN2YzogR2VuZXJhbFNlcnZpY2UsIHByaXZhdGUgdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG5cdFx0cHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSkgeyB9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5saXN0YUNvbHVtbmFzID0gW107XHJcblx0XHR0aGlzLmNhbXBvcyA9IFtdO1xyXG5cdFx0dGhpcy5saXN0YUpvaW4gPSBbXTtcclxuXHRcdHRoaXMuY29sdW1uYXMgPSBbXTtcclxuXHRcdHRoaXMudGFibGFzRnJvbSA9IFtdO1xyXG5cdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hciA9IFtdO1xyXG5cdFx0dGhpcy5qb2luc0Zyb20gPSBbXTtcclxuXHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJyB9XSk7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBbXHJcblx0XHQgIHtcclxuXHRcdFx0ZmllbGQ6ICAnZGVzY3JpcGNpb24nLFxyXG5cdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkZXNjcmlwY2lvbicpLFxyXG5cdFx0XHR3aWR0aDogMTAwLFxyXG5cdFx0ICB9LFxyXG5cdFx0XTtcclxuXHRcdHRoaXMuZmlsdGVycyA9IFtcclxuXHRcdCAge1xyXG5cdFx0XHRmaWVsZDogJ2Rlc2NyaXBjaW9uJyxcclxuXHRcdFx0aGVhZGVyOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZGVzY3JpcGNpb24nKSxcclxuXHRcdFx0bWF0Y2hNb2RlOiAnY29udGFpbnMnLFxyXG5cdFx0ICB9XHJcblx0XHRdO1xyXG5cdFx0dGhpcy5pbml0U3RlcCgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIGxvYWQoZXZlbnQpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMubG9hZGluZyA9dHJ1ZTtcclxuXHRcdFx0dGhpcy5jb2xvY2FyRmlsdHJvKCk7XHJcblx0XHRcdHRoaXMuZmlsdHJvLnBhZ2luYWNpb25SZWdpc3Ryb0luaWNpYWwgPSBldmVudD8uZmlyc3QgIT0gbnVsbCA/IGV2ZW50Py5maXJzdCA6IDAsXHJcblx0XHRcdFx0dGhpcy5maWx0cm8ucGFnaW5hY2lvblJlZ2lzdHJvRmluYWwgPSBldmVudD8ucm93cyAhPSBudWxsID8gZXZlbnQ/LnJvd3MgOiAxMCxcclxuXHRcdFx0XHR0aGlzLnBhZ2luYWRvciA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY29uc3VsdGFyRnVlbnRlRGF0byh0aGlzLmZpbHRybykudG9Qcm9taXNlKCk7XHJcblx0XHRcdHRoaXMucGFnaW5hdG9yLnRvdGFsUmVjb3JkcyA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY2FudGlkYWRGdWVudGVEYXRvKHRoaXMuZmlsdHJvKS50b1Byb21pc2UoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY29sb2NhckZpbHRybygpIHtcclxuXHRcdHRoaXMuZmlsdHJvLm9yaWdlbiA9IChcIkZcIik7XHJcblx0XHR0aGlzLmZpbHRyby5kZXNjcmlwY2lvbiA9IChudWxsKTtcclxuXHRcdGlmICh0aGlzLnV0aWxzU2VydmljZS5pc05vdEJsYW5rKHRoaXMuZGVzY3JpcGNpb24pKSB7XHJcblx0XHRcdHRoaXMuZmlsdHJvLmRlc2NyaXBjaW9uID0gKENvbnN0YW50ZXNHZW5lcmFsZXMuUE9SQ0VOVEFKRSArIHRoaXMuZGVzY3JpcGNpb24gKyBDb25zdGFudGVzR2VuZXJhbGVzLlBPUkNFTlRBSkUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdHB1YmxpYyBsaW1waWFyQ2FtcG9zKCkge1xyXG5cdFx0dGhpcy5kZXNjcmlwY2lvbiA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgc2lndWllbnRlKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHRoaXMudmFsaWRhcldpemFyZCgpKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuYWN0dWFsIDwgMykge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWN0dWFsID09IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy50YWJsYXNGcm9tLmxlbmd0aCA9PSAwKSB7IC8vIE5vIHNlbGVjY2lvbm8gbmluZ3VuYSB0YWJsYVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkRlYmUgc2VsZWNjaW9uYXIgYWwgbWVub3MgdW4gb2JqZXRvLlwiKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy50YWJsYXNGcm9tLmxlbmd0aCA9PSAxKSB7IC8vIFNvbG8gc2VsZWNjaW9ubyB1bmEsIHBvciBlc28gbm8gaGF5IHF1ZSBnZW5lcmFyIGpvaW5zLlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuYWN0dWFsKys7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG5vbWJyZXNUYWJsYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICghbm9tYnJlc1RhYmxhcy5pbmNsdWRlcyh0YWJsYS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bm9tYnJlc1RhYmxhcy5wdXNoKHRhYmxhLnRhYmxhKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdC8vTGlzdDxMbGF2ZUZvcmFuZWE+IFxyXG5cdFx0XHRcdFx0XHRcdGxldCBsbGF2ZXM6IExsYXZlRm9yYW5lYU1vZGVsW10gPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmdldExsYXZlcyhub21icmVzVGFibGFzKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGFzRnJvbS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9yYW5lYSBvZiBsbGF2ZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9yYW5lYS50YWJsYTEgPT0gKHRoaXMudGFibGFzRnJvbVtpXS50YWJsYSkgJiYgZm9yYW5lYS50YWJsYTIgPT0gKHRoaXMudGFibGFzRnJvbVtqXS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBudWV2bzogRm9yZWluZ1dyYXBlck1vZGVsID0gbmV3IEZvcmVpbmdXcmFwZXJNb2RlbCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVldm8uYWxpYXMxID0gKHRoaXMudGFibGFzRnJvbVtpXS5hbGlhcyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWV2by5hbGlhczIgPSAodGhpcy50YWJsYXNGcm9tW2pdLmFsaWFzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG51ZXZvLmxsYXZlID0gKGZvcmFuZWEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JhbmVhcy5wdXNoKG51ZXZvKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBDYXJnbyBsYXMgY29sdW1uYXMgcGFyYSBsb3Mgc2lndWllbnRlcyBwcm9jZXNvcy5cclxuXHJcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5saXN0YUNvbHVtbmFzID0gW107XHJcblx0XHRcdFx0XHRcdHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIgPSBbXTtcclxuXHJcblx0XHRcdFx0XHRcdGZvciAobGV0IGZyb20gb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly9SZXBvcnRlQ29sdW1uYURUTyBcclxuXHRcdFx0XHRcdFx0XHRsZXQgdGEgPSBuZXcgUmVwb3J0ZUNvbHVtbmFNb2RlbCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRhLnJlcG9ydGVGdWVudGUgPSAoZnJvbS50YWJsYSk7XHJcblx0XHRcdFx0XHRcdFx0Ly9MaXN0PFJlcG9ydGVDb2x1bW5hRFRPPiBcclxuXHRcdFx0XHRcdFx0XHRsZXQgbnVldmFzOiBSZXBvcnRlQ29sdW1uYU1vZGVsW10gPSBhd2FpdCB0aGlzLmdlbmVyYWxTdmMucXVlcnlGb3JMaXN0KG5ldyBHZW5lcmFsTW9kZWwoJ1JlcG9ydGVDb2x1bW5hRFRPJywgJ1JlcG9ydGVzLmNvbnN1bHRhckNvbHVtbmFzJywgZmFsc2UsIHRhKSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jYXJnYXJMaXN0YXNDb2x1bW5hcyhudWV2YXMsIGZyb20uYWxpYXMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5hY3R1YWwrKztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy50ZXJtaW5hclBhc29zKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNhcmdhckxpc3Rhc0NvbHVtbmFzKG51ZXZhczogUmVwb3J0ZUNvbHVtbmFNb2RlbFtdLCBhbGlhczogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgbnVldmFzKSB7XHJcblx0XHRcdGNvbC5yZXBvcnRlRnVlbnRlID0gKGFsaWFzKTtcclxuXHRcdFx0dGhpcy5jb2x1bW5hcy5wdXNoKGNvbCk7XHJcblx0XHRcdHRoaXMubGlzdGFDb2x1bW5hcy5wdXNoKHsgdmFsdWU6IGNvbC5yZXBvcnRlRnVlbnRlICsgJy4nICsgY29sLm5vbWJyZSwgbGFiZWw6IGNvbC5yZXBvcnRlRnVlbnRlICsgJy4nICsgY29sLm5vbWJyZSB9KTtcclxuXHRcdFx0bGV0IGNhbXBvID0gbmV3IENvbHVtbmFXcmFwZXJNb2RlbCgpO1xyXG5cdFx0XHRjYW1wby5jb2x1bW5hID0gY29sO1xyXG5cdFx0XHRjYW1wby5hbGlhcyA9IGNvbC5ub21icmU7XHJcblx0XHRcdHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIucHVzaChjYW1wbyk7XHJcblx0XHR9XHJcblx0XHRjb25zb2xlLmxvZygnY2FtcG9zU2VsZWNjaW9uYXInLHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpO1xyXG5cdFx0XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdGVybWluYXJQYXNvcygpIHtcclxuXHRcdGxldCBjYW1wb3NTcWwgPSBcIlwiO1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0aWYgKGNvbC5zZWxlY2Npb25hZG8pIHtcclxuXHRcdFx0XHRjYW1wb3NTcWwgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIixcIikgKyBjb2wuY29sdW1uYS5ub21icmUgKyBcIiBhcyBcIiArIGNvbC5hbGlhcztcclxuXHRcdFx0XHRpKys7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmZ1ZW50ZS53aGVyZUpvaW4gPSAodGhpcy5nZW5lcmFyU3FsSm9pbigpKTtcclxuXHRcdHRoaXMuZnVlbnRlLmZyb21TcWwgPSAodGhpcy5nZW5lcmFyU3FsRnJvbSgpKTtcclxuXHRcdGxldCB3aGVyZSA9IFwiXCI7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlSm9pbjogYm9vbGVhbiA9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiA9PSBudWxsIHx8IFwiXCIgPT0gKHRoaXMuZnVlbnRlLndoZXJlSm9pbik7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsOiBib29sZWFuID0gdGhpcy5mdWVudGUud2hlcmVBZGljaW9uYWwgPT0gbnVsbCB8fCBcIlwiID09ICh0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCk7XHJcblx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gfHwgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHR3aGVyZSA9IFwiIFxcbldIRVJFIFwiO1xyXG5cdFx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gJiYgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiArIFwiIEFORCBcXG4oXCIgKyB0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCArIFwiKVwiO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCFlc3RhQmxhbmNvV2hlcmVKb2luKSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVKb2luO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRjb25zb2xlLmxvZygnd2hlcmUnLHdoZXJlKTtcclxuXHRcdFxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IHNxbCA9IFwiU0VMRUNUIFxcblwiICsgY2FtcG9zU3FsICsgXCIgXFxuRlJPTSBcXG5cIiArIHRoaXMuZnVlbnRlLmZyb21TcWwgKyB3aGVyZTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy52YWxpZGFyUXVlcnkoc3FsKS50b1Byb21pc2UoKTtcclxuXHRcdFx0dGhpcy5mdWVudGUucXVlcnkgPSAoc3FsKTtcclxuXHRcdFx0dGhpcy5xdWVyeSA9IHNxbDtcclxuXHRcdFx0dGhpcy50YWJQcmluY2lwYWwgPSAwO1xyXG5cdFx0XHR0aGlzLmNvbnN0cnVpckNvbHVtbmFzKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgYWRpY2lvbmFyRm9yYW5lYShldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdC8vRm9yZWluZ1dyYXBlciBcclxuXHRcdFx0bGV0IGZvcmFuZWE6IEZvcmVpbmdXcmFwZXJNb2RlbCA9IGV2ZW50by5kYXRhO1xyXG5cdFx0XHRmb3IgKGxldCByZWwgb2YgZm9yYW5lYS5sbGF2ZS5yZWxhY2lvbmVzKSB7XHJcblx0XHRcdFx0bGV0IHBhciA9IHJlbC5zcGxpdChcIjpcIik7XHJcblx0XHRcdFx0bGV0IGpvaW4gPSBuZXcgSm9pbkZyb21Nb2RlbCgpO1xyXG5cdFx0XHRcdGpvaW4uY29sdW1uYTEgPSAoZm9yYW5lYS5hbGlhczEgKyBcIi5cIiArIHBhclswXSk7XHJcblx0XHRcdFx0am9pbi5jb2x1bW5hMiA9IChmb3JhbmVhLmFsaWFzMiArIFwiLlwiICsgcGFyWzFdKTtcclxuXHRcdFx0XHR0aGlzLmpvaW5zRnJvbS5wdXNoKGpvaW4pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgZWxpbWluYXIoKSB7XHJcblx0XHR0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcblx0XHRcdHRhcmdldDogZXZlbnQudGFyZ2V0LFxyXG5cdFx0XHRtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbWVuc2FqZV9hbGVydGEnKSxcclxuXHRcdFx0aWNvbjogJ2NvbmZpcm1hcicsXHJcblx0XHRcdGFjY2VwdDogKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0UmVzcHVlc3RhKHRydWUpXHJcblx0XHRcdH0sXHJcblx0XHRcdHJlamVjdDogKCkgPT4ge1xyXG5cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgc2V0UmVzcHVlc3RhKHJlc3B1ZXN0YTogYm9vbGVhbikge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHJlc3B1ZXN0YSkge1xyXG5cdFx0XHRcdHRoaXMucmVwb3J0ZXNTdmMuZWxpbWluYXJGdWVudGVEYXRvc0Nvbkhpam9zKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR0aGlzLmZ1ZW50ZSA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTGEgZnVlbnRlIGhhIHNpZG8gZWxpbWluYWRhLlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFudGVyaW9yKCkge1xyXG5cdFx0aWYgKHRoaXMuYWN0dWFsID4gMClcclxuXHRcdFx0dGhpcy5hY3R1YWwtLTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyB2YWxpZGFyUXVlcnkoKSB7XHJcblx0XHR0cnkge1xyXG5cclxuXHRcdFx0aWYgKHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSkge1xyXG5cdFx0XHRcdHRoaXMucmVwb3J0ZXNTdmMudmFsaWRhclF1ZXJ5KHRoaXMucXVlcnkpO1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkVsIHF1ZXJ5IGVzdGEgY29ycmVjdG8uXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdC8vVmFsaWRhZG9yLmFkaWNpb25hck1lbnNhamUoXCJmdWVudGVGb3JtOnRhYjpxdWVyeVwiLCBlLmdldE1lc3NhZ2UoKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWRpY2lvbmFySm9pbigpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbDEgIT0gbnVsbCAmJiB0aGlzLmNvbDIgIT0gbnVsbCkge1xyXG5cdFx0XHRcdC8vIFRPRE86IEZhbHRhIHZhbGlkYXIgZWwgdGlwb1xyXG5cdFx0XHRcdGxldCBudWV2byA9IG5ldyBKb2luRnJvbU1vZGVsKCk7XHJcblx0XHRcdFx0bnVldm8uY29sdW1uYTEgPSAodGhpcy5jb2wxKTtcclxuXHRcdFx0XHRudWV2by5jb2x1bW5hMiA9ICh0aGlzLmNvbDIpO1xyXG5cdFx0XHRcdHRoaXMuam9pbnNGcm9tLnB1c2gobnVldm8pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93V2FybmluZyhcIkRlYmUgc2VsZWNjaW9uYXIgZG9zIGNhbXBvc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGVsaW1pbmFySm9pbihhZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9sZXQgIGpvaW4gPSAoSm9pbkZyb20pICgoVUlQYXJhbWV0ZXIpIGFlLmdldENvbXBvbmVudCgpLmZpbmRDb21wb25lbnQoXCJqb2luXCIpKS5nZXRWYWx1ZSgpO1xyXG5cdFx0XHR0aGlzLmpvaW5zRnJvbS5maWx0ZXIoKGRhdGEpID0+IGRhdGEgPT09IGFlLmRhdGEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGVsaW1pbmFyVGFibGEoYWUpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdC8vVGFibGFGcm9tIHRhYmxhID0gKFRhYmxhRnJvbSkgKChVSVBhcmFtZXRlcikgYWUuZ2V0Q29tcG9uZW50KCkuZmluZENvbXBvbmVudChcInRhYmxhXCIpKS5nZXRWYWx1ZSgpO1xyXG5cdFx0XHR0aGlzLnRhYmxhc0Zyb20uZmlsdGVyKChkYXRhKSA9PiBkYXRhID09PSBhZSk7XHJcblx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93V2FybmluZyhcIkZhbHRhIGVsaW1pbmFyIGxhcyBjb2x1bW5hcyBkZSBsYSB0YWJsYSA/Pz9cIik7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYnVzY2FyVGFibGEoKSB7XHJcblx0XHR0aGlzLnBvcHVwVGFibGFzRnVlbnRlVUkuYnVzY2FyVGFibGEoXCJmdWVudGVVSS50YWJsYVNlbGVjY2lvbmFkYVwiKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRUYWJsYVNlbGVjY2lvbmFkYSh0YWJsYVNlbGVjY2lvbmFkYTogc3RyaW5nKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgdGFibGFzID0gW107XHJcblx0XHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRcdGlmICghdGFibGFzLmluY2x1ZGVzKHRhYmxhLnRhYmxhKSkge1xyXG5cdFx0XHRcdFx0dGFibGFzLnB1c2godGFibGEudGFibGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmNhcmdhclRhYmxhRW5MaXN0YSh0YWJsYVNlbGVjY2lvbmFkYSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNhcmdhclRhYmxhRW5MaXN0YSh0YWJsYTogc3RyaW5nKSB7XHJcblx0XHRsZXQgcGFyID0gdGFibGEuc3BsaXQoXCJfXCIpO1xyXG5cdFx0bGV0IGFsaWFzID0gcGFyWzBdO1xyXG5cdFx0bGV0IGkgPSAxO1xyXG5cdFx0bGV0IHRhYmxhVGVtcCA9IG5ldyBUYWJsYUZyb21Nb2RlbCgpXHJcblx0XHR0YWJsYVRlbXAuYWxpYXMgPSBhbGlhcztcclxuXHRcdHdoaWxlICh0aGlzLnRhYmxhc0Zyb20uaW5jbHVkZXModGFibGFUZW1wKSkge1xyXG5cdFx0XHRhbGlhcyA9IHRhYmxhICsgKGkrKyk7XHJcblx0XHR9XHJcblx0XHRsZXQgdGVtID0gbmV3IFRhYmxhRnJvbU1vZGVsKCk7XHJcblx0XHR0ZW0udGFibGEgPSB0YWJsYTtcclxuXHRcdHRlbS5hbGlhcyA9IGFsaWFzO1xyXG5cdFx0dGhpcy50YWJsYXNGcm9tLnB1c2godGVtKTtcclxuXHRcdHJldHVybiBhbGlhcztcclxuXHR9XHJcblxyXG5cclxuXHJcblx0cHVibGljIGNhbWJpb0pvaW4oY2UpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMubGlzdGFKb2luID0gW107XHJcblx0XHRcdGxldCBudWV2byA9IGNlLnZhbHVlO1xyXG5cdFx0XHRpZiAobnVldm8gIT0gbnVsbCkge1xyXG5cdFx0XHRcdC8vUmVwb3J0ZUNvbHVtbmFEVE8gXHJcblx0XHRcdFx0bGV0IGFjdDogUmVwb3J0ZUNvbHVtbmFNb2RlbCA9IG51bGw7XHJcblx0XHRcdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY29sdW1uYXMpIHtcclxuXHRcdFx0XHRcdGlmIChudWV2by5lcXVhbHMoY29sLnJlcG9ydGVGdWVudGUgKyBcIi5cIiArIGNvbC5ub21icmUpKSB7XHJcblx0XHRcdFx0XHRcdGFjdCA9IGNvbDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNvbHVtbmFzKSB7XHJcblx0XHRcdFx0XHRpZiAoIWNvbC5yZXBvcnRlRnVlbnRlLnN0YXJ0c1dpdGgoYWN0LnJlcG9ydGVGdWVudGUpICYmIGNvbC50aXBvRGF0byA9PSAoYWN0LnRpcG9EYXRvKSAmJiBjb2wub3JkZW4gPT0gKGFjdC5vcmRlbikpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbCA9IGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RhSm9pbi5wdXNoKHsgdmFsdWU6IHZhbCwga2V5OiB2YWwgfSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWRpdGFyQ2FtcG8oZXZlbnRvKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgY29sOiBDb2x1bW5hRnVlbnRlTW9kZWwgPSBldmVudG8uZGF0YTtcclxuXHRcdFx0dGhpcy5jYW1wb0Zvcm11bGEgPSBjb2w7XHJcblx0XHRcdGxldCB2YXJzID0gW107XHJcblx0XHRcdGZvciAobGV0IGNhbXBvIG9mIHRoaXMuY2FtcG9zKSB7XHJcblx0XHRcdFx0bGV0IHZhcjE6IGFueTtcclxuXHRcdFx0XHR2YXIxLm5vbWJyZSA9IChjYW1wby5ub21icmUpO1xyXG5cdFx0XHRcdHZhcjEudGlwbyA9IChjYW1wby50aXBvRGF0byk7XHJcblx0XHRcdFx0dmFycy5wdXNoKHZhcjEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vZ2V0QmVhbihFZGl0b3JGb3JtdWxhVUkuY2xhc3MpLmVkaXRhcihjb2wuZ2V0U2ludGF4aXMoKSwgXCJmdWVudGVVSS5mb3JtdWxhXCIsIHZhcnMpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGVkaXRhcldoZXJlKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IHZhcnMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY29sdW1uYXMpIHtcclxuXHRcdFx0XHQvL1ZhcmlhYmxlRm9ybXVsYSBcclxuXHRcdFx0XHRsZXQgdmFyMTtcclxuXHRcdFx0XHR2YXIxLm5vbWJyZSA9IChjb2wucmVwb3J0ZUZ1ZW50ZSArIFwiLlwiICsgY29sLm5vbWJyZSk7XHJcblx0XHRcdFx0dmFyMS50aXBvKGNvbC50aXBvRGF0byk7XHJcblx0XHRcdFx0dmFycy5wdXNoKHZhcjEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vZ2V0QmVhbihFZGl0b3JGb3JtdWxhVUkuY2xhc3MpLmVkaXRhcihmdWVudGUuZ2V0V2hlcmVBZGljaW9uYWwoKSwgXCJmdWVudGVVSS5mdWVudGUud2hlcmVBZGljaW9uYWxcIiwgdmFycyk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0Rm9ybXVsYShmb3JtdWxhKSB7XHJcblx0XHRpZiAodGhpcy5jYW1wb0Zvcm11bGEgIT0gbnVsbCkge1xyXG5cdFx0XHR0aGlzLmNhbXBvRm9ybXVsYS5zaW50YXhpcyA9IChmb3JtdWxhKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuY2FtcG9Gb3JtdWxhID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZGljaW9uYXJDb2x1bW5hcygpIHtcclxuXHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNhbXBvc1NlbGVjY2lvbmFyKSB7XHJcblx0XHRcdGNvbC5zZWxlY2Npb25hZG8gPSAoZmFsc2UpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5tb3N0cmFyU2VsZWNjaW9uYXIgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFncmVnYXJTZWxlY2Npb25hZG9zKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0XHRpZiAoY29sLnNlbGVjY2lvbmFkbykge1xyXG5cdFx0XHRcdFx0Ly9Db2x1bW5hRnVlbnRlRFRPIFxyXG5cdFx0XHRcdFx0bGV0IGNhbXBvID0gbmV3IENvbHVtbmFGdWVudGVNb2RlbCgpO1xyXG5cdFx0XHRcdFx0Y2FtcG8uZnVlbnRlRGF0byA9ICh0aGlzLmZ1ZW50ZS5sbGF2ZSk7XHJcblx0XHRcdFx0XHRjYW1wby5ub21icmUgPSAoY29sLmNvbHVtbmEubm9tYnJlKTtcclxuXHRcdFx0XHRcdGNhbXBvLnNpbnRheGlzID0gKGNvbC5jb2x1bW5hLm5vbWJyZSk7XHJcblx0XHRcdFx0XHR0aGlzLmNhbXBvcy5wdXNoKGNhbXBvKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5vY3VsdGFyU2VsZWNjaW9uYXIoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBvY3VsdGFyU2VsZWNjaW9uYXIoKSB7XHJcblx0XHR0aGlzLm1vc3RyYXJTZWxlY2Npb25hciA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHZlckRldGFsbGUoZXZlbnRvKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLnZpc3RhVmlzdWFsaXphciA9ICdtYW50ZW5pbWllbnRvJztcclxuXHRcdFx0bGV0IGZ1ZW50ZURhdG9EVE8gPSBldmVudG87XHJcblx0XHRcdHRoaXMuZnVlbnRlID0gbmV3IEZ1ZW50ZURhdG9Nb2RlbCgpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZS5sbGF2ZSA9IChmdWVudGVEYXRvRFRPLmxsYXZlKTtcclxuXHRcdFx0dGhpcy5mdWVudGUgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNvbnN1bHRhclVuaWNhRnVlbnRlRGF0byh0aGlzLmZ1ZW50ZSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdGlmICh0aGlzLmZ1ZW50ZS5xdWVyeTIgIT0gbnVsbCkge1xyXG5cdFx0XHRcdHRoaXMucXVlcnkgPSB0aGlzLmZ1ZW50ZS5xdWVyeSArIHRoaXMuZnVlbnRlLnF1ZXJ5MjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5ID0gdGhpcy5mdWVudGUucXVlcnk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9Db2x1bW5hRnVlbnRlRFRPIFxyXG5cdFx0XHRsZXQgY29sID0gbmV3IENvbHVtbmFGdWVudGVNb2RlbCgpO1xyXG5cdFx0XHRjb2wuZnVlbnRlRGF0byA9ICh0aGlzLmZ1ZW50ZS5sbGF2ZSk7XHJcblx0XHRcdHRoaXMuY2FtcG9zID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5jb25zdWx0YXJDb2x1bW5hc0Z1ZW50ZShjb2wpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJywgfSwge2xhYmVsOiAnTWFudGVuaW1pZW50byBGdWVudGUnfV0pO1xyXG5cdFx0XHR0aGlzLmNhcmdhc09wY2lvbmVzKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgbnVldm8oKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLnZpc3RhVmlzdWFsaXphciA9ICdtYW50ZW5pbWllbnRvJztcclxuXHRcdFx0dGhpcy5mdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0XHRcdHRoaXMuZnVlbnRlLm9yaWdlbiA9IChcIkZcIik7XHJcblx0XHRcdHRoaXMuY2FtcG9zID0gbnVsbDtcclxuXHRcdFx0dGhpcy5xdWVyeSA9IG51bGw7XHJcblx0XHRcdHRoaXMudGFiUHJpbmNpcGFsID0gMDtcclxuXHRcdFx0dGhpcy5hY3R1YWwgPSAwO1xyXG5cdFx0XHR0aGlzLm1lbnVTZXJ2aWNlLnNldEJyZWFkY3J1bWIoW3sgbGFiZWw6ICdGdWVudGUgUmVwb3J0ZScsIH0sIHtsYWJlbDogJ01hbnRlbmltaWVudG8gRnVlbnRlJ31dKTtcclxuXHRcdFx0dGhpcy5jYXJnYXNPcGNpb25lcygpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2FyZ2FzT3BjaW9uZXMoKXtcclxuXHRcdHRoaXMubWVudT0gW3tsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpbmtfZWxpbWluYXInKSwgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1iaW4nLCB2aXNpYmxlOiB0aGlzLmZ1ZW50ZS5sbGF2ZSAhPSBudWxsLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLmVsaW1pbmFyKCl9fSxcclxuXHRcdHtsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpbmtfdmFsaWRhcicpLCBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLXByaW50JywgY29tbWFuZDogKGV2ZW50KSA9PiB7dGhpcy52YWxpZGFyUXVlcnkoKX19LFxyXG5cdFx0e2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua19nZW5lcmFyJyksIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtYmVsbCcsdmlzaWJsZTogdGhpcy5mdWVudGUubGxhdmUgIT0gbnVsbCwgY29tbWFuZDogKGV2ZW50KSA9PiB7dGhpcy5jb25zdHJ1aXJDb2x1bW5hcygpfX0sXHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHRyZWdyZXNhcigpe1xyXG5cdFx0dGhpcy52aXN0YVZpc3VhbGl6YXIgPSBudWxsO1xyXG5cdFx0dGhpcy5uZ09uSW5pdCgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB2YWxpZGFyKCk6IGJvb2xlYW4ge1xyXG5cdFx0bGV0IHJlcyA9IHRydWU7XHJcblx0XHRyZXMgPSByZXMgJiYgdGhpcy51dGlsc1NlcnZpY2UudmFsaWRhckNhbXBvT2JsaWdhdG9yaW8odGhpcy5mdWVudGUuZGVzY3JpcGNpb24pO1xyXG5cdFx0cmVzID0gcmVzICYmICh0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyVGV4dG9TUUwodGhpcy5xdWVyeSwgdHJ1ZSwgdHJ1ZSwgODAwMCwgdHJ1ZSkgPT0gbnVsbCk7XHJcblx0XHRyZXR1cm4gcmVzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVnaXN0cmEvYWN0dWFsaXphIGxhIGluZm9ybWFjaW9uIGdlbmVyYWwgZGUgbGEgZnVlbnRlIGRlIGRhdG9zXHJcblx0ICovXHJcblx0cHVibGljIGFzeW5jIGd1YXJkYXIoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy52YWxpZGFyKCkpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5xdWVyeS5sZW5ndGggPiA0MDAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9ICh0aGlzLnF1ZXJ5LnN1YnN0cmluZygwLCAzOTk5KSk7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeTIgPSAodGhpcy5xdWVyeS5zdWJzdHJpbmcoMzk5OSwgdGhpcy5xdWVyeS5sZW5ndGgpKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkgPSAodGhpcy5xdWVyeSk7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeTIgPSAobnVsbCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5mdWVudGUubGxhdmUgPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUubGxhdmUgPSAodGhpcy51dGlsc1NlcnZpY2UuZ2VuZXJhckxsYXZlKCkpO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5pbnNlcnRhckZ1ZW50ZURhdG8odGhpcy5mdWVudGUpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmFjdHVhbGl6YXJGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTG9zIGNhbWJpb3MgaGFuIHNpZG8gZ3VhcmRhZG9zXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fS8vZ3VhcmRhclxyXG5cclxuXHQvKipcclxuXHQgKiBSZWdpc3RyYS9hY3R1YWxpemEgbGFzIGNvbHVtbmFzIGdlbmVyYWRvcyBwYXJhIGxhIGZ1ZW50ZSBkZSBkYXRvcyBjb21vIHJlZ2lzdHJvcyBkZSB0aXBvICdDb2x1bW5hRnVlbnRlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhc3luYyBndWFyZGFyQ2FtcG9zKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHRoaXMuZnVlbnRlLmxsYXZlID09IG51bGwpIHtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJQb3IgZmF2b3IgZGlsaWdlbmNpZSBwcmltZXJvIGxvcyBkYXRvcyBkZSBsYSBmdWVudGVcIik7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXJDYW1wb3MoKSkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuYWN0dWFsaXphckNvbHVtbmFzRnVlbnRlKHRoaXMuZnVlbnRlLCB0aGlzLmNhbXBvcykudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiU2UgaGFuIGd1YXJkYWRvIGxvcyBjYW1wb3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9Ly9ndWFyZGFyQ2FtcG9zXHJcblxyXG5cdC8qKlxyXG5cdCAqIFZlcmlmaWNhIHF1ZSBsb3MgdmFsb3JlcyBhc29jaWFkb3MgYSBsb3MgY2FtcG9zIHBhcmEgbGEgY3JlYWNpb24gZGUgbGFzIGNvbHVtbmFzIGRlIGxhIGZ1ZW50ZSBzZWFuIHbDoWxpZG9zXHJcblx0ICogQHJldHVybiBmYWxzZSBlbiBjYXNvIGRlIHF1ZSBsb3MgdmFsb3JlcyBhc2lnbmFkb3MgYSBsb3MgY2FtcG9zIHNlYW4gbnVsb3MgbyBubyBzZWFuIHBhbGFicmFzIHbDoWxpZGFzIGRlIGFjdWVyZG8gXHJcblx0ICogY29uIGxhcyBjb25kaWNpb25lcyBkYWRhcyBwb3IgVmFsaWRhZG9yVXRpbC52YWxpZGFyUGFsYWJyYSgpKSxcclxuXHQgKiBlbiBjYXNvIGNvbnRyYXJpbyByZXRvcm5hIHRydWVcclxuXHQgKi9cclxuXHRwcml2YXRlIHZhbGlkYXJDYW1wb3MoKSB7XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3MpIHtcclxuXHRcdFx0aWYgKGNvbC5ub21icmUgPT0gbnVsbCB8fCAhdGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclBhbGFicmEoY29sLm5vbWJyZSkpIHtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJOb21icmUgbm8gdmFsaWRvIChcIiArIGNvbC5ub21icmUgKyBcIilcIik7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1eWUgbGFzIGNvbHVtbmFzIGRlIGxhIGZ1ZW50ZSBkZSBkYXRvcywgY29uIGJhc2UgZW4gbG9zIGNhbXBvcyBvYnRlbmlkb3MgXHJcblx0ICogZGUgbGEgY29uc3VsdGEgU1FMIGFzb2NpYWRhXHJcblx0ICovXHJcblx0cHVibGljIGFzeW5jIGNvbnN0cnVpckNvbHVtbmFzKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmdldENvbHVtbmFzU3FsKHRoaXMucXVlcnkpLnRvUHJvbWlzZSgpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH0vL2NvbnN0cnVpckNvbHVtbmFzXHJcblxyXG5cclxuXHJcblx0cHJpdmF0ZSB2YWxpZGFyV2l6YXJkKCkge1xyXG5cdFx0bGV0IGFsaWFzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgdGFibGEgb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdGlmIChhbGlhcy5pbmNsdWRlcyh0YWJsYS5hbGlhcykpIHtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJObyBzZSBwdWVkZSByZXBldGlyIGVsIGFsaWFzIGRlIGxhcyB0YWJsYXMuXCIpO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhbGlhcy5wdXNoKHRhYmxhLmFsaWFzKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0YWxpYXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNhbXBvc1NlbGVjY2lvbmFyKSB7XHJcblx0XHRcdGlmIChjb2wuc2VsZWNjaW9uYWRvKSB7XHJcblx0XHRcdFx0aWYgKGFsaWFzLmluY2x1ZGVzKGNvbC5hbGlhcykpIHtcclxuXHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIk5vIHNlIHB1ZWRlIHJlcGV0aXIgZWwgYWxpYXMgZGUgbGFzIGNvbHVtbmFzLlwiKTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YWxpYXMucHVzaChjb2wuYWxpYXMpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZW5lcmFyU3FsRnJvbSgpIHtcclxuXHRcdGxldCByZXMgPSBcIlwiO1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0Zm9yIChsZXQgdGFibGEgb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdHJlcyArPSAoaSA9PSAwID8gXCJcIiA6IFwiLFwiKSArIHRhYmxhLnRhYmxhICsgXCIgXCIgKyB0YWJsYS5hbGlhcztcclxuXHRcdFx0aSsrO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlcztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2VuZXJhclNxbEpvaW4oKSB7XHJcblx0XHRsZXQgcmVzID0gXCJcIjtcclxuXHRcdGxldCBpID0gMDtcclxuXHRcdGZvciAobGV0IGpvaW4gb2YgdGhpcy5qb2luc0Zyb20pIHtcclxuXHRcdFx0cmVzICs9IChpID09IDAgPyBcIlwiIDogXCIgQU5EIFwiKSArIGpvaW4uY29sdW1uYTEgKyBcIiA9IFwiICsgam9pbi5jb2x1bW5hMjtcclxuXHRcdFx0aSsrO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlcztcclxuXHR9XHJcblxyXG5cdC8vSU1QTEVNRU5UQUNJT04gU1RFUEVSXHJcblx0aW5pdFN0ZXAoKXtcclxuXHRcdHRoaXMubWFwYU1lbnNhamVzLnNldCgwLCdTZWxlY2Npb25lIGxhcyB0YWJsYXMgbyB2aXN0YXMgZGUgZG9uZGUgZGVzZWEgb2J0ZW5lciBsYSBpbmZvcm1hY2lvbi4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDEsJ0luZGlxdWUgZGUgcXVlIG1hbmVyYSBzZSByZWxhY2Npb25hbiBsb3Mgb2JqZXRvcyBlbnRyZSBzaS4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDIsJ0luZGlxdWUgbG9zIGZpbHRyb3MgYWRpY2lvbmFsZXMgcXVlIGRlc2VlIHJlYWxpemFyIHNvYnJlIGxhIGluZm9ybWFjaW9uLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMywnQ2FtcG9zJylcclxuXHRcdHRoaXMuaXRlbXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZnJvbScpLFxyXG4gICAgICAgICAgICAgICAgcm91dGVyTGluazogJ3BlcnNvbmFsJyxcclxuXHRcdFx0XHRzdHlsZUNsYXNzOiB0aGlzLmFjdHVhbCA9PT0gMCA/ICdlbmZvY2Fkbyc6ICcnLFxyXG5cdFx0XHRcdHRpdGxlOidTZWxlY2Npb25lIGxhcyB0YWJsYXMgbyB2aXN0YXMgZGUgZG9uZGUgZGVzZWEgb2J0ZW5lciBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnam9pbicpLFxyXG5cdFx0XHRcdHJvdXRlckxpbms6ICdwZXJzb25hbCcsXHJcblx0XHRcdFx0c3R5bGVDbGFzczogdGhpcy5hY3R1YWwgPT09IDEgPyAnZW5mb2NhZG8nOiAnJyxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnSW5kaXF1ZSBkZSBxdWUgbWFuZXJhIHNlIHJlbGFjY2lvbmFuIGxvcyBvYmpldG9zIGVudHJlIHNpLidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd3aGVyZScpLFxyXG5cdFx0XHRcdHJvdXRlckxpbms6ICdwZXJzb25hbCcsXHJcblx0XHRcdFx0c3R5bGVDbGFzczogdGhpcy5hY3R1YWwgPT09IDIgPyAnZW5mb2NhZG8nOiAnJyxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnSW5kaXF1ZSBsb3MgZmlsdHJvcyBhZGljaW9uYWxlcyBxdWUgZGVzZWUgcmVhbGl6YXIgc29icmUgbGEgaW5mb3JtYWNpb24uJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2NhbXBvcycpLFxyXG5cdFx0XHRcdHN0eWxlQ2xhc3M6IHRoaXMuYWN0dWFsID09PSAzID8gJ2VuZm9jYWRvJzogJycsXHJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiAnY29uZmlybWF0aW9uJyxcclxuXHRcdFx0XHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcblx0fVxyXG5cclxuXHRhY3R1YWxpemFyU2VsZWNjaW9uKGJvb2xlYW5vZ2VuZXJhbDogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hci5mb3JFYWNoKChlbGVtZW50bykgPT4ge1xyXG5cdFx0XHRlbGVtZW50by5zZWxlY2Npb25hZG8gPSBib29sZWFub2dlbmVyYWw7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHRvZG9zU2VsZWNjaW9uYWRvcygpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLmV2ZXJ5KGVsZW1lbnRvID0+IGVsZW1lbnRvLnNlbGVjY2lvbmFkbyk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuIiwiQGlmKHZpc3RhVmlzdWFsaXphciA9PSBudWxsKXtcclxuPGgxPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGV9fSB7eydyZXBvcnRlJ3wgdHJhbnNsYXRlfX08L2gxPlxyXG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgPGFwcC1maWx0cm8tZ2VuZXJhbCBbZmlsdHJvc109XCJmaWx0ZXJzXCIgW2RhdGF0YWJsZV09XCJ0YWJsYUdlbmVyYWxcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWZvcm0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBhdXRvZm9jdXMgdHlwZT1cInRleHRcIiBpZD1cImRlc2NyaXBjaW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2ZpbHRybycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2FwcC1maWx0cm8tZ2VuZXJhbD5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfbnVldm8nIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwibnVldm8oKVwiIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuPGFwcC10YWJsYS1nZW5lcmFsICN0YWJsYUdlbmVyYWwgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFt2YWx1ZV09XCJwYWdpbmFkb3JcIiBbcm93c109XCJwYWdpbmF0b3Iucm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInBhZ2luYXRvci50b3RhbFJlY29yZHNcIiAob25Mb2FkKT1cImxvYWQoJGV2ZW50KVwiIChvblJvd1NlbGVjdCk9XCJ2ZXJEZXRhbGxlKCRldmVudClcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiPjwvYXBwLXRhYmxhLWdlbmVyYWw+XHJcbn1cclxuQGlmKHZpc3RhVmlzdWFsaXphciAhPSBudWxsKXtcclxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgIDxoMT57eydmdWVudGUnIHwgdHJhbnNsYXRlfX0ge3sncmVwb3J0ZSd8IHRyYW5zbGF0ZX19PC9oMT5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJyZWdyZXNhcigpXCIgbGFiZWw9XCJSZWdyZXNhclwiIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBmb250LXNlbWlib2xkXCI+PC9idXR0b24+XHJcbjwvZGl2PlxyXG48cC10YWJWaWV3PlxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ2Z1ZW50ZSd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgIDxoNT48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J2RhdG9zJ3wgdHJhbnNsYXRlfX0ge3snYmFzaWNvcyd8IHRyYW5zbGF0ZX19PC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgYXV0b2ZvY3VzIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwZXNvXCIgWyhuZ01vZGVsKV09XCJmdWVudGUuZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBlc29cIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ3LWZ1bGxcIiBpZD1cImZsb2F0LWlucHV0XCIgcm93cz1cIjVcIiBjb2xzPVwiMzBcIiBwSW5wdXRUZXh0YXJlYSBbKG5nTW9kZWwpXT1cInF1ZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1cyBbYXV0b1Jlc2l6ZV09XCJ0cnVlXCI+IDwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2NvbnN1bHRhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIiBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWZsb3BweS1zYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHAtc3BsaXRCdXR0b24gY2xhc3M9XCJtbC0yXCIgbGFiZWw9XCJBY2Npb25lcyBFdmFsdWFkb3Jlc1wiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVcIj48L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCIgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyQ2FtcG9zKClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHAtdGFibGUgI3RhYmxhR2VuZXJhbEVudHJhZGEgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiY2FtcG9zXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwiZmFsc2VcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJsbGF2ZVRhYmxhXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3NpbnRheGlzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0aXBvJyB8IHRyYW5zbGF0ZX19IGRlIHt7J2RhdG8nIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtY2FtcG8gbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cImNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYW1wby5ub21icmUgXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuXHJcblxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ3dpemFyZCd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPHAtc3RlcHMgW21vZGVsXT1cIml0ZW1zXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgW2FjdGl2ZUluZGV4XT1cImFjdHVhbFwiIGNsYXNzPVwiZW5mb2NhZG9cIj48L3Atc3RlcHM+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJhbnRlcmlvcigpXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1hbmdsZS1sZWZ0XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJBbnRlcmlvclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBsYWNlaG9sZGVyPVwiVG9wXCIgW2Rpc2FibGVkXT1cImFjdHVhbCA8PSAwXCIgLz5cclxuICAgICAgICAgICAgPHAtYnV0dG9uIChvbkNsaWNrKT1cInNpZ3VpZW50ZSgpXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1hbmdsZS1yaWdodFwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJhY3R1YWwgID09PSAzID8gJ1Rlcm1pbmFyJzogJ1NpZ3VpZW50ZSdcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwbGFjZWhvbGRlcj1cIlRvcFwiIC8+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkSW5zdHJ1Y2Npb25lcyBtdC00IG1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1iZWxsXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW5lZG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57e21hcGFNZW5zYWplcz8uZ2V0KGFjdHVhbCl9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uIChvbkNsaWNrKT1cImFudGVyaW9yKClcIiBbcm91bmRlZF09XCJ0cnVlXCIgaWNvbj1cInBpIHBpLWFuZ2xlLWxlZnRcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJBbnRlcmlvclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBsYWNlaG9sZGVyPVwiVG9wXCIgW2Rpc2FibGVkXT1cImFjdHVhbCA8PSAwXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJzaWd1aWVudGUoKVwiIFtyb3VuZGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImFjdHVhbCAgPT09IDMgPyAnVGVybWluYXInOiAnU2lndWllbnRlJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBsYWNlaG9sZGVyPVwiVG9wXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snbGlua19hbnRlcmlvcicgfCB0cmFuc2xhdGV9fVwiICBpY29uPVwicGkgcGktcGx1c1wiIChjbGljayk9XCJhbnRlcmlvcigpXCIgKm5nSWY9XCJhY3R1YWwgPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXJpcHBsZSBwLWVsZW1lbnQgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24tc2Vjb25kYXJ5IG1iLTJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snbGlua19zaWd1aWVudGUnIHwgdHJhbnNsYXRlfX1cIiAgaWNvbj1cInBpIHBpLXBsdXNcIiAoY2xpY2spPVwic2lndWllbnRlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIEBpZihhY3R1YWwgPT09IDApe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gbGFiZWw9XCJ7eydmdWVudGUnIHwgdHJhbnNsYXRlfX1cIiBpY29uPVwicGkgcGktcGx1c1wiIChjbGljayk9XCJidXNjYXJUYWJsYSgpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBtYi0yXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHAtdGFibGUgI3RhYmxhR2VuZXJhbEVudHJhZGEgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwidGFibGFzRnJvbVwiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwiYm90aFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcclxuICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBlZGl0TW9kZT1cInJvd1wiIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGRhdGFLZXk9XCJsbGF2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3sndGFibGEnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydhbGlhcycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPiA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdGFibGEgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgW3BFZGl0YWJsZVJvd109XCJ0YWJsYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEudGFibGF9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuYWxpYXN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFTElNSU5BUiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcERlbGV0ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbGltaW5hclRhYmxhKHRhYmxhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1lbGVtZW50IHAtcmlwcGxlIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tb3V0bGluZWQgbXItMiBtYi0yIHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInAtMyBmb250LW1lZGl1bSBlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZihhY3R1YWwgPT0gMSl7XHJcblxyXG4gICAgICAgIDxwLXRhYmxlICN0YWJsYUdlbmVyYWxFbnRyYWRhIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cImZvcmFuZWFzXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiIGVkaXRNb2RlPVwicm93XCJcclxuICAgICAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gYWwge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiIFtsYXp5XT1cInRydWVcIiBkYXRhS2V5PVwibGxhdmVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7JycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eycnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdGFibGEgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cInRhYmxhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuYWxpYXMxfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzMn19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5sbGF2ZS5ub21icmV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJwLTMgZm9udC1tZWRpdW0gZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J21lbnNhamV0YWJsYXZhY2lhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYmxlPlxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmKGFjdHVhbCA9PSAyKXtcclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxoNT48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J3doZXJlJ3wgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ3LWZ1bGxcIiBpZD1cImZsb2F0LWlucHV0XCIgcm93cz1cIjVcIiBjb2xzPVwiMzBcIiBwSW5wdXRUZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmdWVudGUud2hlcmVBZGljaW9uYWxcIiBhdXRvZm9jdXMgW2F1dG9SZXNpemVdPVwidHJ1ZVwiPiA8L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzY3JpcGNpb25cIj57eydjb25zdWx0YScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmVcIiBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRhcldoZXJlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZihhY3R1YWwgPT0gMyl7XHJcblxyXG4gICAgICAgIDxwLXRhYmxlIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cImNhbXBvc1NlbGVjY2lvbmFyXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwiY2FtcG9zU2VsZWNjaW9uYXIubGVuZ3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiYm90aFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIlxyXG4gICAgICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIFtwYWdpbmF0b3JdPVwiY2FtcG9zU2VsZWNjaW9uYXIubGVuZ3RoID4gMTBcIlxyXG4gICAgICAgICAgICBbcm93c109XCIxMFwiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEwLCAyMCwgMzBdXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIlxyXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiIGRhdGFLZXk9XCJhbGlhc1wiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCIgYWxpZ25Gcm96ZW49XCJsZWZ0XCIgcEZyb3plbkNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggW3N0eWxlXT1cInsnbWFyZ2luLWxlZnQnOiAnMSUnLCdtYXJnaW4tcmlnaHQnOicxJSd9XCIgWyhuZ01vZGVsKV09XCJzZWxlY2Npb25HZW5lcmFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiIFtuZ01vZGVsXT1cInRvZG9zU2VsZWNjaW9uYWRvcygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImFjdHVhbGl6YXJTZWxlY2Npb24oJGV2ZW50KVwiPjwvcC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDoxJVwiPnt7J3RhYmxhJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snY29sdW1uYScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC10YWJsYT5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggY2xhc3M9XCJtci0yIFwiIFsobmdNb2RlbCldPVwidGFibGEuc2VsZWNjaW9uYWRvXCIgW2JpbmFyeV09XCJ0cnVlXCIgaW5wdXRJZD1cImJpbmFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuY29sdW1uYS5yZXBvcnRlRnVlbnRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEubm9tYnJlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuPC9wLXRhYlZpZXc+XHJcblxyXG59XHJcblxyXG48YXBwLXBvcHVwLXRhYmxhcy1mdWVudGUgI3BvcHVwVGFibGFzRnVlbnRlVUlcclxuICAgIChhcGxpY2FyRGVzdGlub09jdWx0YXIpPVwic2V0VGFibGFTZWxlY2Npb25hZGEoJGV2ZW50KVwiPjwvYXBwLXBvcHVwLXRhYmxhcy1mdWVudGU+Il19