@rivet-health/design-system 40.30.0 → 40.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/format/truncate/truncate.component.mjs +3 -2
- package/esm2020/lib/overlay/callout/tooltip/tooltip.component.mjs +4 -2
- package/esm2020/lib/overlay/callout/tooltip/tooltip.directive.mjs +2 -2
- package/esm2020/lib/table/table/state-helpers/collapse-helpers.mjs +53 -0
- package/esm2020/lib/table/table/state-helpers/column-helpers.mjs +19 -1
- package/esm2020/lib/table/table/state-helpers/display-helpers.mjs +5 -3
- package/esm2020/lib/table/table/state-helpers/nesting-helpers.mjs +115 -0
- package/esm2020/lib/table/table/state-helpers/order-helpers.mjs +22 -1
- package/esm2020/lib/table/table/state-helpers/pagination-helpers.mjs +3 -45
- package/esm2020/lib/table/table/state-helpers/result-helpers.mjs +5 -12
- package/esm2020/lib/table/table/state.mjs +520 -247
- package/esm2020/lib/table/table/table/table.component.mjs +46 -3
- package/fesm2015/rivet-health-design-system.mjs +664 -197
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +782 -308
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/overlay/callout/tooltip/tooltip.component.d.ts +2 -0
- package/lib/table/table/state-helpers/collapse-helpers.d.ts +7 -0
- package/lib/table/table/state-helpers/column-helpers.d.ts +1 -0
- package/lib/table/table/state-helpers/nesting-helpers.d.ts +12 -0
- package/lib/table/table/state-helpers/order-helpers.d.ts +1 -0
- package/lib/table/table/state-helpers/pagination-helpers.d.ts +1 -2
- package/lib/table/table/state-helpers/result-helpers.d.ts +5 -6
- package/lib/table/table/state.d.ts +37 -25
- package/lib/table/table/table/table.component.d.ts +10 -1
- package/package.json +1 -1
|
@@ -2,8 +2,10 @@ import Fuse from 'fuse.js';
|
|
|
2
2
|
import { defaultsDeep, isEqual } from 'lodash';
|
|
3
3
|
import { connectable, filter, from, map, mergeScan, ReplaySubject, scan, share, Subject, } from 'rxjs';
|
|
4
4
|
import { toSentenceCase } from '../../format/pipes/sentence-case.pipe';
|
|
5
|
+
import { TableCollapseHelpers } from './state-helpers/collapse-helpers';
|
|
5
6
|
import { TableColumnHelpers } from './state-helpers/column-helpers';
|
|
6
7
|
import { TableDisplayHelpers } from './state-helpers/display-helpers';
|
|
8
|
+
import { TableNestingHelpers } from './state-helpers/nesting-helpers';
|
|
7
9
|
import { TableOrderHelpers } from './state-helpers/order-helpers';
|
|
8
10
|
import { TablePaginationHelpers } from './state-helpers/pagination-helpers';
|
|
9
11
|
import { TableResultHelpers } from './state-helpers/result-helpers';
|
|
@@ -61,6 +63,10 @@ export var RivTable;
|
|
|
61
63
|
mode: 'include',
|
|
62
64
|
included: new Set(),
|
|
63
65
|
},
|
|
66
|
+
collapseState: {
|
|
67
|
+
collapsedRows: new Set(),
|
|
68
|
+
collapsedHeaders: new Set(),
|
|
69
|
+
},
|
|
64
70
|
};
|
|
65
71
|
const defaultedInitialState = defaultsDeep({}, options?.initialState, defaultState);
|
|
66
72
|
const columnNameMap = new Map(Array.from(columns.entries()).map(([key, metadata]) => [
|
|
@@ -82,224 +88,46 @@ export var RivTable;
|
|
|
82
88
|
const state = connectable(coreState.pipe(map(({ state: s }) => {
|
|
83
89
|
const resolvedColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options?.allowSelection);
|
|
84
90
|
if (TableResultHelpers.isGroupResult(s.result)) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const dataSet = await source({
|
|
112
|
-
...s.query,
|
|
113
|
-
pagination: {
|
|
114
|
-
page: 0,
|
|
115
|
-
pageSize: s.result.totalMatchingRowCount,
|
|
116
|
-
},
|
|
117
|
-
}, { type: 'load' });
|
|
118
|
-
if (!TableResultHelpers.isGroupResult(dataSet))
|
|
119
|
-
throw new Error('Returned non-grouped CSV data for grouped table');
|
|
120
|
-
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
121
|
-
const data = [];
|
|
122
|
-
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
123
|
-
if (groupCellFormatter) {
|
|
124
|
-
data[0].push('');
|
|
125
|
-
}
|
|
126
|
-
for (const rowItem of dataSet.groupResults.flatMap(groups => groups.currentPageData.map(row => ({
|
|
127
|
-
row,
|
|
128
|
-
group: groups.groupData,
|
|
129
|
-
})))) {
|
|
130
|
-
const record = rowItem.row;
|
|
131
|
-
if (mode === 'selection' &&
|
|
132
|
-
!TableSelectionHelpers.isRowSelected(s, record.id))
|
|
133
|
-
continue;
|
|
134
|
-
const row = [];
|
|
135
|
-
for (const column of fullColumns) {
|
|
136
|
-
row.push(await cellFormatter(record, column));
|
|
137
|
-
}
|
|
138
|
-
if (groupCellFormatter && rowItem.group) {
|
|
139
|
-
row.push(await groupCellFormatter(record, rowItem.group));
|
|
140
|
-
}
|
|
141
|
-
data.push(row);
|
|
142
|
-
}
|
|
143
|
-
yield { loading: false, data };
|
|
144
|
-
}
|
|
145
|
-
return {
|
|
146
|
-
...s,
|
|
147
|
-
query: {
|
|
148
|
-
...s.query,
|
|
149
|
-
pagination: {
|
|
150
|
-
...s.query.pagination,
|
|
151
|
-
previous: TablePaginationHelpers.getPreviousPage(s),
|
|
152
|
-
pages: TablePaginationHelpers.getPages(s),
|
|
153
|
-
next: TablePaginationHelpers.getNextPage(s),
|
|
154
|
-
pageCount: TablePaginationHelpers.getPageCount(s),
|
|
155
|
-
showControls: TablePaginationHelpers.getShowPaginationControls(s),
|
|
156
|
-
pageRowStart: TablePaginationHelpers.getPageRowStart(s),
|
|
157
|
-
pageRowEnd: TablePaginationHelpers.getPageRowEnd(s),
|
|
158
|
-
},
|
|
159
|
-
noSearchColumnsSelected: TableSearchHelpers.getSearchColumnsSelectedState(s, 'none'),
|
|
160
|
-
},
|
|
161
|
-
display: {
|
|
162
|
-
...s.display,
|
|
163
|
-
columns: resolvedColumns,
|
|
164
|
-
allColumns: TableColumnHelpers.getAllColumns(s, columns, columnNameMap),
|
|
165
|
-
columnNameMap: columnNameMap,
|
|
166
|
-
searchableColumnMap: searchableColumnMap,
|
|
167
|
-
zeroStateMessage: TableDisplayHelpers.getZeroStateMessage(s, pluralEntityName),
|
|
168
|
-
columnsAreFreezable: !!options?.columnsAreFreezable,
|
|
169
|
-
columnsAreHideable: !!options?.columnsAreHideable,
|
|
170
|
-
columnsAreReorderable: options?.columnsAreReorderable ?? true,
|
|
171
|
-
rowsAreGrayed: !!options?.rowsAreGrayed,
|
|
172
|
-
customSummaryRow: !!options?.customSummaryRow,
|
|
173
|
-
csvExportAllowed,
|
|
174
|
-
enabledCount: resolvedColumns.length,
|
|
175
|
-
hidePageSizeSelector: !!options?.hidePageSizeSelector,
|
|
176
|
-
cellRowSpan: (_i, _column) => 1,
|
|
177
|
-
needsRightBorder: () => false,
|
|
178
|
-
},
|
|
179
|
-
selection: {
|
|
180
|
-
...s.selection,
|
|
181
|
-
allowSelection: options?.allowSelection ?? false,
|
|
182
|
-
isAllSelected: TableSelectionHelpers.isAllSelected(s),
|
|
183
|
-
isCurrentPageSelected: TableSelectionHelpers.isCurrentPageSelected(s),
|
|
184
|
-
selectedCount: TableSelectionHelpers.selectedCount(s),
|
|
185
|
-
},
|
|
186
|
-
result: {
|
|
187
|
-
...s.result,
|
|
188
|
-
isGrouped: true,
|
|
189
|
-
rowGroups,
|
|
190
|
-
rows: rowGroups.flatMap(group => group.rows),
|
|
191
|
-
csvData,
|
|
192
|
-
csvFilename: TableResultHelpers.getCsvFilename(pluralEntityName, options),
|
|
193
|
-
},
|
|
194
|
-
};
|
|
91
|
+
return deriveFullStateFromGroupResult({
|
|
92
|
+
s,
|
|
93
|
+
stateResult: s.result,
|
|
94
|
+
source,
|
|
95
|
+
columns,
|
|
96
|
+
pluralEntityName,
|
|
97
|
+
columnNameMap,
|
|
98
|
+
resolvedColumns,
|
|
99
|
+
searchableColumnMap,
|
|
100
|
+
csvExportAllowed,
|
|
101
|
+
options,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else if (TableResultHelpers.isNestedResult(s.result)) {
|
|
105
|
+
return deriveFullStateFromNestedResult({
|
|
106
|
+
s,
|
|
107
|
+
stateResult: s.result,
|
|
108
|
+
source,
|
|
109
|
+
columns,
|
|
110
|
+
pluralEntityName,
|
|
111
|
+
columnNameMap,
|
|
112
|
+
resolvedColumns,
|
|
113
|
+
searchableColumnMap,
|
|
114
|
+
csvExportAllowed,
|
|
115
|
+
options,
|
|
116
|
+
});
|
|
195
117
|
}
|
|
196
118
|
else {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
if (!csvExportAllowed) {
|
|
210
|
-
throw new Error('CSV export is not supported when row spanning or a custom summary row is enabled.');
|
|
211
|
-
}
|
|
212
|
-
const cellFormatter = options?.csvCellFormatter;
|
|
213
|
-
if (!cellFormatter)
|
|
214
|
-
throw new Error('options.csvCellFormatter is required for CSV export');
|
|
215
|
-
yield { loading: true, data: null };
|
|
216
|
-
const dataSet = await source({
|
|
217
|
-
...s.query,
|
|
218
|
-
pagination: {
|
|
219
|
-
page: 0,
|
|
220
|
-
pageSize: s.result.totalMatchingRowCount,
|
|
221
|
-
},
|
|
222
|
-
}, { type: 'load' });
|
|
223
|
-
if (TableResultHelpers.isGroupResult(dataSet))
|
|
224
|
-
throw new Error('Returned grouped CSV data for non-grouped table');
|
|
225
|
-
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
226
|
-
const data = [];
|
|
227
|
-
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
228
|
-
for (const record of dataSet.currentPageData) {
|
|
229
|
-
if (mode === 'selection' &&
|
|
230
|
-
!TableSelectionHelpers.isRowSelected(s, record.id))
|
|
231
|
-
continue;
|
|
232
|
-
const row = [];
|
|
233
|
-
for (const column of fullColumns) {
|
|
234
|
-
row.push(await cellFormatter(record, column));
|
|
235
|
-
}
|
|
236
|
-
data.push(row);
|
|
237
|
-
}
|
|
238
|
-
yield { loading: false, data };
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
...s,
|
|
242
|
-
query: {
|
|
243
|
-
...s.query,
|
|
244
|
-
order: hasAnyRowSpans ? null : s.query.order,
|
|
245
|
-
pagination: {
|
|
246
|
-
...s.query.pagination,
|
|
247
|
-
previous: TablePaginationHelpers.getPreviousPage(s),
|
|
248
|
-
pages: TablePaginationHelpers.getPages(s),
|
|
249
|
-
next: TablePaginationHelpers.getNextPage(s),
|
|
250
|
-
pageCount: TablePaginationHelpers.getPageCount(s),
|
|
251
|
-
showControls: TablePaginationHelpers.getShowPaginationControls(s),
|
|
252
|
-
pageRowStart: TablePaginationHelpers.getPageRowStart(s),
|
|
253
|
-
pageRowEnd: TablePaginationHelpers.getPageRowEnd(s),
|
|
254
|
-
},
|
|
255
|
-
noSearchColumnsSelected: TableSearchHelpers.getSearchColumnsSelectedState(s, 'none'),
|
|
256
|
-
},
|
|
257
|
-
display: {
|
|
258
|
-
...s.display,
|
|
259
|
-
columns: resolvedColumns.map(column => hasAnyRowSpans ? { ...column, orderable: false } : column),
|
|
260
|
-
allColumns: TableColumnHelpers.getAllColumns(s, columns, columnNameMap),
|
|
261
|
-
columnNameMap: columnNameMap,
|
|
262
|
-
searchableColumnMap: searchableColumnMap,
|
|
263
|
-
zeroStateMessage: TableDisplayHelpers.getZeroStateMessage(s, pluralEntityName),
|
|
264
|
-
columnsAreFreezable: !!options?.columnsAreFreezable,
|
|
265
|
-
columnsAreHideable: !!options?.columnsAreHideable,
|
|
266
|
-
columnsAreReorderable: options?.columnsAreReorderable ?? true,
|
|
267
|
-
rowsAreGrayed: !!options?.rowsAreGrayed,
|
|
268
|
-
customSummaryRow: !!options?.customSummaryRow,
|
|
269
|
-
csvExportAllowed,
|
|
270
|
-
enabledCount: resolvedColumns.length,
|
|
271
|
-
hidePageSizeSelector: !!options?.hidePageSizeSelector,
|
|
272
|
-
cellRowSpan,
|
|
273
|
-
needsRightBorder: (rowIndex, column) => {
|
|
274
|
-
const i = resolvedColumnKeys.findIndex(key => key === column);
|
|
275
|
-
if (i < 0 || i === resolvedColumnKeys.length - 1)
|
|
276
|
-
return false;
|
|
277
|
-
const rightColKey = resolvedColumnKeys[i + 1];
|
|
278
|
-
const spanOnRight = cellRowSpan(rowIndex, rightColKey);
|
|
279
|
-
return spanOnRight > 1 || spanOnRight === 0;
|
|
280
|
-
},
|
|
281
|
-
},
|
|
282
|
-
selection: {
|
|
283
|
-
...s.selection,
|
|
284
|
-
allowSelection: options?.allowSelection ?? false,
|
|
285
|
-
isAllSelected: TableSelectionHelpers.isAllSelected(s),
|
|
286
|
-
isCurrentPageSelected: TableSelectionHelpers.isCurrentPageSelected(s),
|
|
287
|
-
selectedCount: TableSelectionHelpers.selectedCount(s),
|
|
288
|
-
},
|
|
289
|
-
result: {
|
|
290
|
-
...s.result,
|
|
291
|
-
isGrouped: false,
|
|
292
|
-
rows,
|
|
293
|
-
rowsAsGroup: {
|
|
294
|
-
rows,
|
|
295
|
-
selected: false,
|
|
296
|
-
totalMatchingRowCount: rows.length,
|
|
297
|
-
groupData: { key: '' },
|
|
298
|
-
},
|
|
299
|
-
csvFilename: TableResultHelpers.getCsvFilename(pluralEntityName, options),
|
|
300
|
-
csvData,
|
|
301
|
-
},
|
|
302
|
-
};
|
|
119
|
+
return deriveFullStateFromRegularResult({
|
|
120
|
+
s,
|
|
121
|
+
stateResult: s.result,
|
|
122
|
+
source,
|
|
123
|
+
columns,
|
|
124
|
+
pluralEntityName,
|
|
125
|
+
columnNameMap,
|
|
126
|
+
resolvedColumns,
|
|
127
|
+
searchableColumnMap,
|
|
128
|
+
csvExportAllowed,
|
|
129
|
+
options,
|
|
130
|
+
});
|
|
303
131
|
}
|
|
304
132
|
}), scan((stable, newState) => stableState(stable, newState))), {
|
|
305
133
|
connector: () => new ReplaySubject(1),
|
|
@@ -316,6 +144,318 @@ export var RivTable;
|
|
|
316
144
|
return { actions, state, effects };
|
|
317
145
|
}
|
|
318
146
|
RivTable.createManager = createManager;
|
|
147
|
+
function deriveFullStateFromGroupResult(props) {
|
|
148
|
+
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
149
|
+
if (options?.getRowSpanForCell) {
|
|
150
|
+
// eslint-disable-next-line no-console
|
|
151
|
+
console.warn('Heads up! Custom row spans are not supported for grouped tables.');
|
|
152
|
+
}
|
|
153
|
+
if (options?.customSummaryRow) {
|
|
154
|
+
// eslint-disable-next-line no-console
|
|
155
|
+
console.warn('Heads up! Custom summary rows are not supported for grouped tables.');
|
|
156
|
+
}
|
|
157
|
+
const rowGroups = stateResult.groupResults.map(group => ({
|
|
158
|
+
rows: group.currentPageData.map(row => ({
|
|
159
|
+
...row,
|
|
160
|
+
rowLink: options?.rowLink
|
|
161
|
+
? options.rowLink(row, group.groupData)
|
|
162
|
+
: null,
|
|
163
|
+
selected: TableSelectionHelpers.isRowSelected(s, row.id),
|
|
164
|
+
isCollapsed: false,
|
|
165
|
+
})),
|
|
166
|
+
selected: TableSelectionHelpers.isGroupSelected(s, group),
|
|
167
|
+
totalMatchingRowCount: group.totalMatchingRowCount,
|
|
168
|
+
groupData: group.groupData,
|
|
169
|
+
}));
|
|
170
|
+
async function* csvData(mode = 'full') {
|
|
171
|
+
const cellFormatter = options?.csvCellFormatter;
|
|
172
|
+
const groupCellFormatter = options?.csvGroupCellFormatter;
|
|
173
|
+
if (!cellFormatter)
|
|
174
|
+
throw new Error('options.csvCellFormatter is required for CSV export');
|
|
175
|
+
yield { loading: true, data: null };
|
|
176
|
+
const dataSet = await source({
|
|
177
|
+
...s.query,
|
|
178
|
+
pagination: {
|
|
179
|
+
page: 0,
|
|
180
|
+
pageSize: stateResult.totalMatchingRowCount,
|
|
181
|
+
},
|
|
182
|
+
}, { type: 'load' });
|
|
183
|
+
if (!TableResultHelpers.isGroupResult(dataSet)) {
|
|
184
|
+
throw new Error('Returned non-grouped CSV data for grouped table');
|
|
185
|
+
}
|
|
186
|
+
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
187
|
+
const data = [];
|
|
188
|
+
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
189
|
+
if (groupCellFormatter) {
|
|
190
|
+
data[0].push('');
|
|
191
|
+
}
|
|
192
|
+
for (const rowItem of dataSet.groupResults.flatMap(groups => groups.currentPageData.map(row => ({
|
|
193
|
+
row,
|
|
194
|
+
group: groups.groupData,
|
|
195
|
+
})))) {
|
|
196
|
+
const record = rowItem.row;
|
|
197
|
+
if (mode === 'selection' &&
|
|
198
|
+
!TableSelectionHelpers.isRowSelected(s, record.id))
|
|
199
|
+
continue;
|
|
200
|
+
const row = [];
|
|
201
|
+
for (const column of fullColumns) {
|
|
202
|
+
row.push(await cellFormatter(record, column));
|
|
203
|
+
}
|
|
204
|
+
if (groupCellFormatter && rowItem.group) {
|
|
205
|
+
row.push(await groupCellFormatter(record, rowItem.group));
|
|
206
|
+
}
|
|
207
|
+
data.push(row);
|
|
208
|
+
}
|
|
209
|
+
yield { loading: false, data };
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
...s,
|
|
213
|
+
query: derivedFullStateQuery(s),
|
|
214
|
+
display: derivedFullStateDisplay({
|
|
215
|
+
coreState: s,
|
|
216
|
+
columns: columns,
|
|
217
|
+
pluralEntityName: pluralEntityName,
|
|
218
|
+
columnNameMap: columnNameMap,
|
|
219
|
+
resolvedColumns: resolvedColumns,
|
|
220
|
+
searchableColumnMap: searchableColumnMap,
|
|
221
|
+
csvExportAllowed: csvExportAllowed,
|
|
222
|
+
options: options,
|
|
223
|
+
}),
|
|
224
|
+
selection: derivedFullStateSelection(s, options),
|
|
225
|
+
result: {
|
|
226
|
+
...stateResult,
|
|
227
|
+
isGrouped: true,
|
|
228
|
+
resultType: 'table-grouping',
|
|
229
|
+
rowGroups,
|
|
230
|
+
rows: rowGroups.flatMap(group => group.rows),
|
|
231
|
+
csvData,
|
|
232
|
+
csvFilename: TableResultHelpers.getCsvFilename(pluralEntityName, options),
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function deriveFullStateFromNestedResult(props) {
|
|
237
|
+
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
238
|
+
if (options?.getRowSpanForCell) {
|
|
239
|
+
// eslint-disable-next-line no-console
|
|
240
|
+
console.warn('Heads up! Custom row spans are not supported for tables with nested data.');
|
|
241
|
+
}
|
|
242
|
+
if (options?.customSummaryRow) {
|
|
243
|
+
// eslint-disable-next-line no-console
|
|
244
|
+
console.warn('Heads up! Custom summary rows are not supported for tables with nested data.');
|
|
245
|
+
}
|
|
246
|
+
const fullNestedHeaderRows = [];
|
|
247
|
+
for (const nestedRow of stateResult.currentPageNestedHeaders) {
|
|
248
|
+
const newFullRow = TableNestingHelpers.convertToFullNestedHeaderRow(nestedRow, s, options?.rowLink);
|
|
249
|
+
fullNestedHeaderRows.push(newFullRow);
|
|
250
|
+
}
|
|
251
|
+
async function* csvData(mode = 'full') {
|
|
252
|
+
if (!csvExportAllowed) {
|
|
253
|
+
throw new Error('CSV export is not supported when row spanning or a custom summary row is enabled.');
|
|
254
|
+
}
|
|
255
|
+
const cellFormatter = options?.csvCellFormatter;
|
|
256
|
+
if (!cellFormatter) {
|
|
257
|
+
throw new Error('options.csvCellFormatter is required for CSV export');
|
|
258
|
+
}
|
|
259
|
+
yield { loading: true, data: null };
|
|
260
|
+
const dataSet = await source({
|
|
261
|
+
...s.query,
|
|
262
|
+
pagination: {
|
|
263
|
+
page: 0,
|
|
264
|
+
pageSize: stateResult.totalMatchingRowCount,
|
|
265
|
+
},
|
|
266
|
+
}, { type: 'load' });
|
|
267
|
+
if (TableResultHelpers.isRegularResult(dataSet)) {
|
|
268
|
+
throw new Error('Returned non-nested CSV data for a nested with header result table');
|
|
269
|
+
}
|
|
270
|
+
if (TableResultHelpers.isGroupResult(dataSet)) {
|
|
271
|
+
throw new Error('Returned grouped CSV data for a nested with header result table');
|
|
272
|
+
}
|
|
273
|
+
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
274
|
+
const data = [];
|
|
275
|
+
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
276
|
+
const allRows = TableResultHelpers.getAllRowsFromResult(dataSet);
|
|
277
|
+
for (const currentRow of allRows) {
|
|
278
|
+
if (mode === 'selection' &&
|
|
279
|
+
!TableSelectionHelpers.isRowSelected(s, currentRow.id)) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const row = [];
|
|
283
|
+
for (const column of fullColumns) {
|
|
284
|
+
row.push(await cellFormatter(currentRow, column));
|
|
285
|
+
}
|
|
286
|
+
data.push(row);
|
|
287
|
+
}
|
|
288
|
+
yield { loading: false, data };
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
...s,
|
|
292
|
+
query: derivedFullStateQuery(s),
|
|
293
|
+
display: derivedFullStateDisplay({
|
|
294
|
+
coreState: s,
|
|
295
|
+
columns: columns,
|
|
296
|
+
pluralEntityName: pluralEntityName,
|
|
297
|
+
columnNameMap: columnNameMap,
|
|
298
|
+
resolvedColumns: resolvedColumns,
|
|
299
|
+
searchableColumnMap: searchableColumnMap,
|
|
300
|
+
csvExportAllowed: csvExportAllowed,
|
|
301
|
+
options: options,
|
|
302
|
+
}),
|
|
303
|
+
selection: derivedFullStateSelection(s, options),
|
|
304
|
+
result: {
|
|
305
|
+
...stateResult,
|
|
306
|
+
rows: [],
|
|
307
|
+
isGrouped: false,
|
|
308
|
+
resultType: 'nested-rows',
|
|
309
|
+
nestedHeaderRows: fullNestedHeaderRows,
|
|
310
|
+
csvData,
|
|
311
|
+
csvFilename: TableResultHelpers.getCsvFilename(pluralEntityName, options),
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
function deriveFullStateFromRegularResult(props) {
|
|
316
|
+
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
317
|
+
const rows = stateResult.currentPageData.map(row => ({
|
|
318
|
+
...row,
|
|
319
|
+
rowLink: options?.rowLink ? options.rowLink(row) : null,
|
|
320
|
+
selected: TableSelectionHelpers.isRowSelected(s, row.id),
|
|
321
|
+
isCollapsed: false,
|
|
322
|
+
}));
|
|
323
|
+
const cellRowSpanCache = TableDisplayHelpers.memoizedCellRowSpan(s, resolvedColumns, options);
|
|
324
|
+
const cellRowSpan = (rowIndex, column) => cellRowSpanCache?.get(column)?.[rowIndex] ?? 1;
|
|
325
|
+
const hasAnyRowSpans = cellRowSpanCache
|
|
326
|
+
? [...cellRowSpanCache.values()].some(spans => spans.some(span => span > 1))
|
|
327
|
+
: false;
|
|
328
|
+
const resolvedColumnKeys = resolvedColumns.map(({ key }) => key);
|
|
329
|
+
async function* csvData(mode = 'full') {
|
|
330
|
+
if (!csvExportAllowed) {
|
|
331
|
+
throw new Error('CSV export is not supported when row spanning or a custom summary row is enabled.');
|
|
332
|
+
}
|
|
333
|
+
const cellFormatter = options?.csvCellFormatter;
|
|
334
|
+
if (!cellFormatter)
|
|
335
|
+
throw new Error('options.csvCellFormatter is required for CSV export');
|
|
336
|
+
yield { loading: true, data: null };
|
|
337
|
+
const dataSet = await source({
|
|
338
|
+
...s.query,
|
|
339
|
+
pagination: {
|
|
340
|
+
page: 0,
|
|
341
|
+
pageSize: stateResult.totalMatchingRowCount,
|
|
342
|
+
},
|
|
343
|
+
}, { type: 'load' });
|
|
344
|
+
if (TableResultHelpers.isGroupResult(dataSet)) {
|
|
345
|
+
throw new Error('Returned grouped CSV data for non-grouped table');
|
|
346
|
+
}
|
|
347
|
+
if (TableResultHelpers.isNestedResult(dataSet)) {
|
|
348
|
+
throw new Error('Returned nested CSV data for non-nested table');
|
|
349
|
+
}
|
|
350
|
+
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
351
|
+
const data = [];
|
|
352
|
+
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
353
|
+
for (const record of dataSet.currentPageData) {
|
|
354
|
+
if (mode === 'selection' &&
|
|
355
|
+
!TableSelectionHelpers.isRowSelected(s, record.id))
|
|
356
|
+
continue;
|
|
357
|
+
const row = [];
|
|
358
|
+
for (const column of fullColumns) {
|
|
359
|
+
row.push(await cellFormatter(record, column));
|
|
360
|
+
}
|
|
361
|
+
data.push(row);
|
|
362
|
+
}
|
|
363
|
+
yield { loading: false, data };
|
|
364
|
+
}
|
|
365
|
+
return {
|
|
366
|
+
...s,
|
|
367
|
+
query: derivedFullStateQuery(s, {
|
|
368
|
+
order: hasAnyRowSpans ? null : s.query.order,
|
|
369
|
+
}),
|
|
370
|
+
display: derivedFullStateDisplay({
|
|
371
|
+
coreState: s,
|
|
372
|
+
columns: columns,
|
|
373
|
+
pluralEntityName: pluralEntityName,
|
|
374
|
+
columnNameMap: columnNameMap,
|
|
375
|
+
resolvedColumns: resolvedColumns,
|
|
376
|
+
searchableColumnMap: searchableColumnMap,
|
|
377
|
+
csvExportAllowed: csvExportAllowed,
|
|
378
|
+
options: options,
|
|
379
|
+
}, {
|
|
380
|
+
columns: resolvedColumns.map(column => hasAnyRowSpans ? { ...column, orderable: false } : column),
|
|
381
|
+
cellRowSpan: cellRowSpan,
|
|
382
|
+
needsRightBorder: (rowIndex, column) => {
|
|
383
|
+
const i = resolvedColumnKeys.findIndex(key => key === column);
|
|
384
|
+
if (i < 0 || i === resolvedColumnKeys.length - 1)
|
|
385
|
+
return false;
|
|
386
|
+
const rightColKey = resolvedColumnKeys[i + 1];
|
|
387
|
+
const spanOnRight = cellRowSpan(rowIndex, rightColKey);
|
|
388
|
+
return spanOnRight > 1 || spanOnRight === 0;
|
|
389
|
+
},
|
|
390
|
+
}),
|
|
391
|
+
selection: derivedFullStateSelection(s, options),
|
|
392
|
+
result: {
|
|
393
|
+
...stateResult,
|
|
394
|
+
isGrouped: false,
|
|
395
|
+
resultType: 'normal-rows',
|
|
396
|
+
rows,
|
|
397
|
+
rowsAsGroup: {
|
|
398
|
+
rows,
|
|
399
|
+
selected: false,
|
|
400
|
+
totalMatchingRowCount: rows.length,
|
|
401
|
+
groupData: { key: '' },
|
|
402
|
+
},
|
|
403
|
+
csvFilename: TableResultHelpers.getCsvFilename(pluralEntityName, options),
|
|
404
|
+
csvData,
|
|
405
|
+
},
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
function derivedFullStateQuery(coreState, partialQuery = {}) {
|
|
409
|
+
return {
|
|
410
|
+
...coreState.query,
|
|
411
|
+
pagination: derivedFullStatePagination(coreState),
|
|
412
|
+
noSearchColumnsSelected: TableSearchHelpers.getSearchColumnsSelectedState(coreState, 'none'),
|
|
413
|
+
...partialQuery,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
function derivedFullStatePagination(coreState) {
|
|
417
|
+
return {
|
|
418
|
+
...coreState.query.pagination,
|
|
419
|
+
previous: TablePaginationHelpers.getPreviousPage(coreState),
|
|
420
|
+
pages: TablePaginationHelpers.getPages(coreState),
|
|
421
|
+
next: TablePaginationHelpers.getNextPage(coreState),
|
|
422
|
+
pageCount: TablePaginationHelpers.getPageCount(coreState),
|
|
423
|
+
showControls: TablePaginationHelpers.getShowPaginationControls(coreState),
|
|
424
|
+
pageRowStart: TablePaginationHelpers.getPageRowStart(coreState),
|
|
425
|
+
pageRowEnd: TablePaginationHelpers.getPageRowEnd(coreState),
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
function derivedFullStateDisplay(props, partialDisplay = {}) {
|
|
429
|
+
const { coreState, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
430
|
+
return {
|
|
431
|
+
...coreState.display,
|
|
432
|
+
columns: resolvedColumns,
|
|
433
|
+
allColumns: TableColumnHelpers.getAllColumns(coreState, columns, columnNameMap),
|
|
434
|
+
columnNameMap: columnNameMap,
|
|
435
|
+
searchableColumnMap: searchableColumnMap,
|
|
436
|
+
zeroStateMessage: TableDisplayHelpers.getZeroStateMessage(coreState, pluralEntityName),
|
|
437
|
+
columnsAreFreezable: !!options?.columnsAreFreezable,
|
|
438
|
+
columnsAreHideable: !!options?.columnsAreHideable,
|
|
439
|
+
columnsAreReorderable: options?.columnsAreReorderable ?? true,
|
|
440
|
+
rowsAreGrayed: !!options?.rowsAreGrayed,
|
|
441
|
+
customSummaryRow: !!options?.customSummaryRow,
|
|
442
|
+
csvExportAllowed: csvExportAllowed,
|
|
443
|
+
enabledCount: resolvedColumns.length,
|
|
444
|
+
hidePageSizeSelector: !!options?.hidePageSizeSelector,
|
|
445
|
+
cellRowSpan: (_i, _column) => 1,
|
|
446
|
+
needsRightBorder: () => false,
|
|
447
|
+
...partialDisplay,
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
function derivedFullStateSelection(coreState, options) {
|
|
451
|
+
return {
|
|
452
|
+
...coreState.selection,
|
|
453
|
+
allowSelection: options?.allowSelection ?? false,
|
|
454
|
+
isAllSelected: TableSelectionHelpers.isAllSelected(coreState),
|
|
455
|
+
isCurrentPageSelected: TableSelectionHelpers.isCurrentPageSelected(coreState),
|
|
456
|
+
selectedCount: TableSelectionHelpers.selectedCount(coreState),
|
|
457
|
+
};
|
|
458
|
+
}
|
|
319
459
|
function createInMemoryManager(fetchDataset, columns, pluralEntityName, options) {
|
|
320
460
|
let data;
|
|
321
461
|
let fuse;
|
|
@@ -399,39 +539,128 @@ export var RivTable;
|
|
|
399
539
|
totalMatchingRowCount: filtered.length,
|
|
400
540
|
};
|
|
401
541
|
};
|
|
402
|
-
const columnMetadata =
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
description: metadata.description,
|
|
409
|
-
minWidth: metadata.minWidth,
|
|
410
|
-
dataType: metadata.dataType,
|
|
411
|
-
defaultPinned: metadata.defaultPinned,
|
|
412
|
-
clickPreventDefault: metadata.clickPreventDefault,
|
|
413
|
-
clickStopPropagation: metadata.clickStopPropagation,
|
|
414
|
-
displayName: metadata.displayName,
|
|
415
|
-
},
|
|
416
|
-
]));
|
|
417
|
-
// When a defaultSort is specified, seed the initial query.order so the
|
|
418
|
-
// table header shows the sort indicator from the start.
|
|
419
|
-
if (options?.defaultSort && !options?.initialState?.query?.order) {
|
|
420
|
-
const order = options.defaultSort;
|
|
421
|
-
options = {
|
|
422
|
-
...options,
|
|
423
|
-
initialState: {
|
|
424
|
-
...options.initialState,
|
|
425
|
-
query: {
|
|
426
|
-
...options.initialState?.query,
|
|
427
|
-
order,
|
|
428
|
-
},
|
|
429
|
-
},
|
|
430
|
-
};
|
|
431
|
-
}
|
|
542
|
+
const columnMetadata = TableColumnHelpers.createColumnMetadataMap(columns);
|
|
543
|
+
/*
|
|
544
|
+
When a defaultSort is specified, seed the initial query.order so the
|
|
545
|
+
table header shows the sort indicator from the start.
|
|
546
|
+
*/
|
|
547
|
+
options = TableOrderHelpers.seedDefaultSortOption(options);
|
|
432
548
|
return createManager(source, columnMetadata, pluralEntityName, options);
|
|
433
549
|
}
|
|
434
550
|
RivTable.createInMemoryManager = createInMemoryManager;
|
|
551
|
+
function createInMemoryManagerNested(fetchDataset, columns, pluralEntityName, options) {
|
|
552
|
+
let data;
|
|
553
|
+
let rowsFromData;
|
|
554
|
+
// The fuse will search the individual rows
|
|
555
|
+
let fuse;
|
|
556
|
+
const source = async (query, mostRecentAction) => {
|
|
557
|
+
//For inMemoryManagers that do not utilize searchColumns,
|
|
558
|
+
//we do not want to overwrite their fuseOptions
|
|
559
|
+
if (mostRecentAction.type === 'load') {
|
|
560
|
+
//Prevent searching on columns that are in fuse options but not supported by search.
|
|
561
|
+
const nonSearchableColumnsKeys = options?.fuseOptions?.keys
|
|
562
|
+
? Array.from(columns.entries())
|
|
563
|
+
.filter(([key, column]) => {
|
|
564
|
+
return column.searchable == false;
|
|
565
|
+
})
|
|
566
|
+
.map(([key, column]) => {
|
|
567
|
+
return column.orderKey?.toString() || key.toString();
|
|
568
|
+
})
|
|
569
|
+
: undefined;
|
|
570
|
+
const fuseOptions = options?.fuseOptions && nonSearchableColumnsKeys
|
|
571
|
+
? {
|
|
572
|
+
...options?.fuseOptions,
|
|
573
|
+
keys: options?.fuseOptions?.keys?.filter(k => !nonSearchableColumnsKeys.includes(k.toString())),
|
|
574
|
+
}
|
|
575
|
+
: options?.fuseOptions;
|
|
576
|
+
data = await fetchDataset();
|
|
577
|
+
rowsFromData = TableResultHelpers.getAllRowsFromNestedHeaders(data);
|
|
578
|
+
fuse = new Fuse(rowsFromData, fuseOptions);
|
|
579
|
+
}
|
|
580
|
+
if (mostRecentAction.type === 'searchColumnsChange' ||
|
|
581
|
+
mostRecentAction.type === 'toggleAllSearchColumns') {
|
|
582
|
+
data = await fetchDataset();
|
|
583
|
+
rowsFromData = TableResultHelpers.getAllRowsFromNestedHeaders(data);
|
|
584
|
+
fuse = new Fuse(rowsFromData, {
|
|
585
|
+
...options?.fuseOptions,
|
|
586
|
+
keys: Array.from(query.searchColumns.entries())
|
|
587
|
+
.filter(([_, value]) => !!value)
|
|
588
|
+
.map(([key, _]) => {
|
|
589
|
+
const columnKey = columns.get(key);
|
|
590
|
+
return columnKey?.orderKey || key;
|
|
591
|
+
}),
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
const orderColumn = query.order
|
|
595
|
+
? columns.get(query.order.column)?.orderKey
|
|
596
|
+
: undefined;
|
|
597
|
+
const hasExplicitSort = query.order != null && orderColumn !== undefined;
|
|
598
|
+
const defaultSortSpec = (() => {
|
|
599
|
+
if (options?.defaultSort) {
|
|
600
|
+
const key = columns.get(options.defaultSort.column)?.orderKey;
|
|
601
|
+
if (key !== undefined) {
|
|
602
|
+
return { key, direction: options.defaultSort.direction };
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
const firstOrderable = [...columns.entries()].find(([, meta]) => meta.orderKey != null);
|
|
606
|
+
const key = firstOrderable?.[1].orderKey;
|
|
607
|
+
return key !== undefined ? { key, direction: 'asc' } : null;
|
|
608
|
+
})();
|
|
609
|
+
// Search, then filter, then sort
|
|
610
|
+
let didRestrictDisplayedRows = false;
|
|
611
|
+
let rowsMatchingSearch = rowsFromData;
|
|
612
|
+
if (query.search) {
|
|
613
|
+
rowsMatchingSearch = fuse
|
|
614
|
+
.search(query.search)
|
|
615
|
+
.map(result => result.item);
|
|
616
|
+
didRestrictDisplayedRows = true;
|
|
617
|
+
}
|
|
618
|
+
let rowsMatchingFilters = rowsMatchingSearch;
|
|
619
|
+
const filterToApply = options?.filter;
|
|
620
|
+
if (filterToApply) {
|
|
621
|
+
rowsMatchingFilters = rowsMatchingSearch.filter(row => filterToApply(query.filters, row));
|
|
622
|
+
didRestrictDisplayedRows = true;
|
|
623
|
+
}
|
|
624
|
+
const nestedRowsToDisplay = didRestrictDisplayedRows
|
|
625
|
+
? TableNestingHelpers.findNestedRowsWithHeadersToKeep(data, rowsMatchingFilters)
|
|
626
|
+
: data;
|
|
627
|
+
const bottomLevelRowCount = TableNestingHelpers.countBottomLevelNestedHeaderRows(nestedRowsToDisplay);
|
|
628
|
+
let sortedNestedRows;
|
|
629
|
+
if (hasExplicitSort && query.order) {
|
|
630
|
+
// Explicit sort override has priority over everything else
|
|
631
|
+
sortedNestedRows = TableOrderHelpers.sortLowLevelNestedRowsWithHeaders(nestedRowsToDisplay, orderColumn, query.order.direction);
|
|
632
|
+
}
|
|
633
|
+
else if (query.search) {
|
|
634
|
+
// Sort on the Fuse relevance order
|
|
635
|
+
const idToSearchIndexMap = TableOrderHelpers.createIdToSearchIndexMap(rowsMatchingSearch);
|
|
636
|
+
sortedNestedRows =
|
|
637
|
+
TableOrderHelpers.sortNestedRowsWithHeadersBasedOnSearchMatches(nestedRowsToDisplay, idToSearchIndexMap);
|
|
638
|
+
}
|
|
639
|
+
else if (query.order == null && defaultSortSpec) {
|
|
640
|
+
// Use the default sort, if we have one
|
|
641
|
+
sortedNestedRows = TableOrderHelpers.sortLowLevelNestedRowsWithHeaders(nestedRowsToDisplay, defaultSortSpec.key, defaultSortSpec.direction);
|
|
642
|
+
}
|
|
643
|
+
else {
|
|
644
|
+
// Don't sort if we have no information to use to sort
|
|
645
|
+
sortedNestedRows = nestedRowsToDisplay;
|
|
646
|
+
}
|
|
647
|
+
const paginatedHeaderRows = TablePaginationHelpers.paginateNestedHeaderRows(sortedNestedRows, query.pagination.page, query.pagination.pageSize);
|
|
648
|
+
const hasHeaders = paginatedHeaderRows.some(header => header.headerText != null);
|
|
649
|
+
return {
|
|
650
|
+
currentPageNestedHeaders: paginatedHeaderRows,
|
|
651
|
+
totalMatchingRowCount: bottomLevelRowCount,
|
|
652
|
+
hasHeaders: hasHeaders,
|
|
653
|
+
};
|
|
654
|
+
};
|
|
655
|
+
const columnMetadata = TableColumnHelpers.createColumnMetadataMap(columns);
|
|
656
|
+
/*
|
|
657
|
+
When a defaultSort is specified, seed the initial query.order so the
|
|
658
|
+
table header shows the sort indicator from the start.
|
|
659
|
+
*/
|
|
660
|
+
options = TableOrderHelpers.seedDefaultSortOption(options);
|
|
661
|
+
return createManager(source, columnMetadata, pluralEntityName, options);
|
|
662
|
+
}
|
|
663
|
+
RivTable.createInMemoryManagerNested = createInMemoryManagerNested;
|
|
435
664
|
})(RivTable || (RivTable = {}));
|
|
436
665
|
/**
|
|
437
666
|
* This function keeps the state object references as stable as possible, which
|
|
@@ -529,6 +758,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
529
758
|
mode: 'include',
|
|
530
759
|
included: new Set(),
|
|
531
760
|
},
|
|
761
|
+
collapseState: {
|
|
762
|
+
collapsedHeaders: new Set(),
|
|
763
|
+
collapsedRows: new Set(),
|
|
764
|
+
},
|
|
532
765
|
}, source, action);
|
|
533
766
|
break;
|
|
534
767
|
case 'orderColumnToggle':
|
|
@@ -550,6 +783,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
550
783
|
mode: 'include',
|
|
551
784
|
included: new Set(),
|
|
552
785
|
},
|
|
786
|
+
collapseState: {
|
|
787
|
+
collapsedHeaders: new Set(),
|
|
788
|
+
collapsedRows: new Set(),
|
|
789
|
+
},
|
|
553
790
|
}, source, action);
|
|
554
791
|
break;
|
|
555
792
|
case 'searchColumnsChange':
|
|
@@ -571,6 +808,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
571
808
|
mode: 'include',
|
|
572
809
|
included: new Set(),
|
|
573
810
|
},
|
|
811
|
+
collapseState: {
|
|
812
|
+
collapsedHeaders: new Set(),
|
|
813
|
+
collapsedRows: new Set(),
|
|
814
|
+
},
|
|
574
815
|
}, source, action);
|
|
575
816
|
break;
|
|
576
817
|
case 'paginationChange':
|
|
@@ -601,6 +842,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
601
842
|
page: TablePaginationHelpers.getPreviousPage(state) ?? 0,
|
|
602
843
|
},
|
|
603
844
|
},
|
|
845
|
+
collapseState: {
|
|
846
|
+
collapsedHeaders: new Set(),
|
|
847
|
+
collapsedRows: new Set(),
|
|
848
|
+
},
|
|
604
849
|
}, source, action);
|
|
605
850
|
break;
|
|
606
851
|
case 'nextPageNavigate':
|
|
@@ -614,6 +859,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
614
859
|
TablePaginationHelpers.getPageCount(state) - 1,
|
|
615
860
|
},
|
|
616
861
|
},
|
|
862
|
+
collapseState: {
|
|
863
|
+
collapsedHeaders: new Set(),
|
|
864
|
+
collapsedRows: new Set(),
|
|
865
|
+
},
|
|
617
866
|
}, source, action);
|
|
618
867
|
break;
|
|
619
868
|
case 'pageChange':
|
|
@@ -626,6 +875,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
626
875
|
page: action.page,
|
|
627
876
|
},
|
|
628
877
|
},
|
|
878
|
+
collapseState: {
|
|
879
|
+
collapsedHeaders: new Set(),
|
|
880
|
+
collapsedRows: new Set(),
|
|
881
|
+
},
|
|
629
882
|
}, source, action);
|
|
630
883
|
break;
|
|
631
884
|
case 'pageSizeChange':
|
|
@@ -639,6 +892,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
639
892
|
page: 0,
|
|
640
893
|
},
|
|
641
894
|
},
|
|
895
|
+
collapseState: {
|
|
896
|
+
collapsedHeaders: new Set(),
|
|
897
|
+
collapsedRows: new Set(),
|
|
898
|
+
},
|
|
642
899
|
}, source, action);
|
|
643
900
|
break;
|
|
644
901
|
case 'filtersChange':
|
|
@@ -657,6 +914,10 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
657
914
|
mode: 'include',
|
|
658
915
|
included: new Set(),
|
|
659
916
|
},
|
|
917
|
+
collapseState: {
|
|
918
|
+
collapsedHeaders: new Set(),
|
|
919
|
+
collapsedRows: new Set(),
|
|
920
|
+
},
|
|
660
921
|
}, source, action);
|
|
661
922
|
break;
|
|
662
923
|
case 'filterAdd':
|
|
@@ -802,6 +1063,18 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
802
1063
|
case 'toggleAllSearchColumns':
|
|
803
1064
|
yield* refreshResultWith(TableSearchHelpers.toggleAllSearchColumns(state), source, action);
|
|
804
1065
|
break;
|
|
1066
|
+
case 'toggleRowCollapse':
|
|
1067
|
+
yield {
|
|
1068
|
+
state: TableCollapseHelpers.toggleRowCollapse(state, action.id),
|
|
1069
|
+
effect: null,
|
|
1070
|
+
};
|
|
1071
|
+
break;
|
|
1072
|
+
case 'toggleHeaderCollapse':
|
|
1073
|
+
yield {
|
|
1074
|
+
state: TableCollapseHelpers.toggleHeaderCollapse(state, action.id),
|
|
1075
|
+
effect: null,
|
|
1076
|
+
};
|
|
1077
|
+
break;
|
|
805
1078
|
}
|
|
806
1079
|
}
|
|
807
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQXFxQ3hCO0FBcnFDRCxXQUFpQixRQUFRO0lBMENWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQVUsQ0FBQztJQW9UckQsbURBQW1EO0lBQ3RDLHdCQUFlLEdBQVcsRUFBRSxDQUFDO0lBQzdCLHdCQUFlLEdBQUc7UUFDN0IsVUFBVTtRQUNWLFVBQVU7UUFD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QUFDLFFBQVE7d0JBQ3ZCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtxQkFDcEM7aUJBQ0Y7YUFDRixFQUNELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG1CQUFtQjtZQUN0QixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO29CQUNkLFFBQVEsRUFBRTt3QkFDUixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDdkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO3FCQUNoQztpQkFDRjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssd0JBQXdCO1lBQzNCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUN0QixrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFDaEQsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtLQUNUO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyYW1zLCBRdWVyeVBhcmFtc0hhbmRsaW5nIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBGdXNlLCB7IElGdXNlT3B0aW9ucyB9IGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgZGVmYXVsdHNEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIENvbm5lY3RhYmxlLFxuICBjb25uZWN0YWJsZSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlU2NhbixcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2NhbixcbiAgc2hhcmUsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcbmltcG9ydCB7IHRvU2VudGVuY2VDYXNlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3NlbnRlbmNlLWNhc2UucGlwZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sdW1uLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVEaXNwbGF5SGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9kaXNwbGF5LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVPcmRlckhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvb3JkZXItaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRpb25IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3BhZ2luYXRpb24taGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVJlc3VsdEhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvcmVzdWx0LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVTZWFyY2hIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VsZWN0aW9uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9zZWxlY3Rpb24taGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2VGFibGUge1xuICBleHBvcnQgdHlwZSBSb3cgPSB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBGaWx0ZXJzID0gYW55O1xuICBleHBvcnQgdHlwZSBHcm91cCA9IHsga2V5OiBzdHJpbmcgfCBudW1iZXIgfTtcblxuICAvKipcbiAgICogUml2VGFibGUncyBzdGF0ZSBhbmQgdXNlciBhY3Rpb25zIGFyZSBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBjaHVua3M6XG4gICAqXG4gICAqIC0gUXVlcnkgKGZvciB0aGluZ3MgbGlrZSBmaWx0ZXJzLCBwYWdpbmF0aW9uLCBzZWFyY2gsIGV0Yy4pXG4gICAqIC0gTG9hZGluZyAoZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBpcyBsb2FkaW5nIHJvdyBkYXRhKVxuICAgKiAtIFJlc3VsdCAoZm9yIHRoZSByb3cgZGF0YSBpdHNlbGYpXG4gICAqIC0gRGlzcGxheSAoZm9yIHRoaW5ncyBsaWtlIGNvbHVtbiBjb25maWd1cmF0aW9uKVxuICAgKiAtIFNlbGVjdGlvbiAoZm9yIHRyYWNraW5nIHRoZSB1c2VyJ3Mgcm93IHNlbGVjdGlvbnMpXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgZGF0YSBmbG93IGlzIHVuaWRpcmVjdGlvbmFsOiB0aGUgVUkgaXNzdWVzIGFjdGlvbnMsIHdoaWNoXG4gICAqIGFmZmVjdCB0aGUgc3RhdGUsIGFuZCB0aGUgc3RhdGUgZ2V0cyBwYXNzZWQgYmFjayB0byB0aGUgVUkgZm9yIGRpc3BsYXkuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICpcbiAgICogRnJvbSB0aGUgY29yZSBzdGF0ZSwgY2FsY3VsYXRlZCBzdGF0ZSBpcyBkZXJpdmVkIGFuZCBhZGRlZCB0byB0aGUgY29yZVxuICAgKiBzdGF0ZSAoZS5nLiwgZnJvbSB0aGUgcmF3IHNlbGVjdGlvbiBzdGF0ZSB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90XG4gICAqIGFsbCB0aGUgcm93cyBvbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlIGFyZSBzZWxlY3RlZCwgZXRjLikuXG4gICAqL1xuXG4gIC8vLy8vLy8vLy8vXG4gIC8vIFF1ZXJ5IC8vXG4gIC8vLy8vLy8vLy8vXG5cbiAgLy8gUXVlcnkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBPcmRlckRpcmVjdGlvbiA9ICdhc2MnIHwgJ2Rlc2MnO1xuICBleHBvcnQgY29uc3QgcGFnZVNpemVzID0gWzI1LCA1MCwgMTAwLCAyNTBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBRdWVyeTxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPSB7XG4gICAgb3JkZXI6IHtcbiAgICAgIGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb247XG4gICAgICBjb2x1bW46IEM7XG4gICAgfSB8IG51bGw7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgc2VhcmNoQ29sdW1uczogTWFwPEMsIGJvb2xlYW4+O1xuICAgIGZpbHRlcnM6IEYgfCBudWxsO1xuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIHBhZ2U6IG51bWJlcjtcbiAgICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgfTtcbiAgICBncm91cGluZzoge1xuICAgICAgdmlld01vcmVLZXk6IHN0cmluZyB8IG51bGw7XG4gICAgICBncm91cHNQZXJQYWdlOiBudW1iZXI7XG4gICAgICBjb3VudFBlckdyb3VwOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvLyBRdWVyeSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgUXVlcnlBY3Rpb248QyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWQnIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ29yZGVyQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUXVlcnk8QywgRj5bJ29yZGVyJ107XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JztcbiAgICAgIH1cbiAgICB8IHsgdHlwZTogJ29yZGVyQ29sdW1uVG9nZ2xlJzsgY29sdW1uOiBDIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2gnXSB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3NlYXJjaENvbHVtbnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJzQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2ZpbHRlcnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJBZGQnOyBjb2x1bW5LZXk6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICdwYWdpbmF0aW9uQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3BhZ2luYXRpb24nXSB9XG4gICAgfCB7IHR5cGU6ICdncm91cGluZ0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+Wydncm91cGluZyddIH1cbiAgICB8IHsgdHlwZTogJ25leHRQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwYWdlQ2hhbmdlJzsgcGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VTaXplQ2hhbmdlJzsgc2l6ZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2dyb3Vwc1BlclBhZ2VDaGFuZ2UnOyBncm91cHNQZXJQYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAnY291bnRQZXJHcm91cENoYW5nZSc7IGNvdW50UGVyR3JvdXA6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICd2aWV3TW9yZUtleUNoYW5nZSc7IHZpZXdNb3JlS2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucycgfTtcblxuICAvLy8vLy8vLy8vXG4gIC8vIExvYWQgLy9cbiAgLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIExvYWQgPSB7XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBlcnJvcjogdW5rbm93biB8IG51bGw7XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vXG4gIC8vIFJlc3VsdCAvL1xuICAvLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlRGF0YTogUltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdWJHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0gUmVzdWx0PFI+ICYge1xuICAgIC8qKlxuICAgICAqIEFueSBvdGhlciByZWxldmFudCBncm91cCBkYXRhLCB1c2VkIGZvciB0aGUgc3ViaGVhZGVyXG4gICAgICovXG4gICAgZ3JvdXBEYXRhOiBHO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEdyb3VwUmVzdWx0PFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBzcGxpdCBpbnRvIGdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwUmVzdWx0czogU3ViR3JvdXBSZXN1bHQ8UiwgRz5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGdyb3VwcyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbEdyb3VwQ291bnQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgLypcbiAgICBOZXN0ZWRSZXN1bHRcbiAgICAgIE5lc3RlZFJvdyAtIHdpdGggc3Vicm93c1xuICAgICAgICBOZXN0ZWRSb3cgLSB3aXRoIG5vIHN1YnJvd3NcbiAgKi9cbiAgZXhwb3J0IHR5cGUgTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8vIFRoZSByb3dzIHRoYXQgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIHRoZSB0b2dnbGUgb24gdGhpcyByb3cgaXMgdG9nZ2xlZC5cbiAgICBzdWJSb3dzPzogTmVzdGVkUm93PFI+W107XG5cbiAgICAvLyBUaGUgcmVsZXZhbnQgZGF0YSB1c2VkIHRvIGRpc3BsYXkgdGhpcyByb3cuXG4gICAgZGF0YTogUjtcbiAgfTtcbiAgLypcbiAgICBOZXN0ZWQgcmVzdWx0cyBhcmUgZm9yIHRvZ2dsZWFibGUgcm93cyBjb250YWluaW5nIHN1YnJvd3MuXG4gICAgTmVzdGVkIHJlc3VsdHMgb25seSBzdXBwb3J0IGdvaW5nIG9uZSBsZXZlbCBkZWVwIGF0IHRoZSBtb21lbnQuXG4gICovXG4gIGV4cG9ydCB0eXBlIE5lc3RlZFJlc3VsdDxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQsIG5lc3RlZCBpbnRvIFwicm93cyB3aXRoIHN1YnJvd3NcIlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlTmVzdGVkUm93czogTmVzdGVkUm93PFI+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqXG4gICAgICogT25seSBjb3VudHMgcm93cyBhdCB0aGUgYm90dG9tIGxldmVsIG9mIG5lc3RpbmcuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgLypcbiAgICBOZXN0ZWRXaXRoSGVhZGVyUmVzdWx0XG4gICAgICBOZXN0ZWRIZWFkZXJSb3dcbiAgICAgICAgTmVzdGVkUm93IC0gd2l0aCBzdWJyb3dzXG4gICAgICAgICAgTmVzdGVkUm93IC0gd2l0aCBubyBzdWJyb3dzXG4gICovXG4gIGV4cG9ydCB0eXBlIE5lc3RlZEhlYWRlclJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvLyBUaGUgcm93cyB0aGF0IHNob3VsZCBiZSBoaWRkZW4gd2hlbiB0aGUgdG9nZ2xlIG9uIHRoaXMgaGVhZGVyIGlzIHRvZ2dsZWQuXG4gICAgc3ViUm93czogTmVzdGVkUm93PFI+W107XG5cbiAgICAvLyBUaGUgdGV4dCB0byBzaG93IG5leHQgdG8gdGhlIHRvZ2dsZWFibGUgY2hldnJvblxuICAgIGhlYWRlclRleHQ6IHN0cmluZztcbiAgfTtcbiAgLypcbiAgICBOZXN0ZWQgaGVhZGVyIHJvd3MgYXJlIHRvZ2dsZWFibGUgaGVhZGVycyBmb3IgZ3JvdXBzIG9mIHJvd3MuXG4gICovXG4gIGV4cG9ydCB0eXBlIE5lc3RlZFdpdGhIZWFkZXJSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBuZXN0ZWQgaW50byBcImhlYWRlcnMgd2l0aCBzdWJyb3dzXCIuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICpcbiAgICAgKiBPbmx5IGNvdW50cyByb3dzIGF0IHRoZSBib3R0b20gbGV2ZWwgb2YgbmVzdGluZy5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTb3VyY2U8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gKFxuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPixcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248UiwgQywgRiwgRz4sXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPj47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBEaXNwbGF5IC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvLyBEaXNwbGF5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uU2V0dGluZ3M8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAga2V5OiBDO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIERpc3BsYXk8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAgY29sdW1uU2V0dGluZ3M6IENvbHVtblNldHRpbmdzPEM+W107XG4gICAgY2VsbFJvd1NwYW46IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW46IEMpID0+IG51bWJlcjtcbiAgfTtcblxuICAvLyBEaXNwbGF5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBEaXNwbGF5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4+ID1cbiAgICB8IHsgdHlwZTogJ2NvbHVtblNldHRpbmdzQ2hhbmdlJzsgcGF5bG9hZDogRGlzcGxheTxDPlsnY29sdW1uU2V0dGluZ3MnXSB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5QaW5DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJztcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgZnJlZXplOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2ZyZWV6ZURpdmlkZXInO1xuICAgICAgICBjb2x1bW4/OiBDO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnO1xuICAgICAgICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gICAgICAgIG5ld0luZGV4OiBudW1iZXI7XG4gICAgICAgIHNvdXJjZT86ICd0YWJsZURyYWcnIHwgJ21lbnVEcmFnJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JyB8ICdvcHRpb25zTWVudScgfCAnZHJhZ0Ryb3AnIHwgJ2V5ZUljb24nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5XaWR0aENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vL1xuICAvLyBTZWxlY3Rpb24gLy9cbiAgLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gU2VsZWN0aW9uIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uPFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBSWydpZCddIHwgbnVsbDtcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnO1xuICAgICAgICBpbmNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBtb2RlOiAnZXhjbHVkZSc7XG4gICAgICAgIGV4Y2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICk7XG5cbiAgLy8gU2VsZWN0aW9uIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb25BY3Rpb248UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0+ID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFNlbGVjdGlvbjxSPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2dyb3VwU2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUm93R3JvdXA8UiwgRz47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyb3dTZWxlY3RlZENoYW5nZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgICAgY29udGlndW91czogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3BhZ2VTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdhbGxTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DbGVhcic7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIC8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gQ29tYmluZWQgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBDb3JlU3RhdGU8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPjtcbiAgICBsb2FkOiBMb2FkO1xuICAgIHJlc3VsdDogUmVzdWx0PFI+IHwgR3JvdXBSZXN1bHQ8UiwgRz47XG4gICAgZGlzcGxheTogRGlzcGxheTxDPjtcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbjxSPjtcbiAgfTtcblxuICAvLyBDb21iaW5lZCBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IFF1ZXJ5QWN0aW9uPEMsIEY+IHwgRGlzcGxheUFjdGlvbjxDPiB8IFNlbGVjdGlvbkFjdGlvbjxSLCBHPjtcblxuICBleHBvcnQgdHlwZSBFZmZlY3QgPSAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJztcblxuICAvLyBGdWxsIHN0YXRlIChjb3JlIHN0YXRlIHBsdXMgcHVyZSBkZXJpdmF0aW9ucykgLy9cbiAgZXhwb3J0IGNvbnN0IENvbHVtbnNNYXhTaG93bjogbnVtYmVyID0gNTA7XG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJvd0xpbmsgPSBFeHRlcm5hbFJvd0xpbmsgfCBJbnRlcm5hbFJvd0xpbms7XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJvd0dyb3VwPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93cz86IEZ1bGxOZXN0ZWRSb3c8Uj5bXTtcbiAgICBkYXRhOiBSO1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxOZXN0ZWRXaXRoSGVhZGVyUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93czogRnVsbE5lc3RlZFJvdzxSPltdO1xuICAgIGhlYWRlclRleHQ6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW4+ID0gQ29sdW1uU2V0dGluZ3M8Qz4gJlxuICAgIENvbHVtbk1ldGFkYXRhICYge1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIGxlZnQ6IG51bWJlciB8IG51bGw7XG4gICAgICBhbGlnbm1lbnQ6IENvbHVtbkFsaWdubWVudDtcbiAgICB9O1xuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQ29uZmlndXJhdGlvbiA9IGJvb2xlYW4gfCAnaW5kaXZpZHVhbCc7XG5cbiAgZXhwb3J0IHR5cGUgUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGV4cG9ydCB0eXBlIFZhbGlkUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXI7XG5cbiAgZXhwb3J0IHR5cGUgQ3N2Q2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3c6IFIsXG4gICAgY29sdW1uOiBGdWxsQ29sdW1uPEM+LFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2R3JvdXBDZWxsRm9ybWF0dGVyPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSAoXG4gICAgcm93OiBSLFxuICAgIGdyb3VwOiBHLFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2Um93ID0gc3RyaW5nW107XG4gIGV4cG9ydCB0eXBlIENzdiA9IENzdlJvd1tdO1xuICBleHBvcnQgdHlwZSBDc3ZNb2RlID0gJ2Z1bGwnIHwgJ3NlbGVjdGlvbic7XG4gIGV4cG9ydCB0eXBlIENzdk91dHB1dCA9XG4gICAgfCB7IGxvYWRpbmc6IHRydWU7IGRhdGE6IG51bGwgfVxuICAgIHwgeyBsb2FkaW5nOiBmYWxzZTsgZGF0YTogQ3N2IH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uTmFtZU1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBDIHwgc3RyaW5nPjtcblxuICBleHBvcnQgdHlwZSBTZWFyY2hhYmxlQ29sdW1uTWFwPEMgZXh0ZW5kcyBDb2x1bW4+ID0gTWFwPEMsIGJvb2xlYW4+O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBDb3JlU3RhdGU8UiwgQywgRiwgRz4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VzOiBudW1iZXJbXTtcbiAgICAgICAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZUNvdW50OiBudW1iZXI7XG4gICAgICAgIHNob3dDb250cm9sczogYm9vbGVhbjtcbiAgICAgICAgcGFnZVJvd1N0YXJ0OiBudW1iZXI7XG4gICAgICAgIHBhZ2VSb3dFbmQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICAgIHJlc3VsdDpcbiAgICAgIHwge1xuICAgICAgICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICAgICAgICByb3dzQXNHcm91cDogUm93R3JvdXA8UiwgRz47XG4gICAgICAgICAgaXNHcm91cGVkOiBmYWxzZTtcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIHJvd0dyb3VwczogUm93R3JvdXA8UiwgRz5bXTtcbiAgICAgICAgICBpc0dyb3VwZWQ6IHRydWU7XG4gICAgICAgICAgY3N2RGF0YTogKG1vZGU/OiBDc3ZNb2RlKSA9PiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+O1xuICAgICAgICAgIGNzdkZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgY29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgICAgYWxsQ29sdW1uczogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgICAgemVyb1N0YXRlTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6IGJvb2xlYW47XG4gICAgICBjb2x1bW5zQXJlSGlkZWFibGU6IGJvb2xlYW47XG4gICAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgICByb3dzQXJlR3JheWVkOiBib29sZWFuO1xuICAgICAgY3VzdG9tU3VtbWFyeVJvdzogYm9vbGVhbjtcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgICBlbmFibGVkQ291bnQ6IG51bWJlcjtcbiAgICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiBib29sZWFuO1xuICAgICAgbmVlZHNSaWdodEJvcmRlcjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQykgPT4gYm9vbGVhbjtcbiAgICB9O1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dTZWxlY3Rpb246IFNlbGVjdGlvbkNvbmZpZ3VyYXRpb247XG4gICAgICBpc0FsbFNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgICAgc2VsZWN0ZWRDb3VudDogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5hZ2VyIGlzIHdoYXQgc2V0cyB1cCB0aGUgaW5pdGlhbCBzdGF0ZSBhbmQgdHJhbnNsYXRlcyB1c2VyIGFjdGlvbnNcbiAgICogKGxpa2UgcGFnaW5hdGlvbiBvciBmaWx0ZXIgY2hhbmdlcywgZXRjLikgaW50byBuZXcgcm93IGRhdGEgYnkgY2FsbGluZyB0aGVcbiAgICogcmVkdWNlciBmdW5jdGlvbi4gSXQgYWxzbyBhdWdtZW50cyB0aGUgY29yZSBzdGF0ZSB3aXRoIGFkZGl0aW9uYWwgZGVyaXZlZFxuICAgKiBzdGF0ZS5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+O1xuICAgIHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8UiwgQywgRiwgRz4+O1xuICAgIGVmZmVjdHM6IENvbm5lY3RhYmxlPEVmZmVjdD47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgcm93TGluaz86IChyb3c6IFIsIGdyb3VwPzogRykgPT4gUm93TGluaztcbiAgICBjc3ZDZWxsRm9ybWF0dGVyPzogQ3N2Q2VsbEZvcm1hdHRlcjxSLCBDPjtcbiAgICBjc3ZHcm91cENlbGxGb3JtYXR0ZXI/OiBDc3ZHcm91cENlbGxGb3JtYXR0ZXI8UiwgRz47XG4gICAgY3N2RmlsZUJhc2VuYW1lPzogc3RyaW5nO1xuICAgIGFsbG93U2VsZWN0aW9uPzogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICBjb2x1bW5zQXJlRnJlZXphYmxlPzogYm9vbGVhbjtcbiAgICBjb2x1bW5zQXJlSGlkZWFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdENvbHVtblN0YXRlPzogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICByb3dzQXJlR3JheWVkPzogYm9vbGVhbjtcbiAgICBjdXN0b21TdW1tYXJ5Um93PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRydWUsIHRoZSBcIlJlc3VsdHMgcGVyIHBhZ2VcIiBsYWJlbCBhbmQgcGFnZS1zaXplIGRyb3Bkb3duIGFyZVxuICAgICAqIGhpZGRlbi4gUGFnZSBuYXZpZ2F0aW9uIGFycm93cyBhbmQgcGFnZSBudW1iZXJzIHJlbWFpbiB2aXNpYmxlLlxuICAgICAqL1xuICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXJlbnQtY29udHJvbGxlZCByb3cgc3Bhbm5pbmcuXG4gICAgICogUmV0dXJuIDAgdG8gc3VwcHJlc3MgdGhlIGNlbGwsID49MSBmb3IgYSByZWFsIHJvd3NwYW4uXG4gICAgICogSWYgb21pdHRlZCBvciBpbnZhbGlkLCBkZWZhdWx0cyB0byAxLlxuICAgICAqL1xuICAgIGdldFJvd1NwYW5Gb3JDZWxsPzogUm93U3BhbkdldHRlcjxDPjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEYsIEc+IHtcbiAgICAvLyBTZXQgdXAgdGhlIGluaXRpYWwgdGFibGUgc3RhdGUuXG5cbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+ID0gbmV3IE1hcDxDLCBib29sZWFuPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgbWV0YWRhdGEuc2VhcmNoYWJsZSA/PyB0cnVlLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIG9yZGVyOiBudWxsLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICBzZWFyY2hDb2x1bW5zOiBuZXcgTWFwKFxuICAgICAgICAgIEFycmF5LmZyb20oY29sdW1ucy5rZXlzKCkpXG4gICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBzZWFyY2hhYmxlQ29sdW1uTWFwLmdldChrZXkpKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4gW2tleSwgdHJ1ZV0pLFxuICAgICAgICApLFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgdmlld01vcmVLZXk6IG51bGwsXG4gICAgICAgICAgZ3JvdXBzUGVyUGFnZTogNSxcbiAgICAgICAgICBjb3VudFBlckdyb3VwOiAxMCxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbCB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogW10sXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogMCxcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBbXSxcbiAgICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz4gPSBuZXcgTWFwPEMsIEMgfCBzdHJpbmc+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICB0b1NlbnRlbmNlQ2FzZShtZXRhZGF0YS5kaXNwbGF5TmFtZSA/PyBrZXkpLFxuICAgICAgXSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5TdGF0ZSA9XG4gICAgICBvcHRpb25zPy5kZWZhdWx0Q29sdW1uU3RhdGUgPz9cbiAgICAgIGRlZmF1bHRlZEluaXRpYWxTdGF0ZS5kaXNwbGF5LmNvbHVtblNldHRpbmdzO1xuXG4gICAgLy8gV2lyZSB1cCByZWR1Y2VkIHN0YXRlIGZyb20gYWN0aW9ucyBhbmQgaW5pdGlhbCBzdGF0ZS5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGNvcmVTdGF0ZTogT2JzZXJ2YWJsZTx7XG4gICAgICBzdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgZWZmZWN0OiBFZmZlY3QgfCBudWxsO1xuICAgIH0+ID0gYWN0aW9ucy5waXBlKFxuICAgICAgbWVyZ2VTY2FuPFxuICAgICAgICBBY3Rpb248UiwgQywgRiwgRz4sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgPihcbiAgICAgICAgKHsgc3RhdGUgfSwgYWN0aW9uKSA9PlxuICAgICAgICAgIGZyb20oXG4gICAgICAgICAgICByZWR1Y2UoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICB7IHN0YXRlOiBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsIGVmZmVjdDogbnVsbCB9LFxuICAgICAgICAxLFxuICAgICAgKSxcbiAgICAgIHNoYXJlKHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkVycm9yOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY3N2RXhwb3J0QWxsb3dlZCA9ICEoXG4gICAgICBvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCB8fCBvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93XG4gICAgKTtcblxuICAgIC8vIEF1Z21lbnQgc3RhdGUgd2l0aCBkZXJpdmVkIHN0YXRlLCBhbmQgc3Vic2NyaWJlLlxuICAgIGNvbnN0IHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8UiwgQywgRiwgRz4+ID0gY29ubmVjdGFibGUoXG4gICAgICBjb3JlU3RhdGUucGlwZShcbiAgICAgICAgbWFwKCh7IHN0YXRlOiBzIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4gPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICEhb3B0aW9ucz8uYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChzLnJlc3VsdCkpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gcm93IHNwYW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHN1bW1hcnkgcm93cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ3JvdXBlZCB0YWJsZXMuJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgcm93R3JvdXBzID0gcy5yZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgICAgICAgICByb3dzOiBncm91cC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnJvdyxcbiAgICAgICAgICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rXG4gICAgICAgICAgICAgICAgICA/IG9wdGlvbnMucm93TGluayhyb3csIGdyb3VwLmdyb3VwRGF0YSlcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzR3JvdXBTZWxlY3RlZChzLCBncm91cCksXG4gICAgICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZ3JvdXAudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEoXG4gICAgICAgICAgICAgIG1vZGU6IENzdk1vZGUgPSAnZnVsbCcsXG4gICAgICAgICAgICApOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkdyb3VwQ2VsbEZvcm1hdHRlcjtcbiAgICAgICAgICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBzLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoIVRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KGRhdGFTZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdSZXR1cm5lZCBub24tZ3JvdXBlZCBDU1YgZGF0YSBmb3IgZ3JvdXBlZCB0YWJsZScsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgICAgICAgICBkYXRhLnB1c2goXG4gICAgICAgICAgICAgICAgZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSksXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgIGRhdGFbMF0ucHVzaCgnJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvd0l0ZW0gb2YgZGF0YVNldC5ncm91cFJlc3VsdHMuZmxhdE1hcChncm91cHMgPT5cbiAgICAgICAgICAgICAgICBncm91cHMuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgIGdyb3VwOiBncm91cHMuZ3JvdXBEYXRhLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHJvd0l0ZW0ucm93O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG1vZGUgPT09ICdzZWxlY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGNlbGxGb3JtYXR0ZXIocmVjb3JkLCBjb2x1bW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlciAmJiByb3dJdGVtLmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICByb3cucHVzaChhd2FpdCBncm91cENlbGxGb3JtYXR0ZXIocmVjb3JkLCByb3dJdGVtLmdyb3VwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFByZXZpb3VzUGFnZShzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VzKHMpLFxuICAgICAgICAgICAgICAgICAgbmV4dDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQocyksXG4gICAgICAgICAgICAgICAgICBzaG93Q29udHJvbHM6XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0U2hvd1BhZ2luYXRpb25Db250cm9scyhzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VSb3dTdGFydDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93U3RhcnQocyksXG4gICAgICAgICAgICAgICAgICBwYWdlUm93RW5kOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VSb3dFbmQocyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDpcbiAgICAgICAgICAgICAgICAgIFRhYmxlU2VhcmNoSGVscGVycy5nZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShzLCAnbm9uZScpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICBhbGxDb2x1bW5zOiBUYWJsZUNvbHVtbkhlbHBlcnMuZ2V0QWxsQ29sdW1ucyhcbiAgICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBUYWJsZURpc3BsYXlIZWxwZXJzLmdldFplcm9TdGF0ZU1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zQXJlSGlkZWFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUhpZGVhYmxlLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogb3B0aW9ucz8uY29sdW1uc0FyZVJlb3JkZXJhYmxlID8/IHRydWUsXG4gICAgICAgICAgICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgICAgICAgICAgIGN1c3RvbVN1bW1hcnlSb3c6ICEhb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdyxcbiAgICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBoaWRlUGFnZVNpemVTZWxlY3RvcjogISFvcHRpb25zPy5oaWRlUGFnZVNpemVTZWxlY3RvcixcbiAgICAgICAgICAgICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICAgICAgICAgICAgbmVlZHNSaWdodEJvcmRlcjogKCkgPT4gZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgIGFsbG93U2VsZWN0aW9uOiBvcHRpb25zPy5hbGxvd1NlbGVjdGlvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0FsbFNlbGVjdGVkOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNBbGxTZWxlY3RlZChzKSxcbiAgICAgICAgICAgICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6XG4gICAgICAgICAgICAgICAgICBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNDdXJyZW50UGFnZVNlbGVjdGVkKHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZWxlY3RlZENvdW50KHMpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zLnJlc3VsdCxcbiAgICAgICAgICAgICAgICBpc0dyb3VwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcm93R3JvdXBzLFxuICAgICAgICAgICAgICAgIHJvd3M6IHJvd0dyb3Vwcy5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLnJvd3MpLFxuICAgICAgICAgICAgICAgIGNzdkRhdGEsXG4gICAgICAgICAgICAgICAgY3N2RmlsZW5hbWU6IFRhYmxlUmVzdWx0SGVscGVycy5nZXRDc3ZGaWxlbmFtZShcbiAgICAgICAgICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gcy5yZXN1bHQuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rID8gb3B0aW9ucy5yb3dMaW5rKHJvdykgOiBudWxsLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgY29uc3QgY2VsbFJvd1NwYW5DYWNoZSA9IFRhYmxlRGlzcGxheUhlbHBlcnMubWVtb2l6ZWRDZWxsUm93U3BhbihcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSb3dTcGFuOiBWYWxpZFJvd1NwYW5HZXR0ZXI8Qz4gPSAocm93SW5kZXgsIGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgY2VsbFJvd1NwYW5DYWNoZT8uZ2V0KGNvbHVtbik/Lltyb3dJbmRleF0gPz8gMTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0FueVJvd1NwYW5zID0gY2VsbFJvd1NwYW5DYWNoZVxuICAgICAgICAgICAgICA/IFsuLi5jZWxsUm93U3BhbkNhY2hlLnZhbHVlcygpXS5zb21lKHNwYW5zID0+XG4gICAgICAgICAgICAgICAgICBzcGFucy5zb21lKHNwYW4gPT4gc3BhbiA+IDEpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5LZXlzID0gcmVzb2x2ZWRDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4ga2V5KTtcblxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEobW9kZSA9ICdmdWxsJyk6IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD4ge1xuICAgICAgICAgICAgICBpZiAoIWNzdkV4cG9ydEFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQ1NWIGV4cG9ydCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcm93IHNwYW5uaW5nIG9yIGEgY3VzdG9tIHN1bW1hcnkgcm93IGlzIGVuYWJsZWQuJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICAgICAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogcy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KGRhdGFTZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdSZXR1cm5lZCBncm91cGVkIENTViBkYXRhIGZvciBub24tZ3JvdXBlZCB0YWJsZScsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgICAgICAgICBkYXRhLnB1c2goXG4gICAgICAgICAgICAgICAgZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSksXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgZGF0YVNldC5jdXJyZW50UGFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgIVRhYmxlU2VsZWN0aW9uSGVscGVycy5pc1Jvd1NlbGVjdGVkKHMsIHJlY29yZC5pZClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3c6IENzdlJvdyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgIG9yZGVyOiBoYXNBbnlSb3dTcGFucyA/IG51bGwgOiBzLnF1ZXJ5Lm9yZGVyLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFByZXZpb3VzUGFnZShzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VzKHMpLFxuICAgICAgICAgICAgICAgICAgbmV4dDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQocyksXG4gICAgICAgICAgICAgICAgICBzaG93Q29udHJvbHM6XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0U2hvd1BhZ2luYXRpb25Db250cm9scyhzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VSb3dTdGFydDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93U3RhcnQocyksXG4gICAgICAgICAgICAgICAgICBwYWdlUm93RW5kOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VSb3dFbmQocyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDpcbiAgICAgICAgICAgICAgICAgIFRhYmxlU2VhcmNoSGVscGVycy5nZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShzLCAnbm9uZScpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucy5tYXAoY29sdW1uID0+XG4gICAgICAgICAgICAgICAgICBoYXNBbnlSb3dTcGFucyA/IHsgLi4uY29sdW1uLCBvcmRlcmFibGU6IGZhbHNlIH0gOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhbGxDb2x1bW5zOiBUYWJsZUNvbHVtbkhlbHBlcnMuZ2V0QWxsQ29sdW1ucyhcbiAgICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBUYWJsZURpc3BsYXlIZWxwZXJzLmdldFplcm9TdGF0ZU1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zQXJlSGlkZWFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUhpZGVhYmxlLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogb3B0aW9ucz8uY29sdW1uc0FyZVJlb3JkZXJhYmxlID8/IHRydWUsXG4gICAgICAgICAgICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgICAgICAgICAgIGN1c3RvbVN1bW1hcnlSb3c6ICEhb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdyxcbiAgICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBoaWRlUGFnZVNpemVTZWxlY3RvcjogISFvcHRpb25zPy5oaWRlUGFnZVNpemVTZWxlY3RvcixcbiAgICAgICAgICAgICAgICBjZWxsUm93U3BhbixcbiAgICAgICAgICAgICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpID0gcmVzb2x2ZWRDb2x1bW5LZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPT09IHJlc29sdmVkQ29sdW1uS2V5cy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sS2V5ID0gcmVzb2x2ZWRDb2x1bW5LZXlzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5PblJpZ2h0ID0gY2VsbFJvd1NwYW4ocm93SW5kZXgsIHJpZ2h0Q29sS2V5KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzcGFuT25SaWdodCA+IDEgfHwgc3Bhbk9uUmlnaHQgPT09IDA7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4ucy5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgYWxsb3dTZWxlY3Rpb246IG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzQWxsU2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0FsbFNlbGVjdGVkKHMpLFxuICAgICAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDpcbiAgICAgICAgICAgICAgICAgIFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0N1cnJlbnRQYWdlU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3VudDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnNlbGVjdGVkQ291bnQocyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIC4uLnMucmVzdWx0LFxuICAgICAgICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICByb3dzQXNHcm91cDoge1xuICAgICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICBncm91cERhdGE6IHsga2V5OiAnJyB9IGFzIEcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjc3ZEYXRhLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzY2FuKChzdGFibGUsIG5ld1N0YXRlKSA9PiBzdGFibGVTdGF0ZShzdGFibGUsIG5ld1N0YXRlKSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBlZmZlY3QgfSkgPT4gZWZmZWN0ICE9PSBudWxsKSxcbiAgICAgICAgbWFwKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgYXMgRWZmZWN0KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBlZmZlY3RzLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSwgZWZmZWN0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3QgdGFibGVzIHVzZSByZW1vdGUgYmFja2VuZHMgdG8gZmV0Y2ggZGF0YSBhc3luY2hyb25vdXNseSwgYnV0IGFuXG4gICAqIGluLW1lbW9yeSBzb3VyY2UgaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gYHF1ZXJ5Lm9yZGVyYCBpcyBudWxsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgc2VhcmNoLCByb3dzIGFyZSBvcmRlcmVkXG4gICAgICogYnkgdGhpcyBjb2x1bW4uIElmIG9taXR0ZWQsIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBhbiBgb3JkZXJLZXlgIGlzIHVzZWRcbiAgICAgKiAoYXNjZW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZWZhdWx0U29ydD86IHsgY29sdW1uOiBDOyBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uIH07XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvL0ZvciBpbk1lbW9yeU1hbmFnZXJzIHRoYXQgZG8gbm90IHV0aWxpemUgc2VhcmNoQ29sdW1ucyxcbiAgICAgIC8vd2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIGZ1c2VPcHRpb25zXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgLy9QcmV2ZW50IHNlYXJjaGluZyBvbiBjb2x1bW5zIHRoYXQgYXJlIGluIGZ1c2Ugb3B0aW9ucyBidXQgbm90IHN1cHBvcnRlZCBieSBzZWFyY2guXG4gICAgICAgIGNvbnN0IG5vblNlYXJjaGFibGVDb2x1bW5zS2V5cyA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy5rZXlzXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5zZWFyY2hhYmxlID09IGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vcmRlcktleT8udG9TdHJpbmcoKSB8fCBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPVxuICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zICYmIG5vblNlYXJjaGFibGVDb2x1bW5zS2V5c1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAga2V5czogb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGsgPT4gIW5vblNlYXJjaGFibGVDb2x1bW5zS2V5cy5pbmNsdWRlcyhrLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogb3B0aW9ucz8uZnVzZU9wdGlvbnM7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIGZ1c2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnc2VhcmNoQ29sdW1uc0NoYW5nZScgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucydcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICBsZXQgb3JkZXJlZDogUltdO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcbiAgICAgICAgb3JkZXJlZCA9XG4gICAgICAgICAgaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyXG4gICAgICAgICAgICA/IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgICAgICAgIG1hdGNoZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG1hdGNoZXM7XG4gICAgICB9IGVsc2UgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBvcmRlckNvbHVtbixcbiAgICAgICAgICBxdWVyeS5vcmRlci5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm9yZGVyID09IG51bGwgJiYgZGVmYXVsdFNvcnRTcGVjKSB7XG4gICAgICAgIG9yZGVyZWQgPSBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9yZGVyZWQgPSBkYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID0gbmV3IE1hcChcbiAgICAgIFsuLi5jb2x1bW5zLmVudHJpZXMoKV0ubWFwKChbbmFtZSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvcmRlcmFibGU6ICEhbWV0YWRhdGEub3JkZXJLZXksXG4gICAgICAgICAgZmlsdGVyYWJsZTogbWV0YWRhdGEuZmlsdGVyYWJsZSxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBtZXRhZGF0YS5zZWFyY2hhYmxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBtaW5XaWR0aDogbWV0YWRhdGEubWluV2lkdGgsXG4gICAgICAgICAgZGF0YVR5cGU6IG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgICAgIGRlZmF1bHRQaW5uZWQ6IG1ldGFkYXRhLmRlZmF1bHRQaW5uZWQsXG4gICAgICAgICAgY2xpY2tQcmV2ZW50RGVmYXVsdDogbWV0YWRhdGEuY2xpY2tQcmV2ZW50RGVmYXVsdCxcbiAgICAgICAgICBjbGlja1N0b3BQcm9wYWdhdGlvbjogbWV0YWRhdGEuY2xpY2tTdG9wUHJvcGFnYXRpb24sXG4gICAgICAgICAgZGlzcGxheU5hbWU6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgICAvLyBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgIC8vIHRhYmxlIGhlYWRlciBzaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgZnJvbSB0aGUgc3RhcnQuXG4gICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0ICYmICFvcHRpb25zPy5pbml0aWFsU3RhdGU/LnF1ZXJ5Py5vcmRlcikge1xuICAgICAgY29uc3Qgb3JkZXI6IFF1ZXJ5PEMsIEY+WydvcmRlciddID0gb3B0aW9ucy5kZWZhdWx0U29ydDtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIC4uLm9wdGlvbnMuaW5pdGlhbFN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLmluaXRpYWxTdGF0ZT8ucXVlcnksXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICB9IGFzIERlZXBQYXJ0aWFsPFF1ZXJ5PEMsIEY+PixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBrZWVwcyB0aGUgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZXMgYXMgc3RhYmxlIGFzIHBvc3NpYmxlLCB3aGljaFxuICogaGVscHMgQW5ndWxhciByZWR1Y2UgdW5uZWNlc3NhcnkgcmUtcmVuZGVycy4gRm9yIG5vdywgc2ltcGxlIGlzRXF1YWwoKVxuICogY2hlY2tzIGF0IHRoZSBzdGF0ZSdzIHRvcC1sZXZlbCBrZXlzIGFyZSBzdWZmaWNpZW50IHRvIGRyYW1hdGljYWxseSBzcGVlZCB1cFxuICogcmVuZGVyaW5nLCBidXQgaWYgb3RoZXIgcGVyZm9ybWFuY2UgaXNzdWVzIGFyaXNlLCB3ZSBjb3VsZCBpbXBsZW1lbnQgbW9yZVxuICogZ3JhbnVsYXIgY2hlY2tzL3N1cmdpY2FsIHVwZGF0ZXMgYXMgbmVlZGVkICh0aGUgc3RhdGUucmVzdWx0IGJlaW5nIHRoZSBtb3N0XG4gKiBsaWtlbHkgY2FuZGlkYXRlLCBzaW5jZSBtYW55IHR5cGVzIG9mIHN0YXRlIHVwZGF0ZXMgYWZmZWN0IHBhcnRzIG9mIHRoZVxuICogcmVzdWx0IHJvd3MpLlxuICovXG5mdW5jdGlvbiBzdGFibGVTdGF0ZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHRhcmdldDogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbik6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucXVlcnksIHNvdXJjZS5xdWVyeSkpIHtcbiAgICB0YXJnZXQucXVlcnkgPSBzb3VyY2UucXVlcnk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5sb2FkLCBzb3VyY2UubG9hZCkpIHtcbiAgICB0YXJnZXQubG9hZCA9IHNvdXJjZS5sb2FkO1xuICB9XG5cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RGF0YSwgc291cmNlLnJlc3VsdC5jc3ZEYXRhKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RGF0YSA9IHNvdXJjZS5yZXN1bHQuY3N2RGF0YTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSwgc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lID0gc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZTtcbiAgfVxuICBpZiAoXG4gICAgIWlzRXF1YWwoXG4gICAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgIHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgIClcbiAgKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPSBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdCwgc291cmNlLnJlc3VsdCkpIHtcbiAgICB0YXJnZXQucmVzdWx0ID0gc291cmNlLnJlc3VsdDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmRpc3BsYXksIHNvdXJjZS5kaXNwbGF5KSkge1xuICAgIHRhcmdldC5kaXNwbGF5ID0gc291cmNlLmRpc3BsYXk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5zZWxlY3Rpb24sIHNvdXJjZS5zZWxlY3Rpb24pKSB7XG4gICAgdGFyZ2V0LnNlbGVjdGlvbiA9IHNvdXJjZS5zZWxlY3Rpb247XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZnJlc2hSZXN1bHRXaXRoPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIG1vc3RSZWNlbnRBY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICB5aWVsZCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZDoge1xuICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBlZmZlY3Q6IG51bGwsXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc291cmNlKHN0YXRlLnF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKTtcbiAgICBpZiAoVGFibGVQYWdpbmF0aW9uSGVscGVycy5pc1BhZ2VPdXRPZkJvdW5kcyhzdGF0ZSwgcmVzdWx0KSkge1xuICAgICAgc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlID0gMDtcbiAgICB9XG4gICAgeWllbGQge1xuICAgICAgc3RhdGU6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgfSxcbiAgICAgIGVmZmVjdDogbnVsbCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgeWllbGQge1xuICAgICAgc3RhdGU6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlZmZlY3Q6IG51bGwsXG4gICAgfTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiogcmVkdWNlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgYWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIHNvdXJjZTogUml2VGFibGUuU291cmNlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBkZWZhdWx0Q29sdW1uU3RhdGU6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10sXG4pOiBBc3luY0dlbmVyYXRvcjx7XG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz47XG4gIGVmZmVjdDogUml2VGFibGUuRWZmZWN0IHwgbnVsbDtcbn0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKHN0YXRlLCBzb3VyY2UsIGFjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcmRlckNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBvcmRlcjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcmRlckNvbHVtblRvZ2dsZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIFRhYmxlT3JkZXJIZWxwZXJzLnRvZ2dsZUNvbHVtbk9yZGVyKHN0YXRlLCBhY3Rpb24uY29sdW1uKSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VhcmNoQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VhcmNoQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBzZWFyY2hDb2x1bW5zOiBuZXcgTWFwKFtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucyxcbiAgICAgICAgICAgICAgLi4uYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdpbmF0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dyb3VwaW5nQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UHJldmlvdXNQYWdlKHN0YXRlKSA/PyAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduZXh0UGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTpcbiAgICAgICAgICAgICAgICBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldE5leHRQYWdlKHN0YXRlKSA/P1xuICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBhY3Rpb24ucGFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNpemVDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlU2l6ZTogYWN0aW9uLnNpemUsXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbHRlcnNDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZmlsdGVyczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsdGVyQWRkJzpcbiAgICAgIC8vIFBhcmVudCBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIHN1YnNjcmliaW5nIGFuZCBhZGRpbmcgdGhlIGZpbHRlclxuICAgICAgeWllbGQgeyBzdGF0ZTogeyAuLi5zdGF0ZSB9LCBlZmZlY3Q6IG51bGwgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblNldHRpbmdzQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICAgICAgY29sdW1uU2V0dGluZ3M6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGRvIG5vdCBvdXRwdXQgY2hhbmdlcyB3aGVuIHRyaWdnZXJlZCBmcm9tIHRoZSBvdXRzaWRlIHdvcmxkXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5QaW5DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtblBpbihcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24ucGlubmVkLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5jaGFuZ2VDb2x1bW5zRnJlZXplU3RhdGUoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5pbmRleCxcbiAgICAgICAgICBhY3Rpb24uZnJlZXplLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbk9yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5jaGFuZ2VDb2x1bW5PcmRlcihcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgYWN0aW9uLm5ld0luZGV4LFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbk1vdmVUb0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMubW92ZUNvbHVtblRvKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wb3NpdGlvbixcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5FbmFibGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5jaGFuZ2VDb2x1bW5FbmFibGVkKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5lbmFibGVkLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmVuYWJsZUFsbENvbHVtbnMoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5lbmFibGVkLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbldpZHRoQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5jaGFuZ2VDb2x1bW5XaWR0aChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24ucHJlZmVycmVkV2lkdGgsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5yZXNldFRvRGVmYXVsdENvbHVtbnMoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIH0sXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb3dTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuc2V0Um93U2VsZWN0ZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgIGFjdGlvbi5zZWxlY3RlZCxcbiAgICAgICAgICBhY3Rpb24uY29udGlndW91cyxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlUGFnZVNlbGVjdGVkKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2FsbFNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVBbGxTZWxlY3RlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3Rpb25DbGVhcic6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuY2xlYXJTZWxlY3Rpb24oc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBTZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZUdyb3VwU2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5wYXlsb2FkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dyb3Vwc1BlclBhZ2VDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGdyb3Vwc1BlclBhZ2U6IGFjdGlvbi5ncm91cHNQZXJQYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb3VudFBlckdyb3VwQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICBjb3VudFBlckdyb3VwOiBhY3Rpb24uY291bnRQZXJHcm91cCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlld01vcmVLZXlDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIHZpZXdNb3JlS2V5OiBhY3Rpb24udmlld01vcmVLZXksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICBUYWJsZVNlYXJjaEhlbHBlcnMudG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyhzdGF0ZSksXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG4iXX0=
|
|
1080
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQXltRHhCO0FBem1ERCxXQUFpQixRQUFRO0lBMENWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENB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QVEsRUFBRTt3QkFDUixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDdkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO3FCQUNoQztpQkFDRjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssd0JBQXdCO1lBQzNCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUN0QixrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFDaEQsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssbUJBQW1CO1lBQ3RCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxzQkFBc0I7WUFDekIsTUFBTTtnQkFDSixLQUFLLEVBQUUsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07S0FDVDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcmFtcywgUXVlcnlQYXJhbXNIYW5kbGluZyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgRnVzZSwgeyBJRnVzZU9wdGlvbnMgfSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBDb25uZWN0YWJsZSxcbiAgY29ubmVjdGFibGUsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZVNjYW4sXG4gIE9ic2VydmFibGUsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNjYW4sXG4gIHNoYXJlLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndXRpbGl0eS10eXBlcyc7XG5pbXBvcnQgeyB0b1NlbnRlbmNlQ2FzZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zZW50ZW5jZS1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVDb2xsYXBzZUhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sbGFwc2UtaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sdW1uLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVEaXNwbGF5SGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9kaXNwbGF5LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVOZXN0aW5nSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9uZXN0aW5nLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVPcmRlckhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvb3JkZXItaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRpb25IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3BhZ2luYXRpb24taGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVJlc3VsdEhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvcmVzdWx0LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVTZWFyY2hIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VsZWN0aW9uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9zZWxlY3Rpb24taGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2VGFibGUge1xuICBleHBvcnQgdHlwZSBSb3cgPSB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBGaWx0ZXJzID0gYW55O1xuICBleHBvcnQgdHlwZSBHcm91cCA9IHsga2V5OiBzdHJpbmcgfCBudW1iZXIgfTtcblxuICAvKipcbiAgICogUml2VGFibGUncyBzdGF0ZSBhbmQgdXNlciBhY3Rpb25zIGFyZSBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBjaHVua3M6XG4gICAqXG4gICAqIC0gUXVlcnkgKGZvciB0aGluZ3MgbGlrZSBmaWx0ZXJzLCBwYWdpbmF0aW9uLCBzZWFyY2gsIGV0Yy4pXG4gICAqIC0gTG9hZGluZyAoZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBpcyBsb2FkaW5nIHJvdyBkYXRhKVxuICAgKiAtIFJlc3VsdCAoZm9yIHRoZSByb3cgZGF0YSBpdHNlbGYpXG4gICAqIC0gRGlzcGxheSAoZm9yIHRoaW5ncyBsaWtlIGNvbHVtbiBjb25maWd1cmF0aW9uKVxuICAgKiAtIFNlbGVjdGlvbiAoZm9yIHRyYWNraW5nIHRoZSB1c2VyJ3Mgcm93IHNlbGVjdGlvbnMpXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgZGF0YSBmbG93IGlzIHVuaWRpcmVjdGlvbmFsOiB0aGUgVUkgaXNzdWVzIGFjdGlvbnMsIHdoaWNoXG4gICAqIGFmZmVjdCB0aGUgc3RhdGUsIGFuZCB0aGUgc3RhdGUgZ2V0cyBwYXNzZWQgYmFjayB0byB0aGUgVUkgZm9yIGRpc3BsYXkuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICpcbiAgICogRnJvbSB0aGUgY29yZSBzdGF0ZSwgY2FsY3VsYXRlZCBzdGF0ZSBpcyBkZXJpdmVkIGFuZCBhZGRlZCB0byB0aGUgY29yZVxuICAgKiBzdGF0ZSAoZS5nLiwgZnJvbSB0aGUgcmF3IHNlbGVjdGlvbiBzdGF0ZSB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90XG4gICAqIGFsbCB0aGUgcm93cyBvbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlIGFyZSBzZWxlY3RlZCwgZXRjLikuXG4gICAqL1xuXG4gIC8vLy8vLy8vLy8vXG4gIC8vIFF1ZXJ5IC8vXG4gIC8vLy8vLy8vLy8vXG5cbiAgLy8gUXVlcnkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBPcmRlckRpcmVjdGlvbiA9ICdhc2MnIHwgJ2Rlc2MnO1xuICBleHBvcnQgY29uc3QgcGFnZVNpemVzID0gWzI1LCA1MCwgMTAwLCAyNTBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBRdWVyeTxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPSB7XG4gICAgb3JkZXI6IHtcbiAgICAgIGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb247XG4gICAgICBjb2x1bW46IEM7XG4gICAgfSB8IG51bGw7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgc2VhcmNoQ29sdW1uczogTWFwPEMsIGJvb2xlYW4+O1xuICAgIGZpbHRlcnM6IEYgfCBudWxsO1xuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIHBhZ2U6IG51bWJlcjtcbiAgICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgfTtcbiAgICBncm91cGluZzoge1xuICAgICAgdmlld01vcmVLZXk6IHN0cmluZyB8IG51bGw7XG4gICAgICBncm91cHNQZXJQYWdlOiBudW1iZXI7XG4gICAgICBjb3VudFBlckdyb3VwOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvLyBRdWVyeSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgUXVlcnlBY3Rpb248QyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWQnIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ29yZGVyQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUXVlcnk8QywgRj5bJ29yZGVyJ107XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JztcbiAgICAgIH1cbiAgICB8IHsgdHlwZTogJ29yZGVyQ29sdW1uVG9nZ2xlJzsgY29sdW1uOiBDIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2gnXSB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3NlYXJjaENvbHVtbnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJzQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2ZpbHRlcnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJBZGQnOyBjb2x1bW5LZXk6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICdwYWdpbmF0aW9uQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3BhZ2luYXRpb24nXSB9XG4gICAgfCB7IHR5cGU6ICdncm91cGluZ0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+Wydncm91cGluZyddIH1cbiAgICB8IHsgdHlwZTogJ25leHRQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwYWdlQ2hhbmdlJzsgcGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VTaXplQ2hhbmdlJzsgc2l6ZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2dyb3Vwc1BlclBhZ2VDaGFuZ2UnOyBncm91cHNQZXJQYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAnY291bnRQZXJHcm91cENoYW5nZSc7IGNvdW50UGVyR3JvdXA6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICd2aWV3TW9yZUtleUNoYW5nZSc7IHZpZXdNb3JlS2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucycgfTtcblxuICAvLy8vLy8vLy8vXG4gIC8vIExvYWQgLy9cbiAgLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIExvYWQgPSB7XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBlcnJvcjogdW5rbm93biB8IG51bGw7XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vXG4gIC8vIFJlc3VsdCAvL1xuICAvLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlRGF0YTogUltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdWJHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0gUmVzdWx0PFI+ICYge1xuICAgIC8qKlxuICAgICAqIEFueSBvdGhlciByZWxldmFudCBncm91cCBkYXRhLCB1c2VkIGZvciB0aGUgc3ViaGVhZGVyXG4gICAgICovXG4gICAgZ3JvdXBEYXRhOiBHO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEdyb3VwUmVzdWx0PFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBzcGxpdCBpbnRvIGdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwUmVzdWx0czogU3ViR3JvdXBSZXN1bHQ8UiwgRz5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGdyb3VwcyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbEdyb3VwQ291bnQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgLypcbiAgICBOZXN0ZWRSZXN1bHRcbiAgICAgIE5lc3RlZEhlYWRlclJvd1xuICAgICAgICBOZXN0ZWRSb3cgLSB3aXRoIHN1YnJvd3NcbiAgICAgICAgICBOZXN0ZWRSb3cgLSB3aXRoIG5vIHN1YnJvd3NcbiAgKi9cbiAgZXhwb3J0IHR5cGUgTmVzdGVkSGVhZGVyUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8vIFRoZSByb3dzIHRoYXQgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIHRoZSB0b2dnbGUgb24gdGhpcyBoZWFkZXIgaXMgdG9nZ2xlZC5cbiAgICBzdWJSb3dzOiBOZXN0ZWRSb3c8Uj5bXTtcblxuICAgIC8vIFRoZSB0ZXh0IHRvIHNob3cgbmV4dCB0byB0aGUgdG9nZ2xlYWJsZSBjaGV2cm9uLCBvciBudWxsIGlmIHdlIGRvbid0IHNob3cgdGhlIGhlYWRlclxuICAgIGhlYWRlclRleHQ6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE5lc3RlZFJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvLyBUaGUgcm93cyB0aGF0IHNob3VsZCBiZSBoaWRkZW4gd2hlbiB0aGUgdG9nZ2xlIG9uIHRoaXMgcm93IGlzIHRvZ2dsZWQuXG4gICAgc3ViUm93cz86IE5lc3RlZFJvdzxSPltdO1xuXG4gICAgLy8gVGhlIHJlbGV2YW50IGRhdGEgdXNlZCB0byBkaXNwbGF5IHRoaXMgcm93LlxuICAgIGRhdGE6IFI7XG4gIH07XG4gIC8qXG4gICAgTmVzdGVkIGhlYWRlciByb3dzIGFyZSB0b2dnbGVhYmxlIGhlYWRlcnMgZm9yIGdyb3VwcyBvZiByb3dzLlxuICAqL1xuICBleHBvcnQgdHlwZSBOZXN0ZWRSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBuZXN0ZWQgaW50byBcImhlYWRlcnMgd2l0aCBzdWJyb3dzXCIuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICpcbiAgICAgKiBPbmx5IGNvdW50cyByb3dzIGF0IHRoZSBib3R0b20gbGV2ZWwgb2YgbmVzdGluZy5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcblxuICAgIC8qXG4gICAgICBUaGlzIHR5cGUgYWxzbyBzdXBwb3J0cyBuZXN0ZWQgcm93cyB3aXRob3V0IGhlYWRlciByb3dzLCBzbyB0aGlzIHByb3BlcnR5XG4gICAgICBoZWxwcyB1cyB0ZWxsIHdoZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVycy5cbiAgICAqL1xuICAgIGhhc0hlYWRlcnM6IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU291cmNlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IChcbiAgICBxdWVyeTogUXVlcnk8QywgRj4sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogQWN0aW9uPFIsIEMsIEYsIEc+LFxuICApID0+IFByb21pc2U8UmVzdWx0PFI+IHwgR3JvdXBSZXN1bHQ8UiwgRz4gfCBOZXN0ZWRSZXN1bHQ8Uj4+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gRGlzcGxheSAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgLy8gRGlzcGxheSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtblNldHRpbmdzPEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGtleTogQztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBEaXNwbGF5PEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGNvbHVtblNldHRpbmdzOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIGNlbGxSb3dTcGFuOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBudW1iZXI7XG4gIH07XG5cbiAgLy8gRGlzcGxheSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgRGlzcGxheUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uPiA9XG4gICAgfCB7IHR5cGU6ICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc7IHBheWxvYWQ6IERpc3BsYXk8Qz5bJ2NvbHVtblNldHRpbmdzJ10gfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZSc7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGZyZWV6ZTogYm9vbGVhbjtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnIHwgJ29wdGlvbnNNZW51JyB8ICdmcmVlemVEaXZpZGVyJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJztcbiAgICAgICAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICAgICAgICBuZXdJbmRleDogbnVtYmVyO1xuICAgICAgICBzb3VyY2U/OiAndGFibGVEcmFnJyB8ICdtZW51RHJhZyc7XG4gICAgICAgIGNvbHVtbj86IEM7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2RyYWdEcm9wJyB8ICdleWVJY29uJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uV2lkdGhDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyZXNldFRvRGVmYXVsdENvbHVtbnMnO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy9cbiAgLy8gU2VsZWN0aW9uIC8vXG4gIC8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbjxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogUlsnaWQnXSB8IG51bGw7XG4gIH0gJiAoXG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJztcbiAgICAgICAgaW5jbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnO1xuICAgICAgICBleGNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICApO1xuXG4gIC8vIFNlbGVjdGlvbiBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQWN0aW9uPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBTZWxlY3Rpb248Uj47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdncm91cFNlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFJvd0dyb3VwPFIsIEc+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgICBpZDogUlsnaWQnXTtcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICAgIGNvbnRpZ3VvdXM6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdwYWdlU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnYWxsU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2xlYXInO1xuICAgICAgfTtcblxuICBleHBvcnQgdHlwZSBDb2xsYXBzZVN0YXRlPFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGNvbGxhcHNlZFJvd3M6IFNldDxSWydpZCddPjtcbiAgICBjb2xsYXBzZWRIZWFkZXJzOiBTZXQ8c3RyaW5nPjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBDb2xsYXBzZUFjdGlvbjxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVSb3dDb2xsYXBzZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlSGVhZGVyQ29sbGFwc2UnO1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIENvbWJpbmVkIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBxdWVyeTogUXVlcnk8QywgRj47XG4gICAgbG9hZDogTG9hZDtcbiAgICByZXN1bHQ6IFJlc3VsdDxSPiB8IEdyb3VwUmVzdWx0PFIsIEc+IHwgTmVzdGVkUmVzdWx0PFI+O1xuICAgIGRpc3BsYXk6IERpc3BsYXk8Qz47XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb248Uj47XG4gICAgY29sbGFwc2VTdGF0ZTogQ29sbGFwc2VTdGF0ZTxSPjtcbiAgfTtcblxuICAvLyBDb21iaW5lZCBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9XG4gICAgfCBRdWVyeUFjdGlvbjxDLCBGPlxuICAgIHwgRGlzcGxheUFjdGlvbjxDPlxuICAgIHwgU2VsZWN0aW9uQWN0aW9uPFIsIEc+XG4gICAgfCBDb2xsYXBzZUFjdGlvbjxSPjtcblxuICBleHBvcnQgdHlwZSBFZmZlY3QgPSAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJztcblxuICAvLyBGdWxsIHN0YXRlIChjb3JlIHN0YXRlIHBsdXMgcHVyZSBkZXJpdmF0aW9ucykgLy9cbiAgZXhwb3J0IGNvbnN0IENvbHVtbnNNYXhTaG93bjogbnVtYmVyID0gNTA7XG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJvd0xpbmsgPSBFeHRlcm5hbFJvd0xpbmsgfCBJbnRlcm5hbFJvd0xpbms7XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJvd0dyb3VwPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93cz86IEZ1bGxOZXN0ZWRSb3c8Uj5bXTtcbiAgICBkYXRhOiBSO1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxOZXN0ZWRIZWFkZXJSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICBzdWJSb3dzOiBGdWxsTmVzdGVkUm93PFI+W107XG4gICAgaGVhZGVyVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW4+ID0gQ29sdW1uU2V0dGluZ3M8Qz4gJlxuICAgIENvbHVtbk1ldGFkYXRhICYge1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIGxlZnQ6IG51bWJlciB8IG51bGw7XG4gICAgICBhbGlnbm1lbnQ6IENvbHVtbkFsaWdubWVudDtcbiAgICB9O1xuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQ29uZmlndXJhdGlvbiA9IGJvb2xlYW4gfCAnaW5kaXZpZHVhbCc7XG5cbiAgZXhwb3J0IHR5cGUgUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGV4cG9ydCB0eXBlIFZhbGlkUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXI7XG5cbiAgZXhwb3J0IHR5cGUgQ3N2Q2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3c6IFIsXG4gICAgY29sdW1uOiBGdWxsQ29sdW1uPEM+LFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2R3JvdXBDZWxsRm9ybWF0dGVyPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSAoXG4gICAgcm93OiBSLFxuICAgIGdyb3VwOiBHLFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2Um93ID0gc3RyaW5nW107XG4gIGV4cG9ydCB0eXBlIENzdiA9IENzdlJvd1tdO1xuICBleHBvcnQgdHlwZSBDc3ZNb2RlID0gJ2Z1bGwnIHwgJ3NlbGVjdGlvbic7XG4gIGV4cG9ydCB0eXBlIENzdk91dHB1dCA9XG4gICAgfCB7IGxvYWRpbmc6IHRydWU7IGRhdGE6IG51bGwgfVxuICAgIHwgeyBsb2FkaW5nOiBmYWxzZTsgZGF0YTogQ3N2IH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uTmFtZU1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBDIHwgc3RyaW5nPjtcblxuICBleHBvcnQgdHlwZSBTZWFyY2hhYmxlQ29sdW1uTWFwPEMgZXh0ZW5kcyBDb2x1bW4+ID0gTWFwPEMsIGJvb2xlYW4+O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBDb3JlU3RhdGU8UiwgQywgRiwgRz4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VzOiBudW1iZXJbXTtcbiAgICAgICAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZUNvdW50OiBudW1iZXI7XG4gICAgICAgIHNob3dDb250cm9sczogYm9vbGVhbjtcbiAgICAgICAgcGFnZVJvd1N0YXJ0OiBudW1iZXI7XG4gICAgICAgIHBhZ2VSb3dFbmQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICAgIHJlc3VsdDpcbiAgICAgIHwge1xuICAgICAgICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICAgICAgICByb3dzQXNHcm91cDogUm93R3JvdXA8UiwgRz47XG4gICAgICAgICAgaXNHcm91cGVkOiBmYWxzZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgbmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBhbGxDb2x1bW5zOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogYm9vbGVhbjtcbiAgICAgIHJvd3NBcmVHcmF5ZWQ6IGJvb2xlYW47XG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiBib29sZWFuO1xuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGVuYWJsZWRDb3VudDogbnVtYmVyO1xuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6IGJvb2xlYW47XG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBib29sZWFuO1xuICAgIH07XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBhbGxvd1NlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUiwgZ3JvdXA/OiBHKSA9PiBSb3dMaW5rO1xuICAgIGNzdkNlbGxGb3JtYXR0ZXI/OiBDc3ZDZWxsRm9ybWF0dGVyPFIsIEM+O1xuICAgIGNzdkdyb3VwQ2VsbEZvcm1hdHRlcj86IENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSLCBHPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBTZWxlY3Rpb25Db25maWd1cmF0aW9uO1xuICAgIGNvbHVtbnNBcmVGcmVlemFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVIaWRlYWJsZT86IGJvb2xlYW47XG4gICAgY29sdW1uc0FyZVJlb3JkZXJhYmxlPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0Q29sdW1uU3RhdGU/OiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIHJvd3NBcmVHcmF5ZWQ/OiBib29sZWFuO1xuICAgIGN1c3RvbVN1bW1hcnlSb3c/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFwiUmVzdWx0cyBwZXIgcGFnZVwiIGxhYmVsIGFuZCBwYWdlLXNpemUgZHJvcGRvd24gYXJlXG4gICAgICogaGlkZGVuLiBQYWdlIG5hdmlnYXRpb24gYXJyb3dzIGFuZCBwYWdlIG51bWJlcnMgcmVtYWluIHZpc2libGUuXG4gICAgICovXG4gICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhcmVudC1jb250cm9sbGVkIHJvdyBzcGFubmluZy5cbiAgICAgKiBSZXR1cm4gMCB0byBzdXBwcmVzcyB0aGUgY2VsbCwgPj0xIGZvciBhIHJlYWwgcm93c3Bhbi5cbiAgICAgKiBJZiBvbWl0dGVkIG9yIGludmFsaWQsIGRlZmF1bHRzIHRvIDEuXG4gICAgICovXG4gICAgZ2V0Um93U3BhbkZvckNlbGw/OiBSb3dTcGFuR2V0dGVyPEM+O1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IE1hbmFnZXI8UiwgQywgRiwgRz4ge1xuICAgIC8vIFNldCB1cCB0aGUgaW5pdGlhbCB0YWJsZSBzdGF0ZS5cblxuICAgIGNvbnN0IHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz4gPSBuZXcgTWFwPEMsIGJvb2xlYW4+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5zZWFyY2hhYmxlID8/IHRydWUsXG4gICAgICBdKSxcbiAgICApO1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmtleXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IHNlYXJjaGFibGVDb2x1bW5NYXAuZ2V0KGtleSkpXG4gICAgICAgICAgICAubWFwKGtleSA9PiBba2V5LCB0cnVlXSksXG4gICAgICAgICksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICB2aWV3TW9yZUtleTogbnVsbCxcbiAgICAgICAgICBncm91cHNQZXJQYWdlOiA1LFxuICAgICAgICAgIGNvdW50UGVyR3JvdXA6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHsgbG9hZGluZzogZmFsc2UsIGVycm9yOiBudWxsIH0sXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBbXSxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IFtdLFxuICAgICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICB9LFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+ID0gbmV3IE1hcDxDLCBDIHwgc3RyaW5nPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgdG9TZW50ZW5jZUNhc2UobWV0YWRhdGEuZGlzcGxheU5hbWUgPz8ga2V5KSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICBjb25zdCBkZWZhdWx0Q29sdW1uU3RhdGUgPVxuICAgICAgb3B0aW9ucz8uZGVmYXVsdENvbHVtblN0YXRlID8/XG4gICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncztcblxuICAgIC8vIFdpcmUgdXAgcmVkdWNlZCBzdGF0ZSBmcm9tIGFjdGlvbnMgYW5kIGluaXRpYWwgc3RhdGUuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8e1xuICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICB9PiA9IGFjdGlvbnMucGlwZShcbiAgICAgIG1lcmdlU2NhbjxcbiAgICAgICAgQWN0aW9uPFIsIEMsIEYsIEc+LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdCB8IG51bGw7XG4gICAgICAgIH1cbiAgICAgID4oXG4gICAgICAgICh7IHN0YXRlIH0sIGFjdGlvbikgPT5cbiAgICAgICAgICBmcm9tKFxuICAgICAgICAgICAgcmVkdWNlKFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgeyBzdGF0ZTogZGVmYXVsdGVkSW5pdGlhbFN0YXRlLCBlZmZlY3Q6IG51bGwgfSxcbiAgICAgICAgMSxcbiAgICAgICksXG4gICAgICBzaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25FcnJvcjogZmFsc2UsXG4gICAgICAgIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsXG4gICAgICAgIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGNzdkV4cG9ydEFsbG93ZWQgPSAhKFxuICAgICAgb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwgfHwgb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvd1xuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcCgoeyBzdGF0ZTogcyB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+ID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZENvbHVtbnMgPSBUYWJsZUNvbHVtbkhlbHBlcnMucmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAhIW9wdGlvbnM/LmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQocy5yZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0KHtcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgc3RhdGVSZXN1bHQ6IHMucmVzdWx0LFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KHMucmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVGdWxsU3RhdGVGcm9tUmVndWxhclJlc3VsdCh7XG4gICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgIHN0YXRlUmVzdWx0OiBzLnJlc3VsdCxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzY2FuKChzdGFibGUsIG5ld1N0YXRlKSA9PiBzdGFibGVTdGF0ZShzdGFibGUsIG5ld1N0YXRlKSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBlZmZlY3QgfSkgPT4gZWZmZWN0ICE9PSBudWxsKSxcbiAgICAgICAgbWFwKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgYXMgRWZmZWN0KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBlZmZlY3RzLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSwgZWZmZWN0cyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihwcm9wczoge1xuICAgIHM6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICBzdGF0ZVJlc3VsdDogR3JvdXBSZXN1bHQ8UiwgRz47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gcm93IHNwYW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3cpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHN1bW1hcnkgcm93cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ3JvdXBlZCB0YWJsZXMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdID0gc3RhdGVSZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgcm93czogZ3JvdXAuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rXG4gICAgICAgICAgPyBvcHRpb25zLnJvd0xpbmsocm93LCBncm91cC5ncm91cERhdGEpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0dyb3VwU2VsZWN0ZWQocywgZ3JvdXApLFxuICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBncm91cC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICB9KSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlOiBDc3ZNb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGNvbnN0IGdyb3VwQ2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkdyb3VwQ2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBub24tZ3JvdXBlZCBDU1YgZGF0YSBmb3IgZ3JvdXBlZCB0YWJsZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlcikge1xuICAgICAgICBkYXRhWzBdLnB1c2goJycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvd0l0ZW0gb2YgZGF0YVNldC5ncm91cFJlc3VsdHMuZmxhdE1hcChncm91cHMgPT5cbiAgICAgICAgZ3JvdXBzLmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGdyb3VwOiBncm91cHMuZ3JvdXBEYXRhLFxuICAgICAgICB9KSksXG4gICAgICApKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHJvd0l0ZW0ucm93O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cENlbGxGb3JtYXR0ZXIgJiYgcm93SXRlbS5ncm91cCkge1xuICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGdyb3VwQ2VsbEZvcm1hdHRlcihyZWNvcmQsIHJvd0l0ZW0uZ3JvdXApKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucyxcbiAgICAgIHF1ZXJ5OiBkZXJpdmVkRnVsbFN0YXRlUXVlcnkocyksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheSh7XG4gICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgcGx1cmFsRW50aXR5TmFtZTogcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgcmVzb2x2ZWRDb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KSxcbiAgICAgIHNlbGVjdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbihzLCBvcHRpb25zKSxcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAuLi5zdGF0ZVJlc3VsdCxcbiAgICAgICAgaXNHcm91cGVkOiB0cnVlLFxuICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnLFxuICAgICAgICByb3dHcm91cHMsXG4gICAgICAgIHJvd3M6IHJvd0dyb3Vwcy5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLnJvd3MpLFxuICAgICAgICBjc3ZEYXRhLFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBOZXN0ZWRSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSByb3cgc3BhbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlcyB3aXRoIG5lc3RlZCBkYXRhLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gc3VtbWFyeSByb3dzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0YWJsZXMgd2l0aCBuZXN0ZWQgZGF0YS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdID0gW107XG4gICAgZm9yIChjb25zdCBuZXN0ZWRSb3cgb2Ygc3RhdGVSZXN1bHQuY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzKSB7XG4gICAgICBjb25zdCBuZXdGdWxsUm93OiBGdWxsTmVzdGVkSGVhZGVyUm93PFI+ID1cbiAgICAgICAgVGFibGVOZXN0aW5nSGVscGVycy5jb252ZXJ0VG9GdWxsTmVzdGVkSGVhZGVyUm93KFxuICAgICAgICAgIG5lc3RlZFJvdyxcbiAgICAgICAgICBzLFxuICAgICAgICAgIG9wdGlvbnM/LnJvd0xpbmssXG4gICAgICAgICk7XG4gICAgICBmdWxsTmVzdGVkSGVhZGVyUm93cy5wdXNoKG5ld0Z1bGxSb3cpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGlmICghY3N2RXhwb3J0QWxsb3dlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0NTViBleHBvcnQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJvdyBzcGFubmluZyBvciBhIGN1c3RvbSBzdW1tYXJ5IHJvdyBpcyBlbmFibGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0Jyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBhd2FpdCBzb3VyY2UoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogc3RhdGVSZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzUmVndWxhclJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1JldHVybmVkIG5vbi1uZXN0ZWQgQ1NWIGRhdGEgZm9yIGEgbmVzdGVkIHdpdGggaGVhZGVyIHJlc3VsdCB0YWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdSZXR1cm5lZCBncm91cGVkIENTViBkYXRhIGZvciBhIG5lc3RlZCB3aXRoIGhlYWRlciByZXN1bHQgdGFibGUnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgY29uc3QgYWxsUm93czogUltdID0gVGFibGVSZXN1bHRIZWxwZXJzLmdldEFsbFJvd3NGcm9tUmVzdWx0KGRhdGFTZXQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRSb3cgb2YgYWxsUm93cykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgY3VycmVudFJvdy5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKGN1cnJlbnRSb3csIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzKSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KHtcbiAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lOiBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICByb3dzOiBbXSxcbiAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJyxcbiAgICAgICAgbmVzdGVkSGVhZGVyUm93czogZnVsbE5lc3RlZEhlYWRlclJvd3MsXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbVJlZ3VsYXJSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHJvd3MgPSBzdGF0ZVJlc3VsdC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgLi4ucm93LFxuICAgICAgcm93TGluazogb3B0aW9ucz8ucm93TGluayA/IG9wdGlvbnMucm93TGluayhyb3cpIDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNlbGxSb3dTcGFuQ2FjaGUgPSBUYWJsZURpc3BsYXlIZWxwZXJzLm1lbW9pemVkQ2VsbFJvd1NwYW4oXG4gICAgICBzLFxuICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGNvbnN0IGNlbGxSb3dTcGFuOiBWYWxpZFJvd1NwYW5HZXR0ZXI8Qz4gPSAocm93SW5kZXgsIGNvbHVtbikgPT5cbiAgICAgIGNlbGxSb3dTcGFuQ2FjaGU/LmdldChjb2x1bW4pPy5bcm93SW5kZXhdID8/IDE7XG4gICAgY29uc3QgaGFzQW55Um93U3BhbnMgPSBjZWxsUm93U3BhbkNhY2hlXG4gICAgICA/IFsuLi5jZWxsUm93U3BhbkNhY2hlLnZhbHVlcygpXS5zb21lKHNwYW5zID0+XG4gICAgICAgICAgc3BhbnMuc29tZShzcGFuID0+IHNwYW4gPiAxKSxcbiAgICAgICAgKVxuICAgICAgOiBmYWxzZTtcblxuICAgIGNvbnN0IHJlc29sdmVkQ29sdW1uS2V5cyA9IHJlc29sdmVkQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGtleSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBpZiAoIWNzdkV4cG9ydEFsbG93ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdDU1YgZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiByb3cgc3Bhbm5pbmcgb3IgYSBjdXN0b20gc3VtbWFyeSByb3cgaXMgZW5hYmxlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIG5vbi1ncm91cGVkIHRhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmV0dXJuZWQgbmVzdGVkIENTViBkYXRhIGZvciBub24tbmVzdGVkIHRhYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBkYXRhU2V0LmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzLCB7XG4gICAgICAgIG9yZGVyOiBoYXNBbnlSb3dTcGFucyA/IG51bGwgOiBzLnF1ZXJ5Lm9yZGVyLFxuICAgICAgfSksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheShcbiAgICAgICAge1xuICAgICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucy5tYXAoY29sdW1uID0+XG4gICAgICAgICAgICBoYXNBbnlSb3dTcGFucyA/IHsgLi4uY29sdW1uLCBvcmRlcmFibGU6IGZhbHNlIH0gOiBjb2x1bW4sXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjZWxsUm93U3BhbjogY2VsbFJvd1NwYW4sXG4gICAgICAgICAgbmVlZHNSaWdodEJvcmRlcjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQyk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgaSA9IHJlc29sdmVkQ29sdW1uS2V5cy5maW5kSW5kZXgoa2V5ID0+IGtleSA9PT0gY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID09PSByZXNvbHZlZENvbHVtbktleXMubGVuZ3RoIC0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCByaWdodENvbEtleSA9IHJlc29sdmVkQ29sdW1uS2V5c1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBzcGFuT25SaWdodCA9IGNlbGxSb3dTcGFuKHJvd0luZGV4LCByaWdodENvbEtleSk7XG4gICAgICAgICAgICByZXR1cm4gc3Bhbk9uUmlnaHQgPiAxIHx8IHNwYW5PblJpZ2h0ID09PSAwO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxuICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnLFxuICAgICAgICByb3dzLFxuICAgICAgICByb3dzQXNHcm91cDoge1xuICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdXBEYXRhOiB7IGtleTogJycgfSBhcyBHLFxuICAgICAgICB9LFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgICAgY3N2RGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZWRGdWxsU3RhdGVRdWVyeTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgcGFydGlhbFF1ZXJ5OiBQYXJ0aWFsPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsncXVlcnknXT4gPSB7fSxcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydxdWVyeSddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnF1ZXJ5LFxuICAgICAgcGFnaW5hdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb24oY29yZVN0YXRlKSxcbiAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBUYWJsZVNlYXJjaEhlbHBlcnMuZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGUoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgJ25vbmUnLFxuICAgICAgKSxcbiAgICAgIC4uLnBhcnRpYWxRdWVyeSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb248XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3F1ZXJ5J11bJ3BhZ2luYXRpb24nXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgcHJldmlvdXM6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UHJldmlvdXNQYWdlKGNvcmVTdGF0ZSksXG4gICAgICBwYWdlczogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlcyhjb3JlU3RhdGUpLFxuICAgICAgbmV4dDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShjb3JlU3RhdGUpLFxuICAgICAgcGFnZUNvdW50OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VDb3VudChjb3JlU3RhdGUpLFxuICAgICAgc2hvd0NvbnRyb2xzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFNob3dQYWdpbmF0aW9uQ29udHJvbHMoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dTdGFydDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93U3RhcnQoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dFbmQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZVJvd0VuZChjb3JlU3RhdGUpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBib29sZWFuO1xuICAgICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICAgIH0sXG4gICAgcGFydGlhbERpc3BsYXk6IFBhcnRpYWw8RnVsbFN0YXRlPFIsIEMsIEYsIEc+WydkaXNwbGF5J10+ID0ge30sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsnZGlzcGxheSddIHtcbiAgICBjb25zdCB7XG4gICAgICBjb3JlU3RhdGUsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgYWxsQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLmdldEFsbENvbHVtbnMoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IFRhYmxlRGlzcGxheUhlbHBlcnMuZ2V0WmVyb1N0YXRlTWVzc2FnZShcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgKSxcbiAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlSGlkZWFibGUsXG4gICAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU6IG9wdGlvbnM/LmNvbHVtbnNBcmVSZW9yZGVyYWJsZSA/PyB0cnVlLFxuICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgY3VzdG9tU3VtbWFyeVJvdzogISFvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93LFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiAhIW9wdGlvbnM/LmhpZGVQYWdlU2l6ZVNlbGVjdG9yLFxuICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgbmVlZHNSaWdodEJvcmRlcjogKCkgPT4gZmFsc2UsXG4gICAgICAuLi5wYXJ0aWFsRGlzcGxheSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3NlbGVjdGlvbiddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnNlbGVjdGlvbixcbiAgICAgIGFsbG93U2VsZWN0aW9uOiBvcHRpb25zPy5hbGxvd1NlbGVjdGlvbiA/PyBmYWxzZSxcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0FsbFNlbGVjdGVkKGNvcmVTdGF0ZSksXG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6XG4gICAgICAgIFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0N1cnJlbnRQYWdlU2VsZWN0ZWQoY29yZVN0YXRlKSxcbiAgICAgIHNlbGVjdGVkQ291bnQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZWxlY3RlZENvdW50KGNvcmVTdGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb21lIHRhYmxlcyB1c2UgcmVtb3RlIGJhY2tlbmRzIHRvIGZldGNoIGRhdGEgYXN5bmNocm9ub3VzbHksIGJ1dCBtb3N0IHRhYmxlcyB1c2UgYW5cbiAgICogaW4tbWVtb3J5IHNvdXJjZSwgd2hpY2ggaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gYHF1ZXJ5Lm9yZGVyYCBpcyBudWxsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgc2VhcmNoLCByb3dzIGFyZSBvcmRlcmVkXG4gICAgICogYnkgdGhpcyBjb2x1bW4uIElmIG9taXR0ZWQsIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBhbiBgb3JkZXJLZXlgIGlzIHVzZWRcbiAgICAgKiAoYXNjZW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZWZhdWx0U29ydD86IHsgY29sdW1uOiBDOyBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uIH07XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvL0ZvciBpbk1lbW9yeU1hbmFnZXJzIHRoYXQgZG8gbm90IHV0aWxpemUgc2VhcmNoQ29sdW1ucyxcbiAgICAgIC8vd2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIGZ1c2VPcHRpb25zXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgLy9QcmV2ZW50IHNlYXJjaGluZyBvbiBjb2x1bW5zIHRoYXQgYXJlIGluIGZ1c2Ugb3B0aW9ucyBidXQgbm90IHN1cHBvcnRlZCBieSBzZWFyY2guXG4gICAgICAgIGNvbnN0IG5vblNlYXJjaGFibGVDb2x1bW5zS2V5cyA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy5rZXlzXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5zZWFyY2hhYmxlID09IGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vcmRlcktleT8udG9TdHJpbmcoKSB8fCBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPVxuICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zICYmIG5vblNlYXJjaGFibGVDb2x1bW5zS2V5c1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAga2V5czogb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGsgPT4gIW5vblNlYXJjaGFibGVDb2x1bW5zS2V5cy5pbmNsdWRlcyhrLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogb3B0aW9ucz8uZnVzZU9wdGlvbnM7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIGZ1c2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnc2VhcmNoQ29sdW1uc0NoYW5nZScgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucydcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICBsZXQgb3JkZXJlZDogUltdO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcbiAgICAgICAgb3JkZXJlZCA9XG4gICAgICAgICAgaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyXG4gICAgICAgICAgICA/IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgICAgICAgIG1hdGNoZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG1hdGNoZXM7XG4gICAgICB9IGVsc2UgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBvcmRlckNvbHVtbixcbiAgICAgICAgICBxdWVyeS5vcmRlci5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm9yZGVyID09IG51bGwgJiYgZGVmYXVsdFNvcnRTcGVjKSB7XG4gICAgICAgIG9yZGVyZWQgPSBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9yZGVyZWQgPSBkYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPVxuICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmNyZWF0ZUNvbHVtbk1ldGFkYXRhTWFwKGNvbHVtbnMpO1xuXG4gICAgLypcbiAgICAgIFdoZW4gYSBkZWZhdWx0U29ydCBpcyBzcGVjaWZpZWQsIHNlZWQgdGhlIGluaXRpYWwgcXVlcnkub3JkZXIgc28gdGhlXG4gICAgICB0YWJsZSBoZWFkZXIgc2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGZyb20gdGhlIHN0YXJ0LlxuICAgICovXG4gICAgb3B0aW9ucyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNlZWREZWZhdWx0U29ydE9wdGlvbihvcHRpb25zKTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlck5lc3RlZDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPE5lc3RlZEhlYWRlclJvdzxSPltdPiB8IE5lc3RlZEhlYWRlclJvdzxSPltdLFxuICAgIGNvbHVtbnM6IE1hcDxDLCBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFI+PixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8UiwgQywgRj4sXG4gICk6IE1hbmFnZXI8UiwgQywgRj4ge1xuICAgIGxldCBkYXRhOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICBsZXQgcm93c0Zyb21EYXRhOiBSW107XG4gICAgLy8gVGhlIGZ1c2Ugd2lsbCBzZWFyY2ggdGhlIGluZGl2aWR1YWwgcm93c1xuICAgIGxldCBmdXNlOiBGdXNlPFI+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8UiwgQywgRj4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8vRm9yIGluTWVtb3J5TWFuYWdlcnMgdGhhdCBkbyBub3QgdXRpbGl6ZSBzZWFyY2hDb2x1bW5zLFxuICAgICAgLy93ZSBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlaXIgZnVzZU9wdGlvbnNcbiAgICAgIGlmIChtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICAvL1ByZXZlbnQgc2VhcmNoaW5nIG9uIGNvbHVtbnMgdGhhdCBhcmUgaW4gZnVzZSBvcHRpb25zIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHNlYXJjaC5cbiAgICAgICAgY29uc3Qgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzID0gb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXNcbiAgICAgICAgICA/IEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLnNlYXJjaGFibGUgPT0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5tYXAoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm9yZGVyS2V5Py50b1N0cmluZygpIHx8IGtleS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBmdXNlT3B0aW9ucyA9XG4gICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMgJiYgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBrZXlzOiBvcHRpb25zPy5mdXNlT3B0aW9ucz8ua2V5cz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgayA9PiAhbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzLmluY2x1ZGVzKGsudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBvcHRpb25zPy5mdXNlT3B0aW9ucztcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCBmdXNlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICAvLyBTZWFyY2gsIHRoZW4gZmlsdGVyLCB0aGVuIHNvcnRcbiAgICAgIGxldCBkaWRSZXN0cmljdERpc3BsYXllZFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgbGV0IHJvd3NNYXRjaGluZ1NlYXJjaDogUltdID0gcm93c0Zyb21EYXRhO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICByb3dzTWF0Y2hpbmdTZWFyY2ggPSBmdXNlXG4gICAgICAgICAgLnNlYXJjaChxdWVyeS5zZWFyY2gpXG4gICAgICAgICAgLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0pO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGxldCByb3dzTWF0Y2hpbmdGaWx0ZXJzOiBSW10gPSByb3dzTWF0Y2hpbmdTZWFyY2g7XG4gICAgICBjb25zdCBmaWx0ZXJUb0FwcGx5ID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgaWYgKGZpbHRlclRvQXBwbHkpIHtcbiAgICAgICAgcm93c01hdGNoaW5nRmlsdGVycyA9IHJvd3NNYXRjaGluZ1NlYXJjaC5maWx0ZXIocm93ID0+XG4gICAgICAgICAgZmlsdGVyVG9BcHBseShxdWVyeS5maWx0ZXJzLCByb3cpLFxuICAgICAgICApO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZFJvd3NUb0Rpc3BsYXk6IE5lc3RlZEhlYWRlclJvdzxSPltdID0gZGlkUmVzdHJpY3REaXNwbGF5ZWRSb3dzXG4gICAgICAgID8gVGFibGVOZXN0aW5nSGVscGVycy5maW5kTmVzdGVkUm93c1dpdGhIZWFkZXJzVG9LZWVwKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHJvd3NNYXRjaGluZ0ZpbHRlcnMsXG4gICAgICAgICAgKVxuICAgICAgICA6IGRhdGE7XG4gICAgICBjb25zdCBib3R0b21MZXZlbFJvd0NvdW50OiBudW1iZXIgPVxuICAgICAgICBUYWJsZU5lc3RpbmdIZWxwZXJzLmNvdW50Qm90dG9tTGV2ZWxOZXN0ZWRIZWFkZXJSb3dzKFxuICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzb3J0ZWROZXN0ZWRSb3dzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAgIGlmIChoYXNFeHBsaWNpdFNvcnQgJiYgcXVlcnkub3JkZXIpIHtcbiAgICAgICAgLy8gRXhwbGljaXQgc29ydCBvdmVycmlkZSBoYXMgcHJpb3JpdHkgb3ZlciBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNvcnRMb3dMZXZlbE5lc3RlZFJvd3NXaXRoSGVhZGVycyhcbiAgICAgICAgICBuZXN0ZWRSb3dzVG9EaXNwbGF5LFxuICAgICAgICAgIG9yZGVyQ29sdW1uLFxuICAgICAgICAgIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnkuc2VhcmNoKSB7XG4gICAgICAgIC8vIFNvcnQgb24gdGhlIEZ1c2UgcmVsZXZhbmNlIG9yZGVyXG4gICAgICAgIGNvbnN0IGlkVG9TZWFyY2hJbmRleE1hcDogTWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPiA9XG4gICAgICAgICAgVGFibGVPcmRlckhlbHBlcnMuY3JlYXRlSWRUb1NlYXJjaEluZGV4TWFwKHJvd3NNYXRjaGluZ1NlYXJjaCk7XG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPVxuICAgICAgICAgIFRhYmxlT3JkZXJIZWxwZXJzLnNvcnROZXN0ZWRSb3dzV2l0aEhlYWRlcnNCYXNlZE9uU2VhcmNoTWF0Y2hlcyhcbiAgICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICAgICBpZFRvU2VhcmNoSW5kZXhNYXAsXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnkub3JkZXIgPT0gbnVsbCAmJiBkZWZhdWx0U29ydFNwZWMpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IHNvcnQsIGlmIHdlIGhhdmUgb25lXG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPSBUYWJsZU9yZGVySGVscGVycy5zb3J0TG93TGV2ZWxOZXN0ZWRSb3dzV2l0aEhlYWRlcnMoXG4gICAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgICBkZWZhdWx0U29ydFNwZWMua2V5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb24ndCBzb3J0IGlmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24gdG8gdXNlIHRvIHNvcnRcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9IG5lc3RlZFJvd3NUb0Rpc3BsYXk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2luYXRlZEhlYWRlclJvd3M6IE5lc3RlZEhlYWRlclJvdzxSPltdID1cbiAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5wYWdpbmF0ZU5lc3RlZEhlYWRlclJvd3MoXG4gICAgICAgICAgc29ydGVkTmVzdGVkUm93cyxcbiAgICAgICAgICBxdWVyeS5wYWdpbmF0aW9uLnBhZ2UsXG4gICAgICAgICAgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IGhhc0hlYWRlcnM6IGJvb2xlYW4gPSBwYWdpbmF0ZWRIZWFkZXJSb3dzLnNvbWUoXG4gICAgICAgIGhlYWRlciA9PiBoZWFkZXIuaGVhZGVyVGV4dCAhPSBudWxsLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzOiBwYWdpbmF0ZWRIZWFkZXJSb3dzLFxuICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGJvdHRvbUxldmVsUm93Q291bnQsXG4gICAgICAgIGhhc0hlYWRlcnM6IGhhc0hlYWRlcnMsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5NZXRhZGF0YTogTWFwPEMsIENvbHVtbk1ldGFkYXRhPiA9XG4gICAgICBUYWJsZUNvbHVtbkhlbHBlcnMuY3JlYXRlQ29sdW1uTWV0YWRhdGFNYXAoY29sdW1ucyk7XG5cbiAgICAvKlxuICAgICAgV2hlbiBhIGRlZmF1bHRTb3J0IGlzIHNwZWNpZmllZCwgc2VlZCB0aGUgaW5pdGlhbCBxdWVyeS5vcmRlciBzbyB0aGVcbiAgICAgIHRhYmxlIGhlYWRlciBzaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgZnJvbSB0aGUgc3RhcnQuXG4gICAgKi9cbiAgICBvcHRpb25zID0gVGFibGVPcmRlckhlbHBlcnMuc2VlZERlZmF1bHRTb3J0T3B0aW9uKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1hbmFnZXIoc291cmNlLCBjb2x1bW5NZXRhZGF0YSwgcGx1cmFsRW50aXR5TmFtZSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGtlZXBzIHRoZSBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlcyBhcyBzdGFibGUgYXMgcG9zc2libGUsIHdoaWNoXG4gKiBoZWxwcyBBbmd1bGFyIHJlZHVjZSB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLiBGb3Igbm93LCBzaW1wbGUgaXNFcXVhbCgpXG4gKiBjaGVja3MgYXQgdGhlIHN0YXRlJ3MgdG9wLWxldmVsIGtleXMgYXJlIHN1ZmZpY2llbnQgdG8gZHJhbWF0aWNhbGx5IHNwZWVkIHVwXG4gKiByZW5kZXJpbmcsIGJ1dCBpZiBvdGhlciBwZXJmb3JtYW5jZSBpc3N1ZXMgYXJpc2UsIHdlIGNvdWxkIGltcGxlbWVudCBtb3JlXG4gKiBncmFudWxhciBjaGVja3Mvc3VyZ2ljYWwgdXBkYXRlcyBhcyBuZWVkZWQgKHRoZSBzdGF0ZS5yZXN1bHQgYmVpbmcgdGhlIG1vc3RcbiAqIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIG1hbnkgdHlwZXMgb2Ygc3RhdGUgdXBkYXRlcyBhZmZlY3QgcGFydHMgb2YgdGhlXG4gKiByZXN1bHQgcm93cykuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgdGFyZ2V0OiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4gIHNvdXJjZTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuKTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5xdWVyeSwgc291cmNlLnF1ZXJ5KSkge1xuICAgIHRhcmdldC5xdWVyeSA9IHNvdXJjZS5xdWVyeTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmxvYWQsIHNvdXJjZS5sb2FkKSkge1xuICAgIHRhcmdldC5sb2FkID0gc291cmNlLmxvYWQ7XG4gIH1cblxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZEYXRhLCBzb3VyY2UucmVzdWx0LmNzdkRhdGEpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZEYXRhID0gc291cmNlLnJlc3VsdC5jc3ZEYXRhO1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lLCBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUgPSBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lO1xuICB9XG4gIGlmIChcbiAgICAhaXNFcXVhbChcbiAgICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgKVxuICApIHtcbiAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9IHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LCBzb3VyY2UucmVzdWx0KSkge1xuICAgIHRhcmdldC5yZXN1bHQgPSBzb3VyY2UucmVzdWx0O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuZGlzcGxheSwgc291cmNlLmRpc3BsYXkpKSB7XG4gICAgdGFyZ2V0LmRpc3BsYXkgPSBzb3VyY2UuZGlzcGxheTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnNlbGVjdGlvbiwgc291cmNlLnNlbGVjdGlvbikpIHtcbiAgICB0YXJnZXQuc2VsZWN0aW9uID0gc291cmNlLnNlbGVjdGlvbjtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiogcmVmcmVzaFJlc3VsdFdpdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLlNvdXJjZTxSLCBDLCBGLCBHPixcbiAgbW9zdFJlY2VudEFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEYsIEc+LFxuKTogQXN5bmNHZW5lcmF0b3I8e1xuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICBlZmZlY3Q6IFJpdlRhYmxlLkVmZmVjdCB8IG51bGw7XG59PiB7XG4gIHlpZWxkIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVmZmVjdDogbnVsbCxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzb3VyY2Uoc3RhdGUucXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pO1xuICAgIGlmIChUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmlzUGFnZU91dE9mQm91bmRzKHN0YXRlLCByZXN1bHQpKSB7XG4gICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPSAwO1xuICAgIH1cbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVmZmVjdDogbnVsbCxcbiAgICB9O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgVGFibGVPcmRlckhlbHBlcnMudG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQcmV2aW91c1BhZ2Uoc3RhdGUpID8/IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25leHRQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOlxuICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/XG4gICAgICAgICAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQoc3RhdGUpIC0gMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGFjdGlvbi5wYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2l6ZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBhY3Rpb24uc2l6ZSxcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsdGVyc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBmaWx0ZXJzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJBZGQnOlxuICAgICAgLy8gUGFyZW50IGNvbXBvbmVudCBpcyByZXNwb25zaWJsZSBmb3Igc3Vic2NyaWJpbmcgYW5kIGFkZGluZyB0aGUgZmlsdGVyXG4gICAgICB5aWVsZCB7IHN0YXRlOiB7IC4uLnN0YXRlIH0sIGVmZmVjdDogbnVsbCB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG8gbm90IG91dHB1dCBjaGFuZ2VzIHdoZW4gdHJpZ2dlcmVkIGZyb20gdGhlIG91dHNpZGUgd29ybGRcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblBpbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uUGluKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5waW5uZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZShcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbk9yZGVyKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgICBhY3Rpb24ubmV3SW5kZXgsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uTW92ZVRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5tb3ZlQ29sdW1uVG8oXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnBvc2l0aW9uLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuZW5hYmxlQWxsQ29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbldpZHRoKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wcmVmZXJyZWRXaWR0aCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZXNldFRvRGVmYXVsdENvbHVtbnMnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLnJlc2V0VG9EZWZhdWx0Q29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgc2VsZWN0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgfSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jvd1NlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZUFsbFNlbGVjdGVkKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNsZWFyJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5jbGVhclNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cFNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlR3JvdXBTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLnBheWxvYWQpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgZ3JvdXBzUGVyUGFnZTogYWN0aW9uLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGNvdW50UGVyR3JvdXA6IGFjdGlvbi5jb3VudFBlckdyb3VwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWV3TW9yZUtleUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgdmlld01vcmVLZXk6IGFjdGlvbi52aWV3TW9yZUtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIFRhYmxlU2VhcmNoSGVscGVycy50b2dnbGVBbGxTZWFyY2hDb2x1bW5zKHN0YXRlKSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlUm93Q29sbGFwc2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2xsYXBzZUhlbHBlcnMudG9nZ2xlUm93Q29sbGFwc2Uoc3RhdGUsIGFjdGlvbi5pZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVIZWFkZXJDb2xsYXBzZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVIZWFkZXJDb2xsYXBzZShzdGF0ZSwgYWN0aW9uLmlkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG4iXX0=
|