@sapphire-ion/framework 1.0.30 → 1.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/default/default-table/default-table.component.mjs +3 -3
- package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +3 -3
- package/fesm2022/sapphire-ion-framework.mjs +4 -4
- package/fesm2022/sapphire-ion-framework.mjs.map +1 -1
- package/lib/components/stepper/step/step.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -180,11 +180,11 @@ export class DefaultTableComponent {
|
|
|
180
180
|
this.ativar.emit(id);
|
|
181
181
|
}
|
|
182
182
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultTableComponent, deps: [{ token: i1.StorageService }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
183
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DefaultTableComponent, selector: "default-table", inputs: { acoesTemplate: { classPropertyName: "acoesTemplate", publicName: "acoesTemplate", isSignal: false, isRequired: false, transformFunction: null }, service: { classPropertyName: "service", publicName: "service", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, orderByProperty: { classPropertyName: "orderByProperty", publicName: "orderByProperty", isSignal: true, isRequired: false, transformFunction: null }, ascending: { classPropertyName: "ascending", publicName: "ascending", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, lstTableFields: { classPropertyName: "lstTableFields", publicName: "lstTableFields", isSignal: true, isRequired: false, transformFunction: null }, noFilters: { classPropertyName: "noFilters", publicName: "noFilters", isSignal: true, isRequired: false, transformFunction: null }, columnClass: { classPropertyName: "columnClass", publicName: "columnClass", isSignal: true, isRequired: false, transformFunction: null }, columnStyle: { classPropertyName: "columnStyle", publicName: "columnStyle", isSignal: true, isRequired: false, transformFunction: null }, noPagination: { classPropertyName: "noPagination", publicName: "noPagination", isSignal: true, isRequired: false, transformFunction: null }, itemPath: { classPropertyName: "itemPath", publicName: "itemPath", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { total: "totalChange", limit: "limitChange", page: "pageChange", orderByProperty: "orderByPropertyChange", ascending: "ascendingChange", filter: "filterChange", ativar: "ativar", refresh: "refresh", loading: "loadingChange", items: "itemsChange", lstTableFields: "lstTableFieldsChange", itemClick: "itemClick" }, ngImport: i0, template: "<!-- <div class=\"size-full rounded-2xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th scope=\"col\" class=\"px-3 !h-10\" *ngIf=\"acoesTemplate\"> A\u00E7\u00F5es </th>\r\n @for (field of lstTableFields; let i = $index; track i) {\r\n @if (!field.hidden) {\r\n <th scope=\"col\" class=\"p-2 px-3\" id=\"th-filter-select\">\r\n <div class=\"flex items-center justify-start h-full\" style=\"white-space: var(--ion-table-filter-wrap);\"> \r\n @if(!noFilters){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" *ngIf=\"(field.type != InputTypeFile) && !(field.filter && field.disabledChange()) && !noFilters\"\r\n [field]=\"field\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n <span>{{field.header}}</span>\r\n\r\n <a *ngIf=\"!(!(field.type != InputTypeFile) && !(field.filter && field.disabledChange())) && !noFilters\" class=\"order-switch h-5 flex items-center justify-center px-1 ml-2 shrink-0 cursor-pointer rounded-2xl\" (click)=\"SwitchOrder(field)\" [ngClass]=\"{ 'ordering-asc' : orderByProperty == field.index && ascending, 'ordering-desc' : orderByProperty == field.index && !ascending}\">\r\n <ion-icon id=\"up\" name=\"arrow-up\" class=\"-mt-1\"></ion-icon>\r\n <ion-icon id=\"down\" name=\"arrow-down\" class=\"-ml-1 -mb-1\"></ion-icon>\r\n </a>\r\n </div>\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr [hidden]=\"loading\" *ngFor=\"let item of items\">\r\n @if(acoesTemplate){\r\n <td class=\"whitespace-nowrap py-1 px-3\" [style]=\"GetTdStyle('Acoes', item)\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (field of lstTableFields; track $index) {\r\n @if (!field.hidden) {\r\n <td class=\"px-3 py-2\" \r\n [ngClass]=\"GetTdClasses(field, item)\" \r\n [style]=\"GetTdStyle(field, item)\" \r\n (click)=\"Redirect(field, item)\"\r\n style=\"white-space: var(--ion-table-row-wrap);\"\r\n >\r\n @if (field.index == 'ativo') {\r\n <div class=\"w-full h-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"loading\" (ionChange)=\"Ativar(item.id)\" ></ion-toggle>\r\n </div>\r\n } @else {\r\n @switch (field.type) {\r\n @case (\"Bool\") {\r\n @if (field.configuration.type == \"toggle\") {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-toggle>\r\n </div>\r\n }\r\n @else {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-checkbox [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-checkbox>\r\n </div>\r\n }\r\n }\r\n @case (\"File\") {\r\n <download-button [(ngModel)]=\"item[field.index]\" [configuration]=\"field.configuration\"></download-button>\r\n }\r\n @case (\"Select\") {\r\n {{GetSelectLabel(item, field)}}\r\n }\r\n @default {\r\n {{GetField(item, field)}} \r\n }\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page\"\r\n (pageChange)=\"EmitPage($event)\"\r\n [total]=\"total\"\r\n [limit]=\"limit\"\r\n [length]=\"items.length\"\r\n [loading]=\"loading\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n</div> -->\r\n\r\n<div class=\"size-full rounded-xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading()\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(acoesTemplate){\r\n\r\n }\r\n <th scope=\"col\" class=\"p-2\"> \r\n A\u00E7\u00F5es \r\n </th>\r\n\r\n @for (tfa of lstTableFieldsAvailable(); track tfa.tf.index) {\r\n <th scope=\"col\" class=\"p-2\"> \r\n <div class=\"flex gap-2 items-center justify-start th\">\r\n @if(!noFilters()){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" \r\n *ngIf=\"((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters())\"\r\n [field]=\"tfa.tf\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n\r\n {{tfa.tf.header}} \r\n\r\n @if((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters()){\r\n <a [ngClass]=\"{ 'bg-light/10 !opacity-100': tfa.ascending || tfa.descending }\"\r\n class=\"order h-4 w-5 relative cursor-pointer rounded-lg opacity-0 default-transition\" \r\n (click)=\"SwitchOrder(tfa.tf)\"\r\n >\r\n <ion-icon \r\n [class.text-primary]=\"tfa.ascending\"\r\n class=\"absolute left-0 top-0\" \r\n name=\"arrow-up\"\r\n ></ion-icon> \r\n <ion-icon \r\n [class.text-primary]=\"tfa.descending\"\r\n class=\"absolute right-0 bottom-0\" \r\n name=\"arrow-down\"\r\n ></ion-icon> \r\n </a>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of lstRows; track row.id || $index) {\r\n <tr [hidden]=\"loading()\">\r\n @if(acoesTemplate){\r\n <td (click)=\"Redirect(undefined, row.item)\" class=\"whitespace-nowrap py-1 px-3 {{row.acoesClass}}\" [style]=\"row.acoesStyle\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: row.item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of row.lstColumns; track col.tf.index) {\r\n <td class=\"{{col.class}} p-2 cursor-pointer\" (click)=\"Redirect(col.tf, row.item)\" [style]=\"'white-space: var(--ion-table-row-wrap);' + col.style\">\r\n @if(col.tf.index == 'ativo') {\r\n <div class=\"size-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"loading()\" (ionChange)=\"Ativar(row.id)\" ></ion-toggle>\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.Bool){\r\n <div class=\"h-full flex items-center justify-start\">\r\n @if(col.tf.configuration.type == 'toggle') {\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"true\"></ion-toggle>\r\n }\r\n @else {\r\n <ion-checkbox [checked]=\"col.value\" [disabled]=\"true\"></ion-checkbox>\r\n }\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.File) {\r\n <download-button [(ngModel)]=\"col.value\" [configuration]=\"col.tf.configuration\"></download-button>\r\n }\r\n @else if (col.loading){\r\n <ion-spinner name=\"dots\"></ion-spinner>\r\n } @else {\r\n {{col.label}}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination()){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page()\"\r\n (pageChange)=\"page.set($event); refresh.emit()\"\r\n [total]=\"total()\"\r\n [limit]=\"limit()\"\r\n [length]=\"items().length\"\r\n [loading]=\"loading()\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n\r\n <!-- <div class=\"overflow-y-auto\">\r\n @for (item of lstRows; track $index) {\r\n <div class=\"border border-red-500 flex\">\r\n {{$index}} - \r\n @for (lbl of item.lstColumns; track $index) {\r\n ([{{lbl.label}}])\r\n }\r\n </div>\r\n }\r\n </div> -->\r\n</div>", styles: [".th:hover>.order{opacity:1;background-color:color-mix(in srgb,var(--ion-color-light) 10%,transparent)}\n"], dependencies: [{ kind: "component", type: i3.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonToggle, selector: "ion-toggle", inputs: ["alignment", "checked", "color", "disabled", "enableOnOffLabels", "errorText", "helperText", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "directive", type: i3.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.DownloadButtonComponent, selector: "download-button", inputs: ["expand", "value", "size", "color", "params", "disabled", "post", "configuration"], outputs: ["valueChange"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.LoadingComponent, selector: "loading", inputs: ["text", "type", "loading"] }, { kind: "component", type: i8.ContentBlockComponent, selector: "content-block", inputs: ["text", "value"] }, { kind: "component", type: i9.DefaultPaginationComponent, selector: "default-pagination", inputs: ["total", "limit", "length", "loading", "page"], outputs: ["pageChange", "change"] }, { kind: "component", type: i10.ThFilterComponent, selector: "th-filter", inputs: ["field"], outputs: ["change"] }] }); }
|
|
183
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DefaultTableComponent, selector: "default-table", inputs: { acoesTemplate: { classPropertyName: "acoesTemplate", publicName: "acoesTemplate", isSignal: false, isRequired: false, transformFunction: null }, service: { classPropertyName: "service", publicName: "service", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, orderByProperty: { classPropertyName: "orderByProperty", publicName: "orderByProperty", isSignal: true, isRequired: false, transformFunction: null }, ascending: { classPropertyName: "ascending", publicName: "ascending", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, lstTableFields: { classPropertyName: "lstTableFields", publicName: "lstTableFields", isSignal: true, isRequired: false, transformFunction: null }, noFilters: { classPropertyName: "noFilters", publicName: "noFilters", isSignal: true, isRequired: false, transformFunction: null }, columnClass: { classPropertyName: "columnClass", publicName: "columnClass", isSignal: true, isRequired: false, transformFunction: null }, columnStyle: { classPropertyName: "columnStyle", publicName: "columnStyle", isSignal: true, isRequired: false, transformFunction: null }, noPagination: { classPropertyName: "noPagination", publicName: "noPagination", isSignal: true, isRequired: false, transformFunction: null }, itemPath: { classPropertyName: "itemPath", publicName: "itemPath", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { total: "totalChange", limit: "limitChange", page: "pageChange", orderByProperty: "orderByPropertyChange", ascending: "ascendingChange", filter: "filterChange", ativar: "ativar", refresh: "refresh", loading: "loadingChange", items: "itemsChange", lstTableFields: "lstTableFieldsChange", itemClick: "itemClick" }, ngImport: i0, template: "<!-- <div class=\"size-full rounded-2xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th scope=\"col\" class=\"px-3 !h-10\" *ngIf=\"acoesTemplate\"> A\u00E7\u00F5es </th>\r\n @for (field of lstTableFields; let i = $index; track i) {\r\n @if (!field.hidden) {\r\n <th scope=\"col\" class=\"p-2 px-3\" id=\"th-filter-select\">\r\n <div class=\"flex items-center justify-start h-full\" style=\"white-space: var(--ion-table-filter-wrap);\"> \r\n @if(!noFilters){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" *ngIf=\"(field.type != InputTypeFile) && !(field.filter && field.disabledChange()) && !noFilters\"\r\n [field]=\"field\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n <span>{{field.header}}</span>\r\n\r\n <a *ngIf=\"!(!(field.type != InputTypeFile) && !(field.filter && field.disabledChange())) && !noFilters\" class=\"order-switch h-5 flex items-center justify-center px-1 ml-2 shrink-0 cursor-pointer rounded-2xl\" (click)=\"SwitchOrder(field)\" [ngClass]=\"{ 'ordering-asc' : orderByProperty == field.index && ascending, 'ordering-desc' : orderByProperty == field.index && !ascending}\">\r\n <ion-icon id=\"up\" name=\"arrow-up\" class=\"-mt-1\"></ion-icon>\r\n <ion-icon id=\"down\" name=\"arrow-down\" class=\"-ml-1 -mb-1\"></ion-icon>\r\n </a>\r\n </div>\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr [hidden]=\"loading\" *ngFor=\"let item of items\">\r\n @if(acoesTemplate){\r\n <td class=\"whitespace-nowrap py-1 px-3\" [style]=\"GetTdStyle('Acoes', item)\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (field of lstTableFields; track $index) {\r\n @if (!field.hidden) {\r\n <td class=\"px-3 py-2\" \r\n [ngClass]=\"GetTdClasses(field, item)\" \r\n [style]=\"GetTdStyle(field, item)\" \r\n (click)=\"Redirect(field, item)\"\r\n style=\"white-space: var(--ion-table-row-wrap);\"\r\n >\r\n @if (field.index == 'ativo') {\r\n <div class=\"w-full h-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"loading\" (ionChange)=\"Ativar(item.id)\" ></ion-toggle>\r\n </div>\r\n } @else {\r\n @switch (field.type) {\r\n @case (\"Bool\") {\r\n @if (field.configuration.type == \"toggle\") {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-toggle>\r\n </div>\r\n }\r\n @else {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-checkbox [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-checkbox>\r\n </div>\r\n }\r\n }\r\n @case (\"File\") {\r\n <download-button [(ngModel)]=\"item[field.index]\" [configuration]=\"field.configuration\"></download-button>\r\n }\r\n @case (\"Select\") {\r\n {{GetSelectLabel(item, field)}}\r\n }\r\n @default {\r\n {{GetField(item, field)}} \r\n }\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page\"\r\n (pageChange)=\"EmitPage($event)\"\r\n [total]=\"total\"\r\n [limit]=\"limit\"\r\n [length]=\"items.length\"\r\n [loading]=\"loading\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n</div> -->\r\n\r\n<div class=\"size-full rounded-xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading()\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(acoesTemplate){\r\n <th scope=\"col\" class=\"p-2\"> \r\n A\u00E7\u00F5es \r\n </th>\r\n }\r\n\r\n @for (tfa of lstTableFieldsAvailable(); track tfa.tf.index) {\r\n <th scope=\"col\" class=\"p-2\"> \r\n <div class=\"flex gap-2 items-center justify-start th\">\r\n @if(!noFilters()){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" \r\n *ngIf=\"((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters())\"\r\n [field]=\"tfa.tf\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n\r\n {{tfa.tf.header}} \r\n\r\n @if((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters()){\r\n <a [ngClass]=\"{ 'bg-light/10 !opacity-100': tfa.ascending || tfa.descending }\"\r\n class=\"order h-4 w-5 relative cursor-pointer rounded-lg opacity-0 default-transition\" \r\n (click)=\"SwitchOrder(tfa.tf)\"\r\n >\r\n <ion-icon \r\n [class.text-primary]=\"tfa.ascending\"\r\n class=\"absolute left-0 top-0\" \r\n name=\"arrow-up\"\r\n ></ion-icon> \r\n <ion-icon \r\n [class.text-primary]=\"tfa.descending\"\r\n class=\"absolute right-0 bottom-0\" \r\n name=\"arrow-down\"\r\n ></ion-icon> \r\n </a>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of lstRows; track row.id || $index) {\r\n <tr [hidden]=\"loading()\">\r\n @if(acoesTemplate){\r\n <td (click)=\"Redirect(undefined, row.item)\" class=\"whitespace-nowrap py-1 px-3 {{row.acoesClass}}\" [style]=\"row.acoesStyle\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: row.item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of row.lstColumns; track col.tf.index) {\r\n <td class=\"{{col.class}} p-2 cursor-pointer\" (click)=\"Redirect(col.tf, row.item)\" [style]=\"'white-space: var(--ion-table-row-wrap);' + col.style\">\r\n @if(col.tf.index == 'ativo') {\r\n <div class=\"size-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"loading()\" (ionChange)=\"Ativar(row.id)\" ></ion-toggle>\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.Bool){\r\n <div class=\"h-full flex items-center justify-start\">\r\n @if(col.tf.configuration.type == 'toggle') {\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"true\"></ion-toggle>\r\n }\r\n @else {\r\n <ion-checkbox [checked]=\"col.value\" [disabled]=\"true\"></ion-checkbox>\r\n }\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.File) {\r\n <download-button [(ngModel)]=\"col.value\" [configuration]=\"col.tf.configuration\"></download-button>\r\n }\r\n @else if (col.loading){\r\n <ion-spinner name=\"dots\"></ion-spinner>\r\n } @else {\r\n {{col.label}}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination()){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page()\"\r\n (pageChange)=\"page.set($event); refresh.emit()\"\r\n [total]=\"total()\"\r\n [limit]=\"limit()\"\r\n [length]=\"items().length\"\r\n [loading]=\"loading()\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n\r\n <!-- <div class=\"overflow-y-auto\">\r\n @for (item of lstRows; track $index) {\r\n <div class=\"border border-red-500 flex\">\r\n {{$index}} - \r\n @for (lbl of item.lstColumns; track $index) {\r\n ([{{lbl.label}}])\r\n }\r\n </div>\r\n }\r\n </div> -->\r\n</div>", styles: [".th:hover>.order{opacity:1;background-color:color-mix(in srgb,var(--ion-color-light) 10%,transparent)}\n"], dependencies: [{ kind: "component", type: i3.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonToggle, selector: "ion-toggle", inputs: ["alignment", "checked", "color", "disabled", "enableOnOffLabels", "errorText", "helperText", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "directive", type: i3.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.DownloadButtonComponent, selector: "download-button", inputs: ["expand", "value", "size", "color", "params", "disabled", "post", "configuration"], outputs: ["valueChange"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.LoadingComponent, selector: "loading", inputs: ["text", "type", "loading"] }, { kind: "component", type: i8.ContentBlockComponent, selector: "content-block", inputs: ["text", "value"] }, { kind: "component", type: i9.DefaultPaginationComponent, selector: "default-pagination", inputs: ["total", "limit", "length", "loading", "page"], outputs: ["pageChange", "change"] }, { kind: "component", type: i10.ThFilterComponent, selector: "th-filter", inputs: ["field"], outputs: ["change"] }] }); }
|
|
184
184
|
}
|
|
185
185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultTableComponent, decorators: [{
|
|
186
186
|
type: Component,
|
|
187
|
-
args: [{ selector: 'default-table', template: "<!-- <div class=\"size-full rounded-2xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th scope=\"col\" class=\"px-3 !h-10\" *ngIf=\"acoesTemplate\"> A\u00E7\u00F5es </th>\r\n @for (field of lstTableFields; let i = $index; track i) {\r\n @if (!field.hidden) {\r\n <th scope=\"col\" class=\"p-2 px-3\" id=\"th-filter-select\">\r\n <div class=\"flex items-center justify-start h-full\" style=\"white-space: var(--ion-table-filter-wrap);\"> \r\n @if(!noFilters){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" *ngIf=\"(field.type != InputTypeFile) && !(field.filter && field.disabledChange()) && !noFilters\"\r\n [field]=\"field\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n <span>{{field.header}}</span>\r\n\r\n <a *ngIf=\"!(!(field.type != InputTypeFile) && !(field.filter && field.disabledChange())) && !noFilters\" class=\"order-switch h-5 flex items-center justify-center px-1 ml-2 shrink-0 cursor-pointer rounded-2xl\" (click)=\"SwitchOrder(field)\" [ngClass]=\"{ 'ordering-asc' : orderByProperty == field.index && ascending, 'ordering-desc' : orderByProperty == field.index && !ascending}\">\r\n <ion-icon id=\"up\" name=\"arrow-up\" class=\"-mt-1\"></ion-icon>\r\n <ion-icon id=\"down\" name=\"arrow-down\" class=\"-ml-1 -mb-1\"></ion-icon>\r\n </a>\r\n </div>\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr [hidden]=\"loading\" *ngFor=\"let item of items\">\r\n @if(acoesTemplate){\r\n <td class=\"whitespace-nowrap py-1 px-3\" [style]=\"GetTdStyle('Acoes', item)\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (field of lstTableFields; track $index) {\r\n @if (!field.hidden) {\r\n <td class=\"px-3 py-2\" \r\n [ngClass]=\"GetTdClasses(field, item)\" \r\n [style]=\"GetTdStyle(field, item)\" \r\n (click)=\"Redirect(field, item)\"\r\n style=\"white-space: var(--ion-table-row-wrap);\"\r\n >\r\n @if (field.index == 'ativo') {\r\n <div class=\"w-full h-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"loading\" (ionChange)=\"Ativar(item.id)\" ></ion-toggle>\r\n </div>\r\n } @else {\r\n @switch (field.type) {\r\n @case (\"Bool\") {\r\n @if (field.configuration.type == \"toggle\") {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-toggle>\r\n </div>\r\n }\r\n @else {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-checkbox [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-checkbox>\r\n </div>\r\n }\r\n }\r\n @case (\"File\") {\r\n <download-button [(ngModel)]=\"item[field.index]\" [configuration]=\"field.configuration\"></download-button>\r\n }\r\n @case (\"Select\") {\r\n {{GetSelectLabel(item, field)}}\r\n }\r\n @default {\r\n {{GetField(item, field)}} \r\n }\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page\"\r\n (pageChange)=\"EmitPage($event)\"\r\n [total]=\"total\"\r\n [limit]=\"limit\"\r\n [length]=\"items.length\"\r\n [loading]=\"loading\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n</div> -->\r\n\r\n<div class=\"size-full rounded-xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading()\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(acoesTemplate){\r\n\r\n }\r\n <th scope=\"col\" class=\"p-2\"> \r\n A\u00E7\u00F5es \r\n </th>\r\n\r\n @for (tfa of lstTableFieldsAvailable(); track tfa.tf.index) {\r\n <th scope=\"col\" class=\"p-2\"> \r\n <div class=\"flex gap-2 items-center justify-start th\">\r\n @if(!noFilters()){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" \r\n *ngIf=\"((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters())\"\r\n [field]=\"tfa.tf\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n\r\n {{tfa.tf.header}} \r\n\r\n @if((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters()){\r\n <a [ngClass]=\"{ 'bg-light/10 !opacity-100': tfa.ascending || tfa.descending }\"\r\n class=\"order h-4 w-5 relative cursor-pointer rounded-lg opacity-0 default-transition\" \r\n (click)=\"SwitchOrder(tfa.tf)\"\r\n >\r\n <ion-icon \r\n [class.text-primary]=\"tfa.ascending\"\r\n class=\"absolute left-0 top-0\" \r\n name=\"arrow-up\"\r\n ></ion-icon> \r\n <ion-icon \r\n [class.text-primary]=\"tfa.descending\"\r\n class=\"absolute right-0 bottom-0\" \r\n name=\"arrow-down\"\r\n ></ion-icon> \r\n </a>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of lstRows; track row.id || $index) {\r\n <tr [hidden]=\"loading()\">\r\n @if(acoesTemplate){\r\n <td (click)=\"Redirect(undefined, row.item)\" class=\"whitespace-nowrap py-1 px-3 {{row.acoesClass}}\" [style]=\"row.acoesStyle\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: row.item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of row.lstColumns; track col.tf.index) {\r\n <td class=\"{{col.class}} p-2 cursor-pointer\" (click)=\"Redirect(col.tf, row.item)\" [style]=\"'white-space: var(--ion-table-row-wrap);' + col.style\">\r\n @if(col.tf.index == 'ativo') {\r\n <div class=\"size-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"loading()\" (ionChange)=\"Ativar(row.id)\" ></ion-toggle>\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.Bool){\r\n <div class=\"h-full flex items-center justify-start\">\r\n @if(col.tf.configuration.type == 'toggle') {\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"true\"></ion-toggle>\r\n }\r\n @else {\r\n <ion-checkbox [checked]=\"col.value\" [disabled]=\"true\"></ion-checkbox>\r\n }\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.File) {\r\n <download-button [(ngModel)]=\"col.value\" [configuration]=\"col.tf.configuration\"></download-button>\r\n }\r\n @else if (col.loading){\r\n <ion-spinner name=\"dots\"></ion-spinner>\r\n } @else {\r\n {{col.label}}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination()){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page()\"\r\n (pageChange)=\"page.set($event); refresh.emit()\"\r\n [total]=\"total()\"\r\n [limit]=\"limit()\"\r\n [length]=\"items().length\"\r\n [loading]=\"loading()\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n\r\n <!-- <div class=\"overflow-y-auto\">\r\n @for (item of lstRows; track $index) {\r\n <div class=\"border border-red-500 flex\">\r\n {{$index}} - \r\n @for (lbl of item.lstColumns; track $index) {\r\n ([{{lbl.label}}])\r\n }\r\n </div>\r\n }\r\n </div> -->\r\n</div>", styles: [".th:hover>.order{opacity:1;background-color:color-mix(in srgb,var(--ion-color-light) 10%,transparent)}\n"] }]
|
|
187
|
+
args: [{ selector: 'default-table', template: "<!-- <div class=\"size-full rounded-2xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th scope=\"col\" class=\"px-3 !h-10\" *ngIf=\"acoesTemplate\"> A\u00E7\u00F5es </th>\r\n @for (field of lstTableFields; let i = $index; track i) {\r\n @if (!field.hidden) {\r\n <th scope=\"col\" class=\"p-2 px-3\" id=\"th-filter-select\">\r\n <div class=\"flex items-center justify-start h-full\" style=\"white-space: var(--ion-table-filter-wrap);\"> \r\n @if(!noFilters){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" *ngIf=\"(field.type != InputTypeFile) && !(field.filter && field.disabledChange()) && !noFilters\"\r\n [field]=\"field\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n <span>{{field.header}}</span>\r\n\r\n <a *ngIf=\"!(!(field.type != InputTypeFile) && !(field.filter && field.disabledChange())) && !noFilters\" class=\"order-switch h-5 flex items-center justify-center px-1 ml-2 shrink-0 cursor-pointer rounded-2xl\" (click)=\"SwitchOrder(field)\" [ngClass]=\"{ 'ordering-asc' : orderByProperty == field.index && ascending, 'ordering-desc' : orderByProperty == field.index && !ascending}\">\r\n <ion-icon id=\"up\" name=\"arrow-up\" class=\"-mt-1\"></ion-icon>\r\n <ion-icon id=\"down\" name=\"arrow-down\" class=\"-ml-1 -mb-1\"></ion-icon>\r\n </a>\r\n </div>\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr [hidden]=\"loading\" *ngFor=\"let item of items\">\r\n @if(acoesTemplate){\r\n <td class=\"whitespace-nowrap py-1 px-3\" [style]=\"GetTdStyle('Acoes', item)\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (field of lstTableFields; track $index) {\r\n @if (!field.hidden) {\r\n <td class=\"px-3 py-2\" \r\n [ngClass]=\"GetTdClasses(field, item)\" \r\n [style]=\"GetTdStyle(field, item)\" \r\n (click)=\"Redirect(field, item)\"\r\n style=\"white-space: var(--ion-table-row-wrap);\"\r\n >\r\n @if (field.index == 'ativo') {\r\n <div class=\"w-full h-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"loading\" (ionChange)=\"Ativar(item.id)\" ></ion-toggle>\r\n </div>\r\n } @else {\r\n @switch (field.type) {\r\n @case (\"Bool\") {\r\n @if (field.configuration.type == \"toggle\") {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-toggle [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-toggle>\r\n </div>\r\n }\r\n @else {\r\n <div class=\"-full h-full flex items-center justify-start\">\r\n <ion-checkbox [checked]=\"item[field.index]\" [disabled]=\"true\"></ion-checkbox>\r\n </div>\r\n }\r\n }\r\n @case (\"File\") {\r\n <download-button [(ngModel)]=\"item[field.index]\" [configuration]=\"field.configuration\"></download-button>\r\n }\r\n @case (\"Select\") {\r\n {{GetSelectLabel(item, field)}}\r\n }\r\n @default {\r\n {{GetField(item, field)}} \r\n }\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page\"\r\n (pageChange)=\"EmitPage($event)\"\r\n [total]=\"total\"\r\n [limit]=\"limit\"\r\n [length]=\"items.length\"\r\n [loading]=\"loading\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n</div> -->\r\n\r\n<div class=\"size-full rounded-xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading()\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(acoesTemplate){\r\n <th scope=\"col\" class=\"p-2\"> \r\n A\u00E7\u00F5es \r\n </th>\r\n }\r\n\r\n @for (tfa of lstTableFieldsAvailable(); track tfa.tf.index) {\r\n <th scope=\"col\" class=\"p-2\"> \r\n <div class=\"flex gap-2 items-center justify-start th\">\r\n @if(!noFilters()){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" \r\n *ngIf=\"((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters())\"\r\n [field]=\"tfa.tf\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n\r\n {{tfa.tf.header}} \r\n\r\n @if((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters()){\r\n <a [ngClass]=\"{ 'bg-light/10 !opacity-100': tfa.ascending || tfa.descending }\"\r\n class=\"order h-4 w-5 relative cursor-pointer rounded-lg opacity-0 default-transition\" \r\n (click)=\"SwitchOrder(tfa.tf)\"\r\n >\r\n <ion-icon \r\n [class.text-primary]=\"tfa.ascending\"\r\n class=\"absolute left-0 top-0\" \r\n name=\"arrow-up\"\r\n ></ion-icon> \r\n <ion-icon \r\n [class.text-primary]=\"tfa.descending\"\r\n class=\"absolute right-0 bottom-0\" \r\n name=\"arrow-down\"\r\n ></ion-icon> \r\n </a>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of lstRows; track row.id || $index) {\r\n <tr [hidden]=\"loading()\">\r\n @if(acoesTemplate){\r\n <td (click)=\"Redirect(undefined, row.item)\" class=\"whitespace-nowrap py-1 px-3 {{row.acoesClass}}\" [style]=\"row.acoesStyle\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: row.item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of row.lstColumns; track col.tf.index) {\r\n <td class=\"{{col.class}} p-2 cursor-pointer\" (click)=\"Redirect(col.tf, row.item)\" [style]=\"'white-space: var(--ion-table-row-wrap);' + col.style\">\r\n @if(col.tf.index == 'ativo') {\r\n <div class=\"size-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"loading()\" (ionChange)=\"Ativar(row.id)\" ></ion-toggle>\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.Bool){\r\n <div class=\"h-full flex items-center justify-start\">\r\n @if(col.tf.configuration.type == 'toggle') {\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"true\"></ion-toggle>\r\n }\r\n @else {\r\n <ion-checkbox [checked]=\"col.value\" [disabled]=\"true\"></ion-checkbox>\r\n }\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.File) {\r\n <download-button [(ngModel)]=\"col.value\" [configuration]=\"col.tf.configuration\"></download-button>\r\n }\r\n @else if (col.loading){\r\n <ion-spinner name=\"dots\"></ion-spinner>\r\n } @else {\r\n {{col.label}}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination()){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page()\"\r\n (pageChange)=\"page.set($event); refresh.emit()\"\r\n [total]=\"total()\"\r\n [limit]=\"limit()\"\r\n [length]=\"items().length\"\r\n [loading]=\"loading()\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n\r\n <!-- <div class=\"overflow-y-auto\">\r\n @for (item of lstRows; track $index) {\r\n <div class=\"border border-red-500 flex\">\r\n {{$index}} - \r\n @for (lbl of item.lstColumns; track $index) {\r\n ([{{lbl.label}}])\r\n }\r\n </div>\r\n }\r\n </div> -->\r\n</div>", styles: [".th:hover>.order{opacity:1;background-color:color-mix(in srgb,var(--ion-color-light) 10%,transparent)}\n"] }]
|
|
188
188
|
}], ctorParameters: () => [{ type: i1.StorageService }, { type: i2.ActivatedRoute }, { type: i2.Router }], propDecorators: { acoesTemplate: [{
|
|
189
189
|
type: Input
|
|
190
190
|
}] } });
|
|
@@ -213,4 +213,4 @@ class AvailableTableField {
|
|
|
213
213
|
this.descending = descending;
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGVmYXVsdC9kZWZhdWx0LXRhYmxlL2RlZmF1bHQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlZmF1bHQvZGVmYXVsdC10YWJsZS9kZWZhdWx0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBZSxLQUFLLEVBQXVCLE1BQU0sRUFBdUMsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUdyRixPQUFPLEVBQWMsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBU3hELE1BQU0sT0FBTyxxQkFBcUI7SUFvRWhDLFlBQ1MsY0FBK0IsRUFDOUIsY0FBOEIsRUFDOUIsTUFBc0I7UUFGdkIsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQzlC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QUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQzsrR0F6TVUscUJBQXFCO21HQUFyQixxQkFBcUIsNDdFQ3ZCbEMsK3pZQXNOTTs7NEZEL0xPLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxlQUFlO3FJQU1oQixhQUFhO3NCQUFyQixLQUFLOztBQTBNUixNQUFNLGVBQWU7SUFDbkIsWUFDUyxJQUFPLEVBQ1AsRUFBc0IsRUFDdEIsVUFBZ0MsRUFDaEMsYUFBcUIsRUFBRSxFQUN2QixhQUFxQixFQUFFO1FBSnZCLFNBQUksR0FBSixJQUFJLENBQUc7UUFDUCxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFhO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQWE7SUFDOUIsQ0FBQztDQUNKO0FBRUQsTUFBTSxrQkFBa0I7SUFLdEIsWUFDUyxRQUFhLElBQUksRUFDakIsRUFBYztRQURkLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUxoQixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsVUFBSyxHQUFXLEVBQUUsQ0FBQztJQUl4QixDQUFDO0NBQ0o7QUFFRCxNQUFNLG1CQUFtQjtJQUN2QixZQUNTLEVBQWMsRUFDZCxTQUFrQixFQUNsQixVQUFtQjtRQUZuQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixlQUFVLEdBQVYsVUFBVSxDQUFTO0lBQzFCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdE51bWJlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgSW5wdXQsIGlucHV0LCBJbnB1dFNpZ25hbCwgbW9kZWwsIE1vZGVsU2lnbmFsLCBPbkluaXQsIG91dHB1dCwgT3V0cHV0RW1pdHRlclJlZiwgT3V0cHV0UmVmLCBTaWduYWwsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC1kZWNpbWFsL2lucHV0LWRlY2ltYWwuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC1zZWxlY3QvaW5wdXQuc2VsZWN0LmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBGb3JtYXRUZWxlZm9uZUNlbHVsYXIgfSBmcm9tICcuLi8uLi9pbnB1dHMvaW5wdXQtdGVsZWZvbmUvaW5wdXQtdGVsZWZvbmUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy93ZWIvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0Q3BmQ25waiB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC1jcGYtY25wai9pbnB1dC1jcGYtY25wai5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9odHRwLnNlcnZpY2UnXHJcbmltcG9ydCB7IFRhYmxlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2lucHV0cy90YWJsZS1maWVsZCc7XHJcbmltcG9ydCB7IENvbXBhcmlzb24sIENvbXBpbGVMc3RUYWJsZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wYXJpc29uL2NvbXBhcmlzb24nO1xyXG5pbXBvcnQgeyBGb3JtYXRDZXAgfSBmcm9tICcuLi8uLi9pbnB1dHMvaW5wdXQtY2VwL2lucHV0LWNlcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9pbnB1dHMvaW5wdXQtdHlwZSc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcblxyXG50eXBlIENTU1N0eWxlU3RyaW5nR2VuZXJhdG9yID0gKGluZGV4OiBzdHJpbmcsIG9iamVjdDogYW55KSA9PiBzdHJpbmc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RlZmF1bHQtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWZhdWx0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kZWZhdWx0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGFibGVDb21wb25lbnQ8U2VydmljZSBleHRlbmRzIEh0dHBTZXJ2aWNlLCBUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGFjb2VzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqIFRlbXBsYXRlIGRlIGHDp8O1ZXMsIGRldmUgc2VyIHVtIGVsZW1lbnRvIGBgYDxuZy10ZW1wbGF0ZT5gYGAgKi9cclxuICAvLyBhY29lc1RlbXBsYXRlOiBJbnB1dFNpZ25hbDxUZW1wbGF0ZVJlZjxhbnk+PiA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIC8qKiBTZXJ2aWNlIGEgc2VyIHV0aWxpemFkbyBuYSBsaXN0YWdlbSAqL1xyXG4gIHNlcnZpY2U6IElucHV0U2lnbmFsPFNlcnZpY2U+ID0gaW5wdXQ8U2VydmljZT4oKTtcclxuXHJcbiAgdG90YWw6IE1vZGVsU2lnbmFsPG51bWJlcj4gPSBtb2RlbDxudW1iZXI+KDApO1xyXG5cclxuICAvKiogTsO6bWVybyBkZSBpdGVtcyBtw6F4aW1vICh1c2FuZG8gdHdvIHdheSBkYXRhIGJpbmRpbmcpICovXHJcbiAgbGltaXQ6IE1vZGVsU2lnbmFsPG51bWJlcj4gPSBtb2RlbDxudW1iZXI+KCk7XHJcblxyXG4gIC8qKiBWYWxvciBkYSBwYWdpbmEsIHNldGFkbyA9IDEgcXVhbmRvIHRyb2NhLXNlIG8gdmFsb3IgZGUgbGltaXRlIGRlIHBhZ2luYXMgKHVzYW5kbyB0d28gd2F5IGRhdGEgYmluZGluZykgKi9cclxuICBwYWdlOiBNb2RlbFNpZ25hbDxudW1iZXI+ID0gbW9kZWw8bnVtYmVyPigxKTtcclxuXHJcbiAgLyoqIFByb3ByaWVkYWRlIGRlIG9yZGVuYcOnw6NvICh1c2FuZG8gdHdvIHdheSBkYXRhIGJpbmRpbmcpICovXHJcbiAgb3JkZXJCeVByb3BlcnR5OiBNb2RlbFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IG1vZGVsPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gICAgXHJcbiAgLyoqIFByb3ByaWVkYWRlIGRlIG9yZGVuYcOnw6NvXHJcbiAgICogU2UgPSB0cnVlICBPcmRlbmFyw6EgZGUgbWVub3IgYW8gbWFpb3IgXHJcbiAgICogU2UgPSBmYWxzZSBPcmRlbmFyw6EgZGUgbWFpb3IgYW8gbWVub3IgKHVzYW5kbyB0d28gd2F5IGRhdGEgYmluZGluZykgKi9cclxuICBhc2NlbmRpbmc6IE1vZGVsU2lnbmFsPGJvb2xlYW4+ID0gbW9kZWw8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIC8qKiBGaWx0cm9zICh1c2FuZG8gdHdvIHdheSBkYXRhIGJpbmRpbmcpICovIFxyXG4gIGZpbHRlcjogTW9kZWxTaWduYWw8Q29tcGFyaXNvbltdPiA9IG1vZGVsPENvbXBhcmlzb25bXT4oW10pO1xyXG5cclxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIHVtIGRvcyBkYWRvcyDDqSBhdGl2YWRvLiBFbWl0ZSBvIGlkIGRvIGRhZG8gKi8gIFxyXG4gIGF0aXZhciA6IE91dHB1dEVtaXR0ZXJSZWY8bnVtYmVyPiA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVmcmVzaDogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuXHJcbiAgbG9hZGluZzogTW9kZWxTaWduYWw8Ym9vbGVhbj4gPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBMaXN0YSBkZSBkYWRvcyBhIHNlciBleGliaWRvcyAqL1xyXG4gIGl0ZW1zOiBNb2RlbFNpZ25hbDxUW10+ID0gbW9kZWw8VFtdPihbXSk7XHJcblxyXG4gIC8qKiBMaXN0YSBkZSBjYW1wb3MgYSBzZXIgZXhpYmlkb3MgKi9cclxuICBsc3RUYWJsZUZpZWxkczogTW9kZWxTaWduYWw8VGFibGVGaWVsZFtdPiA9IG1vZGVsPFRhYmxlRmllbGRbXT4oW10pO1xyXG4gIGxzdFRhYmxlRmllbGRzQXZhaWxhYmxlOiBTaWduYWw8QXZhaWxhYmxlVGFibGVGaWVsZFtdPiA9IGNvbXB1dGVkPEF2YWlsYWJsZVRhYmxlRmllbGRbXT4oKCkgPT4geyBcclxuICAgIHJldHVybiB0aGlzLmxzdFRhYmxlRmllbGRzKCkuZmlsdGVyKHAgPT4gIXAuaGlkZGVuKS5tYXAodGYgPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IEF2YWlsYWJsZVRhYmxlRmllbGQoXHJcbiAgICAgICAgdGYsIFxyXG4gICAgICAgIHRoaXMuYXNjZW5kaW5nKCkgJiYgdGhpcy5vcmRlckJ5UHJvcGVydHkoKSA9PSB0Zi5pbmRleCwgXHJcbiAgICAgICAgIXRoaXMuYXNjZW5kaW5nKCkgJiYgdGhpcy5vcmRlckJ5UHJvcGVydHkoKSA9PSB0Zi5pbmRleFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIC8qKiBSZW1vdmUgb3MgZmlsdHJvcyBubyBjYWJlw6dhbGhvIGRhIHRhYmVsYSAgKi9cclxuICBub0ZpbHRlcnM6IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKiogQXBsaWNhIGNsYXNzZXMgZGUgQ1NTIG5hIGNvbHVuYSBkZSBhY2lyZG8gY29tIG8gcmV0b3JubyBkYSBmdW7Dp8OjbyBwYXNzYWRhIGNvbW8gcGFyYW1ldHJvICAqL1xyXG4gIGNvbHVtbkNsYXNzOiBJbnB1dFNpZ25hbDxDU1NTdHlsZVN0cmluZ0dlbmVyYXRvciB8IG51bGw+ID0gaW5wdXQ8Q1NTU3R5bGVTdHJpbmdHZW5lcmF0b3IgfCBudWxsPihudWxsKTtcclxuXHJcbiAgLyoqIEFwbGljYSBzdHlsZSBkZSBDU1MgbmEgY29sdW5hIGRlIGFjaXJjbyBjb20gbyByZXRvcm5vIGRhIGZ1bsOnw6NvIHBhc3NhZGEgY29tbyBwYXJhbWV0cm8gICovXHJcbiAgY29sdW1uU3R5bGU6IElucHV0U2lnbmFsPENTU1N0eWxlU3RyaW5nR2VuZXJhdG9yIHwgbnVsbD4gPSBpbnB1dDxDU1NTdHlsZVN0cmluZ0dlbmVyYXRvciB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKiogUmVtb3ZlIGEgcGFnaW5hw6fDo28gZGEgbGlzdGFnZW0gKi9cclxuICBub1BhZ2luYXRpb246IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKiogQ2FtaW5obyBkZSByZWRpcmVjaW9uYW1lbnRvIGRvIGl0ZW0gKi9cclxuICBpdGVtUGF0aDogSW5wdXRTaWduYWw8c3RyaW5nPiA9IGlucHV0PHN0cmluZz4oJ3ZpZXcvOmlkJyk7XHJcbiAgaXRlbUNsaWNrOiBPdXRwdXRFbWl0dGVyUmVmPFQ+ID0gb3V0cHV0PFQ+KCk7XHJcblxyXG4gIElucHV0VHlwZSA9IElucHV0VHlwZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc3RvcmFnZVNlcnZpY2UgOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXIgICAgICAgIDogUm91dGVyLFxyXG4gICkgeyBcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgdGYgb2YgdGhpcy5sc3RUYWJsZUZpZWxkcygpLmZpbHRlcihwID0+IHAudHlwZSA9PSBJbnB1dFR5cGUuU2VsZWN0KSkge1xyXG4gICAgICAgICh0Zi5jb25maWd1cmF0aW9uIGFzIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbikubG9hZGVyLlJlZnJlc2goKS50aGVuKCgpID0+IHRoaXMuU2V0THN0Um93cygpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLlNldExzdFJvd3MoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgUmVkaXJlY3QoZmllbGQ6IFRhYmxlRmllbGQgfCB1bmRlZmluZWQsIGl0ZW06IFQpOiB2b2lke1xyXG4gICAgdGhpcy5pdGVtQ2xpY2suZW1pdChpdGVtKTtcclxuICAgIGlmKCFmaWVsZCl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYoZmllbGQuaW5kZXggPT0gJ2F0aXZvJyl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1lbHNlXHJcbiAgICBpZihmaWVsZC50eXBlICA9PSAnRmlsZScpe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9ZWxzZVxyXG4gICAgaWYodGhpcy5pdGVtUGF0aCgpKXtcclxuICAgICAgY29uc3QgaWQgPSBpdGVtWydpZCddOyBcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuaXRlbVBhdGgoKS5yZXBsYWNlKFwiOmlkXCIsIGlkLnRvU3RyaW5nKCkpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC4vJHtwYXRofWBdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFNldExzdFJvd3MoKXsgXHJcbiAgICB0aGlzLmxzdFJvd3MgPSB0aGlzLml0ZW1zKCkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IERlZmF1bHRUYWJsZVJvdzxUPihcclxuICAgICAgICBpdGVtLCBcclxuICAgICAgICBpdGVtWydpZCddLFxyXG4gICAgICAgIHRoaXMuR2V0Q29sdW1ucyhpdGVtKSxcclxuICAgICAgICB0aGlzLmNvbHVtbkNsYXNzKCkgPyB0aGlzLmNvbHVtbkNsYXNzKCkoJ2Fjb2VzJywgaXRlbSkgOiAnJyxcclxuICAgICAgICB0aGlzLmNvbHVtblN0eWxlKCkgPyB0aGlzLmNvbHVtbkNsYXNzKCkoJ2Fjb2VzJywgaXRlbSkgOiAnJyxcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBsc3RSb3dzOiBEZWZhdWx0VGFibGVSb3c8VD5bXSA9IFtdOyBcclxuXHJcbiAgR2V0Q29sdW1ucyhpdGVtOiBUKTogRGVmYXVsdFRhYmxlQ29sdW1uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubHN0VGFibGVGaWVsZHMoKS5maWx0ZXIocCA9PiAhcC5oaWRkZW4pLm1hcCh0ZiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0Zi5pbmRleF07XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBEZWZhdWx0VGFibGVDb2x1bW4odmFsdWUsIHRmKTtcclxuICAgICAgY29sdW1uLmNsYXNzID0gdGhpcy5jb2x1bW5DbGFzcygpID8gdGhpcy5jb2x1bW5DbGFzcygpKHRmLmluZGV4LCBpdGVtKSA6ICcnO1xyXG4gICAgICBjb2x1bW4uc3R5bGUgPSB0aGlzLmNvbHVtblN0eWxlKCkgPyB0aGlzLmNvbHVtblN0eWxlKCkodGYuaW5kZXgsIGl0ZW0pIDogJyc7XHJcbiAgICAgIFxyXG4gICAgICBpZighdmFsdWUpeyBcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSAnLScgXHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuQm9vbCl7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gXCI8Ym9vbD5cIlxyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuQ2VwKXtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSBGb3JtYXRDZXAodmFsdWUpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuQ29sb3Ipe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYoW0lucHV0VHlwZS5DcGYsIElucHV0VHlwZS5DbnBqLCBJbnB1dFR5cGUuQ3BmQ25wal0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IEZvcm1hdENwZkNucGoodmFsdWUpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuRGF0ZVRpbWUpe1xyXG4gICAgICAgIGNvbHVtbi5jbGFzcyArPSAnIGZvbnQtbW9ubyc7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gVXRpbHMuRGF0ZUlTT1RvRERNTVlZWVlISE1NKHZhbHVlKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkRhdGUpe1xyXG4gICAgICAgIGNvbHVtbi5jbGFzcyArPSAnIGZvbnQtbW9ubyc7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gVXRpbHMuRGF0ZUlTT1RvRERNTVlZWVlISE1NKHZhbHVlKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLlRpbWUpe1xyXG4gICAgICAgIGNvbHVtbi5jbGFzcyArPSAnIGZvbnQtbW9ubyc7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZihbSW5wdXRUeXBlLkRlY2ltYWwsIElucHV0VHlwZS5EZWNpbWFsLCBJbnB1dFR5cGUuQ3VycmVuY3ldLmluY2x1ZGVzKHRmLnR5cGUpKXtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uOiBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uID0gdGYuY29uZmlndXJhdGlvbjtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSBbXHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uLnByZWZpeCwgXHJcbiAgICAgICAgICBmb3JtYXROdW1iZXIodmFsdWUgYXMgbnVtYmVyLCAncHQtQlInLCBgMS4ke2NvbmZpZ3VyYXRpb24ucHJlY2lzaW9ufS0ke2NvbmZpZ3VyYXRpb24ucHJlY2lzaW9ufWApLFxyXG4gICAgICAgICAgY29uZmlndXJhdGlvbi5zdWZpeCwgXHJcbiAgICAgICAgXS5qb2luKCcgJyk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZih0Zi50eXBlID09IElucHV0VHlwZS5GaWxlKXtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSAnPGZpbGU+JztcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkljb24pe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9ICdpY29uJztcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLlNlbGVjdCl7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gKHRmLmNvbmZpZ3VyYXRpb24gYXMgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uKS5sb2FkZXIuR2V0TGFiZWwodmFsdWUpO1xyXG4gICAgICAgIGNvbHVtbi5sb2FkaW5nID0gISh0Zi5jb25maWd1cmF0aW9uIGFzIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbikubG9hZGVyLmlzTG9hZGVkO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYoW0lucHV0VHlwZS5TdHJpbmcsIElucHV0VHlwZS5UZXh0QXJlYV0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IHZhbHVlXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZihbSW5wdXRUeXBlLlRlbGVmb25lLCBJbnB1dFR5cGUuQ2VsdWxhciwgSW5wdXRUeXBlLlRlbGVmb25lQ2VsdWxhcl0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IEZvcm1hdFRlbGVmb25lQ2VsdWxhcih2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkgeyB0aGlzLlNldExzdFJvd3MoKTsgfVxyXG5cclxuICBTd2l0Y2hPcmRlcih0ZjogVGFibGVGaWVsZCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLm9yZGVyQnlQcm9wZXJ0eSgpICE9IHRmLmluZGV4KXtcclxuICAgICAgdGhpcy5vcmRlckJ5UHJvcGVydHkuc2V0KHRmLmluZGV4KTtcclxuICAgICAgdGhpcy5hc2NlbmRpbmcuc2V0KHRydWUpO1xyXG4gICAgfSBlbHNlIFxyXG4gICAgaWYodGhpcy5hc2NlbmRpbmcoKSl7XHJcbiAgICAgIHRoaXMuYXNjZW5kaW5nLnNldChmYWxzZSk7XHJcbiAgICB9IGVsc2V7IFxyXG4gICAgICB0aGlzLm9yZGVyQnlQcm9wZXJ0eS5zZXQobnVsbCk7IFxyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIENoYW5nZUZpbHRlcigpOiB2b2lke1xyXG4gICAgdGhpcy5maWx0ZXIuc2V0KENvbXBpbGVMc3RUYWJsZUZpZWxkKHRoaXMubHN0VGFibGVGaWVsZHMoKSkpO1xyXG4gICAgdGhpcy5wYWdlLnNldCgxKTtcclxuICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBBdGl2YXIoaWQ6IG51bWJlcik6IHZvaWR7XHJcbiAgICB0aGlzLmF0aXZhci5lbWl0KGlkKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIERlZmF1bHRUYWJsZVJvdzxUPntcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpdGVtOiBULFxyXG4gICAgcHVibGljIGlkOiBudW1iZXIgfCB1bmRlZmluZWQsXHJcbiAgICBwdWJsaWMgbHN0Q29sdW1uczogRGVmYXVsdFRhYmxlQ29sdW1uW10sXHJcbiAgICBwdWJsaWMgYWNvZXNDbGFzczogc3RyaW5nID0gJycsXHJcbiAgICBwdWJsaWMgYWNvZXNTdHlsZTogc3RyaW5nID0gJycsXHJcbiAgKXt9XHJcbn0gXHJcblxyXG5jbGFzcyBEZWZhdWx0VGFibGVDb2x1bW57XHJcbiAgcHVibGljIGxhYmVsOiBzdHJpbmcgfCBudWxsXHJcbiAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBzdHlsZTogc3RyaW5nID0gJyc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueSA9IG51bGwsXHJcbiAgICBwdWJsaWMgdGY6IFRhYmxlRmllbGQsXHJcbiAgKXt9XHJcbn1cclxuXHJcbmNsYXNzIEF2YWlsYWJsZVRhYmxlRmllbGR7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdGY6IFRhYmxlRmllbGQsXHJcbiAgICBwdWJsaWMgYXNjZW5kaW5nOiBib29sZWFuLFxyXG4gICAgcHVibGljIGRlc2NlbmRpbmc6IGJvb2xlYW4sXHJcbiAgKXt9XHJcbn0iLCI8IS0tIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgcm91bmRlZC0yeGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICAgIDxsb2FkaW5nIFt0eXBlXT1cIjNcIiBbbG9hZGluZ109XCJsb2FkaW5nXCI+PC9sb2FkaW5nPlxyXG4gICAgPGNvbnRlbnQtYmxvY2sgdGV4dD1cIlNlbSBEYWRvc1wiIFt2YWx1ZV09XCIhKGl0ZW1zLmxlbmd0aCAhPSAwIHx8IGxvYWRpbmcpXCI+PC9jb250ZW50LWJsb2NrPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgc2hyaW5rIHJlbGF0aXZlIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIDx0YWJsZT5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwicHgtMyAhaC0xMFwiICpuZ0lmPVwiYWNvZXNUZW1wbGF0ZVwiPiBBw6fDtWVzIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGxzdFRhYmxlRmllbGRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZmllbGQuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJwLTIgcHgtM1wiIGlkPVwidGgtZmlsdGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBoLWZ1bGxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiB2YXIoLS1pb24tdGFibGUtZmlsdGVyLXdyYXApO1wiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZighbm9GaWx0ZXJzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgtZmlsdGVyIGNsYXNzPVwiIXRleHQtYmFzZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudFwiICpuZ0lmPVwiKGZpZWxkLnR5cGUgIT0gSW5wdXRUeXBlRmlsZSkgJiYgIShmaWVsZC5maWx0ZXIgJiYgZmllbGQuZGlzYWJsZWRDaGFuZ2UoKSkgJiYgIW5vRmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiQ2hhbmdlRmlsdGVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RoLWZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZmllbGQuaGVhZGVyfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhKCEoZmllbGQudHlwZSAhPSBJbnB1dFR5cGVGaWxlKSAmJiAhKGZpZWxkLmZpbHRlciAmJiBmaWVsZC5kaXNhYmxlZENoYW5nZSgpKSkgJiYgIW5vRmlsdGVyc1wiIGNsYXNzPVwib3JkZXItc3dpdGNoIGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC0xIG1sLTIgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZC0yeGxcIiAoY2xpY2spPVwiU3dpdGNoT3JkZXIoZmllbGQpXCIgW25nQ2xhc3NdPVwieyAnb3JkZXJpbmctYXNjJyA6IG9yZGVyQnlQcm9wZXJ0eSA9PSBmaWVsZC5pbmRleCAmJiBhc2NlbmRpbmcsICdvcmRlcmluZy1kZXNjJyA6IG9yZGVyQnlQcm9wZXJ0eSA9PSBmaWVsZC5pbmRleCAmJiAhYXNjZW5kaW5nfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBpZD1cInVwXCIgICBuYW1lPVwiYXJyb3ctdXBcIiAgIGNsYXNzPVwiLW10LTFcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBpZD1cImRvd25cIiBuYW1lPVwiYXJyb3ctZG93blwiIGNsYXNzPVwiLW1sLTEgLW1iLTFcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dHIgW2hpZGRlbl09XCJsb2FkaW5nXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYoYWNvZXNUZW1wbGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHB5LTEgcHgtM1wiIFtzdHlsZV09XCJHZXRUZFN0eWxlKCdBY29lcycsIGl0ZW0pXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjb2VzVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGxzdFRhYmxlRmllbGRzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZmllbGQuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJweC0zIHB5LTJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJHZXRUZENsYXNzZXMoZmllbGQsIGl0ZW0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIkdldFRkU3R5bGUoZmllbGQsIGl0ZW0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlJlZGlyZWN0KGZpZWxkLCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogdmFyKC0taW9uLXRhYmxlLXJvdy13cmFwKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQuaW5kZXggPT0gJ2F0aXZvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCIgW3JvdXRlckxpbmtdPVwibnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10b2dnbGUgW2NoZWNrZWRdPVwiaXRlbVtmaWVsZC5pbmRleF1cIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChpb25DaGFuZ2UpPVwiQXRpdmFyKGl0ZW0uaWQpXCIgPjwvaW9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChcIkJvb2xcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQuY29uZmlndXJhdGlvbi50eXBlID09IFwidG9nZ2xlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIi1mdWxsIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXRvZ2dsZSBbY2hlY2tlZF09XCJpdGVtW2ZpZWxkLmluZGV4XVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9pb24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiLWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY2hlY2tib3ggW2NoZWNrZWRdPVwiaXRlbVtmaWVsZC5pbmRleF1cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaW9uLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoXCJGaWxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZG93bmxvYWQtYnV0dG9uIFsobmdNb2RlbCldPVwiaXRlbVtmaWVsZC5pbmRleF1cIiBbY29uZmlndXJhdGlvbl09XCJmaWVsZC5jb25maWd1cmF0aW9uXCI+PC9kb3dubG9hZC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoXCJTZWxlY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7R2V0U2VsZWN0TGFiZWwoaXRlbSwgZmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e0dldEZpZWxkKGl0ZW0sIGZpZWxkKX19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9aXRlbS1lbmRdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZighbm9QYWdpbmF0aW9uKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hyaW5rLTAgei1bMTAwXVwiPlxyXG4gICAgICAgICAgICA8ZGVmYXVsdC1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgICBbcGFnZV09XCJwYWdlXCJcclxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIkVtaXRQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW3RvdGFsXT1cInRvdGFsXCJcclxuICAgICAgICAgICAgICAgIFtsaW1pdF09XCJsaW1pdFwiXHJcbiAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cIml0ZW1zLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgPjwvZGVmYXVsdC1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG48L2Rpdj4gLS0+XHJcblxyXG48ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIHJvdW5kZWQteGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICAgIDxsb2FkaW5nIFt0eXBlXT1cIjNcIiBbbG9hZGluZ109XCJsb2FkaW5nKClcIj48L2xvYWRpbmc+XHJcbiAgICA8Y29udGVudC1ibG9jayB0ZXh0PVwiU2VtIERhZG9zXCIgW3ZhbHVlXT1cIiEoaXRlbXMubGVuZ3RoICE9IDAgfHwgbG9hZGluZylcIj48L2NvbnRlbnQtYmxvY2s+XHJcblxyXG4gICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgc2hyaW5rIHJlbGF0aXZlIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIDx0YWJsZT5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihhY29lc1RlbXBsYXRlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwicC0yXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBw6fDtWVzIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHRmYSBvZiBsc3RUYWJsZUZpZWxkc0F2YWlsYWJsZSgpOyB0cmFjayB0ZmEudGYuaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJwLTJcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCB0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZighbm9GaWx0ZXJzKCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgtZmlsdGVyIGNsYXNzPVwiIXRleHQtYmFzZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIigodGZhLnRmLnR5cGUgIT0gSW5wdXRUeXBlLkZpbGUgfHwgKHRmYS50Zi5maWx0ZXIgJiYgdGZhLnRmLmRpc2FibGVkQ2hhbmdlKCkpKSAmJiAhbm9GaWx0ZXJzKCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJ0ZmEudGZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJDaGFuZ2VGaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RoLWZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGZhLnRmLmhlYWRlcn19IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoKHRmYS50Zi50eXBlICE9IElucHV0VHlwZS5GaWxlIHx8ICh0ZmEudGYuZmlsdGVyICYmIHRmYS50Zi5kaXNhYmxlZENoYW5nZSgpKSkgJiYgIW5vRmlsdGVycygpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyAnYmctbGlnaHQvMTAgIW9wYWNpdHktMTAwJzogdGZhLmFzY2VuZGluZyB8fCB0ZmEuZGVzY2VuZGluZyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3JkZXIgaC00IHctNSByZWxhdGl2ZSBjdXJzb3ItcG9pbnRlciByb3VuZGVkLWxnIG9wYWNpdHktMCBkZWZhdWx0LXRyYW5zaXRpb25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJTd2l0Y2hPcmRlcih0ZmEudGYpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LXByaW1hcnldPVwidGZhLmFzY2VuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYXJyb3ctdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW9uLWljb24+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LXByaW1hcnldPVwidGZhLmRlc2NlbmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMCBib3R0b20tMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhcnJvdy1kb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBsc3RSb3dzOyB0cmFjayByb3cuaWQgfHwgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIFtoaWRkZW5dPVwibG9hZGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihhY29lc1RlbXBsYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAoY2xpY2spPVwiUmVkaXJlY3QodW5kZWZpbmVkLCByb3cuaXRlbSlcIiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHB5LTEgcHgtMyB7e3Jvdy5hY29lc0NsYXNzfX1cIiBbc3R5bGVdPVwicm93LmFjb2VzU3R5bGVcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjb2VzVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cuaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2Ygcm93LmxzdENvbHVtbnM7IHRyYWNrIGNvbC50Zi5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwie3tjb2wuY2xhc3N9fSBwLTIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiUmVkaXJlY3QoY29sLnRmLCByb3cuaXRlbSlcIiBbc3R5bGVdPVwiJ3doaXRlLXNwYWNlOiB2YXIoLS1pb24tdGFibGUtcm93LXdyYXApOycgKyBjb2wuc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoY29sLnRmLmluZGV4ID09ICdhdGl2bycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCIgW3JvdXRlckxpbmtdPVwibnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10b2dnbGUgW2NoZWNrZWRdPVwiY29sLnZhbHVlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmcoKVwiIChpb25DaGFuZ2UpPVwiQXRpdmFyKHJvdy5pZClcIiA+PC9pb24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2UgaWYgKGNvbC50Zi50eXBlID09IElucHV0VHlwZS5Cb29sKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoY29sLnRmLmNvbmZpZ3VyYXRpb24udHlwZSA9PSAndG9nZ2xlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tdG9nZ2xlIFtjaGVja2VkXT1cImNvbC52YWx1ZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9pb24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY2hlY2tib3ggW2NoZWNrZWRdPVwiY29sLnZhbHVlXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L2lvbi1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBlbHNlIGlmIChjb2wudGYudHlwZSA9PSBJbnB1dFR5cGUuRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZG93bmxvYWQtYnV0dG9uIFsobmdNb2RlbCldPVwiY29sLnZhbHVlXCIgW2NvbmZpZ3VyYXRpb25dPVwiY29sLnRmLmNvbmZpZ3VyYXRpb25cIj48L2Rvd25sb2FkLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2UgaWYgKGNvbC5sb2FkaW5nKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCI+PC9pb24tc3Bpbm5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb2wubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWl0ZW0tZW5kXVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgIDwvZGl2PlxyXG4gICAgIEBpZighbm9QYWdpbmF0aW9uKCkpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaHJpbmstMCB6LVsxMDBdXCI+XHJcbiAgICAgICAgICAgIDxkZWZhdWx0LXBhZ2luYXRpb25cclxuICAgICAgICAgICAgICAgIFtwYWdlXT1cInBhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlLnNldCgkZXZlbnQpOyByZWZyZXNoLmVtaXQoKVwiXHJcbiAgICAgICAgICAgICAgICBbdG90YWxdPVwidG90YWwoKVwiXHJcbiAgICAgICAgICAgICAgICBbbGltaXRdPVwibGltaXQoKVwiXHJcbiAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cIml0ZW1zKCkubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmcoKVwiXHJcbiAgICAgICAgICAgID48L2RlZmF1bHQtcGFnaW5hdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy15LWF1dG9cIj5cclxuICAgICAgICBAZm9yIChpdGVtIG9mIGxzdFJvd3M7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci1yZWQtNTAwIGZsZXhcIj5cclxuICAgICAgICAgICAgICAgIHt7JGluZGV4fX0gLSBcclxuICAgICAgICAgICAgICAgIEBmb3IgKGxibCBvZiBpdGVtLmxzdENvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIChbe3tsYmwubGFiZWx9fV0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PiAtLT5cclxuPC9kaXY+Il19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGVmYXVsdC9kZWZhdWx0LXRhYmxlL2RlZmF1bHQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlZmF1bHQvZGVmYXVsdC10YWJsZS9kZWZhdWx0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBZSxLQUFLLEVBQXVCLE1BQU0sRUFBdUMsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUdyRixPQUFPLEVBQWMsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBU3hELE1BQU0sT0FBTyxxQkFBcUI7SUFvRWhDLFlBQ1MsY0FBK0IsRUFDOUIsY0FBOEIsRUFDOUIsTUFBc0I7UUFGdkIsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQzlC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QUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQzsrR0F6TVUscUJBQXFCO21HQUFyQixxQkFBcUIsNDdFQ3ZCbEMsdTBZQXFOTTs7NEZEOUxPLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxlQUFlO3FJQU1oQixhQUFhO3NCQUFyQixLQUFLOztBQTBNUixNQUFNLGVBQWU7SUFDbkIsWUFDUyxJQUFPLEVBQ1AsRUFBc0IsRUFDdEIsVUFBZ0MsRUFDaEMsYUFBcUIsRUFBRSxFQUN2QixhQUFxQixFQUFFO1FBSnZCLFNBQUksR0FBSixJQUFJLENBQUc7UUFDUCxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFhO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQWE7SUFDOUIsQ0FBQztDQUNKO0FBRUQsTUFBTSxrQkFBa0I7SUFLdEIsWUFDUyxRQUFhLElBQUksRUFDakIsRUFBYztRQURkLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUxoQixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsVUFBSyxHQUFXLEVBQUUsQ0FBQztJQUl4QixDQUFDO0NBQ0o7QUFFRCxNQUFNLG1CQUFtQjtJQUN2QixZQUNTLEVBQWMsRUFDZCxTQUFrQixFQUNsQixVQUFtQjtRQUZuQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixlQUFVLEdBQVYsVUFBVSxDQUFTO0lBQzFCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdE51bWJlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgSW5wdXQsIGlucHV0LCBJbnB1dFNpZ25hbCwgbW9kZWwsIE1vZGVsU2lnbmFsLCBPbkluaXQsIG91dHB1dCwgT3V0cHV0RW1pdHRlclJlZiwgT3V0cHV0UmVmLCBTaWduYWwsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC1kZWNpbWFsL2lucHV0LWRlY2ltYWwuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC1zZWxlY3QvaW5wdXQuc2VsZWN0LmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBGb3JtYXRUZWxlZm9uZUNlbHVsYXIgfSBmcm9tICcuLi8uLi9pbnB1dHMvaW5wdXQtdGVsZWZvbmUvaW5wdXQtdGVsZWZvbmUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy93ZWIvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0Q3BmQ25waiB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC1jcGYtY25wai9pbnB1dC1jcGYtY25wai5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9odHRwLnNlcnZpY2UnXHJcbmltcG9ydCB7IFRhYmxlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2lucHV0cy90YWJsZS1maWVsZCc7XHJcbmltcG9ydCB7IENvbXBhcmlzb24sIENvbXBpbGVMc3RUYWJsZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wYXJpc29uL2NvbXBhcmlzb24nO1xyXG5pbXBvcnQgeyBGb3JtYXRDZXAgfSBmcm9tICcuLi8uLi9pbnB1dHMvaW5wdXQtY2VwL2lucHV0LWNlcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9pbnB1dHMvaW5wdXQtdHlwZSc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcblxyXG50eXBlIENTU1N0eWxlU3RyaW5nR2VuZXJhdG9yID0gKGluZGV4OiBzdHJpbmcsIG9iamVjdDogYW55KSA9PiBzdHJpbmc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RlZmF1bHQtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWZhdWx0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kZWZhdWx0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGFibGVDb21wb25lbnQ8U2VydmljZSBleHRlbmRzIEh0dHBTZXJ2aWNlLCBUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGFjb2VzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqIFRlbXBsYXRlIGRlIGHDp8O1ZXMsIGRldmUgc2VyIHVtIGVsZW1lbnRvIGBgYDxuZy10ZW1wbGF0ZT5gYGAgKi9cclxuICAvLyBhY29lc1RlbXBsYXRlOiBJbnB1dFNpZ25hbDxUZW1wbGF0ZVJlZjxhbnk+PiA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIC8qKiBTZXJ2aWNlIGEgc2VyIHV0aWxpemFkbyBuYSBsaXN0YWdlbSAqL1xyXG4gIHNlcnZpY2U6IElucHV0U2lnbmFsPFNlcnZpY2U+ID0gaW5wdXQ8U2VydmljZT4oKTtcclxuXHJcbiAgdG90YWw6IE1vZGVsU2lnbmFsPG51bWJlcj4gPSBtb2RlbDxudW1iZXI+KDApO1xyXG5cclxuICAvKiogTsO6bWVybyBkZSBpdGVtcyBtw6F4aW1vICh1c2FuZG8gdHdvIHdheSBkYXRhIGJpbmRpbmcpICovXHJcbiAgbGltaXQ6IE1vZGVsU2lnbmFsPG51bWJlcj4gPSBtb2RlbDxudW1iZXI+KCk7XHJcblxyXG4gIC8qKiBWYWxvciBkYSBwYWdpbmEsIHNldGFkbyA9IDEgcXVhbmRvIHRyb2NhLXNlIG8gdmFsb3IgZGUgbGltaXRlIGRlIHBhZ2luYXMgKHVzYW5kbyB0d28gd2F5IGRhdGEgYmluZGluZykgKi9cclxuICBwYWdlOiBNb2RlbFNpZ25hbDxudW1iZXI+ID0gbW9kZWw8bnVtYmVyPigxKTtcclxuXHJcbiAgLyoqIFByb3ByaWVkYWRlIGRlIG9yZGVuYcOnw6NvICh1c2FuZG8gdHdvIHdheSBkYXRhIGJpbmRpbmcpICovXHJcbiAgb3JkZXJCeVByb3BlcnR5OiBNb2RlbFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IG1vZGVsPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gICAgXHJcbiAgLyoqIFByb3ByaWVkYWRlIGRlIG9yZGVuYcOnw6NvXHJcbiAgICogU2UgPSB0cnVlICBPcmRlbmFyw6EgZGUgbWVub3IgYW8gbWFpb3IgXHJcbiAgICogU2UgPSBmYWxzZSBPcmRlbmFyw6EgZGUgbWFpb3IgYW8gbWVub3IgKHVzYW5kbyB0d28gd2F5IGRhdGEgYmluZGluZykgKi9cclxuICBhc2NlbmRpbmc6IE1vZGVsU2lnbmFsPGJvb2xlYW4+ID0gbW9kZWw8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIC8qKiBGaWx0cm9zICh1c2FuZG8gdHdvIHdheSBkYXRhIGJpbmRpbmcpICovIFxyXG4gIGZpbHRlcjogTW9kZWxTaWduYWw8Q29tcGFyaXNvbltdPiA9IG1vZGVsPENvbXBhcmlzb25bXT4oW10pO1xyXG5cclxuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIHVtIGRvcyBkYWRvcyDDqSBhdGl2YWRvLiBFbWl0ZSBvIGlkIGRvIGRhZG8gKi8gIFxyXG4gIGF0aXZhciA6IE91dHB1dEVtaXR0ZXJSZWY8bnVtYmVyPiA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVmcmVzaDogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuXHJcbiAgbG9hZGluZzogTW9kZWxTaWduYWw8Ym9vbGVhbj4gPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBMaXN0YSBkZSBkYWRvcyBhIHNlciBleGliaWRvcyAqL1xyXG4gIGl0ZW1zOiBNb2RlbFNpZ25hbDxUW10+ID0gbW9kZWw8VFtdPihbXSk7XHJcblxyXG4gIC8qKiBMaXN0YSBkZSBjYW1wb3MgYSBzZXIgZXhpYmlkb3MgKi9cclxuICBsc3RUYWJsZUZpZWxkczogTW9kZWxTaWduYWw8VGFibGVGaWVsZFtdPiA9IG1vZGVsPFRhYmxlRmllbGRbXT4oW10pO1xyXG4gIGxzdFRhYmxlRmllbGRzQXZhaWxhYmxlOiBTaWduYWw8QXZhaWxhYmxlVGFibGVGaWVsZFtdPiA9IGNvbXB1dGVkPEF2YWlsYWJsZVRhYmxlRmllbGRbXT4oKCkgPT4geyBcclxuICAgIHJldHVybiB0aGlzLmxzdFRhYmxlRmllbGRzKCkuZmlsdGVyKHAgPT4gIXAuaGlkZGVuKS5tYXAodGYgPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IEF2YWlsYWJsZVRhYmxlRmllbGQoXHJcbiAgICAgICAgdGYsIFxyXG4gICAgICAgIHRoaXMuYXNjZW5kaW5nKCkgJiYgdGhpcy5vcmRlckJ5UHJvcGVydHkoKSA9PSB0Zi5pbmRleCwgXHJcbiAgICAgICAgIXRoaXMuYXNjZW5kaW5nKCkgJiYgdGhpcy5vcmRlckJ5UHJvcGVydHkoKSA9PSB0Zi5pbmRleFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIC8qKiBSZW1vdmUgb3MgZmlsdHJvcyBubyBjYWJlw6dhbGhvIGRhIHRhYmVsYSAgKi9cclxuICBub0ZpbHRlcnM6IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKiogQXBsaWNhIGNsYXNzZXMgZGUgQ1NTIG5hIGNvbHVuYSBkZSBhY2lyZG8gY29tIG8gcmV0b3JubyBkYSBmdW7Dp8OjbyBwYXNzYWRhIGNvbW8gcGFyYW1ldHJvICAqL1xyXG4gIGNvbHVtbkNsYXNzOiBJbnB1dFNpZ25hbDxDU1NTdHlsZVN0cmluZ0dlbmVyYXRvciB8IG51bGw+ID0gaW5wdXQ8Q1NTU3R5bGVTdHJpbmdHZW5lcmF0b3IgfCBudWxsPihudWxsKTtcclxuXHJcbiAgLyoqIEFwbGljYSBzdHlsZSBkZSBDU1MgbmEgY29sdW5hIGRlIGFjaXJjbyBjb20gbyByZXRvcm5vIGRhIGZ1bsOnw6NvIHBhc3NhZGEgY29tbyBwYXJhbWV0cm8gICovXHJcbiAgY29sdW1uU3R5bGU6IElucHV0U2lnbmFsPENTU1N0eWxlU3RyaW5nR2VuZXJhdG9yIHwgbnVsbD4gPSBpbnB1dDxDU1NTdHlsZVN0cmluZ0dlbmVyYXRvciB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKiogUmVtb3ZlIGEgcGFnaW5hw6fDo28gZGEgbGlzdGFnZW0gKi9cclxuICBub1BhZ2luYXRpb246IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKiogQ2FtaW5obyBkZSByZWRpcmVjaW9uYW1lbnRvIGRvIGl0ZW0gKi9cclxuICBpdGVtUGF0aDogSW5wdXRTaWduYWw8c3RyaW5nPiA9IGlucHV0PHN0cmluZz4oJ3ZpZXcvOmlkJyk7XHJcbiAgaXRlbUNsaWNrOiBPdXRwdXRFbWl0dGVyUmVmPFQ+ID0gb3V0cHV0PFQ+KCk7XHJcblxyXG4gIElucHV0VHlwZSA9IElucHV0VHlwZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc3RvcmFnZVNlcnZpY2UgOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXIgICAgICAgIDogUm91dGVyLFxyXG4gICkgeyBcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgdGYgb2YgdGhpcy5sc3RUYWJsZUZpZWxkcygpLmZpbHRlcihwID0+IHAudHlwZSA9PSBJbnB1dFR5cGUuU2VsZWN0KSkge1xyXG4gICAgICAgICh0Zi5jb25maWd1cmF0aW9uIGFzIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbikubG9hZGVyLlJlZnJlc2goKS50aGVuKCgpID0+IHRoaXMuU2V0THN0Um93cygpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLlNldExzdFJvd3MoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgUmVkaXJlY3QoZmllbGQ6IFRhYmxlRmllbGQgfCB1bmRlZmluZWQsIGl0ZW06IFQpOiB2b2lke1xyXG4gICAgdGhpcy5pdGVtQ2xpY2suZW1pdChpdGVtKTtcclxuICAgIGlmKCFmaWVsZCl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYoZmllbGQuaW5kZXggPT0gJ2F0aXZvJyl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1lbHNlXHJcbiAgICBpZihmaWVsZC50eXBlICA9PSAnRmlsZScpe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9ZWxzZVxyXG4gICAgaWYodGhpcy5pdGVtUGF0aCgpKXtcclxuICAgICAgY29uc3QgaWQgPSBpdGVtWydpZCddOyBcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuaXRlbVBhdGgoKS5yZXBsYWNlKFwiOmlkXCIsIGlkLnRvU3RyaW5nKCkpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC4vJHtwYXRofWBdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFNldExzdFJvd3MoKXsgXHJcbiAgICB0aGlzLmxzdFJvd3MgPSB0aGlzLml0ZW1zKCkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IERlZmF1bHRUYWJsZVJvdzxUPihcclxuICAgICAgICBpdGVtLCBcclxuICAgICAgICBpdGVtWydpZCddLFxyXG4gICAgICAgIHRoaXMuR2V0Q29sdW1ucyhpdGVtKSxcclxuICAgICAgICB0aGlzLmNvbHVtbkNsYXNzKCkgPyB0aGlzLmNvbHVtbkNsYXNzKCkoJ2Fjb2VzJywgaXRlbSkgOiAnJyxcclxuICAgICAgICB0aGlzLmNvbHVtblN0eWxlKCkgPyB0aGlzLmNvbHVtbkNsYXNzKCkoJ2Fjb2VzJywgaXRlbSkgOiAnJyxcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBsc3RSb3dzOiBEZWZhdWx0VGFibGVSb3c8VD5bXSA9IFtdOyBcclxuXHJcbiAgR2V0Q29sdW1ucyhpdGVtOiBUKTogRGVmYXVsdFRhYmxlQ29sdW1uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubHN0VGFibGVGaWVsZHMoKS5maWx0ZXIocCA9PiAhcC5oaWRkZW4pLm1hcCh0ZiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0Zi5pbmRleF07XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBEZWZhdWx0VGFibGVDb2x1bW4odmFsdWUsIHRmKTtcclxuICAgICAgY29sdW1uLmNsYXNzID0gdGhpcy5jb2x1bW5DbGFzcygpID8gdGhpcy5jb2x1bW5DbGFzcygpKHRmLmluZGV4LCBpdGVtKSA6ICcnO1xyXG4gICAgICBjb2x1bW4uc3R5bGUgPSB0aGlzLmNvbHVtblN0eWxlKCkgPyB0aGlzLmNvbHVtblN0eWxlKCkodGYuaW5kZXgsIGl0ZW0pIDogJyc7XHJcbiAgICAgIFxyXG4gICAgICBpZighdmFsdWUpeyBcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSAnLScgXHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuQm9vbCl7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gXCI8Ym9vbD5cIlxyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuQ2VwKXtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSBGb3JtYXRDZXAodmFsdWUpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuQ29sb3Ipe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYoW0lucHV0VHlwZS5DcGYsIElucHV0VHlwZS5DbnBqLCBJbnB1dFR5cGUuQ3BmQ25wal0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IEZvcm1hdENwZkNucGoodmFsdWUpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYodGYudHlwZSA9PSBJbnB1dFR5cGUuRGF0ZVRpbWUpe1xyXG4gICAgICAgIGNvbHVtbi5jbGFzcyArPSAnIGZvbnQtbW9ubyc7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gVXRpbHMuRGF0ZUlTT1RvRERNTVlZWVlISE1NKHZhbHVlKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkRhdGUpe1xyXG4gICAgICAgIGNvbHVtbi5jbGFzcyArPSAnIGZvbnQtbW9ubyc7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gVXRpbHMuRGF0ZUlTT1RvRERNTVlZWVlISE1NKHZhbHVlKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLlRpbWUpe1xyXG4gICAgICAgIGNvbHVtbi5jbGFzcyArPSAnIGZvbnQtbW9ubyc7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZihbSW5wdXRUeXBlLkRlY2ltYWwsIElucHV0VHlwZS5EZWNpbWFsLCBJbnB1dFR5cGUuQ3VycmVuY3ldLmluY2x1ZGVzKHRmLnR5cGUpKXtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uOiBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uID0gdGYuY29uZmlndXJhdGlvbjtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSBbXHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uLnByZWZpeCwgXHJcbiAgICAgICAgICBmb3JtYXROdW1iZXIodmFsdWUgYXMgbnVtYmVyLCAncHQtQlInLCBgMS4ke2NvbmZpZ3VyYXRpb24ucHJlY2lzaW9ufS0ke2NvbmZpZ3VyYXRpb24ucHJlY2lzaW9ufWApLFxyXG4gICAgICAgICAgY29uZmlndXJhdGlvbi5zdWZpeCwgXHJcbiAgICAgICAgXS5qb2luKCcgJyk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZih0Zi50eXBlID09IElucHV0VHlwZS5GaWxlKXtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSAnPGZpbGU+JztcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkljb24pe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9ICdpY29uJztcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLlNlbGVjdCl7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gKHRmLmNvbmZpZ3VyYXRpb24gYXMgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uKS5sb2FkZXIuR2V0TGFiZWwodmFsdWUpO1xyXG4gICAgICAgIGNvbHVtbi5sb2FkaW5nID0gISh0Zi5jb25maWd1cmF0aW9uIGFzIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbikubG9hZGVyLmlzTG9hZGVkO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYoW0lucHV0VHlwZS5TdHJpbmcsIElucHV0VHlwZS5UZXh0QXJlYV0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IHZhbHVlXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZihbSW5wdXRUeXBlLlRlbGVmb25lLCBJbnB1dFR5cGUuQ2VsdWxhciwgSW5wdXRUeXBlLlRlbGVmb25lQ2VsdWxhcl0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IEZvcm1hdFRlbGVmb25lQ2VsdWxhcih2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkgeyB0aGlzLlNldExzdFJvd3MoKTsgfVxyXG5cclxuICBTd2l0Y2hPcmRlcih0ZjogVGFibGVGaWVsZCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLm9yZGVyQnlQcm9wZXJ0eSgpICE9IHRmLmluZGV4KXtcclxuICAgICAgdGhpcy5vcmRlckJ5UHJvcGVydHkuc2V0KHRmLmluZGV4KTtcclxuICAgICAgdGhpcy5hc2NlbmRpbmcuc2V0KHRydWUpO1xyXG4gICAgfSBlbHNlIFxyXG4gICAgaWYodGhpcy5hc2NlbmRpbmcoKSl7XHJcbiAgICAgIHRoaXMuYXNjZW5kaW5nLnNldChmYWxzZSk7XHJcbiAgICB9IGVsc2V7IFxyXG4gICAgICB0aGlzLm9yZGVyQnlQcm9wZXJ0eS5zZXQobnVsbCk7IFxyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIENoYW5nZUZpbHRlcigpOiB2b2lke1xyXG4gICAgdGhpcy5maWx0ZXIuc2V0KENvbXBpbGVMc3RUYWJsZUZpZWxkKHRoaXMubHN0VGFibGVGaWVsZHMoKSkpO1xyXG4gICAgdGhpcy5wYWdlLnNldCgxKTtcclxuICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBBdGl2YXIoaWQ6IG51bWJlcik6IHZvaWR7XHJcbiAgICB0aGlzLmF0aXZhci5lbWl0KGlkKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIERlZmF1bHRUYWJsZVJvdzxUPntcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpdGVtOiBULFxyXG4gICAgcHVibGljIGlkOiBudW1iZXIgfCB1bmRlZmluZWQsXHJcbiAgICBwdWJsaWMgbHN0Q29sdW1uczogRGVmYXVsdFRhYmxlQ29sdW1uW10sXHJcbiAgICBwdWJsaWMgYWNvZXNDbGFzczogc3RyaW5nID0gJycsXHJcbiAgICBwdWJsaWMgYWNvZXNTdHlsZTogc3RyaW5nID0gJycsXHJcbiAgKXt9XHJcbn0gXHJcblxyXG5jbGFzcyBEZWZhdWx0VGFibGVDb2x1bW57XHJcbiAgcHVibGljIGxhYmVsOiBzdHJpbmcgfCBudWxsXHJcbiAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBzdHlsZTogc3RyaW5nID0gJyc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueSA9IG51bGwsXHJcbiAgICBwdWJsaWMgdGY6IFRhYmxlRmllbGQsXHJcbiAgKXt9XHJcbn1cclxuXHJcbmNsYXNzIEF2YWlsYWJsZVRhYmxlRmllbGR7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdGY6IFRhYmxlRmllbGQsXHJcbiAgICBwdWJsaWMgYXNjZW5kaW5nOiBib29sZWFuLFxyXG4gICAgcHVibGljIGRlc2NlbmRpbmc6IGJvb2xlYW4sXHJcbiAgKXt9XHJcbn0iLCI8IS0tIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgcm91bmRlZC0yeGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICAgIDxsb2FkaW5nIFt0eXBlXT1cIjNcIiBbbG9hZGluZ109XCJsb2FkaW5nXCI+PC9sb2FkaW5nPlxyXG4gICAgPGNvbnRlbnQtYmxvY2sgdGV4dD1cIlNlbSBEYWRvc1wiIFt2YWx1ZV09XCIhKGl0ZW1zLmxlbmd0aCAhPSAwIHx8IGxvYWRpbmcpXCI+PC9jb250ZW50LWJsb2NrPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgc2hyaW5rIHJlbGF0aXZlIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIDx0YWJsZT5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwicHgtMyAhaC0xMFwiICpuZ0lmPVwiYWNvZXNUZW1wbGF0ZVwiPiBBw6fDtWVzIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGxzdFRhYmxlRmllbGRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZmllbGQuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJwLTIgcHgtM1wiIGlkPVwidGgtZmlsdGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBoLWZ1bGxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiB2YXIoLS1pb24tdGFibGUtZmlsdGVyLXdyYXApO1wiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZighbm9GaWx0ZXJzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgtZmlsdGVyIGNsYXNzPVwiIXRleHQtYmFzZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudFwiICpuZ0lmPVwiKGZpZWxkLnR5cGUgIT0gSW5wdXRUeXBlRmlsZSkgJiYgIShmaWVsZC5maWx0ZXIgJiYgZmllbGQuZGlzYWJsZWRDaGFuZ2UoKSkgJiYgIW5vRmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiQ2hhbmdlRmlsdGVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RoLWZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZmllbGQuaGVhZGVyfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhKCEoZmllbGQudHlwZSAhPSBJbnB1dFR5cGVGaWxlKSAmJiAhKGZpZWxkLmZpbHRlciAmJiBmaWVsZC5kaXNhYmxlZENoYW5nZSgpKSkgJiYgIW5vRmlsdGVyc1wiIGNsYXNzPVwib3JkZXItc3dpdGNoIGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC0xIG1sLTIgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZC0yeGxcIiAoY2xpY2spPVwiU3dpdGNoT3JkZXIoZmllbGQpXCIgW25nQ2xhc3NdPVwieyAnb3JkZXJpbmctYXNjJyA6IG9yZGVyQnlQcm9wZXJ0eSA9PSBmaWVsZC5pbmRleCAmJiBhc2NlbmRpbmcsICdvcmRlcmluZy1kZXNjJyA6IG9yZGVyQnlQcm9wZXJ0eSA9PSBmaWVsZC5pbmRleCAmJiAhYXNjZW5kaW5nfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBpZD1cInVwXCIgICBuYW1lPVwiYXJyb3ctdXBcIiAgIGNsYXNzPVwiLW10LTFcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBpZD1cImRvd25cIiBuYW1lPVwiYXJyb3ctZG93blwiIGNsYXNzPVwiLW1sLTEgLW1iLTFcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dHIgW2hpZGRlbl09XCJsb2FkaW5nXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYoYWNvZXNUZW1wbGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHB5LTEgcHgtM1wiIFtzdHlsZV09XCJHZXRUZFN0eWxlKCdBY29lcycsIGl0ZW0pXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjb2VzVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGxzdFRhYmxlRmllbGRzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZmllbGQuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJweC0zIHB5LTJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJHZXRUZENsYXNzZXMoZmllbGQsIGl0ZW0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIkdldFRkU3R5bGUoZmllbGQsIGl0ZW0pXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlJlZGlyZWN0KGZpZWxkLCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogdmFyKC0taW9uLXRhYmxlLXJvdy13cmFwKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQuaW5kZXggPT0gJ2F0aXZvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCIgW3JvdXRlckxpbmtdPVwibnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10b2dnbGUgW2NoZWNrZWRdPVwiaXRlbVtmaWVsZC5pbmRleF1cIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChpb25DaGFuZ2UpPVwiQXRpdmFyKGl0ZW0uaWQpXCIgPjwvaW9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChcIkJvb2xcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGQuY29uZmlndXJhdGlvbi50eXBlID09IFwidG9nZ2xlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIi1mdWxsIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXRvZ2dsZSBbY2hlY2tlZF09XCJpdGVtW2ZpZWxkLmluZGV4XVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9pb24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiLWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY2hlY2tib3ggW2NoZWNrZWRdPVwiaXRlbVtmaWVsZC5pbmRleF1cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaW9uLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoXCJGaWxlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZG93bmxvYWQtYnV0dG9uIFsobmdNb2RlbCldPVwiaXRlbVtmaWVsZC5pbmRleF1cIiBbY29uZmlndXJhdGlvbl09XCJmaWVsZC5jb25maWd1cmF0aW9uXCI+PC9kb3dubG9hZC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoXCJTZWxlY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7R2V0U2VsZWN0TGFiZWwoaXRlbSwgZmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e0dldEZpZWxkKGl0ZW0sIGZpZWxkKX19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9aXRlbS1lbmRdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZighbm9QYWdpbmF0aW9uKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hyaW5rLTAgei1bMTAwXVwiPlxyXG4gICAgICAgICAgICA8ZGVmYXVsdC1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgICBbcGFnZV09XCJwYWdlXCJcclxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIkVtaXRQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW3RvdGFsXT1cInRvdGFsXCJcclxuICAgICAgICAgICAgICAgIFtsaW1pdF09XCJsaW1pdFwiXHJcbiAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cIml0ZW1zLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgPjwvZGVmYXVsdC1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG48L2Rpdj4gLS0+XHJcblxyXG48ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIHJvdW5kZWQteGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICAgIDxsb2FkaW5nIFt0eXBlXT1cIjNcIiBbbG9hZGluZ109XCJsb2FkaW5nKClcIj48L2xvYWRpbmc+XHJcbiAgICA8Y29udGVudC1ibG9jayB0ZXh0PVwiU2VtIERhZG9zXCIgW3ZhbHVlXT1cIiEoaXRlbXMubGVuZ3RoICE9IDAgfHwgbG9hZGluZylcIj48L2NvbnRlbnQtYmxvY2s+XHJcblxyXG4gICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgc2hyaW5rIHJlbGF0aXZlIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIDx0YWJsZT5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihhY29lc1RlbXBsYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJwLTJcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBw6fDtWVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAodGZhIG9mIGxzdFRhYmxlRmllbGRzQXZhaWxhYmxlKCk7IHRyYWNrIHRmYS50Zi5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInAtMlwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKCFub0ZpbHRlcnMoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aC1maWx0ZXIgY2xhc3M9XCIhdGV4dC1iYXNlXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKCh0ZmEudGYudHlwZSAhPSBJbnB1dFR5cGUuRmlsZSB8fCAodGZhLnRmLmZpbHRlciAmJiB0ZmEudGYuZGlzYWJsZWRDaGFuZ2UoKSkpICYmICFub0ZpbHRlcnMoKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cInRmYS50ZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIkNoYW5nZUZpbHRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGgtZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0ZmEudGYuaGVhZGVyfX0gXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZigodGZhLnRmLnR5cGUgIT0gSW5wdXRUeXBlLkZpbGUgfHwgKHRmYS50Zi5maWx0ZXIgJiYgdGZhLnRmLmRpc2FibGVkQ2hhbmdlKCkpKSAmJiAhbm9GaWx0ZXJzKCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7ICdiZy1saWdodC8xMCAhb3BhY2l0eS0xMDAnOiB0ZmEuYXNjZW5kaW5nIHx8IHRmYS5kZXNjZW5kaW5nIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcmRlciBoLTQgdy01IHJlbGF0aXZlIGN1cnNvci1wb2ludGVyIHJvdW5kZWQtbGcgb3BhY2l0eS0wIGRlZmF1bHQtdHJhbnNpdGlvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlN3aXRjaE9yZGVyKHRmYS50ZilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJ0ZmEuYXNjZW5kaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGxlZnQtMCB0b3AtMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhcnJvdy11cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24taWNvbj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJ0ZmEuZGVzY2VuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSByaWdodC0wIGJvdHRvbS0wXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFycm93LWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW9uLWljb24+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgQGZvciAocm93IG9mIGxzdFJvd3M7IHRyYWNrIHJvdy5pZCB8fCAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8dHIgW2hpZGRlbl09XCJsb2FkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGFjb2VzVGVtcGxhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJSZWRpcmVjdCh1bmRlZmluZWQsIHJvdy5pdGVtKVwiIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXAgcHktMSBweC0zIHt7cm93LmFjb2VzQ2xhc3N9fVwiIFtzdHlsZV09XCJyb3cuYWNvZXNTdHlsZVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWNvZXNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdy5pdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiByb3cubHN0Q29sdW1uczsgdHJhY2sgY29sLnRmLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ7e2NvbC5jbGFzc319IHAtMiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJSZWRpcmVjdChjb2wudGYsIHJvdy5pdGVtKVwiIFtzdHlsZV09XCInd2hpdGUtc3BhY2U6IHZhcigtLWlvbi10YWJsZS1yb3ctd3JhcCk7JyArIGNvbC5zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb2wudGYuaW5kZXggPT0gJ2F0aXZvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnRcIiBbcm91dGVyTGlua109XCJudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXRvZ2dsZSBbY2hlY2tlZF09XCJjb2wudmFsdWVcIiBbZGlzYWJsZWRdPVwibG9hZGluZygpXCIgKGlvbkNoYW5nZSk9XCJBdGl2YXIocm93LmlkKVwiID48L2lvbi10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSBpZiAoY29sLnRmLnR5cGUgPT0gSW5wdXRUeXBlLkJvb2wpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb2wudGYuY29uZmlndXJhdGlvbi50eXBlID09ICd0b2dnbGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10b2dnbGUgW2NoZWNrZWRdPVwiY29sLnZhbHVlXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L2lvbi10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBbY2hlY2tlZF09XCJjb2wudmFsdWVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaW9uLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2UgaWYgKGNvbC50Zi50eXBlID09IElucHV0VHlwZS5GaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkb3dubG9hZC1idXR0b24gWyhuZ01vZGVsKV09XCJjb2wudmFsdWVcIiBbY29uZmlndXJhdGlvbl09XCJjb2wudGYuY29uZmlndXJhdGlvblwiPjwvZG93bmxvYWQtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSBpZiAoY29sLmxvYWRpbmcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIj48L2lvbi1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbC5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9aXRlbS1lbmRdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgPC9kaXY+XHJcbiAgICAgQGlmKCFub1BhZ2luYXRpb24oKSl7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNocmluay0wIHotWzEwMF1cIj5cclxuICAgICAgICAgICAgPGRlZmF1bHQtcGFnaW5hdGlvblxyXG4gICAgICAgICAgICAgICAgW3BhZ2VdPVwicGFnZSgpXCJcclxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2Uuc2V0KCRldmVudCk7IHJlZnJlc2guZW1pdCgpXCJcclxuICAgICAgICAgICAgICAgIFt0b3RhbF09XCJ0b3RhbCgpXCJcclxuICAgICAgICAgICAgICAgIFtsaW1pdF09XCJsaW1pdCgpXCJcclxuICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwiaXRlbXMoKS5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZygpXCJcclxuICAgICAgICAgICAgPjwvZGVmYXVsdC1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgbHN0Um93czsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgYm9yZGVyLXJlZC01MDAgZmxleFwiPlxyXG4gICAgICAgICAgICAgICAge3skaW5kZXh9fSAtIFxyXG4gICAgICAgICAgICAgICAgQGZvciAobGJsIG9mIGl0ZW0ubHN0Q29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKFt7e2xibC5sYWJlbH19XSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+IC0tPlxyXG48L2Rpdj4iXX0=
|