@ieeesa-npm/presentation 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/assets/constants.json +72 -0
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +23 -4
- package/esm2022/lib/components/chips/chips.component.mjs +148 -0
- package/esm2022/lib/components/data-table/data-table.component.mjs +374 -0
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/components/date-picker-header/date-picker-header.component.mjs +3 -3
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +3 -3
- package/esm2022/lib/components/filter/filter.component.mjs +134 -0
- package/esm2022/lib/components/footer/footer.component.mjs +3 -3
- package/esm2022/lib/components/form-error/form-error.component.mjs +3 -3
- package/esm2022/lib/components/form-support-text/form-support-text.component.mjs +3 -3
- package/esm2022/lib/components/header/header.component.mjs +3 -3
- package/esm2022/lib/components/icon-button/icon-button.component.mjs +4 -4
- package/esm2022/lib/components/input/input.component.mjs +3 -3
- package/esm2022/lib/components/menu/menu.component.mjs +3 -3
- package/esm2022/lib/components/modal/modal.component.mjs +3 -3
- package/esm2022/lib/components/modal-confirmation/modal-confirmation.component.mjs +3 -3
- package/esm2022/lib/components/navigation-menu/navigation-menu.component.mjs +3 -3
- package/esm2022/lib/components/notification/notification.component.mjs +3 -3
- package/esm2022/lib/components/radio/radio.component.mjs +3 -3
- package/esm2022/lib/components/search/search.component.mjs +3 -3
- package/esm2022/lib/components/select/select.component.mjs +3 -3
- package/esm2022/lib/components/text-area/text-area.component.mjs +3 -3
- package/esm2022/lib/components/toggle-button/toggle-button.component.mjs +3 -3
- package/esm2022/lib/components/welcome/welcome.component.mjs +3 -3
- package/esm2022/lib/models/checkbox-option.model.mjs +1 -1
- package/esm2022/lib/models/chip-option.model.mjs +16 -0
- package/esm2022/lib/models/icon-button.model.mjs +1 -1
- package/esm2022/lib/models/paginator-config.model.mjs +2 -0
- package/esm2022/lib/models/table-actions.model.mjs +2 -0
- package/esm2022/lib/models/table-schema.model.mjs +11 -0
- package/esm2022/public-api.mjs +8 -1
- package/fesm2022/ieeesa-npm-presentation.mjs +802 -64
- package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
- package/lib/components/checkbox/checkbox.component.d.ts +15 -4
- package/lib/components/chips/chips.component.d.ts +203 -0
- package/lib/components/data-table/data-table.component.d.ts +192 -0
- package/lib/components/filter/filter.component.d.ts +71 -0
- package/lib/models/checkbox-option.model.d.ts +1 -1
- package/lib/models/chip-option.model.d.ts +18 -0
- package/lib/models/icon-button.model.d.ts +1 -0
- package/lib/models/paginator-config.model.d.ts +5 -0
- package/lib/models/table-actions.model.d.ts +8 -0
- package/lib/models/table-schema.model.d.ts +18 -0
- package/package.json +3 -3
- package/public-api.d.ts +7 -0
- package/src/lib/assets/constants.json +72 -0
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
4
|
+
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
|
|
5
|
+
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
6
|
+
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
7
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
8
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
9
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
10
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
11
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
12
|
+
import { IconButtonComponent } from '../icon-button/icon-button.component';
|
|
13
|
+
import { CheckboxComponent } from '../checkbox/checkbox.component';
|
|
14
|
+
import { TableColumnType, } from '../../models/table-schema.model';
|
|
15
|
+
import { SearchComponent } from '../search/search.component';
|
|
16
|
+
import { FilterComponent } from '../filter/filter.component';
|
|
17
|
+
import * as constants from '../../assets/constants.json';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "@ieeesa-npm/utility";
|
|
20
|
+
import * as i2 from "@angular/common";
|
|
21
|
+
import * as i3 from "@angular/material/sort";
|
|
22
|
+
import * as i4 from "@angular/material/table";
|
|
23
|
+
import * as i5 from "@angular/material/paginator";
|
|
24
|
+
import * as i6 from "@angular/material/checkbox";
|
|
25
|
+
import * as i7 from "@angular/material/button";
|
|
26
|
+
/**
|
|
27
|
+
* Provides a Material Design styled data-table that can be used to display rows of data with sortBy, filterBy, add/edit/delete table row data, pagination, search table data.
|
|
28
|
+
* @export
|
|
29
|
+
* @class DataTableComponent
|
|
30
|
+
* @implements {OnInit}
|
|
31
|
+
* @implements {AfterViewInit}
|
|
32
|
+
* @implements {OnDestroy}
|
|
33
|
+
*/
|
|
34
|
+
export class DataTableComponent {
|
|
35
|
+
set tableDataInfo(value) {
|
|
36
|
+
this.tableData = value;
|
|
37
|
+
this.tableDataChanges();
|
|
38
|
+
}
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
get tableDataInfo() {
|
|
41
|
+
return this.tableData;
|
|
42
|
+
}
|
|
43
|
+
set columnSchemaInfo(value) {
|
|
44
|
+
this.columnSchema = value;
|
|
45
|
+
}
|
|
46
|
+
get columnSchemaInfo() {
|
|
47
|
+
return this.columnSchema;
|
|
48
|
+
}
|
|
49
|
+
// eslint-disable-next-line no-unused-vars, no-empty-function
|
|
50
|
+
constructor(
|
|
51
|
+
// eslint-disable-next-line no-unused-vars
|
|
52
|
+
breakpointObserverService) {
|
|
53
|
+
this.breakpointObserverService = breakpointObserverService;
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
55
|
+
this.constants = constants;
|
|
56
|
+
this.rowSelected = new EventEmitter();
|
|
57
|
+
this.selectedRowToEdit = new EventEmitter();
|
|
58
|
+
this.selectedRowToDelete = new EventEmitter();
|
|
59
|
+
this.selectedRowsToDelete = new EventEmitter();
|
|
60
|
+
this.rowLink = new EventEmitter();
|
|
61
|
+
this.addRow = new EventEmitter();
|
|
62
|
+
this.columnDataOnRowLinkClick = new EventEmitter();
|
|
63
|
+
this.paginationChange = new EventEmitter();
|
|
64
|
+
this.selectedFilter = new EventEmitter();
|
|
65
|
+
this.removeFilteredOption = new EventEmitter();
|
|
66
|
+
this.filteredOptions = new EventEmitter();
|
|
67
|
+
this.searchedValue = new EventEmitter();
|
|
68
|
+
this.isMobileView = false;
|
|
69
|
+
this.selectedRows = new SelectionModel(true, []);
|
|
70
|
+
this.columnType = TableColumnType;
|
|
71
|
+
this.isSearchActive = false;
|
|
72
|
+
this.clearAll = this.constants?.dataTable?.label?.clearAll;
|
|
73
|
+
this.destroy$ = new Subject();
|
|
74
|
+
this.breakpointObserverService
|
|
75
|
+
.getBreakpoint()
|
|
76
|
+
.pipe(takeUntil(this.destroy$))
|
|
77
|
+
.subscribe((result) => {
|
|
78
|
+
this.isMobileView = result.matches;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Initializes the data table component and sets the table action buttons.
|
|
83
|
+
* @memberof DataTableComponent
|
|
84
|
+
*/
|
|
85
|
+
ngOnInit() {
|
|
86
|
+
this.displayedColumns = this.columnSchema?.map((c) => c?.columnDef);
|
|
87
|
+
const tableActionButtons = this.constants?.dataTable?.buttons;
|
|
88
|
+
this.rowEditButton = this.rowEditButton ?? tableActionButtons[0];
|
|
89
|
+
this.rowDeleteButton = this.rowDeleteButton ?? tableActionButtons[1];
|
|
90
|
+
this.addButton = this.addButton ?? tableActionButtons[2];
|
|
91
|
+
this.tableEditButton = this.tableEditButton ?? tableActionButtons[0];
|
|
92
|
+
this.tableDeleteButton = this.tableDeleteButton ?? tableActionButtons[1];
|
|
93
|
+
this.selectedRows.changed
|
|
94
|
+
.pipe(takeUntil(this.destroy$))
|
|
95
|
+
.subscribe((result) => {
|
|
96
|
+
this.tableEditButton.disabled = false;
|
|
97
|
+
this.tableDeleteButton.disabled = false;
|
|
98
|
+
if (result?.source?.selected?.length === 0) {
|
|
99
|
+
this.tableEditButton.disabled = true;
|
|
100
|
+
this.tableDeleteButton.disabled = true;
|
|
101
|
+
}
|
|
102
|
+
else if (result?.source?.selected?.length > 1) {
|
|
103
|
+
this.tableDeleteButton.disabled = false;
|
|
104
|
+
this.tableEditButton.disabled = true;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
this.dataSource = new MatTableDataSource(this.tableData);
|
|
108
|
+
this.tableDataChanges();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Initializes the sort feature of dataSource
|
|
112
|
+
* @memberof DataTableComponent
|
|
113
|
+
*/
|
|
114
|
+
ngAfterViewInit() {
|
|
115
|
+
this.dataSource.sort = this.sort;
|
|
116
|
+
this.sort.disableClear = true;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Sets the dataSource whenever the table data changes.
|
|
120
|
+
* @memberof DataTableComponent
|
|
121
|
+
*/
|
|
122
|
+
tableDataChanges() {
|
|
123
|
+
if (this.dataSource) {
|
|
124
|
+
this.dataSource.data = this.tableData;
|
|
125
|
+
this.dataSource.sort = this.sort;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* OnSelectClick method emits the rowSelected event with selected row data.
|
|
130
|
+
* @param {*} row
|
|
131
|
+
* @param {boolean} checked
|
|
132
|
+
* @memberof DataTableComponent
|
|
133
|
+
*/
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
135
|
+
onSelectClick(row) {
|
|
136
|
+
this.selectedRows.toggle(row);
|
|
137
|
+
row.checked = !row.checked;
|
|
138
|
+
this.rowSelected.emit(row);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* OnEditClick method emits the selectedRowToEdit event with the selected row data.
|
|
142
|
+
* @param {*} row
|
|
143
|
+
* @memberof DataTableComponent
|
|
144
|
+
*/
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
|
+
onEditClick(row) {
|
|
147
|
+
this.selectedRowToEdit.emit(row);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* OnDeleteClick method emits the selectedRowToDelete event with the selected row data.
|
|
151
|
+
* @param {*} row
|
|
152
|
+
* @memberof DataTableComponent
|
|
153
|
+
*/
|
|
154
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
155
|
+
onDeleteClick(row) {
|
|
156
|
+
this.selectedRowToDelete.emit(row);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
*OnLinkClick method emits the event with row and column.
|
|
160
|
+
* @param {*} row
|
|
161
|
+
* @param {TableColumnSchema} [column]
|
|
162
|
+
* @memberof DataTableComponent
|
|
163
|
+
*/
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
165
|
+
onLinkClick(row, column) {
|
|
166
|
+
this.rowLink.emit(row);
|
|
167
|
+
this.columnDataOnRowLinkClick.emit({ row, column });
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* OnTableEditClick method emits event with selected rows data when edit button clicked.
|
|
171
|
+
* @memberof DataTableComponent
|
|
172
|
+
*/
|
|
173
|
+
onTableEditClick() {
|
|
174
|
+
this.selectedRowToEdit.emit(this.selectedRows.selected);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* OnDeleteTableClick method emits event with selected row data when delete button clicked.
|
|
178
|
+
* @memberof DataTableComponent
|
|
179
|
+
*/
|
|
180
|
+
onDeleteTableClick() {
|
|
181
|
+
this.selectedRowsToDelete.emit(this.selectedRows.selected);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* OnAddClick method emits the add event when add button clicked.
|
|
185
|
+
* @memberof DataTableComponent
|
|
186
|
+
*/
|
|
187
|
+
onAddClick() {
|
|
188
|
+
this.addRow.emit();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* OnTableSearchClick method toggles the isSearchActive state when the search icon is clicked for the mobile view.
|
|
192
|
+
* @memberof DataTableComponent
|
|
193
|
+
*/
|
|
194
|
+
onTableSearchClick() {
|
|
195
|
+
this.isSearchActive = !this.isSearchActive;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* SelectedFilterInfo method emits the selectedFilter event with selected filter information.
|
|
199
|
+
* @param {ChipOption} option
|
|
200
|
+
* @memberof DataTableComponent
|
|
201
|
+
*/
|
|
202
|
+
selectedFilterTypeInfo(option) {
|
|
203
|
+
this.selectedFilter.emit(option);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* OnSelectedFilterOptions method emits the filteredOptions event with the selected options and adds "Clear all" option to clear the all selections.
|
|
207
|
+
* @param {CheckboxOption[]} options
|
|
208
|
+
* @memberof DataTableComponent
|
|
209
|
+
*/
|
|
210
|
+
onSelectedFilterOptions(options) {
|
|
211
|
+
this.appliedFilterOptions = options;
|
|
212
|
+
this.appliedFilterOptions?.push({
|
|
213
|
+
id: this.appliedFilterOptions.length + 1,
|
|
214
|
+
name: this.clearAll,
|
|
215
|
+
checked: false,
|
|
216
|
+
disabled: false,
|
|
217
|
+
});
|
|
218
|
+
this.filteredOptions.emit(options);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* OnRemovalOfFilteredOption method emits the removeFilteredOption event with removed option.
|
|
222
|
+
* Sets the new appliedFilterOptions without removed option.
|
|
223
|
+
* @param {ChipOption} option
|
|
224
|
+
* @memberof DataTableComponent
|
|
225
|
+
*/
|
|
226
|
+
onRemovalOfFilteredOption(option) {
|
|
227
|
+
if (option?.name === this.clearAll) {
|
|
228
|
+
this.removeFilteredOption.emit([]);
|
|
229
|
+
this.appliedFilterOptions = [];
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
this.appliedFilterOptions = this.appliedFilterOptions.filter((res) => res.id !== option.id);
|
|
233
|
+
this.appliedFilterOptions =
|
|
234
|
+
this.appliedFilterOptions.length === 1 ? [] : this.appliedFilterOptions;
|
|
235
|
+
this.removeFilteredOption.emit(option);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* SearchValue method emits the searched value.
|
|
240
|
+
* @param {string} value
|
|
241
|
+
* @memberof DataTableComponent
|
|
242
|
+
*/
|
|
243
|
+
searchValue(value) {
|
|
244
|
+
this.searchedValue.emit(value);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Handles the pagination for every page.
|
|
248
|
+
* @param {PageEvent} event
|
|
249
|
+
* @memberof DataTableComponent
|
|
250
|
+
*/
|
|
251
|
+
handlePagination(event) {
|
|
252
|
+
this.paginationChange.emit({
|
|
253
|
+
pageOffset: event.pageIndex * event.pageSize,
|
|
254
|
+
pageLimit: event.pageSize,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* IsAllRowSelected method returns the boolean value by checking selectedRows and totalRows length.
|
|
259
|
+
* @return {*} {boolean}
|
|
260
|
+
* @memberof DataTableComponent
|
|
261
|
+
*/
|
|
262
|
+
isAllRowsSelected() {
|
|
263
|
+
return this.selectedRows.selected.length === this.dataSource.data.length;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* ToggleAllRowsSelection method clears selectedRows when all rows are selected else selects the all rows.
|
|
267
|
+
* @return {*} {void}
|
|
268
|
+
* @memberof DataTableComponent
|
|
269
|
+
*/
|
|
270
|
+
toggleAllRowsSelection() {
|
|
271
|
+
if (this.isAllRowsSelected()) {
|
|
272
|
+
this.selectedRows.clear();
|
|
273
|
+
}
|
|
274
|
+
else
|
|
275
|
+
this.selectedRows.select(...this.dataSource.data);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Allows Angular to detect the specific table row that needs to change or be added by tracking row unique Id.
|
|
279
|
+
* @param {number} index
|
|
280
|
+
* @param {TableColumnSchema} column
|
|
281
|
+
* @return {*} {number}
|
|
282
|
+
* @memberof DataTableComponent
|
|
283
|
+
*/
|
|
284
|
+
trackById(index, column) {
|
|
285
|
+
return column.id;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
289
|
+
* @memberof DataTableComponent
|
|
290
|
+
*/
|
|
291
|
+
ngOnDestroy() {
|
|
292
|
+
this.destroy$.next(true);
|
|
293
|
+
this.destroy$.unsubscribe();
|
|
294
|
+
}
|
|
295
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DataTableComponent, deps: [{ token: i1.BreakpointObserverService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
296
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: DataTableComponent, isStandalone: true, selector: "ieeesa-data-table", inputs: { tableDataInfo: "tableDataInfo", columnSchemaInfo: "columnSchemaInfo", tableActions: "tableActions", caption: "caption", paginatorConfig: "paginatorConfig", searchPlaceHolderText: "searchPlaceHolderText", rowEditButton: "rowEditButton", rowDeleteButton: "rowDeleteButton", tableEditButton: "tableEditButton", tableDeleteButton: "tableDeleteButton", addButton: "addButton", defaultColumnSortDirection: "defaultColumnSortDirection", defaultSortedColumn: "defaultSortedColumn", filters: "filters", selectedFilterOptions: "selectedFilterOptions", appliedFilterOptions: "appliedFilterOptions" }, outputs: { rowSelected: "rowSelected", selectedRowToEdit: "selectedRowToEdit", selectedRowToDelete: "selectedRowToDelete", selectedRowsToDelete: "selectedRowsToDelete", rowLink: "rowLink", addRow: "addRow", columnDataOnRowLinkClick: "columnDataOnRowLinkClick", paginationChange: "paginationChange", selectedFilter: "selectedFilter", removeFilteredOption: "removeFilteredOption", filteredOptions: "filteredOptions", searchedValue: "searchedValue" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <caption class=\"ieeesa-data-table--caption\" *ngIf=\"caption\">\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <div\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-end align-items-start\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7' }\"\r\n ></ng-container>\r\n <div class=\"d-flex align-items-center gap-lg-4 gap-md-2 gap-2 col-md-5\">\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }}\"\r\n [filters]=\"filters\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <div class=\"ieeesa-data-table__content\">\r\n <table\r\n mat-table\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n [trackBy]=\"trackById\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n [ngSwitch]=\"column?.columnType\"\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n {{ column?.cellData(row) }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-title-sm-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: true\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n ></tr>\r\n </table>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tableActions?.isPaginationNeeded\">\r\n <div\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</ng-container>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-data-table{--mdc-checkbox-selected-focus-icon-color: #00629b;--mdc-checkbox-selected-hover-icon-color: #00629b;--mdc-checkbox-selected-icon-color: #00629b;--mdc-checkbox-selected-pressed-icon-color: #00629b;--mdc-checkbox-selected-focus-state-layer-color: #00629b;--mdc-checkbox-selected-hover-state-layer-color: #00629b;--mdc-checkbox-selected-pressed-state-layer-color: #00629b;--mat-option-selected-state-label-text-color: #00629b}.ieeesa-data-table__content{position:relative;overflow:auto;margin-top:.75em}.ieeesa-data-table__mobile-view-actions{margin-left:3.125em}.ieeesa-data-table__actions-right{width:50%}.ieeesa-data-table__actions{padding:.75em 1.5em .75em .15em;position:relative}.ieeesa-data-table__actions--disabled .ieeesa-icon-button__svg{fill:#c9c5ca!important}.ieeesa-data-table__actions--search-group-icon{height:1.5em;right:0;min-width:auto!important;padding-left:1em;padding-top:.1875em;color:#00629b!important}.ieeesa-data-table__filter{margin-top:-45px}.ieeesa-data-table__search-wrapper{width:-webkit-fill-available;width:-moz-available}.ieeesa-data-table__search-wrapper .ieeesa-search-field__search-icon{color:#00629b}.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field{width:100%;height:2.25em;border-radius:.1875em;background:linear-gradient(0deg,rgba(0,98,155,.05) 0%,rgba(0,98,155,.05) 100%),#fffbfe;font-size:1em;box-shadow:0 0 4px #00000080 inset}.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mat-mdc-form-field-infix,.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-text-field{padding:.3125em .5em!important}.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-notched-outline__leading,.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-notched-outline__notch,.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-notched-outline__trailing{border:none}.ieeesa-data-table .ieeesa-icon-button__svg{height:1.5em;width:1.5em;fill:#00629b}.ieeesa-data-table .cell-text{white-space:normal;word-wrap:break-word}.ieeesa-data-table tbody tr:nth-child(even){box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table tbody tr:nth-child(odd){background-color:#f7f9ff!important;box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table thead{border-top:1px solid #dce3e9}.ieeesa-data-table__column-select{width:1em;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i5.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton"], outputs: ["iconButtonClick"] }, { kind: "component", type: SearchComponent, selector: "ieeesa-search", inputs: ["formControlName", "placeholderLabel", "searchType", "searchTerm"], outputs: ["searchValue"] }, { kind: "component", type: FilterComponent, selector: "ieeesa-filter", inputs: ["appliedFilterOptions", "filterButton", "filters", "selectedFilterOptions"], outputs: ["selectedFilter", "filteredOptions", "removeFilteredOption"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
297
|
+
}
|
|
298
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
299
|
+
type: Component,
|
|
300
|
+
args: [{ selector: 'ieeesa-data-table', standalone: true, imports: [
|
|
301
|
+
CommonModule,
|
|
302
|
+
MatIconModule,
|
|
303
|
+
MatSortModule,
|
|
304
|
+
MatSlideToggleModule,
|
|
305
|
+
MatTableModule,
|
|
306
|
+
MatPaginatorModule,
|
|
307
|
+
MatCheckboxModule,
|
|
308
|
+
MatButtonModule,
|
|
309
|
+
CheckboxComponent,
|
|
310
|
+
IconButtonComponent,
|
|
311
|
+
SearchComponent,
|
|
312
|
+
FilterComponent,
|
|
313
|
+
], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <caption class=\"ieeesa-data-table--caption\" *ngIf=\"caption\">\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <div\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-end align-items-start\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7' }\"\r\n ></ng-container>\r\n <div class=\"d-flex align-items-center gap-lg-4 gap-md-2 gap-2 col-md-5\">\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }}\"\r\n [filters]=\"filters\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <div class=\"ieeesa-data-table__content\">\r\n <table\r\n mat-table\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n [trackBy]=\"trackById\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n [ngSwitch]=\"column?.columnType\"\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n {{ column?.cellData(row) }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-title-sm-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: true\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n ></tr>\r\n </table>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tableActions?.isPaginationNeeded\">\r\n <div\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</ng-container>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-data-table{--mdc-checkbox-selected-focus-icon-color: #00629b;--mdc-checkbox-selected-hover-icon-color: #00629b;--mdc-checkbox-selected-icon-color: #00629b;--mdc-checkbox-selected-pressed-icon-color: #00629b;--mdc-checkbox-selected-focus-state-layer-color: #00629b;--mdc-checkbox-selected-hover-state-layer-color: #00629b;--mdc-checkbox-selected-pressed-state-layer-color: #00629b;--mat-option-selected-state-label-text-color: #00629b}.ieeesa-data-table__content{position:relative;overflow:auto;margin-top:.75em}.ieeesa-data-table__mobile-view-actions{margin-left:3.125em}.ieeesa-data-table__actions-right{width:50%}.ieeesa-data-table__actions{padding:.75em 1.5em .75em .15em;position:relative}.ieeesa-data-table__actions--disabled .ieeesa-icon-button__svg{fill:#c9c5ca!important}.ieeesa-data-table__actions--search-group-icon{height:1.5em;right:0;min-width:auto!important;padding-left:1em;padding-top:.1875em;color:#00629b!important}.ieeesa-data-table__filter{margin-top:-45px}.ieeesa-data-table__search-wrapper{width:-webkit-fill-available;width:-moz-available}.ieeesa-data-table__search-wrapper .ieeesa-search-field__search-icon{color:#00629b}.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field{width:100%;height:2.25em;border-radius:.1875em;background:linear-gradient(0deg,rgba(0,98,155,.05) 0%,rgba(0,98,155,.05) 100%),#fffbfe;font-size:1em;box-shadow:0 0 4px #00000080 inset}.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mat-mdc-form-field-infix,.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-text-field{padding:.3125em .5em!important}.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-notched-outline__leading,.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-notched-outline__notch,.ieeesa-data-table__search-wrapper .ieeesa-search-field .mat-mdc-form-field .mdc-notched-outline__trailing{border:none}.ieeesa-data-table .ieeesa-icon-button__svg{height:1.5em;width:1.5em;fill:#00629b}.ieeesa-data-table .cell-text{white-space:normal;word-wrap:break-word}.ieeesa-data-table tbody tr:nth-child(even){box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table tbody tr:nth-child(odd){background-color:#f7f9ff!important;box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table thead{border-top:1px solid #dce3e9}.ieeesa-data-table__column-select{width:1em;padding:0}\n"] }]
|
|
314
|
+
}], ctorParameters: function () { return [{ type: i1.BreakpointObserverService }]; }, propDecorators: { tableDataInfo: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], columnSchemaInfo: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], tableActions: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], caption: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], paginatorConfig: [{
|
|
323
|
+
type: Input
|
|
324
|
+
}], searchPlaceHolderText: [{
|
|
325
|
+
type: Input
|
|
326
|
+
}], rowEditButton: [{
|
|
327
|
+
type: Input
|
|
328
|
+
}], rowDeleteButton: [{
|
|
329
|
+
type: Input
|
|
330
|
+
}], tableEditButton: [{
|
|
331
|
+
type: Input
|
|
332
|
+
}], tableDeleteButton: [{
|
|
333
|
+
type: Input
|
|
334
|
+
}], addButton: [{
|
|
335
|
+
type: Input
|
|
336
|
+
}], defaultColumnSortDirection: [{
|
|
337
|
+
type: Input
|
|
338
|
+
}], defaultSortedColumn: [{
|
|
339
|
+
type: Input
|
|
340
|
+
}], filters: [{
|
|
341
|
+
type: Input
|
|
342
|
+
}], selectedFilterOptions: [{
|
|
343
|
+
type: Input
|
|
344
|
+
}], appliedFilterOptions: [{
|
|
345
|
+
type: Input
|
|
346
|
+
}], rowSelected: [{
|
|
347
|
+
type: Output
|
|
348
|
+
}], selectedRowToEdit: [{
|
|
349
|
+
type: Output
|
|
350
|
+
}], selectedRowToDelete: [{
|
|
351
|
+
type: Output
|
|
352
|
+
}], selectedRowsToDelete: [{
|
|
353
|
+
type: Output
|
|
354
|
+
}], rowLink: [{
|
|
355
|
+
type: Output
|
|
356
|
+
}], addRow: [{
|
|
357
|
+
type: Output
|
|
358
|
+
}], columnDataOnRowLinkClick: [{
|
|
359
|
+
type: Output
|
|
360
|
+
}], paginationChange: [{
|
|
361
|
+
type: Output
|
|
362
|
+
}], selectedFilter: [{
|
|
363
|
+
type: Output
|
|
364
|
+
}], removeFilteredOption: [{
|
|
365
|
+
type: Output
|
|
366
|
+
}], filteredOptions: [{
|
|
367
|
+
type: Output
|
|
368
|
+
}], searchedValue: [{
|
|
369
|
+
type: Output
|
|
370
|
+
}], sort: [{
|
|
371
|
+
type: ViewChild,
|
|
372
|
+
args: [MatSort]
|
|
373
|
+
}] } });
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFhLE1BQU0sNkJBQTZCLENBQUM7QUFDNUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMz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QUZoQixLQUFLO2dCQVlGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFTRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBWWEsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydE1vZHVsZSwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5UeXBlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1zY2hlbWEubW9kZWwnO1xyXG5pbXBvcnQgeyBQYWdpbmF0b3JDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvcGFnaW5hdG9yLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IENoZWNrYm94T3B0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoZWNrYm94LW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICcuLi8uLi9tb2RlbHMvaWNvbi1idXR0b24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVBY3Rpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLWFjdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBDaGlwT3B0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoaXAtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgYSBNYXRlcmlhbCBEZXNpZ24gc3R5bGVkIGRhdGEtdGFibGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHJvd3Mgb2YgZGF0YSB3aXRoIHNvcnRCeSwgZmlsdGVyQnksIGFkZC9lZGl0L2RlbGV0ZSB0YWJsZSByb3cgZGF0YSwgcGFnaW5hdGlvbiwgc2VhcmNoIHRhYmxlIGRhdGEuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKiBAaW1wbGVtZW50cyB7QWZ0ZXJWaWV3SW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWRhdGEtdGFibGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFNvcnRNb2R1bGUsXHJcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcclxuICAgIE1hdFRhYmxlTW9kdWxlLFxyXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBDaGVja2JveENvbXBvbmVudCxcclxuICAgIEljb25CdXR0b25Db21wb25lbnQsXHJcbiAgICBTZWFyY2hDb21wb25lbnQsXHJcbiAgICBGaWx0ZXJDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIHRhYmxlRGF0YSE6IGFueVtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBzZXQgdGFibGVEYXRhSW5mbyh2YWx1ZTogYW55W10pIHtcclxuICAgIHRoaXMudGFibGVEYXRhID0gdmFsdWU7XHJcbiAgICB0aGlzLnRhYmxlRGF0YUNoYW5nZXMoKTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXQgdGFibGVEYXRhSW5mbygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZURhdGE7XHJcbiAgfVxyXG4gIHByaXZhdGUgY29sdW1uU2NoZW1hITogVGFibGVDb2x1bW5TY2hlbWFbXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2x1bW5TY2hlbWFJbmZvKHZhbHVlOiBUYWJsZUNvbHVtblNjaGVtYVtdKSB7XHJcbiAgICB0aGlzLmNvbHVtblNjaGVtYSA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgY29sdW1uU2NoZW1hSW5mbygpOiBUYWJsZUNvbHVtblNjaGVtYVtdIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtblNjaGVtYTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBASW5wdXQoKSB0YWJsZUFjdGlvbnMhOiBUYWJsZUFjdGlvbnM7XHJcbiAgQElucHV0KCkgY2FwdGlvbiE6IHN0cmluZztcclxuICBASW5wdXQoKSBwYWdpbmF0b3JDb25maWchOiBQYWdpbmF0b3JDb25maWc7XHJcbiAgQElucHV0KCkgc2VhcmNoUGxhY2VIb2xkZXJUZXh0ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvd0VkaXRCdXR0b24hOiBJY29uQnV0dG9uO1xyXG4gIEBJbnB1dCgpIHJvd0RlbGV0ZUJ1dHRvbiE6IEljb25CdXR0b247XHJcbiAgQElucHV0KCkgdGFibGVFZGl0QnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSB0YWJsZURlbGV0ZUJ1dHRvbiE6IEljb25CdXR0b247XHJcbiAgQElucHV0KCkgYWRkQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSBkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbiE6IFNvcnREaXJlY3Rpb247XHJcbiAgQElucHV0KCkgZGVmYXVsdFNvcnRlZENvbHVtbiE6IHN0cmluZztcclxuICBASW5wdXQoKSBmaWx0ZXJzITogQ2hpcE9wdGlvbltdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyT3B0aW9ucyE6IENoZWNrYm94T3B0aW9uW107XHJcbiAgQElucHV0KCkgYXBwbGllZEZpbHRlck9wdGlvbnMhOiBDaGlwT3B0aW9uW107XHJcbiAgQE91dHB1dCgpIHJvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZFJvd1RvRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dUb0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dzVG9EZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uU2NoZW1hW10+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0xpbmsgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFkZFJvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY29sdW1uRGF0YU9uUm93TGlua0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBwYWdlT2Zmc2V0OiBudW1iZXI7XHJcbiAgICBwYWdlTGltaXQ6IG51bWJlcjtcclxuICB9PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hpcE9wdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgcmVtb3ZlRmlsdGVyZWRPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlcmVkT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hlY2tib3hPcHRpb25bXT4oKTtcclxuICBAT3V0cHV0KCkgc2VhcmNoZWRWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIGRpc3BsYXllZENvbHVtbnMhOiBzdHJpbmdbXTtcclxuICBpc01vYmlsZVZpZXcgPSBmYWxzZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRhdGFTb3VyY2UhOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuICBzZWxlY3RlZFJvd3MgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VGFibGVDb2x1bW5TY2hlbWE+KHRydWUsIFtdKTtcclxuICBwYWdlTGltaXQhOiBudW1iZXI7XHJcbiAgcGFnZU9mZnNldCE6IG51bWJlcjtcclxuICBjb2x1bW5UeXBlID0gVGFibGVDb2x1bW5UeXBlO1xyXG4gIGlzU2VhcmNoQWN0aXZlID0gZmFsc2U7XHJcbiAgY2xlYXJBbGwgPSB0aGlzLmNvbnN0YW50cz8uZGF0YVRhYmxlPy5sYWJlbD8uY2xlYXJBbGw7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby1lbXB0eS1mdW5jdGlvblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2U6IEJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG4gICAgICAuZ2V0QnJlYWtwb2ludCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSByZXN1bHQubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgZGF0YSB0YWJsZSBjb21wb25lbnQgYW5kIHNldHMgdGhlIHRhYmxlIGFjdGlvbiBidXR0b25zLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1uU2NoZW1hPy5tYXAoKGMpID0+IGM/LmNvbHVtbkRlZik7XHJcbiAgICBjb25zdCB0YWJsZUFjdGlvbkJ1dHRvbnM6IEljb25CdXR0b25bXSA9IHRoaXMuY29uc3RhbnRzPy5kYXRhVGFibGU/LmJ1dHRvbnM7XHJcbiAgICB0aGlzLnJvd0VkaXRCdXR0b24gPSB0aGlzLnJvd0VkaXRCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzBdO1xyXG4gICAgdGhpcy5yb3dEZWxldGVCdXR0b24gPSB0aGlzLnJvd0RlbGV0ZUJ1dHRvbiA/PyB0YWJsZUFjdGlvbkJ1dHRvbnNbMV07XHJcbiAgICB0aGlzLmFkZEJ1dHRvbiA9IHRoaXMuYWRkQnV0dG9uID8/IHRhYmxlQWN0aW9uQnV0dG9uc1syXTtcclxuICAgIHRoaXMudGFibGVFZGl0QnV0dG9uID0gdGhpcy50YWJsZUVkaXRCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzBdO1xyXG4gICAgdGhpcy50YWJsZURlbGV0ZUJ1dHRvbiA9IHRoaXMudGFibGVEZWxldGVCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzFdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MuY2hhbmdlZFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGFibGVFZGl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50YWJsZURlbGV0ZUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXN1bHQ/LnNvdXJjZT8uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZUVkaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy50YWJsZURlbGV0ZUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQ/LnNvdXJjZT8uc2VsZWN0ZWQ/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVEZWxldGVCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudGFibGVFZGl0QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBzb3J0IGZlYXR1cmUgb2YgZGF0YVNvdXJjZVxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgIHRoaXMuc29ydC5kaXNhYmxlQ2xlYXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YVNvdXJjZSB3aGVuZXZlciB0aGUgdGFibGUgZGF0YSBjaGFuZ2VzLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICB0YWJsZURhdGFDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudGFibGVEYXRhO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uU2VsZWN0Q2xpY2sgbWV0aG9kIGVtaXRzIHRoZSByb3dTZWxlY3RlZCBldmVudCB3aXRoIHNlbGVjdGVkIHJvdyBkYXRhLlxyXG4gICAqIEBwYXJhbSB7Kn0gcm93XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBjaGVja2VkXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb25TZWxlY3RDbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MudG9nZ2xlKHJvdyk7XHJcbiAgICByb3cuY2hlY2tlZCA9ICFyb3cuY2hlY2tlZDtcclxuICAgIHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25FZGl0Q2xpY2sgbWV0aG9kIGVtaXRzIHRoZSBzZWxlY3RlZFJvd1RvRWRpdCBldmVudCB3aXRoIHRoZSBzZWxlY3RlZCByb3cgZGF0YS5cclxuICAgKiBAcGFyYW0geyp9IHJvd1xyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9uRWRpdENsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93VG9FZGl0LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uRGVsZXRlQ2xpY2sgbWV0aG9kIGVtaXRzIHRoZSBzZWxlY3RlZFJvd1RvRGVsZXRlIGV2ZW50IHdpdGggdGhlIHNlbGVjdGVkIHJvdyBkYXRhLlxyXG4gICAqIEBwYXJhbSB7Kn0gcm93XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb25EZWxldGVDbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd1RvRGVsZXRlLmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqT25MaW5rQ2xpY2sgbWV0aG9kIGVtaXRzIHRoZSBldmVudCB3aXRoIHJvdyBhbmQgY29sdW1uLlxyXG4gICAqIEBwYXJhbSB7Kn0gcm93XHJcbiAgICogQHBhcmFtIHtUYWJsZUNvbHVtblNjaGVtYX0gW2NvbHVtbl1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvbkxpbmtDbGljayhyb3c6IGFueSwgY29sdW1uPzogVGFibGVDb2x1bW5TY2hlbWEpOiB2b2lkIHtcclxuICAgIHRoaXMucm93TGluay5lbWl0KHJvdyk7XHJcbiAgICB0aGlzLmNvbHVtbkRhdGFPblJvd0xpbmtDbGljay5lbWl0KHsgcm93LCBjb2x1bW4gfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPblRhYmxlRWRpdENsaWNrIG1ldGhvZCBlbWl0cyBldmVudCB3aXRoIHNlbGVjdGVkIHJvd3MgZGF0YSB3aGVuIGVkaXQgYnV0dG9uIGNsaWNrZWQuXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uVGFibGVFZGl0Q2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93VG9FZGl0LmVtaXQodGhpcy5zZWxlY3RlZFJvd3Muc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25EZWxldGVUYWJsZUNsaWNrIG1ldGhvZCBlbWl0cyBldmVudCB3aXRoIHNlbGVjdGVkIHJvdyBkYXRhIHdoZW4gZGVsZXRlIGJ1dHRvbiBjbGlja2VkLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBvbkRlbGV0ZVRhYmxlQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93c1RvRGVsZXRlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3Muc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25BZGRDbGljayBtZXRob2QgZW1pdHMgdGhlIGFkZCBldmVudCB3aGVuIGFkZCBidXR0b24gY2xpY2tlZC5cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkUm93LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uVGFibGVTZWFyY2hDbGljayBtZXRob2QgdG9nZ2xlcyB0aGUgaXNTZWFyY2hBY3RpdmUgc3RhdGUgd2hlbiB0aGUgc2VhcmNoIGljb24gaXMgY2xpY2tlZCBmb3IgdGhlIG1vYmlsZSB2aWV3LlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBvblRhYmxlU2VhcmNoQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzU2VhcmNoQWN0aXZlID0gIXRoaXMuaXNTZWFyY2hBY3RpdmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3RlZEZpbHRlckluZm8gbWV0aG9kIGVtaXRzIHRoZSBzZWxlY3RlZEZpbHRlciBldmVudCB3aXRoIHNlbGVjdGVkIGZpbHRlciBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0NoaXBPcHRpb259IG9wdGlvblxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBzZWxlY3RlZEZpbHRlclR5cGVJbmZvKG9wdGlvbjogQ2hpcE9wdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlci5lbWl0KG9wdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPblNlbGVjdGVkRmlsdGVyT3B0aW9ucyBtZXRob2QgZW1pdHMgdGhlIGZpbHRlcmVkT3B0aW9ucyBldmVudCB3aXRoIHRoZSBzZWxlY3RlZCBvcHRpb25zIGFuZCBhZGRzIFwiQ2xlYXIgYWxsXCIgb3B0aW9uIHRvIGNsZWFyIHRoZSBhbGwgc2VsZWN0aW9ucy5cclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IG9wdGlvbnNcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TZWxlY3RlZEZpbHRlck9wdGlvbnMob3B0aW9uczogQ2hlY2tib3hPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucyA9IG9wdGlvbnMgYXMgQ2hpcE9wdGlvbltdO1xyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucz8ucHVzaCh7XHJcbiAgICAgIGlkOiB0aGlzLmFwcGxpZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCArIDEsXHJcbiAgICAgIG5hbWU6IHRoaXMuY2xlYXJBbGwsXHJcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLmVtaXQob3B0aW9ucyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9uUmVtb3ZhbE9mRmlsdGVyZWRPcHRpb24gbWV0aG9kIGVtaXRzIHRoZSByZW1vdmVGaWx0ZXJlZE9wdGlvbiBldmVudCB3aXRoIHJlbW92ZWQgb3B0aW9uLlxyXG4gICAqIFNldHMgdGhlIG5ldyBhcHBsaWVkRmlsdGVyT3B0aW9ucyB3aXRob3V0IHJlbW92ZWQgb3B0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbn0gb3B0aW9uXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uUmVtb3ZhbE9mRmlsdGVyZWRPcHRpb24ob3B0aW9uOiBDaGlwT3B0aW9uKTogdm9pZCB7XHJcbiAgICBpZiAob3B0aW9uPy5uYW1lID09PSB0aGlzLmNsZWFyQWxsKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlRmlsdGVyZWRPcHRpb24uZW1pdChbXSk7XHJcbiAgICAgIHRoaXMuYXBwbGllZEZpbHRlck9wdGlvbnMgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXBwbGllZEZpbHRlck9wdGlvbnMgPSB0aGlzLmFwcGxpZWRGaWx0ZXJPcHRpb25zLmZpbHRlcihcclxuICAgICAgICAocmVzOiBDaGlwT3B0aW9uKSA9PiByZXMuaWQgIT09IG9wdGlvbi5pZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJPcHRpb25zID1cclxuICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCA9PT0gMSA/IFtdIDogdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucztcclxuICAgICAgdGhpcy5yZW1vdmVGaWx0ZXJlZE9wdGlvbi5lbWl0KG9wdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWFyY2hWYWx1ZSBtZXRob2QgZW1pdHMgdGhlIHNlYXJjaGVkIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBzZWFyY2hWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaGVkVmFsdWUuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIHBhZ2luYXRpb24gZm9yIGV2ZXJ5IHBhZ2UuXHJcbiAgICogQHBhcmFtIHtQYWdlRXZlbnR9IGV2ZW50XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhbmRsZVBhZ2luYXRpb24oZXZlbnQ6IFBhZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBwYWdlT2Zmc2V0OiBldmVudC5wYWdlSW5kZXggKiBldmVudC5wYWdlU2l6ZSxcclxuICAgICAgcGFnZUxpbWl0OiBldmVudC5wYWdlU2l6ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJc0FsbFJvd1NlbGVjdGVkIG1ldGhvZCByZXR1cm5zIHRoZSBib29sZWFuIHZhbHVlIGJ5IGNoZWNraW5nIHNlbGVjdGVkUm93cyBhbmQgdG90YWxSb3dzIGxlbmd0aC5cclxuICAgKiBAcmV0dXJuIHsqfSAge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGlzQWxsUm93c1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlQWxsUm93c1NlbGVjdGlvbiBtZXRob2QgY2xlYXJzIHNlbGVjdGVkUm93cyB3aGVuIGFsbCByb3dzIGFyZSBzZWxlY3RlZCBlbHNlIHNlbGVjdHMgdGhlIGFsbCByb3dzLlxyXG4gICAqIEByZXR1cm4geyp9ICB7dm9pZH1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdG9nZ2xlQWxsUm93c1NlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzQWxsUm93c1NlbGVjdGVkKCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcclxuICAgIH0gZWxzZSB0aGlzLnNlbGVjdGVkUm93cy5zZWxlY3QoLi4udGhpcy5kYXRhU291cmNlLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIEFuZ3VsYXIgdG8gZGV0ZWN0IHRoZSBzcGVjaWZpYyB0YWJsZSByb3cgdGhhdCBuZWVkcyB0byBjaGFuZ2Ugb3IgYmUgYWRkZWQgYnkgdHJhY2tpbmcgcm93IHVuaXF1ZSBJZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge1RhYmxlQ29sdW1uU2NoZW1hfSBjb2x1bW5cclxuICAgKiBAcmV0dXJuIHsqfSAge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW5TY2hlbWEpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGNvbHVtbi5pZDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlIGQtZmxleCBmbGV4LWNvbHVtbiBjb250YWluZXItZmx1aWRcIj5cclxuICA8Y2FwdGlvbiBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlLS1jYXB0aW9uXCIgKm5nSWY9XCJjYXB0aW9uXCI+XHJcbiAgICB7e1xyXG4gICAgICBjYXB0aW9uXHJcbiAgICB9fVxyXG4gIDwvY2FwdGlvbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19hY3Rpb25zIGQtZmxleCByb3cganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1zdGFydFwiXHJcbiAgICBbbmdDbGFzc109XCJpc01vYmlsZVZpZXcgPyAnaWVlZXNhLWRhdGEtdGFibGVfX21vYmlsZS12aWV3LWFjdGlvbnMnIDogJydcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nSWY9XCIhaXNNb2JpbGVWaWV3XCJcclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVSZWZcIlxyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiAnY29sLW1kLTcnIH1cIlxyXG4gICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLWxnLTQgZ2FwLW1kLTIgZ2FwLTIgY29sLW1kLTVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc01vYmlsZVZpZXdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWVlZXNhU2VhcmNoXCI+IDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwidGFibGVBY3Rpb25zPy5pc0FkZE5lZWRlZFwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiYWRkQnV0dG9uXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiXHJcbiAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwidGFibGVBY3Rpb25zPy5pc0VkaXROZWVkZWRcIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cInRhYmxlRWRpdEJ1dHRvblwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJvblRhYmxlRWRpdENsaWNrKClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dzLnNlbGVjdGVkLmxlbmd0aCAhPT0gMVxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtZGF0YS10YWJsZV9fYWN0aW9ucy0tZGlzYWJsZWQnXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgICBcIlxyXG4gICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNEZWxldGVOZWVkZWRcIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cInRhYmxlRGVsZXRlQnV0dG9uXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uRGVsZXRlVGFibGVDbGljaygpXCJcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtZGF0YS10YWJsZV9fYWN0aW9ucy0tZGlzYWJsZWQnXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgICBcIlxyXG4gICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LmRhdGFUYWJsZT8uYXJpYUxhYmVsPy5zZWFyY2hcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGQtc20tZmxleCBkLW1kLW5vbmUgZC1sZy1ub25lIGQteGwtbm9uZSBpZWVlc2EtZGF0YS10YWJsZV9fYWN0aW9ucy0tc2VhcmNoLWdyb3VwLWljb25cIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvblRhYmxlU2VhcmNoQ2xpY2soKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLW1hZ25pZnlpbmctZ2xhc3NcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nSWY9XCJpc01vYmlsZVZpZXdcIlxyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVSZWZcIlxyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogJ2llZWVzYS1kYXRhLXRhYmxlX19maWx0ZXInIH1cIlxyXG4gID5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctdGVtcGxhdGUgI2ZpbHRlclRlbXBsYXRlUmVmIGxldC1jbGFzc05hbWU9XCJkYXRhXCI+XHJcbiAgICA8aWVlZXNhLWZpbHRlclxyXG4gICAgICBjbGFzcz1cInt7IGNsYXNzTmFtZSB9fVwiXHJcbiAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgICBbc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXT1cInNlbGVjdGVkRmlsdGVyT3B0aW9uc1wiXHJcbiAgICAgIFthcHBsaWVkRmlsdGVyT3B0aW9uc109XCJhcHBsaWVkRmlsdGVyT3B0aW9uc1wiXHJcbiAgICAgIChzZWxlY3RlZEZpbHRlcik9XCJzZWxlY3RlZEZpbHRlclR5cGVJbmZvKCRldmVudClcIlxyXG4gICAgICAocmVtb3ZlRmlsdGVyZWRPcHRpb24pPVwib25SZW1vdmFsT2ZGaWx0ZXJlZE9wdGlvbigkZXZlbnQpXCJcclxuICAgICAgKGZpbHRlcmVkT3B0aW9ucyk9XCJvblNlbGVjdGVkRmlsdGVyT3B0aW9ucygkZXZlbnQpXCJcclxuICAgID48L2llZWVzYS1maWx0ZXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNNb2JpbGVWaWV3ICYmIGlzU2VhcmNoQWN0aXZlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWVlZXNhU2VhcmNoXCI+IDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy10ZW1wbGF0ZSAjaWVlZXNhU2VhcmNoPlxyXG4gICAgPGllZWVzYS1zZWFyY2hcclxuICAgICAgW3BsYWNlaG9sZGVyTGFiZWxdPVwic2VhcmNoUGxhY2VIb2xkZXJUZXh0XCJcclxuICAgICAgKHNlYXJjaFZhbHVlKT1cInNlYXJjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNTZWFyY2hOZWVkZWRcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19zZWFyY2gtd3JhcHBlciBtdC1zbS0yIG1kLXNtLTJcIlxyXG4gICAgPjwvaWVlZXNhLXNlYXJjaD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY29udGVudFwiPlxyXG4gICAgPHRhYmxlXHJcbiAgICAgIG1hdC10YWJsZVxyXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgICAgbWF0U29ydFxyXG4gICAgICBbbWF0U29ydEFjdGl2ZV09XCJkZWZhdWx0U29ydGVkQ29sdW1uXCJcclxuICAgICAgW21hdFNvcnREaXJlY3Rpb25dPVwiZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cIlxyXG4gICAgICBbdHJhY2tCeV09XCJ0cmFja0J5SWRcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICBsZXQgY29sdW1uIG9mIGNvbHVtblNjaGVtYUluZm87XHJcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWQ7XHJcbiAgICAgICAgICBsZXQgaWQgPSBpbmRleFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgbWF0Q29sdW1uRGVmPVwie3sgY29sdW1uPy5jb2x1bW5EZWYgfX1cIlxyXG4gICAgICAgIFtzdGlja3ldPVwiY29sdW1uPy5pc1N0aWNreUNvbHVtblwiXHJcbiAgICAgID5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbHVtbj8uaXNTb3J0YWJsZUNvbHVtblwiXHJcbiAgICAgICAgICBbbmdTd2l0Y2hdPVwiY29sdW1uPy5jb2x1bW5EZWZcIlxyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZS1oZWFkZXIgaWVlZXNhLWJvZHktc20tYm9sZC0xNFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgY29sdW1uPy5jb2x1bW5EZWYgPT09IGNvbHVtblR5cGU/LlNFTEVDVFxyXG4gICAgICAgICAgICAgID8gJ2llZWVzYS1kYXRhLXRhYmxlX19jb2x1bW4tc2VsZWN0J1xyXG4gICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2x1bW4/LmhlYWRpbmdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtblR5cGU/LlNFTEVDVFwiPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyB0b2dnbGVBbGxSb3dzU2VsZWN0aW9uKCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFJvd3M/Lmhhc1ZhbHVlKCkgJiYgaXNBbGxSb3dzU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0ZWRSb3dzPy5oYXNWYWx1ZSgpICYmICFpc0FsbFJvd3NTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LmRhdGFUYWJsZT8uYXJpYUxhYmVsPy5zZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi5oZWFkaW5nIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICBbbmdTd2l0Y2hdPVwiY29sdW1uPy5jb2x1bW5UeXBlXCJcclxuICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudCBpZWVlc2EtdGl0bGUtc20tMTZcIlxyXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICBjb2x1bW4/LmNvbHVtbkRlZiA9PT0gY29sdW1uVHlwZT8uU0VMRUNUXHJcbiAgICAgICAgICAgICAgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2NvbHVtbi1zZWxlY3QnXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbj8uY2VsbERhdGEocm93KSB9fVxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5MSU5LXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25MaW5rQ2xpY2socm93LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS10aXRsZS1zbS0xNiBpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1jb250ZW50LWxpbmtcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzPy5kYXRhVGFibGU/LmFyaWFMYWJlbD8ubGlua1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBjb2x1bW4/LmNlbGxEYXRhKHJvdykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtblR5cGU/LlNFTEVDVFwiPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMlwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBvblNlbGVjdENsaWNrKHJvdykgOiBudWxsXCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFJvd3MuaXNTZWxlY3RlZChyb3cpXCJcclxuICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LmRhdGFUYWJsZT8uYXJpYUxhYmVsPy5zZWxlY3RcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5FRElUXCI+XHJcbiAgICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJyb3dFZGl0QnV0dG9uXCJcclxuICAgICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uRWRpdENsaWNrKHJvdylcIlxyXG4gICAgICAgICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtblR5cGU/LkRFTEVURVwiPlxyXG4gICAgICAgICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgW2ljb25CdXR0b25dPVwicm93RGVsZXRlQnV0dG9uXCJcclxuICAgICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uRGVsZXRlQ2xpY2socm93KVwiXHJcbiAgICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8dHJcclxuICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX2hlYWRlci1yb3dcIlxyXG4gICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIlxyXG4gICAgICA+PC90cj5cclxuICAgICAgPHRyXHJcbiAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtcm93XCJcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiXHJcbiAgICAgID48L3RyPlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUFjdGlvbnM/LmlzUGFnaW5hdGlvbk5lZWRlZFwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX3BhZ2luYXRpb24gZC1mbGV4IGZsZXgtcm93LXJldmVyc2VcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LmRhdGFUYWJsZT8uYXJpYUxhYmVsPy5wYWdpbmF0aW9uXCJcclxuICA+XHJcbiAgICA8bWF0LXBhZ2luYXRvclxyXG4gICAgICBbcGFnZVNpemVdPVwicGFnaW5hdG9yQ29uZmlnPy5yZWNvcmRzUGVyUGFnZVwiXHJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdG9yQ29uZmlnLnBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgIChwYWdlKT1cImhhbmRsZVBhZ2luYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgIFtsZW5ndGhdPVwicGFnaW5hdG9yQ29uZmlnPy50b3RhbFJlY29yZHNcIlxyXG4gICAgPjwvbWF0LXBhZ2luYXRvcj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|