ngx-wapp-components 1.22.2 → 1.22.3

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.
@@ -36,6 +36,9 @@ export class WTableLazyComponent {
36
36
  }
37
37
  ngOnInit() {
38
38
  this.loading = true;
39
+ if (this.wappTableLazyLoadingObject.hasSelectAllCheckbox == undefined) {
40
+ this.wappTableLazyLoadingObject.hasSelectAllCheckbox = true;
41
+ }
39
42
  }
40
43
  loadElements(event) {
41
44
  this.loading = true;
@@ -290,10 +293,10 @@ export class WTableLazyComponent {
290
293
  }
291
294
  }
292
295
  WTableLazyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WTableLazyComponent, deps: [{ token: i1.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
293
- WTableLazyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WTableLazyComponent, selector: "w-table-lazy", inputs: { loading: "loading", elements: "elements", rowsPerPage: "rowsPerPage", allElements: "allElements", totalRecords: "totalRecords", maxRowsPerPage: "maxRowsPerPage", wappTableLazyLoadingObject: "wappTableLazyLoadingObject" }, outputs: { queryElements: "queryElements", onElementSelect: "onElementSelect", onViewElementSelect: "onViewElementSelect", onCustomElementSelect: "onCustomElementSelect", onCopyElementSelect: "onCopyElementSelect", onEditElementSelect: "onEditElementSelect", onDeleteElementSelect: "onDeleteElementSelect", onAllElementSelect: "onAllElementSelect", onPageChange: "onPageChange", onSelectedElementsChange: "onSelectedElementsChange" }, viewQueries: [{ propertyName: "dataTable", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"w-table-styles\"\r\n [ngClass]=\"{'w-table-no-buttons' : !wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.hasCopyButton && !wappTableLazyLoadingObject.customButtonConfig && !wappTableLazyLoadingObject.hasViewButton }\"\r\n #table [value]=\"elements\" \r\n dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [lazy]=\"true\" \r\n (onLazyLoad)=\"loadElements($event)\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"wappTableLazyLoadingObject.hasPaginator! && totalRecords >= 10\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n [tableStyle]=\"{'min-width': wappTableLazyLoadingObject.tableMinWidth!}\"\r\n (onPage)=\"pageChange($event)\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input w-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-center'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\" [class]=\"wappTableLazyLoadingObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0])\">\r\n </th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" class=\"text-center\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-right'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ColoredBadge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <div *ngFor=\"let badge of wappTableLazyLoadingObject.coloredBadge; index as ind\">\r\n <w-badge *ngIf=\"badge.coloredBadgeProperty == readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"badge.color ? badge.color : 'info'\">\r\n </w-badge> \r\n </div> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ShortDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.d }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.LongDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.D }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeShortTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.g }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeLongTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.G }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.BuisinessDateTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.Business }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Week\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-button-week [value]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [translations]=\"wappTableLazyLoadingObject.weekButtonTranslations ? wappTableLazyLoadingObject.weekButtonTranslations : []\" [defaultEsp]=\"wappTableLazyLoadingObject.weekButtonDefaultEsp ?? false\"></w-button-week>\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"w-table-buttons flex justify-content-end align-items-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n (onClick)=\"viewElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\" \r\n icon=\"pi-eye\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button *ngIf=\"!customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n <w-button *ngIf=\"customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\" \r\n [disabled]=\"readProperty(element, customButtonConfig?.disableProperty!)\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n (onClick)=\"confirmCopy($event, element)\" \r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-copy\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.disableDeleteProperty; else noDisableDelete\" \r\n (onClick)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n <ng-template #noDisableDelete>\r\n <w-button (onClick)=\"confirmDelete($event, element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"w-table-buttons flex justify-content-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [icon]=\"customButtonConfig?.icon!\" type=\"table\" [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\" \r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"w-table-lazy-empty-message-padding\">\r\n <td [attr.colspan]=\"calculateColspan()\">{{wappTableLazyLoadingObject.emptyMessage ? wappTableLazyLoadingObject.emptyMessage : 'No matches.'}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:700}.heading5,.w-sidebar-title-text{font-size:1.5rem;line-height:1.8333333333rem;font-weight:700}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:700}.subtitle1,.w-tab-text,.w-panel-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:700}.subtitle2,.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,.w-input,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.light,.w-input-small-placeholder-text-only-color{font-size:.9166666667rem;line-height:1.0833333333rem;font-weight:300}.small,.w-button-small-label-text-typography-sm{font-size:.8333333333rem;line-height:1rem;font-weight:400}.textMainColor{color:#1f2224}.textSoftColor{color:#5f6468}.textSofterColor{color:#9aa0a7}.textSoftestColor{color:#e8ebee}.textInverseColor{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXSMDivider{height:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.panel-title-gap-divider{height:20px}.panel-section-gap-divider{height:32px}.input-vertical-gap-divider{height:24px}.input-label-gap-divider{height:6px}.focusedInput,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{border:1px solid rgba(0,157,253,.25);box-shadow:0 0 10px #00b3eb40}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b3eb}.hoveredInput{border-radius:8px;border:1px solid rgba(0,179,235,.5)}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-label-text-typography,.w-button-small-tertiary-label-text,.w-button-small-label-text-typography-sm{font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#1f2224}.w-button-small-icon-text{font-size:12px;font-weight:600}.w-table-button-small-icon-text{font-size:12px;color:#9aa0a7}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:600;line-height:16px}.w-button-medium-tertiary-label-text{color:#1f2224}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:600;line-height:24px}.w-button-large-tertiary-label-text{color:#1f2224}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text{color:#1f2224}.w-view-small-value-text{color:#5f6468}.w-input-no-label-height{height:14px}.w-input-disabled{background-color:#f1f3f4;border-color:#e8ebee;opacity:1}.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled{height:-moz-fit-content;height:fit-content}.w-input-small-label-text,.w-input-small-label-disabled{color:#1f2224}.w-input-small-label-disabled{color:#9aa0a7}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,.w-input{color:#1f2224}.w-input-small-placeholder-text-only-color{color:#9aa0a7;line-height:1.3333333333rem}.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text-disabled-only-color{color:#5f6468}.w-input-small-text-icon,.w-input-small-select-options-text{color:#1f2224}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#1f2224}.w-input-medium-label-disabled{color:#9aa0a7}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#1f2224}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6468}.w-input-medium-text-icon{color:#1f2224}.w-input-medium-select-options-text{font-size:16px;font-weight:400;line-height:24px;color:#1f2224}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#1f2224}.w-panel-content{color:#5f6468}.w-tab-text,.w-chip-text{color:#1f2224}.w-badge-text{font-size:10px;font-weight:700;line-height:8px}.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#1f2224}.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{color:#5f6468}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.grid{margin:0}::ng-deep .p-tooltip,.p-tooltip{filter:0px 0px 1px 0px rgba(0,0,0,.1) inset,1px 1px 5px rgba(0,0,0,.06),1px 1px 1px rgba(0,0,0,.08)}::ng-deep .p-tooltip .p-tooltip-text,.p-tooltip .p-tooltip-text{background:#ffffff!important;color:#1f2224;padding:12px 16px;max-width:192px;width:max-content;margin-left:3px}::ng-deep .p-tooltip.p-tooltip-right,.p-tooltip.p-tooltip-right{margin-left:6px;width:max-content;transform:translateY(-1px)}::ng-deep .p-tooltip.p-tooltip-right .p-tooltip-arrow,.p-tooltip.p-tooltip-right .p-tooltip-arrow{border-right-color:#fff!important;top:50%;left:0;margin-top:-4px;border-width:4px 6px 4px 0!important}::ng-deep .p-tooltip.p-tooltip-bottom .p-tooltip-arrow,.p-tooltip.p-tooltip-bottom .p-tooltip-arrow{border-bottom-color:#fff!important;border-width:0 4px 6px 4px!important;margin-top:-3px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 0 1px #0000001a inset,0 4px 8px #005c7a0d,0 1px 3px #005c7a1a}.w-table-lazy-selectable-row{cursor:pointer}.showing-per-page{color:#9aa0a7;font-weight:400}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a7;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0px;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a7;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a7}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:400}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8ebee;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8ebee;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:6px 8px 5px}::ng-deep .w-table-no-buttons .p-datatable .p-datatable-tbody>tr>td{padding:16px 8px 15px!important}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b3eb;border:1px solid #e0f5fc}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8ebee}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8ebee;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#1f2224}::ng-deep .w-table-styles .darkBlue1.p-button.p-button-icon-only>.p-button-icon{color:#0020c7!important}::ng-deep .w-table-styles .darkBlue2.p-button.p-button-icon-only>.p-button-icon{color:#4765ff!important}::ng-deep .w-table-styles .darkBlue3.p-button.p-button-icon-only>.p-button-icon{color:#adbaff!important}::ng-deep .w-table-styles .purple1.p-button.p-button-icon-only>.p-button-icon{color:#7b00c7!important}::ng-deep .w-table-styles .purple2.p-button.p-button-icon-only>.p-button-icon{color:#b947ff!important}::ng-deep .w-table-styles .purple3.p-button.p-button-icon-only>.p-button-icon{color:#e0adff!important}::ng-deep .w-table-styles .pink1.p-button.p-button-icon-only>.p-button-icon{color:#c700b3!important}::ng-deep .w-table-styles .pink2.p-button.p-button-icon-only>.p-button-icon{color:#ff61ef!important}::ng-deep .w-table-styles .pink3.p-button.p-button-icon-only>.p-button-icon{color:#ffadf7!important}::ng-deep .w-table-styles .green1.p-button.p-button-icon-only>.p-button-icon{color:#87c700!important}::ng-deep .w-table-styles .green2.p-button.p-button-icon-only>.p-button-icon{color:#ccff61!important}::ng-deep .w-table-styles .green3.p-button.p-button-icon-only>.p-button-icon{color:#e5ffad!important}::ng-deep .w-table-styles .error1.p-button.p-button-icon-only>.p-button-icon{color:#fb7c7c!important}::ng-deep .w-table-styles .error2.p-button.p-button-icon-only>.p-button-icon{color:#f55!important}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.image-header{text-align:center!important}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8ebee;gap:16px}::-webkit-input-placeholder{color:#5f6468}::-moz-placeholder{color:#5f6468}:-ms-input-placeholder{color:#5f6468}:-moz-placeholder{color:#5f6468}.w-input:hover{border-radius:8px!important;border:1px solid rgba(0,179,235,.5)!important}.w-input:focus{border:1px solid rgba(0,157,253,.25)!important;box-shadow:0 0 10px #00b3eb40!important;background-color:transparent!important}.pi-search{left:11px;color:#5f6468!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8ebee}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8ebee;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a7}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}::ng-deep .p-datatable .p-datatable-tbody>tr.w-table-lazy-empty-message-padding>td{padding:16px 12px 15px!important}::ng-deep .w-table-styles .p-disabled,.p-component:disabled{opacity:.3;box-shadow:none!important}.w-table-buttons{gap:12px}\n"], dependencies: [{ kind: "directive", type: i2.InputText, selector: "[pInputText]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i7.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i8.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i8.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i8.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i8.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i9.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "component", type: i10.WButtonComponent, selector: "w-button", inputs: ["type", "label", "size", "icon", "iconPos", "tooltipPosition", "tooltip", "disabled", "loading", "buttonClass"], outputs: ["onClick"] }, { kind: "component", type: i11.WBadgeComponent, selector: "w-badge", inputs: ["label", "color", "tooltip", "maxWidthOverflow"] }, { kind: "component", type: i12.WButtonWeekComponent, selector: "w-button-week", inputs: ["value", "translations", "defaultEsp"], outputs: ["onDayClick"] }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i13.WDatePipe, name: "wappDate" }] });
296
+ WTableLazyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WTableLazyComponent, selector: "w-table-lazy", inputs: { loading: "loading", elements: "elements", rowsPerPage: "rowsPerPage", allElements: "allElements", totalRecords: "totalRecords", maxRowsPerPage: "maxRowsPerPage", wappTableLazyLoadingObject: "wappTableLazyLoadingObject" }, outputs: { queryElements: "queryElements", onElementSelect: "onElementSelect", onViewElementSelect: "onViewElementSelect", onCustomElementSelect: "onCustomElementSelect", onCopyElementSelect: "onCopyElementSelect", onEditElementSelect: "onEditElementSelect", onDeleteElementSelect: "onDeleteElementSelect", onAllElementSelect: "onAllElementSelect", onPageChange: "onPageChange", onSelectedElementsChange: "onSelectedElementsChange" }, viewQueries: [{ propertyName: "dataTable", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"w-table-styles\"\r\n [ngClass]=\"{'w-table-no-buttons' : !wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.hasCopyButton && !wappTableLazyLoadingObject.customButtonConfig && !wappTableLazyLoadingObject.hasViewButton }\"\r\n #table [value]=\"elements\" \r\n dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [lazy]=\"true\" \r\n (onLazyLoad)=\"loadElements($event)\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"wappTableLazyLoadingObject.hasPaginator! && totalRecords >= 10\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n [tableStyle]=\"{'min-width': wappTableLazyLoadingObject.tableMinWidth!}\"\r\n (onPage)=\"pageChange($event)\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input w-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-center'\">\r\n <p-tableHeaderCheckbox *ngIf=\"wappTableLazyLoadingObject.hasSelectAllCheckbox == true\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\" [class]=\"wappTableLazyLoadingObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0])\">\r\n </th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" class=\"text-center\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-right'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ColoredBadge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <div *ngFor=\"let badge of wappTableLazyLoadingObject.coloredBadge; index as ind\">\r\n <w-badge *ngIf=\"badge.coloredBadgeProperty == readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"badge.color ? badge.color : 'info'\">\r\n </w-badge> \r\n </div> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ShortDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.d }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.LongDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.D }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeShortTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.g }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeLongTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.G }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.BuisinessDateTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.Business }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Week\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-button-week [value]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [translations]=\"wappTableLazyLoadingObject.weekButtonTranslations ? wappTableLazyLoadingObject.weekButtonTranslations : []\" [defaultEsp]=\"wappTableLazyLoadingObject.weekButtonDefaultEsp ?? false\"></w-button-week>\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"w-table-buttons flex justify-content-end align-items-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n (onClick)=\"viewElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\" \r\n icon=\"pi-eye\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button *ngIf=\"!customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n <w-button *ngIf=\"customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\" \r\n [disabled]=\"readProperty(element, customButtonConfig?.disableProperty!)\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n (onClick)=\"confirmCopy($event, element)\" \r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-copy\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.disableDeleteProperty; else noDisableDelete\" \r\n (onClick)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n <ng-template #noDisableDelete>\r\n <w-button (onClick)=\"confirmDelete($event, element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"w-table-buttons flex justify-content-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [icon]=\"customButtonConfig?.icon!\" type=\"table\" [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\" \r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"w-table-lazy-empty-message-padding\">\r\n <td [attr.colspan]=\"calculateColspan()\">{{wappTableLazyLoadingObject.emptyMessage ? wappTableLazyLoadingObject.emptyMessage : 'No matches.'}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:700}.heading5,.w-sidebar-title-text{font-size:1.5rem;line-height:1.8333333333rem;font-weight:700}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:700}.subtitle1,.w-tab-text,.w-panel-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:700}.subtitle2,.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,.w-input,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.light,.w-input-small-placeholder-text-only-color{font-size:.9166666667rem;line-height:1.0833333333rem;font-weight:300}.small,.w-button-small-label-text-typography-sm{font-size:.8333333333rem;line-height:1rem;font-weight:400}.textMainColor{color:#1f2224}.textSoftColor{color:#5f6468}.textSofterColor{color:#9aa0a7}.textSoftestColor{color:#e8ebee}.textInverseColor{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXSMDivider{height:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.panel-title-gap-divider{height:20px}.panel-section-gap-divider{height:32px}.input-vertical-gap-divider{height:24px}.input-label-gap-divider{height:6px}.focusedInput,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{border:1px solid rgba(0,157,253,.25);box-shadow:0 0 10px #00b3eb40}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b3eb}.hoveredInput{border-radius:8px;border:1px solid rgba(0,179,235,.5)}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-label-text-typography,.w-button-small-tertiary-label-text,.w-button-small-label-text-typography-sm{font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#1f2224}.w-button-small-icon-text{font-size:12px;font-weight:600}.w-table-button-small-icon-text{font-size:12px;color:#9aa0a7}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:600;line-height:16px}.w-button-medium-tertiary-label-text{color:#1f2224}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:600;line-height:24px}.w-button-large-tertiary-label-text{color:#1f2224}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text{color:#1f2224}.w-view-small-value-text{color:#5f6468}.w-input-no-label-height{height:14px}.w-input-disabled{background-color:#f1f3f4;border-color:#e8ebee;opacity:1}.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled{height:-moz-fit-content;height:fit-content}.w-input-small-label-text,.w-input-small-label-disabled{color:#1f2224}.w-input-small-label-disabled{color:#9aa0a7}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,.w-input{color:#1f2224}.w-input-small-placeholder-text-only-color{color:#9aa0a7;line-height:1.3333333333rem}.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text-disabled-only-color{color:#5f6468}.w-input-small-text-icon,.w-input-small-select-options-text{color:#1f2224}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#1f2224}.w-input-medium-label-disabled{color:#9aa0a7}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#1f2224}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6468}.w-input-medium-text-icon{color:#1f2224}.w-input-medium-select-options-text{font-size:16px;font-weight:400;line-height:24px;color:#1f2224}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#1f2224}.w-panel-content{color:#5f6468}.w-tab-text,.w-chip-text{color:#1f2224}.w-badge-text{font-size:10px;font-weight:700;line-height:8px}.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#1f2224}.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{color:#5f6468}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.grid{margin:0}::ng-deep .p-tooltip,.p-tooltip{filter:0px 0px 1px 0px rgba(0,0,0,.1) inset,1px 1px 5px rgba(0,0,0,.06),1px 1px 1px rgba(0,0,0,.08)}::ng-deep .p-tooltip .p-tooltip-text,.p-tooltip .p-tooltip-text{background:#ffffff!important;color:#1f2224;padding:12px 16px;max-width:192px;width:max-content;margin-left:3px}::ng-deep .p-tooltip.p-tooltip-right,.p-tooltip.p-tooltip-right{margin-left:6px;width:max-content;transform:translateY(-1px)}::ng-deep .p-tooltip.p-tooltip-right .p-tooltip-arrow,.p-tooltip.p-tooltip-right .p-tooltip-arrow{border-right-color:#fff!important;top:50%;left:0;margin-top:-4px;border-width:4px 6px 4px 0!important}::ng-deep .p-tooltip.p-tooltip-bottom .p-tooltip-arrow,.p-tooltip.p-tooltip-bottom .p-tooltip-arrow{border-bottom-color:#fff!important;border-width:0 4px 6px 4px!important;margin-top:-3px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 0 1px #0000001a inset,0 4px 8px #005c7a0d,0 1px 3px #005c7a1a}.w-table-lazy-selectable-row{cursor:pointer}.showing-per-page{color:#9aa0a7;font-weight:400}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a7;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0px;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a7;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a7}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:400}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8ebee;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8ebee;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:6px 8px 5px}::ng-deep .w-table-no-buttons .p-datatable .p-datatable-tbody>tr>td{padding:16px 8px 15px!important}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b3eb;border:1px solid #e0f5fc}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8ebee}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8ebee;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#1f2224}::ng-deep .w-table-styles .darkBlue1.p-button.p-button-icon-only>.p-button-icon{color:#0020c7!important}::ng-deep .w-table-styles .darkBlue2.p-button.p-button-icon-only>.p-button-icon{color:#4765ff!important}::ng-deep .w-table-styles .darkBlue3.p-button.p-button-icon-only>.p-button-icon{color:#adbaff!important}::ng-deep .w-table-styles .purple1.p-button.p-button-icon-only>.p-button-icon{color:#7b00c7!important}::ng-deep .w-table-styles .purple2.p-button.p-button-icon-only>.p-button-icon{color:#b947ff!important}::ng-deep .w-table-styles .purple3.p-button.p-button-icon-only>.p-button-icon{color:#e0adff!important}::ng-deep .w-table-styles .pink1.p-button.p-button-icon-only>.p-button-icon{color:#c700b3!important}::ng-deep .w-table-styles .pink2.p-button.p-button-icon-only>.p-button-icon{color:#ff61ef!important}::ng-deep .w-table-styles .pink3.p-button.p-button-icon-only>.p-button-icon{color:#ffadf7!important}::ng-deep .w-table-styles .green1.p-button.p-button-icon-only>.p-button-icon{color:#87c700!important}::ng-deep .w-table-styles .green2.p-button.p-button-icon-only>.p-button-icon{color:#ccff61!important}::ng-deep .w-table-styles .green3.p-button.p-button-icon-only>.p-button-icon{color:#e5ffad!important}::ng-deep .w-table-styles .error1.p-button.p-button-icon-only>.p-button-icon{color:#fb7c7c!important}::ng-deep .w-table-styles .error2.p-button.p-button-icon-only>.p-button-icon{color:#f55!important}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.image-header{text-align:center!important}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8ebee;gap:16px}::-webkit-input-placeholder{color:#5f6468}::-moz-placeholder{color:#5f6468}:-ms-input-placeholder{color:#5f6468}:-moz-placeholder{color:#5f6468}.w-input:hover{border-radius:8px!important;border:1px solid rgba(0,179,235,.5)!important}.w-input:focus{border:1px solid rgba(0,157,253,.25)!important;box-shadow:0 0 10px #00b3eb40!important;background-color:transparent!important}.pi-search{left:11px;color:#5f6468!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8ebee}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8ebee;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a7}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}::ng-deep .p-datatable .p-datatable-tbody>tr.w-table-lazy-empty-message-padding>td{padding:16px 12px 15px!important}::ng-deep .w-table-styles .p-disabled,.p-component:disabled{opacity:.3;box-shadow:none!important}.w-table-buttons{gap:12px}\n"], dependencies: [{ kind: "directive", type: i2.InputText, selector: "[pInputText]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "component", type: i7.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i8.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i8.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i8.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i8.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i9.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "component", type: i10.WButtonComponent, selector: "w-button", inputs: ["type", "label", "size", "icon", "iconPos", "tooltipPosition", "tooltip", "disabled", "loading", "buttonClass"], outputs: ["onClick"] }, { kind: "component", type: i11.WBadgeComponent, selector: "w-badge", inputs: ["label", "color", "tooltip", "maxWidthOverflow"] }, { kind: "component", type: i12.WButtonWeekComponent, selector: "w-button-week", inputs: ["value", "translations", "defaultEsp"], outputs: ["onDayClick"] }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i13.WDatePipe, name: "wappDate" }] });
294
297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WTableLazyComponent, decorators: [{
295
298
  type: Component,
296
- args: [{ selector: 'w-table-lazy', template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"w-table-styles\"\r\n [ngClass]=\"{'w-table-no-buttons' : !wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.hasCopyButton && !wappTableLazyLoadingObject.customButtonConfig && !wappTableLazyLoadingObject.hasViewButton }\"\r\n #table [value]=\"elements\" \r\n dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [lazy]=\"true\" \r\n (onLazyLoad)=\"loadElements($event)\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"wappTableLazyLoadingObject.hasPaginator! && totalRecords >= 10\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n [tableStyle]=\"{'min-width': wappTableLazyLoadingObject.tableMinWidth!}\"\r\n (onPage)=\"pageChange($event)\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input w-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-center'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\" [class]=\"wappTableLazyLoadingObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0])\">\r\n </th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" class=\"text-center\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-right'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ColoredBadge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <div *ngFor=\"let badge of wappTableLazyLoadingObject.coloredBadge; index as ind\">\r\n <w-badge *ngIf=\"badge.coloredBadgeProperty == readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"badge.color ? badge.color : 'info'\">\r\n </w-badge> \r\n </div> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ShortDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.d }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.LongDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.D }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeShortTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.g }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeLongTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.G }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.BuisinessDateTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.Business }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Week\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-button-week [value]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [translations]=\"wappTableLazyLoadingObject.weekButtonTranslations ? wappTableLazyLoadingObject.weekButtonTranslations : []\" [defaultEsp]=\"wappTableLazyLoadingObject.weekButtonDefaultEsp ?? false\"></w-button-week>\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"w-table-buttons flex justify-content-end align-items-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n (onClick)=\"viewElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\" \r\n icon=\"pi-eye\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button *ngIf=\"!customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n <w-button *ngIf=\"customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\" \r\n [disabled]=\"readProperty(element, customButtonConfig?.disableProperty!)\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n (onClick)=\"confirmCopy($event, element)\" \r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-copy\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.disableDeleteProperty; else noDisableDelete\" \r\n (onClick)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n <ng-template #noDisableDelete>\r\n <w-button (onClick)=\"confirmDelete($event, element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"w-table-buttons flex justify-content-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [icon]=\"customButtonConfig?.icon!\" type=\"table\" [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\" \r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"w-table-lazy-empty-message-padding\">\r\n <td [attr.colspan]=\"calculateColspan()\">{{wappTableLazyLoadingObject.emptyMessage ? wappTableLazyLoadingObject.emptyMessage : 'No matches.'}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:700}.heading5,.w-sidebar-title-text{font-size:1.5rem;line-height:1.8333333333rem;font-weight:700}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:700}.subtitle1,.w-tab-text,.w-panel-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:700}.subtitle2,.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,.w-input,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.light,.w-input-small-placeholder-text-only-color{font-size:.9166666667rem;line-height:1.0833333333rem;font-weight:300}.small,.w-button-small-label-text-typography-sm{font-size:.8333333333rem;line-height:1rem;font-weight:400}.textMainColor{color:#1f2224}.textSoftColor{color:#5f6468}.textSofterColor{color:#9aa0a7}.textSoftestColor{color:#e8ebee}.textInverseColor{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXSMDivider{height:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.panel-title-gap-divider{height:20px}.panel-section-gap-divider{height:32px}.input-vertical-gap-divider{height:24px}.input-label-gap-divider{height:6px}.focusedInput,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{border:1px solid rgba(0,157,253,.25);box-shadow:0 0 10px #00b3eb40}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b3eb}.hoveredInput{border-radius:8px;border:1px solid rgba(0,179,235,.5)}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-label-text-typography,.w-button-small-tertiary-label-text,.w-button-small-label-text-typography-sm{font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#1f2224}.w-button-small-icon-text{font-size:12px;font-weight:600}.w-table-button-small-icon-text{font-size:12px;color:#9aa0a7}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:600;line-height:16px}.w-button-medium-tertiary-label-text{color:#1f2224}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:600;line-height:24px}.w-button-large-tertiary-label-text{color:#1f2224}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text{color:#1f2224}.w-view-small-value-text{color:#5f6468}.w-input-no-label-height{height:14px}.w-input-disabled{background-color:#f1f3f4;border-color:#e8ebee;opacity:1}.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled{height:-moz-fit-content;height:fit-content}.w-input-small-label-text,.w-input-small-label-disabled{color:#1f2224}.w-input-small-label-disabled{color:#9aa0a7}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,.w-input{color:#1f2224}.w-input-small-placeholder-text-only-color{color:#9aa0a7;line-height:1.3333333333rem}.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text-disabled-only-color{color:#5f6468}.w-input-small-text-icon,.w-input-small-select-options-text{color:#1f2224}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#1f2224}.w-input-medium-label-disabled{color:#9aa0a7}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#1f2224}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6468}.w-input-medium-text-icon{color:#1f2224}.w-input-medium-select-options-text{font-size:16px;font-weight:400;line-height:24px;color:#1f2224}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#1f2224}.w-panel-content{color:#5f6468}.w-tab-text,.w-chip-text{color:#1f2224}.w-badge-text{font-size:10px;font-weight:700;line-height:8px}.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#1f2224}.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{color:#5f6468}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.grid{margin:0}::ng-deep .p-tooltip,.p-tooltip{filter:0px 0px 1px 0px rgba(0,0,0,.1) inset,1px 1px 5px rgba(0,0,0,.06),1px 1px 1px rgba(0,0,0,.08)}::ng-deep .p-tooltip .p-tooltip-text,.p-tooltip .p-tooltip-text{background:#ffffff!important;color:#1f2224;padding:12px 16px;max-width:192px;width:max-content;margin-left:3px}::ng-deep .p-tooltip.p-tooltip-right,.p-tooltip.p-tooltip-right{margin-left:6px;width:max-content;transform:translateY(-1px)}::ng-deep .p-tooltip.p-tooltip-right .p-tooltip-arrow,.p-tooltip.p-tooltip-right .p-tooltip-arrow{border-right-color:#fff!important;top:50%;left:0;margin-top:-4px;border-width:4px 6px 4px 0!important}::ng-deep .p-tooltip.p-tooltip-bottom .p-tooltip-arrow,.p-tooltip.p-tooltip-bottom .p-tooltip-arrow{border-bottom-color:#fff!important;border-width:0 4px 6px 4px!important;margin-top:-3px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 0 1px #0000001a inset,0 4px 8px #005c7a0d,0 1px 3px #005c7a1a}.w-table-lazy-selectable-row{cursor:pointer}.showing-per-page{color:#9aa0a7;font-weight:400}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a7;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0px;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a7;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a7}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:400}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8ebee;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8ebee;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:6px 8px 5px}::ng-deep .w-table-no-buttons .p-datatable .p-datatable-tbody>tr>td{padding:16px 8px 15px!important}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b3eb;border:1px solid #e0f5fc}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8ebee}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8ebee;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#1f2224}::ng-deep .w-table-styles .darkBlue1.p-button.p-button-icon-only>.p-button-icon{color:#0020c7!important}::ng-deep .w-table-styles .darkBlue2.p-button.p-button-icon-only>.p-button-icon{color:#4765ff!important}::ng-deep .w-table-styles .darkBlue3.p-button.p-button-icon-only>.p-button-icon{color:#adbaff!important}::ng-deep .w-table-styles .purple1.p-button.p-button-icon-only>.p-button-icon{color:#7b00c7!important}::ng-deep .w-table-styles .purple2.p-button.p-button-icon-only>.p-button-icon{color:#b947ff!important}::ng-deep .w-table-styles .purple3.p-button.p-button-icon-only>.p-button-icon{color:#e0adff!important}::ng-deep .w-table-styles .pink1.p-button.p-button-icon-only>.p-button-icon{color:#c700b3!important}::ng-deep .w-table-styles .pink2.p-button.p-button-icon-only>.p-button-icon{color:#ff61ef!important}::ng-deep .w-table-styles .pink3.p-button.p-button-icon-only>.p-button-icon{color:#ffadf7!important}::ng-deep .w-table-styles .green1.p-button.p-button-icon-only>.p-button-icon{color:#87c700!important}::ng-deep .w-table-styles .green2.p-button.p-button-icon-only>.p-button-icon{color:#ccff61!important}::ng-deep .w-table-styles .green3.p-button.p-button-icon-only>.p-button-icon{color:#e5ffad!important}::ng-deep .w-table-styles .error1.p-button.p-button-icon-only>.p-button-icon{color:#fb7c7c!important}::ng-deep .w-table-styles .error2.p-button.p-button-icon-only>.p-button-icon{color:#f55!important}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.image-header{text-align:center!important}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8ebee;gap:16px}::-webkit-input-placeholder{color:#5f6468}::-moz-placeholder{color:#5f6468}:-ms-input-placeholder{color:#5f6468}:-moz-placeholder{color:#5f6468}.w-input:hover{border-radius:8px!important;border:1px solid rgba(0,179,235,.5)!important}.w-input:focus{border:1px solid rgba(0,157,253,.25)!important;box-shadow:0 0 10px #00b3eb40!important;background-color:transparent!important}.pi-search{left:11px;color:#5f6468!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8ebee}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8ebee;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a7}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}::ng-deep .p-datatable .p-datatable-tbody>tr.w-table-lazy-empty-message-padding>td{padding:16px 12px 15px!important}::ng-deep .w-table-styles .p-disabled,.p-component:disabled{opacity:.3;box-shadow:none!important}.w-table-buttons{gap:12px}\n"] }]
299
+ args: [{ selector: 'w-table-lazy', template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableLazyLoadingObject\" [class.table-container]=\"wappTableLazyLoadingObject.tableContainer\">\r\n <p-table class=\"w-table-styles\"\r\n [ngClass]=\"{'w-table-no-buttons' : !wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.hasDeleteButton && !wappTableLazyLoadingObject.hasCopyButton && !wappTableLazyLoadingObject.customButtonConfig && !wappTableLazyLoadingObject.hasViewButton }\"\r\n #table [value]=\"elements\" \r\n dataKey=\"{{wappTableLazyLoadingObject.identificator}}\"\r\n [lazy]=\"true\" \r\n (onLazyLoad)=\"loadElements($event)\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [paginator]=\"wappTableLazyLoadingObject.hasPaginator! && totalRecords >= 10\"\r\n [rows]=\"rowsPerPage\" \r\n [currentPageReportTemplate]=\"wappTableLazyLoadingObject.currentPageReportTemplate ? wappTableLazyLoadingObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [loading]=\"loading\"\r\n [showLoader]=\"false\"\r\n [globalFilterFields]=\"wappTableLazyLoadingObject.globalFilterFields!\"\r\n [tableStyle]=\"{'min-width': wappTableLazyLoadingObject.tableMinWidth!}\"\r\n (onPage)=\"pageChange($event)\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject.hasClearButton || wappTableLazyLoadingObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableLazyLoadingObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableLazyLoadingObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"maxRowsPerPage\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\"\r\n (ngModelChange)=\"reloadElements()\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input class=\"height-input w-input\" pInputText type=\"text\" (input)=\"table.filterGlobal($event, 'contains')\" placeholder=\"{{wappTableLazyLoadingObject.searchPlaceholder}}\" />\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableLazyLoadingObject.hasColumnFilters && wappTableLazyLoadingObject.hasCheckbox; else noCheckbox\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-center'\">\r\n <p-tableHeaderCheckbox *ngIf=\"wappTableLazyLoadingObject.hasSelectAllCheckbox == true\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <ng-template #noCheckbox><th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\"></th></ng-template>\r\n\r\n <ng-container *ngIf=\"!wappTableLazyLoadingObject.hasSortableColumns; else something\">\r\n <th *ngFor=\"let header of wappTableLazyLoadingObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-template #something>\r\n <ng-template #something ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableLazyLoadingObject.sortableNames[i]\" [class]=\"wappTableLazyLoadingObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableLazyLoadingObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableLazyLoadingObject.sortableNames[i] != null\" [field]=\"wappTableLazyLoadingObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n\r\n <tr *ngIf=\"wappTableLazyLoadingObject.hasColumnFilters\">\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasCheckbox\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasImage\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0]) : getTableColumnAlignClassDefaultByColumnType(wappTableLazyLoadingObject.columnTypes[wappTableLazyLoadingObject.hasCheckbox ? 1 : 0])\">\r\n </th>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableLazyLoadingObject.columnFilterTypes\" let-i=\"index\">\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Text\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"text\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Multiselect\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter [field]=\"wappTableLazyLoadingObject.filterNames[i]\" matchMode=\"in\" [showMenu]=\"false\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" appendTo=\"body\" [options]=\"wappTableLazyLoadingObject.selectFilterElements[i]\" placeholder=\"Any\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" [maxSelectedLabels]=\"1\" [selectedItemsLabel]=\"'{0} items'\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-1\">{{option.name}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.None\"></th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Boolean\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\">\r\n <p-columnFilter type=\"boolean\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n <th *ngIf=\"filterType == tableColumnFilterTypes.Date\" [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\">\r\n <p-columnFilter type=\"date\" [field]=\"wappTableLazyLoadingObject.filterNames[i]\"></p-columnFilter>\r\n </th>\r\n </ng-template>\r\n <th *ngIf=\"wappTableLazyLoadingObject.hasDeleteButton || wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasViewButton || wappTableLazyLoadingObject.hasCopyButton || wappTableLazyLoadingObject?.hasCustomButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element let-index=\"index\">\r\n <tr *ngIf=\"!loading\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableLazyLoadingObject.columnTypes\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" class=\"text-center\">\r\n <div *ngIf=\"wappTableLazyLoadingObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <img *ngIf=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-right'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-badge [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ColoredBadge\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <div *ngFor=\"let badge of wappTableLazyLoadingObject.coloredBadge; index as ind\">\r\n <w-badge *ngIf=\"badge.coloredBadgeProperty == readProperty(element, wappTableLazyLoadingObject.columns[i])\" \r\n [label]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [color]=\"badge.color ? badge.color : 'info'\">\r\n </w-badge> \r\n </div> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableLazyLoadingObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ShortDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.d }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.LongDate\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.D }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeShortTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\"\r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.g }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeLongTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.G }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.BuisinessDateTime\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-left'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n {{ readProperty(element, wappTableLazyLoadingObject.columns[i]) | wappDate : wappDateFormat.Business }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Week\" [style]=\"'width: '+wappTableLazyLoadingObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableLazyLoadingObject.columnAlign ? getTableColumnAlignClass(wappTableLazyLoadingObject.columnAlign[i]) : 'text-center'\"\r\n (click)=\"wappTableLazyLoadingObject.hasClickableRow ? viewElement(element) : ''\" [class]=\"wappTableLazyLoadingObject.hasClickableRow ? 'w-table-lazy-selectable-row' : ''\">\r\n <w-button-week [value]=\"readProperty(element, wappTableLazyLoadingObject.columns[i])\" [translations]=\"wappTableLazyLoadingObject.weekButtonTranslations ? wappTableLazyLoadingObject.weekButtonTranslations : []\" [defaultEsp]=\"wappTableLazyLoadingObject.weekButtonDefaultEsp ?? false\"></w-button-week>\r\n </td>\r\n </ng-template>\r\n <td>\r\n <div class=\"w-table-buttons flex justify-content-end align-items-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasViewButton\" \r\n (onClick)=\"viewElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\" \r\n icon=\"pi-eye\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button *ngIf=\"!customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n <w-button *ngIf=\"customButtonConfig?.disableProperty\"\r\n (onClick)=\"customElement({buttonId: customButtonConfig.buttonId, element: element})\" \r\n [disabled]=\"readProperty(element, customButtonConfig?.disableProperty!)\"\r\n [icon]=\"customButtonConfig?.icon!\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n type=\"table\" \r\n [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && !wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.hasEditButton && wappTableLazyLoadingObject.disableEditProperty\" \r\n (onClick)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableEditProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasCopyButton\" \r\n (onClick)=\"confirmCopy($event, element)\" \r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-copy\" type=\"table\" buttonClass=\"w-table-button-view\">\r\n </w-button>\r\n <span *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject.disableDeleteProperty; else noDisableDelete\" \r\n (onClick)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableLazyLoadingObject.disableDeleteProperty)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n <ng-template #noDisableDelete>\r\n <w-button (onClick)=\"confirmDelete($event, element)\"\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableLazyLoadingObject.buttonTooltips?.position!\"\r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr height=\"70px\" *ngFor=\"let n of [0,1,2,3,4]\">\r\n <td *ngFor=\"let item of wappTableLazyLoadingObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableLazyLoadingObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item == tableColumnTypes.Image\" width=\"6rem\" height=\"4rem\"></p-skeleton>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox && item != tableColumnTypes.Image\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableLazyLoadingObject.hasEditButton || wappTableLazyLoadingObject.hasDeleteButton\">\r\n <div class=\"w-table-buttons flex justify-content-end\">\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasEditButton\" \r\n icon=\"pi-pencil\" type=\"table\" buttonClass=\"w-table-button-edit\">\r\n </w-button>\r\n <ng-template *ngIf=\"wappTableLazyLoadingObject?.hasCustomButton\" ngFor let-customButtonConfig [ngForOf]=\"wappTableLazyLoadingObject.customButtonConfig\" let-i=\"index\"> \r\n <w-button\r\n [tooltip]=\"wappTableLazyLoadingObject.buttonTooltips?.customTooltip![i]\"\r\n [icon]=\"customButtonConfig?.icon!\" type=\"table\" [buttonClass]=\"'w-table-button-view ' + getButtonCustomColorClass(customButtonConfig.color!)\">\r\n </w-button>\r\n </ng-template>\r\n <w-button *ngIf=\"wappTableLazyLoadingObject?.hasDeleteButton\" \r\n icon=\"pi-trash\" type=\"table\" buttonClass=\"w-table-button-delete\">\r\n </w-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"w-table-lazy-empty-message-padding\">\r\n <td [attr.colspan]=\"calculateColspan()\">{{wappTableLazyLoadingObject.emptyMessage ? wappTableLazyLoadingObject.emptyMessage : 'No matches.'}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:2.6666666667rem;line-height:3rem;font-weight:700}.heading2{font-size:2.3333333333rem;line-height:2.6666666667rem;font-weight:700}.heading3{font-size:2rem;line-height:2.3333333333rem;font-weight:700}.heading4{font-size:1.6666666667rem;line-height:2rem;font-weight:700}.heading5,.w-sidebar-title-text{font-size:1.5rem;line-height:1.8333333333rem;font-weight:700}.heading6{font-size:1.3333333333rem;line-height:1.6666666667rem;font-weight:700}.subtitle1,.w-tab-text,.w-panel-title-text{font-size:1.1666666667rem;line-height:1.3333333333rem;font-weight:700}.subtitle2,.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th,.w-panel-subtitle-text,.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled,.w-view-small-label-text-typography,.w-view-small-label-text,.w-button-small-text-label-text-typography,.w-button-small-text-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:600}.body,.w-image-file-uploader-navigators-text,.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td,.w-chip-text,.w-panel-content,.w-input-small-select-options-text,.w-input-small-placeholder-text-typography,.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text,.w-input,.w-view-small-value-text-typography,.w-view-small-value-text,.w-button-small-label-text-typography,.w-button-small-tertiary-label-text{font-size:1rem;line-height:1.1666666667rem;font-weight:400}.caption,.w-input-error-alert-text,.w-input-warning-alert-text,.w-input-success-alert-text{font-size:.6666666667rem;line-height:1rem;font-weight:400}.light,.w-input-small-placeholder-text-only-color{font-size:.9166666667rem;line-height:1.0833333333rem;font-weight:300}.small,.w-button-small-label-text-typography-sm{font-size:.8333333333rem;line-height:1rem;font-weight:400}.textMainColor{color:#1f2224}.textSoftColor{color:#5f6468}.textSofterColor{color:#9aa0a7}.textSoftestColor{color:#e8ebee}.textInverseColor{color:#fff}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXSMDivider{height:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.panel-title-gap-divider{height:20px}.panel-section-gap-divider{height:32px}.input-vertical-gap-divider{height:24px}.input-label-gap-divider{height:6px}.focusedInput,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{border:1px solid rgba(0,157,253,.25);box-shadow:0 0 10px #00b3eb40}.focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b3eb}.hoveredInput{border-radius:8px;border:1px solid rgba(0,179,235,.5)}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-button-small-label-text-typography,.w-button-small-tertiary-label-text,.w-button-small-label-text-typography-sm{font-weight:600}.w-button-small-tertiary-label-text,.w-button-small-text-label-text{color:#1f2224}.w-button-small-icon-text{font-size:12px;font-weight:600}.w-table-button-small-icon-text{font-size:12px;color:#9aa0a7}.w-control-button-small-label-text{font-size:12px;font-weight:600;line-height:16px}.w-control-button-x-small-icon-text{font-size:10px;font-weight:700}.w-control-button-small-icon-text,::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}.w-button-medium-label-text-typography,.w-button-medium-tertiary-label-text{font-size:16px;font-weight:600;line-height:16px}.w-button-medium-tertiary-label-text{color:#1f2224}.w-button-medium-icon-text{font-size:16px}.w-control-button-medium-label-text{font-size:14px;font-weight:600;line-height:16px}.w-control-button-medium-icon-text{font-size:12px;font-weight:700}.w-button-large-label-text-typography,.w-button-large-tertiary-label-text{font-size:20px;font-weight:600;line-height:24px}.w-button-large-tertiary-label-text{color:#1f2224}.w-button-x-small-label-text{font-size:10px;font-weight:600;line-height:10px}.w-button-small-only-label-text{font-size:12px;font-weight:600;line-height:16px}.w-button-large-icon-text{font-size:24px}.w-view-small-label-text{color:#1f2224}.w-view-small-value-text{color:#5f6468}.w-input-no-label-height{height:14px}.w-input-disabled{background-color:#f1f3f4;border-color:#e8ebee;opacity:1}.w-input-small-label-text-typography,.w-input-small-label-text,.w-input-small-label-disabled{height:-moz-fit-content;height:fit-content}.w-input-small-label-text,.w-input-small-label-disabled{color:#1f2224}.w-input-small-label-disabled{color:#9aa0a7}.w-input-small-label-text-content{padding:12px 8px 8px 0;margin:0}.w-input-small-label-text-content-no-top{padding-top:0}.w-input-small-placeholder-text,.w-input{color:#1f2224}.w-input-small-placeholder-text-only-color{color:#9aa0a7;line-height:1.3333333333rem}.w-input-small-placeholder-text-disabled,.w-input-small-placeholder-text-disabled-only-color{color:#5f6468}.w-input-small-text-icon,.w-input-small-select-options-text{color:#1f2224}.w-input-medium-label-text-typography,.w-input-medium-label-text,.w-input-medium-label-disabled{font-size:14px;font-weight:600;line-height:16px}.w-input-medium-label-text,.w-input-medium-label-disabled{color:#1f2224}.w-input-medium-label-disabled{color:#9aa0a7}.w-input-medium-placeholder-text-typography,.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text{font-size:16px;font-weight:400;line-height:24px}.w-input-medium-placeholder-text,.w-input-medium-placeholder-text-only-color{color:#1f2224}.w-input-medium-placeholder-text-disabled,.w-input-medium-placeholder-text-disabled-only-color{color:#5f6468}.w-input-medium-text-icon{color:#1f2224}.w-input-medium-select-options-text{font-size:16px;font-weight:400;line-height:24px;color:#1f2224}.w-input-success-alert-text{color:#00db5d;padding:8px 8px 0;margin-top:0}.w-input-warning-alert-text{color:#eeae00;padding:8px 8px 0;margin-top:0}.w-input-error-alert-text{color:#e50000;padding:8px 8px 0;margin-top:0}.w-input-alert-message-height{height:32px}.w-sidebar-title-text,.w-panel-title-text,.w-panel-subtitle-text{color:#1f2224}.w-panel-content{color:#5f6468}.w-tab-text,.w-chip-text{color:#1f2224}.w-badge-text{font-size:10px;font-weight:700;line-height:8px}.w-table-th-text,::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#1f2224}.w-table-td-text,::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{color:#5f6468}.w-image-file-uploader-navigators-text{font-size:12px;color:#fff}.grid{margin:0}::ng-deep .p-tooltip,.p-tooltip{filter:0px 0px 1px 0px rgba(0,0,0,.1) inset,1px 1px 5px rgba(0,0,0,.06),1px 1px 1px rgba(0,0,0,.08)}::ng-deep .p-tooltip .p-tooltip-text,.p-tooltip .p-tooltip-text{background:#ffffff!important;color:#1f2224;padding:12px 16px;max-width:192px;width:max-content;margin-left:3px}::ng-deep .p-tooltip.p-tooltip-right,.p-tooltip.p-tooltip-right{margin-left:6px;width:max-content;transform:translateY(-1px)}::ng-deep .p-tooltip.p-tooltip-right .p-tooltip-arrow,.p-tooltip.p-tooltip-right .p-tooltip-arrow{border-right-color:#fff!important;top:50%;left:0;margin-top:-4px;border-width:4px 6px 4px 0!important}::ng-deep .p-tooltip.p-tooltip-bottom .p-tooltip-arrow,.p-tooltip.p-tooltip-bottom .p-tooltip-arrow{border-bottom-color:#fff!important;border-width:0 4px 6px 4px!important;margin-top:-3px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 0 1px #0000001a inset,0 4px 8px #005c7a0d,0 1px 3px #005c7a1a}.w-table-lazy-selectable-row{cursor:pointer}.showing-per-page{color:#9aa0a7;font-weight:400}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a7;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0px;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a7;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a7}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:400}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8ebee;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8ebee;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:6px 8px 5px}::ng-deep .w-table-no-buttons .p-datatable .p-datatable-tbody>tr>td{padding:16px 8px 15px!important}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b3eb;border:1px solid #e0f5fc}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b3eb;background:#00b3eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8ebee}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8ebee;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#1f2224}::ng-deep .w-table-styles .darkBlue1.p-button.p-button-icon-only>.p-button-icon{color:#0020c7!important}::ng-deep .w-table-styles .darkBlue2.p-button.p-button-icon-only>.p-button-icon{color:#4765ff!important}::ng-deep .w-table-styles .darkBlue3.p-button.p-button-icon-only>.p-button-icon{color:#adbaff!important}::ng-deep .w-table-styles .purple1.p-button.p-button-icon-only>.p-button-icon{color:#7b00c7!important}::ng-deep .w-table-styles .purple2.p-button.p-button-icon-only>.p-button-icon{color:#b947ff!important}::ng-deep .w-table-styles .purple3.p-button.p-button-icon-only>.p-button-icon{color:#e0adff!important}::ng-deep .w-table-styles .pink1.p-button.p-button-icon-only>.p-button-icon{color:#c700b3!important}::ng-deep .w-table-styles .pink2.p-button.p-button-icon-only>.p-button-icon{color:#ff61ef!important}::ng-deep .w-table-styles .pink3.p-button.p-button-icon-only>.p-button-icon{color:#ffadf7!important}::ng-deep .w-table-styles .green1.p-button.p-button-icon-only>.p-button-icon{color:#87c700!important}::ng-deep .w-table-styles .green2.p-button.p-button-icon-only>.p-button-icon{color:#ccff61!important}::ng-deep .w-table-styles .green3.p-button.p-button-icon-only>.p-button-icon{color:#e5ffad!important}::ng-deep .w-table-styles .error1.p-button.p-button-icon-only>.p-button-icon{color:#fb7c7c!important}::ng-deep .w-table-styles .error2.p-button.p-button-icon-only>.p-button-icon{color:#f55!important}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.image-header{text-align:center!important}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8ebee;gap:16px}::-webkit-input-placeholder{color:#5f6468}::-moz-placeholder{color:#5f6468}:-ms-input-placeholder{color:#5f6468}:-moz-placeholder{color:#5f6468}.w-input:hover{border-radius:8px!important;border:1px solid rgba(0,179,235,.5)!important}.w-input:focus{border:1px solid rgba(0,157,253,.25)!important;box-shadow:0 0 10px #00b3eb40!important;background-color:transparent!important}.pi-search{left:11px;color:#5f6468!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8ebee}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8ebee;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a7}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}::ng-deep .p-datatable .p-datatable-tbody>tr.w-table-lazy-empty-message-padding>td{padding:16px 12px 15px!important}::ng-deep .w-table-styles .p-disabled,.p-component:disabled{opacity:.3;box-shadow:none!important}.w-table-buttons{gap:12px}\n"] }]
297
300
  }], ctorParameters: function () { return [{ type: i1.ConfirmationService }]; }, propDecorators: { loading: [{
298
301
  type: Input,
299
302
  args: ['loading']
@@ -349,4 +352,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
349
352
  type: ViewChild,
350
353
  args: ['table', { static: false }]
351
354
  }] } });
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy10YWJsZS1sYXp5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXhKLE1BQU0sT0FBTyxtQkFBbUI7SUErQjlCLFlBQ1UsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUEvQmxELHFCQUFnQixHQUFVLEVBQUUsQ0FBQztRQUk3QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQyxtQkFBYyxHQUErQixtQkFBbUIsQ0FBQztRQUkzQyxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUd0QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUc1QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRTFELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0Qyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzVDLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEQsd0JBQW1CLEdBQUcsSUFBSSxZ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QUFLO3VCQUFDLGdCQUFnQjtnQkFDYywwQkFBMEI7c0JBQTlELEtBQUs7dUJBQUMsNEJBQTRCO2dCQUVWLGFBQWE7c0JBQXJDLE1BQU07dUJBQUMsZUFBZTtnQkFFSSxlQUFlO3NCQUF6QyxNQUFNO3VCQUFDLGlCQUFpQjtnQkFDTSxtQkFBbUI7c0JBQWpELE1BQU07dUJBQUMscUJBQXFCO2dCQUNJLHFCQUFxQjtzQkFBckQsTUFBTTt1QkFBQyx1QkFBdUI7Z0JBQ0EsbUJBQW1CO3NCQUFqRCxNQUFNO3VCQUFDLHFCQUFxQjtnQkFDRSxtQkFBbUI7c0JBQWpELE1BQU07dUJBQUMscUJBQXFCO2dCQUNJLHFCQUFxQjtzQkFBckQsTUFBTTt1QkFBQyx1QkFBdUI7Z0JBQ0Qsa0JBQWtCO3NCQUEvQyxNQUFNO3VCQUFDLG9CQUFvQjtnQkFDSixZQUFZO3NCQUFuQyxNQUFNO3VCQUFDLGNBQWM7Z0JBQ2Msd0JBQXdCO3NCQUEzRCxNQUFNO3VCQUFDLDBCQUEwQjtnQkFFSyxTQUFTO3NCQUEvQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgTGF6eUVsZW1lbnRRdWVyeVJlcXVlc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2xhenktZWxlbWVudC1xdWVyeS1yZXF1ZXN0Lm1vZGVsJztcclxuaW1wb3J0IHsgV2FwcFRhYmxlTGF6eUxvYWRpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3dhcHAtdGFibGUtbGF6eS1sb2FkaW5nLm1vZGVsJztcclxuaW1wb3J0IHsgQ3VzdG9tQ29sb3IsIFRhYmxlQ29sdW1uRmlsdGVyVHlwZXMsIFRhYmxlQ29sdW1uVHlwZXMsIFdEYXRlUGlwZUZvcm1hdFR5cGUsIFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2VudW1zLm1vZGVsJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ctdGFibGUtbGF6eScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ctdGFibGUtbGF6eS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdy10YWJsZS1sYXp5LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFdUYWJsZUxhenlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHNlbGVjdGVkRWxlbWVudHM6IGFueVtdID0gW107XHJcbiAgdHJhbnNsYXRpb25zOiBhbnk7XHJcbiAgbGFzdFF1ZXJ5ITogTGF6eUVsZW1lbnRRdWVyeVJlcXVlc3Q7XHJcblxyXG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlckVsZW1lbnRzSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgd2FwcERhdGVGb3JtYXQ6IHR5cGVvZiBXRGF0ZVBpcGVGb3JtYXRUeXBlID0gV0RhdGVQaXBlRm9ybWF0VHlwZTtcclxuXHJcbiAgQElucHV0KCdsb2FkaW5nJykgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCdlbGVtZW50cycpIGVsZW1lbnRzITogYW55W107XHJcbiAgQElucHV0KCdyb3dzUGVyUGFnZScpIHJvd3NQZXJQYWdlOiBudW1iZXIgPSAxMDtcclxuICBASW5wdXQoJ2FsbEVsZW1lbnRzJykgYWxsRWxlbWVudHMhOiBhbnlbXTtcclxuICBASW5wdXQoJ3RvdGFsUmVjb3JkcycpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcclxuICBASW5wdXQoJ21heFJvd3NQZXJQYWdlJykgbWF4Um93c1BlclBhZ2U6IG51bWJlciA9IDUwO1xyXG4gIEBJbnB1dCgnd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QnKSB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdCE6IFdhcHBUYWJsZUxhenlMb2FkaW5nO1xyXG5cclxuICBAT3V0cHV0KCdxdWVyeUVsZW1lbnRzJykgcXVlcnlFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8TGF6eUVsZW1lbnRRdWVyeVJlcXVlc3Q+KCk7XHJcblxyXG4gIEBPdXRwdXQoJ29uRWxlbWVudFNlbGVjdCcpIG9uRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uVmlld0VsZW1lbnRTZWxlY3QnKSBvblZpZXdFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25DdXN0b21FbGVtZW50U2VsZWN0Jykgb25DdXN0b21FbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25Db3B5RWxlbWVudFNlbGVjdCcpIG9uQ29weUVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkVkaXRFbGVtZW50U2VsZWN0Jykgb25FZGl0RWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uRGVsZXRlRWxlbWVudFNlbGVjdCcpIG9uRGVsZXRlRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgnb25BbGxFbGVtZW50U2VsZWN0Jykgb25BbGxFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoJ29uUGFnZUNoYW5nZScpIG9uUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uU2VsZWN0ZWRFbGVtZW50c0NoYW5nZScpIG9uU2VsZWN0ZWRFbGVtZW50c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSBkYXRhVGFibGUhOiBUYWJsZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBsb2FkRWxlbWVudHMoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgYWRhcHRlZFF1ZXJ5OiBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdCA9IHtcclxuICAgICAgZmlyc3Q6IGV2ZW50LmZpcnN0ISxcclxuICAgICAgcm93czogdGhpcy5yb3dzUGVyUGFnZSEsXHJcbiAgICAgIHNvcnRPcmRlcjogZXZlbnQuc29ydE9yZGVyISxcclxuICAgICAgc29ydEZpZWxkOiBldmVudC5zb3J0RmllbGQhLFxyXG4gICAgICBmaWx0ZXJzOiBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzISkubWFwKChrZXkpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY29sdW1uTmFtZToga2V5ISxcclxuICAgICAgICAgIHZhbHVlOiBldmVudC5maWx0ZXJzIVtrZXldLnZhbHVlLFxyXG4gICAgICAgICAgbWF0Y2hNb2RlOiBldmVudC5maWx0ZXJzIVtrZXldLm1hdGNoTW9kZSFcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RRdWVyeSA9IGFkYXB0ZWRRdWVyeTtcclxuICAgIHRoaXMucXVlcnlFbGVtZW50cy5lbWl0KGFkYXB0ZWRRdWVyeSk7XHJcbiAgfVxyXG5cclxuICByZWxvYWRFbGVtZW50cygpIHtcclxuICAgIHRoaXMubGFzdFF1ZXJ5LnJvd3MgPSB0aGlzLnJvd3NQZXJQYWdlO1xyXG4gICAgdGhpcy5xdWVyeUVsZW1lbnRzLmVtaXQodGhpcy5sYXN0UXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgcmVhZFByb3BlcnR5KG9iajogYW55LCBwcm9wOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKHByb3AgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHByb3Auc3BsaXQoJy4nKTtcclxuICAgIGxldCByZXN1bHQgPSBvYmo7XHJcblxyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gcHJvcGVydHkubWF0Y2goLyguKz8pXFxbKFxcZCspXFxdLyk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGFycmF5UHJvcCA9IG1hdGNoWzFdO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0W2FycmF5UHJvcF0pIHx8IGlzTmFOKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gcmVzdWx0W2FycmF5UHJvcF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgPSByZXN1bHRbYXJyYXlQcm9wXVtpbmRleF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbcHJvcGVydHldID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3Byb3BlcnR5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbkVsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uRWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgdmlld0VsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uVmlld0VsZW1lbnRTZWxlY3QuZW1pdChlbGVtZW50KTtcclxuICB9XHJcbiAgY3VzdG9tRWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25DdXN0b21FbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBlZGl0RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25FZGl0RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybURlbGV0ZVNlbGVjdGlvbihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1NdWx0aXBsZURlbGV0ZUxhYmVsLFxyXG4gICAgICBpY29uOiBcInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1EZWxldGVCdG5MYWJlbCxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVTZWxlY3RlZEVsZW1lbnRzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VsZWN0ZWRFbGVtZW50cygpIHtcclxuICAgIHRoaXMub25EZWxldGVFbGVtZW50U2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEVsZW1lbnRzKVxyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gW107XHJcbiAgfVxyXG5cclxuICBjb25maXJtRGVsZXRlKGV2ZW50OiBFdmVudCwgZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1TaW5nbGVEZWxldGVMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtRGVsZXRlQnRuTGFiZWwsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlU2luZ2xlRWxlbWVudChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTaW5nbGVFbGVtZW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnRTZWxlY3QuZW1pdChbZWxlbWVudF0pXHJcbiAgfVxyXG5cclxuICBjb3B5RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25Db3B5RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUNvcHkoZXZlbnQ6IEV2ZW50LCBlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRXZlbnRUYXJnZXQsXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29uZmlybUNvcHlMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtQ29weUJ0bkxhYmVsLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvcHlFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHZhbHVlID0gW10pIHtcclxuICAgIHRoaXMuc2VsZWN0QWxsID0gdmFsdWUubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3JkcztcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5vblNlbGVjdGVkRWxlbWVudHNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRWxlbWVudHMpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcblxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5vbkFsbEVsZW1lbnRTZWxlY3QuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3ggPyB0aGlzLmdldFNlbGVjdGFibGVFbGVtZW50cyh0aGlzLmFsbEVsZW1lbnRzKSA6IHRoaXMuYWxsRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5vblNlbGVjdGVkRWxlbWVudHNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRWxlbWVudHMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0YWJsZUVsZW1lbnRzKGFsbEVsZW1lbnRzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGFsbEVsZW1lbnRzLmZpbHRlcigoZWxlbWVudDogYW55KSA9PiAhdGhpcy5yZWFkUHJvcGVydHkoZWxlbWVudCwgdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3ghKSk7XHJcbiAgfVxyXG5cclxuICBnZXRCb29sZWFuQ29sdW1uQ2xhc3MoaW5kZXg6IG51bWJlciwgdmFsdWVQcm9wZXJ0eTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgYm9vbGVhbkljb25DbGFzc2VzID0gW107XHJcblxyXG4gICAgaWYgKHZhbHVlUHJvcGVydHkgPT0gdHJ1ZSkge1xyXG4gICAgICBib29sZWFuSWNvbkNsYXNzZXMucHVzaCh0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLnRydWVJY29uID8/ICcnKTtcclxuICAgICAgYm9vbGVhbkljb25DbGFzc2VzLnB1c2godGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS50cnVlSWNvbkNvbG9yID8/ICcnKTtcclxuICAgIH0gZWxzZSBpZiAodmFsdWVQcm9wZXJ0eSA9PSBmYWxzZSkge1xyXG4gICAgICBib29sZWFuSWNvbkNsYXNzZXMucHVzaCh0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLmZhbHNlSWNvbiA/PyAnJyk7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQm9vbGVhblR5cGVJY29uc1tpbmRleF0uZmFsc2VJY29uQ29sb3IpID8/ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZVByb3BlcnR5ID09IG51bGwpIHtcclxuICAgICAgYm9vbGVhbkljb25DbGFzc2VzLnB1c2godGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS5udWxsSWNvbiA/PyAnJyk7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQm9vbGVhblR5cGVJY29uc1tpbmRleF0ubnVsbEljb25Db2xvciA/PyAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJvb2xlYW5JY29uQ2xhc3NlcztcclxuICB9XHJcblxyXG4gIGNsZWFyKHRhYmxlOiBUYWJsZSkge1xyXG4gICAgdGFibGUuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGFibGVDb2x1bW5GaWx0ZXJUeXBlcygpOiB0eXBlb2YgVGFibGVDb2x1bW5GaWx0ZXJUeXBlcyB7XHJcbiAgICByZXR1cm4gVGFibGVDb2x1bW5GaWx0ZXJUeXBlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGFibGVDb2x1bW5UeXBlcygpOiB0eXBlb2YgVGFibGVDb2x1bW5UeXBlcyB7XHJcbiAgICByZXR1cm4gVGFibGVDb2x1bW5UeXBlcztcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVycygpIHtcclxuICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3MoYWxpZ25tZW50OiBudW1iZXIpIHtcclxuICAgIGlmKGFsaWdubWVudCA9PSBXYXBwVGFibGVDb2x1bW5BbGlnblR5cGVzLlJpZ2h0KSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuTGVmdCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuQ2VudGVyKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIHJldHVybiAndGV4dC1sZWZ0J1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzRGVmYXVsdEJ5Q29sdW1uVHlwZShjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGVzKSB7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuVGV4dCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkN1cnJlbmN5KSByZXR1cm4gJ3RleHQtbGVmdCc7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuRGF0ZSkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkJhZGdlKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5Cb29sZWFuKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5JbWFnZSkgcmV0dXJuICd0ZXh0LWNlbnRlcic7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuTnVtYmVyKSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgcmV0dXJuICd0ZXh0LWxlZnQnXHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVDb2xzcGFuKCkge1xyXG4gICAgbGV0IGNvbHNwYW4gPSB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmhlYWRlcnMubGVuZ3RoO1xyXG4gICAgdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveCA/IFxyXG4gICAgICBjb2xzcGFuICs9IDEgOiAnJztcclxuICAgICAgdGhpcy5oYXNBY3Rpb25CdXR0b25zKCkgP1xyXG4gICAgICAgIGNvbHNwYW4gKz0gMSA6ICcnO1xyXG4gICAgICByZXR1cm4gY29sc3BhbjtcclxuICB9XHJcblxyXG4gIGhhc0FjdGlvbkJ1dHRvbnMoKSA6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ29weUJ1dHRvbiB8fFxyXG4gICAgICAgICAgICB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHxcclxuICAgICAgICAgICAgdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNWaWV3QnV0dG9uIHx8XHJcbiAgICAgICAgICAgIHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uIHx8IFxyXG4gICAgICAgICAgICB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b24gP1xyXG4gICAgICAgICAgdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFBhZ2luYXRpb24oZmlyc3Q6IG51bWJlcikge1xyXG4gICAgdGhpcy5kYXRhVGFibGUuX2ZpcnN0ID0gZmlyc3Q7XHJcbiAgfVxyXG5cclxuICBwYWdlQ2hhbmdlKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdChlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbkN1c3RvbUNvbG9yQ2xhc3MoY3VzdG9tQ29sb3I6IEN1c3RvbUNvbG9yKSB7XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5kYXJrQmx1ZTEpIHsgcmV0dXJuICdkYXJrQmx1ZTEnIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLmRhcmtCbHVlMikgeyByZXR1cm4gJ2RhcmtCbHVlMicgfVxyXG4gICAgaWYoY3VzdG9tQ29sb3IgPT0gQ3VzdG9tQ29sb3IuZGFya0JsdWUzKSB7IHJldHVybiAnZGFya0JsdWUzJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5wdXJwbGUxKSB7IHJldHVybiAncHVycGxlMScgfVxyXG4gICAgaWYoY3VzdG9tQ29sb3IgPT0gQ3VzdG9tQ29sb3IucHVycGxlMikgeyByZXR1cm4gJ3B1cnBsZTInIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLnB1cnBsZTMpIHsgcmV0dXJuICdwdXJwbGUzJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5waW5rMSkgeyByZXR1cm4gJ3BpbmsxJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5waW5rMikgeyByZXR1cm4gJ3BpbmsyJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5waW5rMykgeyByZXR1cm4gJ3BpbmszJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5ncmVlbjEpIHsgcmV0dXJuICdncmVlbjEnIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLmdyZWVuMikgeyByZXR1cm4gJ2dyZWVuMicgfVxyXG4gICAgaWYoY3VzdG9tQ29sb3IgPT0gQ3VzdG9tQ29sb3IuZ3JlZW4zKSB7IHJldHVybiAnZ3JlZW4zJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5lcnJvcjEpIHsgcmV0dXJuICdlcnJvcjEnIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLmVycm9yMikgeyByZXR1cm4gJ2Vycm9yMicgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCIuZmlsdGVyLXBhbmVsXCI+PC9uZy1jb250ZW50PlxyXG48ZGl2ICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3RcIiBbY2xhc3MudGFibGUtY29udGFpbmVyXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnRhYmxlQ29udGFpbmVyXCI+XHJcbiAgICA8cC10YWJsZSBjbGFzcz1cInctdGFibGUtc3R5bGVzXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd3LXRhYmxlLW5vLWJ1dHRvbnMnIDogIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gJiYgIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiAmJiAhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ29weUJ1dHRvbiAmJiAhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY3VzdG9tQnV0dG9uQ29uZmlnICYmICF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNWaWV3QnV0dG9uIH1cIlxyXG4gICAgICAgICAgICAjdGFibGUgW3ZhbHVlXT1cImVsZW1lbnRzXCIgXHJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmlkZW50aWZpY2F0b3J9fVwiXHJcbiAgICAgICAgICAgIFtsYXp5XT1cInRydWVcIiBcclxuICAgICAgICAgICAgKG9uTGF6eUxvYWQpPVwibG9hZEVsZW1lbnRzKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGVkRWxlbWVudHNcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzUGFnaW5hdG9yISAmJiB0b3RhbFJlY29yZHMgPj0gMTBcIlxyXG4gICAgICAgICAgICBbcm93c109XCJyb3dzUGVyUGFnZVwiIFxyXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZV09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlID8gd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZSArICcgJyArICByb3dzUGVyUGFnZSArICcgZGUgJyArIHRvdGFsUmVjb3JkcyEgOiAnU2hvd2luZyAnICsgcm93c1BlclBhZ2UgKyAnIG9mICcgKyB0b3RhbFJlY29yZHMhXCJcclxuICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmdsb2JhbEZpbHRlckZpZWxkcyFcIlxyXG4gICAgICAgICAgICBbdGFibGVTdHlsZV09XCJ7J21pbi13aWR0aCc6IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnRhYmxlTWluV2lkdGghfVwiXHJcbiAgICAgICAgICAgIChvblBhZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGVhckJ1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNHbG9iYWxTZWFyY2hcIiBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtcGFnaW5hdG9yIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNUb3RhbFBhZ2luZ1NlbGVjdG9yXCIgY2xhc3M9XCJzaG93aW5nLXBlci1wYWdlXCI+IHt7d2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzVG90YWxQYWdpbmdTZWxlY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwbC0yIHNob3dpbmctcGVyLXBhZ2VcIiBbc2l6ZV09XCIxXCIgWyhuZ01vZGVsKV09XCJyb3dzUGVyUGFnZVwiIFtzaG93QnV0dG9uc109XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGF5b3V0PVwiaG9yaXpvbnRhbFwiIGlucHV0SWQ9XCJob3Jpem9udGFsXCIgc3Bpbm5lck1vZGU9XCJob3Jpem9udGFsXCIgW3N0ZXBdPVwiMVwiIFttaW5dPVwiMVwiIFttYXhdPVwibWF4Um93c1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25DbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QnV0dG9uSWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBkZWNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktbWludXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZGVjaW1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVsb2FkRWxlbWVudHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzR2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdCBtbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaGVpZ2h0LWlucHV0IHctaW5wdXRcIiBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cInRhYmxlLmZpbHRlckdsb2JhbCgkZXZlbnQsICdjb250YWlucycpXCIgcGxhY2Vob2xkZXI9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnNlYXJjaFBsYWNlaG9sZGVyfX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIiF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb2x1bW5GaWx0ZXJzICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94OyBlbHNlIG5vQ2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25bMF0pIDogJ3RleHQtY2VudGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9DaGVja2JveD48dGggKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveFwiPjwvdGg+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzU29ydGFibGVDb2x1bW5zOyBlbHNlIHNvbWV0aGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/LmhlYWRlcnM7IGluZGV4IGFzIGlcIiBbY2xhc3NdPVwiaGVhZGVyID09ICgnSW1hZ2VuJyB8fCAnSW1hZ2UnKSA/ICdpbWFnZS1oZWFkZXInOiAnJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnblt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveCA/IGkrMSA6IGldKSA6IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzc0RlZmF1bHRCeUNvbHVtblR5cGUod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uVHlwZXNbd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3ggPyBpKzEgOiBpXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2hlYWRlcn19XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29tZXRoaW5nPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzb21ldGhpbmcgbmdGb3IgbGV0LWZpbHRlclR5cGUgW25nRm9yT2ZdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGVhZGVyc1wiIGxldC1pPVwiaW5kZXhcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIFtwU29ydGFibGVDb2x1bW5dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc29ydGFibGVOYW1lc1tpXVwiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oZWFkZXJzW2ldID09ICgnSW1hZ2VuJyB8fCAnSW1hZ2UnKSA/ICdpbWFnZS1oZWFkZXInOiAnJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25bd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3ggPyBpKzEgOiBpXSkgOiBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3NEZWZhdWx0QnlDb2x1bW5UeXBlKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtblR5cGVzW3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94ID8gaSsxIDogaV0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oZWFkZXJzW2ldfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5zb3J0YWJsZU5hbWVzW2ldICE9IG51bGxcIiBbZmllbGRdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc29ydGFibGVOYW1lc1tpXVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzVmlld0J1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb3B5QnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b25cIj48L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgIDx0ciAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NvbHVtbkZpbHRlcnNcIj5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3hcIiBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnblswXSkgOiAndGV4dC1sZWZ0J1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzSW1hZ2VcIiBcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94ID8gMSA6IDBdKSA6IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzc0RlZmF1bHRCeUNvbHVtblR5cGUod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uVHlwZXNbd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3ggPyAxIDogMF0pXCI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtZmlsdGVyVHlwZSBbbmdGb3JPZl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5GaWx0ZXJUeXBlc1wiIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5UZXh0XCIgXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciB0eXBlPVwidGV4dFwiIFtmaWVsZF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5maWx0ZXJOYW1lc1tpXVwiPjwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiZmlsdGVyVHlwZSA9PSB0YWJsZUNvbHVtbkZpbHRlclR5cGVzLk11bHRpc2VsZWN0XCIgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtuZ01vZGVsXT1cInZhbHVlXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc2VsZWN0RmlsdGVyRWxlbWVudHNbaV1cIiBwbGFjZWhvbGRlcj1cIkFueVwiIChvbkNoYW5nZSk9XCJmaWx0ZXIoJGV2ZW50LnZhbHVlKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIFttYXhTZWxlY3RlZExhYmVsc109XCIxXCIgW3NlbGVjdGVkSXRlbXNMYWJlbF09XCInezB9IGl0ZW1zJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtcmVwcmVzZW50YXRpdmUtb3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTFcIj57e29wdGlvbi5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJmaWx0ZXJUeXBlID09IHRhYmxlQ29sdW1uRmlsdGVyVHlwZXMuTm9uZVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJmaWx0ZXJUeXBlID09IHRhYmxlQ29sdW1uRmlsdGVyVHlwZXMuQm9vbGVhblwiIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWNlbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgdHlwZT1cImJvb2xlYW5cIiBbZmllbGRdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZmlsdGVyTmFtZXNbaV1cIj48L3AtY29sdW1uRmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5EYXRlXCIgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgdHlwZT1cImRhdGVcIiBbZmllbGRdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZmlsdGVyTmFtZXNbaV1cIj48L3AtY29sdW1uRmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzVmlld0J1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb3B5QnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b25cIj48L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZWxlbWVudCBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgICAgIDx0ciAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5UeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtblR5cGVzXCIgbGV0LWk9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQ2hlY2tib3ggJiYgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3hcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3g7IGVsc2UgYWN0aXZlQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJlbGVtZW50XCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3gpXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWN0aXZlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiZWxlbWVudFwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWxlbWVudC1pbWFnZS13aWR0aFwiLz5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLlRleHRcIiAgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/IHZpZXdFbGVtZW50KGVsZW1lbnQpIDogJydcIiBbY2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gJ3ctdGFibGUtbGF6eS1zZWxlY3RhYmxlLXJvdycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5OdW1iZXJcIiAgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtcmlnaHQnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5zW2ldKSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQ3VycmVuY3lcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSkgfCBjdXJyZW5jeSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQmFkZ2VcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1jZW50ZXInXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIDx3LWJhZGdlIFtsYWJlbF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSlcIiBbY29sb3JdPVwiJ2luZm8nXCI+PC93LWJhZGdlPiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQ29sb3JlZEJhZGdlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBiYWRnZSBvZiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2xvcmVkQmFkZ2U7IGluZGV4IGFzIGluZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3LWJhZGdlICpuZ0lmPVwiYmFkZ2UuY29sb3JlZEJhZGdlUHJvcGVydHkgPT0gcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgW2NvbG9yXT1cImJhZGdlLmNvbG9yID8gYmFkZ2UuY29sb3IgOiAnaW5mbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3ctYmFkZ2U+ICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkJvb2xlYW5cIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1jZW50ZXInXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJnZXRCb29sZWFuQ29sdW1uQ2xhc3MoaSwgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pKVwiPjwvaT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkRhdGVcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSkgfCB3YXBwRGF0ZSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuU2hvcnREYXRlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/IHZpZXdFbGVtZW50KGVsZW1lbnQpIDogJydcIiBbY2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gJ3ctdGFibGUtbGF6eS1zZWxlY3RhYmxlLXJvdycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pIHwgd2FwcERhdGUgOiB3YXBwRGF0ZUZvcm1hdC5kIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5Mb25nRGF0ZVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uV2lkdGhzW2ldXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5zW2ldKSB8IHdhcHBEYXRlIDogd2FwcERhdGVGb3JtYXQuRCB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuR2VuZXJhbERhdGVUaW1lU2hvcnRUaW1lXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/IHZpZXdFbGVtZW50KGVsZW1lbnQpIDogJydcIiBbY2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gJ3ctdGFibGUtbGF6eS1zZWxlY3RhYmxlLXJvdycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pIHwgd2FwcERhdGUgOiB3YXBwRGF0ZUZvcm1hdC5nIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5HZW5lcmFsRGF0ZVRpbWVMb25nVGltZVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uV2lkdGhzW2ldXCIgXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSkgfCB3YXBwRGF0ZSA6IHdhcHBEYXRlRm9ybWF0LkcgfX1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkJ1aXNpbmVzc0RhdGVUaW1lXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIiBcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5zW2ldKSB8IHdhcHBEYXRlIDogd2FwcERhdGVGb3JtYXQuQnVzaW5lc3MgfX1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLldlZWtcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24td2VlayBbdmFsdWVdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgW3RyYW5zbGF0aW9uc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC53ZWVrQnV0dG9uVHJhbnNsYXRpb25zID8gd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Qud2Vla0J1dHRvblRyYW5zbGF0aW9ucyA6IFtdXCIgW2RlZmF1bHRFc3BdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Qud2Vla0J1dHRvbkRlZmF1bHRFc3AgPz8gZmFsc2VcIj48L3ctYnV0dG9uLXdlZWs+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbnMgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWVuZFwiPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzVmlld0J1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInZpZXdFbGVtZW50KGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8udmlld1Rvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIiBcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktZXllXCIgdHlwZT1cInRhYmxlXCIgYnV0dG9uQ2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbi12aWV3XCI+XHJcbiAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b25cIiBuZ0ZvciBsZXQtY3VzdG9tQnV0dG9uQ29uZmlnIFtuZ0Zvck9mXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmN1c3RvbUJ1dHRvbkNvbmZpZ1wiIGxldC1pPVwiaW5kZXhcIj4gXHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCIhY3VzdG9tQnV0dG9uQ29uZmlnPy5kaXNhYmxlUHJvcGVydHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJjdXN0b21FbGVtZW50KHtidXR0b25JZDogY3VzdG9tQnV0dG9uQ29uZmlnLmJ1dHRvbklkLCBlbGVtZW50OiBlbGVtZW50fSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjdXN0b21CdXR0b25Db25maWc/Lmljb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmN1c3RvbVRvb2x0aXAhW2ldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8ucG9zaXRpb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRhYmxlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25DbGFzc109XCIndy10YWJsZS1idXR0b24tdmlldyAnICsgZ2V0QnV0dG9uQ3VzdG9tQ29sb3JDbGFzcyhjdXN0b21CdXR0b25Db25maWcuY29sb3IhKVwiPlxyXG4gICAgICAgICAgICAgICAgPC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiAqbmdJZj1cImN1c3RvbUJ1dHRvbkNvbmZpZz8uZGlzYWJsZVByb3BlcnR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiY3VzdG9tRWxlbWVudCh7YnV0dG9uSWQ6IGN1c3RvbUJ1dHRvbkNvbmZpZy5idXR0b25JZCwgZWxlbWVudDogZWxlbWVudH0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgY3VzdG9tQnV0dG9uQ29uZmlnPy5kaXNhYmxlUHJvcGVydHkhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImN1c3RvbUJ1dHRvbkNvbmZpZz8uaWNvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8uY3VzdG9tVG9vbHRpcCFbaV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGFibGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvbkNsYXNzXT1cIid3LXRhYmxlLWJ1dHRvbi12aWV3ICcgKyBnZXRCdXR0b25DdXN0b21Db2xvckNsYXNzKGN1c3RvbUJ1dHRvbkNvbmZpZy5jb2xvciEpXCI+XHJcbiAgICAgICAgICAgICAgICA8L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uICYmICF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRWRpdFByb3BlcnR5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZWRpdEVsZW1lbnQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5lZGl0VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpLXBlbmNpbFwiIHR5cGU9XCJ0YWJsZVwiIGJ1dHRvbkNsYXNzPVwidy10YWJsZS1idXR0b24tZWRpdFwiPlxyXG4gICAgICAgICAgICA8L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJlZGl0RWxlbWVudChlbGVtZW50KVwiIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZUVkaXRQcm9wZXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5lZGl0VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpLXBlbmNpbFwiIHR5cGU9XCJ0YWJsZVwiIGJ1dHRvbkNsYXNzPVwidy10YWJsZS1idXR0b24tZWRpdFwiPlxyXG4gICAgICAgICAgICA8L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzQ29weUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImNvbmZpcm1Db3B5KCRldmVudCwgZWxlbWVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8uY29weVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaS1jb3B5XCIgdHlwZT1cInRhYmxlXCIgYnV0dG9uQ2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbi12aWV3XCI+XHJcbiAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/Lmhhc0RlbGV0ZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZURlbGV0ZVByb3BlcnR5OyBlbHNlIG5vRGlzYWJsZURlbGV0ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJjb25maXJtRGVsZXRlKCRldmVudCwgZWxlbWVudClcIiBbZGlzYWJsZWRdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVEZWxldGVQcm9wZXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8uZGVsZXRlVG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktdHJhc2hcIiB0eXBlPVwidGFibGVcIiBidXR0b25DbGFzcz1cInctdGFibGUtYnV0dG9uLWRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EaXNhYmxlRGVsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiAob25DbGljayk9XCJjb25maXJtRGVsZXRlKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmRlbGV0ZVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktdHJhc2hcIiB0eXBlPVwidGFibGVcIiBidXR0b25DbGFzcz1cInctdGFibGUtYnV0dG9uLWRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibG9hZGluZ2JvZHlcIj5cclxuICAgICAgICAgICAgPHRyIGhlaWdodD1cIjcwcHhcIiAqbmdGb3I9XCJsZXQgbiBvZiBbMCwxLDIsMyw0XVwiPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtblR5cGVzXCIgW3N0eWxlLndpZHRoXT1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCA/ICc4cmVtJyA6ICcnXCIgPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCAqbmdJZj1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCAmJiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveFwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gKm5nSWY9XCJpdGVtID09IHRhYmxlQ29sdW1uVHlwZXMuSW1hZ2VcIiB3aWR0aD1cIjZyZW1cIiBoZWlnaHQ9XCI0cmVtXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gKm5nSWY9XCJpdGVtICE9IHRhYmxlQ29sdW1uVHlwZXMuQ2hlY2tib3ggJiYgaXRlbSAhPSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy10YWJsZS1idXR0b25zIGZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNFZGl0QnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktcGVuY2lsXCIgdHlwZT1cInRhYmxlXCIgYnV0dG9uQ2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbi1lZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzQ3VzdG9tQnV0dG9uXCIgbmdGb3IgbGV0LWN1c3RvbUJ1dHRvbkNvbmZpZyBbbmdGb3JPZl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXN0b21CdXR0b25Db25maWdcIiBsZXQtaT1cImluZGV4XCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5jdXN0b21Ub29sdGlwIVtpXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjdXN0b21CdXR0b25Db25maWc/Lmljb24hXCIgdHlwZT1cInRhYmxlXCIgW2J1dHRvbkNsYXNzXT1cIid3LXRhYmxlLWJ1dHRvbi12aWV3ICcgKyBnZXRCdXR0b25DdXN0b21Db2xvckNsYXNzKGN1c3RvbUJ1dHRvbkNvbmZpZy5jb2xvciEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzRGVsZXRlQnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktdHJhc2hcIiB0eXBlPVwidGFibGVcIiBidXR0b25DbGFzcz1cInctdGFibGUtYnV0dG9uLWRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cInctdGFibGUtbGF6eS1lbXB0eS1tZXNzYWdlLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY2FsY3VsYXRlQ29sc3BhbigpXCI+e3t3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5lbXB0eU1lc3NhZ2UgPyB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5lbXB0eU1lc3NhZ2UgOiAnTm8gbWF0Y2hlcy4nfX08L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRhYmxlPlxyXG48L2Rpdj5cclxuPHAtY29uZmlybVBvcHVwPjwvcC1jb25maXJtUG9wdXA+Il19
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy10YWJsZS1sYXp5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlLWxhenkvdy10YWJsZS1sYXp5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXhKLE1BQU0sT0FBTyxtQkFBbUI7SUErQjlCLFlBQ1UsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUEvQmxELHFCQUFnQixHQUFVLEVBQUUsQ0FBQztRQUk3QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQyxtQkFBYyxHQUErQixtQkFBbUIsQ0FBQztRQUkzQyxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUd0QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUc1QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRTFELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0Qyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzVDLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEQsd0JBQW1CLEdBQUcsSUFBSSxZ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c0JBQWhDLEtBQUs7dUJBQUMsYUFBYTtnQkFDRSxXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWE7Z0JBQ0csWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNJLGNBQWM7c0JBQXRDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUNjLDBCQUEwQjtzQkFBOUQsS0FBSzt1QkFBQyw0QkFBNEI7Z0JBRVYsYUFBYTtzQkFBckMsTUFBTTt1QkFBQyxlQUFlO2dCQUVJLGVBQWU7c0JBQXpDLE1BQU07dUJBQUMsaUJBQWlCO2dCQUNNLG1CQUFtQjtzQkFBakQsTUFBTTt1QkFBQyxxQkFBcUI7Z0JBQ0kscUJBQXFCO3NCQUFyRCxNQUFNO3VCQUFDLHVCQUF1QjtnQkFDQSxtQkFBbUI7c0JBQWpELE1BQU07dUJBQUMscUJBQXFCO2dCQUNFLG1CQUFtQjtzQkFBakQsTUFBTTt1QkFBQyxxQkFBcUI7Z0JBQ0kscUJBQXFCO3NCQUFyRCxNQUFNO3VCQUFDLHVCQUF1QjtnQkFDRCxrQkFBa0I7c0JBQS9DLE1BQU07dUJBQUMsb0JBQW9CO2dCQUNKLFlBQVk7c0JBQW5DLE1BQU07dUJBQUMsY0FBYztnQkFDYyx3QkFBd0I7c0JBQTNELE1BQU07dUJBQUMsMEJBQTBCO2dCQUVLLFNBQVM7c0JBQS9DLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvbGF6eS1lbGVtZW50LXF1ZXJ5LXJlcXVlc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBXYXBwVGFibGVMYXp5TG9hZGluZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvd2FwcC10YWJsZS1sYXp5LWxvYWRpbmcubW9kZWwnO1xyXG5pbXBvcnQgeyBDdXN0b21Db2xvciwgVGFibGVDb2x1bW5GaWx0ZXJUeXBlcywgVGFibGVDb2x1bW5UeXBlcywgV0RhdGVQaXBlRm9ybWF0VHlwZSwgV2FwcFRhYmxlQ29sdW1uQWxpZ25UeXBlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZW51bXMubW9kZWwnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndy10YWJsZS1sYXp5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdy10YWJsZS1sYXp5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93LXRhYmxlLWxhenkuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgV1RhYmxlTGF6eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc2VsZWN0ZWRFbGVtZW50czogYW55W10gPSBbXTtcclxuICB0cmFuc2xhdGlvbnM6IGFueTtcclxuICBsYXN0UXVlcnkhOiBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdDtcclxuXHJcbiAgc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyRWxlbWVudHNJbmRleDogbnVtYmVyID0gMDtcclxuICB3YXBwRGF0ZUZvcm1hdDogdHlwZW9mIFdEYXRlUGlwZUZvcm1hdFR5cGUgPSBXRGF0ZVBpcGVGb3JtYXRUeXBlO1xyXG5cclxuICBASW5wdXQoJ2xvYWRpbmcnKSBsb2FkaW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoJ2VsZW1lbnRzJykgZWxlbWVudHMhOiBhbnlbXTtcclxuICBASW5wdXQoJ3Jvd3NQZXJQYWdlJykgcm93c1BlclBhZ2U6IG51bWJlciA9IDEwO1xyXG4gIEBJbnB1dCgnYWxsRWxlbWVudHMnKSBhbGxFbGVtZW50cyE6IGFueVtdO1xyXG4gIEBJbnB1dCgndG90YWxSZWNvcmRzJykgdG90YWxSZWNvcmRzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgnbWF4Um93c1BlclBhZ2UnKSBtYXhSb3dzUGVyUGFnZTogbnVtYmVyID0gNTA7XHJcbiAgQElucHV0KCd3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdCcpIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0ITogV2FwcFRhYmxlTGF6eUxvYWRpbmc7XHJcblxyXG4gIEBPdXRwdXQoJ3F1ZXJ5RWxlbWVudHMnKSBxdWVyeUVsZW1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdD4oKTtcclxuXHJcbiAgQE91dHB1dCgnb25FbGVtZW50U2VsZWN0Jykgb25FbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25WaWV3RWxlbWVudFNlbGVjdCcpIG9uVmlld0VsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkN1c3RvbUVsZW1lbnRTZWxlY3QnKSBvbkN1c3RvbUVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkNvcHlFbGVtZW50U2VsZWN0Jykgb25Db3B5RWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uRWRpdEVsZW1lbnRTZWxlY3QnKSBvbkVkaXRFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25EZWxldGVFbGVtZW50U2VsZWN0Jykgb25EZWxldGVFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBAT3V0cHV0KCdvbkFsbEVsZW1lbnRTZWxlY3QnKSBvbkFsbEVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgnb25QYWdlQ2hhbmdlJykgb25QYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25TZWxlY3RlZEVsZW1lbnRzQ2hhbmdlJykgb25TZWxlY3RlZEVsZW1lbnRzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRhdGFUYWJsZSE6IFRhYmxlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIFxyXG4gICAgaWYodGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNTZWxlY3RBbGxDaGVja2JveCA9PSB1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc1NlbGVjdEFsbENoZWNrYm94ID0gdHJ1ZTsgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRWxlbWVudHMoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgYWRhcHRlZFF1ZXJ5OiBMYXp5RWxlbWVudFF1ZXJ5UmVxdWVzdCA9IHtcclxuICAgICAgZmlyc3Q6IGV2ZW50LmZpcnN0ISxcclxuICAgICAgcm93czogdGhpcy5yb3dzUGVyUGFnZSEsXHJcbiAgICAgIHNvcnRPcmRlcjogZXZlbnQuc29ydE9yZGVyISxcclxuICAgICAgc29ydEZpZWxkOiBldmVudC5zb3J0RmllbGQhLFxyXG4gICAgICBmaWx0ZXJzOiBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzISkubWFwKChrZXkpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY29sdW1uTmFtZToga2V5ISxcclxuICAgICAgICAgIHZhbHVlOiBldmVudC5maWx0ZXJzIVtrZXldLnZhbHVlLFxyXG4gICAgICAgICAgbWF0Y2hNb2RlOiBldmVudC5maWx0ZXJzIVtrZXldLm1hdGNoTW9kZSFcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RRdWVyeSA9IGFkYXB0ZWRRdWVyeTtcclxuICAgIHRoaXMucXVlcnlFbGVtZW50cy5lbWl0KGFkYXB0ZWRRdWVyeSk7XHJcbiAgfVxyXG5cclxuICByZWxvYWRFbGVtZW50cygpIHtcclxuICAgIHRoaXMubGFzdFF1ZXJ5LnJvd3MgPSB0aGlzLnJvd3NQZXJQYWdlO1xyXG4gICAgdGhpcy5xdWVyeUVsZW1lbnRzLmVtaXQodGhpcy5sYXN0UXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgcmVhZFByb3BlcnR5KG9iajogYW55LCBwcm9wOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKHByb3AgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHByb3Auc3BsaXQoJy4nKTtcclxuICAgIGxldCByZXN1bHQgPSBvYmo7XHJcblxyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gcHJvcGVydHkubWF0Y2goLyguKz8pXFxbKFxcZCspXFxdLyk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGFycmF5UHJvcCA9IG1hdGNoWzFdO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0W2FycmF5UHJvcF0pIHx8IGlzTmFOKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gcmVzdWx0W2FycmF5UHJvcF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgPSByZXN1bHRbYXJyYXlQcm9wXVtpbmRleF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbcHJvcGVydHldID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3Byb3BlcnR5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbkVsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uRWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgdmlld0VsZW1lbnQoZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uVmlld0VsZW1lbnRTZWxlY3QuZW1pdChlbGVtZW50KTtcclxuICB9XHJcbiAgY3VzdG9tRWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25DdXN0b21FbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBlZGl0RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25FZGl0RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybURlbGV0ZVNlbGVjdGlvbihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1NdWx0aXBsZURlbGV0ZUxhYmVsLFxyXG4gICAgICBpY29uOiBcInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1EZWxldGVCdG5MYWJlbCxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVTZWxlY3RlZEVsZW1lbnRzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VsZWN0ZWRFbGVtZW50cygpIHtcclxuICAgIHRoaXMub25EZWxldGVFbGVtZW50U2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEVsZW1lbnRzKVxyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gW107XHJcbiAgfVxyXG5cclxuICBjb25maXJtRGVsZXRlKGV2ZW50OiBFdmVudCwgZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbmZpcm1TaW5nbGVEZWxldGVMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtRGVsZXRlQnRuTGFiZWwsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlU2luZ2xlRWxlbWVudChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTaW5nbGVFbGVtZW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnRTZWxlY3QuZW1pdChbZWxlbWVudF0pXHJcbiAgfVxyXG5cclxuICBjb3B5RWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25Db3B5RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUNvcHkoZXZlbnQ6IEV2ZW50LCBlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRXZlbnRUYXJnZXQsXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29uZmlybUNvcHlMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb25maXJtQ29weUJ0bkxhYmVsLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvcHlFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHZhbHVlID0gW10pIHtcclxuICAgIHRoaXMuc2VsZWN0QWxsID0gdmFsdWUubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3JkcztcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5vblNlbGVjdGVkRWxlbWVudHNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRWxlbWVudHMpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcblxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5vbkFsbEVsZW1lbnRTZWxlY3QuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3ggPyB0aGlzLmdldFNlbGVjdGFibGVFbGVtZW50cyh0aGlzLmFsbEVsZW1lbnRzKSA6IHRoaXMuYWxsRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5vblNlbGVjdGVkRWxlbWVudHNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRWxlbWVudHMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0YWJsZUVsZW1lbnRzKGFsbEVsZW1lbnRzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGFsbEVsZW1lbnRzLmZpbHRlcigoZWxlbWVudDogYW55KSA9PiAhdGhpcy5yZWFkUHJvcGVydHkoZWxlbWVudCwgdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3ghKSk7XHJcbiAgfVxyXG5cclxuICBnZXRCb29sZWFuQ29sdW1uQ2xhc3MoaW5kZXg6IG51bWJlciwgdmFsdWVQcm9wZXJ0eTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgYm9vbGVhbkljb25DbGFzc2VzID0gW107XHJcblxyXG4gICAgaWYgKHZhbHVlUHJvcGVydHkgPT0gdHJ1ZSkge1xyXG4gICAgICBib29sZWFuSWNvbkNsYXNzZXMucHVzaCh0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLnRydWVJY29uID8/ICcnKTtcclxuICAgICAgYm9vbGVhbkljb25DbGFzc2VzLnB1c2godGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS50cnVlSWNvbkNvbG9yID8/ICcnKTtcclxuICAgIH0gZWxzZSBpZiAodmFsdWVQcm9wZXJ0eSA9PSBmYWxzZSkge1xyXG4gICAgICBib29sZWFuSWNvbkNsYXNzZXMucHVzaCh0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLmZhbHNlSWNvbiA/PyAnJyk7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQm9vbGVhblR5cGVJY29uc1tpbmRleF0uZmFsc2VJY29uQ29sb3IpID8/ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZVByb3BlcnR5ID09IG51bGwpIHtcclxuICAgICAgYm9vbGVhbkljb25DbGFzc2VzLnB1c2godGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS5udWxsSWNvbiA/PyAnJyk7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQm9vbGVhblR5cGVJY29uc1tpbmRleF0ubnVsbEljb25Db2xvciA/PyAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJvb2xlYW5JY29uQ2xhc3NlcztcclxuICB9XHJcblxyXG4gIGNsZWFyKHRhYmxlOiBUYWJsZSkge1xyXG4gICAgdGFibGUuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGFibGVDb2x1bW5GaWx0ZXJUeXBlcygpOiB0eXBlb2YgVGFibGVDb2x1bW5GaWx0ZXJUeXBlcyB7XHJcbiAgICByZXR1cm4gVGFibGVDb2x1bW5GaWx0ZXJUeXBlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGFibGVDb2x1bW5UeXBlcygpOiB0eXBlb2YgVGFibGVDb2x1bW5UeXBlcyB7XHJcbiAgICByZXR1cm4gVGFibGVDb2x1bW5UeXBlcztcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVycygpIHtcclxuICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3MoYWxpZ25tZW50OiBudW1iZXIpIHtcclxuICAgIGlmKGFsaWdubWVudCA9PSBXYXBwVGFibGVDb2x1bW5BbGlnblR5cGVzLlJpZ2h0KSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuTGVmdCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuQ2VudGVyKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIHJldHVybiAndGV4dC1sZWZ0J1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzRGVmYXVsdEJ5Q29sdW1uVHlwZShjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGVzKSB7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuVGV4dCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkN1cnJlbmN5KSByZXR1cm4gJ3RleHQtbGVmdCc7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuRGF0ZSkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkJhZGdlKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5Cb29sZWFuKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5JbWFnZSkgcmV0dXJuICd0ZXh0LWNlbnRlcic7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuTnVtYmVyKSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgcmV0dXJuICd0ZXh0LWxlZnQnXHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVDb2xzcGFuKCkge1xyXG4gICAgbGV0IGNvbHNwYW4gPSB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmhlYWRlcnMubGVuZ3RoO1xyXG4gICAgdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveCA/IFxyXG4gICAgICBjb2xzcGFuICs9IDEgOiAnJztcclxuICAgICAgdGhpcy5oYXNBY3Rpb25CdXR0b25zKCkgP1xyXG4gICAgICAgIGNvbHNwYW4gKz0gMSA6ICcnO1xyXG4gICAgICByZXR1cm4gY29sc3BhbjtcclxuICB9XHJcblxyXG4gIGhhc0FjdGlvbkJ1dHRvbnMoKSA6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ29weUJ1dHRvbiB8fFxyXG4gICAgICAgICAgICB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHxcclxuICAgICAgICAgICAgdGhpcy53YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNWaWV3QnV0dG9uIHx8XHJcbiAgICAgICAgICAgIHRoaXMud2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uIHx8IFxyXG4gICAgICAgICAgICB0aGlzLndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b24gP1xyXG4gICAgICAgICAgdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFBhZ2luYXRpb24oZmlyc3Q6IG51bWJlcikge1xyXG4gICAgdGhpcy5kYXRhVGFibGUuX2ZpcnN0ID0gZmlyc3Q7XHJcbiAgfVxyXG5cclxuICBwYWdlQ2hhbmdlKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdChlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbkN1c3RvbUNvbG9yQ2xhc3MoY3VzdG9tQ29sb3I6IEN1c3RvbUNvbG9yKSB7XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5kYXJrQmx1ZTEpIHsgcmV0dXJuICdkYXJrQmx1ZTEnIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLmRhcmtCbHVlMikgeyByZXR1cm4gJ2RhcmtCbHVlMicgfVxyXG4gICAgaWYoY3VzdG9tQ29sb3IgPT0gQ3VzdG9tQ29sb3IuZGFya0JsdWUzKSB7IHJldHVybiAnZGFya0JsdWUzJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5wdXJwbGUxKSB7IHJldHVybiAncHVycGxlMScgfVxyXG4gICAgaWYoY3VzdG9tQ29sb3IgPT0gQ3VzdG9tQ29sb3IucHVycGxlMikgeyByZXR1cm4gJ3B1cnBsZTInIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLnB1cnBsZTMpIHsgcmV0dXJuICdwdXJwbGUzJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5waW5rMSkgeyByZXR1cm4gJ3BpbmsxJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5waW5rMikgeyByZXR1cm4gJ3BpbmsyJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5waW5rMykgeyByZXR1cm4gJ3BpbmszJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5ncmVlbjEpIHsgcmV0dXJuICdncmVlbjEnIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLmdyZWVuMikgeyByZXR1cm4gJ2dyZWVuMicgfVxyXG4gICAgaWYoY3VzdG9tQ29sb3IgPT0gQ3VzdG9tQ29sb3IuZ3JlZW4zKSB7IHJldHVybiAnZ3JlZW4zJyB9XHJcbiAgICBpZihjdXN0b21Db2xvciA9PSBDdXN0b21Db2xvci5lcnJvcjEpIHsgcmV0dXJuICdlcnJvcjEnIH1cclxuICAgIGlmKGN1c3RvbUNvbG9yID09IEN1c3RvbUNvbG9yLmVycm9yMikgeyByZXR1cm4gJ2Vycm9yMicgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCIuZmlsdGVyLXBhbmVsXCI+PC9uZy1jb250ZW50PlxyXG48ZGl2ICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3RcIiBbY2xhc3MudGFibGUtY29udGFpbmVyXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnRhYmxlQ29udGFpbmVyXCI+XHJcbiAgICA8cC10YWJsZSBjbGFzcz1cInctdGFibGUtc3R5bGVzXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd3LXRhYmxlLW5vLWJ1dHRvbnMnIDogIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gJiYgIXdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiAmJiAhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ29weUJ1dHRvbiAmJiAhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY3VzdG9tQnV0dG9uQ29uZmlnICYmICF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNWaWV3QnV0dG9uIH1cIlxyXG4gICAgICAgICAgICAjdGFibGUgW3ZhbHVlXT1cImVsZW1lbnRzXCIgXHJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmlkZW50aWZpY2F0b3J9fVwiXHJcbiAgICAgICAgICAgIFtsYXp5XT1cInRydWVcIiBcclxuICAgICAgICAgICAgKG9uTGF6eUxvYWQpPVwibG9hZEVsZW1lbnRzKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGVkRWxlbWVudHNcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzUGFnaW5hdG9yISAmJiB0b3RhbFJlY29yZHMgPj0gMTBcIlxyXG4gICAgICAgICAgICBbcm93c109XCJyb3dzUGVyUGFnZVwiIFxyXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZV09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlID8gd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZSArICcgJyArICByb3dzUGVyUGFnZSArICcgZGUgJyArIHRvdGFsUmVjb3JkcyEgOiAnU2hvd2luZyAnICsgcm93c1BlclBhZ2UgKyAnIG9mICcgKyB0b3RhbFJlY29yZHMhXCJcclxuICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmdsb2JhbEZpbHRlckZpZWxkcyFcIlxyXG4gICAgICAgICAgICBbdGFibGVTdHlsZV09XCJ7J21pbi13aWR0aCc6IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnRhYmxlTWluV2lkdGghfVwiXHJcbiAgICAgICAgICAgIChvblBhZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGVhckJ1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNHbG9iYWxTZWFyY2hcIiBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtcGFnaW5hdG9yIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNUb3RhbFBhZ2luZ1NlbGVjdG9yXCIgY2xhc3M9XCJzaG93aW5nLXBlci1wYWdlXCI+IHt7d2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzVG90YWxQYWdpbmdTZWxlY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwbC0yIHNob3dpbmctcGVyLXBhZ2VcIiBbc2l6ZV09XCIxXCIgWyhuZ01vZGVsKV09XCJyb3dzUGVyUGFnZVwiIFtzaG93QnV0dG9uc109XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGF5b3V0PVwiaG9yaXpvbnRhbFwiIGlucHV0SWQ9XCJob3Jpem9udGFsXCIgc3Bpbm5lck1vZGU9XCJob3Jpem9udGFsXCIgW3N0ZXBdPVwiMVwiIFttaW5dPVwiMVwiIFttYXhdPVwibWF4Um93c1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25DbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QnV0dG9uSWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBkZWNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktbWludXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZGVjaW1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVsb2FkRWxlbWVudHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzR2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdCBtbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaGVpZ2h0LWlucHV0IHctaW5wdXRcIiBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cInRhYmxlLmZpbHRlckdsb2JhbCgkZXZlbnQsICdjb250YWlucycpXCIgcGxhY2Vob2xkZXI9XCJ7e3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LnNlYXJjaFBsYWNlaG9sZGVyfX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIiF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb2x1bW5GaWx0ZXJzICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94OyBlbHNlIG5vQ2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25bMF0pIDogJ3RleHQtY2VudGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc1NlbGVjdEFsbENoZWNrYm94ID09IHRydWVcIj48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9DaGVja2JveD48dGggKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveFwiPjwvdGg+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzU29ydGFibGVDb2x1bW5zOyBlbHNlIHNvbWV0aGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/LmhlYWRlcnM7IGluZGV4IGFzIGlcIiBbY2xhc3NdPVwiaGVhZGVyID09ICgnSW1hZ2VuJyB8fCAnSW1hZ2UnKSA/ICdpbWFnZS1oZWFkZXInOiAnJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnblt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveCA/IGkrMSA6IGldKSA6IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzc0RlZmF1bHRCeUNvbHVtblR5cGUod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uVHlwZXNbd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3ggPyBpKzEgOiBpXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2hlYWRlcn19XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29tZXRoaW5nPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzb21ldGhpbmcgbmdGb3IgbGV0LWZpbHRlclR5cGUgW25nRm9yT2ZdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGVhZGVyc1wiIGxldC1pPVwiaW5kZXhcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIFtwU29ydGFibGVDb2x1bW5dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc29ydGFibGVOYW1lc1tpXVwiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oZWFkZXJzW2ldID09ICgnSW1hZ2VuJyB8fCAnSW1hZ2UnKSA/ICdpbWFnZS1oZWFkZXInOiAnJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25bd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3ggPyBpKzEgOiBpXSkgOiBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3NEZWZhdWx0QnlDb2x1bW5UeXBlKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtblR5cGVzW3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94ID8gaSsxIDogaV0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oZWFkZXJzW2ldfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5zb3J0YWJsZU5hbWVzW2ldICE9IG51bGxcIiBbZmllbGRdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc29ydGFibGVOYW1lc1tpXVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzVmlld0J1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb3B5QnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b25cIj48L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgIDx0ciAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NvbHVtbkZpbHRlcnNcIj5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3hcIiBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnblswXSkgOiAndGV4dC1sZWZ0J1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzSW1hZ2VcIiBcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NoZWNrYm94ID8gMSA6IDBdKSA6IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzc0RlZmF1bHRCeUNvbHVtblR5cGUod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uVHlwZXNbd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3ggPyAxIDogMF0pXCI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtZmlsdGVyVHlwZSBbbmdGb3JPZl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5GaWx0ZXJUeXBlc1wiIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5UZXh0XCIgXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciB0eXBlPVwidGV4dFwiIFtmaWVsZF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5maWx0ZXJOYW1lc1tpXVwiPjwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiZmlsdGVyVHlwZSA9PSB0YWJsZUNvbHVtbkZpbHRlclR5cGVzLk11bHRpc2VsZWN0XCIgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW2ZpZWxkXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmZpbHRlck5hbWVzW2ldXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtuZ01vZGVsXT1cInZhbHVlXCIgYXBwZW5kVG89XCJib2R5XCIgW29wdGlvbnNdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Quc2VsZWN0RmlsdGVyRWxlbWVudHNbaV1cIiBwbGFjZWhvbGRlcj1cIkFueVwiIChvbkNoYW5nZSk9XCJmaWx0ZXIoJGV2ZW50LnZhbHVlKVwiIG9wdGlvbkxhYmVsPVwibmFtZVwiIFttYXhTZWxlY3RlZExhYmVsc109XCIxXCIgW3NlbGVjdGVkSXRlbXNMYWJlbF09XCInezB9IGl0ZW1zJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtcmVwcmVzZW50YXRpdmUtb3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTFcIj57e29wdGlvbi5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJmaWx0ZXJUeXBlID09IHRhYmxlQ29sdW1uRmlsdGVyVHlwZXMuTm9uZVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJmaWx0ZXJUeXBlID09IHRhYmxlQ29sdW1uRmlsdGVyVHlwZXMuQm9vbGVhblwiIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWNlbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgdHlwZT1cImJvb2xlYW5cIiBbZmllbGRdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZmlsdGVyTmFtZXNbaV1cIj48L3AtY29sdW1uRmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpbHRlclR5cGUgPT0gdGFibGVDb2x1bW5GaWx0ZXJUeXBlcy5EYXRlXCIgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgdHlwZT1cImRhdGVcIiBbZmllbGRdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZmlsdGVyTmFtZXNbaV1cIj48L3AtY29sdW1uRmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzVmlld0J1dHRvbiB8fCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDb3B5QnV0dG9uIHx8IHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b25cIj48L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZWxlbWVudCBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgICAgIDx0ciAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5UeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtblR5cGVzXCIgbGV0LWk9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQ2hlY2tib3ggJiYgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2hlY2tib3hcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3g7IGVsc2UgYWN0aXZlQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJlbGVtZW50XCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlQ2hlY2tib3gpXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWN0aXZlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiZWxlbWVudFwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWxlbWVudC1pbWFnZS13aWR0aFwiLz5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLlRleHRcIiAgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/IHZpZXdFbGVtZW50KGVsZW1lbnQpIDogJydcIiBbY2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gJ3ctdGFibGUtbGF6eS1zZWxlY3RhYmxlLXJvdycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5OdW1iZXJcIiAgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtcmlnaHQnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5zW2ldKSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQ3VycmVuY3lcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSkgfCBjdXJyZW5jeSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQmFkZ2VcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1jZW50ZXInXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIDx3LWJhZGdlIFtsYWJlbF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSlcIiBbY29sb3JdPVwiJ2luZm8nXCI+PC93LWJhZGdlPiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuQ29sb3JlZEJhZGdlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBiYWRnZSBvZiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2xvcmVkQmFkZ2U7IGluZGV4IGFzIGluZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3LWJhZGdlICpuZ0lmPVwiYmFkZ2UuY29sb3JlZEJhZGdlUHJvcGVydHkgPT0gcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgW2NvbG9yXT1cImJhZGdlLmNvbG9yID8gYmFkZ2UuY29sb3IgOiAnaW5mbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3ctYmFkZ2U+ICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkJvb2xlYW5cIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1jZW50ZXInXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJnZXRCb29sZWFuQ29sdW1uQ2xhc3MoaSwgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pKVwiPjwvaT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkRhdGVcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSkgfCB3YXBwRGF0ZSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuU2hvcnREYXRlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/IHZpZXdFbGVtZW50KGVsZW1lbnQpIDogJydcIiBbY2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gJ3ctdGFibGUtbGF6eS1zZWxlY3RhYmxlLXJvdycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pIHwgd2FwcERhdGUgOiB3YXBwRGF0ZUZvcm1hdC5kIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5Mb25nRGF0ZVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uV2lkdGhzW2ldXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5zW2ldKSB8IHdhcHBEYXRlIDogd2FwcERhdGVGb3JtYXQuRCB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuR2VuZXJhbERhdGVUaW1lU2hvcnRUaW1lXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/IHZpZXdFbGVtZW50KGVsZW1lbnQpIDogJydcIiBbY2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gJ3ctdGFibGUtbGF6eS1zZWxlY3RhYmxlLXJvdycgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pIHwgd2FwcERhdGUgOiB3YXBwRGF0ZUZvcm1hdC5nIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5HZW5lcmFsRGF0ZVRpbWVMb25nVGltZVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uV2lkdGhzW2ldXCIgXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uc1tpXSkgfCB3YXBwRGF0ZSA6IHdhcHBEYXRlRm9ybWF0LkcgfX1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkJ1aXNpbmVzc0RhdGVUaW1lXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5XaWR0aHNbaV1cIiBcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyB2aWV3RWxlbWVudChlbGVtZW50KSA6ICcnXCIgW2NsYXNzXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0NsaWNrYWJsZVJvdyA/ICd3LXRhYmxlLWxhenktc2VsZWN0YWJsZS1yb3cnIDogJydcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jb2x1bW5zW2ldKSB8IHdhcHBEYXRlIDogd2FwcERhdGVGb3JtYXQuQnVzaW5lc3MgfX1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLldlZWtcIiBbc3R5bGVdPVwiJ3dpZHRoOiAnK3dhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzQ2xpY2thYmxlUm93ID8gdmlld0VsZW1lbnQoZWxlbWVudCkgOiAnJ1wiIFtjbGFzc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDbGlja2FibGVSb3cgPyAndy10YWJsZS1sYXp5LXNlbGVjdGFibGUtcm93JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24td2VlayBbdmFsdWVdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtbnNbaV0pXCIgW3RyYW5zbGF0aW9uc109XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC53ZWVrQnV0dG9uVHJhbnNsYXRpb25zID8gd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Qud2Vla0J1dHRvblRyYW5zbGF0aW9ucyA6IFtdXCIgW2RlZmF1bHRFc3BdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Qud2Vla0J1dHRvbkRlZmF1bHRFc3AgPz8gZmFsc2VcIj48L3ctYnV0dG9uLXdlZWs+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbnMgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWVuZFwiPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzVmlld0J1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInZpZXdFbGVtZW50KGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8udmlld1Rvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIiBcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktZXllXCIgdHlwZT1cInRhYmxlXCIgYnV0dG9uQ2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbi12aWV3XCI+XHJcbiAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNDdXN0b21CdXR0b25cIiBuZ0ZvciBsZXQtY3VzdG9tQnV0dG9uQ29uZmlnIFtuZ0Zvck9mXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmN1c3RvbUJ1dHRvbkNvbmZpZ1wiIGxldC1pPVwiaW5kZXhcIj4gXHJcbiAgICAgICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCIhY3VzdG9tQnV0dG9uQ29uZmlnPy5kaXNhYmxlUHJvcGVydHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJjdXN0b21FbGVtZW50KHtidXR0b25JZDogY3VzdG9tQnV0dG9uQ29uZmlnLmJ1dHRvbklkLCBlbGVtZW50OiBlbGVtZW50fSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjdXN0b21CdXR0b25Db25maWc/Lmljb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmN1c3RvbVRvb2x0aXAhW2ldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8ucG9zaXRpb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRhYmxlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25DbGFzc109XCIndy10YWJsZS1idXR0b24tdmlldyAnICsgZ2V0QnV0dG9uQ3VzdG9tQ29sb3JDbGFzcyhjdXN0b21CdXR0b25Db25maWcuY29sb3IhKVwiPlxyXG4gICAgICAgICAgICAgICAgPC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiAqbmdJZj1cImN1c3RvbUJ1dHRvbkNvbmZpZz8uZGlzYWJsZVByb3BlcnR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiY3VzdG9tRWxlbWVudCh7YnV0dG9uSWQ6IGN1c3RvbUJ1dHRvbkNvbmZpZy5idXR0b25JZCwgZWxlbWVudDogZWxlbWVudH0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgY3VzdG9tQnV0dG9uQ29uZmlnPy5kaXNhYmxlUHJvcGVydHkhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImN1c3RvbUJ1dHRvbkNvbmZpZz8uaWNvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8uY3VzdG9tVG9vbHRpcCFbaV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGFibGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvbkNsYXNzXT1cIid3LXRhYmxlLWJ1dHRvbi12aWV3ICcgKyBnZXRCdXR0b25DdXN0b21Db2xvckNsYXNzKGN1c3RvbUJ1dHRvbkNvbmZpZy5jb2xvciEpXCI+XHJcbiAgICAgICAgICAgICAgICA8L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uICYmICF3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5kaXNhYmxlRWRpdFByb3BlcnR5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZWRpdEVsZW1lbnQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5lZGl0VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpLXBlbmNpbFwiIHR5cGU9XCJ0YWJsZVwiIGJ1dHRvbkNsYXNzPVwidy10YWJsZS1idXR0b24tZWRpdFwiPlxyXG4gICAgICAgICAgICA8L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNFZGl0QnV0dG9uICYmIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJlZGl0RWxlbWVudChlbGVtZW50KVwiIFtkaXNhYmxlZF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZUVkaXRQcm9wZXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5lZGl0VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpLXBlbmNpbFwiIHR5cGU9XCJ0YWJsZVwiIGJ1dHRvbkNsYXNzPVwidy10YWJsZS1idXR0b24tZWRpdFwiPlxyXG4gICAgICAgICAgICA8L3ctYnV0dG9uPlxyXG4gICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzQ29weUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImNvbmZpcm1Db3B5KCRldmVudCwgZWxlbWVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8uY29weVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaS1jb3B5XCIgdHlwZT1cInRhYmxlXCIgYnV0dG9uQ2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbi12aWV3XCI+XHJcbiAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3Q/Lmhhc0RlbGV0ZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgPHctYnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuZGlzYWJsZURlbGV0ZVByb3BlcnR5OyBlbHNlIG5vRGlzYWJsZURlbGV0ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJjb25maXJtRGVsZXRlKCRldmVudCwgZWxlbWVudClcIiBbZGlzYWJsZWRdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmRpc2FibGVEZWxldGVQcm9wZXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5idXR0b25Ub29sdGlwcz8uZGVsZXRlVG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktdHJhc2hcIiB0eXBlPVwidGFibGVcIiBidXR0b25DbGFzcz1cInctdGFibGUtYnV0dG9uLWRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EaXNhYmxlRGVsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiAob25DbGljayk9XCJjb25maXJtRGVsZXRlKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmRlbGV0ZVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktdHJhc2hcIiB0eXBlPVwidGFibGVcIiBidXR0b25DbGFzcz1cInctdGFibGUtYnV0dG9uLWRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibG9hZGluZ2JvZHlcIj5cclxuICAgICAgICAgICAgPHRyIGhlaWdodD1cIjcwcHhcIiAqbmdGb3I9XCJsZXQgbiBvZiBbMCwxLDIsMyw0XVwiPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmNvbHVtblR5cGVzXCIgW3N0eWxlLndpZHRoXT1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCA/ICc4cmVtJyA6ICcnXCIgPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCAqbmdJZj1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCAmJiB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5oYXNDaGVja2JveFwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gKm5nSWY9XCJpdGVtID09IHRhYmxlQ29sdW1uVHlwZXMuSW1hZ2VcIiB3aWR0aD1cIjZyZW1cIiBoZWlnaHQ9XCI0cmVtXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gKm5nSWY9XCJpdGVtICE9IHRhYmxlQ29sdW1uVHlwZXMuQ2hlY2tib3ggJiYgaXRlbSAhPSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlTGF6eUxvYWRpbmdPYmplY3QuaGFzRGVsZXRlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy10YWJsZS1idXR0b25zIGZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3LWJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0Py5oYXNFZGl0QnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktcGVuY2lsXCIgdHlwZT1cInRhYmxlXCIgYnV0dG9uQ2xhc3M9XCJ3LXRhYmxlLWJ1dHRvbi1lZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC93LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzQ3VzdG9tQnV0dG9uXCIgbmdGb3IgbGV0LWN1c3RvbUJ1dHRvbkNvbmZpZyBbbmdGb3JPZl09XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5jdXN0b21CdXR0b25Db25maWdcIiBsZXQtaT1cImluZGV4XCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIndhcHBUYWJsZUxhenlMb2FkaW5nT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5jdXN0b21Ub29sdGlwIVtpXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjdXN0b21CdXR0b25Db25maWc/Lmljb24hXCIgdHlwZT1cInRhYmxlXCIgW2J1dHRvbkNsYXNzXT1cIid3LXRhYmxlLWJ1dHRvbi12aWV3ICcgKyBnZXRCdXR0b25DdXN0b21Db2xvckNsYXNzKGN1c3RvbUJ1dHRvbkNvbmZpZy5jb2xvciEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dy1idXR0b24gKm5nSWY9XCJ3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdD8uaGFzRGVsZXRlQnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGktdHJhc2hcIiB0eXBlPVwidGFibGVcIiBidXR0b25DbGFzcz1cInctdGFibGUtYnV0dG9uLWRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cInctdGFibGUtbGF6eS1lbXB0eS1tZXNzYWdlLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY2FsY3VsYXRlQ29sc3BhbigpXCI+e3t3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5lbXB0eU1lc3NhZ2UgPyB3YXBwVGFibGVMYXp5TG9hZGluZ09iamVjdC5lbXB0eU1lc3NhZ2UgOiAnTm8gbWF0Y2hlcy4nfX08L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRhYmxlPlxyXG48L2Rpdj5cclxuPHAtY29uZmlybVBvcHVwPjwvcC1jb25maXJtUG9wdXA+Il19