@rangertechnologies/ngnxt 2.1.133 → 2.1.135
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/environments/version.mjs +2 -2
- package/esm2022/lib/components/datatable/datatable.component.mjs +108 -20
- package/esm2022/lib/pages/builder/element/element.component.mjs +1 -1
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +2 -2
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +1 -1
- package/fesm2022/rangertechnologies-ngnxt.mjs +111 -23
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/datatable/datatable.component.d.ts +9 -2
- package/lib/components/image-cropper/component/image-cropper.component.d.ts +1 -1
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.135.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.133.tgz +0 -0
|
@@ -58,6 +58,7 @@ export class NxtDatatable {
|
|
|
58
58
|
isLoading; //SKS28MAR25 Input for loading indicator
|
|
59
59
|
tableConfig; // table config for nxt form builder table
|
|
60
60
|
tableParams; //SKS17APR25 Receives tableParams information from parent component
|
|
61
|
+
listViews = []; //SKS26APR25 Predefined list views
|
|
61
62
|
tableRowClick = new EventEmitter; // datas to be passed when table row is clicked
|
|
62
63
|
onEditData = new EventEmitter; // if edit button is clicked, the data of that row will be passed
|
|
63
64
|
saveButtonData = new EventEmitter; // edited rows data will be passed
|
|
@@ -153,6 +154,8 @@ export class NxtDatatable {
|
|
|
153
154
|
isSummaryEndColumn;
|
|
154
155
|
filterBoxData;
|
|
155
156
|
filterTableNos;
|
|
157
|
+
selectedView = ''; // Selected list view name
|
|
158
|
+
isDropdownOpen = false; // Tracks dropdown visibility
|
|
156
159
|
constructor(renderer, dataService, changeService) {
|
|
157
160
|
this.renderer = renderer;
|
|
158
161
|
this.dataService = dataService;
|
|
@@ -256,6 +259,11 @@ export class NxtDatatable {
|
|
|
256
259
|
this.booleanColumns = this.from !== 'formBuilder' ? this.columns.filter(column => column.fldType === 'boolean').map(column => column.fieldName) : this.booleanColumns;
|
|
257
260
|
this.inlineElement = Object.fromEntries(this.displayedColumns.map(key => [key, ""]));
|
|
258
261
|
this.dropdownActionButton = (this.actionButtonArray?.buttonArray && this.actionButtonArray?.buttonArray?.length > 0) ? this.actionButtonArray?.buttonArray?.slice(this.actionButtonArray?.size) : [];
|
|
262
|
+
//SKS26APR25 Convert string array to object array with `name` property
|
|
263
|
+
if (this.listViews.length && typeof this.listViews[0] === 'string') {
|
|
264
|
+
this.listViews = this.listViews.map(view => ({ name: view }));
|
|
265
|
+
}
|
|
266
|
+
this.listViews && this.listViews.length > 0 ? this.selectListView(this.listViews[0].name) : '';
|
|
259
267
|
this.selection = new SelectionModel(true, []);
|
|
260
268
|
if (!this.totalRecords && this.data && this.isPagination) {
|
|
261
269
|
this.dataSource.data = this.data?.slice(0, this.pageSize || 10);
|
|
@@ -326,7 +334,7 @@ export class NxtDatatable {
|
|
|
326
334
|
});
|
|
327
335
|
this.computeSummaryValues();
|
|
328
336
|
}
|
|
329
|
-
this.searchConfigs && this.searchBoxValue ? this.emptySearch(this.searchBoxValue) :
|
|
337
|
+
this.searchConfigs && this.searchBoxValue ? this.emptySearch(this.searchBoxValue) : ''; // SKS17APR25 update search box value
|
|
330
338
|
}
|
|
331
339
|
ngOnInit() {
|
|
332
340
|
this.dataSource = { data: [] }; // or use a proper data structure
|
|
@@ -485,6 +493,11 @@ export class NxtDatatable {
|
|
|
485
493
|
this.originalData = [...this.data];
|
|
486
494
|
this.sFilterData = [...this.data];
|
|
487
495
|
this.dataSource.data = this.originalData;
|
|
496
|
+
//SKS26APR25 Convert string array to object array with `name` property
|
|
497
|
+
if (this.listViews.length && typeof this.listViews[0] === 'string') {
|
|
498
|
+
this.listViews = this.listViews.map(view => ({ name: view }));
|
|
499
|
+
}
|
|
500
|
+
this.listViews && this.listViews.length > 0 ? this.selectListView(this.listViews[0].name) : '';
|
|
488
501
|
if (!this.configPagination && this.data && this.isPagination) {
|
|
489
502
|
this.dataSource.data = this.data?.slice(0, this.pageSize || 10);
|
|
490
503
|
}
|
|
@@ -571,9 +584,9 @@ export class NxtDatatable {
|
|
|
571
584
|
else if (this.tableParams?.tableSearch) {
|
|
572
585
|
this.searchBoxValue = this.tableParams?.tableSearch;
|
|
573
586
|
}
|
|
574
|
-
this.searchConfigs && this.searchBoxValue ? this.emptySearch(this.searchBoxValue) :
|
|
587
|
+
this.searchConfigs && this.searchBoxValue ? this.emptySearch(this.searchBoxValue) : '';
|
|
575
588
|
this.filterDataArray = this.tableParams?.searchFilterData ? this.tableParams?.searchFilterData : {};
|
|
576
|
-
this.sortData(this.tableParams?.sort?.column, this.tableParams?.sort?.direction);
|
|
589
|
+
this.sortData(this.tableParams?.sort?.column, this.tableParams?.sort?.direction, true);
|
|
577
590
|
}
|
|
578
591
|
// SKS20MAR25 summary columns calc
|
|
579
592
|
computeSummaryColumns() {
|
|
@@ -647,7 +660,7 @@ export class NxtDatatable {
|
|
|
647
660
|
this.computeSummaryValues();
|
|
648
661
|
}
|
|
649
662
|
// SKS15FEB25 Custom sort function
|
|
650
|
-
sortData(column, sortingState) {
|
|
663
|
+
sortData(column, sortingState, currentState) {
|
|
651
664
|
// Define sorting states
|
|
652
665
|
const sortingStates = ['asc', 'desc', 'none'];
|
|
653
666
|
if (!this.configPagination || this.dataSource.data.length === this.totalRecords) {
|
|
@@ -724,9 +737,10 @@ export class NxtDatatable {
|
|
|
724
737
|
}
|
|
725
738
|
localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: false, pageSize: this.pageSize, pageIndex: this.pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));
|
|
726
739
|
// Only sort if the direction is 'asc' or 'desc'
|
|
727
|
-
|
|
740
|
+
if (currentState !== true)
|
|
741
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
728
742
|
}
|
|
729
|
-
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
743
|
+
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
730
744
|
}
|
|
731
745
|
onScroll(tableContainer) {
|
|
732
746
|
this.isScrolled = tableContainer.scrollTop > 0;
|
|
@@ -741,6 +755,10 @@ export class NxtDatatable {
|
|
|
741
755
|
onDocumentClick(event) {
|
|
742
756
|
this.searchFilter = false;
|
|
743
757
|
event.stopPropagation(); // prevents any other default action
|
|
758
|
+
const target = event.target;
|
|
759
|
+
if (!target.closest('.list-view-filter')) {
|
|
760
|
+
this.isDropdownOpen = false;
|
|
761
|
+
}
|
|
744
762
|
}
|
|
745
763
|
//SKS15FEB25 filter data that to be displayed in header filter icon is passed in 'filterArray' array
|
|
746
764
|
filter(datas) {
|
|
@@ -752,19 +770,19 @@ export class NxtDatatable {
|
|
|
752
770
|
}
|
|
753
771
|
// SKS15FEB25 emitting pagr size and index to parent on paginating
|
|
754
772
|
pageParams(event) {
|
|
755
|
-
this.applyFilter(this.searchBoxValue);
|
|
756
773
|
this.pageIndex = event.pageIndex;
|
|
757
774
|
this.pageSize = event.pageSize;
|
|
758
775
|
this.filterTableNos = this.filterBoxData?.length;
|
|
759
776
|
if (!this.configPagination || this.dataSource.data.length === this.totalRecords) {
|
|
777
|
+
this.applyFilter(this.searchBoxValue);
|
|
760
778
|
const start = (Number(event.pageIndex) - 1) * Number(event.pageSize);
|
|
761
779
|
const end = start + Number(event.pageSize);
|
|
762
780
|
this.dataSource.data = this.filterBoxData?.slice(start, end);
|
|
763
781
|
}
|
|
764
782
|
else {
|
|
765
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: event.pageSize, pageIndex: event.pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
783
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: event.pageSize, pageIndex: event.pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
766
784
|
}
|
|
767
|
-
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
785
|
+
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
768
786
|
}
|
|
769
787
|
// SKS15FEB25 apply search bar filter using mat
|
|
770
788
|
applyFilter(event) {
|
|
@@ -1021,13 +1039,13 @@ export class NxtDatatable {
|
|
|
1021
1039
|
else {
|
|
1022
1040
|
const pageIndex = Math.ceil(this.totalRecords / 10);
|
|
1023
1041
|
localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: true, pageSize: 10, pageIndex: pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));
|
|
1024
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: 10, pageIndex: pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1042
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: 10, pageIndex: pageIndex }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1025
1043
|
}
|
|
1026
1044
|
if (this.from === 'formBuilder') {
|
|
1027
1045
|
this.emitTableDataValue(this.dataSource.data);
|
|
1028
1046
|
}
|
|
1029
1047
|
this.computeSummaryValues();
|
|
1030
|
-
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1048
|
+
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1031
1049
|
}
|
|
1032
1050
|
// SKS15FEB25 Action button conditionally displayed function
|
|
1033
1051
|
isConditionMet(element, conditions) {
|
|
@@ -1058,9 +1076,9 @@ export class NxtDatatable {
|
|
|
1058
1076
|
if (this.searchConfigs || this.dataSource.data.length === this.totalRecords) {
|
|
1059
1077
|
this.pageIndex = 1;
|
|
1060
1078
|
this.pageSize = 10;
|
|
1061
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1079
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1062
1080
|
}
|
|
1063
|
-
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1081
|
+
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1064
1082
|
}
|
|
1065
1083
|
// SKS15FEB25 If the value in the search box is empty, call the onSearch function automatically
|
|
1066
1084
|
emptySearch(event) {
|
|
@@ -1106,9 +1124,9 @@ export class NxtDatatable {
|
|
|
1106
1124
|
this.filterRetain(this.filterDataArray);
|
|
1107
1125
|
}
|
|
1108
1126
|
else {
|
|
1109
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: 10, pageIndex: 1 }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1127
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: 10, pageIndex: 1 }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1110
1128
|
}
|
|
1111
|
-
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1129
|
+
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1112
1130
|
}
|
|
1113
1131
|
// SKS15FEB25 search filter box checkbox retain
|
|
1114
1132
|
isSelected(event) {
|
|
@@ -1134,12 +1152,12 @@ export class NxtDatatable {
|
|
|
1134
1152
|
if (this.dataSource.data.length !== this.totalRecords && this.configPagination) {
|
|
1135
1153
|
this.pageIndex = 1;
|
|
1136
1154
|
this.pageSize = 10;
|
|
1137
|
-
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1155
|
+
this.NxtTableEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: Number(this.pageIndex) }, tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1138
1156
|
}
|
|
1139
1157
|
else {
|
|
1140
1158
|
this.filterRetain(this.filterDataArray);
|
|
1141
1159
|
}
|
|
1142
|
-
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection } });
|
|
1160
|
+
this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex }, tableSearch: this.searchBoxValue, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection, listView: this.selectedView } });
|
|
1143
1161
|
}
|
|
1144
1162
|
// SKS15FEB25 action column dropdown buttons close
|
|
1145
1163
|
addClickOutsideListener() {
|
|
@@ -1249,8 +1267,76 @@ export class NxtDatatable {
|
|
|
1249
1267
|
expenseAttachment(event) {
|
|
1250
1268
|
this.fileEmit.emit(event);
|
|
1251
1269
|
}
|
|
1270
|
+
//SKS26APR25 Toggle dropdown visibility
|
|
1271
|
+
listFilterToggleDropdown() {
|
|
1272
|
+
this.isDropdownOpen = !this.isDropdownOpen;
|
|
1273
|
+
}
|
|
1274
|
+
//SKS26APR25 Select a list view and apply filter
|
|
1275
|
+
selectListView(viewName) {
|
|
1276
|
+
this.selectedView = viewName;
|
|
1277
|
+
this.applyListViewFilter();
|
|
1278
|
+
}
|
|
1279
|
+
//SKS26APR25 Apply the selected list view filter
|
|
1280
|
+
applyListViewFilter() {
|
|
1281
|
+
this.searchBoxValue = ''; // Reset search bar
|
|
1282
|
+
this.filterDataArray = {}; // Reset column filters
|
|
1283
|
+
let filteredData;
|
|
1284
|
+
if (!this.selectedView) {
|
|
1285
|
+
filteredData = [...this.originalData];
|
|
1286
|
+
}
|
|
1287
|
+
else {
|
|
1288
|
+
const selectedViewObj = this.listViews.find(view => view.name === this.selectedView);
|
|
1289
|
+
if (selectedViewObj && selectedViewObj.filters) {
|
|
1290
|
+
filteredData = this.originalData.filter(item => selectedViewObj.filters.every(condition => this.applyCondition(item, condition)));
|
|
1291
|
+
}
|
|
1292
|
+
else {
|
|
1293
|
+
filteredData = [...this.originalData];
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
//SKS26APR25 Update table data and pagination
|
|
1297
|
+
this.filterBoxData = filteredData;
|
|
1298
|
+
this.totalCount = filteredData.length;
|
|
1299
|
+
this.filterTableNos = filteredData.length;
|
|
1300
|
+
this.pageIndex = 1;
|
|
1301
|
+
if (!this.configPagination || this.dataSource.data.length === this.totalRecords) {
|
|
1302
|
+
const start = (this.pageIndex - 1) * this.pageSize;
|
|
1303
|
+
const end = start + this.pageSize;
|
|
1304
|
+
this.dataSource.data = filteredData.slice(start, end);
|
|
1305
|
+
}
|
|
1306
|
+
else {
|
|
1307
|
+
this.NxtTableEmit.emit({
|
|
1308
|
+
pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },
|
|
1309
|
+
tableSearch: { fields: this.displayedColumns, value: this.searchBoxValue },
|
|
1310
|
+
searchFilterData: this.filterDataArray,
|
|
1311
|
+
sort: { column: this.currentSortColumn, direction: this.currentSortDirection },
|
|
1312
|
+
listView: this.selectedView
|
|
1313
|
+
});
|
|
1314
|
+
}
|
|
1315
|
+
this.NxtTableParamsEmit.emit({
|
|
1316
|
+
pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },
|
|
1317
|
+
tableSearch: this.searchBoxValue,
|
|
1318
|
+
searchFilterData: this.filterDataArray,
|
|
1319
|
+
sort: { column: this.currentSortColumn, direction: this.currentSortDirection },
|
|
1320
|
+
listView: this.selectedView
|
|
1321
|
+
});
|
|
1322
|
+
// Close dropdown after selection
|
|
1323
|
+
this.isDropdownOpen = false;
|
|
1324
|
+
}
|
|
1325
|
+
//SKS26APR25 Apply a single filter condition
|
|
1326
|
+
applyCondition(item, condition) {
|
|
1327
|
+
const value = this.getValue(item, condition.column)?.toString().toLowerCase() || '';
|
|
1328
|
+
const filterValue = condition.value?.toString().toLowerCase();
|
|
1329
|
+
switch (condition.operator) {
|
|
1330
|
+
case '=': return value === filterValue;
|
|
1331
|
+
case '!=': return value !== filterValue;
|
|
1332
|
+
case 'contains': return value.includes(filterValue);
|
|
1333
|
+
case '>': return Number(value) > Number(filterValue);
|
|
1334
|
+
case '<': return Number(value) < Number(filterValue);
|
|
1335
|
+
default: return true;
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1252
1338
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, deps: [{ token: i0.Renderer2 }, { token: i1.DataService }, { token: i2.ChangeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1253
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtDatatable, isStandalone: true, selector: "nxt-datatable", inputs: { data: "data", columns: "columns", withCheckBox: "withCheckBox", searchBar: "searchBar", tableSaveButton: "tableSaveButton", stickyColumn: "stickyColumn", tableWidth: "tableWidth", actionColumHeader: "actionColumHeader", actionButton: "actionButton", title: "title", isButtons: "isButtons", buttonArray: "buttonArray", tableId: "tableId", isEditRow: "isEditRow", isDeleteRow: "isDeleteRow", addInlineRecord: "addInlineRecord", searchConfigs: "searchConfigs", direction: "direction", pagination: "pagination", actionButtonArray: "actionButtonArray", multipleFilter: "multipleFilter", isPagination: "isPagination", isNosIndicator: "isNosIndicator", isEditable: "isEditable", from: "from", question: "question", rowTextSize: "rowTextSize", rowTextColor: "rowTextColor", apiMeta: "apiMeta", summaryRows: "summaryRows", summaryColumns: "summaryColumns", isLoading: "isLoading", tableConfig: "tableConfig", tableParams: "tableParams" }, outputs: { tableRowClick: "tableRowClick", onEditData: "onEditData", saveButtonData: "saveButtonData", onDeleteData: "onDeleteData", buttonEmit: "buttonEmit", hyperLinkEmit: "hyperLinkEmit", sideNavEmit: "sideNavEmit", actionButtonEmit: "actionButtonEmit", columnSelected: "columnSelected", removeColumn: "removeColumn", valueChange: "valueChange", selectedValues: "selectedValues", fileEmit: "fileEmit", NxtTableParamsEmit: "NxtTableParamsEmit", NxtTableEmit: "NxtTableEmit" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div> <!-- class=\"m-4\" -->\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div>\n <div *ngIf=\"isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: center;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"headerLabels[displayedColumns.indexOf(column)]\">\n {{ headerLabels[displayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"sortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of displayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "fcBtnBgColor", "fcBtnBorder", "fcBtnTextColor", "fcBtnHeight", "fcBtnWidth", "fcBtnIconLeftSrc", "fcBtnIconRightSrc", "fcBtnHoverBgColor", "fcBtnHoverTextColor", "fcBtnId", "dataDismiss", "fcButtonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: SearchFilterPipe, name: "searchFilter" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TimePipe, name: "time" }, { kind: "pipe", type: EditColumnCheckPipe, name: "editColumnCheck" }, { kind: "pipe", type: EditColumnDropdownPipe, name: "editColumnDropdown" }, { kind: "pipe", type: EditColumnTypePipe, name: "editColumnType" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i6.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "pipe", type: GetValuePipe, name: "getValue" }] });
|
|
1339
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtDatatable, isStandalone: true, selector: "nxt-datatable", inputs: { data: "data", columns: "columns", withCheckBox: "withCheckBox", searchBar: "searchBar", tableSaveButton: "tableSaveButton", stickyColumn: "stickyColumn", tableWidth: "tableWidth", actionColumHeader: "actionColumHeader", actionButton: "actionButton", title: "title", isButtons: "isButtons", buttonArray: "buttonArray", tableId: "tableId", isEditRow: "isEditRow", isDeleteRow: "isDeleteRow", addInlineRecord: "addInlineRecord", searchConfigs: "searchConfigs", direction: "direction", pagination: "pagination", actionButtonArray: "actionButtonArray", multipleFilter: "multipleFilter", isPagination: "isPagination", isNosIndicator: "isNosIndicator", isEditable: "isEditable", from: "from", question: "question", rowTextSize: "rowTextSize", rowTextColor: "rowTextColor", apiMeta: "apiMeta", summaryRows: "summaryRows", summaryColumns: "summaryColumns", isLoading: "isLoading", tableConfig: "tableConfig", tableParams: "tableParams", listViews: "listViews" }, outputs: { tableRowClick: "tableRowClick", onEditData: "onEditData", saveButtonData: "saveButtonData", onDeleteData: "onDeleteData", buttonEmit: "buttonEmit", hyperLinkEmit: "hyperLinkEmit", sideNavEmit: "sideNavEmit", actionButtonEmit: "actionButtonEmit", columnSelected: "columnSelected", removeColumn: "removeColumn", valueChange: "valueChange", selectedValues: "selectedValues", fileEmit: "fileEmit", NxtTableParamsEmit: "NxtTableParamsEmit", NxtTableEmit: "NxtTableEmit" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div> <!-- class=\"m-4\" -->\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <div *ngIf=\"listViews && listViews.length > 0\" class=\"list-view-filter\">\n <div class=\"filter-label\">Data Related to</div>\n <div class=\"select-wrapper\">\n <svg class=\"filter-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" rx=\"5\" fill=\"#F1F1F1\"/>\n <path d=\"M5.51288 4.5H12.1879C12.7429 4.5 13.2004 4.9575 13.2004 5.5125V6.62249C13.2004 7.02749 12.9454 7.53 12.6979 7.785L10.5229 9.705C10.2229 9.96 10.0204 10.4625 10.0204 10.8675V13.0425C10.0204 13.3425 9.8179 13.7475 9.5629 13.905L8.85789 14.3625C8.19789 14.7675 7.29037 14.31 7.29037 13.5V10.8225C7.29037 10.47 7.08789 10.0125 6.88539 9.75751L4.96539 7.7325C4.71039 7.4775 4.5079 7.02749 4.5079 6.71999V5.5575C4.5004 4.9575 4.95788 4.5 5.51288 4.5Z\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M4.5 11.9999V14.2499C4.5 17.9999 6 19.4999 9.75 19.4999H14.25C18 19.4999 19.5 17.9999 19.5 14.2499V9.74994C19.5 7.40994 18.915 5.93993 17.5575 5.17493C17.175 4.95743 16.41 4.79243 15.7125 4.67993\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12.75 12.75H16.5\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.25 15.75H16.5\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <div class=\"custom-dropdown\">\n <div class=\"selected-option\">{{ selectedView }}</div>\n <ul *ngIf=\"isDropdownOpen\" class=\"dropdown-options\">\n <li *ngFor=\"let view of listViews\" [class.selected]=\"selectedView === view.name\" (click)=\"selectListView(view.name)\">\n {{ view.name }}\n <span *ngIf=\"selectedView === view.name\" class=\"checkmark\">\u2713</span>\n </li>\n </ul>\n </div>\n \n <svg class=\"chevron-icon\" (click)=\"listFilterToggleDropdown()\" width=\"24\" height=\"24\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n <div *ngIf=\"isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"headerLabels[displayedColumns.indexOf(column)]\">\n {{ headerLabels[displayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"$event.stopPropagation(); filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"sortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\" (click)=\"$event.stopPropagation();\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of displayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"configPagination ? totalRecords || totalCount : filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}.list-view-filter{padding-left:10px;padding-right:10px}.filter-label{font-size:11px;color:#747577;margin-right:8px}.custom-dropdown{position:relative;cursor:pointer;display:inline-block}.selected-option{padding:2px 5px;font-size:16px;font-weight:700}.dropdown-options{position:absolute;top:100%;left:0;background:#fff;border:1px solid #ddd;z-index:1001;list-style:none;padding:0;margin:4px 0 0;box-shadow:0 2px 8px #0000001a;white-space:nowrap;width:max-content;min-width:200px}.dropdown-options li{padding:4px 8px;cursor:pointer}.dropdown-options li:hover{background-color:#f1f1f1}.select-wrapper{display:flex}.chevron-icon{cursor:pointer;background-color:#f5f5f5;border-radius:5px}.dropdown-options li.selected{background-color:#f1f1f1;font-weight:600}.checkmark{color:#545454;margin-left:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "fcBtnBgColor", "fcBtnBorder", "fcBtnTextColor", "fcBtnHeight", "fcBtnWidth", "fcBtnIconLeftSrc", "fcBtnIconRightSrc", "fcBtnHoverBgColor", "fcBtnHoverTextColor", "fcBtnId", "dataDismiss", "fcButtonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: SearchFilterPipe, name: "searchFilter" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TimePipe, name: "time" }, { kind: "pipe", type: EditColumnCheckPipe, name: "editColumnCheck" }, { kind: "pipe", type: EditColumnDropdownPipe, name: "editColumnDropdown" }, { kind: "pipe", type: EditColumnTypePipe, name: "editColumnType" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i6.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "pipe", type: GetValuePipe, name: "getValue" }] });
|
|
1254
1340
|
}
|
|
1255
1341
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, decorators: [{
|
|
1256
1342
|
type: Component,
|
|
@@ -1269,7 +1355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1269
1355
|
MatTooltipModule,
|
|
1270
1356
|
GetValuePipe
|
|
1271
1357
|
// RowResizerDirective
|
|
1272
|
-
], template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div> <!-- class=\"m-4\" -->\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div>\n <div *ngIf=\"isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: center;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"headerLabels[displayedColumns.indexOf(column)]\">\n {{ headerLabels[displayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"sortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of displayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}\n"] }]
|
|
1358
|
+
], template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div> <!-- class=\"m-4\" -->\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <div *ngIf=\"listViews && listViews.length > 0\" class=\"list-view-filter\">\n <div class=\"filter-label\">Data Related to</div>\n <div class=\"select-wrapper\">\n <svg class=\"filter-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" rx=\"5\" fill=\"#F1F1F1\"/>\n <path d=\"M5.51288 4.5H12.1879C12.7429 4.5 13.2004 4.9575 13.2004 5.5125V6.62249C13.2004 7.02749 12.9454 7.53 12.6979 7.785L10.5229 9.705C10.2229 9.96 10.0204 10.4625 10.0204 10.8675V13.0425C10.0204 13.3425 9.8179 13.7475 9.5629 13.905L8.85789 14.3625C8.19789 14.7675 7.29037 14.31 7.29037 13.5V10.8225C7.29037 10.47 7.08789 10.0125 6.88539 9.75751L4.96539 7.7325C4.71039 7.4775 4.5079 7.02749 4.5079 6.71999V5.5575C4.5004 4.9575 4.95788 4.5 5.51288 4.5Z\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M4.5 11.9999V14.2499C4.5 17.9999 6 19.4999 9.75 19.4999H14.25C18 19.4999 19.5 17.9999 19.5 14.2499V9.74994C19.5 7.40994 18.915 5.93993 17.5575 5.17493C17.175 4.95743 16.41 4.79243 15.7125 4.67993\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12.75 12.75H16.5\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.25 15.75H16.5\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <div class=\"custom-dropdown\">\n <div class=\"selected-option\">{{ selectedView }}</div>\n <ul *ngIf=\"isDropdownOpen\" class=\"dropdown-options\">\n <li *ngFor=\"let view of listViews\" [class.selected]=\"selectedView === view.name\" (click)=\"selectListView(view.name)\">\n {{ view.name }}\n <span *ngIf=\"selectedView === view.name\" class=\"checkmark\">\u2713</span>\n </li>\n </ul>\n </div>\n \n <svg class=\"chevron-icon\" (click)=\"listFilterToggleDropdown()\" width=\"24\" height=\"24\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n <div *ngIf=\"isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of displayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); sortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"headerLabels[displayedColumns.indexOf(column)]\">\n {{ headerLabels[displayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"filterColumns.includes(column)\" (click)=\"$event.stopPropagation(); filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"sortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\" (click)=\"$event.stopPropagation();\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of displayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of displayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"configPagination ? totalRecords || totalCount : filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}.list-view-filter{padding-left:10px;padding-right:10px}.filter-label{font-size:11px;color:#747577;margin-right:8px}.custom-dropdown{position:relative;cursor:pointer;display:inline-block}.selected-option{padding:2px 5px;font-size:16px;font-weight:700}.dropdown-options{position:absolute;top:100%;left:0;background:#fff;border:1px solid #ddd;z-index:1001;list-style:none;padding:0;margin:4px 0 0;box-shadow:0 2px 8px #0000001a;white-space:nowrap;width:max-content;min-width:200px}.dropdown-options li{padding:4px 8px;cursor:pointer}.dropdown-options li:hover{background-color:#f1f1f1}.select-wrapper{display:flex}.chevron-icon{cursor:pointer;background-color:#f5f5f5;border-radius:5px}.dropdown-options li.selected{background-color:#f1f1f1;font-weight:600}.checkmark{color:#545454;margin-left:8px}\n"] }]
|
|
1273
1359
|
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DataService }, { type: i2.ChangeService }], propDecorators: { data: [{
|
|
1274
1360
|
type: Input
|
|
1275
1361
|
}], columns: [{
|
|
@@ -1338,6 +1424,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1338
1424
|
type: Input
|
|
1339
1425
|
}], tableParams: [{
|
|
1340
1426
|
type: Input
|
|
1427
|
+
}], listViews: [{
|
|
1428
|
+
type: Input
|
|
1341
1429
|
}], tableRowClick: [{
|
|
1342
1430
|
type: Output
|
|
1343
1431
|
}], onEditData: [{
|
|
@@ -1378,4 +1466,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1378
1466
|
type: HostListener,
|
|
1379
1467
|
args: ['document:click', ['$event']]
|
|
1380
1468
|
}] } });
|
|
1381
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQy9KLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQs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LENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0csSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVO2lCQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQztpQkFDL0MsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixJQUFJLEVBQUUsT0FBTztnQkFDYixHQUFHLElBQUk7YUFDUixDQUFDLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVTtpQkFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUM7aUJBQzVDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsT0FBTztnQkFDbEIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsR0FBRyxJQUFJO2FBQ1IsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO1FBQ0QsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBRSxpREFBaUQ7UUFDcEUsQ0FBQztRQUNELCtDQUErQztRQUMvQyxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzlGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNySSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNySCxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxD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TUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RyxJQUFJLENBQUMsYUFBYSxHQUFHLFVB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a0I7c0JBQTNCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkEwQmEsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUNXLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQXFvQmlCLGVBQWU7c0JBQTFELFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE54dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9ueHQtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRQYWdpbmF0aW9uIH0gZnJvbSAnLi4vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hGaWx0ZXJQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIucGlwZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZGF0ZS9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgVGltZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL3RpbWUvdGltZS5waXBlJztcbmltcG9ydCB7IEVkaXRDb2x1bW5DaGVja1BpcGUgfSBmcm9tICcuLi8uLi9waXBlL2VkaXRDb2x1bW5DaGVjay9lZGl0LWNvbHVtbi1jaGVjay5waXBlJztcbmltcG9ydCB7IEVkaXRDb2x1bW5Ecm9wZG93blBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2VkaXRDb2x1bW5Ecm9wZG93bi9lZGl0LWNvbHVtbi1kcm9wZG93bi5waXBlJztcbmltcG9ydCB7IEVkaXRDb2x1bW5UeXBlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZWRpdENvbHVtblR5cGUvZWRpdC1jb2x1bW4tdHlwZS5waXBlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGEnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2V0VmFsdWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9nZXQtdmFsdWUucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1kYXRhdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTnh0QnV0dG9uQ29tcG9uZW50LFxuICAgIE54dFBhZ2luYXRpb24sXG4gICAgU2VhcmNoRmlsdGVyUGlwZSxcbiAgICBEYXRlUGlwZSxcbiAgICBUaW1lUGlwZSxcbiAgICBFZGl0Q29sdW1uQ2hlY2tQaXBlLFxuICAgIEVkaXRDb2x1bW5Ecm9wZG93blBpcGUsXG4gICAgRWRpdENvbHVtblR5cGVQaXBlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgR2V0VmFsdWVQaXBlXG4gICAgLy8gUm93UmVzaXplckRpcmVjdGl2ZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBOeHREYXRhdGFibGUge1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdOyAgLy8gIGdldCBkYXRhIHRoYXQgdG8gYmUgZGlzcGxheWVkIGluIGEgYXJyYXlcbiAgQElucHV0KCkgY29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyBDb2x1bW5zIGhhdmUgYSBsYWJlbCwgYSBjb2x1bW4gdHlwZSwgYW5kIGZpbHRlciBkZXRhaWxzLlxuICBASW5wdXQoKSB3aXRoQ2hlY2tCb3g6IGJvb2xlYW47ICAvLyBnZXQgaWYgd2l0aCBvciB3aXRob3V0IGNoZWNrYm94IGluIHRhYmxlXG4gIEBJbnB1dCgpIHNlYXJjaEJhcjogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHNlYXJjaCBiYXIgd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGFibGVcbiAgQElucHV0KCkgdGFibGVTYXZlQnV0dG9uID0gZmFsc2U7IC8vIHNhdmUgYnV0dG9uIGZvciBlZGl0aW5nIExPUCBpbiBwYXlyb2xsIHRhYmxlLCAgY2hhbmdlZCBuYW1lIGZyb20gJ3NhdmVMT1AnXG4gIEBJbnB1dCgpIHN0aWNreUNvbHVtbiA9IGZhbHNlOyAvLyBpZiB0aGUgbGFzdCBjb2x1bW4gc2hvdWxkIGJlIHN0aWNreSwgaXQgc2hvdWxkIGJlIHNlbnQgYXMgYm9vbGVhbiB2YWx1ZVxuICBASW5wdXQoKSB0YWJsZVdpZHRoID0gJzEwMCUnOyAvLyB3aWR0aCBvZiB0YWJsZSBjYW4gYmUgYWRqdXN0ZWQgZnJvbSBwYXJlbnQsIGJ5IGRlZmF1bHQgaXQgaXMgMTAwJVxuICBASW5wdXQoKSBhY3Rpb25Db2x1bUhlYWRlciA9ICdBY3Rpb24nOyAgLy8gdG8gY2hhbmdlIHRoZSBoZWFkZXIgZm9yIGFjdGlvbiBjb2x1bW5cbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uOiBib29sZWFuOyAgLy90byBzaG93IGJ1dHRvbiBjb2x1bSBhcyBhY3Rpb25cbiAgQElucHV0KCkgdGl0bGU6IGFueTsvLyB0aGUgdGl0bGUgZm9yIHRoZSB0YWJsZTtcbiAgQElucHV0KCkgaXNCdXR0b25zOiBib29sZWFuOy8vIGlzIGJ1dHRvbiBwcmVzZW50IGluIHRhYmxlO1xuICBASW5wdXQoKSBidXR0b25BcnJheTogYW55Oy8vIGJ1dHRvbnMgdG8gYmUgZGlzcGxheWVkO1xuICBASW5wdXQoKSB0YWJsZUlkOiBhbnk7IC8vIGlkIG9mIHRhYmxlXG4gIEBJbnB1dCgpIGlzRWRpdFJvdzogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgZWRpdGVkXG4gIEBJbnB1dCgpIGlzRGVsZXRlUm93OiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBkZWxldGVkXG4gIEBJbnB1dCgpIGFkZElubGluZVJlY29yZDogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgYWRkZWQgaW5saW5lXG4gIEBJbnB1dCgpIHNlYXJjaENvbmZpZ3M6IGFueTsgLy8gc2VhcmNoIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIGRpcmVjdGlvbjogJ3J0bCcgfCAnbHRyJyA9ICdsdHInOyAvLyBkaXJlY3Rpb24gb2YgdGFibGVcbiAgQElucHV0KCkgcGFnaW5hdGlvbjogYW55OyAvLyBwYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkFycmF5OiBhbnk7IC8vIGFjdGlvbiBidXR0b24gY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgbXVsdGlwbGVGaWx0ZXI6IGFueTsgLy8gaWYgcGFnaW5hdGlvbiB0cnVlIHRoZW4gdGhpcyB3aWxsIGJlIHVzZWRcbiAgQElucHV0KCkgaXNQYWdpbmF0aW9uOiBhbnk7IC8vIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbnMgaWYgdHJ1ZSB0aGVuIHBhZ2luYXRpb24gd2lsbCBiZSBlbmFibGVkXG4gIEBJbnB1dCgpIGlzTm9zSW5kaWNhdG9yOiBhbnk7IC8vIGlmIHRydWUgdGhlbiBubyBkYXRhIGluZGljYXRvciB3aWxsIGJlIHNob3duXG4gIEBJbnB1dCgpIGlzRWRpdGFibGU6IGFueTsgLy8gaWYgdHJ1ZSB0aGVuIHRhYmxlIHdpbGwgYmUgZWRpdGFibGVcbiAgQElucHV0KCkgZnJvbTogYW55OyAvLyBmcm9tIGRhdGUgcGFsdGZvcm0gYmFzZWQgaW5pdGlhbGl6ZSBpbnB1dHMgZXg6LSAnZm9ybUJ1aWxkZXInXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnk7IC8vIHF1ZXN0aW9uIGlzIHVzZWQgZm9yIG54dCBmb3JtIGJ1aWxkZXIgdGFibGUgcHJldmlld1xuICBASW5wdXQoKSByb3dUZXh0U2l6ZTogYW55OyAvLyBzaXplIG9mIHJvdyB0ZXh0XG4gIEBJbnB1dCgpIHJvd1RleHRDb2xvcjogYW55OyAvLyBjb2xvciBvZiByb3cgdGV4dFxuICBASW5wdXQoKSBhcGlNZXRhOiBzdHJpbmc7IC8vIGFwaSBtZXRhIGlzIHVzZWQgZm9yIG54dCBmb3JtIGJ1aWxkZXIgdGFibGUgcHJldmlld1xuICBASW5wdXQoKSBzdW1tYXJ5Um93czogYW55OyAvLyBJbnB1dCBmb3IgY29uZmlndXJhYmxlIHN1bW1hcnkgcm93c1xuICBASW5wdXQoKSBzdW1tYXJ5Q29sdW1uczogYW55OyAvLyBJbnB1dCBmb3Igc3VtbWFyeSBjb2x1bW5zIGNvbmZpZ1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IGFueTsgLy9TS1MyOE1BUjI1IElucHV0IGZvciBsb2FkaW5nIGluZGljYXRvclxuICBASW5wdXQoKSB0YWJsZUNvbmZpZzogYW55OyAvLyB0YWJsZSBjb25maWcgZm9yIG54dCBmb3JtIGJ1aWxkZXIgdGFibGVcbiAgQElucHV0KCkgdGFibGVQYXJhbXM6IGFueTsgLy9TS1MxN0FQUjI1IFJlY2VpdmVzIHRhYmxlUGFyYW1zIGluZm9ybWF0aW9uIGZyb20gcGFyZW50IGNvbXBvbmVudFxuXG4gIEBPdXRwdXQoKSB0YWJsZVJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBkYXRhcyB0byBiZSBwYXNzZWQgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICBAT3V0cHV0KCkgb25FZGl0RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gaWYgZWRpdCBidXR0b24gaXMgY2xpY2tlZCwgdGhlIGRhdGEgb2YgdGhhdCByb3cgd2lsbCBiZSBwYXNzZWRcbiAgQE91dHB1dCgpIHNhdmVCdXR0b25EYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBlZGl0ZWQgcm93cyBkYXRhIHdpbGwgYmUgcGFzc2VkXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47ICAvLyB3aGVuIGRlbGV0ZSBidXR0b24gY2xpY2tlZCBwYXNzIHRoZSBkYXRhXG4gIEBPdXRwdXQoKSBidXR0b25FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyB0aGlzIHdpbGwgZW1pdCBhIHRhYmxlIHRvcCBidXR0b24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIGh5cGVyTGlua0VtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGh5cGVyIGxpbmsgY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIHNpZGVOYXZFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgY29sOiBhbnksIGNvbmZpZzogYW55IH0+OyAvLyByaWdodG5hdiBjb2x1bW4gZW1pdFxuICBAT3V0cHV0KCkgYWN0aW9uQnV0dG9uRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gZGF0YXMgdG8gYmUgcGFzc2VkIHdoZW4gdGFibGUgcm93IGFjdGl2ZSBidXR0b24gaXMgY2xpY2tlZFxuICBAT3V0cHV0KCkgY29sdW1uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBzdHJpbmcsIGRhdGE6IGFueVtdIH0+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVDb2x1bW4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBzdHJpbmcsIGRhdGE6IGFueVtdIH0+KCk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWVzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTsgLy8gdG8gcGFzcyB0aGUgc2VsZWN0ZWQgY2hlY2tib3ggdmFsdWVzXG4gIEBPdXRwdXQoKSBmaWxlRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyB0byBwYXNzIHRoZSBmaWxlXG4gIEBPdXRwdXQoKSBOeHRUYWJsZVBhcmFtc0VtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vU0tTMTdBUFIyNSB0byBwYXNzIHRoZSB0YWJsZVBhcmFtcyBpbmZvcm1hdGlvblxuICBAT3V0cHV0KCkgTnh0VGFibGVFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyB7XG4gIC8vICAgXCJwYWdpbmF0aW9uXCI6IHsgICAgICAgLy8gNFxuICAvLyAgICAgICBcInBhZ2VTaXplXCI6IDEwLFxuICAvLyAgICAgICBcInBhZ2VJbmRleFwiOiAxMFxuICAvLyAgIH0sXG4gIC8vICAgXCJ0YWJsZVNlYXJjaFwiOiB7ICAgICAgLy8gMVxuICAvLyAgICAgICBcImZpZWxkc1wiIDogW1xuICAvLyAgICAgICAgICAgXCJsaWdodFR5cGVcIixcbiAgLy8gICAgICAgICAgIFwic3lzdGVtXCIsXG4gIC8vICAgICAgICAgICBcInN0YXR1c1wiXG4gIC8vICAgICAgIF0gLFxuICAvLyAgICAgICBcInZhbHVlXCI6ICdyLTAwMScgXG4gIC8vICAgfSwgIFxuICAvLyAgIFwic2VhcmNoRmlsdGVyRGF0YVwiOiB7ICAvLyAyXG4gIC8vICAgICAgIFwibGlnaHRUeXBlXCI6IFtcbiAgLy8gICAgICAgICAgIFwiQUFcIixcbiAgLy8gICAgICAgICAgIFwiQkJcIiBcbiAgLy8gICAgICAgXVxuICAvLyAgIH0sXG4gIC8vICAgXCJzb3J0XCI6IHsgICAgICAgICAgICAgIC8vIDNcbiAgLy8gICAgICAgXCJjb2x1bW5cIjogXCJhc3NldENvZGVcIixcbiAgLy8gICAgICAgXCJkaXJlY3Rpb25cIjogXCJhc2NcIlxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJykgdGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBzZWxlY3Rpb246IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWxlY3RlZCByb3dcbiAgc3RpY2t5Q29uZGl0aW9uITogbnVtYmVyOyAvLyB0byBnZXQgdGhlIHN0aWNreSBjb2x1bW4gaW5kZXhcbiAgc2VhcmNoRmlsdGVyID0gZmFsc2U7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGZpbHRlclxuICBmaWx0ZXJBcnJheTogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGZpbHRlciBhcnJheVxuICBzZWxlY3RlZEZpbHRlcjogYW55OyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIGZpbHRlclxuICByZW5kZXJDb2x1bW5zOiBzdHJpbmcgPSAnZGlzcGxheWVkQ29sdW1ucyc7IC8vIHRvIGdldCB0aGUgcmVuZGVyZWQgY29sdW1uc1xuICBwYWdlU2l6ZU9wdGlvbnM6IEFycmF5PGFueT4gIC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBzaXplIG9wdGlvbnNcbiAgZGF0YVNvdXJjZTogYW55OyAgLy8gZm9yIHRhYmxlIGRhdGEgc291cmNlXG4gIHRvdGFsQ291bnQhOiBudW1iZXIgLy8gY291bnQgb2YgdG90YWwgcmVjb3Jkc1xuICBzZWFyY2hCb3hWYWx1ZTogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCBib3ggdmFsdWVcbiAgcHJldlNlYXJjaDogYW55OyAvLyB0byBnZXQgdGhlIHByZXZpb3VzIHNlYXJjaCB2YWx1ZVxuICBhY3RpdmVDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB0aGUgYWN0aXZlIGNvbHVtblxuICBpc1Njcm9sbGVkID0gZmFsc2U7IC8vIEJvb2xlYW4gZmxhZyB0byB0cmFjayBzY3JvbGwgc3RhdGVcbiAgaXNTaGFkb3dIaWRkZW4gPSBmYWxzZTsgLy8gQm9vbGVhbiBmbGFnIHRvIHRyYWNrIHNoYWRvdyBzdGF0ZVxuICBjdXJyZW50U29ydENvbHVtbjogc3RyaW5nID0gJyc7IC8vIHRvIGdldCB0aGUgY3VycmVudCBzb3J0IGNvbHVtblxuICBjdXJyZW50U29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnbm9uZScgPSAnbm9uZSc7IC8vIHRvIGdldCB0aGUgY3VycmVudCBzb3J0IGRpcmVjdGlvblxuICBvcmlnaW5hbERhdGE6IGFueTsgLy8gU3RvcmUgb3JpZ2luYWwgZGF0YSBmb3Igc29ydGluZ1xuICBob3ZlcmVkQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIGhvdmVyZWQgY29sdW1uXG4gIHNlYXJjaFRleHQ6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggdGV4dFxuICBtdWx0aXBsZUZpbHRlckFycmF5OiBhbnk7IC8vIHRvIGdldCB0aGUgbXVsdGlwbGUgZmlsdGVyIGFycmF5XG4gIGZpbHRlckRhdGFBcnJheTogYW55ID0ge30gLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgZGF0YSBhcnJheVxuICBpc1Jlc2l6ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZm9yIHRhYmxlIGNvbHVtbiByZXNpemVcbiAgc0ZpbHRlckRhdGE6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggZmlsdGVyIGRhdGFcbiAgaGVhZGVyTGFiZWxzOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgaGVhZGVyIGxhYmVsc1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZGlzcGxheWVkIGNvbHVtbnNcbiAgZmlsdGVyQ29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGZpbHRlciBjb2x1bW5zXG4gIHNvcnRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGNvbHVtbnNcbiAgaHlwZXJMaW5rQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdOyAvLyB0byBnZXQgdGhlIGh5cGVyIGxpbmsgY29sdW1uc1xuICBlZGl0Q29sdW1uOiBBcnJheTxhbnk+ID0gW107ICAvLyB0byBnZXQgdGhlIGVkaXQgY29sdW1uXG4gIGRhdGVDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZGF0ZSBjb2x1bW5zXG4gIHRpbWVDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107ICAvLyB0byBnZXQgdGhlIHRpbWUgY29sdW1uc1xuICBvYmplY3RDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107ICAvLyB0byBnZXQgdGhlIG9iamVjdCBjb2x1bW5zXG4gIGZpbGVDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107ICAvLyB0byBnZXQgdGhlIGZpbGUgY29sdW1uc1xuICBib29sZWFuQ29sdW1ucyA6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgYm9vbGVhbiBjb2x1bW5zXG4gIGlubGluZUVsZW1lbnQ6IGFueSAvLyBmb3IgYWRkIGEgbmV3IHJvdyBvbiB0YWJsZVxuICBwYWdlU2l6ZTogYW55ICAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHBhZ2Ugc2l6ZVxuICBwYWdlSW5kZXg6IGFueSAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHBhZ2UgaW5kZXhcbiAgdG90YWxSZWNvcmRzOiBudW1iZXI7IC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgdG90YWwgcmVjb3Jkc1xuICBjb25maWdQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7IC8vIGZsYWcgZm9yIGNvbmZpZyBwYWdpbmF0aW9uXG4gIGRlbGV0ZURhdGE6IGFueTsgLy8gdG8gZ2V0IHRoZSBkZWxldGUgcm93XG4gIGRlbGV0ZU1vZGFsID0gZmFsc2U7IC8vIGZvciBjb25mb3JtYXRpb24gcG9wdXBcbiAgZHJvcGRvd25BY3Rpb25CdXR0b246IGFueTsgLy8gZm9yIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9uXG4gIGN1cnJlbnRPcGVuSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyB0cmFjayB0aGUgY3VycmVudCBvcGVuIGFjdGlvbiBkcm9wZG93biBpY29uIGluZGV4XG4gIGNsaWNrTGlzdGVuZXI6IGFueTsgLy8gYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b24gY2xpY2sgbGlzdGVuZXIgZm9yIGNsb3NlIGEgZHJvcGRvd24gYnV0dG9uXG4gIHNlbGVjdGVkQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gdG8gZ2V0IHRoZSBzZWxlY3RlZCBjb2x1bW5cbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247ICAvLyBmb3IgdGFibGUgZGF0YSBzdWJzY3JpcHRpb25cbiAgZGVsZXRlSW5kZXg6IG51bWJlcjsgLy8gdG8gZ2V0IHRoZSBkZWxldGUgaW5kZXhcbiAgc2hvd1BvcG92ZXIgPSB0cnVlO1xuICBzdW1tYXJ5VmFsdWVzOiB7IFtsYWJlbDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTsgLy8gU0tTMjBNQVIyNSBPYmplY3QgdG8gc3RvcmUgc3VtbWFyeSByb3cgdmFsdWVzXG4gIGlzU3VtbWFyeUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlOyAvLyBTS1MyME1BUjI1IEZsYWcgdG8gY2hlY2sgaWYgdGhlIGNvbHVtbiBpcyBpbiB0aGUgZGlzcGx5Y29sdW1ucyBhcnJheVxuICBpc1N1bW1hcnlTdGFydENvbHVtbjogYW55W107XG4gIGlzU3VtbWFyeUVuZENvbHVtbjogYW55W107XG4gIGZpbHRlckJveERhdGE6IGFueTtcbiAgZmlsdGVyVGFibGVOb3M6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB7IGRhdGE6IFtdIH07IC8vIG9yIHVzZSBhIHByb3BlciBkYXRhIHN0cnVjdHVyZVxuICAgIC8vIGNvbnNvbGUubG9nKFwibmdPbkNoYW5nZXMgaXMgcnVubmluZ1wiKVxuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMucXVlc3Rpb24/LmlucHV0ID8gdGhpcy5xdWVzdGlvbj8uaW5wdXQgOiBbXVxuICAgICAgY29uc3QgcGFyc2VkTWV0YSA9IHR5cGVvZiB0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10gPT09ICdvYmplY3QnID8gdGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddIDogSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xuICAgICAgaWYgKCBwYXJzZWRNZXRhID09PSBudWxsIHx8ICBwYXJzZWRNZXRhID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkocGFyc2VkTWV0YSkgfHwgcGFyc2VkTWV0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTm8gdmFsaWQgbWV0YWRhdGEgcHJvdmlkZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZztcbiAgICAgICAgdGhpcy5pc05vc0luZGljYXRvciA9IGNvbmZpZz8uaXNOb3NJbmRpY2F0b3IgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZElubGluZVJlY29yZCA9IGNvbmZpZy5hZGRJbmxpbmVSZWNvcmQgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUGFnaW5hdGlvbiA9IGNvbmZpZy5pc1BhZ2luYXRpb24gIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbiA9IGNvbmZpZy5hY3Rpb25CdXR0b24gIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRGVsZXRlUm93ID0gY29uZmlnLmlzRGVsZXRlUm93ICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0VkaXRSb3cgPSBjb25maWcuaXNFZGl0Um93ICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hCYXIgPSBjb25maWcuc2VhcmNoQmFyICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0J1dHRvbnMgPSBjb25maWcuaXNCdXR0b25zICE9PSBmYWxzZTsgLy9zdW1tYXJ5Q29sdW1uXG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBjb25maWcuaXRlbXNQZXJQYWdlIHx8IDU7XG4gICAgICB9XG4gICAgICB0aGlzLmhlYWRlckxhYmVscyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gIT09IHRydWUgJiYgY29sdW1uLnN1bW1hcnlSb3cgIT09IHRydWUgJiYgY29sdW1uLmxhYmVsKSAvLyBFeGNsdWRlIG9ubHkgd2hlbiBleHBsaWNpdGx5IHRydWVcbiAgICAgICAgLm1hcChjb2x1bW4gPT4gY29sdW1uLmxhYmVsKTtcblxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiAhPT0gdHJ1ZSAmJiBjb2x1bW4uc3VtbWFyeVJvdyAhPT0gdHJ1ZSAmJiBjb2x1bW4uYXBpTmFtZSkgLy8gRXhjbHVkZSBvbmx5IHdoZW4gZXhwbGljaXRseSB0cnVlXG4gICAgICAgIC5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcblxuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuc29ydENvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNvcnQgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmh5cGVyTGlua0NvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmh5cGVyTGluayA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZWRpdENvbHVtbiA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucmVhZE9ubHkgPT09IGZhbHNlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5kYXRlQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ0RhdGUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy50aW1lQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ1RpbWUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5vYmplY3RDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnT2JqZWN0JykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZmlsZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdGaWxlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuYm9vbGVhbkNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdCb29sZWFuJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG5cbiAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uID09PSB0cnVlKVxuICAgICAgICAubWFwKCh7IGFwaU5hbWUsIGZsZFR5cGUsIC4uLnJlc3QgfSkgPT4gKHtcbiAgICAgICAgICBmaWVsZE5hbWU6IGFwaU5hbWUsXG4gICAgICAgICAgdHlwZTogZmxkVHlwZSxcbiAgICAgICAgICAuLi5yZXN0XG4gICAgICAgIH0pKTtcbiAgICAgIHRoaXMuc3VtbWFyeVJvd3MgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Um93ID09PSB0cnVlKVxuICAgICAgICAubWFwKCh7IGFwaU5hbWUsIGZsZFR5cGUsIC4uLnJlc3QgfSkgPT4gKHtcbiAgICAgICAgICBmaWVsZE5hbWU6IGFwaU5hbWUsXG4gICAgICAgICAgdHlwZTogZmxkVHlwZSxcbiAgICAgICAgICAuLi5yZXN0XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLy8gRW5zdXJlIGB0aGlzLmRhdGFgIGlzIGFuIGFycmF5XG4gICAgaWYgKCF0aGlzLmRhdGEgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgY29uc29sZS53YXJuKCdEYXRhIGlzIG5vdCBpbml0aWFsaXplZCBvciBpcyBub3QgYW4gYXJyYXknKTtcbiAgICAgIHRoaXMuZGF0YSA9IFtdOyAgLy8gSW5pdGlhbGl6ZSBhcyBhbiBlbXB0eSBhcnJheSBpZiBpdCdzIG5vdCB2YWxpZFxuICAgIH1cbiAgICAvLyBFbnN1cmUgYHRoaXMuZGF0YVNvdXJjZS5kYXRhYCBpcyBpbml0aWFsaXplZFxuICAgIC8vU0tTMTVGRUIyNSBJbml0aWFsaXplIHRoaXMgaW4geW91ciBkYXRhIGZldGNoIG1ldGhvZFxuICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5zRmlsdGVyRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemUgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplJ10gOiB0aGlzLnBhZ2VTaXplIHx8IDEwO1xuICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VJbmRleCddIDogdGhpcy5wYWdlSW5kZXggfHwgMTtcbiAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMucGFnaW5hdGlvbj8udG90YWxSZWNvcmRzID8gdGhpcy5wYWdpbmF0aW9uWyd0b3RhbFJlY29yZHMnXSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZU9wdGlvbnMnXSA6IFsnNScsICcxMCcsICcyNScsICc1MCcsICcxMDAnLCAnMjAwJ107XG4gICAgdGhpcy5jb25maWdQYWdpbmF0aW9uID0gISEodGhpcy5wYWdpbmF0aW9uICYmIE9iamVjdC5rZXlzKHRoaXMucGFnaW5hdGlvbikubGVuZ3RoID4gMCk7XG4gICAgdGhpcy5pc1BhZ2luYXRpb24gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzUGFnaW5hdGlvbiA9PT0gdHJ1ZSA/IHRoaXMuaXNQYWdpbmF0aW9uID0gdHJ1ZSA6IHRoaXMuaXNQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5pc05vc0luZGljYXRvciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHRydWUgPyB0aGlzLmlzTm9zSW5kaWNhdG9yID0gdHJ1ZSA6IHRoaXMuaXNOb3NJbmRpY2F0b3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdGFibGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdGFibGUgPT09IGZhbHNlID8gdGhpcy5pc0VkaXRhYmxlID0gZmFsc2UgOiB0aGlzLmlzRWRpdGFibGUgPSB0cnVlXG5cblxuICAgIHRoaXMuaGVhZGVyTGFiZWxzID0gdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmxhYmVsKSA6IHRoaXMuaGVhZGVyTGFiZWxzO1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgIC8vIFNLUzIwTUFSMjUgQ2hlY2sgaWYgdGhlIGRpc3BseWNvbHVtbidzIGhhdmUgYSBzdW1tYXJ5IGNvbHVtblxuICAgIGlmICh0aGlzLnN1bW1hcnlDb2x1bW5zICYmIHRoaXMuc3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gWy4uLnRoaXMuZGlzcGxheWVkQ29sdW1ucywgLi4udGhpcy5zdW1tYXJ5Q29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpXTtcbiAgICAgIHRoaXMuaGVhZGVyTGFiZWxzID0gWy4uLnRoaXMuaGVhZGVyTGFiZWxzLCAuLi50aGlzLnN1bW1hcnlDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmxhYmVsKV07XG4gICAgfVxuICAgIGlmICh0aGlzLnN1bW1hcnlSb3dzICYmIHRoaXMuc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pc1N1bW1hcnlDb2x1bW4gPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuc29tZShlbGVtZW50ID0+IGVsZW1lbnQgPT09IHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgIGlmICh0aGlzLmlzU3VtbWFyeUNvbHVtbikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuaXNTdW1tYXJ5U3RhcnRDb2x1bW4gPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuc2xpY2UoMCwgaW5kZXggLSAxKTtcbiAgICAgICAgICB0aGlzLmlzU3VtbWFyeUVuZENvbHVtbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5maWx0ZXJDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNvcnQgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuaHlwZXJMaW5rQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaHlwZXJMaW5rID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5oeXBlckxpbmtDb2x1bW5zO1xuICAgIHRoaXMuZWRpdENvbHVtbiA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lZGl0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5lZGl0Q29sdW1uO1xuICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdkYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZGF0ZUNvbHVtbnM7XG4gICAgdGhpcy50aW1lQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ3RpbWUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy50aW1lQ29sdW1ucztcbiAgICB0aGlzLm9iamVjdENvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdvYmplY3QnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5vYmplY3RDb2x1bW5zO1xuICAgIHRoaXMuZmlsZUNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdmaWxlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsZUNvbHVtbnM7XG4gICAgdGhpcy5ib29sZWFuQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ2Jvb2xlYW4nKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5ib29sZWFuQ29sdW1ucztcblxuICAgIHRoaXMuaW5saW5lRWxlbWVudCA9IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmRpc3BsYXllZENvbHVtbnMubWFwKGtleSA9PiBba2V5LCBcIlwiXSkpO1xuXG4gICAgdGhpcy5kcm9wZG93bkFjdGlvbkJ1dHRvbiA9ICh0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheSAmJiB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheT8ubGVuZ3RoID4gMCkgPyB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheT8uc2xpY2UodGhpcy5hY3Rpb25CdXR0b25BcnJheT8uc2l6ZSkgOiBbXTtcblxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICAgIGlmICghdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2UoMCwgdGhpcy5wYWdlU2l6ZSB8fCAxMCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgfSwgMTAwKVxuICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuZGlzcGxheWVkQ29sdW1ucykge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgfVxuICAgIGlmICh0aGlzLndpdGhDaGVja0JveCAmJiB0aGlzLmFjdGlvbkJ1dHRvbikge1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2JvdGgnO1xuICAgIH0gZWxzZSBpZiAodGhpcy53aXRoQ2hlY2tCb3gpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdzZWxlY3QnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdhY3Rpb24nO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWwpIHtcbiAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDsgLy8gU2hvdyB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgICAgdGhpcy5wcmV2U2VhcmNoID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29uZmlnUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0ge307XG4gICAgICBjb25zdCBmaWx0T2JqczogYW55ID0ge307XG4gICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtlbGVtZW50XSA9IG51bGw7XG4gICAgICAgIGZpbHRPYmpzW2VsZW1lbnRdID0gW107XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgIGlmICh0YWJsZUJvZHkgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gISh0YWJsZUJvZHkuc2Nyb2xsSGVpZ2h0IDwgNDUwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTUwMCk7IC8vIFdhaXRzIDEwMG1zIGZvciByZW5kZXJpbmdcbiAgICAvLyBTS1MyME1BUjI1IEluaXRpYWxpemUgc3VtbWFyeVZhbHVlcyBmb3IgaW5wdXQgcm93cyBhbmQgY29tcHV0ZSB2YWx1ZXNcbiAgICBpZiAoY2hhbmdlc1snc3VtbWFyeVJvd3MnXSB8fCBjaGFuZ2VzWydzdW1tYXJ5Q29sdW1ucyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5jb21wdXRlU3VtbWFyeUNvbHVtbnMoKTsgLy8gQ29tcHV0ZSBwZXItcm93IHN1bW1hcnkgY29sdW1ucyBmaXJzdFxuICAgICAgdGhpcy5zdW1tYXJ5Um93cz8uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93LnR5cGUgPT09ICdpbnB1dCcgJiYgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAwOyAvLyBEZWZhdWx0IHRvIDAgZm9yIGlucHV0c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hDb25maWdzICYmIHRoaXMuc2VhcmNoQm94VmFsdWUgPyB0aGlzLmVtcHR5U2VhcmNoKHRoaXMuc2VhcmNoQm94VmFsdWUpIDogdGhpcy5hcHBseUZpbHRlcih0aGlzLnNlYXJjaEJveFZhbHVlKSAvLyBTS1MxN0FQUjI1IHVwZGF0ZSBzZWFyY2ggYm94IHZhbHVlXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB7IGRhdGE6IFtdIH07IC8vIG9yIHVzZSBhIHByb3BlciBkYXRhIHN0cnVjdHVyZVxuICAgIC8vIFNLUzEzTUFSMjUgZ2V0IGRhdGEgZnJvbSBxdWVzdGlvbiBpZiBmcm9tIGZvcm1CdWlsZGVyXG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5xdWVzdGlvbj8uaW5wdXQgPyB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA6IFtdXG4gICAgICBjb25zdCBwYXJzZWRNZXRhID0gdHlwZW9mIHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyB0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10gfHwgW10gOiBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSk7XG4gICAgICBpZiAoIHBhcnNlZE1ldGEgPT09IG51bGwgfHwgIHBhcnNlZE1ldGEgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnO1xuICAgICAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID0gY29uZmlnPy5pc05vc0luZGljYXRvciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID0gY29uZmlnLmFkZElubGluZVJlY29yZCAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYWdpbmF0aW9uID0gY29uZmlnLmlzUGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gY29uZmlnLmFjdGlvbkJ1dHRvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEZWxldGVSb3cgPSBjb25maWcuaXNEZWxldGVSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdFJvdyA9IGNvbmZpZy5pc0VkaXRSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaEJhciA9IGNvbmZpZy5zZWFyY2hCYXIgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQnV0dG9ucyA9IGNvbmZpZy5pc0J1dHRvbnMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uICE9PSB0cnVlICYmIGNvbHVtbi5zdW1tYXJ5Um93ICE9PSB0cnVlICYmIGNvbHVtbi5sYWJlbCkgLy8gRXhjbHVkZSBvbmx5IHdoZW4gZXhwbGljaXRseSB0cnVlXG4gICAgICAgIC5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCk7XG5cbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gIT09IHRydWUgJiYgY29sdW1uLnN1bW1hcnlSb3cgIT09IHRydWUgJiYgY29sdW1uLmFwaU5hbWUpIC8vIEV4Y2x1ZGUgb25seSB3aGVuIGV4cGxpY2l0bHkgdHJ1ZVxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zb3J0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5oeXBlckxpbmsgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmVkaXRDb2x1bW4gPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnJlYWRPbmx5ID09PSBmYWxzZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdEYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMudGltZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdUaW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMub2JqZWN0Q29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ09iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmZpbGVDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnRmlsZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmJvb2xlYW5Db2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnQm9vbGVhbicpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuXG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnN1bW1hcnlSb3dzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeVJvdyA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBvcHRpb25zID0gW107XG4gICAgICAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgdGhhdCB0aGlzLmFwaU1ldGEgaXMgYWx3YXlzIGFuIG9iamVjdC4gIFxuICAgICAgICAgLy9BUC0yNk1BUjI1IElmIGl0J3MgYWxyZWFkeSBhbiBvYmplY3QsIGtlZXAgaXQgYXMgaXM7IG90aGVyd2lzZSwgcGFyc2UgaXQgZnJvbSBhIEpTT04gc3RyaW5nLlxuICAgICAgICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgICAgICAgIGxldCBhcGlPYmo6IGFueSA9IHRoaXMuYXBpTWV0YTtcbiAgICAgICAgICBpZiAoYXBpT2JqICYmIGFwaU9iai5lbmRwb2ludCkge1xuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlcztcbiAgICAgICAgICAgIGlmIChhcGlPYmoudmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgLy8gVkQgMjJNYXkyNCAtIGhhbmRsaW5nIG11bHRpcGxlIGNoaWxkIG9iamVjdHNcbiAgICAgICAgICAgICAgcmVzcG9uc2VzID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgLy8gSEEgMTlKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3IgaW4gY29uc29sZVxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcCA9IHJlc3BvbnNlc1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3VsdHM7XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy8gVkQgMTlKQU4yNCAtIGlmIHJlc3BvbnNlIGhhcyB2YWx1ZSh3aGljaCBpcyBhcnJheSkgb25seVxuICAgICAgICAgICAgICByZXNwb25zZXMgPSBhcGlSZXNwb25zZTtcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gb3B0aW9ucztcblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVkQgTk9WMjMgLSBoYW5kbGUgdGhlIGRlcGVuZGVudCB1cGRhdGUgZm9yIGRyb3Bkb3duXG4gICAgICAgIGxldCBzb3VyY2VJZCA9IGFwaU9iaj8uc291cmNlUXVlc3Rpb25JZDtcbiAgICAgICAgbGV0IGZpZWxkID0gYXBpT2JqPy5maWVsZDsgICAgICAgIC8vIFZEIDEzTUFZMjQgLSBkeW5hbWljIGZpZWxkIGNoYW5nZXNcbiAgICAgICAgaWYgKHNvdXJjZUlkKSB7XG4gICAgICAgICAgLy8gLy8gVkQgMTBNYXkyNCBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBjaGFuZ2VWYWx1ZS52YWx1ZU9iajtcbiAgICAgICAgICAgICAgICAgIGxldCB2YWxpZEl0ZW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgLy8gVkQgMTNNQVkyNCAtIGJpbmQgZHluYW1pYyBmaWVsZFxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFZEIDI2SnVuMjQgLSB0byBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakVsZW1lbnRWYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZWxlbWVudCwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakl0ZW1WYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoaXRlbSwgZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9iakVsZW1lbnRWYWx1ZSA9PSBvYmpJdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkSXRlbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvL1JTIDE0RkVCMjAyNVxuICAgICAgICAgICAgICAgICAgLy9VcGRhdGUgUGFnaW5hdGlvbiBiZWZvcmUgZW1pdFxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhLCBpdGVtXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU0tTMjBNQVIyNSBNYW51YWxseSB0cmlnZ2VyIG5nT25DaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoe30pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShhcGlPYmo/LnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlYXJjaEJhciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VhcmNoQmFyID09PSB0cnVlID8gdGhpcy5zZWFyY2hCYXIgPSB0cnVlIDogdGhpcy5zZWFyY2hCYXIgPSBmYWxzZTtcbiAgICB0aGlzLndpdGhDaGVja0JveCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMud2l0aENoZWNrQm94ID09PSBmYWxzZSA/IHRoaXMud2l0aENoZWNrQm94ID0gZmFsc2UgOiB0aGlzLndpdGhDaGVja0JveCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdFJvdyA9PT0gZmFsc2UgPyB0aGlzLmlzRWRpdFJvdyA9IGZhbHNlIDogdGhpcy5pc0VkaXRSb3cgPSB0cnVlO1xuICAgIHRoaXMuaXNEZWxldGVSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRGVsZXRlUm93ID09PSBmYWxzZSA/IHRoaXMuaXNEZWxldGVSb3cgPSBmYWxzZSA6IHRoaXMuaXNEZWxldGVSb3cgPSB0cnVlO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3Rpb25CdXR0b24gPT09IGZhbHNlID8gdGhpcy5hY3Rpb25CdXR0b24gPSBmYWxzZSA6IHRoaXMuYWN0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmlzQnV0dG9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNCdXR0b25zID09PSBmYWxzZSA/IHRoaXMuaXNCdXR0b25zID0gZmFsc2UgOiB0aGlzLmlzQnV0dG9ucyA9IHRydWU7XG4gICAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmFkZElubGluZVJlY29yZCA9PT0gZmFsc2UgPyB0aGlzLmFkZElubGluZVJlY29yZCA9IGZhbHNlIDogdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSB0cnVlO1xuICAgIHRoaXMuaXNQYWdpbmF0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc1BhZ2luYXRpb24gPT09IHRydWUgPyB0aGlzLmlzUGFnaW5hdGlvbiA9IHRydWUgOiB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB0cnVlID8gdGhpcy5pc05vc0luZGljYXRvciA9IHRydWUgOiB0aGlzLmlzTm9zSW5kaWNhdG9yID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRhYmxlID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRhYmxlID09PSBmYWxzZSA/IHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlIDogdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZVxuXG5cbiAgICB0aGlzLmhlYWRlckxhYmVscyA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCkgOiB0aGlzLmhlYWRlckxhYmVscztcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZGlzcGxheWVkQ29sdW1ucztcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsuLi50aGlzLmRpc3BsYXllZENvbHVtbnMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKV07XG4gICAgICB0aGlzLmhlYWRlckxhYmVscyA9IFsuLi50aGlzLmhlYWRlckxhYmVscywgLi4udGhpcy5zdW1tYXJ5Q29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCldO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgICB0aGlzLnNvcnRDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc29ydCA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuc29ydENvbHVtbnM7XG4gICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaHlwZXJMaW5rID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5oeXBlckxpbmtDb2x1bW5zO1xuICAgIHRoaXMuZWRpdENvbHVtbiA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lZGl0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5lZGl0Q29sdW1uO1xuICAgIHRoaXMuZGF0ZUNvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnZGF0ZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSk6IHRoaXMuZGF0ZUNvbHVtbnM7XG4gICAgdGhpcy50aW1lQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICd0aW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMudGltZUNvbHVtbnM7XG4gICAgdGhpcy5vYmplY3RDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ29iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLm9iamVjdENvbHVtbnM7XG4gICAgdGhpcy5maWxlQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdmaWxlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsZUNvbHVtbnM7XG4gICAgdGhpcy5ib29sZWFuQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuYm9vbGVhbkNvbHVtbnM7XG5cbiAgICB0aGlzLmlubGluZUVsZW1lbnQgPSBPYmplY3QuZnJvbUVudHJpZXModGhpcy5kaXNwbGF5ZWRDb2x1bW5zLm1hcChrZXkgPT4gW2tleSwgXCJcIl0pKTtcblxuICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZSddIDogdGhpcy50YWJsZVBhcmFtcz8ucGFnaW5hdGlvbj8ucGFnZVNpemUgfHwxMDtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZUluZGV4ID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlSW5kZXgnXSA6IHRoaXMudGFibGVQYXJhbXM/LnBhZ2luYXRpb24/LnBhZ2VJbmRleCB8fDE7XG4gICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnBhZ2luYXRpb24/LnRvdGFsUmVjb3JkcyA/IHRoaXMucGFnaW5hdGlvblsndG90YWxSZWNvcmRzJ10gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemVPcHRpb25zJ10gOiBbJzUnLCAnMTAnLCAnMjUnLCAnNTAnLCAnMTAwJywgJzIwMCddO1xuICAgIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9ICEhKHRoaXMucGFnaW5hdGlvbiAmJiBPYmplY3Qua2V5cyh0aGlzLnBhZ2luYXRpb24pLmxlbmd0aCA+IDApO1xuXG4gICAgdGhpcy5kcm9wZG93bkFjdGlvbkJ1dHRvbiA9IHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zbGljZSh0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5zaXplKTtcblxuICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5zRmlsdGVyRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ1BhZ2luYXRpb24gJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2UoMCwgdGhpcy5wYWdlU2l6ZSB8fCAxMCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29uZmlnUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0ge307XG4gICAgICBjb25zdCBmaWx0T2JqczogYW55ID0ge307XG4gICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtlbGVtZW50XSA9IG51bGw7XG4gICAgICAgIGZpbHRPYmpzW2VsZW1lbnRdID0gW107XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgfSwgMClcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIGNvbnN0IE54dERhdGFUYWJsZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ054dERhdGFUYWJsZScpKTtcbiAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID0gTnh0RGF0YVRhYmxlPy5jdXJyZW50U29ydENvbHVtbjtcbiAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gTnh0RGF0YVRhYmxlPy5jdXJyZW50U29ydERpcmVjdGlvbjtcbiAgICBpZiAoTnh0RGF0YVRhYmxlPy5hZGRSZWNvcmQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSBOeHREYXRhVGFibGU/LnBhZ2VTaXplXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IE54dERhdGFUYWJsZT8ucGFnZUluZGV4XG4gICAgICB2YXIgb2JqOiBhbnkgPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmlubGluZUVsZW1lbnQpO1xuICAgICAga2V5cy5mb3JFYWNoKChlbGVtZW50S2V5OiBhbnkpID0+IHtcbiAgICAgICAgb2JqW2VsZW1lbnRLZXldID0gJyc7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG9iaik7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdKTtcbiAgICAgIHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0uZWRpdFJvdyA9IHRydWU7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IGZhbHNlLCBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMpIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGggKyAxO1xuICAgIH1cbiAgICBpZiAodGhpcy53aXRoQ2hlY2tCb3ggJiYgdGhpcy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdib3RoJztcbiAgICB9IGVsc2UgaWYgKHRoaXMud2l0aENoZWNrQm94KSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnc2VsZWN0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aW9uQnV0dG9uKSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnYWN0aW9uJztcbiAgICB9XG5cbiAgICAvLyBTS1MxOU1BUjI1IGFkZCBmaXJzdCBsaW5lIGZvciBmb3JtYnVpbGRlciB0YWJsZVxuICAgIGlmICh0aGlzLmlzRWRpdGFibGUpIHsgdGhpcy5hZGRUYWJsZVJlY29yZCh0aGlzLmlubGluZUVsZW1lbnQpIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgIGlmICh0YWJsZUJvZHkgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gISh0YWJsZUJvZHkuc2Nyb2xsSGVpZ2h0IDwgNDUwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTUwMCk7IC8vIFdhaXRzIDEwMG1zIGZvciByZW5kZXJpbmdcbiAgICAvLyBTS1MxN0FQUjI1IHRhYmxlIHBhcmVtcyBkYXRhIHVwZGF0ZVxuICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbCkge1xuICAgICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsOyAvLyBTaG93IHZhbHVlIGluIHRoZSBzZWFyY2ggYm94XG4gICAgICB0aGlzLnByZXZTZWFyY2ggPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDtcbiAgICB9IGVsc2UgaWYodGhpcy50YWJsZVBhcmFtcz8udGFibGVTZWFyY2gpe1xuICAgICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IHRoaXMudGFibGVQYXJhbXM/LnRhYmxlU2VhcmNoO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaENvbmZpZ3MgJiYgdGhpcy5zZWFyY2hCb3hWYWx1ZSA/IHRoaXMuZW1wdHlTZWFyY2godGhpcy5zZWFyY2hCb3hWYWx1ZSkgOiB0aGlzLmFwcGx5RmlsdGVyKHRoaXMuc2VhcmNoQm94VmFsdWUpXG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXkgPSB0aGlzLnRhYmxlUGFyYW1zPy5zZWFyY2hGaWx0ZXJEYXRhID8gdGhpcy50YWJsZVBhcmFtcz8uc2VhcmNoRmlsdGVyRGF0YSA6IHt9O1xuICAgIHRoaXMuc29ydERhdGEodGhpcy50YWJsZVBhcmFtcz8uc29ydD8uY29sdW1uLCB0aGlzLnRhYmxlUGFyYW1zPy5zb3J0Py5kaXJlY3Rpb24pXG4gIH1cblxuICAvLyBTS1MyME1BUjI1IHN1bW1hcnkgY29sdW1ucyBjYWxjXG4gIGNvbXB1dGVTdW1tYXJ5Q29sdW1ucygpIHtcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAocm93ID0+IHtcbiAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgdGhpcy5zdW1tYXJ5Q29sdW1ucy5mb3JFYWNoKHN1bW1hcnlDb2wgPT4ge1xuICAgICAgICAgIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdW0nICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyArIChOdW1iZXIobmV3Um93W29wZXJhbmRdKSB8fCAwKSwgMCk7XG4gICAgICAgICAgICBuZXdSb3dbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdE9wZXJhbmQsIC4uLnJlc3RPcGVyYW5kc10gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzO1xuICAgICAgICAgICAgbGV0IHN1bSA9IE51bWJlcihuZXdSb3dbZmlyc3RPcGVyYW5kXSkgfHwgMDsgLy8gU3RhcnQgd2l0aCB0aGUgZmlyc3Qgb3BlcmFuZFxuICAgICAgICAgICAgc3VtID0gcmVzdE9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG5ld1Jvd1tvcGVyYW5kXSkgfHwgMCksIHN1bSk7XG4gICAgICAgICAgICBuZXdSb3dbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3QgPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG5ld1Jvd1tvcGVyYW5kXSkgfHwgMCksIDEpOyAvLyBTdGFydCB3aXRoIDFcbiAgICAgICAgICAgIG5ld1Jvd1tzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBwcm9kdWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhOyAvLyBVcGRhdGUgZGF0YVNvdXJjZVxuICAgICAgaWYgKCF0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmRhdGEgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKDAsIHRoaXMucGFnZVNpemUgfHwgMTApO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gU0tTMjBNQVIyNSBDb21wdXRlIHZhbHVlcyBmb3Igc3VtbWFyeSByb3dzXG4gIGNvbXB1dGVTdW1tYXJ5VmFsdWVzKCkge1xuICAgIHRoaXMuc3VtbWFyeVJvd3M/LmZvckVhY2gocm93ID0+IHtcbiAgICAgIGlmIChyb3cudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJykge1xuICAgICAgICBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ3N1bScgJiYgcm93LmNvbHVtbikge1xuICAgICAgICAgIC8vIENvcnJlY3Qgc3VtIG9wZXJhdGlvblxuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9IHRoaXMuZGF0YS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkYXRhUm93KSA9PiBhY2MgKyAoTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDApLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiByb3cuY29sdW1uKSB7XG4gICAgICAgICAgLy8gU3VidHJhY3Qgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHZhbHVlXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gdGhpcy5kYXRhLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGRhdGFSb3csIGluZGV4KSA9PiBpbmRleCA9PT0gMCA/IE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwIDogYWNjIC0gKE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwKSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgcm93LmNvbHVtbikge1xuICAgICAgICAgIC8vIE11bHRpcGx5IHNob3VsZCBzdGFydCB3aXRoIDFcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSB0aGlzLmRhdGEucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgZGF0YVJvdykgPT4gYWNjICogKE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwKSwgLy8gVXNlIDEgaW5zdGVhZCBvZiAwXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHJvdy5vcGVyYW5kcykge1xuICAgICAgICAgIC8vIFN1YnRyYWN0IGJhc2VkIG9uIG9wZXJhbmRzXG4gICAgICAgICAgY29uc3QgW29wMSwgb3AyXSA9IHJvdy5vcGVyYW5kcztcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMV0gfHwgMCkgLSAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMl0gfHwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ3N1bScgJiYgcm93Lm9wZXJhbmRzKSB7XG4gICAgICAgICAgLy8gU3VtIGJhc2VkIG9uIG9wZXJhbmRzXG4gICAgICAgICAgY29uc3QgW29wMSwgb3AyXSA9IHJvdy5vcGVyYW5kcztcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMV0gfHwgMCkgKyAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMl0gfHwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiByb3cub3BlcmFuZHMpIHtcbiAgICAgICAgICAvLyBNdWx0aXBseSBiYXNlZCBvbiBvcGVyYW5kc1xuICAgICAgICAgIGNvbnN0IFtvcDEsIG9wMl0gPSByb3cub3BlcmFuZHM7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDFdIHx8IDApICogKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDJdIHx8IDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBTS1MyME1BUjI1IEhhbmRsZSBtYW51YWwgaW5wdXQgY2hhbmdlcyBpbiBzdW1tYXJ5IHJvd3MgXG4gIG9uU3VtbWFyeUlucHV0Q2hhbmdlKCkge1xuICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgfVxuICAvLyBTS1MxNUZFQjI1IEN1c3RvbSBzb3J0IGZ1bmN0aW9uXG4gIHNvcnREYXRhKGNvbHVtbjogc3RyaW5nLCBzb3J0aW5nU3RhdGU/OiBhbnkgfCB1bmRlZmluZWQpIHtcbiAgICAvLyBEZWZpbmUgc29ydGluZyBzdGF0ZXNcbiAgICBjb25zdCBzb3J0aW5nU3RhdGVzID0gWydhc2MnLCAnZGVzYycsICdub25lJ107XG4gICAgaWYgKCF0aGlzLmNvbmZpZ1BhZ2luYXRpb24gfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGVcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4gJiYgIXNvcnRpbmdTdGF0ZSkge1xuICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNvcnRpbmcgc3RhdGVcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gc29ydGluZ1N0YXRlcy5pbmRleE9mKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gc29ydGluZ1N0YXRlc1soY3VycmVudEluZGV4ICsgMSkgJSBzb3J0aW5nU3RhdGVzLmxlbmd0aF0gYXMgXCJhc2NcIiB8IFwiZGVzY1wiIHwgXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhIG5ldyBjb2x1bW4gaXMgc2VsZWN0ZWQsIHN0YXJ0IHdpdGggYXNjZW5kaW5nIHNvcnRcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZSB8fCAnYXNjJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlLmRhdGFdO1xuICAgICAgLy8gT25seSBzb3J0IGlmIHRoZSBkaXJlY3Rpb24gaXMgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgfHwgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZUEgPSB0aGlzLmdldFZhbHVlKGEsIGNvbHVtbik7XG4gICAgICAgICAgbGV0IHZhbHVlQiA9IHRoaXMuZ2V0VmFsdWUoYiwgY29sdW1uKTtcbiAgICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkIG9yIG51bGwgdmFsdWVzXG4gICAgICAgICAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSByZXR1cm4gMDsgLy8gQm90aCBhcmUgbnVsbC91bmRlZmluZWRcbiAgICAgICAgICBpZiAodmFsdWVBID09IG51bGwpIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTsgLy8gdmFsdWVBIGlzIG51bGxcbiAgICAgICAgICBpZiAodmFsdWVCID09IG51bGwpIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTsgLy8gdmFsdWVCIGlzIG51bGxcbiAgICAgICAgICAvLyBIYW5kbGUgZGF0ZSBzb3J0aW5nXG4gICAgICAgICAgaWYgKHRoaXMuaXNEYXRlQ29sdW1uKGNvbHVtbikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUodmFsdWVBKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUodmFsdWVCKTtcbiAgICAgICAgICAgIHZhbHVlQSA9IGRhdGVBLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IGRhdGVCLmdldFRpbWUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbnVtYmVyIHNvcnRpbmdcbiAgICAgICAgICAgIHZhbHVlQSA9IE51bWJlcih2YWx1ZUEpO1xuICAgICAgICAgICAgdmFsdWVCID0gTnVtYmVyKHZhbHVlQik7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWVBID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVCID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN0cmluZyBjb21wYXJpc29uXG4gICAgICAgICAgICB2YWx1ZUEgPSB2YWx1ZUEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IHZhbHVlQi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDb21wYXJlIHZhbHVlc1xuICAgICAgICAgIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlQSA+IHZhbHVlQikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB2YWx1ZXMgYXJlIHRoZSBzYW1lLCByZXR1cm4gMCB0byBtYWludGFpbiBvcmlnaW5hbCBvcmRlclxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmZpbHRlckJveERhdGEgPyB0aGlzLmZpbHRlckJveERhdGE/LnNsaWNlKDAsIHRoaXMucGFnZVNpemUgfHwgMTApIDogdGhpcy5kYXRhPy5zbGljZSgwLCB0aGlzLnBhZ2VTaXplIHx8IDEwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGVcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBzb3J0aW5nIHN0YXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNvcnRpbmdTdGF0ZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZXNbKGN1cnJlbnRJbmRleCArIDEpICUgc29ydGluZ1N0YXRlcy5sZW5ndGhdIGFzIFwiYXNjXCIgfCBcImRlc2NcIiB8IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBuZXcgY29sdW1uIGlzIHNlbGVjdGVkLCBzdGFydCB3aXRoIGFzY2VuZGluZyBzb3J0XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdOeHREYXRhVGFibGUnLCBKU09OLnN0cmluZ2lmeSh7IGFkZFJlY29yZDogZmFsc2UsIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgICAgLy8gT25seSBzb3J0IGlmIHRoZSBkaXJlY3Rpb24gaXMgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICB0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSB9KVxuICAgIH1cbiAgICB0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9fSlcbiAgfVxuXG4gIG9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuaXNTY3JvbGxlZCA9IHRhYmxlQ29udGFpbmVyLnNjcm9sbFRvcCA+IDA7XG4gICAgY29uc3QgdGFibGVCb2R5SGVpZ2h0ID0gdGFibGVDb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IGlzQXRCb3R0b20gPSB0YWJsZUJvZHlIZWlnaHQgLSB0YWJsZUNvbnRhaW5lci5zY3JvbGxUb3AgPD0gdGFibGVDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICAvL1NLUzE1RkVCMjUgRW5zdXJlIHNoYWRvdyBpcyBoaWRkZW4gb25seSBpZiB0YWJsZSBib2R5IGhlaWdodCBpcyBncmVhdGVyIHRoYW4gNDAwcHhcbiAgICBpZiAodGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuaXNTaGFkb3dIaWRkZW4gPSAhKGlzQXRCb3R0b20gfHwgdGFibGVCb2R5SGVpZ2h0IDwgNDUwKTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgbG9zaW5nIHRoZSBmaWx0ZXIgY29tcG9uZW50IHdoZW4gdGhlIG1vdXNlIGlzIGNsaWNrZWQgb3V0c2lkZSB0YWJsZVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIG9uRG9jdW1lbnRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSBmYWxzZTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gcHJldmVudHMgYW55IG90aGVyIGRlZmF1bHQgYWN0aW9uXG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZmlsdGVyIGRhdGEgdGhhdCB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyIGZpbHRlciBpY29uIGlzIHBhc3NlZCBpbiAnZmlsdGVyQXJyYXknIGFycmF5XG4gIGZpbHRlcihkYXRhczogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJBcnJheSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXIgPSBkYXRhcztcbiAgICB0aGlzLmZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5Py5bZGF0YXNdO1xuICAgIHRoaXMuc2VhcmNoRmlsdGVyID0gIXRoaXMuc2VhcmNoRmlsdGVyO1xuICAgIHRoaXMuaXNSZXNpemVkID0gdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0/Lmxlbmd0aCA+IDBcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGVtaXR0aW5nIHBhZ3Igc2l6ZSBhbmQgaW5kZXggdG8gcGFyZW50IG9uIHBhZ2luYXRpbmdcbiAgcGFnZVBhcmFtcyhldmVudDogYW55KSB7XG4gICAgdGhpcy5hcHBseUZpbHRlcih0aGlzLnNlYXJjaEJveFZhbHVlKVxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMuZmlsdGVyQm94RGF0YT8ubGVuZ3RoXG4gICAgaWYgKCF0aGlzLmNvbmZpZ1BhZ2luYXRpb24gfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKGV2ZW50LnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcihldmVudC5wYWdlU2l6ZSk7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcihldmVudC5wYWdlU2l6ZSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZmlsdGVyQm94RGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiBldmVudC5wYWdlU2l6ZSwgcGFnZUluZGV4OiBldmVudC5wYWdlSW5kZXggfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0gfSlcbiAgICB9XG4gICAgdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfX0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGFwcGx5IHNlYXJjaCBiYXIgZmlsdGVyIHVzaW5nIG1hdFxuICBhcHBseUZpbHRlcihldmVudDogYW55KSB7XG4gICAgbGV0IGZpbHRlclZhbHVlID0gZXZlbnQ7XG4gICAgZmlsdGVyVmFsdWUgPyBmaWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogZmlsdGVyVmFsdWUgPSAnJztcbiAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gZmlsdGVyVmFsdWVcbiAgICBpZiAoIWZpbHRlclZhbHVlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLm9yaWdpbmFsRGF0YV07IC8vIFJlc2V0IHRvIG9yaWdpbmFsIGRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5maWx0ZXIoaXRlbSA9PlxuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuc29tZShjb2x1bW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2x1bW5dPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnNGaWx0ZXJEYXRhPy5sZW5ndGhcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmRhdGEubGVuZ3RoXG4gICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHRoaXMuZmlsdGVyUmV0YWluKHRoaXMuZmlsdGVyRGF0YUFycmF5KVxuICB9XG5cbiAgLyoqIFNLUzE1RkVCMjUgV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIGNoZWNrIGlmIGFsbCByb3dzIGFyZSBzZWxlY3RlZFxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICB9XG5cbiAgLyoqIFNLUzE1RkVCMjUgU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gdGhlbiBjbGVhciB0aGF0IHNlbGVjdGlvblxuICAgIC8vIGVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlIG9ubHkgdG8gcGFyZW50XG4gICAgaWYgKHRoaXMuaXNTb21lU2VsZWN0ZWQoKSkge1xuICAgICAgLy8gICB0byByZW1vdmUgdGhlIGVkaXRSb3csIGlmIHRoZSBjaGVja2JveCBpcyB1bmNoZWNrZWRcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudD8uZWRpdFJvdykgZWxlbWVudC5lZGl0Um93ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQsIGVpdGhlciBzZWxlY3QgYWxsIGl0ZW1zIG9yIGNsZWFyIHRoZSBzZWxlY3Rpb25cbiAgICAgIC8vIGVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlcyB0byBwYXJlbnRcbiAgICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID8gdGhpcy5zZWxlY3Rpb24uY2xlYXIoKSA6IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvLyBTS1MxNUZFQjI1IENoZWNrcyB3aGV0aGVyIGFueSBpdGVtcyBhcmUgY3VycmVudGx5IHNlbGVjdGVkIGluIHRoZSB0YWJsZS5cbiAgaXNTb21lU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDA7XG4gIH1cblxuXG4gIC8vIFNLUzE1RkVCMjUgZW1pdCB0aGUgY2hlY2sgYm94IHZhbHVlcywgdGhhdCBzZWxlY3RlZCBzZXBhcmF0ZWx5XG4gIHNlcGFyYXRlUm93U2VsZWN0KGRhdGE6IGFueSwgZWxlbWVudDogYW55KSB7XG4gICAgLy8gICB0byByZW1vdmUgdGhlIGVkaXRSb3cgaWQgY2hlY2sgYm94IGlzIHVuY2hlY2tlZCBvbiBzZXBhcmF0ZSByb3dcbiAgICBpZiAoZGF0YSAmJiBlbGVtZW50Py5lZGl0Um93KSB7XG4gICAgICBlbGVtZW50LmVkaXRSb3cgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZClcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZGF0YSB0aGF0IHRvIGJlIHBhc3NlZCwgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICB0YWJsZUNsaWNrKGRhdGE6IGFueSkge1xuICAgIHRoaXMudGFibGVSb3dDbGljay5lbWl0KGRhdGEpO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IFJldGFpbiB0aGUgZmlsdGVyZGF0YVxuICBmaWx0ZXJSZXRhaW4oZmlsdGVya2V5OiBhbnkpIHtcbiAgICBpZiAoZmlsdGVya2V5ICYmIE9iamVjdC5rZXlzKGZpbHRlcmtleSkubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuc0ZpbHRlckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgbGV0IGlzRGF0YUNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpKSB7XG4gICAgICAgIGlmIChmaWx0ZXJrZXlba2V5XSAmJiBmaWx0ZXJrZXlba2V5XS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaXNEYXRhQ2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaXNEYXRhQ2hlY2tlZCkge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGZpbHRlcmtleSkpIHtcbiAgICAgICAgICBpZiAoZmlsdGVya2V5W2tleV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhLmZpbHRlcigobmFtZTogYW55KSA9PiBmaWx0ZXJrZXlba2V5XT8uaW5jbHVkZXMobmFtZVtrZXldKSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhMSA9IFsuLi50aGlzLmRhdGEsIC4uLmRhdGFdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzKGRhdGExKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMuZmlsdGVyQm94RGF0YSA9IHRoaXMuZGF0YVxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLmZpbHRlckJveERhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YVxuICAgIHRoaXMuc29ydERhdGEodGhpcy5jdXJyZW50U29ydENvbHVtbiAsdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbilcbiAgfVxuXG4vLyBTS1MxNUZFQjI1IHRvIHJlbW92ZSBkdXBsaWNhdGUgb2JqZWN0IGZyb20gdHdvIGFycmF5cyAoc2FmZSBzdHJpbmdpZnkpXG5yZW1vdmVEdXBsaWNhdGVzKG9iamVjdHM6IGFueSkge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHVuaXF1ZU9iamVjdHM6IGFueVtdID0gW107XG5cbiAgY29uc3Qgc2FmZVN0cmluZ2lmeSA9IChvYmo6IGFueSkgPT4ge1xuICAgIGNvbnN0IHNlZW5PYmpzID0gbmV3IFdlYWtTZXQoKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsOyAvLyByZXBsYWNlIHVuZGVmaW5lZCB0byBhdm9pZCBpc3N1ZXNcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlZW5PYmpzLmhhcyh2YWx1ZSkpIHJldHVybjsgLy8gc2tpcCBjaXJjdWxhclxuICAgICAgICBzZWVuT2Jqcy5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICB9O1xuXG4gIG9iamVjdHMuZm9yRWFjaCgob2JqOiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXkgPSBzYWZlU3RyaW5naWZ5KG9iaik7XG4gICAgaWYgKCFzZWVuLmhhcyhrZXkpKSB7XG4gICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgdW5pcXVlT2JqZWN0cy5wdXNoKG9iaik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdW5pcXVlT2JqZWN0cztcbn1cblxuICAvLyBTS1MxNUZFQjI1ICBvbiBkZWxldGUgY2xpY2sgc2F2ZSB0aGUgZGF0YSBpbiB2YXJpYWJsZXNcbiAgZGVsZXRlUmVjb3JkKGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTsgLy8gQ3JlYXRlIGEgbmV3IHJlZmVyZW5jZVxuICAgICAgdXBkYXRlZERhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdXBkYXRlZERhdGE7IC8vIFJlYXNzaWduIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgdGhpcy5kYXRhID0gdXBkYXRlZERhdGE7IC8vIFN5bmMgdGhpcy5kYXRhXG4gICAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gICAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLmRhdGFTb3VyY2UuZGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxldGVEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZGVsZXRlSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuZGVsZXRlTW9kYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFmdGVyIGNsaWNraW5nIHllcyBpbiBkZWxldGUgYWxlcnQgbW9kYWwsIGVtaXQgdG8gcGFyZW50XG4gIGRlbGV0ZVJlY29yZERhdGEoKSB7XG4gICAgdGhpcy5vbkRlbGV0ZURhdGEuZW1pdCh7IGRhdGE6IHRoaXMuZGVsZXRlRGF0YSwgYWxsRGF0YTogdGhpcy5kYXRhIH0pO1xuICAgIHRoaXMuZGVsZXRlTW9kYWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSB0byBzYXZlIHRoZSBlZGl0ZWQgZGF0YSBpbiB0YWJsZTtcbiAgc2F2ZUJ1dHRvbigpIHtcbiAgICAvLyBlbWl0dGluZyBhbGwgZGF0YSB3aXRoIHNlbGVjdGVkIGRhdGFcbiAgICB0aGlzLnNhdmVCdXR0b25EYXRhLmVtaXQoeyBzZWxlY3RlZERhdGE6IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLCBhbGxEYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgcGFzcyB0aGUgcmVqZWN0ZWQgcmVhc29uXG4gIG9uRWRpdChkYXRhOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSBkYXRhLmVkaXRSb3cgPSB0cnVlOyAvLyBtYWRlIGVkaXRpbmcgcm93IGFzIHRydWUgLy8gIHNvbHZlIHVuZGVmaW5lZCBlcnJvciBvbiBzdHJpbmdcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoZGF0YSk7XG4gICAgdGhpcy5vbkVkaXREYXRhLmVtaXQoeyBkYXRhOiBkYXRhLCBhbGxEYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHRhYmxlIHRvcCBidXR0b25zIGVtaXRcbiAgY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcbiAgICB0aGlzLmJ1dHRvbkVtaXQuZW1pdChidXR0b24pO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgZGF0YSBmcm9tIG9iamVjdHMuIFxuICAvLyBJbiAnZWxlbWVudCcgd2Ugd2lsbCBwYXNzIG9iamVjdCBhbmQgaW4gJ2NvbHVtbicgd2Ugd2lsbCBwYXNzIHBhdGggYXMgc3RyaW5nIGVnLmVtcGxveWVlLmZpbmFuY2VJbmZvWzBdLnVhbiB0byByZXRpZXZlIHVhbiB2YWx1ZSBcbiAgZ2V0VmFsdWUoZWxlbWVudDogYW55LCBjb2x1bW46IHN0cmluZykge1xuICAgIGlmICghZWxlbWVudCB8fCAhY29sdW1uKSB7XG4gICAgICByZXR1cm4gJyc7IC8vIFJldHVybiBlbXB0eSBzdHJpbmcgb3IgbnVsbCBpZiBlbGVtZW50IG9yIGNvbHVtbiBpcyBpbnZhbGlkXG4gICAgfVxuICAgIGxldCBmbGRzID0gY29sdW1uLnNwbGl0KCcuJyk7XG4gICAgbGV0IGN1cnJlbnQgPSBlbGVtZW50O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHNwbGl0RmxkcyA9IGZsZHNbaV0uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2ZsZHNbaV1dID8/ICcnOyAvLyBVc2UgbnVsbGlzaCBjb2FsZXNjaW5nIHRvIGhhbmRsZSB1bmRlZmluZWQvbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbc3BsaXRGbGRzWzBdXT8uW2luZGV4XSA/PyAnJzsgLy8gU2FmZWx5IGFjY2VzcyBhcnJheSBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuICAvL1NLUzE1RkVCMjUgaHlwZXJsaW5sIGNvbHVtbnMgb25seSBlbWl0dGVkXG4gIG9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uOiBhbnksIGVsZW1lbnQ6IGFueSwgaXNIeXBlckxpbms6IGFueSkge1xuICAgIGlmIChpc0h5cGVyTGluaykgdGhpcy5oeXBlckxpbmtFbWl0LmVtaXQoeyBjb2x1bW46IGNvbHVtbiwgZWxlbWVudDogZWxlbWVudCB9KTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgdG8gY2hlY2sgd2hldGhlciB0aGUgaHlwZXJsaW5rIGFjdGlvbiBpcyBwcmVzZW50IGluIHRoYXQgY29sdW1uXG4gIGNoZWNrSHlwZXJsaW5rQ2hlY2soY29sOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBlckxpbmtDb2x1bW5zPy5pbmNsdWRlcyhjb2wpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBvbiBhZGQgcmVjb3JkIGluIHRhYmxlLCB0aGUgJ2lubGluZUVsZW1lbnQnIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSB0YWJsZSBkYXRhIFxuICBhZGRUYWJsZVJlY29yZChlbGVtZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnUGFnaW5hdGlvbiB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICB2YXIgb2JqOiBhbnkgPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcbiAgICAgIGtleXMuZm9yRWFjaCgoZWxlbWVudEtleTogYW55KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50S2V5XSA9ICcnO1xuICAgICAgfSk7XG4gICAgICAvLyBTS1MyME1BUjI1IENvbXB1dGUgc3VtbWFyeSBjb2x1bW5zIGZvciB0aGUgbmV3IHJvd1xuICAgICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgICBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKyAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMuc2xpY2UoMSkucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIE51bWJlcihvYmpbc3VtbWFyeUNvbC5vcGVyYW5kc1swXV0pIHx8IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gcHJvZHVjdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhLnB1c2gob2JqKTtcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZGF0YTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcblxuICAgICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuZGlzcGxheWVkQ29sdW1ucykge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuZGF0YS5sZW5ndGhcbiAgICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgKz0gMSBcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gTWF0aC5jZWlsKHRoaXMudG90YWxDb3VudCAvIHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSk7XG4gICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyAxMCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IHRydWUsIHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiBwYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgICB0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogcGFnZUluZGV4IH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9IH0pXG4gICAgfVxuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG4gICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygpO1xuICAgIHRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH19KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBBY3Rpb24gYnV0dG9uIGNvbmRpdGlvbmFsbHkgZGlzcGxheWVkIGZ1bmN0aW9uXG4gIGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQ6IGFueSwgY29uZGl0aW9uczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBhbmRDb25kaXRpb25MaXN0LCBvckNvbmRpdGlvbkxpc3QgfSA9IGNvbmRpdGlvbnM7XG4gICAgICAvLyAgSWYgYW5kQ29uZGl0aW9uTGlzdCBleGlzdHMsIGNoZWNrIHRoYXQgYWxsIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgICAgY29uc3QgaXNBbmRDb25kaXRpb25NZXQgPSBhbmRDb25kaXRpb25MaXN0ID8gYW5kQ29uZGl0aW9uTGlzdC5ldmVyeSgoY29uZDogeyBjb25kaXRpb246IHN0cmluZyB8IGFueVtdOyBjb2x1bW46IHN0cmluZyB8IG51bWJlcjsgfSkgPT5cbiAgICAgICAgY29uZC5jb25kaXRpb24uaW5jbHVkZXMoZWxlbWVudFtjb25kLmNvbHVtbl0pXG4gICAgICApIDogdHJ1ZTsgLy8gIElmIG5vIGFuZENvbmRpdGlvbkxpc3QsIGNvbnNpZGVyIGl0IGFzIGFsd2F5cyBtZXRcbiAgICAgIC8vICBJZiBvckNvbmRpdGlvbkxpc3QgZXhpc3RzLCBjaGVjayBpZiBhdCBsZWFzdCBvbmUgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgY29uc3QgaXNPckNvbmRpdGlvbk1ldCA9IG9yQ29uZGl0aW9uTGlzdCA/IG9yQ29uZGl0aW9uTGlzdC5zb21lKChjb25kOiB7IGNvbmRpdGlvbjogc3RyaW5nIHwgYW55W107IGNvbHVtbjogc3RyaW5nIHwgbnVtYmVyOyB9KSA9PlxuICAgICAgICBjb25kLmNvbmRpdGlvbi5pbmNsdWRlcyhlbGVtZW50W2NvbmQuY29sdW1uXSlcbiAgICAgICkgOiB0cnVlOyAvLyAgSWYgbm8gb3JDb25kaXRpb25MaXN0LCBjb25zaWRlciBpdCBhcyBhbHdheXMgbWV0XG4gICAgICAvLyAgUmV0dXJuIHRydWUgaWYgdGhlIEFORCBjb25kaXRpb24gaXMgbWV0IGFuZCB0aGUgT1IgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgcmV0dXJuIGlzQW5kQ29uZGl0aW9uTWV0ICYmIGlzT3JDb25kaXRpb25NZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2sgaWYgdGhlIGNvbHVtbiBpcyBhIGRhdGUgY29sdW1uXG4gIGlzRGF0ZUNvbHVtbihjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVjayBpZiB0aGUgY29sdW1uIGlzIGEgdGltZSBjb2x1bW5cbiAgaXNUaW1lQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGltZUNvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbikgPz8gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGNvbmZpZyBzZWFyY2ggZmlsdGVyIGJveCBmdW5jdGlvblxuICBvblNlYXJjaChldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IGV2ZW50OyAvLyBVcGRhdGUgdGhlIGRpc3BsYXllZCB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZ3MgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0gfSlcbiAgICB9XG4gICAgdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfX0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IElmIHRoZSB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveCBpcyBlbXB0eSwgY2FsbCB0aGUgb25TZWFyY2ggZnVuY3Rpb24gYXV0b21hdGljYWxseVxuICBlbXB0eVNlYXJjaChldmVudDogYW55KSB7XG4gICAgaWYgKCFldmVudC50cmltKCkgJiYgKHRoaXMucHJldlNlYXJjaCAhPSBldmVudC50cmltKCkpKSB7XG4gICAgICB0aGlzLm9uU2VhcmNoKGV2ZW50KVxuICAgIH1cbiAgICB0aGlzLnByZXZTZWFyY2ggPSBldmVudC50cmltKClcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgaW5mb1NpZGVzY3JlZW4gZW1pdCBcbiAgb25TaWRlTmF2SW5mb0NsaWNrKGRhdGE6IGFueSwgY29sOiBhbnkpIHtcbiAgICB0aGlzLnNpZGVOYXZFbWl0LmVtaXQoe1xuICAgICAgZGF0YSwgY29sLFxuICAgICAgY29uZmlnOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBmb3IgYWN0aXZlIGNvbHVtbiBzZWxlY3RcbiAgb25Db2x1bW5DbGljayhjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlQ29sdW1uID0gY29sdW1uO1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICAvLyBFeGlzdGluZyBzb3J0L2ZpbHRlciBsb2dpY1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSBudWxsO1xuICAgICAgdGhpcy5jb2x1bW5TZWxlY3RlZC5lbWl0KG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uID0gY29sdW1uO1xuICAgICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgICBpZDogcm93LmlkIC8vIG9yIHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICB9KSk7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGVkLmVtaXQoeyBjb2x1bW4sIGRhdGE6IGNvbHVtbkRhdGEgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBmb3IgY2xvc2Ugc2VhcmNoIGZpbHRlciBib3hcbiAgY2xvc2VmaWx0ZXIoKSB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemUgfHwgMTBcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA9IFtdXG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSBmYWxzZVxuICAgIGlmICghdGhpcy5jb25maWdQYWdpbmF0aW9uIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIHRoaXMuZmlsdGVyUmV0YWluKHRoaXMuZmlsdGVyRGF0YUFycmF5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogMSB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSB9KVxuICAgIH1cbiAgICB0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgc2VhcmNoIGZpbHRlciBib3ggY2hlY2tib3ggcmV0YWluXG4gIGlzU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSAmJiB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgc2VhcmNoIGZpbHRlciBib3ggY2hlY2tib3ggc2VsZWN0XG4gIGNoZWNrZWREYXRhKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgc2VsZWN0ZWRBcnJheSA9IFtdXG4gICAgc2VsZWN0ZWRBcnJheSA9IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdID8gdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gOiBbXVxuICAgIGlmIChzZWxlY3RlZEFycmF5ICYmIHNlbGVjdGVkQXJyYXkuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICBzZWxlY3RlZEFycmF5ID0gc2VsZWN0ZWRBcnJheS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbSAhPT0gZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZEFycmF5LnB1c2goZXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA9IHNlbGVjdGVkQXJyYXlcbiAgICB0aGlzLmlzUmVzaXplZCA9IHNlbGVjdGVkQXJyYXk/Lmxlbmd0aCA+IDBcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoICE9PSB0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICB0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9IH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyUmV0YWluKHRoaXMuZmlsdGVyRGF0YUFycmF5KVxuICAgIH1cbiAgICB0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9ucyBjbG9zZVxuICBwcml2YXRlIGFkZENsaWNrT3V0c2lkZUxpc3RlbmVyKCkge1xuICAgIGlmICghdGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRyb3Bkb3duJykpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSBudWxsO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgaWYgY2xvc2UgdGhlIGRyb3Bkb3duIG1lbnUgc3RvcCB0aGUgY2xpY2sgbGlzdGVuZXJcbiAgcHJpdmF0ZSByZW1vdmVDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbnMgb3BlbiAvIGM7b3NlXG4gIHRvZ2dsZURyb3Bkb3duKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICAgIHRoaXMuYWRkQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBhY3Rpb24gYnV0dG9uIGV2bnQgZW1pdFxuICBhY3Rpb25CdXR0b25DbGlja2VkKGV2ZW50OiBhbnksIGRhdGE6IGFueSkge1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uRW1pdC5lbWl0KHsgZXZlbnQsIGRhdGEgfSlcbiAgfVxuXG4gIHJlbW92ZUNvbChjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSBudWxsO1xuICAgIC8vIEVtaXQgZGVzZWxlY3Rpb25cbiAgICBpZiAoIXRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgLy8gRXhpc3Rpbmcgc29ydC9maWx0ZXIgbG9naWNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgaWQ6IHJvdy5pZCAvLyBvciB1bmlxdWUgaWRlbnRpZmllclxuICAgIH0pKTtcbiAgICB0aGlzLnJlbW92ZUNvbHVtbi5lbWl0KHsgY29sdW1uLCBkYXRhOiBjb2x1bW5EYXRhIH0pO1xuXG4gIH1cbiAgZW1pdFRhYmxlRGF0YVZhbHVlKHVwZGF0ZWRUYWJsZURhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVwZGF0ZWRUYWJsZURhdGEpO1xuICB9XG5cbiAgdXBkYXRlRWRpdChpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBlbGVtZW50OiBhbnksIGNvbHVtbjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZEVsZW1lbnQgPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuXG4gICAgLy8gU0tTMjBNQVIyNSBFbnN1cmUgdGhpcy5kYXRhIGlzIHVwZGF0ZWQgc2luY2Ugc3VtbWFyeSB1c2VzIHRoZSBmdWxsIGRhdGFzZXRcbiAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0gPT09IGVsZW1lbnQpO1xuICAgIGlmIChkYXRhSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgIH1cbiAgICAvLyBSZWNvbXB1dGUgc3VtbWFyeSBjb2x1bW5zIGZvciB0aGUgdXBkYXRlZCByb3dcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzICYmIHN1bW1hcnlDb2wub3BlcmFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJykge1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyArIChOdW1iZXIodXBkYXRlZEVsZW1lbnRbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKHVwZGF0ZWRFbGVtZW50W29wZXJhbmRdKSB8fCAwKSwgIC8vIFN0YXJ0IHdpdGggMSBpbnN0ZWFkIG9mIDBcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnNsaWNlKDEpLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcih1cGRhdGVkRWxlbWVudFtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIE51bWJlcih1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLm9wZXJhbmRzWzBdXSkgfHwgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGFbaW5kZXhdID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgICBpZiAoZGF0YUluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhU291cmNlLmRhdGEpXG4gICAgfVxuICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgfVxuICAvLyBTS1MxOE1BUjI1IHVwZGF0ZSBlbGVtZW50XG4gIHVwZGF0ZVZhbHVlKGVsZW1lbnQ6IGFueSwgY29sdW1uOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgZmxkcyA9IGNvbHVtbj8uc3BsaXQoJy4nKTtcbiAgICBsZXQgb2JqID0gZWxlbWVudDsgLy8gS2VlcCByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIG9iamVjdFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbGRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgbGV0IHNwbGl0RmxkcyA9IGZsZHNbaV0uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIG9iaiA9IG9ialtmbGRzW2ldXSB8fCAob2JqW2ZsZHNbaV1dID0ge30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgb2JqID0gb2JqW3NwbGl0Rmxkc1swXV0gfHwgKG9ialtzcGxpdEZsZHNbMF1dID0gW10pO1xuICAgICAgICBvYmogPSBvYmpbaW5kZXhdIHx8IChvYmpbaW5kZXhdID0ge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZmluYWwgcHJvcGVydHlcbiAgICBsZXQgbGFzdEtleSA9IGZsZHNbZmxkcy5sZW5ndGggLSAxXTtcbiAgICBsZXQgc3BsaXRMYXN0S2V5ID0gbGFzdEtleS5zcGxpdCgnWycpO1xuICAgIGlmIChzcGxpdExhc3RLZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBvYmpbbGFzdEtleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0TGFzdEtleVsxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgIG9ialtzcGxpdExhc3RLZXlbMF1dW2luZGV4XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgZXhwZW5zZUF0dGFjaG1lbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsZUVtaXQuZW1pdChldmVudClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWxheW91dFwiIFtpZF09XCJ0YWJsZUlkXCIgW25nU3R5bGVdPVwieydwYWRkaW5nLXRvcCc6ICcxcHgnLCAnd2lkdGgnOiB0YWJsZVdpZHRofVwiIFtkaXJdPVwiZGlyZWN0aW9uXCI+XG4gICAgPGRpdj4gPCEtLSBjbGFzcz1cIm0tNFwiIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHRhYmxlLXRpdGxlIGFsaWduLXRleHQtY2VudGVyIHB0LTNcIj5cbiAgICAgICAgICAgIHt7dGl0bGV9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTm9zSW5kaWNhdG9yIHx8IHNlYXJjaEJhciB8fCBpc0J1dHRvbnNcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiBzdHlsZT1cInBhZGRpbmctYm90dG9tOiAyMHB4O1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNOb3NJbmRpY2F0b3JcIiBjbGFzcz1cIm5vT2ZSZWNcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vcyA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogcmdiKDQzLCA4NywgMjQ5KTtcIj57e3RvdGFsUmVjb3JkcyB8fCB0b3RhbENvdW50fX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoQmFyXCIgY2xhc3M9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc2VhcmNoLWJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS42NDEzIDE5LjI1QzE2LjYzMjIgMTkuMjUgMjAuNjc4MSAxNS4zNTExIDIwLjY3ODEgMTAuNTQxN0MyMC42NzgxIDUuNzMyMTggMTYuNjMyMiAxLjgzMzMzIDExLjY0MTMgMS44MzMzM0M2LjY1MDQgMS44MzMzMyAyLjYwNDQ5IDUuNzMyMTggMi42MDQ0OSAxMC41NDE3QzIuNjA0NDkgMTUuMzUxMSA2LjY1MDQgMTkuMjUgMTEuNjQxMyAxOS4yNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIxLjYyOTUgMjAuMTY2N0wxOS43MjcxIDE4LjMzMzNcIiBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2hDb25maWdzID8gZW1wdHlTZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSkgOiBhcHBseUZpbHRlcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaEJveFZhbHVlIHx8ICcnXCIgI2lucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInNlYXJjaENvbmZpZ3MgJiYgc2VhcmNoQmFyXCIgY2xhc3M9XCJjb25maWdTZWFyY2hcIiAoY2xpY2spPVwib25TZWFyY2goaW5wdXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCA1SDIwXCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCA4SDE3XCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMSAxMS41QzIxIDE2Ljc1IDE2Ljc1IDIxIDExLjUgMjFDNi4yNSAyMSAyIDE2Ljc1IDIgMTEuNUMyIDYuMjUgNi4yNSAyIDExLjUgMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIgMjJMMjAgMjBcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgKm5nSWY9XCJpc0J1dHRvbnNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogN3B4OyBnYXA6IDdweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbkFycmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bnh0LWJ1dHRvbiBjbGFzcz1cImRhdGEtdGFibGUtZnNidG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidXR0b25DbGlja0VtaXQpPVwiKGJ1dHRvbi50eXBlID09PSAnZ3JvdXAnIHx8IGJ1dHRvbi50eXBlID09PSAnZHJvcGRvd24nKSA/IGNvbW1vbkJ1dHRvbkNsaWNrKCRldmVudCkgOiBjb21tb25CdXR0b25DbGljayhidXR0b24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uVHlwZV09XCJidXR0b24uY2xhc3NcIiBbYnV0dG9uVmFsdWVdPVwiYnV0dG9uLm5hbWVcIiBbYnV0dG9uQ29uZmlnXT1cImJ1dHRvbi5idXR0b25Db25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlXCIgY2xhc3M9XCJtcy0yIG1lLTJcIiBbZmNCdG5JY29uTGVmdFNyY109XCJidXR0b24uZmNCdG5JY29uTGVmdFNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzSW1hZ2VTdmddPVwiYnV0dG9uLmlzSW1hZ2VTdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLW1hcmdpblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBpc1BhZ2luYXRpb24gPyAnNDUwcHgnIDogJ2F1dG8nIH1cIiAjdGFibGVDb250YWluZXJcbiAgICAgICAgICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFRhYmxlIEhlYWRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiBbbmdDbGFzc109XCJ7ICdzaGFkb3cnOiBpc1Njcm9sbGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY2VsbCBzdGlja3ktY29sdW1uIGhlYWQtY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCJtYXN0ZXJUb2dnbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uPy5oYXNWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGF0YSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgdGFibGVIZWFkZXIgaGVhZC1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc3RpY2t5LWNvbHVtbl09XCJpID09PSAoc3RpY2t5Q29uZGl0aW9uIC0gMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS1jb2x1bW5dPVwiYWN0aXZlQ29sdW1uID09PSBjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNvbHVtbl09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25Db2x1bW5DbGljayhjb2x1bW4pOyBzb3J0Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pID8gc29ydERhdGEoY29sdW1uKSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRDb2x1bW4gPSBjb2x1bW5cIiAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQ29sdW1uID0gbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbkRpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIGNsb3NlIGJ1dHRvbiBmb3Igc2VsZWN0ZWQgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtY29sdW1uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVDb2woY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImhlYWRlckxhYmVsc1tkaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoY29sdW1uKV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlckxhYmVsc1tkaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoY29sdW1uKV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImZpbHRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVwiIChjbGljayk9XCJmaWx0ZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAycHg7XCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjExXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEyIDExXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC43NSAxLjI1SDAuNzVMNC43NSA1LjcxNzIyVjguODA1NTZMNi43NSA5Ljc1VjUuNzE3MjJMMTAuNzUgMS4yNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMjQyNTMzXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBSZWQgZG90IGZvciBhY3RpdmUgZmlsdGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJEYXRhQXJyYXkgJiYgZmlsdGVyRGF0YUFycmF5W2NvbHVtbl0/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeD1cIjlcIiBjeT1cIjJcIiByPVwiMi41XCIgZmlsbD1cInJlZFwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic29ydENvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVwiIGNsYXNzPVwic29ydC1pbmRpY2F0b3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uXCIgY2xhc3M9XCJzb3J0LWRpcmVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAn4oaRJyA6IGN1cnJlbnRTb3J0RGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSAnZGVzYycgPyAn4oaTJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZENvbHVtbiA9PT0gY29sdW1uICYmIGN1cnJlbnRTb3J0Q29sdW1uICE9PSBjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEZpbHRlciAmJiBjb2x1bW4gPT09IHNlbGVjdGVkRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1jb21wb25lbnQgcG9zaXRpb24tYWJzb2x1dGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnNlYXJjaFwiIFtjbGFzcy5yZXNpemVkXT1cImlzUmVzaXplZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnNlYXJjaC1iYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJzZWFyY2hTdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNjQxMyAxOS4yNUMxNi42MzIyIDE5LjI1IDIwLjY3ODEgMTUuMzUxMSAyMC42NzgxIDEwLjU0MTdDMjAuNjc4MSA1LjczMjE4IDE2LjYzMjIgMS44MzMzMyAxMS42NDEzIDEuODMzMzNDNi42NTA0IDEuODMzMzMgMi42MDQ0OSA1LjczMjE4IDIuNjA0NDkgMTAuNTQxN0MyLjYwNDQ5IDE1LjM1MTEgNi42NTA0IDE5LjI1IDExLjY0MTMgMTkuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMS42Mjk1IDIwLjE2NjdMMTkuNzI3MSAxOC4zMzMzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIndpZHRoLTEwMFwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaGlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1Jlc2l6ZWRcIiAoY2xpY2spPVwiY2xvc2VmaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtaWNvblwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjE2OTk4IDE0LjgzTDE0LjgzIDkuMTcwMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjgzIDE0LjgzTDkuMTY5OTggOS4xNzAwMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgMjJIMTVDMjAgMjIgMjIgMjAgMjIgMTVWOUMyMiA0IDIwIDIgMTUgMkg5QzQgMiAyIDQgMiA5VjE1QzIgMjAgNCAyMiA5IDIyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudFwiIFtzdHlsZV09XCInb3ZlcmZsb3cteTogYXV0bydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlckFycmF5IHwgc2VhcmNoRmlsdGVyIDogc2VhcmNoVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtYi0zIGNoZWNrYm94ZGl2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZ2FwOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGRhdGEpXCIgW3ZhbHVlXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhXCIgKGNoYW5nZSk9XCJjaGVja2VkRGF0YShkYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLTIgbGFiZWwtZGF0YVwiPnt7ZGF0YX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCI+PC9kaXY+IDwhLS1TS1MxNUZFQjI1IGFwcFJvd1Jlc2l6ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsIGhlYWQtY29sb3IgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAxMnB4ICFpbXBvcnRhbnQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbkNvbHVtSGVhZGVyfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgVGFibGUgQm9keSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBkYXRhU291cmNlLmRhdGE7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZUNsaWNrKGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IENoZWNrYm94IENlbGwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aXRoQ2hlY2tCb3hcIiBjbGFzcz1cInRhYmxlLWNlbGwgc3RpY2t5LWNvbHVtbiBib2R5LWNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlcGFyYXRlUm93U2VsZWN0KHNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCksIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihlbGVtZW50LmlzUGF5UHJvY2Vzc2VkID09PSB0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEYXRhIENlbGxzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1uczsgbGV0IGxhc3QgPSBsYXN0OyBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgYm9keS1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImh5cGVyTGlua0NvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGF0ZUNvbHVtbihjb2x1bW4pOyBlbHNlIGNoZWNrVGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSA/ICcgaHlwZXItbGluayBjbGlja2FibGUgJyA6ICcnfX0gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja1RpbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUaW1lQ29sdW1uKGNvbHVtbik7IGVsc2UgZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uLGVsZW1lbnQsIGNoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pID8gJyBoeXBlci1saW5rIGNsaWNrYWJsZSAnIDogJyd9fSBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICgnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbikgfCB0aW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSA/ICcgaHlwZXItbGluayBjbGlja2FibGUgJyA6ICcnfX0gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJy0nIHwgZ2V0VmFsdWU6IGVsZW1lbnQgOiBjb2x1bW4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSByaWdodG5hdiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXMtMlwiIChjbGljayk9XCJvblNpZGVOYXZJbmZvQ2xpY2soZWxlbWVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDMzIDExLjgzMzRDMi43Nzg2NiAxMS44MzM0IDAuMTY2OTkyIDkuMjIxNzEgMC4xNjY5OTIgNi4wMDAwOEMwLjE2Njk5MiAyLjc3ODQyIDIuNzc4NjYgMC4xNjY3NDggNi4wMDAzMyAwLjE2Njc0OEM5LjIyMTk2IDAuMTY2NzQ4IDExLjgzMzcgMi43Nzg0MiAxMS44MzM3IDYuMDAwMDhDMTEuODMzNyA5LjIyMTcxIDkuMjIxOTYgMTEuODMzNCA2LjAwMDMzIDExLjgzMzRaTTUuNDE2OTkgNS40MTY3NVY4LjkxNjc1SDYuNTgzNjZWNS40MTY3NUg1LjQxNjk5Wk01LjQxNjk5IDMuMDgzNDFWNC4yNTAwOEg2LjU4MzY2VjMuMDgzNDFINS40MTY5OVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWVkaXRDb2x1bW4/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbikgJiYgIWZpbGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRlQ29sdW1uKGNvbHVtbik7IGVsc2UgY2hlY2tUaW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRWYWx1ZShlbGVtZW50LGNvbHVtbikgfCBkYXRlIH19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICgnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbikgfCBkYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tUaW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RpbWVDb2x1bW4oY29sdW1uKTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pIHwgdGltZSB9fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IHRpbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRWYWx1ZShlbGVtZW50LGNvbHVtbil9fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJpZ2h0bmF2IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1zLTJcIiAoY2xpY2spPVwib25TaWRlTmF2SW5mb0NsaWNrKGVsZW1lbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMzMgMTEuODMzNEMyLjc3ODY2IDExLjgzMzQgMC4xNjY5OTIgOS4yMjE3MSAwLjE2Njk5MiA2LjAwMDA4QzAuMTY2OTkyIDIuNzc4NDIgMi43Nzg2NiAwLjE2Njc0OCA2LjAwMDMzIDAuMTY2NzQ4QzkuMjIxOTYgMC4xNjY3NDggMTEuODMzNyAyLjc3ODQyIDExLjgzMzcgNi4wMDAwOEMxMS44MzM3IDkuMjIxNzEgOS4yMjE5NiAxMS44MzM0IDYuMDAwMzMgMTEuODMzNFpNNS40MTY5OSA1LjQxNjc1VjguOTE2NzVINi41ODM2NlY1LjQxNjc1SDUuNDE2OTlaTTUuNDE2OTkgMy4wODM0MVY0LjI1MDA4SDYuNTgzNjZWMy4wODM0MUg1LjQxNjk5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMThNQVIyNSBmaWxlIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3BvdmVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdmVyLWJhc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTQgMTZcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgNy43ODUyNUw3LjA0ODU5IDEzLjc2MDJDNi44MTc2NyAxMy45OTQ1IDYuNTQyMTcgMTQuMTgwNSA2LjIzODE5IDE0LjMwNzZDNS45MzQyIDE0LjQzNDYgNS42MDc4NCAxNC41IDUuMjc4MTcgMTQuNUM0Ljk0ODQ5IDE0LjUgNC42MjIxMyAxNC40MzQ2IDQuMzE4MTQgMTQuMzA3NkM0LjAxNDE2IDE0LjE4MDUgMy43Mzg2NiAxMy45OTQ1IDMuNTA3NzQgMTMuNzYwMkwxLjcyNzMyIDExLjk1NzhDMS4yNjEyNCAxMS40ODY0IDEgMTAuODUxNiAxIDEwLjE5MDJDMSA5LjUyODc2IDEuMjYxMjQgOC44OTM4OCAxLjcyNzMyIDguNDIyNTdMOC4wNjg4MyAyLjA4OTEzQzguMjU0OCAxLjkwMjQ1IDguNDc2MDUgMS43NTQyOSA4LjcxOTgzIDEuNjUzMTdDOC45NjM2MSAxLjU1MjA2IDkuMjI1MDggMS41IDkuNDg5MTcgMS41QzkuNzUzMjUgMS41IDEwLjAxNDcgMS41NTIwNiAxMC4yNTg1IDEuNjUzMTdDMTAuNTAyMyAxLjc1NDI5IDEwLjcyMzUgMS45MDI0NSAxMC45MDk1IDIuMDg5MTNMMTEuNjE5NyAyLjc5NjE2QzExLjgwNzIgMi45ODEzMSAxMS45NTYgMy4yMDE1OSAxMi4wNTc2IDMuNDQ0MjlDMTIuMTU5MSAzLjY4Njk5IDEyLjIxMTQgMy45NDczMSAxMi4yMTE0IDQuMjEwMjNDMTIuMjExNCA0LjQ3MzE2IDEyLjE1OTEgNC43MzM0OCAxMi4wNTc2IDQuOTc2MThDMTEuOTU2IDUuMjE4ODggMTEuODA3MiA1LjQzOTE2IDExLjYxOTcgNS42MjQzMUw1Ljk5ODM0IDExLjI0MDhDNS45MDUzNSAxMS4zMzQxIDUuNzk0NzIgMTEuNDA4MiA1LjY3Mjg0IDExLjQ1ODdDNS41NTA5NSAxMS41MDkzIDUuNDIwMjEgMTEuNTM1MyA1LjI4ODE3IDExLjUzNTNDNS4xNTYxMiAxMS41MzUzIDUuMDI1MzkgMTEuNTA5MyA0LjkwMzUgMTEuNDU4N0M0Ljc4MTYxIDExLjQwODIgNC42NzA5OCAxMS4zMzQxIDQuNTc4IDExLjI0MDhMNC4yMjc5MSAxMC44ODIzQzQuMTM0MTYgMTAuNzg5NyA0LjA1OTc1IDEwLjY3OTUgNC4wMDg5NyAxMC41NTgyQzMuOTU4MTkgMTAuNDM2OCAzLjkzMjA1IDEwLjMwNjcgMy45MzIwNSAxMC4xNzUyQzMuOTMyMDUgMTAuMDQzOCAzLjk1ODE5IDkuOTEzNjEgNC4wMDg5NyA5Ljc5MjI2QzQuMDU5NzUgOS42NzA5MSA0LjEzNDE2IDkuNTYwNzcgNC4yMjc5MSA5LjQ2ODE5TDcuOTk4ODEgNS43NDM4MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDM0NTU1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQb3BvdmVyIENvbnRlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG92ZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBlbnNlQ29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgZWxlbWVudFtjb2x1bW5dXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZXhwZW5zZS1maWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwZW5zZUF0dGFjaG1lbnQoZGF0YT8uZmlsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5maWxlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgYWRkZWQgaW5wdXQgYm94IGZvciBpbmxpbmUgZWRpdCBpbnB1dC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlZGl0Q29sdW1uICYmIGVkaXRDb2x1bW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uQ2hlY2s6IGNvbHVtbiA6IGVkaXRDb2x1bW4pID09PSAoJ3N0cmluZycpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm9uLWVkaXQgZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2VkaXRDb2xFbGVtZW50IGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCwgZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiZWxlbWVudC5lZGl0Um93ID8gZmFsc2UgOiB0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBJbiB0YWJsZSwgbGlrZSB0ZXh0IGlucHV0LCBhZGRlZCBkcm9wIGRvd24gYW5kIHRpbWUgaW5wdXRzIGFzIHdlbGwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5DaGVjazogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnb2JqZWN0JykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib24tZWRpdCBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGV4dCcpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VkaXRDb2xFbGVtZW50IGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGltZScpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWVcIiBjbGFzcz1cIm54dC1sb3AtaW5wdXQgdGFibGUtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCIgcGxhY2Vob2xkZXI9XCJISDptbTpzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnZHJvcGRvd24nKSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHR5cGU9XCJkcm9wZG93blwiICpuZ0lmPVwiZWxlbWVudC5lZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJueHQtbG9wLWlucHV0IHRhYmxlLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW2Rpc2FibGVkXT1cImVsZW1lbnQuZWRpdFJvdyA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBbXSB8IGVkaXRDb2x1bW5Ecm9wZG93bjogY29sdW1uIDogZWRpdENvbHVtbiBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YS52YWx1ZSB8fCBkYXRhLm5hbWVcIj57e2RhdGEubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWVsZW1lbnQuZWRpdFJvd1wiICNlZGl0Q29sRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm54dC1sb3AtaW5wdXQgdGFibGUtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWxlbWVudC5lZGl0Um93ID8gJ0VudGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJ0YWJsZS1jZWxsIGFjdGlvbkNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbkJ1dHRvblwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IEVkaXQgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRSb3dcIiBjbGFzcz1cImVpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJFZGl0IFJlY29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjOyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGVkaXQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cIm9uRWRpdChlbGVtZW50KVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IERlbGV0ZSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRGVsZXRlUm93XCIgY2xhc3M9XCJkaWNvbi1jb250YWluZXJcIiBtYXRUb29sdGlwPVwiRGVsZXRlIFJlY29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZmZiNWI1OyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7IGJhY2tncm91bmQtY29sb3I6ICNmZWVlZWQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVSZWNvcmQoZWxlbWVudCxpKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVuZGVyIGlubGluZSBidXR0b25zIHVwIHRvIFNpemUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IGFjdGlvbkJ1dHRvbkFycmF5Py5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiIG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIGJ1dHRvbi5jb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPWJ1dHRvbi50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnV0dG9uLGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ob3ZlckJvcmRlckNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ib3JkZXJDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlci1yYWRpdXM6IHt7YnV0dG9uLmJvcmRlclJhZGl1c319cHg7ICBib3JkZXI6IDFweCBzb2xpZCB7e2J1dHRvbi5ib3JkZXJDb2xvcn19O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKG1vdXNlZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBidXR0b24uaG92ZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJ1dHRvbi5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IHt7YnV0dG9uLnBhZGRpbmd9fXB4IHt7YnV0dG9uLnBhZGRpbmcgKyAyfX1weDsgYm9yZGVyLXJhZGl1czoge3tidXR0b24uYm9yZGVyUmFkaXVzfX1weDsgYmFja2dyb3VuZC1jb2xvcjoge3tidXR0b24uYmFja2dyb3VuZENvbG9yfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidXR0b24uaWNvblNyY1wiICNpbWdFbGVtZW50IFtzcmNdPVwiYnV0dG9uLmljb25TcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaG92ZXJJY29uU3JjIHx8IGJ1dHRvbi5pY29uU3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImltZ0VsZW1lbnQuc3JjID0gYnV0dG9uLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25BY3Rpb25CdXR0b24gJiYgZHJvcGRvd25BY3Rpb25CdXR0b24ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrYWJsZS1pbWdcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OyBwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IGJvcmRlci1yYWRpdXM6IDVweDsgYm9yZGVyOiAxcHggc29saWQgIzZjNzU3ZDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5Ljk5OTkgMjUuNjY2N0MyMy42ODE4IDI1LjY2NjcgMjYuNjY2NiAyMi42ODE5IDI2LjY2NjYgMTlDMjYuNjY2NiAxNS4zMTgxIDIzLjY4MTggMTIuMzMzNCAxOS45OTk5IDEyLjMzMzRDMTYuMzE4IDEyLjMzMzQgMTMuMzMzMyAxNS4zMTgxIDEzLjMzMzMgMTlDMTMuMzMzMyAyMi42ODE5IDE2LjMxOCAyNS42NjY3IDE5Ljk5OTkgMjUuNjY2N1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy42NDY3IDE4LjE2TDIwLjAwMDEgMjAuNTA2N0wyMi4zNTM0IDE4LjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJpZ2h0XT1cIigoYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUgPz8gMCkgLSAoYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zaXplID8/IDApICsgKGlzRWRpdFJvdyA/IDEgOiAwKSArIChpc0RlbGV0ZVJvdyA/IDEgOiAwKSArIChkcm9wZG93bkFjdGlvbkJ1dHRvbj8ubGVuZ3RoID4gMCA/IDEgOiAwKSkgKiAxMDAgKyAnJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50T3BlbkluZGV4ID09PSBpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidG4gb2YgZHJvcGRvd25BY3Rpb25CdXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNDb25kaXRpb25NZXQoZWxlbWVudCwgYnRuLmNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJlbGVtZW50LmlkXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taWNvbiB7e2J0bi5idXR0b25UeXBlfX0gdG9vbHRpcC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09YnRuLnRvb2x0aXAgW2Rpc2FibGVkXT1cImJ0bi5idXR0b25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnRuLGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidG4uaWNvblNyY1wiIFtzcmNdPVwiYnRuLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZjLWJ0bi10ZXh0XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2J0bi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIwTUFSMjUgU3VtbWFyeSBSb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VtbWFyeVJvd3MgJiYgc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiBpc1N1bW1hcnlDb2x1bW4gJiYgZGF0YVNvdXJjZS5kYXRhICYmIGRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA+IDAgJiYgIWlzTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdW1tYXJ5Um93c1wiIGNsYXNzPVwidGFibGUtcm93IHN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGFiZWwgaW4gdGhlIGZpcnN0IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwibm9uLXN1bW1hcnktdGFibGUtY2VsbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgaXNTdW1tYXJ5U3RhcnRDb2x1bW47IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGxcIiBbY2xhc3MubGFzdC1jZWxsXT1cImxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVmFsdWUgb3IgaW5wdXQgaW4gdGhlIGxhc3QgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS10YWJsZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IHJvdy5maWVsZE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25Db2x1bW5DbGljayhyb3cuZmllbGROYW1lKVwiPnt7IHJvdy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktdGFibGUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSByb3cuZmllbGROYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBjbG9zZSBidXR0b24gZm9yIHNlbGVjdGVkIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LmZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtY29sdW1uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNvbChyb3cuZmllbGROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdIHwgbnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cudHlwZSA9PT0gJ2lucHV0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgWyhuZ01vZGVsKV09XCJzdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TdW1tYXJ5SW5wdXRDaGFuZ2UoKVwiIGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyME1BUjI1IEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgaXNTdW1tYXJ5RW5kQ29sdW1uOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uQnV0dG9uIHx8IGlzRGVsZXRlUm93IHx8IGlzRWRpdFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGwgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzI4TUFSMjUgSW4gdGhlIExvYWRpbmcgc2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlcGVhdCBmb3IgNSBza2VsZXRvbiByb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IF8gb2YgWzEsMiwzLDQsNV1cIiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBzdGlja3ktY29sdW1uXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBkaXNwbGF5ZWRDb2x1bW5zXCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsIFwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9uIENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIiBjbGFzcz1cInNrZWxldG9uLWNlbGwgYWN0aW9uQ29sXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IE5vIERhdGEgUm93IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tICE9PSAnZm9ybUJ1aWxkZXInXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzL2RhdGEgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tID09PSAnZm9ybUJ1aWxkZXInXCIgY2xhc3M9XCJmb3JtLWJ1aWxkZXItdGFibGUtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkICAvIGRyYWdzIGZpZWxkcyBmcm9tIGVsZW1lbnRzIHNlY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBQYWdpbmF0aW9uIC0tPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3Muc2hhZG93LWhpZGRlbl09XCJpc1NoYWRvd0hpZGRlblwiPlxuICAgICAgICAgICAgICAgIDwhLS0gdGFibGUgaW5wdXQgc2F2ZSBidXR0b24gY2hhbmdlcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGlubGluZUFkZCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFkZEljb25Cb3IgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImFkZElubGluZVJlY29yZCBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFRhYmxlUmVjb3JkKGlubGluZUVsZW1lbnQpXCIgbWF0VG9vbHRpcD1cIkFkZCBSZWNvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm5hdi1pY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00NDAtMjgwaDgwdi0xNjBoMTYwdi04MEg1MjB2LTE2MGgtODB2MTYwSDI4MHY4MGgxNjB2MTYwWm00MCAyMDBxLTgzIDAtMTU2LTMxLjVUMTk3LTE5N3EtNTQtNTQtODUuNS0xMjdUODAtNDgwcTAtODMgMzEuNS0xNTZUMTk3LTc2M3E1NC01NCAxMjctODUuNVQ0ODAtODgwcTgzIDAgMTU2IDMxLjVUNzYzLTc2M3E1NCA1NCA4NS41IDEyN1Q4ODAtNDgwcTAgODMtMzEuNSAxNTZUNzYzLTE5N3EtNTQgNTQtMTI3IDg1LjVUNDgwLTgwWm0wLTgwcTEzNCAwIDIyNy05M3Q5My0yMjdxMC0xMzQtOTMtMjI3dC0yMjctOTNxLTEzNCAwLTIyNyA5M3QtOTMgMjI3cTAgMTM0IDkzIDIyN3QyMjcgOTNabTAtMzIwWlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJlbW92ZWQgYnV0dG9uIGRpc2FibGUgbG9naWMsIGFkZGVkIGFub3RoZXIgY29uZGl0aW9uIGZvciBidXR0b24gc2hvd2luZy0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBTUjA2SkFOMjAyNSBidXR0b24gZGlzYWJsZSBsb2dpYyBmb3Igbm90IHNlbGVjdCBhbnkgZW1wbG95ZWUtLT5cbiAgICAgICAgICAgICAgICAgICAgPG54dC1idXR0b24gKm5nSWY9XCIoZWRpdENvbHVtbj8ubGVuZ3RoID4gMCAgfHwgdGFibGVTYXZlQnV0dG9uKSAmJiBmcm9tICE9ICdmb3JtQnVpbGRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVHlwZT1cImJ0biBidG4tcHJpbWFyeVwiIFtidXR0b25EaXNhYmxlXT1cInNlbGVjdGlvbj8uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cInNhdmVCdXR0b24oKVwiIGJ1dHRvblZhbHVlPVwiU2F2ZVwiPjwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bnh0LXBhZ2luYXRpb24gKm5nSWY9XCJpc1BhZ2luYXRpb25cIiBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiIFtjb2xsZWN0aW9uU2l6ZV09XCJmaWx0ZXJUYWJsZU5vc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtjdXJyZW50UGFnZV09XCJwYWdlSW5kZXhcIiBbZmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50KT1cInBhZ2VQYXJhbXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvbnh0LXBhZ2luYXRpb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLVNLUzE1RkVCMjUgYWxlcnQgb24gZGVsZXRpbmcgcmVjb3JkIC0tPlxuPGRpdiAqbmdJZj1cImRlbGV0ZU1vZGFsXCIgY2xhc3M9XCJtb2RhbCBtb2RhbC1iYWNrZHJvcCBzaG93ICBkLWJsb2NrXCIgaWQ9XCJkZWxldGVSZWNvcmRcIiB0YWJpbmRleD1cIi0xXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJkZWxldGVSZWNvcmRMYWJlbFwiIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFkZWxldGVNb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1vZGFsLXRpdGxlIGZzLTVcIiBpZD1cImRlbGV0ZVJlY29yZExhYmVsXCI+RGVsZXRlIFJlY29yZDwvYj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU1vZGFsID0gZmFsc2VcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhlIHJlY29yZCA/XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTW9kYWwgPSBmYWxzZVwiPk5vPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWNvcmREYXRhKClcIj5ZZXM8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
1469
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQy9KLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQs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QUFDLENBQUM7WUFDN0csSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0csSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVO2lCQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQztpQkFDL0MsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixJQUFJLEVBQUUsT0FBTztnQkFDYixHQUFHLElBQUk7YUFDUixDQUFDLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVTtpQkFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUM7aUJBQzVDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsT0FBTztnQkFDbEIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsR0FBRyxJQUFJO2FBQ1IsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO1FBQ0QsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBRSxpREFBaUQ7UUFDcEUsQ0FBQztRQUNELCtDQUErQztRQUMvQyxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzlGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNySSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNySCxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzdILElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFHN0csSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0csSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzNILCtEQUErRDtRQUMvRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzNHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckcsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQy9KLElBQUksQ0FBQyxXQUFXLEdBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDekosSUFBSSxDQUFDLGdCQUFnQixHQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDeEssSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0SixJQUFJLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlKLElBQUksQ0FBQyxXQUFXLEdBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDOUosSUFBSSxDQUFDLGFBQWEsR0FBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNwSyxJQUFJLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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Q0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMs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SSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFHLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDbEgsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0SCxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFHLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDbEksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNySCxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzdILElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFHN0csSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0csSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzNILElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFD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QUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBMEJhLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDVyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFrcEJpQixlQUFlO3NCQUExRCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOeHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0UGFnaW5hdGlvbiB9IGZyb20gJy4uL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoRmlsdGVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvc2VhcmNoLWZpbHRlci9zZWFyY2gtZmlsdGVyLnBpcGUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2RhdGUvZGF0ZS5waXBlJztcbmltcG9ydCB7IFRpbWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS90aW1lL3RpbWUucGlwZSc7XG5pbXBvcnQgeyBFZGl0Q29sdW1uQ2hlY2tQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9lZGl0Q29sdW1uQ2hlY2svZWRpdC1jb2x1bW4tY2hlY2sucGlwZSc7XG5pbXBvcnQgeyBFZGl0Q29sdW1uRHJvcGRvd25QaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9lZGl0Q29sdW1uRHJvcGRvd24vZWRpdC1jb2x1bW4tZHJvcGRvd24ucGlwZSc7XG5pbXBvcnQgeyBFZGl0Q29sdW1uVHlwZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2VkaXRDb2x1bW5UeXBlL2VkaXQtY29sdW1uLXR5cGUucGlwZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBBUElNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hcGltZXRhJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdldFZhbHVlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZ2V0LXZhbHVlLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdueHQtZGF0YXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE54dEJ1dHRvbkNvbXBvbmVudCxcbiAgICBOeHRQYWdpbmF0aW9uLFxuICAgIFNlYXJjaEZpbHRlclBpcGUsXG4gICAgRGF0ZVBpcGUsXG4gICAgVGltZVBpcGUsXG4gICAgRWRpdENvbHVtbkNoZWNrUGlwZSxcbiAgICBFZGl0Q29sdW1uRHJvcGRvd25QaXBlLFxuICAgIEVkaXRDb2x1bW5UeXBlUGlwZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIEdldFZhbHVlUGlwZVxuICAgIC8vIFJvd1Jlc2l6ZXJEaXJlY3RpdmVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTnh0RGF0YXRhYmxlIHtcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTsgIC8vICBnZXQgZGF0YSB0aGF0IHRvIGJlIGRpc3BsYXllZCBpbiBhIGFycmF5XG4gIEBJbnB1dCgpIGNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gQ29sdW1ucyBoYXZlIGEgbGFiZWwsIGEgY29sdW1uIHR5cGUsIGFuZCBmaWx0ZXIgZGV0YWlscy5cbiAgQElucHV0KCkgd2l0aENoZWNrQm94OiBib29sZWFuOyAgLy8gZ2V0IGlmIHdpdGggb3Igd2l0aG91dCBjaGVja2JveCBpbiB0YWJsZVxuICBASW5wdXQoKSBzZWFyY2hCYXI6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSBzZWFyY2ggYmFyIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRhYmxlXG4gIEBJbnB1dCgpIHRhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlOyAvLyBzYXZlIGJ1dHRvbiBmb3IgZWRpdGluZyBMT1AgaW4gcGF5cm9sbCB0YWJsZSwgIGNoYW5nZWQgbmFtZSBmcm9tICdzYXZlTE9QJ1xuICBASW5wdXQoKSBzdGlja3lDb2x1bW4gPSBmYWxzZTsgLy8gaWYgdGhlIGxhc3QgY29sdW1uIHNob3VsZCBiZSBzdGlja3ksIGl0IHNob3VsZCBiZSBzZW50IGFzIGJvb2xlYW4gdmFsdWVcbiAgQElucHV0KCkgdGFibGVXaWR0aCA9ICcxMDAlJzsgLy8gd2lkdGggb2YgdGFibGUgY2FuIGJlIGFkanVzdGVkIGZyb20gcGFyZW50LCBieSBkZWZhdWx0IGl0IGlzIDEwMCVcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1IZWFkZXIgPSAnQWN0aW9uJzsgIC8vIHRvIGNoYW5nZSB0aGUgaGVhZGVyIGZvciBhY3Rpb24gY29sdW1uXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbjogYm9vbGVhbjsgIC8vdG8gc2hvdyBidXR0b24gY29sdW0gYXMgYWN0aW9uXG4gIEBJbnB1dCgpIHRpdGxlOiBhbnk7Ly8gdGhlIHRpdGxlIGZvciB0aGUgdGFibGU7XG4gIEBJbnB1dCgpIGlzQnV0dG9uczogYm9vbGVhbjsvLyBpcyBidXR0b24gcHJlc2VudCBpbiB0YWJsZTtcbiAgQElucHV0KCkgYnV0dG9uQXJyYXk6IGFueTsvLyBidXR0b25zIHRvIGJlIGRpc3BsYXllZDtcbiAgQElucHV0KCkgdGFibGVJZDogYW55OyAvLyBpZCBvZiB0YWJsZVxuICBASW5wdXQoKSBpc0VkaXRSb3c6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGVkaXRlZFxuICBASW5wdXQoKSBpc0RlbGV0ZVJvdzogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgZGVsZXRlZFxuICBASW5wdXQoKSBhZGRJbmxpbmVSZWNvcmQ6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGFkZGVkIGlubGluZVxuICBASW5wdXQoKSBzZWFyY2hDb25maWdzOiBhbnk7IC8vIHNlYXJjaCBjb25maWd1cmF0aW9uc1xuICBASW5wdXQoKSBkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicgPSAnbHRyJzsgLy8gZGlyZWN0aW9uIG9mIHRhYmxlXG4gIEBJbnB1dCgpIHBhZ2luYXRpb246IGFueTsgLy8gcGFnaW5hdGlvbiBjb25maWd1cmF0aW9uc1xuICBASW5wdXQoKSBhY3Rpb25CdXR0b25BcnJheTogYW55OyAvLyBhY3Rpb24gYnV0dG9uIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIG11bHRpcGxlRmlsdGVyOiBhbnk7IC8vIGlmIHBhZ2luYXRpb24gdHJ1ZSB0aGVuIHRoaXMgd2lsbCBiZSB1c2VkXG4gIEBJbnB1dCgpIGlzUGFnaW5hdGlvbjogYW55OyAvLyBwYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb25zIGlmIHRydWUgdGhlbiBwYWdpbmF0aW9uIHdpbGwgYmUgZW5hYmxlZFxuICBASW5wdXQoKSBpc05vc0luZGljYXRvcjogYW55OyAvLyBpZiB0cnVlIHRoZW4gbm8gZGF0YSBpbmRpY2F0b3Igd2lsbCBiZSBzaG93blxuICBASW5wdXQoKSBpc0VkaXRhYmxlOiBhbnk7IC8vIGlmIHRydWUgdGhlbiB0YWJsZSB3aWxsIGJlIGVkaXRhYmxlXG4gIEBJbnB1dCgpIGZyb206IGFueTsgLy8gZnJvbSBkYXRlIHBhbHRmb3JtIGJhc2VkIGluaXRpYWxpemUgaW5wdXRzIGV4Oi0gJ2Zvcm1CdWlsZGVyJ1xuICBASW5wdXQoKSBxdWVzdGlvbjogYW55OyAvLyBxdWVzdGlvbiBpcyB1c2VkIGZvciBueHQgZm9ybSBidWlsZGVyIHRhYmxlIHByZXZpZXdcbiAgQElucHV0KCkgcm93VGV4dFNpemU6IGFueTsgLy8gc2l6ZSBvZiByb3cgdGV4dFxuICBASW5wdXQoKSByb3dUZXh0Q29sb3I6IGFueTsgLy8gY29sb3Igb2Ygcm93IHRleHRcbiAgQElucHV0KCkgYXBpTWV0YTogc3RyaW5nOyAvLyBhcGkgbWV0YSBpcyB1c2VkIGZvciBueHQgZm9ybSBidWlsZGVyIHRhYmxlIHByZXZpZXdcbiAgQElucHV0KCkgc3VtbWFyeVJvd3M6IGFueTsgLy8gSW5wdXQgZm9yIGNvbmZpZ3VyYWJsZSBzdW1tYXJ5IHJvd3NcbiAgQElucHV0KCkgc3VtbWFyeUNvbHVtbnM6IGFueTsgLy8gSW5wdXQgZm9yIHN1bW1hcnkgY29sdW1ucyBjb25maWdcbiAgQElucHV0KCkgaXNMb2FkaW5nOiBhbnk7IC8vU0tTMjhNQVIyNSBJbnB1dCBmb3IgbG9hZGluZyBpbmRpY2F0b3JcbiAgQElucHV0KCkgdGFibGVDb25maWc6IGFueTsgLy8gdGFibGUgY29uZmlnIGZvciBueHQgZm9ybSBidWlsZGVyIHRhYmxlXG4gIEBJbnB1dCgpIHRhYmxlUGFyYW1zOiBhbnk7IC8vU0tTMTdBUFIyNSBSZWNlaXZlcyB0YWJsZVBhcmFtcyBpbmZvcm1hdGlvbiBmcm9tIHBhcmVudCBjb21wb25lbnRcbiAgQElucHV0KCkgbGlzdFZpZXdzOiBhbnlbXSA9IFtdOyAvL1NLUzI2QVBSMjUgUHJlZGVmaW5lZCBsaXN0IHZpZXdzXG5cbiAgQE91dHB1dCgpIHRhYmxlUm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGRhdGFzIHRvIGJlIHBhc3NlZCB3aGVuIHRhYmxlIHJvdyBpcyBjbGlja2VkXG4gIEBPdXRwdXQoKSBvbkVkaXREYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBpZiBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLCB0aGUgZGF0YSBvZiB0aGF0IHJvdyB3aWxsIGJlIHBhc3NlZFxuICBAT3V0cHV0KCkgc2F2ZUJ1dHRvbkRhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGVkaXRlZCByb3dzIGRhdGEgd2lsbCBiZSBwYXNzZWRcbiAgQE91dHB1dCgpIG9uRGVsZXRlRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgIC8vIHdoZW4gZGVsZXRlIGJ1dHRvbiBjbGlja2VkIHBhc3MgdGhlIGRhdGFcbiAgQE91dHB1dCgpIGJ1dHRvbkVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIHRoaXMgd2lsbCBlbWl0IGEgdGFibGUgdG9wIGJ1dHRvbiBjbGljayBldmVudFxuICBAT3V0cHV0KCkgaHlwZXJMaW5rRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gaHlwZXIgbGluayBjbGljayBldmVudFxuICBAT3V0cHV0KCkgc2lkZU5hdkVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55LCBjb2w6IGFueSwgY29uZmlnOiBhbnkgfT47IC8vIHJpZ2h0bmF2IGNvbHVtbiBlbWl0XG4gIEBPdXRwdXQoKSBhY3Rpb25CdXR0b25FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBkYXRhcyB0byBiZSBwYXNzZWQgd2hlbiB0YWJsZSByb3cgYWN0aXZlIGJ1dHRvbiBpcyBjbGlja2VkXG4gIEBPdXRwdXQoKSBjb2x1bW5TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IHN0cmluZywgZGF0YTogYW55W10gfT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNvbHVtbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IHN0cmluZywgZGF0YTogYW55W10gfT4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpOyAvLyB0byBwYXNzIHRoZSBzZWxlY3RlZCBjaGVja2JveCB2YWx1ZXNcbiAgQE91dHB1dCgpIGZpbGVFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIHRvIHBhc3MgdGhlIGZpbGVcbiAgQE91dHB1dCgpIE54dFRhYmxlUGFyYW1zRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy9TS1MxN0FQUjI1IHRvIHBhc3MgdGhlIHRhYmxlUGFyYW1zIGluZm9ybWF0aW9uXG4gIEBPdXRwdXQoKSBOeHRUYWJsZUVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIHtcbiAgLy8gICBcInBhZ2luYXRpb25cIjogeyAgICAgICAvLyA0XG4gIC8vICAgICAgIFwicGFnZVNpemVcIjogMTAsXG4gIC8vICAgICAgIFwicGFnZUluZGV4XCI6IDEwXG4gIC8vICAgfSxcbiAgLy8gICBcInRhYmxlU2VhcmNoXCI6IHsgICAgICAvLyAxXG4gIC8vICAgICAgIFwiZmllbGRzXCIgOiBbXG4gIC8vICAgICAgICAgICBcImxpZ2h0VHlwZVwiLFxuICAvLyAgICAgICAgICAgXCJzeXN0ZW1cIixcbiAgLy8gICAgICAgICAgIFwic3RhdHVzXCJcbiAgLy8gICAgICAgXSAsXG4gIC8vICAgICAgIFwidmFsdWVcIjogJ3ItMDAxJyBcbiAgLy8gICB9LCAgXG4gIC8vICAgXCJzZWFyY2hGaWx0ZXJEYXRhXCI6IHsgIC8vIDJcbiAgLy8gICAgICAgXCJsaWdodFR5cGVcIjogW1xuICAvLyAgICAgICAgICAgXCJBQVwiLFxuICAvLyAgICAgICAgICAgXCJCQlwiIFxuICAvLyAgICAgICBdXG4gIC8vICAgfSxcbiAgLy8gICBcInNvcnRcIjogeyAgICAgICAgICAgICAgLy8gM1xuICAvLyAgICAgICBcImNvbHVtblwiOiBcImFzc2V0Q29kZVwiLFxuICAvLyAgICAgICBcImRpcmVjdGlvblwiOiBcImFzY1wiXG4gIC8vICAgfVxuICAvLyB9XG5cbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcbiAgQFZpZXdDaGlsZCgndGFibGVDb250YWluZXInKSB0YWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHNlbGVjdGlvbjogYW55OyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIHJvd1xuICBzdGlja3lDb25kaXRpb24hOiBudW1iZXI7IC8vIHRvIGdldCB0aGUgc3RpY2t5IGNvbHVtbiBpbmRleFxuICBzZWFyY2hGaWx0ZXIgPSBmYWxzZTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggZmlsdGVyXG4gIGZpbHRlckFycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGFycmF5XG4gIHNlbGVjdGVkRmlsdGVyOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VsZWN0ZWQgZmlsdGVyXG4gIHJlbmRlckNvbHVtbnM6IHN0cmluZyA9ICdkaXNwbGF5ZWRDb2x1bW5zJzsgLy8gdG8gZ2V0IHRoZSByZW5kZXJlZCBjb2x1bW5zXG4gIHBhZ2VTaXplT3B0aW9uczogQXJyYXk8YW55PiAgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIHNpemUgb3B0aW9uc1xuICBkYXRhU291cmNlOiBhbnk7ICAvLyBmb3IgdGFibGUgZGF0YSBzb3VyY2VcbiAgdG90YWxDb3VudCE6IG51bWJlciAvLyBjb3VudCBvZiB0b3RhbCByZWNvcmRzXG4gIHNlYXJjaEJveFZhbHVlOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGJveCB2YWx1ZVxuICBwcmV2U2VhcmNoOiBhbnk7IC8vIHRvIGdldCB0aGUgcHJldmlvdXMgc2VhcmNoIHZhbHVlXG4gIGFjdGl2ZUNvbHVtbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIHRoZSBhY3RpdmUgY29sdW1uXG4gIGlzU2Nyb2xsZWQgPSBmYWxzZTsgLy8gQm9vbGVhbiBmbGFnIHRvIHRyYWNrIHNjcm9sbCBzdGF0ZVxuICBpc1NoYWRvd0hpZGRlbiA9IGZhbHNlOyAvLyBCb29sZWFuIGZsYWcgdG8gdHJhY2sgc2hhZG93IHN0YXRlXG4gIGN1cnJlbnRTb3J0Q29sdW1uOiBzdHJpbmcgPSAnJzsgLy8gdG8gZ2V0IHRoZSBjdXJyZW50IHNvcnQgY29sdW1uXG4gIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8ICdub25lJyA9ICdub25lJzsgLy8gdG8gZ2V0IHRoZSBjdXJyZW50IHNvcnQgZGlyZWN0aW9uXG4gIG9yaWdpbmFsRGF0YTogYW55OyAvLyBTdG9yZSBvcmlnaW5hbCBkYXRhIGZvciBzb3J0aW5nXG4gIGhvdmVyZWRDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB0aGUgaG92ZXJlZCBjb2x1bW5cbiAgc2VhcmNoVGV4dDogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCB0ZXh0XG4gIG11bHRpcGxlRmlsdGVyQXJyYXk6IGFueTsgLy8gdG8gZ2V0IHRoZSBtdWx0aXBsZSBmaWx0ZXIgYXJyYXlcbiAgZmlsdGVyRGF0YUFycmF5OiBhbnkgPSB7fSAvLyB0byBnZXQgdGhlIGZpbHRlciBkYXRhIGFycmF5XG4gIGlzUmVzaXplZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBmb3IgdGFibGUgY29sdW1uIHJlc2l6ZVxuICBzRmlsdGVyRGF0YTogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCBmaWx0ZXIgZGF0YVxuICBoZWFkZXJMYWJlbHM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBoZWFkZXIgbGFiZWxzXG4gIGRpc3BsYXllZENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBkaXNwbGF5ZWQgY29sdW1uc1xuICBmaWx0ZXJDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGNvbHVtbnNcbiAgc29ydENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgY29sdW1uc1xuICBoeXBlckxpbmtDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107IC8vIHRvIGdldCB0aGUgaHlwZXIgbGluayBjb2x1bW5zXG4gIGVkaXRDb2x1bW46IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgZWRpdCBjb2x1bW5cbiAgZGF0ZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBkYXRlIGNvbHVtbnNcbiAgdGltZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgdGltZSBjb2x1bW5zXG4gIG9iamVjdENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgb2JqZWN0IGNvbHVtbnNcbiAgZmlsZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgZmlsZSBjb2x1bW5zXG4gIGJvb2xlYW5Db2x1bW5zIDogQXJyYXk8YW55PiA9IFtdOyAgLy8gdG8gZ2V0IHRoZSBib29sZWFuIGNvbHVtbnNcbiAgaW5saW5lRWxlbWVudDogYW55IC8vIGZvciBhZGQgYSBuZXcgcm93IG9uIHRhYmxlXG4gIHBhZ2VTaXplOiBhbnkgIC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBzaXplXG4gIHBhZ2VJbmRleDogYW55IC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBpbmRleFxuICB0b3RhbFJlY29yZHM6IG51bWJlcjsgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSB0b3RhbCByZWNvcmRzXG4gIGNvbmZpZ1BhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTsgLy8gZmxhZyBmb3IgY29uZmlnIHBhZ2luYXRpb25cbiAgZGVsZXRlRGF0YTogYW55OyAvLyB0byBnZXQgdGhlIGRlbGV0ZSByb3dcbiAgZGVsZXRlTW9kYWwgPSBmYWxzZTsgLy8gZm9yIGNvbmZvcm1hdGlvbiBwb3B1cFxuICBkcm9wZG93bkFjdGlvbkJ1dHRvbjogYW55OyAvLyBmb3IgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b25cbiAgY3VycmVudE9wZW5JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIHRyYWNrIHRoZSBjdXJyZW50IG9wZW4gYWN0aW9uIGRyb3Bkb3duIGljb24gaW5kZXhcbiAgY2xpY2tMaXN0ZW5lcjogYW55OyAvLyBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbiBjbGljayBsaXN0ZW5lciBmb3IgY2xvc2UgYSBkcm9wZG93biBidXR0b25cbiAgc2VsZWN0ZWRDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIGNvbHVtblxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjsgIC8vIGZvciB0YWJsZSBkYXRhIHN1YnNjcmlwdGlvblxuICBkZWxldGVJbmRleDogbnVtYmVyOyAvLyB0byBnZXQgdGhlIGRlbGV0ZSBpbmRleFxuICBzaG93UG9wb3ZlciA9IHRydWU7XG4gIHN1bW1hcnlWYWx1ZXM6IHsgW2xhYmVsOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9OyAvLyBTS1MyME1BUjI1IE9iamVjdCB0byBzdG9yZSBzdW1tYXJ5IHJvdyB2YWx1ZXNcbiAgaXNTdW1tYXJ5Q29sdW1uOiBib29sZWFuID0gZmFsc2U7IC8vIFNLUzIwTUFSMjUgRmxhZyB0byBjaGVjayBpZiB0aGUgY29sdW1uIGlzIGluIHRoZSBkaXNwbHljb2x1bW5zIGFycmF5XG4gIGlzU3VtbWFyeVN0YXJ0Q29sdW1uOiBhbnlbXTtcbiAgaXNTdW1tYXJ5RW5kQ29sdW1uOiBhbnlbXTtcbiAgZmlsdGVyQm94RGF0YTogYW55O1xuICBmaWx0ZXJUYWJsZU5vczogYW55O1xuICBzZWxlY3RlZFZpZXc6IHN0cmluZyA9ICcnOyAgICAgICAgIC8vIFNlbGVjdGVkIGxpc3QgdmlldyBuYW1lXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7IC8vIFRyYWNrcyBkcm9wZG93biB2aXNpYmlsaXR5XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0geyBkYXRhOiBbXSB9OyAvLyBvciB1c2UgYSBwcm9wZXIgZGF0YSBzdHJ1Y3R1cmVcbiAgICAvLyBjb25zb2xlLmxvZyhcIm5nT25DaGFuZ2VzIGlzIHJ1bm5pbmdcIilcbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA/IHRoaXMucXVlc3Rpb24/LmlucHV0IDogW11cbiAgICAgIGNvbnN0IHBhcnNlZE1ldGEgPSB0eXBlb2YgdGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSA6IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddKTtcbiAgICAgIGlmICggcGFyc2VkTWV0YSA9PT0gbnVsbCB8fCAgcGFyc2VkTWV0YSA9PT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZE1ldGEpIHx8IHBhcnNlZE1ldGE/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05vIHZhbGlkIG1ldGFkYXRhIHByb3ZpZGVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWc7XG4gICAgICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPSBjb25maWc/LmlzTm9zSW5kaWNhdG9yICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSBjb25maWcuYWRkSW5saW5lUmVjb3JkICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1BhZ2luYXRpb24gPSBjb25maWcuaXNQYWdpbmF0aW9uICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b24gPSBjb25maWcuYWN0aW9uQnV0dG9uICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0RlbGV0ZVJvdyA9IGNvbmZpZy5pc0RlbGV0ZVJvdyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNFZGl0Um93ID0gY29uZmlnLmlzRWRpdFJvdyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoQmFyID0gY29uZmlnLnNlYXJjaEJhciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNCdXR0b25zID0gY29uZmlnLmlzQnV0dG9ucyAhPT0gZmFsc2U7IC8vc3VtbWFyeUNvbHVtblxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uICE9PSB0cnVlICYmIGNvbHVtbi5zdW1tYXJ5Um93ICE9PSB0cnVlICYmIGNvbHVtbi5sYWJlbCkgLy8gRXhjbHVkZSBvbmx5IHdoZW4gZXhwbGljaXRseSB0cnVlXG4gICAgICAgIC5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCk7XG5cbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gIT09IHRydWUgJiYgY29sdW1uLnN1bW1hcnlSb3cgIT09IHRydWUgJiYgY29sdW1uLmFwaU5hbWUpIC8vIEV4Y2x1ZGUgb25seSB3aGVuIGV4cGxpY2l0bHkgdHJ1ZVxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zb3J0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5oeXBlckxpbmsgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmVkaXRDb2x1bW4gPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnJlYWRPbmx5ID09PSBmYWxzZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdEYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMudGltZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdUaW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMub2JqZWN0Q29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ09iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmZpbGVDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnRmlsZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmJvb2xlYW5Db2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnQm9vbGVhbicpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuXG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnN1bW1hcnlSb3dzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeVJvdyA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8vIEVuc3VyZSBgdGhpcy5kYXRhYCBpcyBhbiBhcnJheVxuICAgIGlmICghdGhpcy5kYXRhIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGF0YSBpcyBub3QgaW5pdGlhbGl6ZWQgb3IgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICB0aGlzLmRhdGEgPSBbXTsgIC8vIEluaXRpYWxpemUgYXMgYW4gZW1wdHkgYXJyYXkgaWYgaXQncyBub3QgdmFsaWRcbiAgICB9XG4gICAgLy8gRW5zdXJlIGB0aGlzLmRhdGFTb3VyY2UuZGF0YWAgaXMgaW5pdGlhbGl6ZWRcbiAgICAvL1NLUzE1RkVCMjUgSW5pdGlhbGl6ZSB0aGlzIGluIHlvdXIgZGF0YSBmZXRjaCBtZXRob2RcbiAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZSddIDogdGhpcy5wYWdlU2l6ZSB8fCAxMDtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZUluZGV4ID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlSW5kZXgnXSA6IHRoaXMucGFnZUluZGV4IHx8IDE7XG4gICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnBhZ2luYXRpb24/LnRvdGFsUmVjb3JkcyA/IHRoaXMucGFnaW5hdGlvblsndG90YWxSZWNvcmRzJ10gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemVPcHRpb25zJ10gOiBbJzUnLCAnMTAnLCAnMjUnLCAnNTAnLCAnMTAwJywgJzIwMCddO1xuICAgIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9ICEhKHRoaXMucGFnaW5hdGlvbiAmJiBPYmplY3Qua2V5cyh0aGlzLnBhZ2luYXRpb24pLmxlbmd0aCA+IDApO1xuICAgIHRoaXMuaXNQYWdpbmF0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc1BhZ2luYXRpb24gPT09IHRydWUgPyB0aGlzLmlzUGFnaW5hdGlvbiA9IHRydWUgOiB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB0cnVlID8gdGhpcy5pc05vc0luZGljYXRvciA9IHRydWUgOiB0aGlzLmlzTm9zSW5kaWNhdG9yID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRhYmxlID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRhYmxlID09PSBmYWxzZSA/IHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlIDogdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZVxuXG5cbiAgICB0aGlzLmhlYWRlckxhYmVscyA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCkgOiB0aGlzLmhlYWRlckxhYmVscztcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZGlzcGxheWVkQ29sdW1ucztcbiAgICAvLyBTS1MyME1BUjI1IENoZWNrIGlmIHRoZSBkaXNwbHljb2x1bW4ncyBoYXZlIGEgc3VtbWFyeSBjb2x1bW5cbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsuLi50aGlzLmRpc3BsYXllZENvbHVtbnMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKV07XG4gICAgICB0aGlzLmhlYWRlckxhYmVscyA9IFsuLi50aGlzLmhlYWRlckxhYmVscywgLi4udGhpcy5zdW1tYXJ5Q29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCldO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdW1tYXJ5Um93cyAmJiB0aGlzLnN1bW1hcnlSb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXNTdW1tYXJ5Q29sdW1uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoZWxlbWVudCA9PiBlbGVtZW50ID09PSB0aGlzLnN1bW1hcnlSb3dzWzBdLmNvbHVtbik7XG4gICAgICBpZiAodGhpcy5pc1N1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZih0aGlzLnN1bW1hcnlSb3dzWzBdLmNvbHVtbik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmlzU3VtbWFyeVN0YXJ0Q29sdW1uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnNsaWNlKDAsIGluZGV4IC0gMSk7XG4gICAgICAgICAgdGhpcy5pc1N1bW1hcnlFbmRDb2x1bW4gPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZpbHRlckNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgICB0aGlzLnNvcnRDb2x1bW5zID0gIHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zb3J0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5zb3J0Q29sdW1ucztcbiAgICB0aGlzLmh5cGVyTGlua0NvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmh5cGVyTGluayA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuaHlwZXJMaW5rQ29sdW1ucztcbiAgICB0aGlzLmVkaXRDb2x1bW4gPSB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZWRpdCA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZWRpdENvbHVtbjtcbiAgICB0aGlzLmRhdGVDb2x1bW5zID0gIHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnZGF0ZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmRhdGVDb2x1bW5zO1xuICAgIHRoaXMudGltZUNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICd0aW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMudGltZUNvbHVtbnM7XG4gICAgdGhpcy5vYmplY3RDb2x1bW5zID0gIHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnb2JqZWN0JykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMub2JqZWN0Q29sdW1ucztcbiAgICB0aGlzLmZpbGVDb2x1bW5zID0gIHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnZmlsZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmZpbGVDb2x1bW5zO1xuICAgIHRoaXMuYm9vbGVhbkNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdib29sZWFuJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuYm9vbGVhbkNvbHVtbnM7XG5cbiAgICB0aGlzLmlubGluZUVsZW1lbnQgPSBPYmplY3QuZnJvbUVudHJpZXModGhpcy5kaXNwbGF5ZWRDb2x1bW5zLm1hcChrZXkgPT4gW2tleSwgXCJcIl0pKTtcblxuICAgIHRoaXMuZHJvcGRvd25BY3Rpb25CdXR0b24gPSAodGhpcy5hY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXkgJiYgdGhpcy5hY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/Lmxlbmd0aCA+IDApID8gdGhpcy5hY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/LnNsaWNlKHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUpIDogW107XG4gICAgXG4gICAgLy9TS1MyNkFQUjI1IENvbnZlcnQgc3RyaW5nIGFycmF5IHRvIG9iamVjdCBhcnJheSB3aXRoIGBuYW1lYCBwcm9wZXJ0eVxuICAgIGlmICh0aGlzLmxpc3RWaWV3cy5sZW5ndGggJiYgdHlwZW9mIHRoaXMubGlzdFZpZXdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5saXN0Vmlld3MgPSB0aGlzLmxpc3RWaWV3cy5tYXAodmlldyA9PiAoeyBuYW1lOiB2aWV3IH0pKTtcbiAgICB9XG4gICAgdGhpcy5saXN0Vmlld3MgJiYgdGhpcy5saXN0Vmlld3MubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0TGlzdFZpZXcodGhpcy5saXN0Vmlld3NbMF0ubmFtZSkgOiAnJ1xuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICAgIGlmICghdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2UoMCwgdGhpcy5wYWdlU2l6ZSB8fCAxMCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgfSwgMTAwKVxuICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuZGlzcGxheWVkQ29sdW1ucykge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgfVxuICAgIGlmICh0aGlzLndpdGhDaGVja0JveCAmJiB0aGlzLmFjdGlvbkJ1dHRvbikge1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2JvdGgnO1xuICAgIH0gZWxzZSBpZiAodGhpcy53aXRoQ2hlY2tCb3gpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdzZWxlY3QnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdhY3Rpb24nO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWwpIHtcbiAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDsgLy8gU2hvdyB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgICAgdGhpcy5wcmV2U2VhcmNoID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29uZmlnUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0ge307XG4gICAgICBjb25zdCBmaWx0T2JqczogYW55ID0ge307XG4gICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtlbGVtZW50XSA9IG51bGw7XG4gICAgICAgIGZpbHRPYmpzW2VsZW1lbnRdID0gW107XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgIGlmICh0YWJsZUJvZHkgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gISh0YWJsZUJvZHkuc2Nyb2xsSGVpZ2h0IDwgNDUwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTUwMCk7IC8vIFdhaXRzIDEwMG1zIGZvciByZW5kZXJpbmdcbiAgICAvLyBTS1MyME1BUjI1IEluaXRpYWxpemUgc3VtbWFyeVZhbHVlcyBmb3IgaW5wdXQgcm93cyBhbmQgY29tcHV0ZSB2YWx1ZXNcbiAgICBpZiAoY2hhbmdlc1snc3VtbWFyeVJvd3MnXSB8fCBjaGFuZ2VzWydzdW1tYXJ5Q29sdW1ucyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5jb21wdXRlU3VtbWFyeUNvbHVtbnMoKTsgLy8gQ29tcHV0ZSBwZXItcm93IHN1bW1hcnkgY29sdW1ucyBmaXJzdFxuICAgICAgdGhpcy5zdW1tYXJ5Um93cz8uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93LnR5cGUgPT09ICdpbnB1dCcgJiYgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAwOyAvLyBEZWZhdWx0IHRvIDAgZm9yIGlucHV0c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hDb25maWdzICYmIHRoaXMuc2VhcmNoQm94VmFsdWUgPyB0aGlzLmVtcHR5U2VhcmNoKHRoaXMuc2VhcmNoQm94VmFsdWUpIDogJycgLy8gU0tTMTdBUFIyNSB1cGRhdGUgc2VhcmNoIGJveCB2YWx1ZVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlID0geyBkYXRhOiBbXSB9OyAvLyBvciB1c2UgYSBwcm9wZXIgZGF0YSBzdHJ1Y3R1cmVcbiAgICAvLyBTS1MxM01BUjI1IGdldCBkYXRhIGZyb20gcXVlc3Rpb24gaWYgZnJvbSBmb3JtQnVpbGRlclxuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMucXVlc3Rpb24/LmlucHV0ID8gdGhpcy5xdWVzdGlvbj8uaW5wdXQgOiBbXVxuICAgICAgY29uc3QgcGFyc2VkTWV0YSA9IHR5cGVvZiB0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10gPT09ICdvYmplY3QnID8gdGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddIHx8IFtdIDogSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xuICAgICAgaWYgKCBwYXJzZWRNZXRhID09PSBudWxsIHx8ICBwYXJzZWRNZXRhID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkocGFyc2VkTWV0YSkgfHwgcGFyc2VkTWV0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTm8gdmFsaWQgbWV0YWRhdGEgcHJvdmlkZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZztcbiAgICAgICAgdGhpcy5pc05vc0luZGljYXRvciA9IGNvbmZpZz8uaXNOb3NJbmRpY2F0b3IgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZElubGluZVJlY29yZCA9IGNvbmZpZy5hZGRJbmxpbmVSZWNvcmQgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUGFnaW5hdGlvbiA9IGNvbmZpZy5pc1BhZ2luYXRpb24gIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbiA9IGNvbmZpZy5hY3Rpb25CdXR0b24gIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRGVsZXRlUm93ID0gY29uZmlnLmlzRGVsZXRlUm93ICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0VkaXRSb3cgPSBjb25maWcuaXNFZGl0Um93ICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hCYXIgPSBjb25maWcuc2VhcmNoQmFyICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0J1dHRvbnMgPSBjb25maWcuaXNCdXR0b25zICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5pdGVtc1BlclBhZ2UgfHwgNTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGVhZGVyTGFiZWxzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiAhPT0gdHJ1ZSAmJiBjb2x1bW4uc3VtbWFyeVJvdyAhPT0gdHJ1ZSAmJiBjb2x1bW4ubGFiZWwpIC8vIEV4Y2x1ZGUgb25seSB3aGVuIGV4cGxpY2l0bHkgdHJ1ZVxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpO1xuXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uICE9PSB0cnVlICYmIGNvbHVtbi5zdW1tYXJ5Um93ICE9PSB0cnVlICYmIGNvbHVtbi5hcGlOYW1lKSAvLyBFeGNsdWRlIG9ubHkgd2hlbiBleHBsaWNpdGx5IHRydWVcbiAgICAgICAgLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5zb3J0Q29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc29ydCA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuaHlwZXJMaW5rQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaHlwZXJMaW5rID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5lZGl0Q29sdW1uID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5yZWFkT25seSA9PT0gZmFsc2UpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmRhdGVDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnRGF0ZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLnRpbWVDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnVGltZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLm9iamVjdENvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdPYmplY3QnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5maWxlQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ0ZpbGUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5ib29sZWFuQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ0Jvb2xlYW4nKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcblxuICAgICAgdGhpcy5zdW1tYXJ5Q29sdW1ucyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gPT09IHRydWUpXG4gICAgICAgIC5tYXAoKHsgYXBpTmFtZSwgZmxkVHlwZSwgLi4ucmVzdCB9KSA9PiAoe1xuICAgICAgICAgIGZpZWxkTmFtZTogYXBpTmFtZSxcbiAgICAgICAgICB0eXBlOiBmbGRUeXBlLFxuICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgfSkpO1xuICAgICAgdGhpcy5zdW1tYXJ5Um93cyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlSb3cgPT09IHRydWUpXG4gICAgICAgIC5tYXAoKHsgYXBpTmFtZSwgZmxkVHlwZSwgLi4ucmVzdCB9KSA9PiAoe1xuICAgICAgICAgIGZpZWxkTmFtZTogYXBpTmFtZSxcbiAgICAgICAgICB0eXBlOiBmbGRUeXBlLFxuICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAodGhpcy5hcGlNZXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgb3B0aW9ucyA9IFtdO1xuICAgICAgICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHRoYXQgdGhpcy5hcGlNZXRhIGlzIGFsd2F5cyBhbiBvYmplY3QuICBcbiAgICAgICAgIC8vQVAtMjZNQVIyNSBJZiBpdCdzIGFscmVhZHkgYW4gb2JqZWN0LCBrZWVwIGl0IGFzIGlzOyBvdGhlcndpc2UsIHBhcnNlIGl0IGZyb20gYSBKU09OIHN0cmluZy5cbiAgICAgICAgICB0aGlzLmFwaU1ldGEgPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICAgICAgICBsZXQgYXBpT2JqOiBhbnkgPSB0aGlzLmFwaU1ldGE7XG4gICAgICAgICAgaWYgKGFwaU9iaiAmJiBhcGlPYmouZW5kcG9pbnQpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGFwaU9iai5lbmRwb2ludCk/LnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZXM7XG4gICAgICAgICAgICBpZiAoYXBpT2JqLnZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgIC8vIFZEIDIyTWF5MjQgLSBoYW5kbGluZyBtdWx0aXBsZSBjaGlsZCBvYmplY3RzXG4gICAgICAgICAgICAgIHJlc3BvbnNlcyA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoYXBpUmVzcG9uc2UsIGFwaU9iai52YXJpYWJsZSk7XG4gICAgICAgICAgICAgIGxldCByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIC8vIEhBIDE5SkFOMjQgVG8gYXZvaWQgdW5kZWZpbmVkIGVycm9yIGluIGNvbnNvbGVcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3AgPSByZXNwb25zZXNbaV07XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9wdGlvbnMgPSByZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIHsgIC8vIFZEIDE5SkFOMjQgLSBpZiByZXNwb25zZSBoYXMgdmFsdWUod2hpY2ggaXMgYXJyYXkpIG9ubHlcbiAgICAgICAgICAgICAgcmVzcG9uc2VzID0gYXBpUmVzcG9uc2U7XG4gICAgICAgICAgICAgIG9wdGlvbnMgPSByZXNwb25zZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5tYXAoKG9iajogYW55KSA9PiAoeyAuLi5vYmosIGVkaXQ6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG9wdGlvbnM7XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZEIE5PVjIzIC0gaGFuZGxlIHRoZSBkZXBlbmRlbnQgdXBkYXRlIGZvciBkcm9wZG93blxuICAgICAgICBsZXQgc291cmNlSWQgPSBhcGlPYmo/LnNvdXJjZVF1ZXN0aW9uSWQ7XG4gICAgICAgIGxldCBmaWVsZCA9IGFwaU9iaj8uZmllbGQ7ICAgICAgICAvLyBWRCAxM01BWTI0IC0gZHluYW1pYyBmaWVsZCBjaGFuZ2VzXG4gICAgICAgIGlmIChzb3VyY2VJZCkge1xuICAgICAgICAgIC8vIC8vIFZEIDEwTWF5MjQgU3Vic2NyaWJlIGZvciB0aGUgY2hhbmdlc1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmNoYW5nZUFubm91bmNlZCQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5tYXAoKG9iajogYW55KSA9PiAoeyAuLi5vYmosIGVkaXQ6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gY2hhbmdlVmFsdWUudmFsdWVPYmo7XG4gICAgICAgICAgICAgICAgICBsZXQgdmFsaWRJdGVtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIC8vIFZEIDEzTUFZMjQgLSBiaW5kIGR5bmFtaWMgZmllbGRcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBWRCAyNkp1bjI0IC0gdG8gaGFuZGxlIG11bHRpcGxlIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmpFbGVtZW50VmFsdWUgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGVsZW1lbnQsIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmpJdGVtVmFsdWUgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGl0ZW0sIGZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmpFbGVtZW50VmFsdWUgPT0gb2JqSXRlbVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZEl0ZW0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy9SUyAxNEZFQjIwMjVcbiAgICAgICAgICAgICAgICAgIC8vVXBkYXRlIFBhZ2luYXRpb24gYmVmb3JlIGVtaXRcbiAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YSwgaXRlbV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNLUzIwTUFSMjUgTWFudWFsbHkgdHJpZ2dlciBuZ09uQ2hhbmdlc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmNvbmZpcm1DaGFuZ2UoYXBpT2JqPy5zb3VyY2VRdWVzdGlvbklkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWFyY2hCYXIgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNlYXJjaEJhciA9PT0gdHJ1ZSA/IHRoaXMuc2VhcmNoQmFyID0gdHJ1ZSA6IHRoaXMuc2VhcmNoQmFyID0gZmFsc2U7XG4gICAgdGhpcy53aXRoQ2hlY2tCb3ggPT09IHVuZGVmaW5lZCB8fCB0aGlzLndpdGhDaGVja0JveCA9PT0gZmFsc2UgPyB0aGlzLndpdGhDaGVja0JveCA9IGZhbHNlIDogdGhpcy53aXRoQ2hlY2tCb3ggPSB0cnVlO1xuICAgIHRoaXMuaXNFZGl0Um93ID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRSb3cgPT09IGZhbHNlID8gdGhpcy5pc0VkaXRSb3cgPSBmYWxzZSA6IHRoaXMuaXNFZGl0Um93ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGVsZXRlUm93ID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0RlbGV0ZVJvdyA9PT0gZmFsc2UgPyB0aGlzLmlzRGVsZXRlUm93ID0gZmFsc2UgOiB0aGlzLmlzRGVsZXRlUm93ID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYWN0aW9uQnV0dG9uID09PSBmYWxzZSA/IHRoaXMuYWN0aW9uQnV0dG9uID0gZmFsc2UgOiB0aGlzLmFjdGlvbkJ1dHRvbiA9IHRydWU7XG4gICAgdGhpcy5pc0J1dHRvbnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzQnV0dG9ucyA9PT0gZmFsc2UgPyB0aGlzLmlzQnV0dG9ucyA9IGZhbHNlIDogdGhpcy5pc0J1dHRvbnMgPSB0cnVlO1xuICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID09PSB1bmRlZmluZWQgfHwgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPT09IGZhbHNlID8gdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSBmYWxzZSA6IHRoaXMuYWRkSW5saW5lUmVjb3JkID0gdHJ1ZTtcbiAgICB0aGlzLmlzUGFnaW5hdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNQYWdpbmF0aW9uID09PSB0cnVlID8gdGhpcy5pc1BhZ2luYXRpb24gPSB0cnVlIDogdGhpcy5pc1BhZ2luYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc05vc0luZGljYXRvciA9PT0gdHJ1ZSA/IHRoaXMuaXNOb3NJbmRpY2F0b3IgPSB0cnVlIDogdGhpcy5pc05vc0luZGljYXRvciA9IGZhbHNlO1xuICAgIHRoaXMuaXNFZGl0YWJsZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNFZGl0YWJsZSA9PT0gZmFsc2UgPyB0aGlzLmlzRWRpdGFibGUgPSBmYWxzZSA6IHRoaXMuaXNFZGl0YWJsZSA9IHRydWVcblxuXG4gICAgdGhpcy5oZWFkZXJMYWJlbHMgPSB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpIDogdGhpcy5oZWFkZXJMYWJlbHM7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmRpc3BsYXllZENvbHVtbnM7XG4gICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbLi4udGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCAuLi50aGlzLnN1bW1hcnlDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSldO1xuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBbLi4udGhpcy5oZWFkZXJMYWJlbHMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpXTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckNvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmZpbHRlckNvbHVtbnM7XG4gICAgdGhpcy5zb3J0Q29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNvcnQgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuaHlwZXJMaW5rQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmh5cGVyTGluayA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuaHlwZXJMaW5rQ29sdW1ucztcbiAgICB0aGlzLmVkaXRDb2x1bW4gPSB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZWRpdCA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZWRpdENvbHVtbjtcbiAgICB0aGlzLmRhdGVDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpOiB0aGlzLmRhdGVDb2x1bW5zO1xuICAgIHRoaXMudGltZUNvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAndGltZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLnRpbWVDb2x1bW5zO1xuICAgIHRoaXMub2JqZWN0Q29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdvYmplY3QnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5vYmplY3RDb2x1bW5zO1xuICAgIHRoaXMuZmlsZUNvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnZmlsZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmZpbGVDb2x1bW5zO1xuICAgIHRoaXMuYm9vbGVhbkNvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmJvb2xlYW5Db2x1bW5zO1xuXG4gICAgdGhpcy5pbmxpbmVFbGVtZW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZGlzcGxheWVkQ29sdW1ucy5tYXAoa2V5ID0+IFtrZXksIFwiXCJdKSk7XG5cbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemUnXSA6IHRoaXMudGFibGVQYXJhbXM/LnBhZ2luYXRpb24/LnBhZ2VTaXplIHx8MTA7XG4gICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VJbmRleCA/IHRoaXMucGFnaW5hdGlvblsncGFnZUluZGV4J10gOiB0aGlzLnRhYmxlUGFyYW1zPy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggfHwxO1xuICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5wYWdpbmF0aW9uPy50b3RhbFJlY29yZHMgPyB0aGlzLnBhZ2luYXRpb25bJ3RvdGFsUmVjb3JkcyddIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplT3B0aW9ucyddIDogWyc1JywgJzEwJywgJzI1JywgJzUwJywgJzEwMCcsICcyMDAnXTtcbiAgICB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPSAhISh0aGlzLnBhZ2luYXRpb24gJiYgT2JqZWN0LmtleXModGhpcy5wYWdpbmF0aW9uKS5sZW5ndGggPiAwKTtcblxuICAgIHRoaXMuZHJvcGRvd25BY3Rpb25CdXR0b24gPSB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheT8uc2xpY2UodGhpcy5hY3Rpb25CdXR0b25BcnJheT8uc2l6ZSk7XG5cbiAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuXG4gICAgLy9TS1MyNkFQUjI1IENvbnZlcnQgc3RyaW5nIGFycmF5IHRvIG9iamVjdCBhcnJheSB3aXRoIGBuYW1lYCBwcm9wZXJ0eVxuICAgIGlmICh0aGlzLmxpc3RWaWV3cy5sZW5ndGggJiYgdHlwZW9mIHRoaXMubGlzdFZpZXdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5saXN0Vmlld3MgPSB0aGlzLmxpc3RWaWV3cy5tYXAodmlldyA9PiAoeyBuYW1lOiB2aWV3IH0pKTtcbiAgICB9XG4gICAgdGhpcy5saXN0Vmlld3MgJiYgdGhpcy5saXN0Vmlld3MubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0TGlzdFZpZXcodGhpcy5saXN0Vmlld3NbMF0ubmFtZSkgOiAnJ1xuICAgIGlmICghdGhpcy5jb25maWdQYWdpbmF0aW9uICYmIHRoaXMuZGF0YSAmJiB0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKDAsIHRoaXMucGFnZVNpemUgfHwgMTApO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwICYmICF0aGlzLmNvbmZpZ1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHt9O1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlbZWxlbWVudF0gPSBudWxsO1xuICAgICAgICBmaWx0T2Jqc1tlbGVtZW50XSA9IFtdO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGVsZW1lbnQsIGtleSk7ICAvLyA8LSBnZXQgbmVzdGVkIHZhbHVlXG4gICAgXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbHRPYmpzW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlba2V5XSA9IG5ldyBTZXQoZmlsdE9ianNba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIH0sIDApXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy50b3RhbFJlY29yZHMgfHwgdGhpcy5kYXRhPy5sZW5ndGhcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy50b3RhbFJlY29yZHMgfHwgdGhpcy5kYXRhPy5sZW5ndGhcbiAgICBjb25zdCBOeHREYXRhVGFibGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdOeHREYXRhVGFibGUnKSk7XG4gICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IE54dERhdGFUYWJsZT8uY3VycmVudFNvcnRDb2x1bW47XG4gICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IE54dERhdGFUYWJsZT8uY3VycmVudFNvcnREaXJlY3Rpb247XG4gICAgaWYgKE54dERhdGFUYWJsZT8uYWRkUmVjb3JkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gTnh0RGF0YVRhYmxlPy5wYWdlU2l6ZVxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBOeHREYXRhVGFibGU/LnBhZ2VJbmRleFxuICAgICAgdmFyIG9iajogYW55ID0ge307XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5pbmxpbmVFbGVtZW50KTtcbiAgICAgIGtleXMuZm9yRWFjaCgoZWxlbWVudEtleTogYW55KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50S2V5XSA9ICcnO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGEucHVzaChvYmopO1xuICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSk7XG4gICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiBmYWxzZSwgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgaWYgKHRoaXMud2l0aENoZWNrQm94ICYmIHRoaXMuYWN0aW9uQnV0dG9uKSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnYm90aCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLndpdGhDaGVja0JveCkge1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ3NlbGVjdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGlvbkJ1dHRvbikge1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2FjdGlvbic7XG4gICAgfVxuXG4gICAgLy8gU0tTMTlNQVIyNSBhZGQgZmlyc3QgbGluZSBmb3IgZm9ybWJ1aWxkZXIgdGFibGVcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7IHRoaXMuYWRkVGFibGVSZWNvcmQodGhpcy5pbmxpbmVFbGVtZW50KSB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtYm9keScpO1xuICAgICAgICBpZiAodGFibGVCb2R5ICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEodGFibGVCb2R5LnNjcm9sbEhlaWdodCA8IDQ1MClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDE1MDApOyAvLyBXYWl0cyAxMDBtcyBmb3IgcmVuZGVyaW5nXG4gICAgLy8gU0tTMTdBUFIyNSB0YWJsZSBwYXJlbXMgZGF0YSB1cGRhdGVcbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWwpIHtcbiAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDsgLy8gU2hvdyB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgICAgdGhpcy5wcmV2U2VhcmNoID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7XG4gICAgfSBlbHNlIGlmKHRoaXMudGFibGVQYXJhbXM/LnRhYmxlU2VhcmNoKXtcbiAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnRhYmxlUGFyYW1zPy50YWJsZVNlYXJjaDtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hDb25maWdzICYmIHRoaXMuc2VhcmNoQm94VmFsdWUgPyB0aGlzLmVtcHR5U2VhcmNoKHRoaXMuc2VhcmNoQm94VmFsdWUpIDogJydcbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheSA9IHRoaXMudGFibGVQYXJhbXM/LnNlYXJjaEZpbHRlckRhdGEgPyB0aGlzLnRhYmxlUGFyYW1zPy5zZWFyY2hGaWx0ZXJEYXRhIDoge307XG4gICAgdGhpcy5zb3J0RGF0YSh0aGlzLnRhYmxlUGFyYW1zPy5zb3J0Py5jb2x1bW4sIHRoaXMudGFibGVQYXJhbXM/LnNvcnQ/LmRpcmVjdGlvbix0cnVlKVxuICB9XG5cbiAgLy8gU0tTMjBNQVIyNSBzdW1tYXJ5IGNvbHVtbnMgY2FsY1xuICBjb21wdXRlU3VtbWFyeUNvbHVtbnMoKSB7XG4gICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgICBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKyAoTnVtYmVyKG5ld1Jvd1tvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgbmV3Um93W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBbZmlyc3RPcGVyYW5kLCAuLi5yZXN0T3BlcmFuZHNdID0gc3VtbWFyeUNvbC5vcGVyYW5kcztcbiAgICAgICAgICAgIGxldCBzdW0gPSBOdW1iZXIobmV3Um93W2ZpcnN0T3BlcmFuZF0pIHx8IDA7IC8vIFN0YXJ0IHdpdGggdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgICAgICAgIHN1bSA9IHJlc3RPcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcihuZXdSb3dbb3BlcmFuZF0pIHx8IDApLCBzdW0pO1xuICAgICAgICAgICAgbmV3Um93W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0ID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICogKE51bWJlcihuZXdSb3dbb3BlcmFuZF0pIHx8IDApLCAxKTsgLy8gU3RhcnQgd2l0aCAxXG4gICAgICAgICAgICBuZXdSb3dbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gcHJvZHVjdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YTsgLy8gVXBkYXRlIGRhdGFTb3VyY2VcbiAgICAgIGlmICghdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZSgwLCB0aGlzLnBhZ2VTaXplIHx8IDEwKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFNLUzIwTUFSMjUgQ29tcHV0ZSB2YWx1ZXMgZm9yIHN1bW1hcnkgcm93c1xuICBjb21wdXRlU3VtbWFyeVZhbHVlcygpIHtcbiAgICB0aGlzLnN1bW1hcnlSb3dzPy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBpZiAocm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbicpIHtcbiAgICAgICAgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdW0nICYmIHJvdy5jb2x1bW4pIHtcbiAgICAgICAgICAvLyBDb3JyZWN0IHN1bSBvcGVyYXRpb25cbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSB0aGlzLmRhdGEucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgZGF0YVJvdykgPT4gYWNjICsgKE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwKSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgcm93LmNvbHVtbikge1xuICAgICAgICAgIC8vIFN1YnRyYWN0IHNob3VsZCBzdGFydCB3aXRoIHRoZSBmaXJzdCB2YWx1ZVxuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9IHRoaXMuZGF0YS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkYXRhUm93LCBpbmRleCkgPT4gaW5kZXggPT09IDAgPyBOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCA6IGFjYyAtIChOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHJvdy5jb2x1bW4pIHtcbiAgICAgICAgICAvLyBNdWx0aXBseSBzaG91bGQgc3RhcnQgd2l0aCAxXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gdGhpcy5kYXRhLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGRhdGFSb3cpID0+IGFjYyAqIChOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCksIC8vIFVzZSAxIGluc3RlYWQgb2YgMFxuICAgICAgICAgICAgMVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiByb3cub3BlcmFuZHMpIHtcbiAgICAgICAgICAvLyBTdWJ0cmFjdCBiYXNlZCBvbiBvcGVyYW5kc1xuICAgICAgICAgIGNvbnN0IFtvcDEsIG9wMl0gPSByb3cub3BlcmFuZHM7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDFdIHx8IDApIC0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDJdIHx8IDApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdW0nICYmIHJvdy5vcGVyYW5kcykge1xuICAgICAgICAgIC8vIFN1bSBiYXNlZCBvbiBvcGVyYW5kc1xuICAgICAgICAgIGNvbnN0IFtvcDEsIG9wMl0gPSByb3cub3BlcmFuZHM7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDFdIHx8IDApICsgKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDJdIHx8IDApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgcm93Lm9wZXJhbmRzKSB7XG4gICAgICAgICAgLy8gTXVsdGlwbHkgYmFzZWQgb24gb3BlcmFuZHNcbiAgICAgICAgICBjb25zdCBbb3AxLCBvcDJdID0gcm93Lm9wZXJhbmRzO1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9ICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AxXSB8fCAwKSAqICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AyXSB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gU0tTMjBNQVIyNSBIYW5kbGUgbWFudWFsIGlucHV0IGNoYW5nZXMgaW4gc3VtbWFyeSByb3dzIFxuICBvblN1bW1hcnlJbnB1dENoYW5nZSgpIHtcbiAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gIH1cbiAgLy8gU0tTMTVGRUIyNSBDdXN0b20gc29ydCBmdW5jdGlvblxuICBzb3J0RGF0YShjb2x1bW46IHN0cmluZywgc29ydGluZ1N0YXRlPzogYW55IHwgdW5kZWZpbmVkLCBjdXJyZW50U3RhdGU/OmFueSB8dW5kZWZpbmVkKSB7XG4gICAgLy8gRGVmaW5lIHNvcnRpbmcgc3RhdGVzXG4gICAgY29uc3Qgc29ydGluZ1N0YXRlcyA9IFsnYXNjJywgJ2Rlc2MnLCAnbm9uZSddO1xuICAgIGlmICghdGhpcy5jb25maWdQYWdpbmF0aW9uIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXRlXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uICYmICFzb3J0aW5nU3RhdGUpIHtcbiAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBzb3J0aW5nIHN0YXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNvcnRpbmdTdGF0ZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZXNbKGN1cnJlbnRJbmRleCArIDEpICUgc29ydGluZ1N0YXRlcy5sZW5ndGhdIGFzIFwiYXNjXCIgfCBcImRlc2NcIiB8IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBuZXcgY29sdW1uIGlzIHNlbGVjdGVkLCBzdGFydCB3aXRoIGFzY2VuZGluZyBzb3J0XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBzb3J0aW5nU3RhdGUgfHwgJ2FzYyc7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTtcbiAgICAgIC8vIE9ubHkgc29ydCBpZiB0aGUgZGlyZWN0aW9uIGlzICdhc2MnIG9yICdkZXNjJ1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnIHx8IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWVBID0gdGhpcy5nZXRWYWx1ZShhLCBjb2x1bW4pO1xuICAgICAgICAgIGxldCB2YWx1ZUIgPSB0aGlzLmdldFZhbHVlKGIsIGNvbHVtbik7XG4gICAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZCBvciBudWxsIHZhbHVlc1xuICAgICAgICAgIGlmICh2YWx1ZUEgPT0gbnVsbCAmJiB2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIDA7IC8vIEJvdGggYXJlIG51bGwvdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKHZhbHVlQSA9PSBudWxsKSByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7IC8vIHZhbHVlQSBpcyBudWxsXG4gICAgICAgICAgaWYgKHZhbHVlQiA9PSBudWxsKSByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7IC8vIHZhbHVlQiBpcyBudWxsXG4gICAgICAgICAgLy8gSGFuZGxlIGRhdGUgc29ydGluZ1xuICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZUNvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKHZhbHVlQSk7XG4gICAgICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKHZhbHVlQik7XG4gICAgICAgICAgICB2YWx1ZUEgPSBkYXRlQS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB2YWx1ZUIgPSBkYXRlQi5nZXRUaW1lKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWVBID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWVCID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgLy8gSGFuZGxlIG51bWJlciBzb3J0aW5nXG4gICAgICAgICAgICB2YWx1ZUEgPSBOdW1iZXIodmFsdWVBKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IE51bWJlcih2YWx1ZUIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlQSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlQiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdHJpbmcgY29tcGFyaXNvblxuICAgICAgICAgICAgdmFsdWVBID0gdmFsdWVBLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2YWx1ZUIgPSB2YWx1ZUIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZXNcbiAgICAgICAgICBpZiAodmFsdWVBIDwgdmFsdWVCKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUEgPiB2YWx1ZUIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdmFsdWVzIGFyZSB0aGUgc2FtZSwgcmV0dXJuIDAgdG8gbWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhID8gdGhpcy5maWx0ZXJCb3hEYXRhPy5zbGljZSgwLCB0aGlzLnBhZ2VTaXplIHx8IDEwKSA6IHRoaXMuZGF0YT8uc2xpY2UoMCwgdGhpcy5wYWdlU2l6ZSB8fCAxMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXRlXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgc29ydGluZyBzdGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBzb3J0aW5nU3RhdGVzLmluZGV4T2YodGhpcy5jdXJyZW50U29ydERpcmVjdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBzb3J0aW5nU3RhdGVzWyhjdXJyZW50SW5kZXggKyAxKSAlIHNvcnRpbmdTdGF0ZXMubGVuZ3RoXSBhcyBcImFzY1wiIHwgXCJkZXNjXCIgfCBcIm5vbmVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGEgbmV3IGNvbHVtbiBpcyBzZWxlY3RlZCwgc3RhcnQgd2l0aCBhc2NlbmRpbmcgc29ydFxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IGZhbHNlLCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgY3VycmVudFNvcnRDb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0pKTtcbiAgICAgIC8vIE9ubHkgc29ydCBpZiB0aGUgZGlyZWN0aW9uIGlzICdhc2MnIG9yICdkZXNjJ1xuICAgICAgaWYoY3VycmVudFN0YXRlICE9PSB0cnVlKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbixsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIHRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIG9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuaXNTY3JvbGxlZCA9IHRhYmxlQ29udGFpbmVyLnNjcm9sbFRvcCA+IDA7XG4gICAgY29uc3QgdGFibGVCb2R5SGVpZ2h0ID0gdGFibGVDb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IGlzQXRCb3R0b20gPSB0YWJsZUJvZHlIZWlnaHQgLSB0YWJsZUNvbnRhaW5lci5zY3JvbGxUb3AgPD0gdGFibGVDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICAvL1NLUzE1RkVCMjUgRW5zdXJlIHNoYWRvdyBpcyBoaWRkZW4gb25seSBpZiB0YWJsZSBib2R5IGhlaWdodCBpcyBncmVhdGVyIHRoYW4gNDAwcHhcbiAgICBpZiAodGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuaXNTaGFkb3dIaWRkZW4gPSAhKGlzQXRCb3R0b20gfHwgdGFibGVCb2R5SGVpZ2h0IDwgNDUwKTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgbG9zaW5nIHRoZSBmaWx0ZXIgY29tcG9uZW50IHdoZW4gdGhlIG1vdXNlIGlzIGNsaWNrZWQgb3V0c2lkZSB0YWJsZVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIG9uRG9jdW1lbnRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSBmYWxzZTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gcHJldmVudHMgYW55IG90aGVyIGRlZmF1bHQgYWN0aW9uXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5saXN0LXZpZXctZmlsdGVyJykpIHtcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZmlsdGVyIGRhdGEgdGhhdCB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyIGZpbHRlciBpY29uIGlzIHBhc3NlZCBpbiAnZmlsdGVyQXJyYXknIGFycmF5XG4gIGZpbHRlcihkYXRhczogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJBcnJheSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXIgPSBkYXRhcztcbiAgICB0aGlzLmZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5Py5bZGF0YXNdO1xuICAgIHRoaXMuc2VhcmNoRmlsdGVyID0gIXRoaXMuc2VhcmNoRmlsdGVyO1xuICAgIHRoaXMuaXNSZXNpemVkID0gdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0/Lmxlbmd0aCA+IDBcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGVtaXR0aW5nIHBhZ3Igc2l6ZSBhbmQgaW5kZXggdG8gcGFyZW50IG9uIHBhZ2luYXRpbmdcbiAgcGFnZVBhcmFtcyhldmVudDogYW55KSB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXhcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemVcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy5maWx0ZXJCb3hEYXRhPy5sZW5ndGhcbiAgICBpZiAoIXRoaXMuY29uZmlnUGFnaW5hdGlvbiB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKHRoaXMuc2VhcmNoQm94VmFsdWUpXG4gICAgICBjb25zdCBzdGFydCA9IChOdW1iZXIoZXZlbnQucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKGV2ZW50LnBhZ2VTaXplKTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKGV2ZW50LnBhZ2VTaXplKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IGV2ZW50LnBhZ2VTaXplLCBwYWdlSW5kZXg6IGV2ZW50LnBhZ2VJbmRleCB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9XG4gICAgdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBhcHBseSBzZWFyY2ggYmFyIGZpbHRlciB1c2luZyBtYXRcbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIGxldCBmaWx0ZXJWYWx1ZSA9IGV2ZW50O1xuICAgIGZpbHRlclZhbHVlID8gZmlsdGVyVmFsdWUgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSA6IGZpbHRlclZhbHVlID0gJyc7XG4gICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IGZpbHRlclZhbHVlXG4gICAgaWYgKCFmaWx0ZXJWYWx1ZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbLi4udGhpcy5vcmlnaW5hbERhdGFdOyAvLyBSZXNldCB0byBvcmlnaW5hbCBkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGEuZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoY29sdW1uID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bY29sdW1uXT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICB0aGlzLnNGaWx0ZXJEYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGFcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy5zRmlsdGVyRGF0YT8ubGVuZ3RoXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhLmxlbmd0aFxuICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcih0aGlzLnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmZpbHRlclJldGFpbih0aGlzLmZpbHRlckRhdGFBcnJheSlcbiAgfVxuXG4gIC8qKiBTS1MxNUZFQjI1IFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cy4gKi9cbiAgaXNBbGxTZWxlY3RlZCgpIHtcbiAgICAvLyBjaGVjayBpZiBhbGwgcm93cyBhcmUgc2VsZWN0ZWRcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIC8qKiBTS1MxNUZFQjI1IFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cbiAgbWFzdGVyVG9nZ2xlKCkge1xuICAgIC8vIGlmIHRoZXJlIGlzIGEgc2VsZWN0aW9uIHRoZW4gY2xlYXIgdGhhdCBzZWxlY3Rpb25cbiAgICAvLyBlbWl0IHRoZSBzZWxlY3RlZCB2YWx1ZSBvbmx5IHRvIHBhcmVudFxuICAgIGlmICh0aGlzLmlzU29tZVNlbGVjdGVkKCkpIHtcbiAgICAgIC8vICAgdG8gcmVtb3ZlIHRoZSBlZGl0Um93LCBpZiB0aGUgY2hlY2tib3ggaXMgdW5jaGVja2VkXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQ/LmVkaXRSb3cpIGVsZW1lbnQuZWRpdFJvdyA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLCBlaXRoZXIgc2VsZWN0IGFsbCBpdGVtcyBvciBjbGVhciB0aGUgc2VsZWN0aW9uXG4gICAgICAvLyBlbWl0IHRoZSBzZWxlY3RlZCB2YWx1ZXMgdG8gcGFyZW50XG4gICAgICB0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/IHRoaXMuc2VsZWN0aW9uLmNsZWFyKCkgOiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHJvdykpO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVja3Mgd2hldGhlciBhbnkgaXRlbXMgYXJlIGN1cnJlbnRseSBzZWxlY3RlZCBpbiB0aGUgdGFibGUuXG4gIGlzU29tZVNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwO1xuICB9XG5cblxuICAvLyBTS1MxNUZFQjI1IGVtaXQgdGhlIGNoZWNrIGJveCB2YWx1ZXMsIHRoYXQgc2VsZWN0ZWQgc2VwYXJhdGVseVxuICBzZXBhcmF0ZVJvd1NlbGVjdChkYXRhOiBhbnksIGVsZW1lbnQ6IGFueSkge1xuICAgIC8vICAgdG8gcmVtb3ZlIHRoZSBlZGl0Um93IGlkIGNoZWNrIGJveCBpcyB1bmNoZWNrZWQgb24gc2VwYXJhdGUgcm93XG4gICAgaWYgKGRhdGEgJiYgZWxlbWVudD8uZWRpdFJvdykge1xuICAgICAgZWxlbWVudC5lZGl0Um93ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpXG4gICAgfVxuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGRhdGEgdGhhdCB0byBiZSBwYXNzZWQsIHdoZW4gdGFibGUgcm93IGlzIGNsaWNrZWRcbiAgdGFibGVDbGljayhkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRhYmxlUm93Q2xpY2suZW1pdChkYXRhKTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBSZXRhaW4gdGhlIGZpbHRlcmRhdGFcbiAgZmlsdGVyUmV0YWluKGZpbHRlcmtleTogYW55KSB7XG4gICAgaWYgKGZpbHRlcmtleSAmJiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGxldCBpc0RhdGFDaGVja2VkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVya2V5KSkge1xuICAgICAgICBpZiAoZmlsdGVya2V5W2tleV0gJiYgZmlsdGVya2V5W2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlzRGF0YUNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzRGF0YUNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5zRmlsdGVyRGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcmtleVtrZXldKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zRmlsdGVyRGF0YS5maWx0ZXIoKG5hbWU6IGFueSkgPT4gZmlsdGVya2V5W2tleV0/LmluY2x1ZGVzKG5hbWVba2V5XSkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YTEgPSBbLi4udGhpcy5kYXRhLCAuLi5kYXRhXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMucmVtb3ZlRHVwbGljYXRlcyhkYXRhMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcih0aGlzLnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICB0aGlzLmZpbHRlckJveERhdGEgPSB0aGlzLmRhdGFcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy5maWx0ZXJCb3hEYXRhPy5sZW5ndGhcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGFcbiAgICB0aGlzLnNvcnREYXRhKHRoaXMuY3VycmVudFNvcnRDb2x1bW4gLHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24pXG4gIH1cblxuLy8gU0tTMTVGRUIyNSB0byByZW1vdmUgZHVwbGljYXRlIG9iamVjdCBmcm9tIHR3byBhcnJheXMgKHNhZmUgc3RyaW5naWZ5KVxucmVtb3ZlRHVwbGljYXRlcyhvYmplY3RzOiBhbnkpIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB1bmlxdWVPYmplY3RzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0IHNhZmVTdHJpbmdpZnkgPSAob2JqOiBhbnkpID0+IHtcbiAgICBjb25zdCBzZWVuT2JqcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDsgLy8gcmVwbGFjZSB1bmRlZmluZWQgdG8gYXZvaWQgaXNzdWVzXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWVuT2Jqcy5oYXModmFsdWUpKSByZXR1cm47IC8vIHNraXAgY2lyY3VsYXJcbiAgICAgICAgc2Vlbk9ianMuYWRkKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBvYmplY3RzLmZvckVhY2goKG9iajogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gc2FmZVN0cmluZ2lmeShvYmopO1xuICAgIGlmICghc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgIHVuaXF1ZU9iamVjdHMucHVzaChvYmopO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVuaXF1ZU9iamVjdHM7XG59XG5cbiAgLy8gU0tTMTVGRUIyNSAgb24gZGVsZXRlIGNsaWNrIHNhdmUgdGhlIGRhdGEgaW4gdmFyaWFibGVzXG4gIGRlbGV0ZVJlY29yZChkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZGF0YV07IC8vIENyZWF0ZSBhIG5ldyByZWZlcmVuY2VcbiAgICAgIHVwZGF0ZWREYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHVwZGF0ZWREYXRhOyAvLyBSZWFzc2lnbiB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgIHRoaXMuZGF0YSA9IHVwZGF0ZWREYXRhOyAvLyBTeW5jIHRoaXMuZGF0YVxuICAgICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygpO1xuICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhU291cmNlLmRhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YSA9IGRhdGE7XG4gICAgICB0aGlzLmRlbGV0ZUluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmRlbGV0ZU1vZGFsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhZnRlciBjbGlja2luZyB5ZXMgaW4gZGVsZXRlIGFsZXJ0IG1vZGFsLCBlbWl0IHRvIHBhcmVudFxuICBkZWxldGVSZWNvcmREYXRhKCkge1xuICAgIHRoaXMub25EZWxldGVEYXRhLmVtaXQoeyBkYXRhOiB0aGlzLmRlbGV0ZURhdGEsIGFsbERhdGE6IHRoaXMuZGF0YSB9KTtcbiAgICB0aGlzLmRlbGV0ZU1vZGFsID0gZmFsc2U7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgdG8gc2F2ZSB0aGUgZWRpdGVkIGRhdGEgaW4gdGFibGU7XG4gIHNhdmVCdXR0b24oKSB7XG4gICAgLy8gZW1pdHRpbmcgYWxsIGRhdGEgd2l0aCBzZWxlY3RlZCBkYXRhXG4gICAgdGhpcy5zYXZlQnV0dG9uRGF0YS5lbWl0KHsgc2VsZWN0ZWREYXRhOiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCwgYWxsRGF0YTogdGhpcy5kYXRhIH0pO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IHBhc3MgdGhlIHJlamVjdGVkIHJlYXNvblxuICBvbkVkaXQoZGF0YTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JykgZGF0YS5lZGl0Um93ID0gdHJ1ZTsgLy8gbWFkZSBlZGl0aW5nIHJvdyBhcyB0cnVlIC8vICBzb2x2ZSB1bmRlZmluZWQgZXJyb3Igb24gc3RyaW5nXG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KGRhdGEpO1xuICAgIHRoaXMub25FZGl0RGF0YS5lbWl0KHsgZGF0YTogZGF0YSwgYWxsRGF0YTogdGhpcy5kYXRhIH0pO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSB0YWJsZSB0b3AgYnV0dG9ucyBlbWl0XG4gIGNvbW1vbkJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55KSB7XG4gICAgdGhpcy5idXR0b25FbWl0LmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBvYmplY3RzLiBcbiAgLy8gSW4gJ2VsZW1lbnQnIHdlIHdpbGwgcGFzcyBvYmplY3QgYW5kIGluICdjb2x1bW4nIHdlIHdpbGwgcGFzcyBwYXRoIGFzIHN0cmluZyBlZy5lbXBsb3llZS5maW5hbmNlSW5mb1swXS51YW4gdG8gcmV0aWV2ZSB1YW4gdmFsdWUgXG4gIGdldFZhbHVlKGVsZW1lbnQ6IGFueSwgY29sdW1uOiBzdHJpbmcpIHtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWNvbHVtbikge1xuICAgICAgcmV0dXJuICcnOyAvLyBSZXR1cm4gZW1wdHkgc3RyaW5nIG9yIG51bGwgaWYgZWxlbWVudCBvciBjb2x1bW4gaXMgaW52YWxpZFxuICAgIH1cbiAgICBsZXQgZmxkcyA9IGNvbHVtbi5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gZWxlbWVudDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBzcGxpdEZsZHMgPSBmbGRzW2ldLnNwbGl0KCdbJyk7XG4gICAgICBpZiAoc3BsaXRGbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtmbGRzW2ldXSA/PyAnJzsgLy8gVXNlIG51bGxpc2ggY29hbGVzY2luZyB0byBoYW5kbGUgdW5kZWZpbmVkL251bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpbmRleCA9IE51bWJlcihzcGxpdEZsZHNbMV0uc3BsaXQoJ10nKVswXSk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3NwbGl0Rmxkc1swXV0/LltpbmRleF0gPz8gJyc7IC8vIFNhZmVseSBhY2Nlc3MgYXJyYXkgaW5kZXhcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgLy9TS1MxNUZFQjI1IGh5cGVybGlubCBjb2x1bW5zIG9ubHkgZW1pdHRlZFxuICBvbkNsaWNrSHlwZXJsaW5rKGNvbHVtbjogYW55LCBlbGVtZW50OiBhbnksIGlzSHlwZXJMaW5rOiBhbnkpIHtcbiAgICBpZiAoaXNIeXBlckxpbmspIHRoaXMuaHlwZXJMaW5rRW1pdC5lbWl0KHsgY29sdW1uOiBjb2x1bW4sIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGh5cGVybGluayBhY3Rpb24gaXMgcHJlc2VudCBpbiB0aGF0IGNvbHVtblxuICBjaGVja0h5cGVybGlua0NoZWNrKGNvbDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHlwZXJMaW5rQ29sdW1ucz8uaW5jbHVkZXMoY29sKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgb24gYWRkIHJlY29yZCBpbiB0YWJsZSwgdGhlICdpbmxpbmVFbGVtZW50JyB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgdGFibGUgZGF0YSBcbiAgYWRkVGFibGVSZWNvcmQoZWxlbWVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ1BhZ2luYXRpb24gfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdmFyIG9iajogYW55ID0ge307XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XG4gICAgICBrZXlzLmZvckVhY2goKGVsZW1lbnRLZXk6IGFueSkgPT4ge1xuICAgICAgICBvYmpbZWxlbWVudEtleV0gPSAnJztcbiAgICAgIH0pO1xuICAgICAgLy8gU0tTMjBNQVIyNSBDb21wdXRlIHN1bW1hcnkgY29sdW1ucyBmb3IgdGhlIG5ldyByb3dcbiAgICAgIGlmICh0aGlzLnN1bW1hcnlDb2x1bW5zICYmIHRoaXMuc3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zLmZvckVhY2goc3VtbWFyeUNvbCA9PiB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1bScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICsgKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICogKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnNsaWNlKDEpLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICBOdW1iZXIob2JqW3N1bW1hcnlDb2wub3BlcmFuZHNbMF1dKSB8fCAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3QgPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjICogKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHByb2R1Y3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YS5wdXNoKG9iaik7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG5cbiAgICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGggKyAxO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmRhdGEubGVuZ3RoXG4gICAgICB0aGlzLmZpbHRlclRhYmxlTm9zICs9IDEgXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IE1hdGguY2VpbCh0aGlzLnRvdGFsQ291bnQgLyB0aGlzLnBhZ2VTaXplKTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcih0aGlzLnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0pO1xuICAgICAgdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXS5lZGl0Um93ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFnZUluZGV4ID0gTWF0aC5jZWlsKHRoaXMudG90YWxSZWNvcmRzIC8gMTApO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiB0cnVlLCBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogcGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgICAgdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IHBhZ2VJbmRleCB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gICAgdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBBY3Rpb24gYnV0dG9uIGNvbmRpdGlvbmFsbHkgZGlzcGxheWVkIGZ1bmN0aW9uXG4gIGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQ6IGFueSwgY29uZGl0aW9uczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBhbmRDb25kaXRpb25MaXN0LCBvckNvbmRpdGlvbkxpc3QgfSA9IGNvbmRpdGlvbnM7XG4gICAgICAvLyAgSWYgYW5kQ29uZGl0aW9uTGlzdCBleGlzdHMsIGNoZWNrIHRoYXQgYWxsIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgICAgY29uc3QgaXNBbmRDb25kaXRpb25NZXQgPSBhbmRDb25kaXRpb25MaXN0ID8gYW5kQ29uZGl0aW9uTGlzdC5ldmVyeSgoY29uZDogeyBjb25kaXRpb246IHN0cmluZyB8IGFueVtdOyBjb2x1bW46IHN0cmluZyB8IG51bWJlcjsgfSkgPT5cbiAgICAgICAgY29uZC5jb25kaXRpb24uaW5jbHVkZXMoZWxlbWVudFtjb25kLmNvbHVtbl0pXG4gICAgICApIDogdHJ1ZTsgLy8gIElmIG5vIGFuZENvbmRpdGlvbkxpc3QsIGNvbnNpZGVyIGl0IGFzIGFsd2F5cyBtZXRcbiAgICAgIC8vICBJZiBvckNvbmRpdGlvbkxpc3QgZXhpc3RzLCBjaGVjayBpZiBhdCBsZWFzdCBvbmUgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgY29uc3QgaXNPckNvbmRpdGlvbk1ldCA9IG9yQ29uZGl0aW9uTGlzdCA/IG9yQ29uZGl0aW9uTGlzdC5zb21lKChjb25kOiB7IGNvbmRpdGlvbjogc3RyaW5nIHwgYW55W107IGNvbHVtbjogc3RyaW5nIHwgbnVtYmVyOyB9KSA9PlxuICAgICAgICBjb25kLmNvbmRpdGlvbi5pbmNsdWRlcyhlbGVtZW50W2NvbmQuY29sdW1uXSlcbiAgICAgICkgOiB0cnVlOyAvLyAgSWYgbm8gb3JDb25kaXRpb25MaXN0LCBjb25zaWRlciBpdCBhcyBhbHdheXMgbWV0XG4gICAgICAvLyAgUmV0dXJuIHRydWUgaWYgdGhlIEFORCBjb25kaXRpb24gaXMgbWV0IGFuZCB0aGUgT1IgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgcmV0dXJuIGlzQW5kQ29uZGl0aW9uTWV0ICYmIGlzT3JDb25kaXRpb25NZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2sgaWYgdGhlIGNvbHVtbiBpcyBhIGRhdGUgY29sdW1uXG4gIGlzRGF0ZUNvbHVtbihjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVjayBpZiB0aGUgY29sdW1uIGlzIGEgdGltZSBjb2x1bW5cbiAgaXNUaW1lQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGltZUNvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbikgPz8gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGNvbmZpZyBzZWFyY2ggZmlsdGVyIGJveCBmdW5jdGlvblxuICBvblNlYXJjaChldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IGV2ZW50OyAvLyBVcGRhdGUgdGhlIGRpc3BsYXllZCB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZ3MgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIHRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgSWYgdGhlIHZhbHVlIGluIHRoZSBzZWFyY2ggYm94IGlzIGVtcHR5LCBjYWxsIHRoZSBvblNlYXJjaCBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5XG4gIGVtcHR5U2VhcmNoKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIWV2ZW50LnRyaW0oKSAmJiAodGhpcy5wcmV2U2VhcmNoICE9IGV2ZW50LnRyaW0oKSkpIHtcbiAgICAgIHRoaXMub25TZWFyY2goZXZlbnQpXG4gICAgfVxuICAgIHRoaXMucHJldlNlYXJjaCA9IGV2ZW50LnRyaW0oKVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBpbmZvU2lkZXNjcmVlbiBlbWl0IFxuICBvblNpZGVOYXZJbmZvQ2xpY2soZGF0YTogYW55LCBjb2w6IGFueSkge1xuICAgIHRoaXMuc2lkZU5hdkVtaXQuZW1pdCh7XG4gICAgICBkYXRhLCBjb2wsXG4gICAgICBjb25maWc6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBhY3RpdmUgY29sdW1uIHNlbGVjdFxuICBvbkNvbHVtbkNsaWNrKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVDb2x1bW4gPSBjb2x1bW47XG4gICAgaWYgKCF0aGlzLmlzRWRpdGFibGUpIHtcbiAgICAgIC8vIEV4aXN0aW5nIHNvcnQvZmlsdGVyIGxvZ2ljXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IG51bGw7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGVkLmVtaXQobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSBjb2x1bW47XG4gICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICB2YWx1ZTogcm93W2NvbHVtbl0sXG4gICAgICAgIGlkOiByb3cuaWQgLy8gb3IgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuY29sdW1uU2VsZWN0ZWQuZW1pdCh7IGNvbHVtbiwgZGF0YTogY29sdW1uRGF0YSB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBjbG9zZSBzZWFyY2ggZmlsdGVyIGJveFxuICBjbG9zZWZpbHRlcigpIHtcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZSB8fCAxMFxuICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdID0gW11cbiAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlXG4gICAgaWYgKCF0aGlzLmNvbmZpZ1BhZ2luYXRpb24gfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiAxIH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICB0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fX0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHNlYXJjaCBmaWx0ZXIgYm94IGNoZWNrYm94IHJldGFpblxuICBpc1NlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gJiYgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHNlYXJjaCBmaWx0ZXIgYm94IGNoZWNrYm94IHNlbGVjdFxuICBjaGVja2VkRGF0YShldmVudDogYW55KSB7XG4gICAgbGV0IHNlbGVjdGVkQXJyYXkgPSBbXVxuICAgIHNlbGVjdGVkQXJyYXkgPSB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA/IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdIDogW11cbiAgICBpZiAoc2VsZWN0ZWRBcnJheSAmJiBzZWxlY3RlZEFycmF5LmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgc2VsZWN0ZWRBcnJheSA9IHNlbGVjdGVkQXJyYXkuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0gIT09IGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRBcnJheS5wdXNoKGV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBzZWxlY3RlZEFycmF5XG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSBzZWxlY3RlZEFycmF5Py5sZW5ndGggPiAwXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5jb25maWdQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMFxuICAgICAgdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogTnVtYmVyKHRoaXMucGFnZUluZGV4KSB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gICAgfVxuICAgIHRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9ucyBjbG9zZVxuICBwcml2YXRlIGFkZENsaWNrT3V0c2lkZUxpc3RlbmVyKCkge1xuICAgIGlmICghdGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRyb3Bkb3duJykpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSBudWxsO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgaWYgY2xvc2UgdGhlIGRyb3Bkb3duIG1lbnUgc3RvcCB0aGUgY2xpY2sgbGlzdGVuZXJcbiAgcHJpdmF0ZSByZW1vdmVDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbnMgb3BlbiAvIGM7b3NlXG4gIHRvZ2dsZURyb3Bkb3duKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICAgIHRoaXMuYWRkQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBhY3Rpb24gYnV0dG9uIGV2bnQgZW1pdFxuICBhY3Rpb25CdXR0b25DbGlja2VkKGV2ZW50OiBhbnksIGRhdGE6IGFueSkge1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uRW1pdC5lbWl0KHsgZXZlbnQsIGRhdGEgfSlcbiAgfVxuXG4gIHJlbW92ZUNvbChjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSBudWxsO1xuICAgIC8vIEVtaXQgZGVzZWxlY3Rpb25cbiAgICBpZiAoIXRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgLy8gRXhpc3Rpbmcgc29ydC9maWx0ZXIgbG9naWNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgaWQ6IHJvdy5pZCAvLyBvciB1bmlxdWUgaWRlbnRpZmllclxuICAgIH0pKTtcbiAgICB0aGlzLnJlbW92ZUNvbHVtbi5lbWl0KHsgY29sdW1uLCBkYXRhOiBjb2x1bW5EYXRhIH0pO1xuXG4gIH1cbiAgZW1pdFRhYmxlRGF0YVZhbHVlKHVwZGF0ZWRUYWJsZURhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVwZGF0ZWRUYWJsZURhdGEpO1xuICB9XG5cbiAgdXBkYXRlRWRpdChpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBlbGVtZW50OiBhbnksIGNvbHVtbjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZEVsZW1lbnQgPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuXG4gICAgLy8gU0tTMjBNQVIyNSBFbnN1cmUgdGhpcy5kYXRhIGlzIHVwZGF0ZWQgc2luY2Ugc3VtbWFyeSB1c2VzIHRoZSBmdWxsIGRhdGFzZXRcbiAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0gPT09IGVsZW1lbnQpO1xuICAgIGlmIChkYXRhSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgIH1cbiAgICAvLyBSZWNvbXB1dGUgc3VtbWFyeSBjb2x1bW5zIGZvciB0aGUgdXBkYXRlZCByb3dcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzICYmIHN1bW1hcnlDb2wub3BlcmFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJykge1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyArIChOdW1iZXIodXBkYXRlZEVsZW1lbnRbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKHVwZGF0ZWRFbGVtZW50W29wZXJhbmRdKSB8fCAwKSwgIC8vIFN0YXJ0IHdpdGggMSBpbnN0ZWFkIG9mIDBcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnNsaWNlKDEpLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcih1cGRhdGVkRWxlbWVudFtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIE51bWJlcih1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLm9wZXJhbmRzWzBdXSkgfHwgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGFbaW5kZXhdID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgICBpZiAoZGF0YUluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhU291cmNlLmRhdGEpXG4gICAgfVxuICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgfVxuICAvLyBTS1MxOE1BUjI1IHVwZGF0ZSBlbGVtZW50XG4gIHVwZGF0ZVZhbHVlKGVsZW1lbnQ6IGFueSwgY29sdW1uOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgZmxkcyA9IGNvbHVtbj8uc3BsaXQoJy4nKTtcbiAgICBsZXQgb2JqID0gZWxlbWVudDsgLy8gS2VlcCByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIG9iamVjdFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbGRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgbGV0IHNwbGl0RmxkcyA9IGZsZHNbaV0uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIG9iaiA9IG9ialtmbGRzW2ldXSB8fCAob2JqW2ZsZHNbaV1dID0ge30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgb2JqID0gb2JqW3NwbGl0Rmxkc1swXV0gfHwgKG9ialtzcGxpdEZsZHNbMF1dID0gW10pO1xuICAgICAgICBvYmogPSBvYmpbaW5kZXhdIHx8IChvYmpbaW5kZXhdID0ge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZmluYWwgcHJvcGVydHlcbiAgICBsZXQgbGFzdEtleSA9IGZsZHNbZmxkcy5sZW5ndGggLSAxXTtcbiAgICBsZXQgc3BsaXRMYXN0S2V5ID0gbGFzdEtleS5zcGxpdCgnWycpO1xuICAgIGlmIChzcGxpdExhc3RLZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBvYmpbbGFzdEtleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0TGFzdEtleVsxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgIG9ialtzcGxpdExhc3RLZXlbMF1dW2luZGV4XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgZXhwZW5zZUF0dGFjaG1lbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsZUVtaXQuZW1pdChldmVudClcbiAgfVxuICAvL1NLUzI2QVBSMjUgVG9nZ2xlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgbGlzdEZpbHRlclRvZ2dsZURyb3Bkb3duKCkge1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgfVxuICAvL1NLUzI2QVBSMjUgU2VsZWN0IGEgbGlzdCB2aWV3IGFuZCBhcHBseSBmaWx0ZXJcbiAgc2VsZWN0TGlzdFZpZXcodmlld05hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdmlld05hbWU7XG4gICAgdGhpcy5hcHBseUxpc3RWaWV3RmlsdGVyKCk7XG4gIH1cblxuICAvL1NLUzI2QVBSMjUgQXBwbHkgdGhlIHNlbGVjdGVkIGxpc3QgdmlldyBmaWx0ZXJcbiAgYXBwbHlMaXN0Vmlld0ZpbHRlcigpIHtcbiAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gJyc7IC8vIFJlc2V0IHNlYXJjaCBiYXJcbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheSA9IHt9OyAvLyBSZXNldCBjb2x1bW4gZmlsdGVyc1xuXG4gICAgbGV0IGZpbHRlcmVkRGF0YTtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRWaWV3KSB7XG4gICAgICBmaWx0ZXJlZERhdGEgPSBbLi4udGhpcy5vcmlnaW5hbERhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZpZXdPYmogPSB0aGlzLmxpc3RWaWV3cy5maW5kKHZpZXcgPT4gdmlldy5uYW1lID09PSB0aGlzLnNlbGVjdGVkVmlldyk7XG4gICAgICBpZiAoc2VsZWN0ZWRWaWV3T2JqICYmIHNlbGVjdGVkVmlld09iai5maWx0ZXJzKSB7XG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgc2VsZWN0ZWRWaWV3T2JqLmZpbHRlcnMuZXZlcnkoY29uZGl0aW9uID0+IHRoaXMuYXBwbHlDb25kaXRpb24oaXRlbSwgY29uZGl0aW9uKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLm9yaWdpbmFsRGF0YV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9TS1MyNkFQUjI1IFVwZGF0ZSB0YWJsZSBkYXRhIGFuZCBwYWdpbmF0aW9uXG4gICAgdGhpcy5maWx0ZXJCb3hEYXRhID0gZmlsdGVyZWREYXRhO1xuICAgIHRoaXMudG90YWxDb3VudCA9IGZpbHRlcmVkRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IGZpbHRlcmVkRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAxO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ1BhZ2luYXRpb24gfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgY29uc3Qgc3RhcnQgPSAodGhpcy5wYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucGFnZVNpemU7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGZpbHRlcmVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7XG4gICAgICAgIHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSxcbiAgICAgICAgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sXG4gICAgICAgIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LFxuICAgICAgICBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0sXG4gICAgICAgIGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7XG4gICAgICBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sXG4gICAgICB0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSxcbiAgICAgIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LFxuICAgICAgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9LFxuICAgICAgbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3XG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBkcm9wZG93biBhZnRlciBzZWxlY3Rpb25cbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gIH1cblxuICAvL1NLUzI2QVBSMjUgQXBwbHkgYSBzaW5nbGUgZmlsdGVyIGNvbmRpdGlvblxuICBwcml2YXRlIGFwcGx5Q29uZGl0aW9uKGl0ZW06IGFueSwgY29uZGl0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbSwgY29uZGl0aW9uLmNvbHVtbik/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGNvbmRpdGlvbi52YWx1ZT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChjb25kaXRpb24ub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJz0nOiByZXR1cm4gdmFsdWUgPT09IGZpbHRlclZhbHVlO1xuICAgICAgY2FzZSAnIT0nOiByZXR1cm4gdmFsdWUgIT09IGZpbHRlclZhbHVlO1xuICAgICAgY2FzZSAnY29udGFpbnMnOiByZXR1cm4gdmFsdWUuaW5jbHVkZXMoZmlsdGVyVmFsdWUpO1xuICAgICAgY2FzZSAnPic6IHJldHVybiBOdW1iZXIodmFsdWUpID4gTnVtYmVyKGZpbHRlclZhbHVlKTtcbiAgICAgIGNhc2UgJzwnOiByZXR1cm4gTnVtYmVyKHZhbHVlKSA8IE51bWJlcihmaWx0ZXJWYWx1ZSk7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1sYXlvdXRcIiBbaWRdPVwidGFibGVJZFwiIFtuZ1N0eWxlXT1cInsncGFkZGluZy10b3AnOiAnMXB4JywgJ3dpZHRoJzogdGFibGVXaWR0aH1cIiBbZGlyXT1cImRpcmVjdGlvblwiPlxuICAgIDxkaXY+IDwhLS0gY2xhc3M9XCJtLTRcIiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciB0YWJsZS10aXRsZSBhbGlnbi10ZXh0LWNlbnRlciBwdC0zXCI+XG4gICAgICAgICAgICB7e3RpdGxlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc05vc0luZGljYXRvciB8fCBzZWFyY2hCYXIgfHwgaXNCdXR0b25zXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTogMjBweDtcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MyNkFQUjI1IExpc3QgVmlldyBGaWx0ZXIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxpc3RWaWV3cyAmJiBsaXN0Vmlld3MubGVuZ3RoID4gMFwiIGNsYXNzPVwibGlzdC12aWV3LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWxhYmVsXCI+RGF0YSBSZWxhdGVkIHRvPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImZpbHRlci1pY29uXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiNVwiIGZpbGw9XCIjRjFGMUYxXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS41MTI4OCA0LjVIMTIuMTg3OUMxMi43NDI5IDQuNSAxMy4yMDA0IDQuOTU3NSAxMy4yMDA0IDUuNTEyNVY2LjYyMjQ5QzEzLjIwMDQgNy4wMjc0OSAxMi45NDU0IDcuNTMgMTIuNjk3OSA3Ljc4NUwxMC41MjI5IDkuNzA1QzEwLjIyMjkgOS45NiAxMC4wMjA0IDEwLjQ2MjUgMTAuMDIwNCAxMC44Njc1VjEzLjA0MjVDMTAuMDIwNCAxMy4zNDI1IDkuODE3OSAxMy43NDc1IDkuNTYyOSAxMy45MDVMOC44NTc4OSAxNC4zNjI1QzguMTk3ODkgMTQuNzY3NSA3LjI5MDM3IDE0LjMxIDcuMjkwMzcgMTMuNVYxMC44MjI1QzcuMjkwMzcgMTAuNDcgNy4wODc4OSAxMC4wMTI1IDYuODg1MzkgOS43NTc1MUw0Ljk2NTM5IDcuNzMyNUM0LjcxMDM5IDcuNDc3NSA0LjUwNzkgNy4wMjc0OSA0LjUwNzkgNi43MTk5OVY1LjU1NzVDNC41MDA0IDQuOTU3NSA0Ljk1Nzg4IDQuNSA1LjUxMjg4IDQuNVpcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLW1pdGVybGltaXQ9XCIxMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQuNSAxMS45OTk5VjE0LjI0OTlDNC41IDE3Ljk5OTkgNiAxOS40OTk5IDkuNzUgMTkuNDk5OUgxNC4yNUMxOCAxOS40OTk5IDE5LjUgMTcuOTk5OSAxOS41IDE0LjI0OTlWOS43NDk5NEMxOS41IDcuNDA5OTQgMTguOTE1IDUuOTM5OTMgMTcuNTU3NSA1LjE3NDkzQzE3LjE3NSA0Ljk1NzQzIDE2LjQxIDQuNzkyNDMgMTUuNzEyNSA0LjY3OTkzXCIgc3Ryb2tlPVwiIzI5MkQzMlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyLjc1IDEyLjc1SDE2LjVcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuMjUgMTUuNzVIMTYuNVwiIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1vcHRpb25cIj57eyBzZWxlY3RlZFZpZXcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cImlzRHJvcGRvd25PcGVuXCIgY2xhc3M9XCJkcm9wZG93bi1vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgdmlldyBvZiBsaXN0Vmlld3NcIiBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3ID09PSB2aWV3Lm5hbWVcIiAoY2xpY2spPVwic2VsZWN0TGlzdFZpZXcodmlldy5uYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZpZXcubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSB2aWV3Lm5hbWVcIiBjbGFzcz1cImNoZWNrbWFya1wiPuKckzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2hldnJvbi1pY29uXCIgKGNsaWNrKT1cImxpc3RGaWx0ZXJUb2dnbGVEcm9wZG93bigpXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS45OTk5IDI1LjY2NjdDMjMuNjgxOCAyNS42NjY3IDI2LjY2NjYgMjIuNjgxOSAyNi42NjY2IDE5QzI2LjY2NjYgMTUuMzE4MSAyMy42ODE4IDEyLjMzMzQgMTkuOTk5OSAxMi4zMzM0QzE2LjMxOCAxMi4zMzM0IDEzLjMzMzMgMTUuMzE4MSAxMy4zMzMzIDE5QzEzLjMzMzMgMjIuNjgxOSAxNi4zMTggMjUuNjY2NyAxOS45OTk5IDI1LjY2NjdaXCIgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLW1pdGVybGltaXQ9XCIxMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNjQ2NyAxOC4xNkwyMC4wMDAxIDIwLjUwNjdMMjIuMzUzNCAxOC4xNlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNOb3NJbmRpY2F0b3JcIiBjbGFzcz1cIm5vT2ZSZWNcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXdlaWdodDogNTAwOyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm9zIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiByZ2IoNDMsIDg3LCAyNDkpO1wiPnt7dG90YWxSZWNvcmRzIHx8IHRvdGFsQ291bnR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hCYXJcIiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjY0MTMgMTkuMjVDMTYuNjMyMiAxOS4yNSAyMC42NzgxIDE1LjM1MTEgMjAuNjc4MSAxMC41NDE3QzIwLjY3ODEgNS43MzIxOCAxNi42MzIyIDEuODMzMzMgMTEuNjQxMyAxLjgzMzMzQzYuNjUwNCAxLjgzMzMzIDIuNjA0NDkgNS43MzIxOCAyLjYwNDQ5IDEwLjU0MTdDMi42MDQ0OSAxNS4zNTExIDYuNjUwNCAxOS4yNSAxMS42NDEzIDE5LjI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlYXJjaENvbmZpZ3MgPyBlbXB0eVNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKSA6IGFwcGx5RmlsdGVyKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoQm94VmFsdWUgfHwgJydcIiAjaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwic2VhcmNoQ29uZmlncyAmJiBzZWFyY2hCYXJcIiBjbGFzcz1cImNvbmZpZ1NlYXJjaFwiIChjbGljayk9XCJvblNlYXJjaChpbnB1dC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDVIMjBcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDhIMTdcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIxIDExLjVDMjEgMTYuNzUgMTYuNzUgMjEgMTEuNSAyMUM2LjI1IDIxIDIgMTYuNzUgMiAxMS41QzIgNi4yNSA2LjI1IDIgMTEuNSAyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMiAyMkwyMCAyMFwiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiAqbmdJZj1cImlzQnV0dG9uc1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA3cHg7IGdhcDogN3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYnV0dG9uQXJyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uIGNsYXNzPVwiZGF0YS10YWJsZS1mc2J0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrRW1pdCk9XCIoYnV0dG9uLnR5cGUgPT09ICdncm91cCcgfHwgYnV0dG9uLnR5cGUgPT09ICdkcm9wZG93bicpID8gY29tbW9uQnV0dG9uQ2xpY2soJGV2ZW50KSA6IGNvbW1vbkJ1dHRvbkNsaWNrKGJ1dHRvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25UeXBlXT1cImJ1dHRvbi5jbGFzc1wiIFtidXR0b25WYWx1ZV09XCJidXR0b24ubmFtZVwiIFtidXR0b25Db25maWddPVwiYnV0dG9uLmJ1dHRvbkNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uLnR5cGVcIiBjbGFzcz1cIm1zLTIgbWUtMlwiIFtmY0J0bkljb25MZWZ0U3JjXT1cImJ1dHRvbi5mY0J0bkljb25MZWZ0U3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNJbWFnZVN2Z109XCJidXR0b24uaXNJbWFnZVN2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbWFyZ2luXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCIgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGlzUGFnaW5hdGlvbiA/ICc0NTBweCcgOiAnYXV0bycgfVwiICN0YWJsZUNvbnRhaW5lclxuICAgICAgICAgICAgICAgIChzY3JvbGwpPVwib25TY3JvbGwodGFibGVDb250YWluZXIpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgVGFibGUgSGVhZGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiIFtuZ0NsYXNzXT1cInsgJ3NoYWRvdyc6IGlzU2Nyb2xsZWQgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQ2hlY2tib3ggQ29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJ0YWJsZS1jZWxsIHN0aWNreS1jb2x1bW4gaGVhZC1jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIm1hc3RlclRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24/Lmhhc1ZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2VsbCB0YWJsZUhlYWRlciBoZWFkLWNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zdGlja3ktY29sdW1uXT1cImkgPT09IChzdGlja3lDb25kaXRpb24gLSAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlLWNvbHVtbl09XCJhY3RpdmVDb2x1bW4gPT09IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY29sdW1uXT1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvbkNvbHVtbkNsaWNrKGNvbHVtbik7IHNvcnRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikgPyBzb3J0RGF0YShjb2x1bW4pIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZENvbHVtbiA9IGNvbHVtblwiIChtb3VzZWxlYXZlKT1cImhvdmVyZWRDb2x1bW4gPSBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uRGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgY2xvc2UgYnV0dG9uIGZvciBzZWxlY3RlZCBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1jb2x1bW4tYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNvbChjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaGVhZGVyTGFiZWxzW2Rpc3BsYXllZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyTGFiZWxzW2Rpc3BsYXllZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZmlsdGVyQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZmlsdGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMnB4O1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNzUgMS4yNUgwLjc1TDQuNzUgNS43MTcyMlY4LjgwNTU2TDYuNzUgOS43NVY1LjcxNzIyTDEwLjc1IDEuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzI0MjUzM1wiIHN0cm9rZS13aWR0aD1cIjEuMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVkIGRvdCBmb3IgYWN0aXZlIGZpbHRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyRGF0YUFycmF5ICYmIGZpbHRlckRhdGFBcnJheVtjb2x1bW5dPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3g9XCI5XCIgY3k9XCIyXCIgcj1cIjIuNVwiIGZpbGw9XCJyZWRcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNvcnRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbilcIiBjbGFzcz1cInNvcnQtaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtblwiIGNsYXNzPVwic29ydC1kaXJlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ+KGkScgOiBjdXJyZW50U29ydERpcmVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gJ2Rlc2MnID8gJ+KGkycgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhvdmVyZWRDb2x1bW4gPT09IGNvbHVtbiAmJiBjdXJyZW50U29ydENvbHVtbiAhPT0gY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWRpcmVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hGaWx0ZXIgJiYgY29sdW1uID09PSBzZWxlY3RlZEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtY29tcG9uZW50IHBvc2l0aW9uLWFic29sdXRlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnNlYXJjaFwiIFtjbGFzcy5yZXNpemVkXT1cImlzUmVzaXplZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnNlYXJjaC1iYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJzZWFyY2hTdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNjQxMyAxOS4yNUMxNi42MzIyIDE5LjI1IDIwLjY3ODEgMTUuMzUxMSAyMC42NzgxIDEwLjU0MTdDMjAuNjc4MSA1LjczMjE4IDE2LjYzMjIgMS44MzMzMyAxMS42NDEzIDEuODMzMzNDNi42NTA0IDEuODMzMzMgMi42MDQ0OSA1LjczMjE4IDIuNjA0NDkgMTAuNTQxN0MyLjYwNDQ5IDE1LjM1MTEgNi42NTA0IDE5LjI1IDExLjY0MTMgMTkuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMS42Mjk1IDIwLjE2NjdMMTkuNzI3MSAxOC4zMzMzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIndpZHRoLTEwMFwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaGlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1Jlc2l6ZWRcIiAoY2xpY2spPVwiY2xvc2VmaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtaWNvblwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjE2OTk4IDE0LjgzTDE0LjgzIDkuMTcwMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjgzIDE0LjgzTDkuMTY5OTggOS4xNzAwMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgMjJIMTVDMjAgMjIgMjIgMjAgMjIgMTVWOUMyMiA0IDIwIDIgMTUgMkg5QzQgMiAyIDQgMiA5VjE1QzIgMjAgNCAyMiA5IDIyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudFwiIFtzdHlsZV09XCInb3ZlcmZsb3cteTogYXV0bydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlckFycmF5IHwgc2VhcmNoRmlsdGVyIDogc2VhcmNoVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtYi0zIGNoZWNrYm94ZGl2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZ2FwOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGRhdGEpXCIgW3ZhbHVlXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhXCIgKGNoYW5nZSk9XCJjaGVja2VkRGF0YShkYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLTIgbGFiZWwtZGF0YVwiPnt7ZGF0YX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCI+PC9kaXY+IDwhLS1TS1MxNUZFQjI1IGFwcFJvd1Jlc2l6ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsIGhlYWQtY29sb3IgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAxMnB4ICFpbXBvcnRhbnQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbkNvbHVtSGVhZGVyfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgVGFibGUgQm9keSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBkYXRhU291cmNlLmRhdGE7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZUNsaWNrKGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IENoZWNrYm94IENlbGwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aXRoQ2hlY2tCb3hcIiBjbGFzcz1cInRhYmxlLWNlbGwgc3RpY2t5LWNvbHVtbiBib2R5LWNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlcGFyYXRlUm93U2VsZWN0KHNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCksIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihlbGVtZW50LmlzUGF5UHJvY2Vzc2VkID09PSB0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEYXRhIENlbGxzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1uczsgbGV0IGxhc3QgPSBsYXN0OyBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgYm9keS1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImh5cGVyTGlua0NvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGF0ZUNvbHVtbihjb2x1bW4pOyBlbHNlIGNoZWNrVGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSA/ICcgaHlwZXItbGluayBjbGlja2FibGUgJyA6ICcnfX0gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja1RpbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUaW1lQ29sdW1uKGNvbHVtbik7IGVsc2UgZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uLGVsZW1lbnQsIGNoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pID8gJyBoeXBlci1saW5rIGNsaWNrYWJsZSAnIDogJyd9fSBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICgnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbikgfCB0aW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSA/ICcgaHlwZXItbGluayBjbGlja2FibGUgJyA6ICcnfX0gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJy0nIHwgZ2V0VmFsdWU6IGVsZW1lbnQgOiBjb2x1bW4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSByaWdodG5hdiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXMtMlwiIChjbGljayk9XCJvblNpZGVOYXZJbmZvQ2xpY2soZWxlbWVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDMzIDExLjgzMzRDMi43Nzg2NiAxMS44MzM0IDAuMTY2OTkyIDkuMjIxNzEgMC4xNjY5OTIgNi4wMDAwOEMwLjE2Njk5MiAyLjc3ODQyIDIuNzc4NjYgMC4xNjY3NDggNi4wMDAzMyAwLjE2Njc0OEM5LjIyMTk2IDAuMTY2NzQ4IDExLjgzMzcgMi43Nzg0MiAxMS44MzM3IDYuMDAwMDhDMTEuODMzNyA5LjIyMTcxIDkuMjIxOTYgMTEuODMzNCA2LjAwMDMzIDExLjgzMzRaTTUuNDE2OTkgNS40MTY3NVY4LjkxNjc1SDYuNTgzNjZWNS40MTY3NUg1LjQxNjk5Wk01LjQxNjk5IDMuMDgzNDFWNC4yNTAwOEg2LjU4MzY2VjMuMDgzNDFINS40MTY5OVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWVkaXRDb2x1bW4/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbikgJiYgIWZpbGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRlQ29sdW1uKGNvbHVtbik7IGVsc2UgY2hlY2tUaW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRWYWx1ZShlbGVtZW50LGNvbHVtbikgfCBkYXRlIH19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICgnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbikgfCBkYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tUaW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RpbWVDb2x1bW4oY29sdW1uKTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pIHwgdGltZSB9fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IHRpbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRWYWx1ZShlbGVtZW50LGNvbHVtbil9fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJpZ2h0bmF2IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1zLTJcIiAoY2xpY2spPVwib25TaWRlTmF2SW5mb0NsaWNrKGVsZW1lbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMzMgMTEuODMzNEMyLjc3ODY2IDExLjgzMzQgMC4xNjY5OTIgOS4yMjE3MSAwLjE2Njk5MiA2LjAwMDA4QzAuMTY2OTkyIDIuNzc4NDIgMi43Nzg2NiAwLjE2Njc0OCA2LjAwMDMzIDAuMTY2NzQ4QzkuMjIxOTYgMC4xNjY3NDggMTEuODMzNyAyLjc3ODQyIDExLjgzMzcgNi4wMDAwOEMxMS44MzM3IDkuMjIxNzEgOS4yMjE5NiAxMS44MzM0IDYuMDAwMzMgMTEuODMzNFpNNS40MTY5OSA1LjQxNjc1VjguOTE2NzVINi41ODM2NlY1LjQxNjc1SDUuNDE2OTlaTTUuNDE2OTkgMy4wODM0MVY0LjI1MDA4SDYuNTgzNjZWMy4wODM0MUg1LjQxNjk5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMThNQVIyNSBmaWxlIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3BvdmVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdmVyLWJhc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTQgMTZcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgNy43ODUyNUw3LjA0ODU5IDEzLjc2MDJDNi44MTc2NyAxMy45OTQ1IDYuNTQyMTcgMTQuMTgwNSA2LjIzODE5IDE0LjMwNzZDNS45MzQyIDE0LjQzNDYgNS42MDc4NCAxNC41IDUuMjc4MTcgMTQuNUM0Ljk0ODQ5IDE0LjUgNC42MjIxMyAxNC40MzQ2IDQuMzE4MTQgMTQuMzA3NkM0LjAxNDE2IDE0LjE4MDUgMy43Mzg2NiAxMy45OTQ1IDMuNTA3NzQgMTMuNzYwMkwxLjcyNzMyIDExLjk1NzhDMS4yNjEyNCAxMS40ODY0IDEgMTAuODUxNiAxIDEwLjE5MDJDMSA5LjUyODc2IDEuMjYxMjQgOC44OTM4OCAxLjcyNzMyIDguNDIyNTdMOC4wNjg4MyAyLjA4OTEzQzguMjU0OCAxLjkwMjQ1IDguNDc2MDUgMS43NTQyOSA4LjcxOTgzIDEuNjUzMTdDOC45NjM2MSAxLjU1MjA2IDkuMjI1MDggMS41IDkuNDg5MTcgMS41QzkuNzUzMjUgMS41IDEwLjAxNDcgMS41NTIwNiAxMC4yNTg1IDEuNjUzMTdDMTAuNTAyMyAxLjc1NDI5IDEwLjcyMzUgMS45MDI0NSAxMC45MDk1IDIuMDg5MTNMMTEuNjE5NyAyLjc5NjE2QzExLjgwNzIgMi45ODEzMSAxMS45NTYgMy4yMDE1OSAxMi4wNTc2IDMuNDQ0MjlDMTIuMTU5MSAzLjY4Njk5IDEyLjIxMTQgMy45NDczMSAxMi4yMTE0IDQuMjEwMjNDMTIuMjExNCA0LjQ3MzE2IDEyLjE1OTEgNC43MzM0OCAxMi4wNTc2IDQuOTc2MThDMTEuOTU2IDUuMjE4ODggMTEuODA3MiA1LjQzOTE2IDExLjYxOTcgNS42MjQzMUw1Ljk5ODM0IDExLjI0MDhDNS45MDUzNSAxMS4zMzQxIDUuNzk0NzIgMTEuNDA4MiA1LjY3Mjg0IDExLjQ1ODdDNS41NTA5NSAxMS41MDkzIDUuNDIwMjEgMTEuNTM1MyA1LjI4ODE3IDExLjUzNTNDNS4xNTYxMiAxMS41MzUzIDUuMDI1MzkgMTEuNTA5MyA0LjkwMzUgMTEuNDU4N0M0Ljc4MTYxIDExLjQwODIgNC42NzA5OCAxMS4zMzQxIDQuNTc4IDExLjI0MDhMNC4yMjc5MSAxMC44ODIzQzQuMTM0MTYgMTAuNzg5NyA0LjA1OTc1IDEwLjY3OTUgNC4wMDg5NyAxMC41NTgyQzMuOTU4MTkgMTAuNDM2OCAzLjkzMjA1IDEwLjMwNjcgMy45MzIwNSAxMC4xNzUyQzMuOTMyMDUgMTAuMDQzOCAzLjk1ODE5IDkuOTEzNjEgNC4wMDg5NyA5Ljc5MjI2QzQuMDU5NzUgOS42NzA5MSA0LjEzNDE2IDkuNTYwNzcgNC4yMjc5MSA5LjQ2ODE5TDcuOTk4ODEgNS43NDM4MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDM0NTU1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQb3BvdmVyIENvbnRlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG92ZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBlbnNlQ29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgZWxlbWVudFtjb2x1bW5dXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZXhwZW5zZS1maWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwZW5zZUF0dGFjaG1lbnQoZGF0YT8uZmlsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5maWxlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgYWRkZWQgaW5wdXQgYm94IGZvciBpbmxpbmUgZWRpdCBpbnB1dC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlZGl0Q29sdW1uICYmIGVkaXRDb2x1bW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uQ2hlY2s6IGNvbHVtbiA6IGVkaXRDb2x1bW4pID09PSAoJ3N0cmluZycpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm9uLWVkaXQgZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2VkaXRDb2xFbGVtZW50IGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCwgZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiZWxlbWVudC5lZGl0Um93ID8gZmFsc2UgOiB0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBJbiB0YWJsZSwgbGlrZSB0ZXh0IGlucHV0LCBhZGRlZCBkcm9wIGRvd24gYW5kIHRpbWUgaW5wdXRzIGFzIHdlbGwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5DaGVjazogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnb2JqZWN0JykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib24tZWRpdCBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGV4dCcpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VkaXRDb2xFbGVtZW50IGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGltZScpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWVcIiBjbGFzcz1cIm54dC1sb3AtaW5wdXQgdGFibGUtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCIgcGxhY2Vob2xkZXI9XCJISDptbTpzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnZHJvcGRvd24nKSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHR5cGU9XCJkcm9wZG93blwiICpuZ0lmPVwiZWxlbWVudC5lZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJueHQtbG9wLWlucHV0IHRhYmxlLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW2Rpc2FibGVkXT1cImVsZW1lbnQuZWRpdFJvdyA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBbXSB8IGVkaXRDb2x1bW5Ecm9wZG93bjogY29sdW1uIDogZWRpdENvbHVtbiBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YS52YWx1ZSB8fCBkYXRhLm5hbWVcIj57e2RhdGEubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWVsZW1lbnQuZWRpdFJvd1wiICNlZGl0Q29sRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm54dC1sb3AtaW5wdXQgdGFibGUtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWxlbWVudC5lZGl0Um93ID8gJ0VudGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJ0YWJsZS1jZWxsIGFjdGlvbkNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbkJ1dHRvblwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IEVkaXQgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRSb3dcIiBjbGFzcz1cImVpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJFZGl0IFJlY29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjOyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGVkaXQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cIm9uRWRpdChlbGVtZW50KVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IERlbGV0ZSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRGVsZXRlUm93XCIgY2xhc3M9XCJkaWNvbi1jb250YWluZXJcIiBtYXRUb29sdGlwPVwiRGVsZXRlIFJlY29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZmZiNWI1OyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7IGJhY2tncm91bmQtY29sb3I6ICNmZWVlZWQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVSZWNvcmQoZWxlbWVudCxpKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVuZGVyIGlubGluZSBidXR0b25zIHVwIHRvIFNpemUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IGFjdGlvbkJ1dHRvbkFycmF5Py5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiIG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIGJ1dHRvbi5jb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPWJ1dHRvbi50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnV0dG9uLGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ob3ZlckJvcmRlckNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ib3JkZXJDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlci1yYWRpdXM6IHt7YnV0dG9uLmJvcmRlclJhZGl1c319cHg7ICBib3JkZXI6IDFweCBzb2xpZCB7e2J1dHRvbi5ib3JkZXJDb2xvcn19O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKG1vdXNlZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBidXR0b24uaG92ZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJ1dHRvbi5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IHt7YnV0dG9uLnBhZGRpbmd9fXB4IHt7YnV0dG9uLnBhZGRpbmcgKyAyfX1weDsgYm9yZGVyLXJhZGl1czoge3tidXR0b24uYm9yZGVyUmFkaXVzfX1weDsgYmFja2dyb3VuZC1jb2xvcjoge3tidXR0b24uYmFja2dyb3VuZENvbG9yfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidXR0b24uaWNvblNyY1wiICNpbWdFbGVtZW50IFtzcmNdPVwiYnV0dG9uLmljb25TcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaG92ZXJJY29uU3JjIHx8IGJ1dHRvbi5pY29uU3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImltZ0VsZW1lbnQuc3JjID0gYnV0dG9uLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25BY3Rpb25CdXR0b24gJiYgZHJvcGRvd25BY3Rpb25CdXR0b24ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrYWJsZS1pbWdcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OyBwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IGJvcmRlci1yYWRpdXM6IDVweDsgYm9yZGVyOiAxcHggc29saWQgIzZjNzU3ZDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5Ljk5OTkgMjUuNjY2N0MyMy42ODE4IDI1LjY2NjcgMjYuNjY2NiAyMi42ODE5IDI2LjY2NjYgMTlDMjYuNjY2NiAxNS4zMTgxIDIzLjY4MTggMTIuMzMzNCAxOS45OTk5IDEyLjMzMzRDMTYuMzE4IDEyLjMzMzQgMTMuMzMzMyAxNS4zMTgxIDEzLjMzMzMgMTlDMTMuMzMzMyAyMi42ODE5IDE2LjMxOCAyNS42NjY3IDE5Ljk5OTkgMjUuNjY2N1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy42NDY3IDE4LjE2TDIwLjAwMDEgMjAuNTA2N0wyMi4zNTM0IDE4LjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJpZ2h0XT1cIigoYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUgPz8gMCkgLSAoYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zaXplID8/IDApICsgKGlzRWRpdFJvdyA/IDEgOiAwKSArIChpc0RlbGV0ZVJvdyA/IDEgOiAwKSArIChkcm9wZG93bkFjdGlvbkJ1dHRvbj8ubGVuZ3RoID4gMCA/IDEgOiAwKSkgKiAxMDAgKyAnJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50T3BlbkluZGV4ID09PSBpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidG4gb2YgZHJvcGRvd25BY3Rpb25CdXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNDb25kaXRpb25NZXQoZWxlbWVudCwgYnRuLmNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJlbGVtZW50LmlkXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taWNvbiB7e2J0bi5idXR0b25UeXBlfX0gdG9vbHRpcC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09YnRuLnRvb2x0aXAgW2Rpc2FibGVkXT1cImJ0bi5idXR0b25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnRuLGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidG4uaWNvblNyY1wiIFtzcmNdPVwiYnRuLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZjLWJ0bi10ZXh0XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2J0bi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIwTUFSMjUgU3VtbWFyeSBSb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VtbWFyeVJvd3MgJiYgc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiBpc1N1bW1hcnlDb2x1bW4gJiYgZGF0YVNvdXJjZS5kYXRhICYmIGRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA+IDAgJiYgIWlzTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdW1tYXJ5Um93c1wiIGNsYXNzPVwidGFibGUtcm93IHN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGFiZWwgaW4gdGhlIGZpcnN0IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwibm9uLXN1bW1hcnktdGFibGUtY2VsbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgaXNTdW1tYXJ5U3RhcnRDb2x1bW47IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGxcIiBbY2xhc3MubGFzdC1jZWxsXT1cImxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVmFsdWUgb3IgaW5wdXQgaW4gdGhlIGxhc3QgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS10YWJsZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IHJvdy5maWVsZE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25Db2x1bW5DbGljayhyb3cuZmllbGROYW1lKVwiPnt7IHJvdy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktdGFibGUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSByb3cuZmllbGROYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBjbG9zZSBidXR0b24gZm9yIHNlbGVjdGVkIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LmZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtY29sdW1uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNvbChyb3cuZmllbGROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdIHwgbnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cudHlwZSA9PT0gJ2lucHV0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgWyhuZ01vZGVsKV09XCJzdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TdW1tYXJ5SW5wdXRDaGFuZ2UoKVwiIGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyME1BUjI1IEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgaXNTdW1tYXJ5RW5kQ29sdW1uOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uQnV0dG9uIHx8IGlzRGVsZXRlUm93IHx8IGlzRWRpdFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGwgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzI4TUFSMjUgSW4gdGhlIExvYWRpbmcgc2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlcGVhdCBmb3IgNSBza2VsZXRvbiByb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IF8gb2YgWzEsMiwzLDQsNV1cIiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBzdGlja3ktY29sdW1uXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBkaXNwbGF5ZWRDb2x1bW5zXCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsIFwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9uIENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIiBjbGFzcz1cInNrZWxldG9uLWNlbGwgYWN0aW9uQ29sXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IE5vIERhdGEgUm93IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tICE9PSAnZm9ybUJ1aWxkZXInXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzL2RhdGEgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tID09PSAnZm9ybUJ1aWxkZXInXCIgY2xhc3M9XCJmb3JtLWJ1aWxkZXItdGFibGUtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkICAvIGRyYWdzIGZpZWxkcyBmcm9tIGVsZW1lbnRzIHNlY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBQYWdpbmF0aW9uIC0tPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3Muc2hhZG93LWhpZGRlbl09XCJpc1NoYWRvd0hpZGRlblwiPlxuICAgICAgICAgICAgICAgIDwhLS0gdGFibGUgaW5wdXQgc2F2ZSBidXR0b24gY2hhbmdlcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGlubGluZUFkZCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFkZEljb25Cb3IgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImFkZElubGluZVJlY29yZCBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFRhYmxlUmVjb3JkKGlubGluZUVsZW1lbnQpXCIgbWF0VG9vbHRpcD1cIkFkZCBSZWNvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm5hdi1pY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00NDAtMjgwaDgwdi0xNjBoMTYwdi04MEg1MjB2LTE2MGgtODB2MTYwSDI4MHY4MGgxNjB2MTYwWm00MCAyMDBxLTgzIDAtMTU2LTMxLjVUMTk3LTE5N3EtNTQtNTQtODUuNS0xMjdUODAtNDgwcTAtODMgMzEuNS0xNTZUMTk3LTc2M3E1NC01NCAxMjctODUuNVQ0ODAtODgwcTgzIDAgMTU2IDMxLjVUNzYzLTc2M3E1NCA1NCA4NS41IDEyN1Q4ODAtNDgwcTAgODMtMzEuNSAxNTZUNzYzLTE5N3EtNTQgNTQtMTI3IDg1LjVUNDgwLTgwWm0wLTgwcTEzNCAwIDIyNy05M3Q5My0yMjdxMC0xMzQtOTMtMjI3dC0yMjctOTNxLTEzNCAwLTIyNyA5M3QtOTMgMjI3cTAgMTM0IDkzIDIyN3QyMjcgOTNabTAtMzIwWlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJlbW92ZWQgYnV0dG9uIGRpc2FibGUgbG9naWMsIGFkZGVkIGFub3RoZXIgY29uZGl0aW9uIGZvciBidXR0b24gc2hvd2luZy0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBTUjA2SkFOMjAyNSBidXR0b24gZGlzYWJsZSBsb2dpYyBmb3Igbm90IHNlbGVjdCBhbnkgZW1wbG95ZWUtLT5cbiAgICAgICAgICAgICAgICAgICAgPG54dC1idXR0b24gKm5nSWY9XCIoZWRpdENvbHVtbj8ubGVuZ3RoID4gMCAgfHwgdGFibGVTYXZlQnV0dG9uKSAmJiBmcm9tICE9ICdmb3JtQnVpbGRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVHlwZT1cImJ0biBidG4tcHJpbWFyeVwiIFtidXR0b25EaXNhYmxlXT1cInNlbGVjdGlvbj8uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cInNhdmVCdXR0b24oKVwiIGJ1dHRvblZhbHVlPVwiU2F2ZVwiPjwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bnh0LXBhZ2luYXRpb24gKm5nSWY9XCJpc1BhZ2luYXRpb25cIiBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiIFtjb2xsZWN0aW9uU2l6ZV09XCJjb25maWdQYWdpbmF0aW9uID8gdG90YWxSZWNvcmRzIHx8IHRvdGFsQ291bnQgOiBmaWx0ZXJUYWJsZU5vc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtjdXJyZW50UGFnZV09XCJwYWdlSW5kZXhcIiBbZmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50KT1cInBhZ2VQYXJhbXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvbnh0LXBhZ2luYXRpb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLVNLUzE1RkVCMjUgYWxlcnQgb24gZGVsZXRpbmcgcmVjb3JkIC0tPlxuPGRpdiAqbmdJZj1cImRlbGV0ZU1vZGFsXCIgY2xhc3M9XCJtb2RhbCBtb2RhbC1iYWNrZHJvcCBzaG93ICBkLWJsb2NrXCIgaWQ9XCJkZWxldGVSZWNvcmRcIiB0YWJpbmRleD1cIi0xXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJkZWxldGVSZWNvcmRMYWJlbFwiIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFkZWxldGVNb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1vZGFsLXRpdGxlIGZzLTVcIiBpZD1cImRlbGV0ZVJlY29yZExhYmVsXCI+RGVsZXRlIFJlY29yZDwvYj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU1vZGFsID0gZmFsc2VcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhlIHJlY29yZCA/XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTW9kYWwgPSBmYWxzZVwiPk5vPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWNvcmREYXRhKClcIj5ZZXM8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|