@seniorsistemas/data-seniorx-core 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/config/card.type.config.d.ts +2 -0
- package/core/config/row-card.type.config.d.ts +2 -0
- package/core/types/button.type.d.ts +2 -0
- package/core/types/card.type.d.ts +36 -0
- package/core/types/filters.type.d.ts +27 -0
- package/core/types/row-card.type.d.ts +39 -0
- package/core/types/semantics.type.d.ts +5 -0
- package/core/types/tab.type.d.ts +5 -0
- package/core/types/table.types.d.ts +2 -2
- package/esm2022/core/config/card.type.config.mjs +18 -0
- package/esm2022/core/config/row-card.type.config.mjs +20 -0
- package/esm2022/core/types/button.type.mjs +2 -0
- package/esm2022/core/types/card.type.mjs +39 -0
- package/esm2022/core/types/filters.type.mjs +2 -0
- package/esm2022/core/types/row-card.type.mjs +59 -0
- package/esm2022/core/types/semantics.type.mjs +1 -1
- package/esm2022/core/types/tab.type.mjs +2 -0
- package/esm2022/core/types/table.types.mjs +4 -2
- package/esm2022/features/button/button.component.mjs +5 -5
- package/esm2022/features/card-list/card/card.component.mjs +34 -0
- package/esm2022/features/card-list/card-list.component.mjs +136 -0
- package/esm2022/features/checkbox/checkbox.component.mjs +5 -5
- package/esm2022/features/combobox/combobox.component.mjs +88 -28
- package/esm2022/features/confirm/confirm.component.mjs +13 -13
- package/esm2022/features/filters/filters.component.mjs +190 -0
- package/esm2022/features/hyperlink/hyperlink.component.mjs +14 -14
- package/esm2022/features/inputs.mjs +1 -1
- package/esm2022/features/list/list.component.mjs +14 -14
- package/esm2022/features/modal/modal.component.mjs +11 -11
- package/esm2022/features/modalc/modalc.component.mjs +19 -13
- package/esm2022/features/paginator/paginator.component.mjs +43 -0
- package/esm2022/features/panel/panel.component.mjs +11 -11
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +58 -0
- package/esm2022/features/row-card-list/row-card-list.component.mjs +150 -0
- package/esm2022/features/scaffold/scaffold.component.mjs +4 -4
- package/esm2022/features/searchbox/searchbox.component.mjs +7 -6
- package/esm2022/features/sidebar/sidebar.component.mjs +6 -4
- package/esm2022/features/spinner/spinner.component.mjs +6 -8
- package/esm2022/features/sql-editor/sql-editor.component.mjs +34 -36
- package/esm2022/features/tab/tab.component.mjs +8 -7
- package/esm2022/features/table/table.component.mjs +52 -47
- package/esm2022/features/textbox/textbox.component.mjs +16 -9
- package/esm2022/features/toast/toast.component.mjs +17 -21
- package/esm2022/locales/en.json +6 -1
- package/esm2022/locales/es-CO.json +7 -2
- package/esm2022/locales/pt.json +6 -1
- package/esm2022/public-api.mjs +5 -1
- package/features/button/button.component.d.ts +5 -3
- package/features/card-list/card/card.component.d.ts +11 -0
- package/features/card-list/card-list.component.d.ts +36 -0
- package/features/combobox/combobox.component.d.ts +25 -8
- package/features/confirm/confirm.component.d.ts +4 -4
- package/features/filters/filters.component.d.ts +36 -0
- package/features/hyperlink/hyperlink.component.d.ts +3 -3
- package/features/list/list.component.d.ts +3 -3
- package/features/modal/modal.component.d.ts +3 -3
- package/features/paginator/paginator.component.d.ts +15 -0
- package/features/panel/panel.component.d.ts +4 -4
- package/features/row-card-list/row-card/row-card.component.d.ts +18 -0
- package/features/row-card-list/row-card-list.component.d.ts +40 -0
- package/features/searchbox/searchbox.component.d.ts +1 -1
- package/features/spinner/spinner.component.d.ts +1 -1
- package/features/sql-editor/sql-editor.component.d.ts +8 -8
- package/features/tab/tab.component.d.ts +2 -8
- package/features/table/table.component.d.ts +5 -6
- package/features/toast/toast.component.d.ts +5 -5
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +883 -226
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
- package/styles.css +49 -48
- package/styles.css.map +1 -1
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, EventEmitter, Input, Output, signal, computed } from '@angular/core';
|
|
3
|
-
import { DEFAULT_TABLE_OPTIONS } from 'lib/src/core/types/table.types';
|
|
4
2
|
import { isMobile } from 'lib/src/core/utils/layout.util';
|
|
5
3
|
import { SearchboxComponent } from '../searchbox/searchbox.component';
|
|
6
|
-
import { PaginatorModule } from 'primeng/paginator';
|
|
7
4
|
import { ButtonComponent } from '../button/button.component';
|
|
8
5
|
import { EmptyStateModule } from '@seniorsistemas/angular-components/empty-state';
|
|
9
6
|
import { LoadingStateModule } from '@seniorsistemas/angular-components/loading-state';
|
|
7
|
+
import { PaginatorComponent } from '../paginator/paginator.component';
|
|
8
|
+
import { Component, EventEmitter, Input, Output, signal, computed, ViewEncapsulation } from '@angular/core';
|
|
9
|
+
import { DEFAULT_TABLE_OPTIONS } from 'lib/src/core/types/table.types';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "@angular/common";
|
|
12
|
-
import * as i2 from "
|
|
13
|
-
import * as i3 from "
|
|
14
|
-
import * as i4 from "@seniorsistemas/angular-components/loading-state";
|
|
15
|
-
import * as i5 from "@seniorsistemas/angular-components/empty-state";
|
|
12
|
+
import * as i2 from "@seniorsistemas/angular-components/loading-state";
|
|
13
|
+
import * as i3 from "@seniorsistemas/angular-components/empty-state";
|
|
16
14
|
export class TableComponent {
|
|
17
15
|
cols = [];
|
|
18
16
|
data = [];
|
|
@@ -35,26 +33,20 @@ export class TableComponent {
|
|
|
35
33
|
selection = signal([]);
|
|
36
34
|
first = signal(0);
|
|
37
35
|
rows = signal(DEFAULT_TABLE_OPTIONS.pagination?.rowsPerPage ?? 10);
|
|
38
|
-
cellCfg(kind) {
|
|
39
|
-
return (this.options().cells?.[kind] ?? {});
|
|
40
|
-
}
|
|
41
|
-
tagsOf(row, col) {
|
|
42
|
-
const raw = this._(row, col.field);
|
|
43
|
-
const arr = Array.isArray(raw) ? raw : [];
|
|
44
|
-
const max = this.options().cells?.tag?.maxItems;
|
|
45
|
-
return typeof max === 'number' ? arr.slice(0, max) : arr;
|
|
46
|
-
}
|
|
47
36
|
filteredData = computed(() => {
|
|
48
37
|
const q = this.globalFilter().trim().toLowerCase();
|
|
49
|
-
if (!q)
|
|
38
|
+
if (!q) {
|
|
50
39
|
return this.data;
|
|
40
|
+
}
|
|
51
41
|
const fields = this.cols.filter(c => c.searchable ?? true).filter(c => !!c.field).map(c => c.field);
|
|
52
|
-
if (fields.length === 0)
|
|
42
|
+
if (fields.length === 0) {
|
|
53
43
|
return this.data;
|
|
44
|
+
}
|
|
54
45
|
return this.data.filter(row => fields.some(f => {
|
|
55
46
|
const v = this._(row, f);
|
|
56
|
-
if (Array.isArray(v))
|
|
47
|
+
if (Array.isArray(v)) {
|
|
57
48
|
return v.join(' ').toLowerCase().includes(q);
|
|
49
|
+
}
|
|
58
50
|
return String(v ?? '').toLowerCase().includes(q);
|
|
59
51
|
}));
|
|
60
52
|
});
|
|
@@ -62,30 +54,36 @@ export class TableComponent {
|
|
|
62
54
|
const field = this.sortField();
|
|
63
55
|
const order = this.sortOrder();
|
|
64
56
|
const arr = [...this.filteredData()];
|
|
65
|
-
if (!field || order === 0)
|
|
57
|
+
if (!field || order === 0) {
|
|
66
58
|
return arr;
|
|
59
|
+
}
|
|
67
60
|
return arr.sort((a, b) => {
|
|
68
61
|
const va = this._(a, field);
|
|
69
62
|
const vb = this._(b, field);
|
|
70
|
-
if (va == null && vb == null)
|
|
63
|
+
if (va == null && vb == null) {
|
|
71
64
|
return 0;
|
|
72
|
-
|
|
65
|
+
}
|
|
66
|
+
if (va == null) {
|
|
73
67
|
return -order;
|
|
74
|
-
|
|
68
|
+
}
|
|
69
|
+
if (vb == null) {
|
|
75
70
|
return order;
|
|
76
|
-
|
|
71
|
+
}
|
|
72
|
+
if (typeof va === 'number' && typeof vb === 'number') {
|
|
77
73
|
return (va - vb) * order;
|
|
74
|
+
}
|
|
78
75
|
return String(va).localeCompare(String(vb)) * order;
|
|
79
76
|
});
|
|
80
77
|
});
|
|
81
78
|
totalRecords = computed(() => this.sortedData().length);
|
|
82
79
|
pageData = computed(() => {
|
|
80
|
+
if (!this.showPaginator())
|
|
81
|
+
return this.sortedData();
|
|
83
82
|
const start = this.first();
|
|
84
83
|
const end = start + this.rows();
|
|
85
84
|
return this.sortedData().slice(start, end);
|
|
86
85
|
});
|
|
87
86
|
configHash = '';
|
|
88
|
-
constructor() { }
|
|
89
87
|
ngOnChanges(changes) {
|
|
90
88
|
if (changes['config']) {
|
|
91
89
|
this.applyConfigOptions();
|
|
@@ -104,9 +102,7 @@ export class TableComponent {
|
|
|
104
102
|
}
|
|
105
103
|
}
|
|
106
104
|
onSearchTerm(evOrVal) {
|
|
107
|
-
const term = typeof evOrVal === 'string'
|
|
108
|
-
? evOrVal
|
|
109
|
-
: evOrVal?.detail ?? '';
|
|
105
|
+
const term = typeof evOrVal === 'string' ? evOrVal : evOrVal?.detail ?? '';
|
|
110
106
|
this.globalFilter.set(String(term));
|
|
111
107
|
this.first.set(0);
|
|
112
108
|
}
|
|
@@ -115,16 +111,18 @@ export class TableComponent {
|
|
|
115
111
|
this.first.set(0);
|
|
116
112
|
}
|
|
117
113
|
toggleSort(field, enabled = true) {
|
|
118
|
-
if (!enabled)
|
|
114
|
+
if (!enabled) {
|
|
119
115
|
return;
|
|
116
|
+
}
|
|
120
117
|
if (this.sortField() !== field) {
|
|
121
118
|
this.sortField.set(field);
|
|
122
119
|
this.sortOrder.set(1);
|
|
123
120
|
}
|
|
124
121
|
else {
|
|
125
122
|
const order = this.sortOrder();
|
|
126
|
-
if (order === 1)
|
|
123
|
+
if (order === 1) {
|
|
127
124
|
this.sortOrder.set(-1);
|
|
125
|
+
}
|
|
128
126
|
else if (order === -1) {
|
|
129
127
|
this.sortOrder.set(0);
|
|
130
128
|
this.sortField.set(null);
|
|
@@ -160,9 +158,19 @@ export class TableComponent {
|
|
|
160
158
|
const visible = this.pageData();
|
|
161
159
|
return visible.length > 0 && visible.every(r => this.selection().includes(r));
|
|
162
160
|
}
|
|
161
|
+
cellCfg(kind) {
|
|
162
|
+
return (this.options().cells?.[kind] ?? {});
|
|
163
|
+
}
|
|
164
|
+
tagsOf(row, col) {
|
|
165
|
+
const raw = this._(row, col.field);
|
|
166
|
+
const arr = Array.isArray(raw) ? raw : [];
|
|
167
|
+
const max = this.options().cells?.tag?.maxItems;
|
|
168
|
+
return typeof max === 'number' ? arr.slice(0, max) : arr;
|
|
169
|
+
}
|
|
163
170
|
_ = (obj, path) => path.split('.').reduce((acc, part) => {
|
|
164
|
-
if (acc !== null && typeof acc === 'object')
|
|
171
|
+
if (acc !== null && typeof acc === 'object') {
|
|
165
172
|
return acc[part];
|
|
173
|
+
}
|
|
166
174
|
return undefined;
|
|
167
175
|
}, obj);
|
|
168
176
|
formatDate(value, _format = 'shortDate') {
|
|
@@ -175,8 +183,9 @@ export class TableComponent {
|
|
|
175
183
|
}
|
|
176
184
|
formatCurrency(value, currency = 'BRL') {
|
|
177
185
|
const n = Number(value);
|
|
178
|
-
if (Number.isNaN(n))
|
|
186
|
+
if (Number.isNaN(n)) {
|
|
179
187
|
return String(value ?? '');
|
|
188
|
+
}
|
|
180
189
|
return new Intl.NumberFormat(undefined, { style: 'currency', currency }).format(n);
|
|
181
190
|
}
|
|
182
191
|
applyConfigOptions() {
|
|
@@ -200,19 +209,22 @@ export class TableComponent {
|
|
|
200
209
|
const replacer = (_k, v) => {
|
|
201
210
|
if (v && typeof v === 'object') {
|
|
202
211
|
const asObj = v;
|
|
203
|
-
if (seen.has(asObj))
|
|
212
|
+
if (seen.has(asObj)) {
|
|
204
213
|
return;
|
|
214
|
+
}
|
|
205
215
|
seen.add(asObj);
|
|
206
|
-
if (Array.isArray(v))
|
|
216
|
+
if (Array.isArray(v)) {
|
|
207
217
|
return v;
|
|
218
|
+
}
|
|
208
219
|
const o = v;
|
|
209
220
|
return Object.keys(o).sort().reduce((acc, key) => {
|
|
210
221
|
acc[key] = o[key];
|
|
211
222
|
return acc;
|
|
212
223
|
}, {});
|
|
213
224
|
}
|
|
214
|
-
if (typeof v === 'function' || typeof v === 'undefined')
|
|
225
|
+
if (typeof v === 'function' || typeof v === 'undefined') {
|
|
215
226
|
return undefined;
|
|
227
|
+
}
|
|
216
228
|
return v;
|
|
217
229
|
};
|
|
218
230
|
try {
|
|
@@ -230,22 +242,15 @@ export class TableComponent {
|
|
|
230
242
|
buttonKey(row, col, opt) {
|
|
231
243
|
const actKey = (col.actionField ?? col.field ?? '');
|
|
232
244
|
const actVal = actKey ? String(this._(row, actKey) ?? '') : '';
|
|
233
|
-
return [
|
|
234
|
-
String(opt?.label ?? ''),
|
|
235
|
-
String(opt?.icon ?? ''),
|
|
236
|
-
String(opt?.priority ?? ''),
|
|
237
|
-
String(opt?.size ?? ''),
|
|
238
|
-
String(opt?.tooltip ?? ''),
|
|
239
|
-
actVal
|
|
240
|
-
].join('|');
|
|
245
|
+
return [String(opt?.label ?? ''), String(opt?.icon ?? ''), String(opt?.priority ?? ''), String(opt?.size ?? ''), String(opt?.tooltip ?? ''), actVal].join('|');
|
|
241
246
|
}
|
|
242
247
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
243
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "sdc-table", inputs: { cols: "cols", data: "data", loading: "loading", config: "config" }, outputs: { action: "action" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-table\" [class.sdc-table-stack]=\"isMobile ? 'stack' : 'grid'\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\">\n\n <div class=\"sdc-table-caption\" *ngIf=\"showSearch()\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox [disabled]=\"loading\" [placeholder]=\"searchPlaceholder()\" [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\" (onClear)=\"onClearSearch()\" />\n </div>\n </div>\n\n <table class=\"sdc-table-grid\">\n <thead>\n <tr>\n @for (col of cols; let i = $index; track i) {\n <th [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\" [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\">\n\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n }\n @default {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n <span class=\"sdc-table-sort-icons sdc-table-sort-overlay\" *ngIf=\"col.sortable !== false\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n </span>\n }\n }\n </div>\n\n <span class=\"sdc-table-th-center\"\n *ngIf=\"col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)\">\n <input type=\"checkbox\" [checked]=\"isPageFullySelected()\" (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\" />\n </span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (loading) { } @else {\n @for (row of pageData(); let r = $index; track r) {\n <tr>\n @for (col of cols; let c = $index; track c) {\n <ng-container *ngIf=\"isMobile; else desktopContent\">\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n\n <td class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\" [attr.data-title]=\"col.header\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\">\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n </div>\n </ng-container>\n\n <ng-template #desktopContent>\n <td class=\"sdc-table-td sdc-table-tdc\" [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\" [attr.data-title]=\"col.header\">\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n </ng-template>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n <s-empty-state *ngIf=\"!loading && options().empty?.show !== false && totalRecords() === 0\" id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\" [title]=\"emptyTitle()\" [description]=\"emptyText()\" class=\"sdc-table-empty-state\">\n </s-empty-state>\n\n <s-loading-state *ngIf=\"loading\" [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-table-loading-state\">\n </s-loading-state>\n\n <div class=\"sdc-table-paginator\" *ngIf=\"showPaginator()\">\n <p-paginator [dropdownAppendTo]=\"'body'\" [first]=\"first()\" [rows]=\"rows()\" [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? undefined : rowsPerPageOptions()\" [showFirstLastIcon]=\"!isMobile\"\n (onPageChange)=\"onPageChange($event)\">\n <ng-template pTemplate=\"dropdownicon\"><i class=\"fas fa-caret-down\"></i></ng-template>\n <ng-template pTemplate=\"firstpagelinkicon\"><i class=\"fas fa-step-forward fa-rotate-180\"></i></ng-template>\n <ng-template pTemplate=\"previouspagelinkicon\"><i class=\"fas fa-caret-left\"></i></ng-template>\n <ng-template pTemplate=\"nextpagelinkicon\"><i class=\"fas fa-caret-right\"></i></ng-template>\n <ng-template pTemplate=\"lastpagelinkicon\"><i class=\"fas fa-step-forward\"></i></ng-template>\n </p-paginator>\n\n <span *ngIf=\"!isMobile\">\n {{ totalRecordsLabel() }}: {{ totalRecords() }}\n </span>\n </div>\n\n <ng-template #cellTpl let-row let-col=\" col\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <ng-container *ngIf=\"cellCfg('checkbox') as checkboxOptions\">\n <div class=\"sdc-table-checkbox\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"onToggleRow(row, getCheckedValue($event))\" />\n <label>{{ _(row, col.field) }}</label>\n </div>\n </ng-container>\n }\n\n @case ('date') { {{ formatDate(_(row, col.field), col.format || 'shortDate') }} }\n\n @case ('currency') { {{ formatCurrency(_(row, col.field), col.format || 'BRL') }} }\n\n @case ('tag') {\n <ng-container *ngIf=\"cellCfg('tag') as tagOptions\">\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); let t = $index; track t) {\n <span class=\"sdc-table-tag\" [style.background]=\"tagOptions.backgroundColor || null\"\n [style.color]=\"tagOptions.color || null\" [attr.title]=\"tagOptions.tooltip\">\n <i *ngIf=\"tagOptions.icon\" [class]=\"tagOptions.icon\"></i>\n {{ tag }}\n </span>\n }\n </div>\n </ng-container>\n }\n\n @case ('button') {\n <ng-container *ngIf=\"cellCfg('button') as buttonOptions\">\n <ng-container *ngFor=\"let __k of [buttonKey(row, col, buttonOptions)]\">\n <div class=\"sdc-table-button\">\n <sdc-button\n style=\"max-width: 70%;\"\n\n [size]=\"buttonOptions.size\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label\"\n [disabled]=\"buttonOptions.disabled\"\n [title]=\"buttonOptions.tooltip\"\n\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n\n [attr.data-key]=\"__k\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\">\n </sdc-button>\n </div>\n </ng-container>\n </ng-container>\n }\n @default { {{ _(row, col.field) }} }\n }\n </ng-template>\n</div>\n\n<ng-template #sortIconsTpl let-col=\"col\">\n <span *ngIf=\"col.sortable !== false && col.type !== 'checkbox-selection'\" class=\"sdc-table-sort-indicator\">\n <i *ngIf=\"sortField() !== col.field\" class=\"fas fa-sort-alt sdc-table-sort-neutral\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === 1\"\n class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === -1\"\n class=\"fas fa-sort-amount-down sdc-table-sort-active\"></i>\n </span>\n <span *ngIf=\"col.sortable === false || col.type === 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"></span>\n</ng-template>", styles: [":host{display:block;width:100%;box-sizing:border-box}@media (max-width: 750px){.sdc-table-tag{font-size:.7rem;padding:.6rem .8rem}.sdc-table-paginator{justify-content:center!important}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0px solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table-paginator{border-top:1px solid var(--sdc-table-border-gray)}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.8rem;padding:.6rem 1.7rem}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}}.sdc-table{width:100%;box-sizing:border-box;overflow:hidden;background:var(--sdc-table-bg-card)}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast)}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:var(--sdc-table-gap-tags)}.sdc-table-tag{display:inline-flex;align-items:center;gap:.25rem;border-radius:6px;background:var(--sdc-table-tag-bg)}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-sort-overlay{position:relative}.sdc-table-paginator{padding:.5rem 0}.sdc-table-button,.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-empty-state{display:block;padding:12rem}.sdc-table-loading-state{background:var(--sdc-table-bg-loading);display:block;border-bottom:1px solid var(--sdc-formfield-default-border);min-width:10rem;padding:18.8rem 0rem}thead th.sdc-table-th-checkbox{position:relative}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:.5rem}thead th.sdc-table-th-checkbox .sdc-table-th-label,thead .sdc-table-th-label{color:#333!important;white-space:nowrap}.sdc-table-paginator{display:flex;width:100%;justify-content:space-between;align-items:center;padding:.75em;box-sizing:border-box}.sdc-table-paginator ::ng-deep .p-paginator{text-align:left;background:var(--sdc-table-bg-card);border-color:transparent;gap:0;display:flex}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-element{font-weight:400}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-right-content{margin-left:auto;height:100%;padding-top:5px;padding-left:20px}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first .p-paginator-icon,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last .p-paginator-icon{font-size:12px}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages{padding:0;margin:0;white-space:nowrap;gap:0}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page-selected{color:#fff!important;border:1px solid #428bca;background:#428bca}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page-selected:hover{background-color:#6aa3d5!important;border-color:#6aa3d5!important}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-prev,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-next,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{padding:.4em .25em;color:#428bca;transition:background-color .2s ease-out;border-radius:0;border:1px solid #cccccc;border-width:1px 0 1px 1px;text-align:center;min-width:var(--sdc-table-paginator-size);height:var(--sdc-table-paginator-size);margin:0}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-prev:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-next:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:hover{background-color:#f7f7f7}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-prev.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-next.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight:hover{background-color:#6aa3d5;border-color:#6aa3d5}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first{border-radius:4px 0 0 4px}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last{border-right-width:1px;border-radius:0 4px 4px 0}.sdc-table-paginator ::ng-deep .p-select{margin-left:34px}.sdc-table-paginator ::ng-deep .p-select-label{height:34px;padding:6px 17px}.sdc-table-paginator ::ng-deep .p-select-dropdown{border-left:1px solid #cccccc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode"], outputs: ["onSearch", "onClear"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i2.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["disabled", "width", "icon", "id", "label", "priority", "size", "type"], outputs: ["onClick"] }, { kind: "ngmodule", type: LoadingStateModule }, { kind: "component", type: i4.LoadingStateComponent, selector: "s-loading-state", inputs: ["indicator", "id", "blockWindow", "loading"] }, { kind: "ngmodule", type: EmptyStateModule }, { kind: "component", type: i5.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }] });
|
|
248
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "sdc-table", inputs: { cols: "cols", data: "data", loading: "loading", config: "config" }, outputs: { action: "action" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile ? 'stack' : 'grid'\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n>\n <div class=\"sdc-table-caption\" *ngIf=\"showSearch()\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox\n [disabled]=\"loading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n />\n </div>\n </div>\n\n <table class=\"sdc-table-grid\">\n <thead>\n <tr>\n @for (col of cols; let i = $index; track i) {\n <th\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\"\n [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n >\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) { @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n } @default {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n <span class=\"sdc-table-sort-icons sdc-table-sort-overlay\" *ngIf=\"col.sortable !== false\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n </span>\n } }\n </div>\n <span\n class=\"sdc-table-th-center\"\n *ngIf=\"col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isPageFullySelected()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n />\n </span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (loading) { } @else { @for (row of pageData(); let r = $index; track r) {\n <tr>\n @for (col of cols; let c = $index; track c) {\n <ng-container *ngIf=\"isMobile; else desktopContent\">\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.data-title]=\"col.header\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </div>\n </ng-container>\n <ng-template #desktopContent>\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.data-title]=\"col.header\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </ng-template>\n }\n </tr>\n } }\n </tbody>\n </table>\n\n <s-empty-state\n *ngIf=\"!loading && options().empty?.show !== false && totalRecords() === 0\"\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n >\n </s-empty-state>\n\n <s-loading-state *ngIf=\"loading\" [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-table-loading-state\">\n </s-loading-state>\n\n <div class=\"sdc-table-paginator\" *ngIf=\"showPaginator()\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? undefined : rowsPerPageOptions()\"\n [isMobile]=\"isMobile\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n\n <ng-template #cellTpl let-row let-col=\"col\">\n @switch (col.type) { @case ('checkbox-selection') {\n <ng-container *ngIf=\"cellCfg('checkbox') as checkboxOptions\">\n <div class=\"sdc-table-checkbox\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"onToggleRow(row, getCheckedValue($event))\" />\n <label>{{ _(row, col.field) }}</label>\n </div>\n </ng-container>\n } @case ('date') {\n {{ formatDate(_(row, col.field), col.format || 'shortDate') }}\n } @case ('strong') {\n <div class=\"sdc-table-strong-label\">{{ _(row, col.field) }}</div>\n } @case ('code') {\n <code class=\"sdc-table-code-label\">{{ _(row, col.field) }}</code>\n } @case ('currency') {\n {{ formatCurrency(_(row, col.field), col.format || 'BRL') }}\n } @case ('tag') {\n <ng-container *ngIf=\"cellCfg('tag') as tagOptions\">\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); let t = $index; track t) {\n <span\n class=\"sdc-table-tag\"\n [style.background]=\"tagOptions.backgroundColor || null\"\n [style.color]=\"tagOptions.color || null\"\n [attr.title]=\"tagOptions.tooltip\"\n >\n <i *ngIf=\"tagOptions.icon\" [class]=\"tagOptions.icon\"></i>\n {{ tag }}\n </span>\n }\n </div>\n </ng-container>\n } @case ('button') {\n <ng-container *ngIf=\"cellCfg('button') as buttonOptions\">\n <ng-container *ngFor=\"let __k of [buttonKey(row, col, buttonOptions)]\">\n <div class=\"sdc-table-button\">\n <sdc-button\n style=\"max-width: 70%\"\n [size]=\"buttonOptions.size\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label\"\n [disabled]=\"buttonOptions.disabled\"\n [title]=\"buttonOptions.tooltip\"\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n [attr.data-key]=\"__k\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n ></sdc-button>\n </div>\n </ng-container>\n </ng-container>\n } @default { {{ _(row, col.field) }} } }\n </ng-template>\n</div>\n\n<ng-template #sortIconsTpl let-col=\"col\">\n <span *ngIf=\"col.sortable !== false && col.type !== 'checkbox-selection'\" class=\"sdc-table-sort-indicator\">\n <i *ngIf=\"sortField() !== col.field\" class=\"fas fa-sort-alt sdc-table-sort-neutral\"></i>\n <i\n *ngIf=\"sortField() === col.field && sortOrder() === 1\"\n class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\"\n ></i>\n <i\n *ngIf=\"sortField() === col.field && sortOrder() === -1\"\n class=\"fas fa-sort-amount-down sdc-table-sort-active\"\n ></i>\n </span>\n <span\n *ngIf=\"col.sortable === false || col.type === 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"\n ></span>\n</ng-template>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}@media (max-width: 750px){.sdc-table-tag{font-size:.7rem;padding:.6rem .8rem}.sdc-table-sort-indicator-placeholder{display:none!important;width:0!important;height:0!important;min-width:0!important}.sdc-table-paginator{justify-content:center!important}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem;position:absolute;left:21px}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex;overflow-wrap:anywhere;word-break:break-word;white-space:normal}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0px solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table-paginator{border-top:1px solid var(--sdc-table-border-gray)}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.8rem;padding:.6rem 1.7rem}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}}.sdc-table{width:100%;box-sizing:border-box;overflow:hidden;background:var(--sdc-table-bg-card)}.sdc-table .sdc-table-strong-label{font-weight:500;overflow-wrap:anywhere;word-break:break-word;white-space:normal}.sdc-table .sdc-table-code-label{color:var(--sdc-tab-primary);overflow-wrap:anywhere;word-break:break-word;white-space:normal;max-width:100%;display:inline-block}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast)}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:var(--sdc-table-gap-tags)}.sdc-table-tag{display:inline-flex;align-items:center;gap:.25rem;border-radius:6px;background:var(--sdc-table-tag-bg)}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-overlay{position:relative}.sdc-table-paginator{padding:.5rem 0}.sdc-table-button,.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-empty-state{display:block;padding:12rem}.sdc-table-loading-state{background:var(--sdc-table-bg-loading);display:block;border-bottom:1px solid var(--sdc-formfield-default-border);min-width:10rem;padding:18.8rem 0rem}thead th.sdc-table-th-checkbox{position:relative}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:.5rem}thead th.sdc-table-th-checkbox .sdc-table-th-label,thead .sdc-table-th-label{color:#333!important;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode"], outputs: ["onSearch", "onClear"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["disabled", "width", "icon", "id", "label", "priority", "size", "type"], outputs: ["onClick"] }, { kind: "ngmodule", type: LoadingStateModule }, { kind: "component", type: i2.LoadingStateComponent, selector: "s-loading-state", inputs: ["indicator", "id", "blockWindow", "loading"] }, { kind: "ngmodule", type: EmptyStateModule }, { kind: "component", type: i3.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }] });
|
|
244
249
|
}
|
|
245
250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, decorators: [{
|
|
246
251
|
type: Component,
|
|
247
|
-
args: [{ selector: 'sdc-table', standalone: true, imports: [CommonModule, SearchboxComponent, PaginatorModule, ButtonComponent, LoadingStateModule, EmptyStateModule], template: "<div class=\"sdc-table\" [class.sdc-table-stack]=\"isMobile ? 'stack' : 'grid'\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\">\n\n <div class=\"sdc-table-caption\" *ngIf=\"showSearch()\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox [disabled]=\"loading\" [placeholder]=\"searchPlaceholder()\" [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\" (onClear)=\"onClearSearch()\" />\n </div>\n </div>\n\n <table class=\"sdc-table-grid\">\n <thead>\n <tr>\n @for (col of cols; let i = $index; track i) {\n <th [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\" [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\">\n\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n }\n @default {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n <span class=\"sdc-table-sort-icons sdc-table-sort-overlay\" *ngIf=\"col.sortable !== false\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n </span>\n }\n }\n </div>\n\n <span class=\"sdc-table-th-center\"\n *ngIf=\"col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)\">\n <input type=\"checkbox\" [checked]=\"isPageFullySelected()\" (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\" />\n </span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (loading) { } @else {\n @for (row of pageData(); let r = $index; track r) {\n <tr>\n @for (col of cols; let c = $index; track c) {\n <ng-container *ngIf=\"isMobile; else desktopContent\">\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n\n <td class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\" [attr.data-title]=\"col.header\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\">\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n </div>\n </ng-container>\n\n <ng-template #desktopContent>\n <td class=\"sdc-table-td sdc-table-tdc\" [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\" [attr.data-title]=\"col.header\">\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n </ng-template>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n <s-empty-state *ngIf=\"!loading && options().empty?.show !== false && totalRecords() === 0\" id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\" [title]=\"emptyTitle()\" [description]=\"emptyText()\" class=\"sdc-table-empty-state\">\n </s-empty-state>\n\n <s-loading-state *ngIf=\"loading\" [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-table-loading-state\">\n </s-loading-state>\n\n <div class=\"sdc-table-paginator\" *ngIf=\"showPaginator()\">\n <p-paginator [dropdownAppendTo]=\"'body'\" [first]=\"first()\" [rows]=\"rows()\" [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? undefined : rowsPerPageOptions()\" [showFirstLastIcon]=\"!isMobile\"\n (onPageChange)=\"onPageChange($event)\">\n <ng-template pTemplate=\"dropdownicon\"><i class=\"fas fa-caret-down\"></i></ng-template>\n <ng-template pTemplate=\"firstpagelinkicon\"><i class=\"fas fa-step-forward fa-rotate-180\"></i></ng-template>\n <ng-template pTemplate=\"previouspagelinkicon\"><i class=\"fas fa-caret-left\"></i></ng-template>\n <ng-template pTemplate=\"nextpagelinkicon\"><i class=\"fas fa-caret-right\"></i></ng-template>\n <ng-template pTemplate=\"lastpagelinkicon\"><i class=\"fas fa-step-forward\"></i></ng-template>\n </p-paginator>\n\n <span *ngIf=\"!isMobile\">\n {{ totalRecordsLabel() }}: {{ totalRecords() }}\n </span>\n </div>\n\n <ng-template #cellTpl let-row let-col=\" col\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <ng-container *ngIf=\"cellCfg('checkbox') as checkboxOptions\">\n <div class=\"sdc-table-checkbox\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"onToggleRow(row, getCheckedValue($event))\" />\n <label>{{ _(row, col.field) }}</label>\n </div>\n </ng-container>\n }\n\n @case ('date') { {{ formatDate(_(row, col.field), col.format || 'shortDate') }} }\n\n @case ('currency') { {{ formatCurrency(_(row, col.field), col.format || 'BRL') }} }\n\n @case ('tag') {\n <ng-container *ngIf=\"cellCfg('tag') as tagOptions\">\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); let t = $index; track t) {\n <span class=\"sdc-table-tag\" [style.background]=\"tagOptions.backgroundColor || null\"\n [style.color]=\"tagOptions.color || null\" [attr.title]=\"tagOptions.tooltip\">\n <i *ngIf=\"tagOptions.icon\" [class]=\"tagOptions.icon\"></i>\n {{ tag }}\n </span>\n }\n </div>\n </ng-container>\n }\n\n @case ('button') {\n <ng-container *ngIf=\"cellCfg('button') as buttonOptions\">\n <ng-container *ngFor=\"let __k of [buttonKey(row, col, buttonOptions)]\">\n <div class=\"sdc-table-button\">\n <sdc-button\n style=\"max-width: 70%;\"\n\n [size]=\"buttonOptions.size\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label\"\n [disabled]=\"buttonOptions.disabled\"\n [title]=\"buttonOptions.tooltip\"\n\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n\n [attr.data-key]=\"__k\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\">\n </sdc-button>\n </div>\n </ng-container>\n </ng-container>\n }\n @default { {{ _(row, col.field) }} }\n }\n </ng-template>\n</div>\n\n<ng-template #sortIconsTpl let-col=\"col\">\n <span *ngIf=\"col.sortable !== false && col.type !== 'checkbox-selection'\" class=\"sdc-table-sort-indicator\">\n <i *ngIf=\"sortField() !== col.field\" class=\"fas fa-sort-alt sdc-table-sort-neutral\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === 1\"\n class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === -1\"\n class=\"fas fa-sort-amount-down sdc-table-sort-active\"></i>\n </span>\n <span *ngIf=\"col.sortable === false || col.type === 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"></span>\n</ng-template>", styles: [":host{display:block;width:100%;box-sizing:border-box}@media (max-width: 750px){.sdc-table-tag{font-size:.7rem;padding:.6rem .8rem}.sdc-table-paginator{justify-content:center!important}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0px solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table-paginator{border-top:1px solid var(--sdc-table-border-gray)}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.8rem;padding:.6rem 1.7rem}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}}.sdc-table{width:100%;box-sizing:border-box;overflow:hidden;background:var(--sdc-table-bg-card)}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast)}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:var(--sdc-table-gap-tags)}.sdc-table-tag{display:inline-flex;align-items:center;gap:.25rem;border-radius:6px;background:var(--sdc-table-tag-bg)}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-sort-overlay{position:relative}.sdc-table-paginator{padding:.5rem 0}.sdc-table-button,.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-empty-state{display:block;padding:12rem}.sdc-table-loading-state{background:var(--sdc-table-bg-loading);display:block;border-bottom:1px solid var(--sdc-formfield-default-border);min-width:10rem;padding:18.8rem 0rem}thead th.sdc-table-th-checkbox{position:relative}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:.5rem}thead th.sdc-table-th-checkbox .sdc-table-th-label,thead .sdc-table-th-label{color:#333!important;white-space:nowrap}.sdc-table-paginator{display:flex;width:100%;justify-content:space-between;align-items:center;padding:.75em;box-sizing:border-box}.sdc-table-paginator ::ng-deep .p-paginator{text-align:left;background:var(--sdc-table-bg-card);border-color:transparent;gap:0;display:flex}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-element{font-weight:400}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-right-content{margin-left:auto;height:100%;padding-top:5px;padding-left:20px}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first .p-paginator-icon,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last .p-paginator-icon{font-size:12px}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages{padding:0;margin:0;white-space:nowrap;gap:0}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page-selected{color:#fff!important;border:1px solid #428bca;background:#428bca}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page-selected:hover{background-color:#6aa3d5!important;border-color:#6aa3d5!important}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-prev,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-next,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{padding:.4em .25em;color:#428bca;transition:background-color .2s ease-out;border-radius:0;border:1px solid #cccccc;border-width:1px 0 1px 1px;text-align:center;min-width:var(--sdc-table-paginator-size);height:var(--sdc-table-paginator-size);margin:0}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-prev:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-next:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:hover{background-color:#f7f7f7}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-prev.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-next.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last.p-highlight:hover,.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight:hover{background-color:#6aa3d5;border-color:#6aa3d5}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-first{border-radius:4px 0 0 4px}.sdc-table-paginator ::ng-deep .p-paginator .p-paginator-last{border-right-width:1px;border-radius:0 4px 4px 0}.sdc-table-paginator ::ng-deep .p-select{margin-left:34px}.sdc-table-paginator ::ng-deep .p-select-label{height:34px;padding:6px 17px}.sdc-table-paginator ::ng-deep .p-select-dropdown{border-left:1px solid #cccccc}\n"] }]
|
|
248
|
-
}],
|
|
252
|
+
args: [{ selector: 'sdc-table', standalone: true, imports: [CommonModule, SearchboxComponent, PaginatorComponent, ButtonComponent, LoadingStateModule, EmptyStateModule], encapsulation: ViewEncapsulation.Emulated, template: "<div\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile ? 'stack' : 'grid'\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n>\n <div class=\"sdc-table-caption\" *ngIf=\"showSearch()\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox\n [disabled]=\"loading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n />\n </div>\n </div>\n\n <table class=\"sdc-table-grid\">\n <thead>\n <tr>\n @for (col of cols; let i = $index; track i) {\n <th\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\"\n [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n >\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) { @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n } @default {\n <span class=\"sdc-table-th-label\">{{ col.header }}</span>\n <span class=\"sdc-table-sort-icons sdc-table-sort-overlay\" *ngIf=\"col.sortable !== false\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n </span>\n } }\n </div>\n <span\n class=\"sdc-table-th-center\"\n *ngIf=\"col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isPageFullySelected()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n />\n </span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (loading) { } @else { @for (row of pageData(); let r = $index; track r) {\n <tr>\n @for (col of cols; let c = $index; track c) {\n <ng-container *ngIf=\"isMobile; else desktopContent\">\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.data-title]=\"col.header\"\n (click)=\"toggleSort(col.field!, col.sortable !== false)\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </div>\n </ng-container>\n <ng-template #desktopContent>\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.data-title]=\"col.header\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </ng-template>\n }\n </tr>\n } }\n </tbody>\n </table>\n\n <s-empty-state\n *ngIf=\"!loading && options().empty?.show !== false && totalRecords() === 0\"\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n >\n </s-empty-state>\n\n <s-loading-state *ngIf=\"loading\" [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-table-loading-state\">\n </s-loading-state>\n\n <div class=\"sdc-table-paginator\" *ngIf=\"showPaginator()\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? undefined : rowsPerPageOptions()\"\n [isMobile]=\"isMobile\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n\n <ng-template #cellTpl let-row let-col=\"col\">\n @switch (col.type) { @case ('checkbox-selection') {\n <ng-container *ngIf=\"cellCfg('checkbox') as checkboxOptions\">\n <div class=\"sdc-table-checkbox\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"onToggleRow(row, getCheckedValue($event))\" />\n <label>{{ _(row, col.field) }}</label>\n </div>\n </ng-container>\n } @case ('date') {\n {{ formatDate(_(row, col.field), col.format || 'shortDate') }}\n } @case ('strong') {\n <div class=\"sdc-table-strong-label\">{{ _(row, col.field) }}</div>\n } @case ('code') {\n <code class=\"sdc-table-code-label\">{{ _(row, col.field) }}</code>\n } @case ('currency') {\n {{ formatCurrency(_(row, col.field), col.format || 'BRL') }}\n } @case ('tag') {\n <ng-container *ngIf=\"cellCfg('tag') as tagOptions\">\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); let t = $index; track t) {\n <span\n class=\"sdc-table-tag\"\n [style.background]=\"tagOptions.backgroundColor || null\"\n [style.color]=\"tagOptions.color || null\"\n [attr.title]=\"tagOptions.tooltip\"\n >\n <i *ngIf=\"tagOptions.icon\" [class]=\"tagOptions.icon\"></i>\n {{ tag }}\n </span>\n }\n </div>\n </ng-container>\n } @case ('button') {\n <ng-container *ngIf=\"cellCfg('button') as buttonOptions\">\n <ng-container *ngFor=\"let __k of [buttonKey(row, col, buttonOptions)]\">\n <div class=\"sdc-table-button\">\n <sdc-button\n style=\"max-width: 70%\"\n [size]=\"buttonOptions.size\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label\"\n [disabled]=\"buttonOptions.disabled\"\n [title]=\"buttonOptions.tooltip\"\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n [attr.data-key]=\"__k\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n ></sdc-button>\n </div>\n </ng-container>\n </ng-container>\n } @default { {{ _(row, col.field) }} } }\n </ng-template>\n</div>\n\n<ng-template #sortIconsTpl let-col=\"col\">\n <span *ngIf=\"col.sortable !== false && col.type !== 'checkbox-selection'\" class=\"sdc-table-sort-indicator\">\n <i *ngIf=\"sortField() !== col.field\" class=\"fas fa-sort-alt sdc-table-sort-neutral\"></i>\n <i\n *ngIf=\"sortField() === col.field && sortOrder() === 1\"\n class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\"\n ></i>\n <i\n *ngIf=\"sortField() === col.field && sortOrder() === -1\"\n class=\"fas fa-sort-amount-down sdc-table-sort-active\"\n ></i>\n </span>\n <span\n *ngIf=\"col.sortable === false || col.type === 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"\n ></span>\n</ng-template>\n", styles: [":host{display:block;width:100%;box-sizing:border-box}@media (max-width: 750px){.sdc-table-tag{font-size:.7rem;padding:.6rem .8rem}.sdc-table-sort-indicator-placeholder{display:none!important;width:0!important;height:0!important;min-width:0!important}.sdc-table-paginator{justify-content:center!important}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem;position:absolute;left:21px}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex;overflow-wrap:anywhere;word-break:break-word;white-space:normal}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0px solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table-paginator{border-top:1px solid var(--sdc-table-border-gray)}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.8rem;padding:.6rem 1.7rem}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}}.sdc-table{width:100%;box-sizing:border-box;overflow:hidden;background:var(--sdc-table-bg-card)}.sdc-table .sdc-table-strong-label{font-weight:500;overflow-wrap:anywhere;word-break:break-word;white-space:normal}.sdc-table .sdc-table-code-label{color:var(--sdc-tab-primary);overflow-wrap:anywhere;word-break:break-word;white-space:normal;max-width:100%;display:inline-block}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast)}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:var(--sdc-table-gap-tags)}.sdc-table-tag{display:inline-flex;align-items:center;gap:.25rem;border-radius:6px;background:var(--sdc-table-tag-bg)}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-overlay{position:relative}.sdc-table-paginator{padding:.5rem 0}.sdc-table-button,.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-empty-state{display:block;padding:12rem}.sdc-table-loading-state{background:var(--sdc-table-bg-loading);display:block;border-bottom:1px solid var(--sdc-formfield-default-border);min-width:10rem;padding:18.8rem 0rem}thead th.sdc-table-th-checkbox{position:relative}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:.5rem}thead th.sdc-table-th-checkbox .sdc-table-th-label,thead .sdc-table-th-label{color:#333!important;white-space:nowrap}\n"] }]
|
|
253
|
+
}], propDecorators: { cols: [{
|
|
249
254
|
type: Input,
|
|
250
255
|
args: [{ required: true }]
|
|
251
256
|
}], data: [{
|
|
@@ -260,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
260
265
|
}], action: [{
|
|
261
266
|
type: Output
|
|
262
267
|
}] } });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQTZDLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0UsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2SSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGVBQWUsRUFBa0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7QUFVdEYsTUFBTSxPQUFPLGNBQWM7SUFDRSxJQUFJLEdBQWtCLEVBQUUsQ0FBQztJQUN6QixJQUFJLEdBQVEsRUFBRSxDQUFDO0lBQ2QsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUN6QixNQUFNLEdBQWlCLHFCQUFxQixDQUFDO0lBRS9ELE1BQU0sR0FBRyxJQUFJLFlBQVksRUFJL0IsQ0FBQztJQUVjLFFBQVEsR0FBWSxRQUFRLEVBQUUsQ0FBQztJQUUvQixVQUFVLEdBQUcsUUFBUSxDQUFVLEdBQUcsRUFBRSxDQUFDLElB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QUFDO1lBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUMxQixNQUFNO1NBQ1AsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO3dHQXZQVSxjQUFjOzRGQUFkLGNBQWMsdU1DbkIzQiw2K1BBK0tjLHM1T0RoS0YsWUFBWSx1YUFBRSxrQkFBa0Isb0hBQUUsZUFBZSw2bkJBQUUsZUFBZSw4SkFBRSxrQkFBa0IseUtBQUUsZ0JBQWdCOzs0RkFJdkcsY0FBYztrQkFQMUIsU0FBUzsrQkFDRSxXQUFXLGNBQ1QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUM7d0RBS3hGLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNHLE9BQU87c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUNFLE1BQU07c0JBQWpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUVoQixNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX1RBQkxFX09QVElPTlMsIFJvd0Jhc2UsIFNvcnRPcmRlciwgVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uVHlwZSwgVGFibGVPcHRpb25zIH0gZnJvbSAnbGliL3NyYy9jb3JlL3R5cGVzL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnbGliL3NyYy9jb3JlL3V0aWxzL2xheW91dC51dGlsJztcbmltcG9ydCB7IFNlYXJjaGJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJveC9zZWFyY2hib3guY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaFRyaWdnZXJNb2RlIH0gZnJvbSAnbGliL3NyYy9jb3JlL3R5cGVzL3NlYXJjaGJveC50eXBlJztcbmltcG9ydCB7IFBhZ2luYXRvck1vZHVsZSwgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICdwcmltZW5nL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9lbXB0eS1zdGF0ZSc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGVNb2R1bGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvYWRpbmctc3RhdGUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNlYXJjaGJveENvbXBvbmVudCwgUGFnaW5hdG9yTW9kdWxlLCBCdXR0b25Db21wb25lbnQsIExvYWRpbmdTdGF0ZU1vZHVsZSwgRW1wdHlTdGF0ZU1vZHVsZV0sXG4gIHN0eWxlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgZXh0ZW5kcyBSb3dCYXNlID0gUm93QmFzZT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIERvQ2hlY2sge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb2xzOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoeyByZXF1aXJlZDogZmFsc2UgfSkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoeyByZXF1aXJlZDogZmFsc2UgfSkgY29uZmlnOiBUYWJsZU9wdGlvbnMgPSBERUZBVUxUX1RBQkxFX09QVElPTlM7XG5cbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGNvbHVtbjogVGFibGVDb2x1bW47XG4gICAgcm93OiBUO1xuICAgIHZhbHVlOiB1bmtub3duO1xuICB9PigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGlzTW9iaWxlKCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dTZWFyY2ggPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5zZWFyY2g/LnNob3cgPz8gZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd1BhZ2luYXRvciA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnNob3cgPz8gZmFsc2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSByb3dzUGVyUGFnZU9wdGlvbnMgPSBjb21wdXRlZDxudW1iZXJbXT4oKCkgPT4gdGhpcy5vcHRpb25zKCkucGFnaW5hdGlvbj8ucm93c1BlclBhZ2VPcHRpb25zID8/IFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlYXJjaFBsYWNlaG9sZGVyID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5zZWFyY2g/LnBsYWNlaG9sZGVyID8/ICcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyaWdnZXJNb2RlID0gY29tcHV0ZWQ8U2VhcmNoVHJpZ2dlck1vZGU+KCgpID0+IHRoaXMub3B0aW9ucygpLnNlYXJjaD8udHlwZSA/PyAnYXV0bycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG90YWxSZWNvcmRzTGFiZWwgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHRoaXMub3B0aW9ucygpLnRhYmxlPy50b3RhbFJlY29yZHNMYWJlbCA/PyAnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBlbXB0eVRpdGxlID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5lbXB0eT8udGl0bGUgPz8gJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW1wdHlUZXh0ID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5lbXB0eT8udGV4dCA/PyAnJyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnMgPSBzaWduYWw8VGFibGVPcHRpb25zPihERUZBVUxUX1RBQkxFX09QVElPTlMpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2xvYmFsRmlsdGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc29ydEZpZWxkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc29ydE9yZGVyID0gc2lnbmFsPFNvcnRPcmRlcj4oMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3Rpb24gPSBzaWduYWw8VFtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaXJzdCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm93cyA9IHNpZ25hbDxudW1iZXI+KERFRkFVTFRfVEFCTEVfT1BUSU9OUy5wYWdpbmF0aW9uPy5yb3dzUGVyUGFnZSA/PyAxMCk7XG5cbiAgcHJvdGVjdGVkIGNlbGxDZmc8SyBleHRlbmRzICdjaGVja2JveCcgfCAnYnV0dG9uJyB8ICd0YWcnPihraW5kOiBLKTogYW55IHtcbiAgICByZXR1cm4gKHRoaXMub3B0aW9ucygpLmNlbGxzPy5ba2luZF0gPz8ge30pIGFzIGFueTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0YWdzT2Yocm93OiBULCBjb2w6IFRhYmxlQ29sdW1uKTogYW55W10ge1xuICAgIGNvbnN0IHJhdyA9IHRoaXMuXyhyb3csIGNvbC5maWVsZCEpIGFzIGFueTtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KHJhdykgPyByYXcgOiBbXTtcbiAgICBjb25zdCBtYXggPSB0aGlzLm9wdGlvbnMoKS5jZWxscz8udGFnPy5tYXhJdGVtcyBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHR5cGVvZiBtYXggPT09ICdudW1iZXInID8gYXJyLnNsaWNlKDAsIG1heCkgOiBhcnI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyZWREYXRhID0gY29tcHV0ZWQ8VFtdPigoKSA9PiB7XG4gICAgY29uc3QgcSA9IHRoaXMuZ2xvYmFsRmlsdGVyKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFxKSByZXR1cm4gdGhpcy5kYXRhO1xuXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5jb2xzLmZpbHRlcihjID0+IChjIGFzIGFueSkuc2VhcmNoYWJsZSA/PyB0cnVlKS5maWx0ZXIoYyA9PiAhIWMuZmllbGQpLm1hcChjID0+IGMuZmllbGQhKSBhcyBzdHJpbmdbXTtcbiAgICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuZGF0YTtcblxuICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKHJvdyA9PlxuICAgICAgZmllbGRzLnNvbWUoZiA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl8ocm93LCBmKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHJldHVybiB2LmpvaW4oJyAnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpO1xuICAgICAgICByZXR1cm4gU3RyaW5nKHYgPz8gJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzb3J0ZWREYXRhID0gY29tcHV0ZWQ8VFtdPigoKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnNvcnRGaWVsZCgpO1xuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5zb3J0T3JkZXIoKTtcbiAgICBjb25zdCBhcnIgPSBbLi4udGhpcy5maWx0ZXJlZERhdGEoKV07XG4gICAgaWYgKCFmaWVsZCB8fCBvcmRlciA9PT0gMCkgcmV0dXJuIGFycjtcblxuICAgIHJldHVybiBhcnIuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmEgPSB0aGlzLl8oYSwgZmllbGQpO1xuICAgICAgY29uc3QgdmIgPSB0aGlzLl8oYiwgZmllbGQpO1xuICAgICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICBpZiAodmEgPT0gbnVsbCkgcmV0dXJuIC1vcmRlcjtcbiAgICAgIGlmICh2YiA9PSBudWxsKSByZXR1cm4gb3JkZXI7XG4gICAgICBpZiAodHlwZW9mIHZhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmIgPT09ICdudW1iZXInKSByZXR1cm4gKHZhIC0gdmIpICogb3JkZXI7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhKS5sb2NhbGVDb21wYXJlKFN0cmluZyh2YikpICogb3JkZXI7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0b3RhbFJlY29yZHMgPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHRoaXMuc29ydGVkRGF0YSgpLmxlbmd0aCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhZ2VEYXRhID0gY29tcHV0ZWQ8VFtdPigoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpcnN0KCk7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnJvd3MoKTtcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWREYXRhKCkuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgY29uZmlnSGFzaCA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgdGhpcy5hcHBseUNvbmZpZ09wdGlvbnMoKTtcbiAgICAgIHRoaXMucm93cy5zZXQodGhpcy5vcHRpb25zKCkucGFnaW5hdGlvbj8ucm93c1BlclBhZ2UgPz8gMTApO1xuICAgICAgdGhpcy5maXJzdC5zZXQoMCk7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSB0aGlzLnN0YWJsZVN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRIYXNoID0gdGhpcy5zdGFibGVTdHJpbmdpZnkodGhpcy5jb25maWcpO1xuICAgIGlmIChuZXh0SGFzaCAhPT0gdGhpcy5jb25maWdIYXNoKSB7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSBuZXh0SGFzaDtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdPcHRpb25zKCk7XG4gICAgICB0aGlzLnJvd3Muc2V0KHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnJvd3NQZXJQYWdlID8/IDEwKTtcbiAgICAgIHRoaXMuZmlyc3Quc2V0KDApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlYXJjaFRlcm0oZXZPclZhbDogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IHRlcm0gPSB0eXBlb2YgZXZPclZhbCA9PT0gJ3N0cmluZydcbiAgICAgID8gZXZPclZhbFxuICAgICAgOiAoZXZPclZhbCBhcyBhbnkpPy5kZXRhaWwgPz8gJyc7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXIuc2V0KFN0cmluZyh0ZXJtKSk7XG4gICAgdGhpcy5maXJzdC5zZXQoMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DbGVhclNlYXJjaChfZXY/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXIuc2V0KCcnKTtcbiAgICB0aGlzLmZpcnN0LnNldCgwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTb3J0KGZpZWxkOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc29ydEZpZWxkKCkgIT09IGZpZWxkKSB7XG4gICAgICB0aGlzLnNvcnRGaWVsZC5zZXQoZmllbGQpO1xuICAgICAgdGhpcy5zb3J0T3JkZXIuc2V0KDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydE9yZGVyKCk7XG4gICAgICBpZiAob3JkZXIgPT09IDEpIHRoaXMuc29ydE9yZGVyLnNldCgtMSk7XG4gICAgICBlbHNlIGlmIChvcmRlciA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zb3J0T3JkZXIuc2V0KDApO1xuICAgICAgICB0aGlzLnNvcnRGaWVsZC5zZXQobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvcnRPcmRlci5zZXQoMSk7XG4gICAgICAgIHRoaXMuc29ydEZpZWxkLnNldChmaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlyc3Quc2V0KDApO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGU6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5maXJzdC5zZXQoZS5maXJzdCA/PyAwKTtcbiAgICB0aGlzLnJvd3Muc2V0KGUucm93cyA/PyB0aGlzLm9wdGlvbnMoKS5wYWdpbmF0aW9uPy5yb3dzUGVyUGFnZSA/PyAxMCk7XG4gIH1cblxuICBnZXRDaGVja2VkVmFsdWUoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblRvZ2dsZVJvdyhyb3c6IFQsIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSBuZXcgU2V0KHRoaXMuc2VsZWN0aW9uKCkpO1xuICAgIGNoZWNrZWQgPyBzZWwuYWRkKHJvdykgOiBzZWwuZGVsZXRlKHJvdyk7XG4gICAgdGhpcy5zZWxlY3Rpb24uc2V0KFsuLi5zZWxdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1Jvd1NlbGVjdGVkKHJvdzogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbigpLmluY2x1ZGVzKHJvdyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2VsZWN0UGFnZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gbmV3IFNldCh0aGlzLnNlbGVjdGlvbigpKTtcbiAgICB0aGlzLnBhZ2VEYXRhKCkuZm9yRWFjaChyID0+IChjaGVja2VkID8gc2VsLmFkZChyKSA6IHNlbC5kZWxldGUocikpKTtcbiAgICB0aGlzLnNlbGVjdGlvbi5zZXQoWy4uLnNlbF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzUGFnZUZ1bGx5U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMucGFnZURhdGEoKTtcbiAgICByZXR1cm4gdmlzaWJsZS5sZW5ndGggPiAwICYmIHZpc2libGUuZXZlcnkociA9PiB0aGlzLnNlbGVjdGlvbigpLmluY2x1ZGVzKHIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfID0gKG9iajogVCwgcGF0aDogc3RyaW5nKTogdW5rbm93biA9PlxuICAgIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2U8dW5rbm93bj4oKGFjYywgcGFydCkgPT4ge1xuICAgICAgaWYgKGFjYyAhPT0gbnVsbCAmJiB0eXBlb2YgYWNjID09PSAnb2JqZWN0JykgcmV0dXJuIChhY2MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3BhcnRdO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBvYmopO1xuXG4gIHByb3RlY3RlZCBmb3JtYXREYXRlKHZhbHVlOiB1bmtub3duLCBfZm9ybWF0OiBzdHJpbmcgPSAnc2hvcnREYXRlJyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh1bmRlZmluZWQpLmZvcm1hdChuZXcgRGF0ZSh2YWx1ZSBhcyB1bmtub3duIGFzIHN0cmluZykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGZvcm1hdEN1cnJlbmN5KHZhbHVlOiB1bmtub3duLCBjdXJyZW5jeTogc3RyaW5nID0gJ0JSTCcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG4gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4obikpIHJldHVybiBTdHJpbmcodmFsdWUgPz8gJycpO1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQodW5kZWZpbmVkLCB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeSB9KS5mb3JtYXQobik7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29uZmlnT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBjZmc6IFRhYmxlT3B0aW9ucyA9IHRoaXMuY29uZmlnIHx8IERFRkFVTFRfVEFCTEVfT1BUSU9OUztcbiAgICB0aGlzLm9wdGlvbnMuc2V0KHtcbiAgICAgIC4uLkRFRkFVTFRfVEFCTEVfT1BUSU9OUyxcbiAgICAgIC4uLmNmZyxcbiAgICAgIHNlYXJjaDogeyAuLi5ERUZBVUxUX1RBQkxFX09QVElPTlMuc2VhcmNoLCAuLi5jZmcuc2VhcmNoIH0sXG4gICAgICB0YWJsZTogeyAuLi5ERUZBVUxUX1RBQkxFX09QVElPTlMudGFibGUsIC4uLmNmZy50YWJsZSB9LFxuICAgICAgZW1wdHk6IHsgLi4uREVGQVVMVF9UQUJMRV9PUFRJT05TLmVtcHR5LCAuLi5jZmcuZW1wdHkgfSxcbiAgICAgIHBhZ2luYXRpb246IHsgLi4uREVGQVVMVF9UQUJMRV9PUFRJT05TLnBhZ2luYXRpb24sIC4uLmNmZy5wYWdpbmF0aW9uIH0sXG4gICAgICBjZWxsczoge1xuICAgICAgICBjaGVja2JveDogeyAuLi4oREVGQVVMVF9UQUJMRV9PUFRJT05TLmNlbGxzPy5jaGVja2JveCA/PyB7fSksIC4uLihjZmcuY2VsbHM/LmNoZWNrYm94ID8/IHt9KSB9LFxuICAgICAgICBidXR0b246IHsgLi4uKERFRkFVTFRfVEFCTEVfT1BUSU9OUy5jZWxscz8uYnV0dG9uID8/IHt9KSwgLi4uKGNmZy5jZWxscz8uYnV0dG9uID8/IHt9KSB9LFxuICAgICAgICB0YWc6IHsgLi4uKERFRkFVTFRfVEFCTEVfT1BUSU9OUy5jZWxscz8udGFnID8/IHt9KSwgLi4uKGNmZy5jZWxscz8udGFnID8/IHt9KSB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhYmxlU3RyaW5naWZ5KG9iajogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcbiAgICBjb25zdCByZXBsYWNlciA9IChfazogc3RyaW5nLCB2OiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgYXNPYmogPSB2IGFzIG9iamVjdDtcbiAgICAgICAgaWYgKHNlZW4uaGFzKGFzT2JqKSkgcmV0dXJuO1xuICAgICAgICBzZWVuLmFkZChhc09iaik7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSByZXR1cm4gdjtcbiAgICAgICAgY29uc3QgbyA9IHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvKS5zb3J0KCkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICBhY2Nba2V5XSA9IG9ba2V5XTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHY7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiA/PyB7fSwgcmVwbGFjZXIgYXMgKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqID8/IHt9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CdXR0b25DbGljayhyb3c6IFQsIGNvbDogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSAoY29sLmFjdGlvbkZpZWxkID8/IGNvbC5maWVsZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHZhbHVlID0ga2V5ID8gdGhpcy5fKHJvdywga2V5KSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHsgY29sdW1uOiBjb2wsIHJvdywgdmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnV0dG9uS2V5KHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbiwgb3B0OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFjdEtleSA9IChjb2wuYWN0aW9uRmllbGQgPz8gY29sLmZpZWxkID8/ICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgYWN0VmFsID0gYWN0S2V5ID8gU3RyaW5nKHRoaXMuXyhyb3csIGFjdEtleSkgPz8gJycpIDogJyc7XG4gICAgcmV0dXJuIFtcbiAgICAgIFN0cmluZyhvcHQ/LmxhYmVsID8/ICcnKSxcbiAgICAgIFN0cmluZyhvcHQ/Lmljb24gPz8gJycpLFxuICAgICAgU3RyaW5nKG9wdD8ucHJpb3JpdHkgPz8gJycpLFxuICAgICAgU3RyaW5nKG9wdD8uc2l6ZSA/PyAnJyksXG4gICAgICBTdHJpbmcob3B0Py50b29sdGlwID8/ICcnKSxcbiAgICAgIGFjdFZhbFxuICAgIF0uam9pbignfCcpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RjLXRhYmxlXCIgW2NsYXNzLnNkYy10YWJsZS1zdGFja109XCJpc01vYmlsZSA/ICdzdGFjaycgOiAnZ3JpZCdcIlxuICBbY2xhc3Muc2RjLXRhYmxlLWZpbHRlcmVkXT1cIiEhZ2xvYmFsRmlsdGVyKCkudHJpbSgpXCI+XG5cbiAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS1jYXB0aW9uXCIgKm5nSWY9XCJzaG93U2VhcmNoKClcIj5cbiAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJpc01vYmlsZSA/ICcxMDAlJyA6ICcyMCUnXCI+XG4gICAgICA8c2RjLXNlYXJjaGJveCBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlcigpXCIgW3RyaWdnZXJNb2RlXT1cInRyaWdnZXJNb2RlKClcIlxuICAgICAgICAob25TZWFyY2gpPVwib25TZWFyY2hUZXJtKCRldmVudClcIiAob25DbGVhcik9XCJvbkNsZWFyU2VhcmNoKClcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8dGFibGUgY2xhc3M9XCJzZGMtdGFibGUtZ3JpZFwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgQGZvciAoY29sIG9mIGNvbHM7IGxldCBpID0gJGluZGV4OyB0cmFjayBpKSB7XG4gICAgICAgIDx0aCBbY2xhc3Muc2RjLXRhYmxlLXRoLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sLmZpZWxkISwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSlcIiBbY2xhc3Muc2RjLXRhYmxlLXNvcnRhYmxlXT1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2VcIlxuICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtaXMtc2VsZWN0ZWRdPVwic29ydEZpZWxkKCkgPT09IGNvbC5maWVsZFwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10aC1pbm5lclwiIFtjbGFzcy5zZGMtdGFibGUtc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgQHN3aXRjaCAoY29sLnR5cGUpIHtcbiAgICAgICAgICAgIEBjYXNlICgnY2hlY2tib3gtc2VsZWN0aW9uJykge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtdGFibGUtdGgtbGFiZWxcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtdGFibGUtdGgtbGFiZWxcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtdGFibGUtc29ydC1pY29ucyBzZGMtdGFibGUtc29ydC1vdmVybGF5XCIgKm5nSWY9XCJjb2wuc29ydGFibGUgIT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic29ydEljb25zVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sOiBjb2wgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtdGFibGUtdGgtY2VudGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nICYmIChjZWxsQ2ZnKCdjaGVja2JveCcpLnNlbGVjdEFsbCA/PyB0cnVlKVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzUGFnZUZ1bGx5U2VsZWN0ZWQoKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdFBhZ2UoZ2V0Q2hlY2tlZFZhbHVlKCRldmVudCkpXCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cblxuICAgIDx0Ym9keT5cbiAgICAgIEBpZiAobG9hZGluZykgeyB9IEBlbHNlIHtcbiAgICAgIEBmb3IgKHJvdyBvZiBwYWdlRGF0YSgpOyBsZXQgciA9ICRpbmRleDsgdHJhY2sgcikge1xuICAgICAgPHRyPlxuICAgICAgICBAZm9yIChjb2wgb2YgY29sczsgbGV0IGMgPSAkaW5kZXg7IHRyYWNrIGMpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTW9iaWxlOyBlbHNlIGRlc2t0b3BDb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10ZC1tb2JpbGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic29ydEljb25zVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sOiBjb2wgfVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJzZGMtdGFibGUtdGQgc2RjLXRhYmxlLXRkYyBzZGMtdGFibGUtbW9iaWxlLXRkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10ZC1jaGVja2JveF09XCJjb2wudHlwZSA9PT0gJ2NoZWNrYm94LXNlbGVjdGlvbidcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLWlzLXNlbGVjdGVkXT1cInNvcnRGaWVsZCgpID09PSBjb2wuZmllbGRcIiBbYXR0ci5kYXRhLXRpdGxlXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydChjb2wuZmllbGQhLCBjb2wuc29ydGFibGUgIT09IGZhbHNlKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRkLXZhbFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRwbFwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgY29sOiBjb2wgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVza3RvcENvbnRlbnQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwic2RjLXRhYmxlLXRkIHNkYy10YWJsZS10ZGNcIiBbY2xhc3Muc2RjLXRhYmxlLXRkLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLWlzLXNlbGVjdGVkXT1cInNvcnRGaWVsZCgpID09PSBjb2wuZmllbGRcIiBbYXR0ci5kYXRhLXRpdGxlXT1cImNvbC5oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtdGQtdmFsXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRwbFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3csIGNvbDogY29sIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8cy1lbXB0eS1zdGF0ZSAqbmdJZj1cIiFsb2FkaW5nICYmIG9wdGlvbnMoKS5lbXB0eT8uc2hvdyAhPT0gZmFsc2UgJiYgdG90YWxSZWNvcmRzKCkgPT09IDBcIiBpZD1cIm15LWVtcHR5LXN0YXRlXCJcbiAgICBpY29uQ2xhc3M9XCJmYSBmYS1pbmJveFwiIFt0aXRsZV09XCJlbXB0eVRpdGxlKClcIiBbZGVzY3JpcHRpb25dPVwiZW1wdHlUZXh0KClcIiBjbGFzcz1cInNkYy10YWJsZS1lbXB0eS1zdGF0ZVwiPlxuICA8L3MtZW1wdHktc3RhdGU+XG5cbiAgPHMtbG9hZGluZy1zdGF0ZSAqbmdJZj1cImxvYWRpbmdcIiBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2Jsb2NrV2luZG93XT1cImZhbHNlXCIgY2xhc3M9XCJzZGMtdGFibGUtbG9hZGluZy1zdGF0ZVwiPlxuICA8L3MtbG9hZGluZy1zdGF0ZT5cblxuICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXBhZ2luYXRvclwiICpuZ0lmPVwic2hvd1BhZ2luYXRvcigpXCI+XG4gICAgPHAtcGFnaW5hdG9yIFtkcm9wZG93bkFwcGVuZFRvXT1cIidib2R5J1wiIFtmaXJzdF09XCJmaXJzdCgpXCIgW3Jvd3NdPVwicm93cygpXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHMoKVwiXG4gICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cImlzTW9iaWxlID8gdW5kZWZpbmVkIDogcm93c1BlclBhZ2VPcHRpb25zKClcIiBbc2hvd0ZpcnN0TGFzdEljb25dPVwiIWlzTW9iaWxlXCJcbiAgICAgIChvblBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkcm9wZG93bmljb25cIj48aSBjbGFzcz1cImZhcyBmYS1jYXJldC1kb3duXCI+PC9pPjwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlyc3RwYWdlbGlua2ljb25cIj48aSBjbGFzcz1cImZhcyBmYS1zdGVwLWZvcndhcmQgZmEtcm90YXRlLTE4MFwiPjwvaT48L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInByZXZpb3VzcGFnZWxpbmtpY29uXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2FyZXQtbGVmdFwiPjwvaT48L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm5leHRwYWdlbGlua2ljb25cIj48aSBjbGFzcz1cImZhcyBmYS1jYXJldC1yaWdodFwiPjwvaT48L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxhc3RwYWdlbGlua2ljb25cIj48aSBjbGFzcz1cImZhcyBmYS1zdGVwLWZvcndhcmRcIj48L2k+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtcGFnaW5hdG9yPlxuXG4gICAgPHNwYW4gKm5nSWY9XCIhaXNNb2JpbGVcIj5cbiAgICAgIHt7IHRvdGFsUmVjb3Jkc0xhYmVsKCkgfX06IHt7IHRvdGFsUmVjb3JkcygpIH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgI2NlbGxUcGwgbGV0LXJvdyBsZXQtY29sPVwiIGNvbFwiPlxuICAgIEBzd2l0Y2ggKGNvbC50eXBlKSB7XG4gICAgQGNhc2UgKCdjaGVja2JveC1zZWxlY3Rpb24nKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGxDZmcoJ2NoZWNrYm94JykgYXMgY2hlY2tib3hPcHRpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLWNoZWNrYm94XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIiAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93KHJvdywgZ2V0Q2hlY2tlZFZhbHVlKCRldmVudCkpXCIgLz5cbiAgICAgICAgPGxhYmVsPnt7IF8ocm93LCBjb2wuZmllbGQpIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIH1cblxuICAgIEBjYXNlICgnZGF0ZScpIHsge3sgZm9ybWF0RGF0ZShfKHJvdywgY29sLmZpZWxkKSwgY29sLmZvcm1hdCB8fCAnc2hvcnREYXRlJykgfX0gfVxuXG4gICAgQGNhc2UgKCdjdXJyZW5jeScpIHsge3sgZm9ybWF0Q3VycmVuY3koXyhyb3csIGNvbC5maWVsZCksIGNvbC5mb3JtYXQgfHwgJ0JSTCcpIH19IH1cblxuICAgIEBjYXNlICgndGFnJykge1xuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsQ2ZnKCd0YWcnKSBhcyB0YWdPcHRpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRhZ3NcIj5cbiAgICAgICAgQGZvciAodGFnIG9mIHRhZ3NPZihyb3csIGNvbCk7IGxldCB0ID0gJGluZGV4OyB0cmFjayB0KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLXRhYmxlLXRhZ1wiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhZ09wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IG51bGxcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWdPcHRpb25zLmNvbG9yIHx8IG51bGxcIiBbYXR0ci50aXRsZV09XCJ0YWdPcHRpb25zLnRvb2x0aXBcIj5cbiAgICAgICAgICA8aSAqbmdJZj1cInRhZ09wdGlvbnMuaWNvblwiIFtjbGFzc109XCJ0YWdPcHRpb25zLmljb25cIj48L2k+XG4gICAgICAgICAge3sgdGFnIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuXG4gICBAY2FzZSAoJ2J1dHRvbicpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsQ2ZnKCdidXR0b24nKSBhcyBidXR0b25PcHRpb25zXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IF9fayBvZiBbYnV0dG9uS2V5KHJvdywgY29sLCBidXR0b25PcHRpb25zKV1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLWJ1dHRvblwiPlxuICAgICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IDcwJTtcIlxuXG4gICAgICAgICAgICAgIFtzaXplXT1cImJ1dHRvbk9wdGlvbnMuc2l6ZVwiXG4gICAgICAgICAgICAgIFtwcmlvcml0eV09XCJidXR0b25PcHRpb25zLnByaW9yaXR5IHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgIFtpY29uXT1cImJ1dHRvbk9wdGlvbnMuaWNvblwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b25PcHRpb25zLmxhYmVsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbk9wdGlvbnMuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiYnV0dG9uT3B0aW9ucy50b29sdGlwXCJcblxuICAgICAgICAgICAgICBbYXR0ci5zaXplXT1cImJ1dHRvbk9wdGlvbnMuc2l6ZVwiXG4gICAgICAgICAgICAgIFthdHRyLnByaW9yaXR5XT1cImJ1dHRvbk9wdGlvbnMucHJpb3JpdHkgfHwgJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2V2ZXJpdHldPVwiYnV0dG9uT3B0aW9ucy5wcmlvcml0eSB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICBbYXR0ci5pY29uXT1cImJ1dHRvbk9wdGlvbnMuaWNvblwiXG4gICAgICAgICAgICAgIFthdHRyLmxhYmVsXT1cImJ1dHRvbk9wdGlvbnMubGFiZWxcIlxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJidXR0b25PcHRpb25zLmRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiYnV0dG9uT3B0aW9ucy50b29sdGlwIHx8IG51bGxcIlxuXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEta2V5XT1cIl9fa1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25PcHRpb25zLmRpc2FibGVkID8gbnVsbCA6IG9uQnV0dG9uQ2xpY2socm93LCBjb2wpXCI+XG4gICAgICAgICAgICA8L3NkYy1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZhdWx0IHsge3sgXyhyb3csIGNvbC5maWVsZCkgfX0gfVxuICAgIH1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NvcnRJY29uc1RwbCBsZXQtY29sPVwiY29sXCI+XG4gIDxzcGFuICpuZ0lmPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBjb2wudHlwZSAhPT0gJ2NoZWNrYm94LXNlbGVjdGlvbidcIiBjbGFzcz1cInNkYy10YWJsZS1zb3J0LWluZGljYXRvclwiPlxuICAgIDxpICpuZ0lmPVwic29ydEZpZWxkKCkgIT09IGNvbC5maWVsZFwiIGNsYXNzPVwiZmFzIGZhLXNvcnQtYWx0IHNkYy10YWJsZS1zb3J0LW5ldXRyYWxcIj48L2k+XG4gICAgPGkgKm5nSWY9XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkICYmIHNvcnRPcmRlcigpID09PSAxXCJcbiAgICAgIGNsYXNzPVwiZmFzIGZhLXNvcnQtYW1vdW50LXVwLWFsdCBzZGMtdGFibGUtc29ydC1hY3RpdmVcIj48L2k+XG4gICAgPGkgKm5nSWY9XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkICYmIHNvcnRPcmRlcigpID09PSAtMVwiXG4gICAgICBjbGFzcz1cImZhcyBmYS1zb3J0LWFtb3VudC1kb3duIHNkYy10YWJsZS1zb3J0LWFjdGl2ZVwiPjwvaT5cbiAgPC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2UgfHwgY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nXCJcbiAgICBjbGFzcz1cInNkYy10YWJsZS1zb3J0LWluZGljYXRvciBzZGMtdGFibGUtc29ydC1pbmRpY2F0b3ItcGxhY2Vob2xkZXJcIj48L3NwYW4+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBOEQsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEssT0FBTyxFQUFFLHFCQUFxQixFQUFxRSxNQUFNLGdDQUFnQyxDQUFDOzs7OztBQVcxSSxNQUFNLE9BQU8sY0FBYztJQUNFLElBQUksR0FBa0IsRUFBRSxDQUFDO0lBQ3pCLElBQUksR0FBUSxFQUFFLENBQUM7SUFDZCxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLE1BQU0sR0FBaUIscUJBQXFCLENBQUM7SUFFL0QsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFtRCxDQUFDO0lBRXBFLFFBQVEsR0FBWSxRQUFRLEVBQUUsQ0FBQztJQUUvQixVQUFVLEdBQUcsUUFBUSxDQUFVLEdBQUcs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RSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNHLE9BQU87c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUNFLE1BQU07c0JBQWpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUVoQixNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICdsaWIvc3JjL2NvcmUvdXRpbHMvbGF5b3V0LnV0aWwnO1xuaW1wb3J0IHsgU2VhcmNoYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoYm94L3NlYXJjaGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICdwcmltZW5nL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9lbXB0eS1zdGF0ZSc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGVNb2R1bGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvYWRpbmctc3RhdGUnO1xuaW1wb3J0IHsgUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFnaW5hdG9yL3BhZ2luYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIHNpZ25hbCwgY29tcHV0ZWQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgRG9DaGVjaywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX1RBQkxFX09QVElPTlMsIHR5cGUgUm93QmFzZSwgdHlwZSBTb3J0T3JkZXIsIHR5cGUgVGFibGVDb2x1bW4sIHR5cGUgVGFibGVPcHRpb25zIH0gZnJvbSAnbGliL3NyYy9jb3JlL3R5cGVzL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IHR5cGUgU2VhcmNoVHJpZ2dlck1vZGUgfSBmcm9tICdsaWIvc3JjL2NvcmUvdHlwZXMvc2VhcmNoYm94LnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTZWFyY2hib3hDb21wb25lbnQsIFBhZ2luYXRvckNvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBMb2FkaW5nU3RhdGVNb2R1bGUsIEVtcHR5U3RhdGVNb2R1bGVdLFxuICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFJvd0Jhc2UgPSBSb3dCYXNlPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgRG9DaGVjayB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbHM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZGF0YTogVFtdID0gW107XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBjb25maWc6IFRhYmxlT3B0aW9ucyA9IERFRkFVTFRfVEFCTEVfT1BUSU9OUztcblxuICBAT3V0cHV0KCkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbHVtbjogVGFibGVDb2x1bW47IHJvdzogVDsgdmFsdWU6IHVua25vd24gfT4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNNb2JpbGU6IGJvb2xlYW4gPSBpc01vYmlsZSgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93U2VhcmNoID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5vcHRpb25zKCkuc2VhcmNoPy5zaG93ID8/IGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dQYWdpbmF0b3IgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5wYWdpbmF0aW9uPy5zaG93ID8/IGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm93c1BlclBhZ2VPcHRpb25zID0gY29tcHV0ZWQ8bnVtYmVyW10+KCgpID0+IHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnJvd3NQZXJQYWdlT3B0aW9ucyA/PyBbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hQbGFjZWhvbGRlciA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5vcHRpb25zKCkuc2VhcmNoPy5wbGFjZWhvbGRlciA/PyAnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmlnZ2VyTW9kZSA9IGNvbXB1dGVkPFNlYXJjaFRyaWdnZXJNb2RlPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5zZWFyY2g/LnR5cGUgPz8gJ2F1dG8nKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvdGFsUmVjb3Jkc0xhYmVsID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS50YWJsZT8udG90YWxSZWNvcmRzTGFiZWwgPz8gJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW1wdHlUaXRsZSA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5vcHRpb25zKCkuZW1wdHk/LnRpdGxlID8/ICcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVtcHR5VGV4dCA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5vcHRpb25zKCkuZW1wdHk/LnRleHQgPz8gJycpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zID0gc2lnbmFsPFRhYmxlT3B0aW9ucz4oREVGQVVMVF9UQUJMRV9PUFRJT05TKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdsb2JhbEZpbHRlciA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNvcnRGaWVsZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNvcnRPcmRlciA9IHNpZ25hbDxTb3J0T3JkZXI+KDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0aW9uID0gc2lnbmFsPFRbXT4oW10pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlyc3QgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvd3MgPSBzaWduYWw8bnVtYmVyPihERUZBVUxUX1RBQkxFX09QVElPTlMucGFnaW5hdGlvbj8ucm93c1BlclBhZ2UgPz8gMTApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJlZERhdGEgPSBjb21wdXRlZDxUW10+KCgpID0+IHtcbiAgICBjb25zdCBxID0gdGhpcy5nbG9iYWxGaWx0ZXIoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXEpIHsgcmV0dXJuIHRoaXMuZGF0YTsgfVxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuY29scy5maWx0ZXIoYyA9PiAoYyBhcyBhbnkpLnNlYXJjaGFibGUgPz8gdHJ1ZSkuZmlsdGVyKGMgPT4gISFjLmZpZWxkKS5tYXAoYyA9PiBjLmZpZWxkISkgYXMgc3RyaW5nW107XG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRoaXMuZGF0YTsgfVxuICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKHJvdyA9PlxuICAgICAgZmllbGRzLnNvbWUoZiA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl8ocm93LCBmKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHsgcmV0dXJuIHYuam9pbignICcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSk7IH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyh2ID8/ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc29ydGVkRGF0YSA9IGNvbXB1dGVkPFRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5zb3J0RmllbGQoKTtcbiAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydE9yZGVyKCk7XG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMuZmlsdGVyZWREYXRhKCldO1xuICAgIGlmICghZmllbGQgfHwgb3JkZXIgPT09IDApIHsgcmV0dXJuIGFycjsgfVxuICAgIHJldHVybiBhcnIuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmEgPSB0aGlzLl8oYSwgZmllbGQpO1xuICAgICAgY29uc3QgdmIgPSB0aGlzLl8oYiwgZmllbGQpO1xuICAgICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkgeyByZXR1cm4gMDsgfVxuICAgICAgaWYgKHZhID09IG51bGwpIHsgcmV0dXJuIC1vcmRlcjsgfVxuICAgICAgaWYgKHZiID09IG51bGwpIHsgcmV0dXJuIG9yZGVyOyB9XG4gICAgICBpZiAodHlwZW9mIHZhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmIgPT09ICdudW1iZXInKSB7IHJldHVybiAodmEgLSB2YikgKiBvcmRlcjsgfVxuICAgICAgcmV0dXJuIFN0cmluZyh2YSkubG9jYWxlQ29tcGFyZShTdHJpbmcodmIpKSAqIG9yZGVyO1xuICAgIH0pO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG90YWxSZWNvcmRzID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB0aGlzLnNvcnRlZERhdGEoKS5sZW5ndGgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlRGF0YSA9IGNvbXB1dGVkPFRbXT4oKCkgPT4ge1xuICAgIGlmICghdGhpcy5zaG93UGFnaW5hdG9yKCkpIHJldHVybiB0aGlzLnNvcnRlZERhdGEoKTtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuZmlyc3QoKTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucm93cygpO1xuICAgIHJldHVybiB0aGlzLnNvcnRlZERhdGEoKS5zbGljZShzdGFydCwgZW5kKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBjb25maWdIYXNoID0gJyc7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgdGhpcy5hcHBseUNvbmZpZ09wdGlvbnMoKTtcbiAgICAgIHRoaXMucm93cy5zZXQodGhpcy5vcHRpb25zKCkucGFnaW5hdGlvbj8ucm93c1BlclBhZ2UgPz8gMTApO1xuICAgICAgdGhpcy5maXJzdC5zZXQoMCk7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSB0aGlzLnN0YWJsZVN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRIYXNoID0gdGhpcy5zdGFibGVTdHJpbmdpZnkodGhpcy5jb25maWcpO1xuICAgIGlmIChuZXh0SGFzaCAhPT0gdGhpcy5jb25maWdIYXNoKSB7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSBuZXh0SGFzaDtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdPcHRpb25zKCk7XG4gICAgICB0aGlzLnJvd3Muc2V0KHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnJvd3NQZXJQYWdlID8/IDEwKTtcbiAgICAgIHRoaXMuZmlyc3Quc2V0KDApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlYXJjaFRlcm0oZXZPclZhbDogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IHRlcm0gPSB0eXBlb2YgZXZPclZhbCA9PT0gJ3N0cmluZycgPyBldk9yVmFsIDogKGV2T3JWYWwgYXMgYW55KT8uZGV0YWlsID8/ICcnO1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyLnNldChTdHJpbmcodGVybSkpO1xuICAgIHRoaXMuZmlyc3Quc2V0KDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2xlYXJTZWFyY2goX2V2PzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyLnNldCgnJyk7XG4gICAgdGhpcy5maXJzdC5zZXQoMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU29ydChmaWVsZDogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICghZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5zb3J0RmllbGQoKSAhPT0gZmllbGQpIHtcbiAgICAgIHRoaXMuc29ydEZpZWxkLnNldChmaWVsZCk7XG4gICAgICB0aGlzLnNvcnRPcmRlci5zZXQoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5zb3J0T3JkZXIoKTtcbiAgICAgIGlmIChvcmRlciA9PT0gMSkgeyB0aGlzLnNvcnRPcmRlci5zZXQoLTEpOyB9XG4gICAgICBlbHNlIGlmIChvcmRlciA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zb3J0T3JkZXIuc2V0KDApO1xuICAgICAgICB0aGlzLnNvcnRGaWVsZC5zZXQobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvcnRPcmRlci5zZXQoMSk7XG4gICAgICAgIHRoaXMuc29ydEZpZWxkLnNldChmaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlyc3Quc2V0KDApO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGU6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5maXJzdC5zZXQoZS5maXJzdCA/PyAwKTtcbiAgICB0aGlzLnJvd3Muc2V0KGUucm93cyA/PyB0aGlzLm9wdGlvbnMoKS5wYWdpbmF0aW9uPy5yb3dzUGVyUGFnZSA/PyAxMCk7XG4gIH1cblxuICBnZXRDaGVja2VkVmFsdWUoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblRvZ2dsZVJvdyhyb3c6IFQsIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSBuZXcgU2V0KHRoaXMuc2VsZWN0aW9uKCkpO1xuICAgIGNoZWNrZWQgPyBzZWwuYWRkKHJvdykgOiBzZWwuZGVsZXRlKHJvdyk7XG4gICAgdGhpcy5zZWxlY3Rpb24uc2V0KFsuLi5zZWxdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1Jvd1NlbGVjdGVkKHJvdzogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbigpLmluY2x1ZGVzKHJvdyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2VsZWN0UGFnZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gbmV3IFNldCh0aGlzLnNlbGVjdGlvbigpKTtcbiAgICB0aGlzLnBhZ2VEYXRhKCkuZm9yRWFjaChyID0+IChjaGVja2VkID8gc2VsLmFkZChyKSA6IHNlbC5kZWxldGUocikpKTtcbiAgICB0aGlzLnNlbGVjdGlvbi5zZXQoWy4uLnNlbF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzUGFnZUZ1bGx5U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMucGFnZURhdGEoKTtcbiAgICByZXR1cm4gdmlzaWJsZS5sZW5ndGggPiAwICYmIHZpc2libGUuZXZlcnkociA9PiB0aGlzLnNlbGVjdGlvbigpLmluY2x1ZGVzKHIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjZWxsQ2ZnPEsgZXh0ZW5kcyAnY2hlY2tib3gnIHwgJ2J1dHRvbicgfCAndGFnJz4oa2luZDogSyk6IGFueSB7XG4gICAgcmV0dXJuICh0aGlzLm9wdGlvbnMoKS5jZWxscz8uW2tpbmRdID8/IHt9KSBhcyBhbnk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdGFnc09mKHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbik6IGFueVtdIHtcbiAgICBjb25zdCByYXcgPSB0aGlzLl8ocm93LCBjb2wuZmllbGQhKSBhcyBhbnk7XG4gICAgY29uc3QgYXJyID0gQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogW107XG4gICAgY29uc3QgbWF4ID0gdGhpcy5vcHRpb25zKCkuY2VsbHM/LnRhZz8ubWF4SXRlbXMgYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB0eXBlb2YgbWF4ID09PSAnbnVtYmVyJyA/IGFyci5zbGljZSgwLCBtYXgpIDogYXJyO1xuICB9XG5cbiAgcHJvdGVjdGVkIF8gPSAob2JqOiBULCBwYXRoOiBzdHJpbmcpOiB1bmtub3duID0+XG4gICAgcGF0aC5zcGxpdCgnLicpLnJlZHVjZTx1bmtub3duPigoYWNjLCBwYXJ0KSA9PiB7XG4gICAgICBpZiAoYWNjICE9PSBudWxsICYmIHR5cGVvZiBhY2MgPT09ICdvYmplY3QnKSB7IHJldHVybiAoYWNjIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtwYXJ0XTsgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBvYmopO1xuXG4gIHByb3RlY3RlZCBmb3JtYXREYXRlKHZhbHVlOiB1bmtub3duLCBfZm9ybWF0OiBzdHJpbmcgPSAnc2hvcnREYXRlJyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh1bmRlZmluZWQpLmZvcm1hdChuZXcgRGF0ZSh2YWx1ZSBhcyB1bmtub3duIGFzIHN0cmluZykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGZvcm1hdEN1cnJlbmN5KHZhbHVlOiB1bmtub3duLCBjdXJyZW5jeTogc3RyaW5nID0gJ0JSTCcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG4gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4obikpIHsgcmV0dXJuIFN0cmluZyh2YWx1ZSA/PyAnJyk7IH1cbiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHVuZGVmaW5lZCwgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3kgfSkuZm9ybWF0KG4pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ09wdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgY2ZnOiBUYWJsZU9wdGlvbnMgPSB0aGlzLmNvbmZpZyB8fCBERUZBVUxUX1RBQkxFX09QVElPTlM7XG4gICAgdGhpcy5vcHRpb25zLnNldCh7XG4gICAgICAuLi5ERUZBVUxUX1RBQkxFX09QVElPTlMsXG4gICAgICAuLi5jZmcsXG4gICAgICBzZWFyY2g6IHsgLi4uREVGQVVMVF9UQUJMRV9PUFRJT05TLnNlYXJjaCwgLi4uY2ZnLnNlYXJjaCB9LFxuICAgICAgdGFibGU6IHsgLi4uREVGQVVMVF9UQUJMRV9PUFRJT05TLnRhYmxlLCAuLi5jZmcudGFibGUgfSxcbiAgICAgIGVtcHR5OiB7IC4uLkRFRkFVTFRfVEFCTEVfT1BUSU9OUy5lbXB0eSwgLi4uY2ZnLmVtcHR5IH0sXG4gICAgICBwYWdpbmF0aW9uOiB7IC4uLkRFRkFVTFRfVEFCTEVfT1BUSU9OUy5wYWdpbmF0aW9uLCAuLi5jZmcucGFnaW5hdGlvbiB9LFxuICAgICAgY2VsbHM6IHtcbiAgICAgICAgY2hlY2tib3g6IHsgLi4uKERFRkFVTFRfVEFCTEVfT1BUSU9OUy5jZWxscz8uY2hlY2tib3ggPz8ge30pLCAuLi4oY2ZnLmNlbGxzPy5jaGVja2JveCA/PyB7fSkgfSxcbiAgICAgICAgYnV0dG9uOiB7IC4uLihERUZBVUxUX1RBQkxFX09QVElPTlMuY2VsbHM/LmJ1dHRvbiA/PyB7fSksIC4uLihjZmcuY2VsbHM/LmJ1dHRvbiA/PyB7fSkgfSxcbiAgICAgICAgdGFnOiB7IC4uLihERUZBVUxUX1RBQkxFX09QVElPTlMuY2VsbHM/LnRhZyA/PyB7fSksIC4uLihjZmcuY2VsbHM/LnRhZyA/PyB7fSkgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YWJsZVN0cmluZ2lmeShvYmo6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gICAgY29uc3QgcmVwbGFjZXIgPSAoX2s6IHN0cmluZywgdjogdW5rbm93bik6IHVua25vd24gPT4ge1xuICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGFzT2JqID0gdiBhcyBvYmplY3Q7XG4gICAgICAgIGlmIChzZWVuLmhhcyhhc09iaikpIHsgcmV0dXJuOyB9XG4gICAgICAgIHNlZW4uYWRkKGFzT2JqKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHsgcmV0dXJuIHY7IH1cbiAgICAgICAgY29uc3QgbyA9IHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvKS5zb3J0KCkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICBhY2Nba2V5XSA9IG9ba2V5XTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICAgIHJldHVybiB2O1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmogPz8ge30sIHJlcGxhY2VyIGFzIChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHVua25vd24pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiA/PyB7fSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQnV0dG9uQ2xpY2socm93OiBULCBjb2w6IFRhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gKGNvbC5hY3Rpb25GaWVsZCA/PyBjb2wuZmllbGQpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB2YWx1ZSA9IGtleSA/IHRoaXMuXyhyb3csIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3Rpb24uZW1pdCh7IGNvbHVtbjogY29sLCByb3csIHZhbHVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1dHRvbktleShyb3c6IFQsIGNvbDogVGFibGVDb2x1bW4sIG9wdDogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBhY3RLZXkgPSAoY29sLmFjdGlvbkZpZWxkID8/IGNvbC5maWVsZCA/PyAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFjdFZhbCA9IGFjdEtleSA/IFN0cmluZyh0aGlzLl8ocm93LCBhY3RLZXkpID8/ICcnKSA6ICcnO1xuICAgIHJldHVybiBbU3RyaW5nKG9wdD8ubGFiZWwgPz8gJycpLCBTdHJpbmcob3B0Py5pY29uID8/ICcnKSwgU3RyaW5nKG9wdD8ucHJpb3JpdHkgPz8gJycpLCBTdHJpbmcob3B0Py5zaXplID8/ICcnKSwgU3RyaW5nKG9wdD8udG9vbHRpcCA/PyAnJyksIGFjdFZhbF0uam9pbignfCcpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2RjLXRhYmxlXCJcbiAgW2NsYXNzLnNkYy10YWJsZS1zdGFja109XCJpc01vYmlsZSA/ICdzdGFjaycgOiAnZ3JpZCdcIlxuICBbY2xhc3Muc2RjLXRhYmxlLWZpbHRlcmVkXT1cIiEhZ2xvYmFsRmlsdGVyKCkudHJpbSgpXCJcbj5cbiAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS1jYXB0aW9uXCIgKm5nSWY9XCJzaG93U2VhcmNoKClcIj5cbiAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJpc01vYmlsZSA/ICcxMDAlJyA6ICcyMCUnXCI+XG4gICAgICA8c2RjLXNlYXJjaGJveFxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgW3RyaWdnZXJNb2RlXT1cInRyaWdnZXJNb2RlKClcIlxuICAgICAgICAob25TZWFyY2gpPVwib25TZWFyY2hUZXJtKCRldmVudClcIlxuICAgICAgICAob25DbGVhcik9XCJvbkNsZWFyU2VhcmNoKClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHRhYmxlIGNsYXNzPVwic2RjLXRhYmxlLWdyaWRcIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIEBmb3IgKGNvbCBvZiBjb2xzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xuICAgICAgICA8dGhcbiAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRoLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sLmZpZWxkISwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSlcIlxuICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS1pcy1zZWxlY3RlZF09XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtdGgtaW5uZXJcIiBbY2xhc3Muc2RjLXRhYmxlLXNvcnRhYmxlXT1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2VcIj5cbiAgICAgICAgICAgIEBzd2l0Y2ggKGNvbC50eXBlKSB7IEBjYXNlICgnY2hlY2tib3gtc2VsZWN0aW9uJykge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtdGFibGUtdGgtbGFiZWxcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgfSBAZGVmYXVsdCB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy10YWJsZS10aC1sYWJlbFwiPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy10YWJsZS1zb3J0LWljb25zIHNkYy10YWJsZS1zb3J0LW92ZXJsYXlcIiAqbmdJZj1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzb3J0SWNvbnNUcGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb2w6IGNvbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9IH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtdGgtY2VudGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nICYmIChjZWxsQ2ZnKCdjaGVja2JveCcpLnNlbGVjdEFsbCA/PyB0cnVlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUGFnZUZ1bGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdFBhZ2UoZ2V0Q2hlY2tlZFZhbHVlKCRldmVudCkpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG5cbiAgICA8dGJvZHk+XG4gICAgICBAaWYgKGxvYWRpbmcpIHsgfSBAZWxzZSB7IEBmb3IgKHJvdyBvZiBwYWdlRGF0YSgpOyBsZXQgciA9ICRpbmRleDsgdHJhY2sgcikge1xuICAgICAgPHRyPlxuICAgICAgICBAZm9yIChjb2wgb2YgY29sczsgbGV0IGMgPSAkaW5kZXg7IHRyYWNrIGMpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTW9iaWxlOyBlbHNlIGRlc2t0b3BDb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10ZC1tb2JpbGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic29ydEljb25zVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sOiBjb2wgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLXRkIHNkYy10YWJsZS10ZGMgc2RjLXRhYmxlLW1vYmlsZS10ZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGQtY2hlY2tib3hdPVwiY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS1pcy1zZWxlY3RlZF09XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sLmZpZWxkISwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRkLXZhbFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNlbGxUcGxcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3csIGNvbDogY29sIH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZXNrdG9wQ29udGVudD5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLXRkIHNkYy10YWJsZS10ZGNcIlxuICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10ZC1jaGVja2JveF09XCJjb2wudHlwZSA9PT0gJ2NoZWNrYm94LXNlbGVjdGlvbidcIlxuICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS1pcy1zZWxlY3RlZF09XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10ZC12YWxcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNlbGxUcGxcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCBjb2w6IGNvbCB9XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICAgIH0gfVxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG5cbiAgPHMtZW1wdHktc3RhdGVcbiAgICAqbmdJZj1cIiFsb2FkaW5nICYmIG9wdGlvbnMoKS5lbXB0eT8uc2hvdyAhPT0gZmFsc2UgJiYgdG90YWxSZWNvcmRzKCkgPT09IDBcIlxuICAgIGlkPVwibXktZW1wdHktc3RhdGVcIlxuICAgIGljb25DbGFzcz1cImZhIGZhLWluYm94XCJcbiAgICBbdGl0bGVdPVwiZW1wdHlUaXRsZSgpXCJcbiAgICBbZGVzY3JpcHRpb25dPVwiZW1wdHlUZXh0KClcIlxuICAgIGNsYXNzPVwic2RjLXRhYmxlLWVtcHR5LXN0YXRlXCJcbiAgPlxuICA8L3MtZW1wdHktc3RhdGU+XG5cbiAgPHMtbG9hZGluZy1zdGF0ZSAqbmdJZj1cImxvYWRpbmdcIiBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2Jsb2NrV2luZG93XT1cImZhbHNlXCIgY2xhc3M9XCJzZGMtdGFibGUtbG9hZGluZy1zdGF0ZVwiPlxuICA8L3MtbG9hZGluZy1zdGF0ZT5cblxuICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXBhZ2luYXRvclwiICpuZ0lmPVwic2hvd1BhZ2luYXRvcigpXCI+XG4gICAgPHNkYy1wYWdpbmF0b3JcbiAgICAgIFtmaXJzdF09XCJmaXJzdCgpXCJcbiAgICAgIFtyb3dzXT1cInJvd3MoKVwiXG4gICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3JkcygpXCJcbiAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiaXNNb2JpbGUgPyB1bmRlZmluZWQgOiByb3dzUGVyUGFnZU9wdGlvbnMoKVwiXG4gICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxuICAgICAgW3RvdGFsUmVjb3Jkc0xhYmVsXT1cInRvdGFsUmVjb3Jkc0xhYmVsKClcIlxuICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgID48L3NkYy1wYWdpbmF0b3I+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSAjY2VsbFRwbCBsZXQtcm93IGxldC1jb2w9XCJjb2xcIj5cbiAgICBAc3dpdGNoIChjb2wudHlwZSkgeyBAY2FzZSAoJ2NoZWNrYm94LXNlbGVjdGlvbicpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENmZygnY2hlY2tib3gnKSBhcyBjaGVja2JveE9wdGlvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtY2hlY2tib3hcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiIChjaGFuZ2UpPVwib25Ub2dnbGVSb3cocm93LCBnZXRDaGVja2VkVmFsdWUoJGV2ZW50KSlcIiAvPlxuICAgICAgICA8bGFiZWw+e3sgXyhyb3csIGNvbC5maWVsZCkgfX08L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgfSBAY2FzZSAoJ2RhdGUnKSB7XG4gICAge3sgZm9ybWF0RGF0ZShfKHJvdywgY29sLmZpZWxkKSwgY29sLmZvcm1hdCB8fCAnc2hvcnREYXRlJykgfX1cbiAgICB9IEBjYXNlICgnc3Ryb25nJykge1xuICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtc3Ryb25nLWxhYmVsXCI+e3sgXyhyb3csIGNvbC5maWVsZCkgfX08L2Rpdj5cbiAgICB9IEBjYXNlICgnY29kZScpIHtcbiAgICA8Y29kZSBjbGFzcz1cInNkYy10YWJsZS1jb2RlLWxhYmVsXCI+e3sgXyhyb3csIGNvbC5maWVsZCkgfX08L2NvZGU+XG4gICAgfSBAY2FzZSAoJ2N1cnJlbmN5Jykge1xuICAgIHt7IGZvcm1hdEN1cnJlbmN5KF8ocm93LCBjb2wuZmllbGQpLCBjb2wuZm9ybWF0IHx8ICdCUkwnKSB9fVxuICAgIH0gQGNhc2UgKCd0YWcnKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGxDZmcoJ3RhZycpIGFzIHRhZ09wdGlvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtdGFnc1wiPlxuICAgICAgICBAZm9yICh0YWcgb2YgdGFnc09mKHJvdywgY29sKTsgbGV0IHQgPSAkaW5kZXg7IHRyYWNrIHQpIHtcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS10YWdcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhZ09wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IG51bGxcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWdPcHRpb25zLmNvbG9yIHx8IG51bGxcIlxuICAgICAgICAgIFthdHRyLnRpdGxlXT1cInRhZ09wdGlvbnMudG9vbHRpcFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSAqbmdJZj1cInRhZ09wdGlvbnMuaWNvblwiIFtjbGFzc109XCJ0YWdPcHRpb25zLmljb25cIj48L2k+XG4gICAgICAgICAge3sgdGFnIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgfSBAY2FzZSAoJ2J1dHRvbicpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENmZygnYnV0dG9uJykgYXMgYnV0dG9uT3B0aW9uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgX19rIG9mIFtidXR0b25LZXkocm93LCBjb2wsIGJ1dHRvbk9wdGlvbnMpXVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLWJ1dHRvblwiPlxuICAgICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogNzAlXCJcbiAgICAgICAgICAgIFtzaXplXT1cImJ1dHRvbk9wdGlvbnMuc2l6ZVwiXG4gICAgICAgICAgICBbcHJpb3JpdHldPVwiYnV0dG9uT3B0aW9ucy5wcmlvcml0eSB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgW2ljb25dPVwiYnV0dG9uT3B0aW9ucy5pY29uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b25PcHRpb25zLmxhYmVsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25PcHRpb25zLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJidXR0b25PcHRpb25zLnRvb2x0aXBcIlxuICAgICAgICAgICAgW2F0dHIuc2l6ZV09XCJidXR0b25PcHRpb25zLnNpemVcIlxuICAgICAgICAgICAgW2F0dHIucHJpb3JpdHldPVwiYnV0dG9uT3B0aW9ucy5wcmlvcml0eSB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgW2F0dHIuc2V2ZXJpdHldPVwiYnV0dG9uT3B0aW9ucy5wcmlvcml0eSB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgW2F0dHIuaWNvbl09XCJidXR0b25PcHRpb25zLmljb25cIlxuICAgICAgICAgICAgW2F0dHIubGFiZWxdPVwiYnV0dG9uT3B0aW9ucy5sYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJidXR0b25PcHRpb25zLmRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImJ1dHRvbk9wdGlvbnMudG9vbHRpcCB8fCBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEta2V5XT1cIl9fa1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uT3B0aW9ucy5kaXNhYmxlZCA/IG51bGwgOiBvbkJ1dHRvbkNsaWNrKHJvdywgY29sKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICB9IEBkZWZhdWx0IHsge3sgXyhyb3csIGNvbC5maWVsZCkgfX0gfSB9XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzb3J0SWNvbnNUcGwgbGV0LWNvbD1cImNvbFwiPlxuICA8c3BhbiAqbmdJZj1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgY29sLnR5cGUgIT09ICdjaGVja2JveC1zZWxlY3Rpb24nXCIgY2xhc3M9XCJzZGMtdGFibGUtc29ydC1pbmRpY2F0b3JcIj5cbiAgICA8aSAqbmdJZj1cInNvcnRGaWVsZCgpICE9PSBjb2wuZmllbGRcIiBjbGFzcz1cImZhcyBmYS1zb3J0LWFsdCBzZGMtdGFibGUtc29ydC1uZXV0cmFsXCI+PC9pPlxuICAgIDxpXG4gICAgICAqbmdJZj1cInNvcnRGaWVsZCgpID09PSBjb2wuZmllbGQgJiYgc29ydE9yZGVyKCkgPT09IDFcIlxuICAgICAgY2xhc3M9XCJmYXMgZmEtc29ydC1hbW91bnQtdXAtYWx0IHNkYy10YWJsZS1zb3J0LWFjdGl2ZVwiXG4gICAgPjwvaT5cbiAgICA8aVxuICAgICAgKm5nSWY9XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkICYmIHNvcnRPcmRlcigpID09PSAtMVwiXG4gICAgICBjbGFzcz1cImZhcyBmYS1zb3J0LWFtb3VudC1kb3duIHNkYy10YWJsZS1zb3J0LWFjdGl2ZVwiXG4gICAgPjwvaT5cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgICpuZ0lmPVwiY29sLnNvcnRhYmxlID09PSBmYWxzZSB8fCBjb2wudHlwZSA9PT0gJ2NoZWNrYm94LXNlbGVjdGlvbidcIlxuICAgIGNsYXNzPVwic2RjLXRhYmxlLXNvcnQtaW5kaWNhdG9yIHNkYy10YWJsZS1zb3J0LWluZGljYXRvci1wbGFjZWhvbGRlclwiXG4gID48L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
|