@clr/angular 17.7.1 → 17.8.1
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/clarity.api.md +49 -8
- package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +4 -0
- package/data/datagrid/datagrid.d.ts +6 -2
- package/data/datagrid/utils/key-navigation-grid.controller.d.ts +19 -2
- package/esm2020/accordion/accordion-panel.mjs +3 -3
- package/esm2020/data/datagrid/datagrid-column.mjs +9 -9
- package/esm2020/data/datagrid/datagrid-row-detail.mjs +29 -7
- package/esm2020/data/datagrid/datagrid-row.mjs +3 -3
- package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +14 -3
- package/esm2020/data/datagrid/datagrid.mjs +10 -6
- package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +238 -56
- package/esm2020/data/tree-view/tree-node.mjs +3 -3
- package/esm2020/emphasis/alert/alerts-pager.mjs +3 -3
- package/esm2020/forms/checkbox/checkbox-container.mjs +7 -3
- package/esm2020/forms/checkbox/checkbox-wrapper.mjs +8 -3
- package/esm2020/forms/checkbox/checkbox.mjs +5 -1
- package/esm2020/forms/datepicker/day.mjs +2 -2
- package/esm2020/forms/datepicker/yearpicker.mjs +6 -1
- package/esm2020/layout/breadcrumbs/index.mjs +2 -1
- package/esm2020/modal/modal.mjs +4 -3
- package/esm2020/modal/side-panel.mjs +5 -1
- package/esm2020/popover/signpost/signpost.mjs +9 -6
- package/esm2020/utils/conditional/if-expanded.directive.mjs +2 -1
- package/esm2020/utils/conditional/if-expanded.service.mjs +2 -1
- package/esm2020/utils/i18n/common-strings.default.mjs +2 -2
- package/esm2020/wizard/wizard-stepnav-item.mjs +34 -7
- package/esm2020/wizard/wizard-stepnav.mjs +30 -24
- package/esm2020/wizard/wizard.mjs +3 -3
- package/fesm2015/clr-angular.mjs +830 -552
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +833 -551
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/checkbox/checkbox-container.d.ts +1 -0
- package/forms/checkbox/checkbox-wrapper.d.ts +3 -1
- package/forms/checkbox/checkbox.d.ts +2 -0
- package/forms/datepicker/yearpicker.d.ts +1 -0
- package/layout/breadcrumbs/index.d.ts +1 -0
- package/package.json +2 -2
- package/popover/signpost/signpost.d.ts +2 -1
- package/utils/conditional/if-expanded.service.d.ts +1 -0
- package/wizard/wizard-stepnav-item.d.ts +5 -0
- package/wizard/wizard-stepnav.d.ts +2 -1
|
@@ -9,22 +9,27 @@ import { fromEvent, Subject } from 'rxjs';
|
|
|
9
9
|
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
10
10
|
import { Keys } from '../../../utils/enums/keys.enum';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
]
|
|
27
|
-
|
|
12
|
+
const actionableItemSelectors = [
|
|
13
|
+
'a[href]',
|
|
14
|
+
'area[href]',
|
|
15
|
+
'input:not([disabled])',
|
|
16
|
+
'button:not([disabled])',
|
|
17
|
+
'select:not([disabled])',
|
|
18
|
+
'textarea:not([disabled])',
|
|
19
|
+
'iframe',
|
|
20
|
+
'object',
|
|
21
|
+
'embed',
|
|
22
|
+
'[contenteditable=true]',
|
|
23
|
+
'[role=button]:not([disabled])',
|
|
24
|
+
];
|
|
25
|
+
export function getTabbableItems(el) {
|
|
26
|
+
const tabbableItemSelectors = [...actionableItemSelectors, '[tabindex="0"]:not([disabled])'];
|
|
27
|
+
const tabbableSelector = tabbableItemSelectors.join(',');
|
|
28
|
+
return Array.from(el.querySelectorAll(tabbableSelector));
|
|
29
|
+
}
|
|
30
|
+
function isActionableItem(el) {
|
|
31
|
+
const actionableSelector = actionableItemSelectors.join(',');
|
|
32
|
+
return el.matches(actionableSelector);
|
|
28
33
|
}
|
|
29
34
|
export class KeyNavigationGridController {
|
|
30
35
|
constructor(zone) {
|
|
@@ -34,7 +39,7 @@ export class KeyNavigationGridController {
|
|
|
34
39
|
this.destroy$ = new Subject();
|
|
35
40
|
this._activeCell = null;
|
|
36
41
|
this.config = {
|
|
37
|
-
keyGridRows: '[role=row]:not(.datagrid-placeholder)',
|
|
42
|
+
keyGridRows: '[role=row]:not(.datagrid-placeholder):not([style*="display: none"])',
|
|
38
43
|
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
39
44
|
keyGrid: '[role=grid]',
|
|
40
45
|
};
|
|
@@ -66,7 +71,7 @@ export class KeyNavigationGridController {
|
|
|
66
71
|
? Array.from(this.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
67
72
|
: null;
|
|
68
73
|
if (activeCell) {
|
|
69
|
-
this.setActiveCell(activeCell);
|
|
74
|
+
this.setActiveCell(activeCell, { keepFocus: isActionableItem(e.target) });
|
|
70
75
|
}
|
|
71
76
|
}
|
|
72
77
|
});
|
|
@@ -99,9 +104,12 @@ export class KeyNavigationGridController {
|
|
|
99
104
|
e.key === Keys.Home ||
|
|
100
105
|
e.key === Keys.PageUp ||
|
|
101
106
|
e.key === Keys.PageDown) {
|
|
102
|
-
const
|
|
107
|
+
const currentCellCoords = this.getCurrentCellCoordinates();
|
|
108
|
+
const nextCellCoords = this.isExpandedRow(currentCellCoords.y) || this.isDetailsRow(currentCellCoords.y)
|
|
109
|
+
? this.getNextForExpandedRowCoordinate(e, currentCellCoords)
|
|
110
|
+
: this.getNextItemCoordinate(e, currentCellCoords);
|
|
103
111
|
const activeItem = this.rows
|
|
104
|
-
? Array.from(this.
|
|
112
|
+
? Array.from(this.getCellsForRow(nextCellCoords.y))[nextCellCoords.x]
|
|
105
113
|
: null;
|
|
106
114
|
if (activeItem) {
|
|
107
115
|
this.setActiveCell(activeItem);
|
|
@@ -128,66 +136,240 @@ export class KeyNavigationGridController {
|
|
|
128
136
|
getActiveCell() {
|
|
129
137
|
return this._activeCell;
|
|
130
138
|
}
|
|
131
|
-
setActiveCell(activeCell) {
|
|
139
|
+
setActiveCell(activeCell, { keepFocus } = { keepFocus: false }) {
|
|
132
140
|
const prior = this.cells ? Array.from(this.cells).find(c => c.getAttribute('tabindex') === '0') : null;
|
|
133
141
|
if (prior) {
|
|
134
142
|
prior.setAttribute('tabindex', '-1');
|
|
135
143
|
}
|
|
136
144
|
activeCell.setAttribute('tabindex', '0');
|
|
137
145
|
this._activeCell = activeCell;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
if (!this.skipItemFocus && !keepFocus) {
|
|
147
|
+
let elementToFocus;
|
|
148
|
+
if (activeCell.getAttribute('role') === 'columnheader') {
|
|
149
|
+
elementToFocus = activeCell;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
const tabbableElements = getTabbableItems(activeCell);
|
|
153
|
+
elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;
|
|
154
|
+
}
|
|
155
|
+
elementToFocus.focus();
|
|
142
156
|
}
|
|
143
157
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
currentCell = document.activeElement;
|
|
158
|
+
getNextForExpandedRowCoordinate(e, currentCellCoords) {
|
|
159
|
+
if (e.key === Keys.PageUp || e.key === Keys.PageDown) {
|
|
160
|
+
return this.getNextItemCoordinate(e, currentCellCoords);
|
|
148
161
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
+
if (!this.isDetailsRow(currentCellCoords.y) &&
|
|
163
|
+
!this.isRowReplaced(currentCellCoords.y) &&
|
|
164
|
+
(e.key === Keys.Home || e.key === Keys.End || e.key === Keys.ArrowRight || e.key === Keys.ArrowLeft)) {
|
|
165
|
+
return this.getNextItemCoordinate(e, currentCellCoords);
|
|
166
|
+
}
|
|
167
|
+
const { numOfRows, numOfColumns, inlineStart, inlineEnd, isActionCell, nextCellCoords } = this.getCalcVariables(currentCellCoords);
|
|
168
|
+
const isSingleCellExpandedRow = this.isSingleCellExpandedRow(currentCellCoords.y);
|
|
169
|
+
if (e.key === Keys.ArrowUp && currentCellCoords.y !== 0) {
|
|
170
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
171
|
+
if (isSingleCellExpandedRow && !isActionCell) {
|
|
172
|
+
if (this.isRowReplaced(currentCellCoords.y)) {
|
|
173
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
174
|
+
}
|
|
175
|
+
if (this.isDetailsRow(nextCellCoords.y)) {
|
|
176
|
+
nextCellCoords.x = 0;
|
|
177
|
+
}
|
|
178
|
+
else if (this.isDetailsRow(currentCellCoords.y) === false) {
|
|
179
|
+
// false check is intentional, the ! operator may be missed easily in this case
|
|
180
|
+
nextCellCoords.x = currentCellCoords.x;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
nextCellCoords.x = this.actionCellCount(nextCellCoords.y);
|
|
184
|
+
}
|
|
185
|
+
return nextCellCoords;
|
|
186
|
+
}
|
|
187
|
+
if (isActionCell && this.isDetailsRow(nextCellCoords.y)) {
|
|
188
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
189
|
+
}
|
|
190
|
+
else if (this.isRowReplaced(nextCellCoords.y)) {
|
|
191
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
192
|
+
if (!this.isDetailsRow(nextCellCoords.y)) {
|
|
193
|
+
nextCellCoords.x = currentCellCoords.x + this.actionCellCount(nextCellCoords.y);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else if (this.isDetailsRow(currentCellCoords.y) && !this.isDetailsRow(nextCellCoords.y)) {
|
|
197
|
+
nextCellCoords.x = currentCellCoords.x + this.actionCellCount(nextCellCoords.y);
|
|
198
|
+
}
|
|
199
|
+
else if (!isActionCell && this.isDetailsRow(nextCellCoords.y)) {
|
|
200
|
+
nextCellCoords.x = currentCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else if (e.key === Keys.ArrowDown && currentCellCoords.y < numOfRows) {
|
|
204
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
205
|
+
if (isSingleCellExpandedRow && !isActionCell) {
|
|
206
|
+
if (this.isRowReplaced(nextCellCoords.y)) {
|
|
207
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
208
|
+
}
|
|
209
|
+
if (this.isDetailsRow(nextCellCoords.y)) {
|
|
210
|
+
nextCellCoords.x = 0;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
nextCellCoords.x = this.actionCellCount(nextCellCoords.y);
|
|
214
|
+
}
|
|
215
|
+
return nextCellCoords;
|
|
216
|
+
}
|
|
217
|
+
if (isActionCell || this.isRowReplaced(nextCellCoords.y)) {
|
|
218
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
219
|
+
}
|
|
220
|
+
else if (this.getCellsForRow(currentCellCoords.y).length > numOfColumns) {
|
|
221
|
+
nextCellCoords.x = currentCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
nextCellCoords.x = currentCellCoords.x + this.actionCellCount(nextCellCoords.y);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if (e.key === inlineStart) {
|
|
228
|
+
if (currentCellCoords.x !== 0) {
|
|
229
|
+
nextCellCoords.x = currentCellCoords.x - 1;
|
|
230
|
+
}
|
|
231
|
+
else if (!isActionCell) {
|
|
232
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
233
|
+
nextCellCoords.x = this.actionCellCount(nextCellCoords.y) - 1;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else if (e.key === inlineEnd && currentCellCoords.x < numOfColumns) {
|
|
237
|
+
if (isActionCell &&
|
|
238
|
+
currentCellCoords.x === this.actionCellCount(currentCellCoords.x) - 1 &&
|
|
239
|
+
this.isRowReplaced(currentCellCoords.y) &&
|
|
240
|
+
!this.isDetailsRow(currentCellCoords.y)) {
|
|
241
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
242
|
+
nextCellCoords.x = 0;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
nextCellCoords.x = currentCellCoords.x + 1;
|
|
246
|
+
}
|
|
162
247
|
}
|
|
163
|
-
else if (e.key === Keys.
|
|
164
|
-
|
|
248
|
+
else if (e.key === Keys.End) {
|
|
249
|
+
nextCellCoords.x = this.getCellsForRow(currentCellCoords.y).length - 1;
|
|
250
|
+
if (e.ctrlKey) {
|
|
251
|
+
nextCellCoords.x = numOfColumns;
|
|
252
|
+
nextCellCoords.y = numOfRows;
|
|
253
|
+
}
|
|
165
254
|
}
|
|
166
|
-
else if (e.key ===
|
|
167
|
-
x =
|
|
255
|
+
else if (e.key === Keys.Home) {
|
|
256
|
+
nextCellCoords.x = 0;
|
|
257
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
258
|
+
if (e.ctrlKey) {
|
|
259
|
+
nextCellCoords.y = 0;
|
|
260
|
+
}
|
|
168
261
|
}
|
|
169
|
-
|
|
170
|
-
|
|
262
|
+
return nextCellCoords;
|
|
263
|
+
}
|
|
264
|
+
getNextItemCoordinate(e, currentCellCoords) {
|
|
265
|
+
const { numOfRows, numOfColumns, inlineStart, inlineEnd, itemsPerPage, isActionCell, nextCellCoords } = this.getCalcVariables(currentCellCoords);
|
|
266
|
+
if (e.key === Keys.ArrowUp && currentCellCoords.y !== 0) {
|
|
267
|
+
nextCellCoords.y = currentCellCoords.y - 1;
|
|
268
|
+
if (this.isSingleCellExpandedRow(nextCellCoords.y) && !isActionCell && this.isDetailsRow(nextCellCoords.y)) {
|
|
269
|
+
nextCellCoords.x = 0;
|
|
270
|
+
return nextCellCoords;
|
|
271
|
+
}
|
|
272
|
+
if (this.isDetailsRow(nextCellCoords.y)) {
|
|
273
|
+
if (isActionCell) {
|
|
274
|
+
nextCellCoords.y = nextCellCoords.y - 1;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
nextCellCoords.x = nextCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else if (e.key === Keys.ArrowDown && currentCellCoords.y < numOfRows) {
|
|
282
|
+
nextCellCoords.y = currentCellCoords.y + 1;
|
|
283
|
+
if (this.isSingleCellExpandedRow(nextCellCoords.y) && !isActionCell && this.isRowReplaced(nextCellCoords.y)) {
|
|
284
|
+
nextCellCoords.x = 0;
|
|
285
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
286
|
+
return nextCellCoords;
|
|
287
|
+
}
|
|
288
|
+
if (!isActionCell && this.isRowReplaced(nextCellCoords.y)) {
|
|
289
|
+
nextCellCoords.y = nextCellCoords.y + 1;
|
|
290
|
+
nextCellCoords.x = nextCellCoords.x - this.actionCellCount(currentCellCoords.y);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else if (e.key === inlineStart && currentCellCoords.x !== 0) {
|
|
294
|
+
nextCellCoords.x = currentCellCoords.x - 1;
|
|
295
|
+
}
|
|
296
|
+
else if (e.key === inlineEnd && currentCellCoords.x < numOfColumns) {
|
|
297
|
+
nextCellCoords.x = currentCellCoords.x + 1;
|
|
171
298
|
}
|
|
172
299
|
else if (e.key === Keys.End) {
|
|
173
|
-
x = numOfColumns;
|
|
300
|
+
nextCellCoords.x = numOfColumns;
|
|
174
301
|
if (e.ctrlKey) {
|
|
175
|
-
y = numOfRows;
|
|
302
|
+
nextCellCoords.y = numOfRows;
|
|
176
303
|
}
|
|
177
304
|
}
|
|
178
305
|
else if (e.key === Keys.Home) {
|
|
179
|
-
x = 0;
|
|
306
|
+
nextCellCoords.x = 0;
|
|
180
307
|
if (e.ctrlKey) {
|
|
181
|
-
y = 0;
|
|
308
|
+
nextCellCoords.y = 0;
|
|
182
309
|
}
|
|
183
310
|
}
|
|
184
311
|
else if (e.key === Keys.PageUp) {
|
|
185
|
-
y = y - itemsPerPage > 0 ? y - itemsPerPage + 1 : 1;
|
|
312
|
+
nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
|
|
186
313
|
}
|
|
187
314
|
else if (e.key === Keys.PageDown) {
|
|
188
|
-
y =
|
|
315
|
+
nextCellCoords.y =
|
|
316
|
+
currentCellCoords.y + itemsPerPage < numOfRows ? currentCellCoords.y + itemsPerPage : numOfRows;
|
|
189
317
|
}
|
|
190
|
-
return
|
|
318
|
+
return nextCellCoords;
|
|
319
|
+
}
|
|
320
|
+
getCalcVariables(currentCellCoords) {
|
|
321
|
+
const numOfRows = this.rows ? this.rows.length - 1 : 0;
|
|
322
|
+
// calculate numOfColumns based on header cells.
|
|
323
|
+
const numOfColumns = numOfRows ? this.getCellsForRow(0).length - 1 : 0;
|
|
324
|
+
const dir = this.host.dir;
|
|
325
|
+
const inlineStart = dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;
|
|
326
|
+
const inlineEnd = dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;
|
|
327
|
+
const itemsPerPage = Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.rows[0].clientHeight) - 1 || 0;
|
|
328
|
+
const isActionCell = this.isActionCell(currentCellCoords);
|
|
329
|
+
const nextCellCoords = {
|
|
330
|
+
x: currentCellCoords.x,
|
|
331
|
+
y: currentCellCoords.y,
|
|
332
|
+
};
|
|
333
|
+
return { numOfRows, numOfColumns, inlineStart, inlineEnd, itemsPerPage, isActionCell, nextCellCoords };
|
|
334
|
+
}
|
|
335
|
+
getCurrentCellCoordinates() {
|
|
336
|
+
const currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
|
|
337
|
+
const currentRow = currentCell ? currentCell.closest(this.config.keyGridRows) : null;
|
|
338
|
+
const coordinates = {
|
|
339
|
+
x: currentRow && currentCell
|
|
340
|
+
? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
|
|
341
|
+
: 0,
|
|
342
|
+
y: currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0,
|
|
343
|
+
};
|
|
344
|
+
return coordinates;
|
|
345
|
+
}
|
|
346
|
+
getCellsForRow(index) {
|
|
347
|
+
return this.rows[index].querySelectorAll(this.config.keyGridCells);
|
|
348
|
+
}
|
|
349
|
+
isExpandedRow(index) {
|
|
350
|
+
const selectedElement = this.rows[index].querySelector('.datagrid-row-detail');
|
|
351
|
+
return selectedElement ? selectedElement.style.display !== 'none' : false;
|
|
352
|
+
}
|
|
353
|
+
isDetailsRow(index) {
|
|
354
|
+
return this.rows[index].classList.contains('datagrid-row-detail');
|
|
355
|
+
}
|
|
356
|
+
isRowReplaced(index) {
|
|
357
|
+
return !!this.rows[index].closest('clr-dg-row.datagrid-row-replaced');
|
|
358
|
+
}
|
|
359
|
+
isSingleCellExpandedRow(index) {
|
|
360
|
+
const row = this.rows[index].classList.contains('datagrid-row-detail')
|
|
361
|
+
? this.rows[index]
|
|
362
|
+
: this.rows[index].querySelector('.datagrid-row-detail');
|
|
363
|
+
return row?.querySelectorAll(this.config.keyGridCells).length === 1;
|
|
364
|
+
}
|
|
365
|
+
actionCellCount(index) {
|
|
366
|
+
return this.actionCellsAsArray(index).length;
|
|
367
|
+
}
|
|
368
|
+
actionCellsAsArray(index) {
|
|
369
|
+
return Array.from(this.rows[index].querySelectorAll('.datagrid-row-sticky .datagrid-cell, .datagrid-row-sticky .datagrid-column'));
|
|
370
|
+
}
|
|
371
|
+
isActionCell(cellCoords) {
|
|
372
|
+
return !!this.actionCellsAsArray(cellCoords.y)[cellCoords.x];
|
|
191
373
|
}
|
|
192
374
|
}
|
|
193
375
|
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -195,4 +377,4 @@ KeyNavigationGridController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "1
|
|
|
195
377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, decorators: [{
|
|
196
378
|
type: Injectable
|
|
197
379
|
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW5hdmlnYXRpb24tZ3JpZC5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZGF0YS9kYXRhZ3JpZC91dGlscy9rZXktbmF2aWdhdGlvbi1ncmlkLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFFdEQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUFlO0lBQzdDLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLFNBQVM7UUFDVCxZQUFZO1FBQ1osdUJBQXVCO1FBQ3ZCLHdCQUF3QjtRQUN4Qix3QkFBd0I7UUFDeEIsMEJBQTBCO1FBQzFCLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIsK0JBQStCO0tBQ2hDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBa0IsQ0FBQztBQUMzRSxDQUFDO0FBU0QsTUFBTSxPQUFPLDJCQUEyQjtJQVN0QyxZQUFvQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVJoQyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUlkLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLGdCQUFXLEdBQWdCLElBQUksQ0FBQztR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LENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRDthQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ2pFO1FBRUQsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNsQixDQUFDOzt3SEFsTVUsMkJBQTJCOzRIQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9lbnVtcy9rZXlzLmVudW0nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFiYWJsZUl0ZW1zKGVsOiBIVE1MRWxlbWVudCkge1xuICBjb25zdCB0YWJhYmxlU2VsZWN0b3IgPSBbXG4gICAgJ2FbaHJlZl0nLFxuICAgICdhcmVhW2hyZWZdJyxcbiAgICAnaW5wdXQ6bm90KFtkaXNhYmxlZF0pJyxcbiAgICAnYnV0dG9uOm5vdChbZGlzYWJsZWRdKScsXG4gICAgJ3NlbGVjdDpub3QoW2Rpc2FibGVkXSknLFxuICAgICd0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSknLFxuICAgICdpZnJhbWUnLFxuICAgICdvYmplY3QnLFxuICAgICdlbWJlZCcsXG4gICAgJypbdGFiaW5kZXhdOm5vdChbZGlzYWJsZWRdKScsXG4gICAgJypbY29udGVudGVkaXRhYmxlPXRydWVdJyxcbiAgICAnW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSknLFxuICBdLmpvaW4oJywnKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWwucXVlcnlTZWxlY3RvckFsbCh0YWJhYmxlU2VsZWN0b3IpKSBhcyBIVE1MRWxlbWVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleU5hdmlnYXRpb25HcmlkQ29uZmlnIHtcbiAga2V5R3JpZDogc3RyaW5nO1xuICBrZXlHcmlkUm93czogc3RyaW5nO1xuICBrZXlHcmlkQ2VsbHM6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleU5hdmlnYXRpb25HcmlkQ29udHJvbGxlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHNraXBJdGVtRm9jdXMgPSBmYWxzZTtcblxuICBwcml2YXRlIGhvc3Q6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIGNvbmZpZzogS2V5TmF2aWdhdGlvbkdyaWRDb25maWc7XG4gIHByaXZhdGUgbGlzdGVuZXJzQWRkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2FjdGl2ZUNlbGw6IEhUTUxFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAga2V5R3JpZFJvd3M6ICdbcm9sZT1yb3ddOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXIpJyxcbiAgICAgIGtleUdyaWRDZWxsczpcbiAgICAgICAgJ1tyb2xlPWdyaWRjZWxsXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIFtyb2xlPWNvbHVtbmhlYWRlcl06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0JyxcbiAgICAgIGtleUdyaWQ6ICdbcm9sZT1ncmlkXScsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGdyaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3Rvcih0aGlzLmNvbmZpZy5rZXlHcmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cykgYXMgTm9kZUxpc3RPZjxIVE1MRWxlbWVudD47XG4gIH1cblxuICBwcml2YXRlIGdldCBjZWxscygpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykgYXMgTm9kZUxpc3RPZjxIVE1MRWxlbWVudD47XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBhZGRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzQWRkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHRoaXMuZ3JpZCwgJ21vdXNlZG93bicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIC8vIHByZXNlcnZlIHJpZ2h0IGNsaWNrIGZvciBjb250ZXh0IG1lbnVzICYga2V5Ym9hcmQgbW91c2UgY29udHJvbCBodHRwczovL2FwcGxlLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8zMjcxNS9ob3ctZG8taS1vcGVuLXRoZS1jb250ZXh0LW1lbnUtZnJvbS1hLW1hYy1rZXlib2FyZFxuICAgICAgICAgIGlmIChlLmJ1dHRvbnMgPT09IDEgJiYgIWUuY3RybEtleSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlQ2VsbCA9IHRoaXMuY2VsbHNcbiAgICAgICAgICAgICAgPyBBcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoXG4gICAgICAgICAgICAgICAgICBjID0+IGMgPT09IGUudGFyZ2V0IHx8IGMgPT09IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAoYWN0aXZlQ2VsbCkge1xuICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUNlbGwoYWN0aXZlQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgZnJvbUV2ZW50KHRoaXMuZ3JpZCwgJ3doZWVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGZyb21FdmVudCh0aGlzLmdyaWQsICdmb2N1c291dCcpXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5ncmlkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZW1vdmVBY3RpdmVDZWxsKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQodGhpcy5ncmlkLCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIC8vIFNraXAgY29sdW1uIHJlc2l6ZSBldmVudHNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnZHJhZy1oYW5kbGUnKSAmJlxuICAgICAgICAgICAgKGUua2V5ID09PSBLZXlzLkFycm93TGVmdCB8fCBlLmtleSA9PT0gS2V5cy5BcnJvd1JpZ2h0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5BcnJvd1VwIHx8XG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5BcnJvd0Rvd24gfHxcbiAgICAgICAgICAgIGUua2V5ID09PSBLZXlzLkFycm93TGVmdCB8fFxuICAgICAgICAgICAgZS5rZXkgPT09IEtleXMuQXJyb3dSaWdodCB8fFxuICAgICAgICAgICAgZS5rZXkgPT09IEtleXMuRW5kIHx8XG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5Ib21lIHx8XG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5QYWdlVXAgfHxcbiAgICAgICAgICAgIGUua2V5ID09PSBLZXlzLlBhZ2VEb3duXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMuZ2V0TmV4dEl0ZW1Db29yZGluYXRlKGUpO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMucm93c1xuICAgICAgICAgICAgICA/IChBcnJheS5mcm9tKHRoaXMucm93c1t5XS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpW3hdIGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUNlbGwoYWN0aXZlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RlbmVyc0FkZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGluaXRpYWxpemVLZXlHcmlkKGhvc3Q6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICB0aGlzLmFkZExpc3RlbmVycygpO1xuICAgIHRoaXMucmVzZXRLZXlHcmlkKCk7XG4gIH1cblxuICByZXNldEtleUdyaWQoKSB7XG4gICAgdGhpcy5jZWxscz8uZm9yRWFjaCgoaTogSFRNTEVsZW1lbnQpID0+IGkuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpKTtcbiAgICBjb25zdCBmaXJzdENlbGwgPSB0aGlzLmNlbGxzID8gdGhpcy5jZWxsc1swXSA6IG51bGw7XG4gICAgZmlyc3RDZWxsPy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgfVxuXG4gIHJlbW92ZUFjdGl2ZUNlbGwoKSB7XG4gICAgdGhpcy5fYWN0aXZlQ2VsbCA9IG51bGw7XG4gIH1cblxuICBnZXRBY3RpdmVDZWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVDZWxsO1xuICB9XG5cbiAgc2V0QWN0aXZlQ2VsbChhY3RpdmVDZWxsOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHByaW9yID0gdGhpcy5jZWxscyA/IEFycmF5LmZyb20odGhpcy5jZWxscykuZmluZChjID0+IGMuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpID09PSAnMCcpIDogbnVsbDtcblxuICAgIGlmIChwcmlvcikge1xuICAgICAgcHJpb3Iuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgIH1cblxuICAgIGFjdGl2ZUNlbGwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgdGhpcy5fYWN0aXZlQ2VsbCA9IGFjdGl2ZUNlbGw7XG5cbiAgICBjb25zdCBpdGVtcyA9IGdldFRhYmFibGVJdGVtcyhhY3RpdmVDZWxsKTtcbiAgICBjb25zdCBpdGVtID0gYWN0aXZlQ2VsbC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ2NvbHVtbmhlYWRlcicgJiYgaXRlbXNbMF0gPyBpdGVtc1swXSA6IGFjdGl2ZUNlbGw7XG5cbiAgICBpZiAoIXRoaXMuc2tpcEl0ZW1Gb2N1cykge1xuICAgICAgaXRlbS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmV4dEl0ZW1Db29yZGluYXRlKGU6IGFueSkge1xuICAgIGxldCBjdXJyZW50Q2VsbCA9IHRoaXMuY2VsbHMgPyBBcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoaSA9PiBpLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSA9PT0gJzAnKSA6IG51bGw7XG4gICAgaWYgKGUua2V5ID09PSBLZXlzLlRhYikge1xuICAgICAgY3VycmVudENlbGwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Um93ID0gdGhpcy5yb3dzICYmIGN1cnJlbnRDZWxsID8gQXJyYXkuZnJvbSh0aGlzLnJvd3MpLmZpbmQociA9PiByLmNvbnRhaW5zKGN1cnJlbnRDZWxsKSkgOiBudWxsO1xuICAgIGNvbnN0IG51bU9mUm93cyA9IHRoaXMucm93cyA/IHRoaXMucm93cy5sZW5ndGggLSAxIDogMDtcbiAgICBjb25zdCBudW1PZkNvbHVtbnMgPSB0aGlzLmNlbGxzID8gTWF0aC5mbG9vcih0aGlzLmNlbGxzLmxlbmd0aCAvIHRoaXMucm93cy5sZW5ndGggLSAxKSA6IDA7XG5cbiAgICBsZXQgeCA9XG4gICAgICBjdXJyZW50Um93ICYmIGN1cnJlbnRDZWxsXG4gICAgICAgID8gQXJyYXkuZnJvbShjdXJyZW50Um93LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSkuaW5kZXhPZihjdXJyZW50Q2VsbClcbiAgICAgICAgOiAwO1xuICAgIGxldCB5ID0gY3VycmVudFJvdyAmJiBjdXJyZW50Q2VsbCAmJiB0aGlzLnJvd3MgPyBBcnJheS5mcm9tKHRoaXMucm93cykuaW5kZXhPZihjdXJyZW50Um93KSA6IDA7XG5cbiAgICBjb25zdCBkaXIgPSB0aGlzLmhvc3QuZGlyO1xuICAgIGNvbnN0IGlubGluZVN0YXJ0ID0gZGlyID09PSAncnRsJyA/IEtleXMuQXJyb3dSaWdodCA6IEtleXMuQXJyb3dMZWZ0O1xuICAgIGNvbnN0IGlubGluZUVuZCA9IGRpciA9PT0gJ3J0bCcgPyBLZXlzLkFycm93TGVmdCA6IEtleXMuQXJyb3dSaWdodDtcblxuICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9XG4gICAgICBNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcignLmRhdGFncmlkJykuY2xpZW50SGVpZ2h0IC8gdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCkgLSAxIHx8IDA7XG5cbiAgICBpZiAoZS5rZXkgPT09IEtleXMuQXJyb3dVcCAmJiB5ICE9PSAwKSB7XG4gICAgICB5ID0geSAtIDE7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5cy5BcnJvd0Rvd24gJiYgeSA8IG51bU9mUm93cykge1xuICAgICAgeSA9IHkgKyAxO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IGlubGluZVN0YXJ0ICYmIHggIT09IDApIHtcbiAgICAgIHggPSB4IC0gMTtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBpbmxpbmVFbmQgJiYgeCA8IG51bU9mQ29sdW1ucykge1xuICAgICAgeCA9IHggKyAxO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleXMuRW5kKSB7XG4gICAgICB4ID0gbnVtT2ZDb2x1bW5zO1xuXG4gICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgIHkgPSBudW1PZlJvd3M7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5cy5Ib21lKSB7XG4gICAgICB4ID0gMDtcblxuICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICB5ID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBLZXlzLlBhZ2VVcCkge1xuICAgICAgeSA9IHkgLSBpdGVtc1BlclBhZ2UgPiAwID8geSAtIGl0ZW1zUGVyUGFnZSArIDEgOiAxO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleXMuUGFnZURvd24pIHtcbiAgICAgIHkgPSB5ICsgaXRlbXNQZXJQYWdlIDwgbnVtT2ZSb3dzID8geSArIGl0ZW1zUGVyUGFnZSA6IG51bU9mUm93cztcbiAgICB9XG5cbiAgICByZXR1cm4geyB4LCB5IH07XG4gIH1cbn1cbiJdfQ==
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW5hdmlnYXRpb24tZ3JpZC5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZGF0YS9kYXRhZ3JpZC91dGlscy9rZXktbmF2aWdhdGlvbi1ncmlkLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFFdEQsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixTQUFTO0lBQ1QsWUFBWTtJQUNaLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQixRQUFRO0lBQ1IsUUFBUTtJQUNSLE9BQU87SUFDUCx3QkFBd0I7SUFDeEIsK0JBQStCO0NBQ2hDLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBZTtJQUM5QyxNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzdGLE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBa0IsQ0FBQztBQUM1RSxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFlO0lBQ3ZDLE1BQU0sa0JBQWtCLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdE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QUNqQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxLQUFhO1FBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztZQUNwRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFM0QsT0FBTyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYTtRQUNuQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQWE7UUFDdEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsNEVBQTRFLENBQUMsQ0FDaEgsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQUMsVUFBMkI7UUFDOUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7d0hBclpVLDJCQUEyQjs0SEFBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW51bXMva2V5cy5lbnVtJztcblxuY29uc3QgYWN0aW9uYWJsZUl0ZW1TZWxlY3RvcnMgPSBbXG4gICdhW2hyZWZdJyxcbiAgJ2FyZWFbaHJlZl0nLFxuICAnaW5wdXQ6bm90KFtkaXNhYmxlZF0pJyxcbiAgJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknLFxuICAnc2VsZWN0Om5vdChbZGlzYWJsZWRdKScsXG4gICd0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSknLFxuICAnaWZyYW1lJyxcbiAgJ29iamVjdCcsXG4gICdlbWJlZCcsXG4gICdbY29udGVudGVkaXRhYmxlPXRydWVdJyxcbiAgJ1tyb2xlPWJ1dHRvbl06bm90KFtkaXNhYmxlZF0pJyxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJiYWJsZUl0ZW1zKGVsOiBIVE1MRWxlbWVudCkge1xuICBjb25zdCB0YWJiYWJsZUl0ZW1TZWxlY3RvcnMgPSBbLi4uYWN0aW9uYWJsZUl0ZW1TZWxlY3RvcnMsICdbdGFiaW5kZXg9XCIwXCJdOm5vdChbZGlzYWJsZWRdKSddO1xuICBjb25zdCB0YWJiYWJsZVNlbGVjdG9yID0gdGFiYmFibGVJdGVtU2VsZWN0b3JzLmpvaW4oJywnKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWwucXVlcnlTZWxlY3RvckFsbCh0YWJiYWJsZVNlbGVjdG9yKSkgYXMgSFRNTEVsZW1lbnRbXTtcbn1cblxuZnVuY3Rpb24gaXNBY3Rpb25hYmxlSXRlbShlbDogSFRNTEVsZW1lbnQpIHtcbiAgY29uc3QgYWN0aW9uYWJsZVNlbGVjdG9yID0gYWN0aW9uYWJsZUl0ZW1TZWxlY3RvcnMuam9pbignLCcpO1xuICByZXR1cm4gZWwubWF0Y2hlcyhhY3Rpb25hYmxlU2VsZWN0b3IpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleU5hdmlnYXRpb25HcmlkQ29uZmlnIHtcbiAga2V5R3JpZDogc3RyaW5nO1xuICBrZXlHcmlkUm93czogc3RyaW5nO1xuICBrZXlHcmlkQ2VsbHM6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZWxsQ29vcmRpbmF0ZXMge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleU5hdmlnYXRpb25HcmlkQ29udHJvbGxlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHNraXBJdGVtRm9jdXMgPSBmYWxzZTtcblxuICBwcml2YXRlIGhvc3Q6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIGNvbmZpZzogS2V5TmF2aWdhdGlvbkdyaWRDb25maWc7XG4gIHByaXZhdGUgbGlzdGVuZXJzQWRkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2FjdGl2ZUNlbGw6IEhUTUxFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAga2V5R3JpZFJvd3M6ICdbcm9sZT1yb3ddOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXIpOm5vdChbc3R5bGUqPVwiZGlzcGxheTogbm9uZVwiXSknLFxuICAgICAga2V5R3JpZENlbGxzOlxuICAgICAgICAnW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQnLFxuICAgICAga2V5R3JpZDogJ1tyb2xlPWdyaWRdJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZ3JpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNlbGxzKCkge1xuICAgIHJldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PjtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFkZExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnNBZGRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQodGhpcy5ncmlkLCAnbW91c2Vkb3duJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gcHJlc2VydmUgcmlnaHQgY2xpY2sgZm9yIGNvbnRleHQgbWVudXMgJiBrZXlib2FyZCBtb3VzZSBjb250cm9sIGh0dHBzOi8vYXBwbGUuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzMyNzE1L2hvdy1kby1pLW9wZW4tdGhlLWNvbnRleHQtbWVudS1mcm9tLWEtbWFjLWtleWJvYXJkXG4gICAgICAgICAgaWYgKGUuYnV0dG9ucyA9PT0gMSAmJiAhZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVDZWxsID0gdGhpcy5jZWxsc1xuICAgICAgICAgICAgICA/IEFycmF5LmZyb20odGhpcy5jZWxscykuZmluZChcbiAgICAgICAgICAgICAgICAgIGMgPT4gYyA9PT0gZS50YXJnZXQgfHwgYyA9PT0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRDZWxscylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChhY3RpdmVDZWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlQ2VsbChhY3RpdmVDZWxsLCB7IGtlZXBGb2N1czogaXNBY3Rpb25hYmxlSXRlbShlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgZnJvbUV2ZW50KHRoaXMuZ3JpZCwgJ3doZWVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGZyb21FdmVudCh0aGlzLmdyaWQsICdmb2N1c291dCcpXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5ncmlkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZW1vdmVBY3RpdmVDZWxsKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQodGhpcy5ncmlkLCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIC8vIFNraXAgY29sdW1uIHJlc2l6ZSBldmVudHNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnZHJhZy1oYW5kbGUnKSAmJlxuICAgICAgICAgICAgKGUua2V5ID09PSBLZXlzLkFycm93TGVmdCB8fCBlLmtleSA9PT0gS2V5cy5BcnJvd1JpZ2h0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5BcnJvd1VwIHx8XG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5BcnJvd0Rvd24gfHxcbiAgICAgICAgICAgIGUua2V5ID09PSBLZXlzLkFycm93TGVmdCB8fFxuICAgICAgICAgICAgZS5rZXkgPT09IEtleXMuQXJyb3dSaWdodCB8fFxuICAgICAgICAgICAgZS5rZXkgPT09IEtleXMuRW5kIHx8XG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5Ib21lIHx8XG4gICAgICAgICAgICBlLmtleSA9PT0gS2V5cy5QYWdlVXAgfHxcbiAgICAgICAgICAgIGUua2V5ID09PSBLZXlzLlBhZ2VEb3duXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q2VsbENvb3JkcyA9IHRoaXMuZ2V0Q3VycmVudENlbGxDb29yZGluYXRlcygpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9XG4gICAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRlZFJvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSB8fCB0aGlzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KVxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXROZXh0Rm9yRXhwYW5kZWRSb3dDb29yZGluYXRlKGUsIGN1cnJlbnRDZWxsQ29vcmRzKVxuICAgICAgICAgICAgICAgIDogdGhpcy5nZXROZXh0SXRlbUNvb3JkaW5hdGUoZSwgY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5yb3dzXG4gICAgICAgICAgICAgID8gKEFycmF5LmZyb20odGhpcy5nZXRDZWxsc0ZvclJvdyhuZXh0Q2VsbENvb3Jkcy55KSlbbmV4dENlbGxDb29yZHMueF0gYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVDZWxsKGFjdGl2ZUl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RlbmVyc0FkZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGluaXRpYWxpemVLZXlHcmlkKGhvc3Q6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICB0aGlzLmFkZExpc3RlbmVycygpO1xuICAgIHRoaXMucmVzZXRLZXlHcmlkKCk7XG4gIH1cblxuICByZXNldEtleUdyaWQoKSB7XG4gICAgdGhpcy5jZWxscz8uZm9yRWFjaCgoaTogSFRNTEVsZW1lbnQpID0+IGkuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpKTtcbiAgICBjb25zdCBmaXJzdENlbGwgPSB0aGlzLmNlbGxzID8gdGhpcy5jZWxsc1swXSA6IG51bGw7XG4gICAgZmlyc3RDZWxsPy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgfVxuXG4gIHJlbW92ZUFjdGl2ZUNlbGwoKSB7XG4gICAgdGhpcy5fYWN0aXZlQ2VsbCA9IG51bGw7XG4gIH1cblxuICBnZXRBY3RpdmVDZWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVDZWxsO1xuICB9XG5cbiAgc2V0QWN0aXZlQ2VsbChhY3RpdmVDZWxsOiBIVE1MRWxlbWVudCwgeyBrZWVwRm9jdXMgfSA9IHsga2VlcEZvY3VzOiBmYWxzZSB9KSB7XG4gICAgY29uc3QgcHJpb3IgPSB0aGlzLmNlbGxzID8gQXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGMgPT4gYy5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09ICcwJykgOiBudWxsO1xuXG4gICAgaWYgKHByaW9yKSB7XG4gICAgICBwcmlvci5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgfVxuXG4gICAgYWN0aXZlQ2VsbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB0aGlzLl9hY3RpdmVDZWxsID0gYWN0aXZlQ2VsbDtcblxuICAgIGlmICghdGhpcy5za2lwSXRlbUZvY3VzICYmICFrZWVwRm9jdXMpIHtcbiAgICAgIGxldCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQ7XG5cbiAgICAgIGlmIChhY3RpdmVDZWxsLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnY29sdW1uaGVhZGVyJykge1xuICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IGFjdGl2ZUNlbGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0YWJiYWJsZUVsZW1lbnRzID0gZ2V0VGFiYmFibGVJdGVtcyhhY3RpdmVDZWxsKTtcbiAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0YWJiYWJsZUVsZW1lbnRzLmxlbmd0aCA/IHRhYmJhYmxlRWxlbWVudHNbMF0gOiBhY3RpdmVDZWxsO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmV4dEZvckV4cGFuZGVkUm93Q29vcmRpbmF0ZShlOiBhbnksIGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBpZiAoZS5rZXkgPT09IEtleXMuUGFnZVVwIHx8IGUua2V5ID09PSBLZXlzLlBhZ2VEb3duKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROZXh0SXRlbUNvb3JkaW5hdGUoZSwgY3VycmVudENlbGxDb29yZHMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSAmJlxuICAgICAgIXRoaXMuaXNSb3dSZXBsYWNlZChjdXJyZW50Q2VsbENvb3Jkcy55KSAmJlxuICAgICAgKGUua2V5ID09PSBLZXlzLkhvbWUgfHwgZS5rZXkgPT09IEtleXMuRW5kIHx8IGUua2V5ID09PSBLZXlzLkFycm93UmlnaHQgfHwgZS5rZXkgPT09IEtleXMuQXJyb3dMZWZ0KVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dEl0ZW1Db29yZGluYXRlKGUsIGN1cnJlbnRDZWxsQ29vcmRzKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG51bU9mUm93cywgbnVtT2ZDb2x1bW5zLCBpbmxpbmVTdGFydCwgaW5saW5lRW5kLCBpc0FjdGlvbkNlbGwsIG5leHRDZWxsQ29vcmRzIH0gPVxuICAgICAgdGhpcy5nZXRDYWxjVmFyaWFibGVzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGNvbnN0IGlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93ID0gdGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhjdXJyZW50Q2VsbENvb3Jkcy55KTtcblxuICAgIGlmIChlLmtleSA9PT0gS2V5cy5BcnJvd1VwICYmIGN1cnJlbnRDZWxsQ29vcmRzLnkgIT09IDApIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gMTtcblxuICAgICAgaWYgKGlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93ICYmICFpc0FjdGlvbkNlbGwpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSb3dSZXBsYWNlZChjdXJyZW50Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNEZXRhaWxzUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGZhbHNlIGNoZWNrIGlzIGludGVudGlvbmFsLCB0aGUgISBvcGVyYXRvciBtYXkgYmUgbWlzc2VkIGVhc2lseSBpbiB0aGlzIGNhc2VcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gdGhpcy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FjdGlvbkNlbGwgJiYgdGhpcy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUm93UmVwbGFjZWQobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCArIHRoaXMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNEZXRhaWxzUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpICYmICF0aGlzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCArIHRoaXMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgfSBlbHNlIGlmICghaXNBY3Rpb25DZWxsICYmIHRoaXMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54IC0gdGhpcy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5cy5BcnJvd0Rvd24gJiYgY3VycmVudENlbGxDb29yZHMueSA8IG51bU9mUm93cykge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgKyAxO1xuXG4gICAgICBpZiAoaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cgJiYgIWlzQWN0aW9uQ2VsbCkge1xuICAgICAgICBpZiAodGhpcy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQWN0aW9uQ2VsbCB8fCB0aGlzLmlzUm93UmVwbGFjZWQobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgKyAxO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmdldENlbGxzRm9yUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpLmxlbmd0aCA+IG51bU9mQ29sdW1ucykge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCAtIHRoaXMuYWN0aW9uQ2VsbENvdW50KGN1cnJlbnRDZWxsQ29vcmRzLnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyB0aGlzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBpbmxpbmVTdGFydCkge1xuICAgICAgaWYgKGN1cnJlbnRDZWxsQ29vcmRzLnggIT09IDApIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggLSAxO1xuICAgICAgfSBlbHNlIGlmICghaXNBY3Rpb25DZWxsKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gMTtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpIC0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBpbmxpbmVFbmQgJiYgY3VycmVudENlbGxDb29yZHMueCA8IG51bU9mQ29sdW1ucykge1xuICAgICAgaWYgKFxuICAgICAgICBpc0FjdGlvbkNlbGwgJiZcbiAgICAgICAgY3VycmVudENlbGxDb29yZHMueCA9PT0gdGhpcy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueCkgLSAxICYmXG4gICAgICAgIHRoaXMuaXNSb3dSZXBsYWNlZChjdXJyZW50Q2VsbENvb3Jkcy55KSAmJlxuICAgICAgICAhdGhpcy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSlcbiAgICAgICkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSArIDE7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleXMuRW5kKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gdGhpcy5nZXRDZWxsc0ZvclJvdyhjdXJyZW50Q2VsbENvb3Jkcy55KS5sZW5ndGggLSAxO1xuXG4gICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBudW1PZkNvbHVtbnM7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBudW1PZlJvd3M7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5cy5Ib21lKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gMDtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gMTtcblxuICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBwcml2YXRlIGdldE5leHRJdGVtQ29vcmRpbmF0ZShlOiBhbnksIGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCB7IG51bU9mUm93cywgbnVtT2ZDb2x1bW5zLCBpbmxpbmVTdGFydCwgaW5saW5lRW5kLCBpdGVtc1BlclBhZ2UsIGlzQWN0aW9uQ2VsbCwgbmV4dENlbGxDb29yZHMgfSA9XG4gICAgICB0aGlzLmdldENhbGNWYXJpYWJsZXMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgaWYgKGUua2V5ID09PSBLZXlzLkFycm93VXAgJiYgY3VycmVudENlbGxDb29yZHMueSAhPT0gMCkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgLSAxO1xuXG4gICAgICBpZiAodGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhuZXh0Q2VsbENvb3Jkcy55KSAmJiAhaXNBY3Rpb25DZWxsICYmIHRoaXMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgICAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBpZiAoaXNBY3Rpb25DZWxsKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBuZXh0Q2VsbENvb3Jkcy54IC0gdGhpcy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBLZXlzLkFycm93RG93biAmJiBjdXJyZW50Q2VsbENvb3Jkcy55IDwgbnVtT2ZSb3dzKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSArIDE7XG5cbiAgICAgIGlmICh0aGlzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5leHRDZWxsQ29vcmRzLnkpICYmICFpc0FjdGlvbkNlbGwgJiYgdGhpcy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSArIDE7XG4gICAgICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0FjdGlvbkNlbGwgJiYgdGhpcy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55ICsgMTtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IG5leHRDZWxsQ29vcmRzLnggLSB0aGlzLmFjdGlvbkNlbGxDb3VudChjdXJyZW50Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBpbmxpbmVTdGFydCAmJiBjdXJyZW50Q2VsbENvb3Jkcy54ICE9PSAwKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCAtIDE7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gaW5saW5lRW5kICYmIGN1cnJlbnRDZWxsQ29vcmRzLnggPCBudW1PZkNvbHVtbnMpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgMTtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBLZXlzLkVuZCkge1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IG51bU9mQ29sdW1ucztcblxuICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbnVtT2ZSb3dzO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleXMuSG9tZSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG5cbiAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5cy5QYWdlVXApIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gaXRlbXNQZXJQYWdlID4gMCA/IGN1cnJlbnRDZWxsQ29vcmRzLnkgLSBpdGVtc1BlclBhZ2UgKyAxIDogMTtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBLZXlzLlBhZ2VEb3duKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID1cbiAgICAgICAgY3VycmVudENlbGxDb29yZHMueSArIGl0ZW1zUGVyUGFnZSA8IG51bU9mUm93cyA/IGN1cnJlbnRDZWxsQ29vcmRzLnkgKyBpdGVtc1BlclBhZ2UgOiBudW1PZlJvd3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWxjVmFyaWFibGVzKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBudW1PZlJvd3MgPSB0aGlzLnJvd3MgPyB0aGlzLnJvd3MubGVuZ3RoIC0gMSA6IDA7XG5cbiAgICAvLyBjYWxjdWxhdGUgbnVtT2ZDb2x1bW5zIGJhc2VkIG9uIGhlYWRlciBjZWxscy5cbiAgICBjb25zdCBudW1PZkNvbHVtbnMgPSBudW1PZlJvd3MgPyB0aGlzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aCAtIDEgOiAwO1xuXG4gICAgY29uc3QgZGlyID0gdGhpcy5ob3N0LmRpcjtcbiAgICBjb25zdCBpbmxpbmVTdGFydCA9IGRpciA9PT0gJ3J0bCcgPyBLZXlzLkFycm93UmlnaHQgOiBLZXlzLkFycm93TGVmdDtcbiAgICBjb25zdCBpbmxpbmVFbmQgPSBkaXIgPT09ICdydGwnID8gS2V5cy5BcnJvd0xlZnQgOiBLZXlzLkFycm93UmlnaHQ7XG5cbiAgICBjb25zdCBpdGVtc1BlclBhZ2UgPVxuICAgICAgTWF0aC5mbG9vcih0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IoJy5kYXRhZ3JpZCcpLmNsaWVudEhlaWdodCAvIHRoaXMucm93c1swXS5jbGllbnRIZWlnaHQpIC0gMSB8fCAwO1xuXG4gICAgY29uc3QgaXNBY3Rpb25DZWxsID0gdGhpcy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgY29uc3QgbmV4dENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcyA9IHtcbiAgICAgIHg6IGN1cnJlbnRDZWxsQ29vcmRzLngsXG4gICAgICB5OiBjdXJyZW50Q2VsbENvb3Jkcy55LFxuICAgIH07XG5cbiAgICByZXR1cm4geyBudW1PZlJvd3MsIG51bU9mQ29sdW1ucywgaW5saW5lU3RhcnQsIGlubGluZUVuZCwgaXRlbXNQZXJQYWdlLCBpc0FjdGlvbkNlbGwsIG5leHRDZWxsQ29vcmRzIH07XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKSB7XG4gICAgY29uc3QgY3VycmVudENlbGwgPSB0aGlzLmNlbGxzID8gQXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGkgPT4gaS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09ICcwJykgOiBudWxsO1xuICAgIGNvbnN0IGN1cnJlbnRSb3c6IEhUTUxFbGVtZW50ID0gY3VycmVudENlbGwgPyBjdXJyZW50Q2VsbC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKSA6IG51bGw7XG5cbiAgICBjb25zdCBjb29yZGluYXRlczogQ2VsbENvb3JkaW5hdGVzID0ge1xuICAgICAgeDpcbiAgICAgICAgY3VycmVudFJvdyAmJiBjdXJyZW50Q2VsbFxuICAgICAgICAgID8gQXJyYXkuZnJvbShjdXJyZW50Um93LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSkuaW5kZXhPZihjdXJyZW50Q2VsbClcbiAgICAgICAgICA6IDAsXG4gICAgICB5OiBjdXJyZW50Um93ICYmIGN1cnJlbnRDZWxsICYmIHRoaXMucm93cyA/IEFycmF5LmZyb20odGhpcy5yb3dzKS5pbmRleE9mKGN1cnJlbnRSb3cpIDogMCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsc0ZvclJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMucm93c1tpbmRleF0ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4cGFuZGVkUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5yb3dzW2luZGV4XS5xdWVyeVNlbGVjdG9yKCcuZGF0YWdyaWQtcm93LWRldGFpbCcpO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudCA/IHNlbGVjdGVkRWxlbWVudC5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEZXRhaWxzUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzW2luZGV4XS5jbGFzc0xpc3QuY29udGFpbnMoJ2RhdGFncmlkLXJvdy1kZXRhaWwnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSb3dSZXBsYWNlZChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3dzW2luZGV4XS5jbG9zZXN0KCdjbHItZGctcm93LmRhdGFncmlkLXJvdy1yZXBsYWNlZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5yb3dzW2luZGV4XS5jbGFzc0xpc3QuY29udGFpbnMoJ2RhdGFncmlkLXJvdy1kZXRhaWwnKVxuICAgICAgPyB0aGlzLnJvd3NbaW5kZXhdXG4gICAgICA6IHRoaXMucm93c1tpbmRleF0ucXVlcnlTZWxlY3RvcignLmRhdGFncmlkLXJvdy1kZXRhaWwnKTtcblxuICAgIHJldHVybiByb3c/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKS5sZW5ndGggPT09IDE7XG4gIH1cblxuICBwcml2YXRlIGFjdGlvbkNlbGxDb3VudChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGluZGV4KS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGFjdGlvbkNlbGxzQXNBcnJheShpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICB0aGlzLnJvd3NbaW5kZXhdLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jZWxsLCAuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY29sdW1uJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FjdGlvbkNlbGwoY2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgcmV0dXJuICEhdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkoY2VsbENvb3Jkcy55KVtjZWxsQ29vcmRzLnhdO1xuICB9XG59XG4iXX0=
|