@one-grid-core/angular 0.2.1 → 0.4.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/README.md +55 -9
- package/esm2022/lib/components/one-grid/one-grid.component.mjs +244 -11
- package/esm2022/lib/components/one-grid-body/one-grid-body.component.mjs +446 -34
- package/esm2022/lib/components/one-grid-cell-currency/one-grid-cell-currency.component.mjs +6 -5
- package/esm2022/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.mjs +3 -3
- package/esm2022/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.mjs +3 -3
- package/esm2022/lib/components/one-grid-checkbox/one-grid-checkbox.component.mjs +7 -18
- package/esm2022/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.mjs +6 -6
- package/esm2022/lib/components/one-grid-header/one-grid-header.component.mjs +221 -17
- package/esm2022/lib/components/one-grid-header-menu/one-grid-header-menu.component.mjs +137 -0
- package/esm2022/lib/components/one-grid-pagination/one-grid-pagination.component.mjs +6 -5
- package/esm2022/lib/components/one-grid-row-action/one-grid-row-action.component.mjs +4 -4
- package/esm2022/lib/components/one-grid-row-drag-handle/one-grid-row-drag-handle.component.mjs +5 -3
- package/esm2022/lib/components/one-grid-status/one-grid-status.component.mjs +4 -4
- package/esm2022/lib/core/directives/one-cell-input-validator.directive.mjs +3 -3
- package/esm2022/lib/core/directives/one-cell-renderer-component.directive.mjs +3 -3
- package/esm2022/lib/core/directives/one-cell-text-expand.directive.mjs +3 -3
- package/esm2022/lib/core/icons/one-grid-icons.mjs +38 -0
- package/esm2022/lib/core/instants/one-grid-api.class.mjs +296 -3
- package/esm2022/lib/core/models/one-column-def-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-event-types.model.mjs +1 -1
- package/esm2022/lib/core/models/one-filter.model.mjs +1 -1
- package/esm2022/lib/core/pipes/aria-sort.pipe.mjs +31 -0
- package/esm2022/lib/core/pipes/cell-action-button-enable.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/cell-editable.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/cell-invalid.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/cell-key.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/cell-level-padding.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/cell-selected.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/cell-state-renderer.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/column-sort-state.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/header-checkbox-checked.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/header-checkbox-disabled.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/header-checkbox-indeterminate.pipe.mjs +3 -3
- package/esm2022/lib/core/services/og-column.service.mjs +153 -30
- package/esm2022/lib/core/services/one-grid-cell.service.mjs +16 -14
- package/esm2022/lib/helpers/one-cell.helper.mjs +30 -1
- package/esm2022/lib/helpers/one-column-def.helper.mjs +16 -1
- package/esm2022/lib/helpers/one-csv.helper.mjs +58 -0
- package/esm2022/lib/helpers/one-filter.helper.mjs +11 -1
- package/esm2022/lib/helpers/one-row-grouping.helper.mjs +103 -0
- package/esm2022/lib/index.mjs +3 -1
- package/esm2022/lib/one-grid.module.mjs +24 -114
- package/fesm2022/one-grid-core-angular.mjs +2328 -851
- package/fesm2022/one-grid-core-angular.mjs.map +1 -1
- package/lib/components/one-grid/one-grid.component.d.ts +101 -4
- package/lib/components/one-grid-body/one-grid-body.component.d.ts +83 -2
- package/lib/components/one-grid-cell-currency/one-grid-cell-currency.component.d.ts +1 -1
- package/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.d.ts +1 -1
- package/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.d.ts +1 -1
- package/lib/components/one-grid-checkbox/one-grid-checkbox.component.d.ts +1 -1
- package/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.d.ts +1 -1
- package/lib/components/one-grid-header/one-grid-header.component.d.ts +69 -4
- package/lib/components/one-grid-header-menu/one-grid-header-menu.component.d.ts +52 -0
- package/lib/components/one-grid-pagination/one-grid-pagination.component.d.ts +1 -1
- package/lib/components/one-grid-row-action/one-grid-row-action.component.d.ts +1 -1
- package/lib/components/one-grid-row-drag-handle/one-grid-row-drag-handle.component.d.ts +1 -1
- package/lib/components/one-grid-status/one-grid-status.component.d.ts +1 -1
- package/lib/core/directives/one-cell-input-validator.directive.d.ts +1 -1
- package/lib/core/directives/one-cell-renderer-component.directive.d.ts +1 -1
- package/lib/core/directives/one-cell-text-expand.directive.d.ts +1 -1
- package/lib/core/icons/one-grid-icons.d.ts +35 -0
- package/lib/core/instants/one-grid-api.class.d.ts +115 -1
- package/lib/core/models/one-column-def-types.model.d.ts +77 -2
- package/lib/core/models/one-event-types.model.d.ts +19 -0
- package/lib/core/models/one-filter.model.d.ts +8 -1
- package/lib/core/pipes/aria-sort.pipe.d.ts +15 -0
- package/lib/core/pipes/cell-action-button-enable.pipe.d.ts +1 -1
- package/lib/core/pipes/cell-editable.pipe.d.ts +1 -1
- package/lib/core/pipes/cell-invalid.pipe.d.ts +1 -1
- package/lib/core/pipes/cell-key.pipe.d.ts +1 -1
- package/lib/core/pipes/cell-level-padding.pipe.d.ts +1 -1
- package/lib/core/pipes/cell-selected.pipe.d.ts +1 -1
- package/lib/core/pipes/cell-state-renderer.pipe.d.ts +1 -1
- package/lib/core/pipes/column-sort-state.pipe.d.ts +1 -1
- package/lib/core/pipes/header-checkbox-checked.pipe.d.ts +1 -1
- package/lib/core/pipes/header-checkbox-disabled.pipe.d.ts +1 -1
- package/lib/core/pipes/header-checkbox-indeterminate.pipe.d.ts +1 -1
- package/lib/core/services/og-column.service.d.ts +46 -2
- package/lib/core/services/one-grid-cell.service.d.ts +0 -3
- package/lib/helpers/one-cell.helper.d.ts +17 -0
- package/lib/helpers/one-column-def.helper.d.ts +9 -0
- package/lib/helpers/one-csv.helper.d.ts +29 -0
- package/lib/helpers/one-row-grouping.helper.d.ts +35 -0
- package/lib/index.d.ts +2 -0
- package/lib/one-grid.module.d.ts +15 -37
- package/package.json +1 -1
- package/scss/_one-grid.scss +127 -0
- package/esm2022/lib/core/pipes/cell-action-button-visible.pipe.mjs +0 -17
- package/esm2022/lib/core/pipes/cell-field-value-empty.pipe.mjs +0 -26
- package/esm2022/lib/core/pipes/cell-field-value.pipe.mjs +0 -25
- package/esm2022/lib/core/pipes/cell-field.pipe.mjs +0 -20
- package/esm2022/lib/core/pipes/cell-number-value.pipe.mjs +0 -19
- package/esm2022/lib/core/pipes/cell-state-group-renderer.pipe.mjs +0 -21
- package/esm2022/lib/core/pipes/cell-value-getter.pipe.mjs +0 -23
- package/lib/core/pipes/cell-action-button-visible.pipe.d.ts +0 -9
- package/lib/core/pipes/cell-field-value-empty.pipe.d.ts +0 -7
- package/lib/core/pipes/cell-field-value.pipe.d.ts +0 -7
- package/lib/core/pipes/cell-field.pipe.d.ts +0 -7
- package/lib/core/pipes/cell-number-value.pipe.d.ts +0 -7
- package/lib/core/pipes/cell-state-group-renderer.pipe.d.ts +0 -9
- package/lib/core/pipes/cell-value-getter.pipe.d.ts +0 -9
|
@@ -11,6 +11,14 @@ export class OgColumnService {
|
|
|
11
11
|
* callbacks do. Set during init; null in a bare service.
|
|
12
12
|
*/
|
|
13
13
|
this.context = null;
|
|
14
|
+
/**
|
|
15
|
+
* Every column, hidden ones included, in display order. `columnDefs$` below
|
|
16
|
+
* carries only the visible subset — it is what the header and body render
|
|
17
|
+
* from, so hiding a column means leaving it out of the emission, and every
|
|
18
|
+
* consumer keeps working with no notion of visibility at all. This list is
|
|
19
|
+
* what remembers a hidden column's place, width and pin for when it returns.
|
|
20
|
+
*/
|
|
21
|
+
this.allColumnDefs = [];
|
|
14
22
|
this.columnDefs$ = new BehaviorSubject([]);
|
|
15
23
|
this.groupColumnDefs$ = new BehaviorSubject([]);
|
|
16
24
|
}
|
|
@@ -38,9 +46,20 @@ export class OgColumnService {
|
|
|
38
46
|
};
|
|
39
47
|
return this.resolveHeaderPresentation(column);
|
|
40
48
|
});
|
|
49
|
+
this.commit(columns);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Re-band, re-measure and publish a new column list.
|
|
53
|
+
*
|
|
54
|
+
* Every mutation funnels here so the master list and the visible emission
|
|
55
|
+
* cannot drift apart.
|
|
56
|
+
*/
|
|
57
|
+
commit(columns) {
|
|
41
58
|
const ordered = this.applyPinning(columns);
|
|
42
|
-
this.
|
|
43
|
-
|
|
59
|
+
this.allColumnDefs = ordered;
|
|
60
|
+
const visible = ordered.filter(column => !column.hide);
|
|
61
|
+
this.recalculateGroups(visible);
|
|
62
|
+
this.columnDefs$.next(visible);
|
|
44
63
|
}
|
|
45
64
|
/**
|
|
46
65
|
* Move pinned columns to their edge and measure how far in each one sits.
|
|
@@ -64,11 +83,14 @@ export class OgColumnService {
|
|
|
64
83
|
return columns;
|
|
65
84
|
}
|
|
66
85
|
const center = columns.filter(column => column.pinned !== 'left' && column.pinned !== 'right');
|
|
86
|
+
// Hidden columns keep their place in the band but take up no space, so
|
|
87
|
+
// they are skipped when measuring offsets and never carry the divider.
|
|
67
88
|
let offset = 0;
|
|
68
89
|
for (const column of left) {
|
|
69
90
|
column._pinnedOffset = offset;
|
|
70
91
|
column._pinnedEdge = false;
|
|
71
|
-
|
|
92
|
+
if (!column.hide)
|
|
93
|
+
offset += resolveColumnWidth(column);
|
|
72
94
|
}
|
|
73
95
|
// Right-pinned columns are measured from the right edge inwards, so the
|
|
74
96
|
// last declared one sits flush and the earlier ones stack outside it.
|
|
@@ -76,46 +98,146 @@ export class OgColumnService {
|
|
|
76
98
|
for (let index = right.length - 1; index >= 0; index--) {
|
|
77
99
|
right[index]._pinnedOffset = offset;
|
|
78
100
|
right[index]._pinnedEdge = false;
|
|
79
|
-
|
|
101
|
+
if (!right[index].hide)
|
|
102
|
+
offset += resolveColumnWidth(right[index]);
|
|
80
103
|
}
|
|
81
104
|
for (const column of center) {
|
|
82
105
|
column._pinnedOffset = null;
|
|
83
106
|
column._pinnedEdge = false;
|
|
84
107
|
}
|
|
85
|
-
// Only the innermost column of each band carries the divider, so
|
|
86
|
-
// pinned columns do not each cast a shadow onto the next.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (
|
|
90
|
-
|
|
108
|
+
// Only the innermost visible column of each band carries the divider, so
|
|
109
|
+
// stacked pinned columns do not each cast a shadow onto the next.
|
|
110
|
+
const leftVisible = left.filter(column => !column.hide);
|
|
111
|
+
const rightVisible = right.filter(column => !column.hide);
|
|
112
|
+
if (leftVisible.length)
|
|
113
|
+
leftVisible[leftVisible.length - 1]._pinnedEdge = true;
|
|
114
|
+
if (rightVisible.length)
|
|
115
|
+
rightVisible[0]._pinnedEdge = true;
|
|
91
116
|
return [...left, ...center, ...right];
|
|
92
117
|
}
|
|
93
|
-
/** Total width of the columns frozen against the given edge. */
|
|
118
|
+
/** Total width of the visible columns frozen against the given edge. */
|
|
94
119
|
getPinnedWidth(side) {
|
|
95
120
|
return this.columnDefs$.getValue()
|
|
96
121
|
.filter(column => column.pinned === side)
|
|
97
122
|
.reduce((total, column) => total + resolveColumnWidth(column), 0);
|
|
98
123
|
}
|
|
99
|
-
// Update single column
|
|
124
|
+
// Update single column. Works on the master list, so a hidden column can be
|
|
125
|
+
// patched — including `hide` itself, which is how visibility toggles.
|
|
100
126
|
updateColumnDef(id, changes) {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
127
|
+
const updatedColumns = this.allColumnDefs.map(col => col.id === id ? { ...col, ...changes } : col);
|
|
128
|
+
// Re-pinned (inside commit), not just re-grouped: resizing a pinned column
|
|
129
|
+
// changes where the ones inside it have to sit, and this is the path a
|
|
130
|
+
// column resize takes.
|
|
131
|
+
this.commit(updatedColumns);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Reorder columns. The indexes are *visible* positions — they come from the
|
|
135
|
+
* header, which only renders visible columns — so they are mapped onto the
|
|
136
|
+
* master list before splicing. A hidden column between the two keeps its
|
|
137
|
+
* place relative to its neighbours.
|
|
138
|
+
*/
|
|
111
139
|
reorderColumnDefs(fromIndex, toIndex) {
|
|
112
|
-
const columns = lodash.clone(this.
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
140
|
+
const columns = lodash.clone(this.allColumnDefs);
|
|
141
|
+
const visible = columns.filter(column => !column.hide);
|
|
142
|
+
const moved = visible[fromIndex];
|
|
143
|
+
if (!moved)
|
|
144
|
+
return;
|
|
145
|
+
columns.splice(columns.indexOf(moved), 1);
|
|
146
|
+
// Land before the visible column now at the target index — the same splice
|
|
147
|
+
// the visible-only list used to do after removal — or at the end when the
|
|
148
|
+
// target is past the last visible column.
|
|
149
|
+
const visibleAfter = visible.filter(column => column !== moved);
|
|
150
|
+
const anchor = visibleAfter[toIndex];
|
|
151
|
+
columns.splice(anchor ? columns.indexOf(anchor) : columns.length, 0, moved);
|
|
152
|
+
// Dragging can drop a column between two pinned ones; re-pinning (inside
|
|
153
|
+
// commit) puts the bands back in order rather than leaving them
|
|
154
|
+
// interleaved, which would make the computed offsets meaningless.
|
|
155
|
+
this.commit(columns);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Distribute the viewport width left over by fixed columns among the flex
|
|
159
|
+
* ones, in proportion to their `flex` values and clamped to their bounds.
|
|
160
|
+
*
|
|
161
|
+
* @returns Whether any width actually changed — the caller only dispatches
|
|
162
|
+
* (and the body only re-triggers) on a real change, which is what terminates
|
|
163
|
+
* the columnChanged → flex → columnChanged loop.
|
|
164
|
+
*/
|
|
165
|
+
applyFlexWidths(availableWidth) {
|
|
166
|
+
const visible = this.columnDefs$.getValue();
|
|
167
|
+
const flexColumns = visible.filter(column => (column.flex ?? 0) > 0);
|
|
168
|
+
if (!flexColumns.length || !(availableWidth > 0))
|
|
169
|
+
return false;
|
|
170
|
+
const fixedWidth = visible
|
|
171
|
+
.filter(column => !((column.flex ?? 0) > 0))
|
|
172
|
+
.reduce((total, column) => total + resolveColumnWidth(column), 0);
|
|
173
|
+
let remaining = Math.max(availableWidth - fixedWidth, 0);
|
|
174
|
+
// Clamped columns stop flexing and release their share to the rest, so
|
|
175
|
+
// the pass repeats until the split is stable. Each pass settles at least
|
|
176
|
+
// one column; the loop is bounded by the column count.
|
|
177
|
+
const widths = new Map();
|
|
178
|
+
let unsettled = [...flexColumns];
|
|
179
|
+
while (unsettled.length) {
|
|
180
|
+
const totalFlex = unsettled.reduce((total, column) => total + (column.flex ?? 0), 0);
|
|
181
|
+
const share = remaining / totalFlex;
|
|
182
|
+
const clamped = unsettled.filter(column => {
|
|
183
|
+
const ideal = share * (column.flex ?? 0);
|
|
184
|
+
const min = Math.max(column.minWidth ?? 0, 50);
|
|
185
|
+
const max = column.maxWidth ?? Number.POSITIVE_INFINITY;
|
|
186
|
+
const width = Math.min(Math.max(ideal, min), max);
|
|
187
|
+
if (width === ideal)
|
|
188
|
+
return false;
|
|
189
|
+
widths.set(column.id, Math.round(width));
|
|
190
|
+
remaining = Math.max(remaining - width, 0);
|
|
191
|
+
return true;
|
|
192
|
+
});
|
|
193
|
+
unsettled = unsettled.filter(column => !clamped.includes(column));
|
|
194
|
+
if (!clamped.length) {
|
|
195
|
+
unsettled.forEach(column => widths.set(column.id, Math.floor(share * (column.flex ?? 0))));
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const changed = flexColumns.some(column => widths.get(column.id) !== resolveColumnWidth(column));
|
|
200
|
+
if (!changed)
|
|
201
|
+
return false;
|
|
202
|
+
this.commit(this.allColumnDefs.map(column => widths.has(column.id) ? { ...column, width: widths.get(column.id) } : column));
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* One JSON-safe entry per column — hidden ones included — in display order.
|
|
207
|
+
*/
|
|
208
|
+
getColumnStateSnapshot() {
|
|
209
|
+
return this.allColumnDefs.map(column => {
|
|
210
|
+
const entry = { id: column.id, hide: !!column.hide, pinned: column.pinned ?? null };
|
|
211
|
+
if (column.width != null)
|
|
212
|
+
entry.width = column.width;
|
|
213
|
+
return entry;
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Restore a saved snapshot: order, width, pin and visibility.
|
|
218
|
+
*
|
|
219
|
+
* Entries are applied in the order given and become the front of the new
|
|
220
|
+
* column order; columns the snapshot does not mention keep their current
|
|
221
|
+
* relative order behind them, and ids the grid no longer has are skipped —
|
|
222
|
+
* so a stale snapshot degrades to a partial restore instead of an error.
|
|
223
|
+
* Only the properties present on an entry are applied.
|
|
224
|
+
*/
|
|
225
|
+
applyColumnState(entries) {
|
|
226
|
+
const byId = new Map(this.allColumnDefs.map(column => [column.id, column]));
|
|
227
|
+
const mentioned = (entries ?? []).filter(entry => entry && byId.has(entry.id));
|
|
228
|
+
const mentionedIds = new Set(mentioned.map(entry => entry.id));
|
|
229
|
+
const restored = mentioned.map(entry => {
|
|
230
|
+
const column = { ...byId.get(entry.id) };
|
|
231
|
+
if (entry.width != null)
|
|
232
|
+
column.width = entry.width;
|
|
233
|
+
if ('pinned' in entry)
|
|
234
|
+
column.pinned = entry.pinned ?? undefined;
|
|
235
|
+
if ('hide' in entry)
|
|
236
|
+
column.hide = !!entry.hide;
|
|
237
|
+
return column;
|
|
238
|
+
});
|
|
239
|
+
const rest = this.allColumnDefs.filter(column => !mentionedIds.has(column.id));
|
|
240
|
+
this.commit([...restored, ...rest]);
|
|
119
241
|
}
|
|
120
242
|
/**
|
|
121
243
|
* Group Header Columns
|
|
@@ -161,6 +283,7 @@ export class OgColumnService {
|
|
|
161
283
|
col._resolvedSortable = resolveOneCellRendererParams(col.sortable, params);
|
|
162
284
|
col._resolvedResizable = resolveOneCellRendererParams(col.resizable, params);
|
|
163
285
|
col._resolvedDragable = resolveOneCellRendererParams(col.dragable, params);
|
|
286
|
+
col._resolvedFilterable = resolveOneCellRendererParams(col.filterable, params);
|
|
164
287
|
col._resolvedSuppressHeaderMenuButton = resolveOneCellRendererParams(col.suppressHeaderMenuButton, params);
|
|
165
288
|
return col;
|
|
166
289
|
}
|
|
@@ -185,4 +308,4 @@ export class OgColumnService {
|
|
|
185
308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OgColumnService, decorators: [{
|
|
186
309
|
type: Injectable
|
|
187
310
|
}] });
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ctY29sdW1uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvcmUvc2VydmljZXMvb2ctY29sdW1uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFHdkcsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFHVSxxQkFBZ0IsR0FBaUIsSUFBSSxDQUFDO1FBRTlDOzs7V0FHRztRQUNLLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsRUFBRSxDQUFDLENBQUM7UUFDdEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQXNCLEVBQUUsQ0FBQyxDQUFDO0tBdU96RTtJQXJPQyxjQUFjLENBQUMsZ0JBQThCLEVBQUUsVUFBMEIsRUFBRSxlQUFvQyxFQUFFLFVBQW1CLElBQUk7UUFFdEksSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRXpDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO1FBRVosTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFF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Q3ZGLENBQUM7K0dBaFBVLGVBQWU7bUhBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcywgT25lQ2VsbFJlbmRlcmVyUGFyYW1zLCBPbmVDb2x1bW5EZWYsIE9uZUdyb3VwQ29sdW1uRGVmLCBPbmVIZWFkZXJQcmVzZW50YXRpb25QYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvb25lLWNvbHVtbi1kZWYtdHlwZXMubW9kZWwnO1xuaW1wb3J0IGxvZGFzaCBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ29sdW1uQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL29uZS1ldmVudC10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyByZXNvbHZlQ29sdW1uV2lkdGgsIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL29uZS1jb2x1bW4tZGVmLmhlbHBlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPZ0NvbHVtblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgZGVmYXVsdENvbHVtbkRlZjogT25lQ29sdW1uRGVmID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIGdyaWQncyBgY29udGV4dGAsIHNvIGhlYWRlciBjYWxsYmFja3MgcmVjZWl2ZSB0aGUgc2FtZSBvbmUgY2VsbFxuICAgKiBjYWxsYmFja3MgZG8uIFNldCBkdXJpbmcgaW5pdDsgbnVsbCBpbiBhIGJhcmUgc2VydmljZS5cbiAgICovXG4gIHByaXZhdGUgY29udGV4dDogdW5rbm93biA9IG51bGw7XG4gIHByaXZhdGUgY29sdW1uRGVmcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uZUNvbHVtbkRlZltdPihbXSk7XG4gIHByaXZhdGUgZ3JvdXBDb2x1bW5EZWZzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T25lR3JvdXBDb2x1bW5EZWZbXT4oW10pO1xuXG4gIGluaXRDb2x1bW5EZWZzKGRlZmF1bHRDb2x1bW5EZWY6IE9uZUNvbHVtbkRlZiwgY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10sIGdyb3VwQ29sdW1uRGVmczogT25lR3JvdXBDb2x1bW5EZWZbXSwgY29udGV4dDogdW5rbm93biA9IG51bGwpOiB2b2lkIHtcblxuICAgIHRoaXMuZGVmYXVsdENvbHVtbkRlZiA9IGRlZmF1bHRDb2x1bW5EZWY7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgdGhpcy5zZXRHcm91cENvbHVtbkRlZnMoZ3JvdXBDb2x1bW5EZWZzKTtcbiAgICBcbiAgICB0aGlzLnNldENvbHVtbkRlZnMoY29sdW1uRGVmcyk7XG4gIH1cblxuICBnZXRDb2x1bW5TdGF0ZSgpOiBDb2x1bW5DaGFuZ2VkRXZlbnQge1xuXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcyQuZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBDb2x1bW5EZWZzJC5nZXRWYWx1ZSgpO1xuXG4gICAgcmV0dXJuIHsgY29sdW1ucywgZ3JvdXBzIH07XG4gIH1cblxuICBzZXRHcm91cENvbHVtbkRlZnMoZ3JvdXBDb2x1bW5EZWZzOiBPbmVHcm91cENvbHVtbkRlZltdKTogdm9pZCB7XG5cbiAgICBjb25zdCBncm91cHMgPSBncm91cENvbHVtbkRlZnMubWFwKChncm91cDogT25lR3JvdXBDb2x1bW5EZWYpID0+IHRoaXMucmVzb2x2ZUdyb3VwUHJlc2VudGF0aW9uKGdyb3VwLCB7IGNvbnRleHQ6IHRoaXMuY29udGV4dCB9KSk7XG5cbiAgICB0aGlzLmdyb3VwQ29sdW1uRGVmcyQubmV4dChncm91cHMpO1xuICB9XG5cbiAgc2V0Q29sdW1uRGVmcyhjb2x1bW5EZWZzOiBPbmVDb2x1bW5EZWZbXSk6IHZvaWQge1xuXG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkRlZnMubWFwKChjb2w6IE9uZUNvbHVtbkRlZikgPT4ge1xuXG4gICAgICBjb25zdCBjb2x1bW4gPSB7XG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdENvbHVtbkRlZixcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBpZDogY29sPy5maWVsZCA/IGNvbC5maWVsZCA6IGxvZGFzaC51bmlxdWVJZCgnY29sXycpLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUhlYWRlclByZXNlbnRhdGlvbihjb2x1bW4pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3JkZXJlZCA9IHRoaXMuYXBwbHlQaW5uaW5nKGNvbHVtbnMpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUdyb3VwcyhvcmRlcmVkKTtcblxuICAgIHRoaXMuY29sdW1uRGVmcyQubmV4dChvcmRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHBpbm5lZCBjb2x1bW5zIHRvIHRoZWlyIGVkZ2UgYW5kIG1lYXN1cmUgaG93IGZhciBpbiBlYWNoIG9uZSBzaXRzLlxuICAgKlxuICAgKiBEaXNwbGF5IG9yZGVyIGJlY29tZXMgbGVmdC1waW5uZWQsIHVucGlubmVkLCByaWdodC1waW5uZWQsIHdpdGggZGVjbGFyZWRcbiAgICogb3JkZXIgcHJlc2VydmVkIGluc2lkZSBlYWNoIGJhbmQuIGBfcGlubmVkT2Zmc2V0YCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGF0XG4gICAqIGNvbHVtbidzIG93biBlZGdlIOKAlCB0aGUgc3VtIG9mIHRoZSB3aWR0aHMgb2YgdGhlIHBpbm5lZCBjb2x1bW5zIG91dHNpZGUgaXRcbiAgICog4oCUIHdoaWNoIGlzIHdoYXQgdGhlIHN0aWNreSBgbGVmdGAgLyBgcmlnaHRgIGJpbmRpbmcgbmVlZHMuXG4gICAqXG4gICAqIFdpdGggbm90aGluZyBwaW5uZWQgdGhpcyByZXR1cm5zIHRoZSBzYW1lIGFycmF5LCBpbiB0aGUgc2FtZSBvcmRlciwgc28gYVxuICAgKiBncmlkIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBmZWF0dXJlIGlzIHVuYWZmZWN0ZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5UGlubmluZyhjb2x1bW5zOiBPbmVDb2x1bW5EZWZbXSk6IE9uZUNvbHVtbkRlZltdIHtcblxuICAgIGNvbnN0IGxlZnQgPSBjb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnBpbm5lZCA9PT0gJ2xlZnQnKTtcbiAgICBjb25zdCByaWdodCA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucGlubmVkID09PSAncmlnaHQnKTtcblxuICAgIGlmICghbGVmdC5sZW5ndGggJiYgIXJpZ2h0Lmxlbmd0aCkge1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cbiAgICAgICAgY29sdW1uLl9waW5uZWRPZmZzZXQgPSBudWxsO1xuICAgICAgICBjb2x1bW4uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG4gICAgY29uc3QgY2VudGVyID0gY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5waW5uZWQgIT09ICdsZWZ0JyAmJiBjb2x1bW4ucGlubmVkICE9PSAncmlnaHQnKTtcblxuICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgbGVmdCkge1xuXG4gICAgICBjb2x1bW4uX3Bpbm5lZE9mZnNldCA9IG9mZnNldDtcbiAgICAgIGNvbHVtbi5fcGlubmVkRWRnZSA9IGZhbHNlO1xuXG4gICAgICBvZmZzZXQgKz0gcmVzb2x2ZUNvbHVtbldpZHRoKGNvbHVtbik7XG4gICAgfVxuXG4gICAgLy8gUmlnaHQtcGlubmVkIGNvbHVtbnMgYXJlIG1lYXN1cmVkIGZyb20gdGhlIHJpZ2h0IGVkZ2UgaW53YXJkcywgc28gdGhlXG4gICAgLy8gbGFzdCBkZWNsYXJlZCBvbmUgc2l0cyBmbHVzaCBhbmQgdGhlIGVhcmxpZXIgb25lcyBzdGFjayBvdXRzaWRlIGl0LlxuICAgIG9mZnNldCA9IDA7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IHJpZ2h0Lmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcblxuICAgICAgcmlnaHRbaW5kZXhdLl9waW5uZWRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICByaWdodFtpbmRleF0uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcblxuICAgICAgb2Zmc2V0ICs9IHJlc29sdmVDb2x1bW5XaWR0aChyaWdodFtpbmRleF0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNlbnRlcikge1xuXG4gICAgICBjb2x1bW4uX3Bpbm5lZE9mZnNldCA9IG51bGw7XG4gICAgICBjb2x1bW4uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHRoZSBpbm5lcm1vc3QgY29sdW1uIG9mIGVhY2ggYmFuZCBjYXJyaWVzIHRoZSBkaXZpZGVyLCBzbyBzdGFja2VkXG4gICAgLy8gcGlubmVkIGNvbHVtbnMgZG8gbm90IGVhY2ggY2FzdCBhIHNoYWRvdyBvbnRvIHRoZSBuZXh0LlxuICAgIGlmIChsZWZ0Lmxlbmd0aCkgbGVmdFtsZWZ0Lmxlbmd0aCAtIDFdLl9waW5uZWRFZGdlID0gdHJ1ZTtcbiAgICBpZiAocmlnaHQubGVuZ3RoKSByaWdodFswXS5fcGlubmVkRWRnZSA9IHRydWU7XG5cbiAgICByZXR1cm4gWy4uLmxlZnQsIC4uLmNlbnRlciwgLi4ucmlnaHRdO1xuICB9XG5cbiAgLyoqIFRvdGFsIHdpZHRoIG9mIHRoZSBjb2x1bW5zIGZyb3plbiBhZ2FpbnN0IHRoZSBnaXZlbiBlZGdlLiAqL1xuICBwdWJsaWMgZ2V0UGlubmVkV2lkdGgoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0Jyk6IG51bWJlciB7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5EZWZzJC5nZXRWYWx1ZSgpXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucGlubmVkID09PSBzaWRlKVxuICAgICAgLnJlZHVjZSgodG90YWwsIGNvbHVtbikgPT4gdG90YWwgKyByZXNvbHZlQ29sdW1uV2lkdGgoY29sdW1uKSwgMCk7XG4gIH1cblxuICAvLyBVcGRhdGUgc2luZ2xlIGNvbHVtblxuICB1cGRhdGVDb2x1bW5EZWYoaWQ6IHN0cmluZywgY2hhbmdlczogUGFydGlhbDxPbmVDb2x1bW5EZWY+KTogdm9pZCB7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5TdGF0ZSgpLmNvbHVtbnM7XG5cbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IGNvbHVtbnMubWFwKGNvbCA9PiBjb2wuaWQgPT09IGlkID8geyAuLi5jb2wsIC4uLmNoYW5nZXMgfSA6IGNvbCk7XG5cbiAgICAvLyBSZS1waW5uZWQsIG5vdCBqdXN0IHJlLWdyb3VwZWQ6IHJlc2l6aW5nIGEgcGlubmVkIGNvbHVtbiBjaGFuZ2VzIHdoZXJlXG4gICAgLy8gdGhlIG9uZXMgaW5zaWRlIGl0IGhhdmUgdG8gc2l0LCBhbmQgdGhpcyBpcyB0aGUgcGF0aCBhIGNvbHVtbiByZXNpemVcbiAgICAvLyB0YWtlcy5cbiAgICBjb25zdCBvcmRlcmVkID0gdGhpcy5hcHBseVBpbm5pbmcodXBkYXRlZENvbHVtbnMpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUdyb3VwcyhvcmRlcmVkKTtcblxuICAgIHRoaXMuY29sdW1uRGVmcyQubmV4dChvcmRlcmVkKTtcbiAgfVxuXG4gIC8vIFJlb3JkZXIgY29sdW1uc1xuICByZW9yZGVyQ29sdW1uRGVmcyhmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gbG9kYXNoLmNsb25lKHRoaXMuZ2V0Q29sdW1uU3RhdGUoKS5jb2x1bW5zKTtcblxuICAgIGNvbnN0IFttb3ZlZF0gPSBjb2x1bW5zLnNwbGljZShmcm9tSW5kZXgsIDEpO1xuXG4gICAgY29sdW1ucy5zcGxpY2UodG9JbmRleCwgMCwgbW92ZWQpO1xuXG4gICAgLy8gRHJhZ2dpbmcgY2FuIGRyb3AgYSBjb2x1bW4gYmV0d2VlbiB0d28gcGlubmVkIG9uZXM7IHJlLXBpbm5pbmcgcHV0cyB0aGVcbiAgICAvLyBiYW5kcyBiYWNrIGluIG9yZGVyIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBpbnRlcmxlYXZlZCwgd2hpY2ggd291bGRcbiAgICAvLyBtYWtlIHRoZSBjb21wdXRlZCBvZmZzZXRzIG1lYW5pbmdsZXNzLlxuICAgIHRoaXMuY29sdW1uRGVmcyQubmV4dCh0aGlzLmFwcGx5UGlubmluZyhjb2x1bW5zKSk7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXAgSGVhZGVyIENvbHVtbnNcbiAgICovXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVHcm91cHMoY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10pIHtcblxuICAgIGlmICh0aGlzLmdyb3VwQ29sdW1uRGVmcyQuZ2V0VmFsdWUoKS5sZW5ndGggPiAwKSB7XG5cbiAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBDb2x1bW5EZWZzJC52YWx1ZS5tYXAoZ3JvdXAgPT4gKHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIHdpZHRoOiBjb2x1bW5EZWZzLmZpbHRlcihjID0+IGMuZ3JvdXBJZCA9PT0gZ3JvdXAuaWQpLnJlZHVjZSgoc3VtLCBjb2wpID0+IHN1bSArIHJlc29sdmVDb2x1bW5XaWR0aChjb2wpLCAwKVxuICAgICAgfSkpO1xuXG4gICAgICB0aGlzLmdyb3VwQ29sdW1uRGVmcyQubmV4dChncm91cHMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVHcm91cFByZXNlbnRhdGlvbihjb2w6IE9uZUdyb3VwQ29sdW1uRGVmLCBwYXJhbXM/OiBPbmVDZWxsUmVuZGVyZXJQYXJhbXMpOiBPbmVHcm91cENvbHVtbkRlZiB7XG5cbiAgICBjb2wuX3Jlc29sdmVkR3JvdXBDbGFzcyA9IHR5cGVvZiBjb2wuZ3JvdXBDbGFzcyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5ncm91cENsYXNzKHBhcmFtcykgOiBjb2wuZ3JvdXBDbGFzcztcbiAgICBjb2wuX3Jlc29sdmVkR3JvdXBTdHlsZSA9IHR5cGVvZiBjb2wuZ3JvdXBTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5ncm91cFN0eWxlKHBhcmFtcykgOiBjb2wuZ3JvdXBTdHlsZTtcblxuICAgIHJldHVybiBjb2w7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIGNvbHVtbidzIGhlYWRlciBwcmVzZW50YXRpb24uIE9uY2UgcGVyIGNvbHVtbiwgd2hlbiB0aGUgY29sdW1uc1xuICAgKiBhcmUgc2V0IOKAlCBhIGhlYWRlciBpcyBvbmUgY2VsbCBmb3IgdGhlIHdob2xlIGNvbHVtbiwgc28gdGhlcmUgaXMgbm8gcm93IHRvXG4gICAqIHJlc29sdmUgaXQgYWdhaW5zdCBhbmQgbm90aGluZyB0byByZWRvIHBlciByZW5kZXIuXG4gICAqXG4gICAqIFRoaXMgdXNlZCB0byByZXNvbHZlIHRoZSBjZWxsIGhvb2tzIHRvbywgZnJvbSB0aGUgc2FtZSBjYWxsLCB3aXRoIG5vIHBhcmFtc1xuICAgKiBhdCBhbGwuIFR3byBidWdzIGNhbWUgb3V0IG9mIHRoYXQ6IGFueSBjYWxsYmFjayB0b3VjaGluZyBgcGFyYW1zYCB0aHJldyBhXG4gICAqIFR5cGVFcnJvciBhdCBpbml0LCBhbmQgdGhlIGhlYWRlcidzIHJlc29sdmVkIHZhbHVlIHdhcyB0aGVuIG92ZXJ3cml0dGVuIGJ5XG4gICAqIGV2ZXJ5IGNlbGwgdGhhdCByZW5kZXJlZCwgc2luY2UgdGhlIGJvZHkgcmUtcmFuIHRoZSBzYW1lIG1ldGhvZCBwZXIgY2VsbFxuICAgKiB3aXRoIHJvdyBwYXJhbXMuIEluIGRldiBtb2RlIHRoZSBkaXNhZ3JlZW1lbnQgc3VyZmFjZWQgYXMgTkcwMTAwLlxuICAgKi9cbiAgcmVzb2x2ZUhlYWRlclByZXNlbnRhdGlvbihjb2w6IE9uZUNvbHVtbkRlZik6IE9uZUNvbHVtbkRlZiB7XG5cbiAgICBjb25zdCBwYXJhbXM6IE9uZUhlYWRlclByZXNlbnRhdGlvblBhcmFtcyA9IHtcbiAgICAgIGNvbHVtbkRlZjogY29sLFxuICAgICAgZmllbGQ6IGNvbC5maWVsZCBhcyBzdHJpbmcsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXG4gICAgfTtcblxuICAgIGNvbC5fcmVzb2x2ZWRIZWFkZXJDbGFzcyA9IHR5cGVvZiBjb2wuaGVhZGVyQ2xhc3MgPT09ICdmdW5jdGlvbicgPyBjb2wuaGVhZGVyQ2xhc3MocGFyYW1zKSA6IGNvbC5oZWFkZXJDbGFzcztcbiAgICBjb2wuX3Jlc29sdmVkSGVhZGVyU3R5bGUgPSB0eXBlb2YgY29sLmhlYWRlclN0eWxlID09PSAnZnVuY3Rpb24nID8gY29sLmhlYWRlclN0eWxlKHBhcmFtcykgOiBjb2wuaGVhZGVyU3R5bGU7XG5cbiAgICAvLyBUaGUgaGVhZGVyJ3Mgb3duIHByZWRpY2F0ZXMuIERlY2xhcmVkIGFzIGBib29sZWFuIHwgKChwYXJhbXMpID0+IGJvb2xlYW4pYFxuICAgIC8vIGFuZCByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgY29sdW1uIGluIHRoZSB0ZW1wbGF0ZSwgd2hlcmUgYSBmdW5jdGlvbiBpc1xuICAgIC8vIHNpbXBseSB0cnV0aHkg4oCUIHNvIGBzb3J0YWJsZTogKCkgPT4gZmFsc2VgIHJlbmRlcmVkIGEgc29ydCBidXR0b24gdGhhdCBhXG4gICAgLy8gY29uc3VtZXIgaGFkIGV4cGxpY2l0bHkgYXNrZWQgbm90IHRvIGhhdmUuIFJlc29sdmVkIGhlcmUgdG8gYSByZWFsXG4gICAgLy8gYm9vbGVhbiwgb25jZSwgYmVjYXVzZSBub25lIG9mIHRoZW0gZGVwZW5kcyBvbiBhIHJvdy5cbiAgICBjb2wuX3Jlc29sdmVkU29ydGFibGUgPSByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbC5zb3J0YWJsZSwgcGFyYW1zKTtcbiAgICBjb2wuX3Jlc29sdmVkUmVzaXphYmxlID0gcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2wucmVzaXphYmxlLCBwYXJhbXMpO1xuICAgIGNvbC5fcmVzb2x2ZWREcmFnYWJsZSA9IHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sLmRyYWdhYmxlLCBwYXJhbXMpO1xuICAgIGNvbC5fcmVzb2x2ZWRTdXBwcmVzc0hlYWRlck1lbnVCdXR0b24gPSByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbC5zdXBwcmVzc0hlYWRlck1lbnVCdXR0b24sIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgb25lIGNlbGwncyBjbGFzcywgZm9yIG9uZSByb3cuXG4gICAqXG4gICAqIFB1cmU6IHRoZSByZXN1bHQgaXMgcmV0dXJuZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiBiYWNrIG9udG8gdGhlIGNvbHVtbiBkZWYsXG4gICAqIHdoaWNoIGV2ZXJ5IHJvdyBvZiB0aGF0IGNvbHVtbiBzaGFyZXMuIFdyaXRpbmcgdG8gaXQgd29ya2VkIG9ubHkgYmVjYXVzZVxuICAgKiB0aGUgdGVtcGxhdGUgcmVzb2x2ZWQgYW5kIHJlYWQgaW4gdGhlIHNhbWUgZXhwcmVzc2lvbiDigJQgb25lIHJlbmRlciBvcmRlclxuICAgKiBhd2F5IGZyb20gZXZlcnkgcm93IHNob3dpbmcgdGhlIGxhc3Qgcm93J3MgY2xhc3MuXG4gICAqL1xuICByZXNvbHZlQ2VsbENsYXNzKGNvbDogT25lQ29sdW1uRGVmLCBwYXJhbXM6IE9uZUNlbGxQcmVzZW50YXRpb25QYXJhbXMpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdHlwZW9mIGNvbD8uY2VsbENsYXNzID09PSAnZnVuY3Rpb24nID8gY29sLmNlbGxDbGFzcyhwYXJhbXMpIDogY29sPy5jZWxsQ2xhc3M7XG4gIH1cblxuICAvKiogUmVzb2x2ZSBvbmUgY2VsbCdzIGlubGluZSBzdHlsZSwgZm9yIG9uZSByb3cuIFB1cmUsIGFzIGFib3ZlLiAqL1xuICByZXNvbHZlQ2VsbFN0eWxlKGNvbDogT25lQ29sdW1uRGVmLCBwYXJhbXM6IE9uZUNlbGxQcmVzZW50YXRpb25QYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0eXBlb2YgY29sPy5jZWxsU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjb2wuY2VsbFN0eWxlKHBhcmFtcykgOiBjb2w/LmNlbGxTdHlsZTtcbiAgfVxufSJdfQ==
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ctY29sdW1uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvcmUvc2VydmljZXMvb2ctY29sdW1uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFHdkcsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFHVSxxQkFBZ0IsR0FBaUIsSUFBSSxDQUFDO1FBRTlDOzs7V0FHRztRQUNLLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFFaEM7Ozs7OztXQU1HO1FBQ0ssa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFzQixFQUFFLENBQUMsQ0FBQztLQXlYekU7SUF2WEMsY0FBYyxDQUFDLGdCQUE4QixFQUFFLFVBQTBCLEVBQUUsZUFBb0MsRUFBRSxVQUFtQixJQUFJO1FBRXRJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUV6QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYztRQUVaLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsTUFBTSxNQUFNLEdB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O1FBRW5FLE9BQU8sT0FBTyxHQUFHLEVBQUUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQztJQUN2RixDQUFDOytHQTNZVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9uZUNlbGxQcmVzZW50YXRpb25QYXJhbXMsIE9uZUNlbGxSZW5kZXJlclBhcmFtcywgT25lQ29sdW1uRGVmLCBPbmVDb2x1bW5TdGF0ZUVudHJ5LCBPbmVHcm91cENvbHVtbkRlZiwgT25lSGVhZGVyUHJlc2VudGF0aW9uUGFyYW1zIH0gZnJvbSAnLi4vbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbHVtbkNoYW5nZWRFdmVudCB9IGZyb20gJy4uL21vZGVscy9vbmUtZXZlbnQtdHlwZXMubW9kZWwnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbHVtbldpZHRoLCByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zIH0gZnJvbSAnLi4vLi4vaGVscGVycy9vbmUtY29sdW1uLWRlZi5oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2dDb2x1bW5TZXJ2aWNlIHtcblxuICBwcml2YXRlIGRlZmF1bHRDb2x1bW5EZWY6IE9uZUNvbHVtbkRlZiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBncmlkJ3MgYGNvbnRleHRgLCBzbyBoZWFkZXIgY2FsbGJhY2tzIHJlY2VpdmUgdGhlIHNhbWUgb25lIGNlbGxcbiAgICogY2FsbGJhY2tzIGRvLiBTZXQgZHVyaW5nIGluaXQ7IG51bGwgaW4gYSBiYXJlIHNlcnZpY2UuXG4gICAqL1xuICBwcml2YXRlIGNvbnRleHQ6IHVua25vd24gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBFdmVyeSBjb2x1bW4sIGhpZGRlbiBvbmVzIGluY2x1ZGVkLCBpbiBkaXNwbGF5IG9yZGVyLiBgY29sdW1uRGVmcyRgIGJlbG93XG4gICAqIGNhcnJpZXMgb25seSB0aGUgdmlzaWJsZSBzdWJzZXQg4oCUIGl0IGlzIHdoYXQgdGhlIGhlYWRlciBhbmQgYm9keSByZW5kZXJcbiAgICogZnJvbSwgc28gaGlkaW5nIGEgY29sdW1uIG1lYW5zIGxlYXZpbmcgaXQgb3V0IG9mIHRoZSBlbWlzc2lvbiwgYW5kIGV2ZXJ5XG4gICAqIGNvbnN1bWVyIGtlZXBzIHdvcmtpbmcgd2l0aCBubyBub3Rpb24gb2YgdmlzaWJpbGl0eSBhdCBhbGwuIFRoaXMgbGlzdCBpc1xuICAgKiB3aGF0IHJlbWVtYmVycyBhIGhpZGRlbiBjb2x1bW4ncyBwbGFjZSwgd2lkdGggYW5kIHBpbiBmb3Igd2hlbiBpdCByZXR1cm5zLlxuICAgKi9cbiAgcHJpdmF0ZSBhbGxDb2x1bW5EZWZzOiBPbmVDb2x1bW5EZWZbXSA9IFtdO1xuICBwcml2YXRlIGNvbHVtbkRlZnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPbmVDb2x1bW5EZWZbXT4oW10pO1xuICBwcml2YXRlIGdyb3VwQ29sdW1uRGVmcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uZUdyb3VwQ29sdW1uRGVmW10+KFtdKTtcblxuICBpbml0Q29sdW1uRGVmcyhkZWZhdWx0Q29sdW1uRGVmOiBPbmVDb2x1bW5EZWYsIGNvbHVtbkRlZnM6IE9uZUNvbHVtbkRlZltdLCBncm91cENvbHVtbkRlZnM6IE9uZUdyb3VwQ29sdW1uRGVmW10sIGNvbnRleHQ6IHVua25vd24gPSBudWxsKTogdm9pZCB7XG5cbiAgICB0aGlzLmRlZmF1bHRDb2x1bW5EZWYgPSBkZWZhdWx0Q29sdW1uRGVmO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgIHRoaXMuc2V0R3JvdXBDb2x1bW5EZWZzKGdyb3VwQ29sdW1uRGVmcyk7XG4gICAgXG4gICAgdGhpcy5zZXRDb2x1bW5EZWZzKGNvbHVtbkRlZnMpO1xuICB9XG5cbiAgZ2V0Q29sdW1uU3RhdGUoKTogQ29sdW1uQ2hhbmdlZEV2ZW50IHtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbkRlZnMkLmdldFZhbHVlKCk7XG5cbiAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3VwQ29sdW1uRGVmcyQuZ2V0VmFsdWUoKTtcblxuICAgIHJldHVybiB7IGNvbHVtbnMsIGdyb3VwcyB9O1xuICB9XG5cbiAgc2V0R3JvdXBDb2x1bW5EZWZzKGdyb3VwQ29sdW1uRGVmczogT25lR3JvdXBDb2x1bW5EZWZbXSk6IHZvaWQge1xuXG4gICAgY29uc3QgZ3JvdXBzID0gZ3JvdXBDb2x1bW5EZWZzLm1hcCgoZ3JvdXA6IE9uZUdyb3VwQ29sdW1uRGVmKSA9PiB0aGlzLnJlc29sdmVHcm91cFByZXNlbnRhdGlvbihncm91cCwgeyBjb250ZXh0OiB0aGlzLmNvbnRleHQgfSkpO1xuXG4gICAgdGhpcy5ncm91cENvbHVtbkRlZnMkLm5leHQoZ3JvdXBzKTtcbiAgfVxuXG4gIHNldENvbHVtbkRlZnMoY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10pOiB2b2lkIHtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5EZWZzLm1hcCgoY29sOiBPbmVDb2x1bW5EZWYpID0+IHtcblxuICAgICAgY29uc3QgY29sdW1uID0ge1xuICAgICAgICAuLi50aGlzLmRlZmF1bHRDb2x1bW5EZWYsXG4gICAgICAgIC4uLmNvbCxcbiAgICAgICAgaWQ6IGNvbD8uZmllbGQgPyBjb2wuZmllbGQgOiBsb2Rhc2gudW5pcXVlSWQoJ2NvbF8nKSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVIZWFkZXJQcmVzZW50YXRpb24oY29sdW1uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29tbWl0KGNvbHVtbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLWJhbmQsIHJlLW1lYXN1cmUgYW5kIHB1Ymxpc2ggYSBuZXcgY29sdW1uIGxpc3QuXG4gICAqXG4gICAqIEV2ZXJ5IG11dGF0aW9uIGZ1bm5lbHMgaGVyZSBzbyB0aGUgbWFzdGVyIGxpc3QgYW5kIHRoZSB2aXNpYmxlIGVtaXNzaW9uXG4gICAqIGNhbm5vdCBkcmlmdCBhcGFydC5cbiAgICovXG4gIHByaXZhdGUgY29tbWl0KGNvbHVtbnM6IE9uZUNvbHVtbkRlZltdKTogdm9pZCB7XG5cbiAgICBjb25zdCBvcmRlcmVkID0gdGhpcy5hcHBseVBpbm5pbmcoY29sdW1ucyk7XG5cbiAgICB0aGlzLmFsbENvbHVtbkRlZnMgPSBvcmRlcmVkO1xuXG4gICAgY29uc3QgdmlzaWJsZSA9IG9yZGVyZWQuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmhpZGUpO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUdyb3Vwcyh2aXNpYmxlKTtcblxuICAgIHRoaXMuY29sdW1uRGVmcyQubmV4dCh2aXNpYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHBpbm5lZCBjb2x1bW5zIHRvIHRoZWlyIGVkZ2UgYW5kIG1lYXN1cmUgaG93IGZhciBpbiBlYWNoIG9uZSBzaXRzLlxuICAgKlxuICAgKiBEaXNwbGF5IG9yZGVyIGJlY29tZXMgbGVmdC1waW5uZWQsIHVucGlubmVkLCByaWdodC1waW5uZWQsIHdpdGggZGVjbGFyZWRcbiAgICogb3JkZXIgcHJlc2VydmVkIGluc2lkZSBlYWNoIGJhbmQuIGBfcGlubmVkT2Zmc2V0YCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGF0XG4gICAqIGNvbHVtbidzIG93biBlZGdlIOKAlCB0aGUgc3VtIG9mIHRoZSB3aWR0aHMgb2YgdGhlIHBpbm5lZCBjb2x1bW5zIG91dHNpZGUgaXRcbiAgICog4oCUIHdoaWNoIGlzIHdoYXQgdGhlIHN0aWNreSBgbGVmdGAgLyBgcmlnaHRgIGJpbmRpbmcgbmVlZHMuXG4gICAqXG4gICAqIFdpdGggbm90aGluZyBwaW5uZWQgdGhpcyByZXR1cm5zIHRoZSBzYW1lIGFycmF5LCBpbiB0aGUgc2FtZSBvcmRlciwgc28gYVxuICAgKiBncmlkIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBmZWF0dXJlIGlzIHVuYWZmZWN0ZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5UGlubmluZyhjb2x1bW5zOiBPbmVDb2x1bW5EZWZbXSk6IE9uZUNvbHVtbkRlZltdIHtcblxuICAgIGNvbnN0IGxlZnQgPSBjb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnBpbm5lZCA9PT0gJ2xlZnQnKTtcbiAgICBjb25zdCByaWdodCA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucGlubmVkID09PSAncmlnaHQnKTtcblxuICAgIGlmICghbGVmdC5sZW5ndGggJiYgIXJpZ2h0Lmxlbmd0aCkge1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cbiAgICAgICAgY29sdW1uLl9waW5uZWRPZmZzZXQgPSBudWxsO1xuICAgICAgICBjb2x1bW4uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG4gICAgY29uc3QgY2VudGVyID0gY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5waW5uZWQgIT09ICdsZWZ0JyAmJiBjb2x1bW4ucGlubmVkICE9PSAncmlnaHQnKTtcblxuICAgIC8vIEhpZGRlbiBjb2x1bW5zIGtlZXAgdGhlaXIgcGxhY2UgaW4gdGhlIGJhbmQgYnV0IHRha2UgdXAgbm8gc3BhY2UsIHNvXG4gICAgLy8gdGhleSBhcmUgc2tpcHBlZCB3aGVuIG1lYXN1cmluZyBvZmZzZXRzIGFuZCBuZXZlciBjYXJyeSB0aGUgZGl2aWRlci5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGxlZnQpIHtcblxuICAgICAgY29sdW1uLl9waW5uZWRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICBjb2x1bW4uX3Bpbm5lZEVkZ2UgPSBmYWxzZTtcblxuICAgICAgaWYgKCFjb2x1bW4uaGlkZSkgb2Zmc2V0ICs9IHJlc29sdmVDb2x1bW5XaWR0aChjb2x1bW4pO1xuICAgIH1cblxuICAgIC8vIFJpZ2h0LXBpbm5lZCBjb2x1bW5zIGFyZSBtZWFzdXJlZCBmcm9tIHRoZSByaWdodCBlZGdlIGlud2FyZHMsIHNvIHRoZVxuICAgIC8vIGxhc3QgZGVjbGFyZWQgb25lIHNpdHMgZmx1c2ggYW5kIHRoZSBlYXJsaWVyIG9uZXMgc3RhY2sgb3V0c2lkZSBpdC5cbiAgICBvZmZzZXQgPSAwO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSByaWdodC5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG5cbiAgICAgIHJpZ2h0W2luZGV4XS5fcGlubmVkT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgcmlnaHRbaW5kZXhdLl9waW5uZWRFZGdlID0gZmFsc2U7XG5cbiAgICAgIGlmICghcmlnaHRbaW5kZXhdLmhpZGUpIG9mZnNldCArPSByZXNvbHZlQ29sdW1uV2lkdGgocmlnaHRbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjZW50ZXIpIHtcblxuICAgICAgY29sdW1uLl9waW5uZWRPZmZzZXQgPSBudWxsO1xuICAgICAgY29sdW1uLl9waW5uZWRFZGdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT25seSB0aGUgaW5uZXJtb3N0IHZpc2libGUgY29sdW1uIG9mIGVhY2ggYmFuZCBjYXJyaWVzIHRoZSBkaXZpZGVyLCBzb1xuICAgIC8vIHN0YWNrZWQgcGlubmVkIGNvbHVtbnMgZG8gbm90IGVhY2ggY2FzdCBhIHNoYWRvdyBvbnRvIHRoZSBuZXh0LlxuICAgIGNvbnN0IGxlZnRWaXNpYmxlID0gbGVmdC5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4uaGlkZSk7XG4gICAgY29uc3QgcmlnaHRWaXNpYmxlID0gcmlnaHQuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmhpZGUpO1xuXG4gICAgaWYgKGxlZnRWaXNpYmxlLmxlbmd0aCkgbGVmdFZpc2libGVbbGVmdFZpc2libGUubGVuZ3RoIC0gMV0uX3Bpbm5lZEVkZ2UgPSB0cnVlO1xuICAgIGlmIChyaWdodFZpc2libGUubGVuZ3RoKSByaWdodFZpc2libGVbMF0uX3Bpbm5lZEVkZ2UgPSB0cnVlO1xuXG4gICAgcmV0dXJuIFsuLi5sZWZ0LCAuLi5jZW50ZXIsIC4uLnJpZ2h0XTtcbiAgfVxuXG4gIC8qKiBUb3RhbCB3aWR0aCBvZiB0aGUgdmlzaWJsZSBjb2x1bW5zIGZyb3plbiBhZ2FpbnN0IHRoZSBnaXZlbiBlZGdlLiAqL1xuICBwdWJsaWMgZ2V0UGlubmVkV2lkdGgoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0Jyk6IG51bWJlciB7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5EZWZzJC5nZXRWYWx1ZSgpXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucGlubmVkID09PSBzaWRlKVxuICAgICAgLnJlZHVjZSgodG90YWwsIGNvbHVtbikgPT4gdG90YWwgKyByZXNvbHZlQ29sdW1uV2lkdGgoY29sdW1uKSwgMCk7XG4gIH1cblxuICAvLyBVcGRhdGUgc2luZ2xlIGNvbHVtbi4gV29ya3Mgb24gdGhlIG1hc3RlciBsaXN0LCBzbyBhIGhpZGRlbiBjb2x1bW4gY2FuIGJlXG4gIC8vIHBhdGNoZWQg4oCUIGluY2x1ZGluZyBgaGlkZWAgaXRzZWxmLCB3aGljaCBpcyBob3cgdmlzaWJpbGl0eSB0b2dnbGVzLlxuICB1cGRhdGVDb2x1bW5EZWYoaWQ6IHN0cmluZywgY2hhbmdlczogUGFydGlhbDxPbmVDb2x1bW5EZWY+KTogdm9pZCB7XG5cbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IHRoaXMuYWxsQ29sdW1uRGVmcy5tYXAoY29sID0+IGNvbC5pZCA9PT0gaWQgPyB7IC4uLmNvbCwgLi4uY2hhbmdlcyB9IDogY29sKTtcblxuICAgIC8vIFJlLXBpbm5lZCAoaW5zaWRlIGNvbW1pdCksIG5vdCBqdXN0IHJlLWdyb3VwZWQ6IHJlc2l6aW5nIGEgcGlubmVkIGNvbHVtblxuICAgIC8vIGNoYW5nZXMgd2hlcmUgdGhlIG9uZXMgaW5zaWRlIGl0IGhhdmUgdG8gc2l0LCBhbmQgdGhpcyBpcyB0aGUgcGF0aCBhXG4gICAgLy8gY29sdW1uIHJlc2l6ZSB0YWtlcy5cbiAgICB0aGlzLmNvbW1pdCh1cGRhdGVkQ29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmVvcmRlciBjb2x1bW5zLiBUaGUgaW5kZXhlcyBhcmUgKnZpc2libGUqIHBvc2l0aW9ucyDigJQgdGhleSBjb21lIGZyb20gdGhlXG4gICAqIGhlYWRlciwgd2hpY2ggb25seSByZW5kZXJzIHZpc2libGUgY29sdW1ucyDigJQgc28gdGhleSBhcmUgbWFwcGVkIG9udG8gdGhlXG4gICAqIG1hc3RlciBsaXN0IGJlZm9yZSBzcGxpY2luZy4gQSBoaWRkZW4gY29sdW1uIGJldHdlZW4gdGhlIHR3byBrZWVwcyBpdHNcbiAgICogcGxhY2UgcmVsYXRpdmUgdG8gaXRzIG5laWdoYm91cnMuXG4gICAqL1xuICByZW9yZGVyQ29sdW1uRGVmcyhmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gbG9kYXNoLmNsb25lKHRoaXMuYWxsQ29sdW1uRGVmcyk7XG4gICAgY29uc3QgdmlzaWJsZSA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmhpZGUpO1xuXG4gICAgY29uc3QgbW92ZWQgPSB2aXNpYmxlW2Zyb21JbmRleF07XG5cbiAgICBpZiAoIW1vdmVkKSByZXR1cm47XG5cbiAgICBjb2x1bW5zLnNwbGljZShjb2x1bW5zLmluZGV4T2YobW92ZWQpLCAxKTtcblxuICAgIC8vIExhbmQgYmVmb3JlIHRoZSB2aXNpYmxlIGNvbHVtbiBub3cgYXQgdGhlIHRhcmdldCBpbmRleCDigJQgdGhlIHNhbWUgc3BsaWNlXG4gICAgLy8gdGhlIHZpc2libGUtb25seSBsaXN0IHVzZWQgdG8gZG8gYWZ0ZXIgcmVtb3ZhbCDigJQgb3IgYXQgdGhlIGVuZCB3aGVuIHRoZVxuICAgIC8vIHRhcmdldCBpcyBwYXN0IHRoZSBsYXN0IHZpc2libGUgY29sdW1uLlxuICAgIGNvbnN0IHZpc2libGVBZnRlciA9IHZpc2libGUuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4gIT09IG1vdmVkKTtcbiAgICBjb25zdCBhbmNob3IgPSB2aXNpYmxlQWZ0ZXJbdG9JbmRleF07XG5cbiAgICBjb2x1bW5zLnNwbGljZShhbmNob3IgPyBjb2x1bW5zLmluZGV4T2YoYW5jaG9yKSA6IGNvbHVtbnMubGVuZ3RoLCAwLCBtb3ZlZCk7XG5cbiAgICAvLyBEcmFnZ2luZyBjYW4gZHJvcCBhIGNvbHVtbiBiZXR3ZWVuIHR3byBwaW5uZWQgb25lczsgcmUtcGlubmluZyAoaW5zaWRlXG4gICAgLy8gY29tbWl0KSBwdXRzIHRoZSBiYW5kcyBiYWNrIGluIG9yZGVyIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbVxuICAgIC8vIGludGVybGVhdmVkLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBjb21wdXRlZCBvZmZzZXRzIG1lYW5pbmdsZXNzLlxuICAgIHRoaXMuY29tbWl0KGNvbHVtbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3RyaWJ1dGUgdGhlIHZpZXdwb3J0IHdpZHRoIGxlZnQgb3ZlciBieSBmaXhlZCBjb2x1bW5zIGFtb25nIHRoZSBmbGV4XG4gICAqIG9uZXMsIGluIHByb3BvcnRpb24gdG8gdGhlaXIgYGZsZXhgIHZhbHVlcyBhbmQgY2xhbXBlZCB0byB0aGVpciBib3VuZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYW55IHdpZHRoIGFjdHVhbGx5IGNoYW5nZWQg4oCUIHRoZSBjYWxsZXIgb25seSBkaXNwYXRjaGVzXG4gICAqIChhbmQgdGhlIGJvZHkgb25seSByZS10cmlnZ2Vycykgb24gYSByZWFsIGNoYW5nZSwgd2hpY2ggaXMgd2hhdCB0ZXJtaW5hdGVzXG4gICAqIHRoZSBjb2x1bW5DaGFuZ2VkIOKGkiBmbGV4IOKGkiBjb2x1bW5DaGFuZ2VkIGxvb3AuXG4gICAqL1xuICBhcHBseUZsZXhXaWR0aHMoYXZhaWxhYmxlV2lkdGg6IG51bWJlcik6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuY29sdW1uRGVmcyQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBmbGV4Q29sdW1ucyA9IHZpc2libGUuZmlsdGVyKGNvbHVtbiA9PiAoY29sdW1uLmZsZXggPz8gMCkgPiAwKTtcblxuICAgIGlmICghZmxleENvbHVtbnMubGVuZ3RoIHx8ICEoYXZhaWxhYmxlV2lkdGggPiAwKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZml4ZWRXaWR0aCA9IHZpc2libGVcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+ICEoKGNvbHVtbi5mbGV4ID8/IDApID4gMCkpXG4gICAgICAucmVkdWNlKCh0b3RhbCwgY29sdW1uKSA9PiB0b3RhbCArIHJlc29sdmVDb2x1bW5XaWR0aChjb2x1bW4pLCAwKTtcblxuICAgIGxldCByZW1haW5pbmcgPSBNYXRoLm1heChhdmFpbGFibGVXaWR0aCAtIGZpeGVkV2lkdGgsIDApO1xuXG4gICAgLy8gQ2xhbXBlZCBjb2x1bW5zIHN0b3AgZmxleGluZyBhbmQgcmVsZWFzZSB0aGVpciBzaGFyZSB0byB0aGUgcmVzdCwgc29cbiAgICAvLyB0aGUgcGFzcyByZXBlYXRzIHVudGlsIHRoZSBzcGxpdCBpcyBzdGFibGUuIEVhY2ggcGFzcyBzZXR0bGVzIGF0IGxlYXN0XG4gICAgLy8gb25lIGNvbHVtbjsgdGhlIGxvb3AgaXMgYm91bmRlZCBieSB0aGUgY29sdW1uIGNvdW50LlxuICAgIGNvbnN0IHdpZHRocyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgbGV0IHVuc2V0dGxlZCA9IFsuLi5mbGV4Q29sdW1uc107XG5cbiAgICB3aGlsZSAodW5zZXR0bGVkLmxlbmd0aCkge1xuXG4gICAgICBjb25zdCB0b3RhbEZsZXggPSB1bnNldHRsZWQucmVkdWNlKCh0b3RhbCwgY29sdW1uKSA9PiB0b3RhbCArIChjb2x1bW4uZmxleCA/PyAwKSwgMCk7XG4gICAgICBjb25zdCBzaGFyZSA9IHJlbWFpbmluZyAvIHRvdGFsRmxleDtcblxuICAgICAgY29uc3QgY2xhbXBlZCA9IHVuc2V0dGxlZC5maWx0ZXIoY29sdW1uID0+IHtcblxuICAgICAgICBjb25zdCBpZGVhbCA9IHNoYXJlICogKGNvbHVtbi5mbGV4ID8/IDApO1xuICAgICAgICBjb25zdCBtaW4gPSBNYXRoLm1heChjb2x1bW4ubWluV2lkdGggPz8gMCwgNTApO1xuICAgICAgICBjb25zdCBtYXggPSBjb2x1bW4ubWF4V2lkdGggPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKE1hdGgubWF4KGlkZWFsLCBtaW4pLCBtYXgpO1xuXG4gICAgICAgIGlmICh3aWR0aCA9PT0gaWRlYWwpIHJldHVybiBmYWxzZTtcblxuICAgICAgICB3aWR0aHMuc2V0KGNvbHVtbi5pZCwgTWF0aC5yb3VuZCh3aWR0aCkpO1xuICAgICAgICByZW1haW5pbmcgPSBNYXRoLm1heChyZW1haW5pbmcgLSB3aWR0aCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgdW5zZXR0bGVkID0gdW5zZXR0bGVkLmZpbHRlcihjb2x1bW4gPT4gIWNsYW1wZWQuaW5jbHVkZXMoY29sdW1uKSk7XG5cbiAgICAgIGlmICghY2xhbXBlZC5sZW5ndGgpIHtcblxuICAgICAgICB1bnNldHRsZWQuZm9yRWFjaChjb2x1bW4gPT4gd2lkdGhzLnNldChjb2x1bW4uaWQsIE1hdGguZmxvb3Ioc2hhcmUgKiAoY29sdW1uLmZsZXggPz8gMCkpKSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbmdlZCA9IGZsZXhDb2x1bW5zLnNvbWUoY29sdW1uID0+IHdpZHRocy5nZXQoY29sdW1uLmlkKSAhPT0gcmVzb2x2ZUNvbHVtbldpZHRoKGNvbHVtbikpO1xuXG4gICAgaWYgKCFjaGFuZ2VkKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0aGlzLmNvbW1pdCh0aGlzLmFsbENvbHVtbkRlZnMubWFwKGNvbHVtbiA9PlxuICAgICAgd2lkdGhzLmhhcyhjb2x1bW4uaWQpID8geyAuLi5jb2x1bW4sIHdpZHRoOiB3aWR0aHMuZ2V0KGNvbHVtbi5pZCkgfSA6IGNvbHVtbikpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogT25lIEpTT04tc2FmZSBlbnRyeSBwZXIgY29sdW1uIOKAlCBoaWRkZW4gb25lcyBpbmNsdWRlZCDigJQgaW4gZGlzcGxheSBvcmRlci5cbiAgICovXG4gIGdldENvbHVtblN0YXRlU25hcHNob3QoKTogT25lQ29sdW1uU3RhdGVFbnRyeVtdIHtcblxuICAgIHJldHVybiB0aGlzLmFsbENvbHVtbkRlZnMubWFwKGNvbHVtbiA9PiB7XG5cbiAgICAgIGNvbnN0IGVudHJ5OiBPbmVDb2x1bW5TdGF0ZUVudHJ5ID0geyBpZDogY29sdW1uLmlkLCBoaWRlOiAhIWNvbHVtbi5oaWRlLCBwaW5uZWQ6IGNvbHVtbi5waW5uZWQgPz8gbnVsbCB9O1xuXG4gICAgICBpZiAoY29sdW1uLndpZHRoICE9IG51bGwpIGVudHJ5LndpZHRoID0gY29sdW1uLndpZHRoO1xuXG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSBhIHNhdmVkIHNuYXBzaG90OiBvcmRlciwgd2lkdGgsIHBpbiBhbmQgdmlzaWJpbGl0eS5cbiAgICpcbiAgICogRW50cmllcyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gYW5kIGJlY29tZSB0aGUgZnJvbnQgb2YgdGhlIG5ld1xuICAgKiBjb2x1bW4gb3JkZXI7IGNvbHVtbnMgdGhlIHNuYXBzaG90IGRvZXMgbm90IG1lbnRpb24ga2VlcCB0aGVpciBjdXJyZW50XG4gICAqIHJlbGF0aXZlIG9yZGVyIGJlaGluZCB0aGVtLCBhbmQgaWRzIHRoZSBncmlkIG5vIGxvbmdlciBoYXMgYXJlIHNraXBwZWQg4oCUXG4gICAqIHNvIGEgc3RhbGUgc25hcHNob3QgZGVncmFkZXMgdG8gYSBwYXJ0aWFsIHJlc3RvcmUgaW5zdGVhZCBvZiBhbiBlcnJvci5cbiAgICogT25seSB0aGUgcHJvcGVydGllcyBwcmVzZW50IG9uIGFuIGVudHJ5IGFyZSBhcHBsaWVkLlxuICAgKi9cbiAgYXBwbHlDb2x1bW5TdGF0ZShlbnRyaWVzOiBPbmVDb2x1bW5TdGF0ZUVudHJ5W10pOiB2b2lkIHtcblxuICAgIGNvbnN0IGJ5SWQgPSBuZXcgTWFwKHRoaXMuYWxsQ29sdW1uRGVmcy5tYXAoY29sdW1uID0+IFtjb2x1bW4uaWQsIGNvbHVtbl0pKTtcblxuICAgIGNvbnN0IG1lbnRpb25lZCA9IChlbnRyaWVzID8/IFtdKS5maWx0ZXIoZW50cnkgPT4gZW50cnkgJiYgYnlJZC5oYXMoZW50cnkuaWQpKTtcbiAgICBjb25zdCBtZW50aW9uZWRJZHMgPSBuZXcgU2V0KG1lbnRpb25lZC5tYXAoZW50cnkgPT4gZW50cnkuaWQpKTtcblxuICAgIGNvbnN0IHJlc3RvcmVkID0gbWVudGlvbmVkLm1hcChlbnRyeSA9PiB7XG5cbiAgICAgIGNvbnN0IGNvbHVtbiA9IHsgLi4uYnlJZC5nZXQoZW50cnkuaWQpIH07XG5cbiAgICAgIGlmIChlbnRyeS53aWR0aCAhPSBudWxsKSBjb2x1bW4ud2lkdGggPSBlbnRyeS53aWR0aDtcbiAgICAgIGlmICgncGlubmVkJyBpbiBlbnRyeSkgY29sdW1uLnBpbm5lZCA9IGVudHJ5LnBpbm5lZCA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAoJ2hpZGUnIGluIGVudHJ5KSBjb2x1bW4uaGlkZSA9ICEhZW50cnkuaGlkZTtcblxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3QgPSB0aGlzLmFsbENvbHVtbkRlZnMuZmlsdGVyKGNvbHVtbiA9PiAhbWVudGlvbmVkSWRzLmhhcyhjb2x1bW4uaWQpKTtcblxuICAgIHRoaXMuY29tbWl0KFsuLi5yZXN0b3JlZCwgLi4ucmVzdF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwIEhlYWRlciBDb2x1bW5zXG4gICAqL1xuICBwcml2YXRlIHJlY2FsY3VsYXRlR3JvdXBzKGNvbHVtbkRlZnM6IE9uZUNvbHVtbkRlZltdKSB7XG5cbiAgICBpZiAodGhpcy5ncm91cENvbHVtbkRlZnMkLmdldFZhbHVlKCkubGVuZ3RoID4gMCkge1xuXG4gICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3VwQ29sdW1uRGVmcyQudmFsdWUubWFwKGdyb3VwID0+ICh7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICB3aWR0aDogY29sdW1uRGVmcy5maWx0ZXIoYyA9PiBjLmdyb3VwSWQgPT09IGdyb3VwLmlkKS5yZWR1Y2UoKHN1bSwgY29sKSA9PiBzdW0gKyByZXNvbHZlQ29sdW1uV2lkdGgoY29sKSwgMClcbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5ncm91cENvbHVtbkRlZnMkLm5leHQoZ3JvdXBzKTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlR3JvdXBQcmVzZW50YXRpb24oY29sOiBPbmVHcm91cENvbHVtbkRlZiwgcGFyYW1zPzogT25lQ2VsbFJlbmRlcmVyUGFyYW1zKTogT25lR3JvdXBDb2x1bW5EZWYge1xuXG4gICAgY29sLl9yZXNvbHZlZEdyb3VwQ2xhc3MgPSB0eXBlb2YgY29sLmdyb3VwQ2xhc3MgPT09ICdmdW5jdGlvbicgPyBjb2wuZ3JvdXBDbGFzcyhwYXJhbXMpIDogY29sLmdyb3VwQ2xhc3M7XG4gICAgY29sLl9yZXNvbHZlZEdyb3VwU3R5bGUgPSB0eXBlb2YgY29sLmdyb3VwU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjb2wuZ3JvdXBTdHlsZShwYXJhbXMpIDogY29sLmdyb3VwU3R5bGU7XG5cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBjb2x1bW4ncyBoZWFkZXIgcHJlc2VudGF0aW9uLiBPbmNlIHBlciBjb2x1bW4sIHdoZW4gdGhlIGNvbHVtbnNcbiAgICogYXJlIHNldCDigJQgYSBoZWFkZXIgaXMgb25lIGNlbGwgZm9yIHRoZSB3aG9sZSBjb2x1bW4sIHNvIHRoZXJlIGlzIG5vIHJvdyB0b1xuICAgKiByZXNvbHZlIGl0IGFnYWluc3QgYW5kIG5vdGhpbmcgdG8gcmVkbyBwZXIgcmVuZGVyLlxuICAgKlxuICAgKiBUaGlzIHVzZWQgdG8gcmVzb2x2ZSB0aGUgY2VsbCBob29rcyB0b28sIGZyb20gdGhlIHNhbWUgY2FsbCwgd2l0aCBubyBwYXJhbXNcbiAgICogYXQgYWxsLiBUd28gYnVncyBjYW1lIG91dCBvZiB0aGF0OiBhbnkgY2FsbGJhY2sgdG91Y2hpbmcgYHBhcmFtc2AgdGhyZXcgYVxuICAgKiBUeXBlRXJyb3IgYXQgaW5pdCwgYW5kIHRoZSBoZWFkZXIncyByZXNvbHZlZCB2YWx1ZSB3YXMgdGhlbiBvdmVyd3JpdHRlbiBieVxuICAgKiBldmVyeSBjZWxsIHRoYXQgcmVuZGVyZWQsIHNpbmNlIHRoZSBib2R5IHJlLXJhbiB0aGUgc2FtZSBtZXRob2QgcGVyIGNlbGxcbiAgICogd2l0aCByb3cgcGFyYW1zLiBJbiBkZXYgbW9kZSB0aGUgZGlzYWdyZWVtZW50IHN1cmZhY2VkIGFzIE5HMDEwMC5cbiAgICovXG4gIHJlc29sdmVIZWFkZXJQcmVzZW50YXRpb24oY29sOiBPbmVDb2x1bW5EZWYpOiBPbmVDb2x1bW5EZWYge1xuXG4gICAgY29uc3QgcGFyYW1zOiBPbmVIZWFkZXJQcmVzZW50YXRpb25QYXJhbXMgPSB7XG4gICAgICBjb2x1bW5EZWY6IGNvbCxcbiAgICAgIGZpZWxkOiBjb2wuZmllbGQgYXMgc3RyaW5nLFxuICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxuICAgIH07XG5cbiAgICBjb2wuX3Jlc29sdmVkSGVhZGVyQ2xhc3MgPSB0eXBlb2YgY29sLmhlYWRlckNsYXNzID09PSAnZnVuY3Rpb24nID8gY29sLmhlYWRlckNsYXNzKHBhcmFtcykgOiBjb2wuaGVhZGVyQ2xhc3M7XG4gICAgY29sLl9yZXNvbHZlZEhlYWRlclN0eWxlID0gdHlwZW9mIGNvbC5oZWFkZXJTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5oZWFkZXJTdHlsZShwYXJhbXMpIDogY29sLmhlYWRlclN0eWxlO1xuXG4gICAgLy8gVGhlIGhlYWRlcidzIG93biBwcmVkaWNhdGVzLiBEZWNsYXJlZCBhcyBgYm9vbGVhbiB8ICgocGFyYW1zKSA9PiBib29sZWFuKWBcbiAgICAvLyBhbmQgcmVhZCBzdHJhaWdodCBvZmYgdGhlIGNvbHVtbiBpbiB0aGUgdGVtcGxhdGUsIHdoZXJlIGEgZnVuY3Rpb24gaXNcbiAgICAvLyBzaW1wbHkgdHJ1dGh5IOKAlCBzbyBgc29ydGFibGU6ICgpID0+IGZhbHNlYCByZW5kZXJlZCBhIHNvcnQgYnV0dG9uIHRoYXQgYVxuICAgIC8vIGNvbnN1bWVyIGhhZCBleHBsaWNpdGx5IGFza2VkIG5vdCB0byBoYXZlLiBSZXNvbHZlZCBoZXJlIHRvIGEgcmVhbFxuICAgIC8vIGJvb2xlYW4sIG9uY2UsIGJlY2F1c2Ugbm9uZSBvZiB0aGVtIGRlcGVuZHMgb24gYSByb3cuXG4gICAgY29sLl9yZXNvbHZlZFNvcnRhYmxlID0gcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2wuc29ydGFibGUsIHBhcmFtcyk7XG4gICAgY29sLl9yZXNvbHZlZFJlc2l6YWJsZSA9IHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sLnJlc2l6YWJsZSwgcGFyYW1zKTtcbiAgICBjb2wuX3Jlc29sdmVkRHJhZ2FibGUgPSByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbC5kcmFnYWJsZSwgcGFyYW1zKTtcbiAgICBjb2wuX3Jlc29sdmVkRmlsdGVyYWJsZSA9IHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sLmZpbHRlcmFibGUsIHBhcmFtcyk7XG4gICAgY29sLl9yZXNvbHZlZFN1cHByZXNzSGVhZGVyTWVudUJ1dHRvbiA9IHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sLnN1cHByZXNzSGVhZGVyTWVudUJ1dHRvbiwgcGFyYW1zKTtcblxuICAgIHJldHVybiBjb2w7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBvbmUgY2VsbCdzIGNsYXNzLCBmb3Igb25lIHJvdy5cbiAgICpcbiAgICogUHVyZTogdGhlIHJlc3VsdCBpcyByZXR1cm5lZCByYXRoZXIgdGhhbiB3cml0dGVuIGJhY2sgb250byB0aGUgY29sdW1uIGRlZixcbiAgICogd2hpY2ggZXZlcnkgcm93IG9mIHRoYXQgY29sdW1uIHNoYXJlcy4gV3JpdGluZyB0byBpdCB3b3JrZWQgb25seSBiZWNhdXNlXG4gICAqIHRoZSB0ZW1wbGF0ZSByZXNvbHZlZCBhbmQgcmVhZCBpbiB0aGUgc2FtZSBleHByZXNzaW9uIOKAlCBvbmUgcmVuZGVyIG9yZGVyXG4gICAqIGF3YXkgZnJvbSBldmVyeSByb3cgc2hvd2luZyB0aGUgbGFzdCByb3cncyBjbGFzcy5cbiAgICovXG4gIHJlc29sdmVDZWxsQ2xhc3MoY29sOiBPbmVDb2x1bW5EZWYsIHBhcmFtczogT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcyk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0eXBlb2YgY29sPy5jZWxsQ2xhc3MgPT09ICdmdW5jdGlvbicgPyBjb2wuY2VsbENsYXNzKHBhcmFtcykgOiBjb2w/LmNlbGxDbGFzcztcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIG9uZSBjZWxsJ3MgaW5saW5lIHN0eWxlLCBmb3Igb25lIHJvdy4gUHVyZSwgYXMgYWJvdmUuICovXG4gIHJlc29sdmVDZWxsU3R5bGUoY29sOiBPbmVDb2x1bW5EZWYsIHBhcmFtczogT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHR5cGVvZiBjb2w/LmNlbGxTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC5jZWxsU3R5bGUocGFyYW1zKSA6IGNvbD8uY2VsbFN0eWxlO1xuICB9XG59Il19
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { resolveOneCellRendererParams, resolveOneValueGetterParams } from '../../helpers/one-column-def.helper';
|
|
4
|
-
import { CellValueGetterPipe } from '../pipes/cell-value-getter.pipe';
|
|
5
|
-
import { CellFieldValuePipe } from '../pipes/cell-field-value.pipe';
|
|
2
|
+
import { isCellEmpty, readCellValue } from '../../helpers/one-cell.helper';
|
|
3
|
+
import { resolveCellValueGetter, resolveOneCellRendererParams, resolveOneValueGetterParams } from '../../helpers/one-column-def.helper';
|
|
6
4
|
import * as i0 from "@angular/core";
|
|
7
5
|
export class OneGridCellService {
|
|
8
6
|
constructor() {
|
|
9
|
-
this._cellFieldValueEmpty = new CellFieldValueEmptyPipe();
|
|
10
|
-
this._cellValueGetter = new CellValueGetterPipe();
|
|
11
|
-
this._cellFieldValue = new CellFieldValuePipe();
|
|
12
7
|
this._columnDefs = [];
|
|
13
8
|
this._api = null;
|
|
14
9
|
// ---------------------------------------------------------------------------
|
|
@@ -103,8 +98,8 @@ export class OneGridCellService {
|
|
|
103
98
|
*/
|
|
104
99
|
resolveValue(node, column) {
|
|
105
100
|
return column?.valueGetter
|
|
106
|
-
?
|
|
107
|
-
:
|
|
101
|
+
? resolveCellValueGetter(node.data, node, column, this._context)
|
|
102
|
+
: readCellValue(node.data, column.field);
|
|
108
103
|
}
|
|
109
104
|
/**
|
|
110
105
|
* Apply the column's `valueFormatter`.
|
|
@@ -162,7 +157,7 @@ export class OneGridCellService {
|
|
|
162
157
|
if (!field) {
|
|
163
158
|
return { type: 'none', value: '' };
|
|
164
159
|
}
|
|
165
|
-
const isEmpty =
|
|
160
|
+
const isEmpty = isCellEmpty(node.data, field);
|
|
166
161
|
const isGroup = node.group || node.leafGroup;
|
|
167
162
|
const isAutoGroup = column?.autoGroupField;
|
|
168
163
|
if (column && column.cellRenderer && !isGroup) {
|
|
@@ -174,7 +169,7 @@ export class OneGridCellService {
|
|
|
174
169
|
}
|
|
175
170
|
// 1. Cell Group Placeholder
|
|
176
171
|
if (isEmpty && isGroup && isAutoGroup) {
|
|
177
|
-
return { type: 'placeholder', value: this.resolvePlaceholder(node, column) ??
|
|
172
|
+
return { type: 'placeholder', value: this.resolvePlaceholder(node, column) ?? resolveCellValueGetter(node.data, node, column, this._context) ?? '' };
|
|
178
173
|
}
|
|
179
174
|
// 2. Cell Group Text Value
|
|
180
175
|
if (isGroup && isAutoGroup) {
|
|
@@ -189,7 +184,7 @@ export class OneGridCellService {
|
|
|
189
184
|
// indented by level. Excluding it dropped every leaf through to case 5 and
|
|
190
185
|
// rendered the group column blank for the whole bottom row of a tree.
|
|
191
186
|
if (isEmpty && !isGroup) {
|
|
192
|
-
const valueGetter =
|
|
187
|
+
const valueGetter = resolveCellValueGetter(node.data, node, column, this._context);
|
|
193
188
|
if (valueGetter) {
|
|
194
189
|
return { type: 'text', value: this.formatValue(node, column, valueGetter) };
|
|
195
190
|
}
|
|
@@ -201,7 +196,14 @@ export class OneGridCellService {
|
|
|
201
196
|
const value = this.formatValue(node, column, this.resolveValue(node, column));
|
|
202
197
|
return { type: 'text', value: value ?? '' };
|
|
203
198
|
}
|
|
204
|
-
// 5.
|
|
199
|
+
// 5. A group row outside the group column: render the value when the row
|
|
200
|
+
// actually carries one — aggregates land in these cells, and a tree
|
|
201
|
+
// parent's own data belongs on screen too. Blank stays blank.
|
|
202
|
+
if (!isEmpty) {
|
|
203
|
+
const value = this.formatValue(node, column, this.resolveValue(node, column));
|
|
204
|
+
return { type: 'text', value: value ?? '' };
|
|
205
|
+
}
|
|
206
|
+
// 6. Default
|
|
205
207
|
return { type: 'none', value: '' };
|
|
206
208
|
}
|
|
207
209
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -210,4 +212,4 @@ export class OneGridCellService {
|
|
|
210
212
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellService, decorators: [{
|
|
211
213
|
type: Injectable
|
|
212
214
|
}] });
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWNlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUlwRSxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBR1UseUJBQW9CLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JELHFCQUFnQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxvQkFBZSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFtQixFQUFFLENBQUM7UUFFakMsU0FBSSxHQUFzQixJQUFJLENBQUM7UUFxTnZDLDhFQUE4RTtRQUM5RSwrQkFBK0I7UUFDL0IsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSw4RUFBOEU7UUFDOUUsa0VBQWtFO1FBQ2xFLDhFQUE4RTtRQUU5RSw0RUFBNEU7UUFDckUsZUFBVSxHQUFHLENBQUMsTUFBb0IsRUFBRSxJQUFnQixFQUFXLEVBQUUsQ0FDdEUsNEJBQTRCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWhGOzs7Ozs7V0FNRztRQUNJLGdCQUFXLEdBQUcsQ0FBQyxNQUFvQixF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LFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUU5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxhQUFhO1FBQ2IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7K0dBMU5VLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcywgT25lQ2VsbFN0YXRlLCBPbmVDZWxsU3RhdGVzLCBPbmVDb2x1bW5EZWYgfSBmcm9tICcuLi9tb2RlbHMvb25lLWNvbHVtbi1kZWYtdHlwZXMubW9kZWwnO1xuaW1wb3J0IHsgQ2VsbEZpZWxkVmFsdWVFbXB0eVBpcGUgfSBmcm9tICcuLi9waXBlcy9jZWxsLWZpZWxkLXZhbHVlLWVtcHR5LnBpcGUnO1xuaW1wb3J0IHsgT25lUm93Tm9kZSB9IGZyb20gJy4uL2luc3RhbnRzL29uZS1yb3ctbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zLCByZXNvbHZlT25lVmFsdWVHZXR0ZXJQYXJhbXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL29uZS1jb2x1bW4tZGVmLmhlbHBlcic7XG5pbXBvcnQgeyBDZWxsVmFsdWVHZXR0ZXJQaXBlIH0gZnJvbSAnLi4vcGlwZXMvY2VsbC12YWx1ZS1nZXR0ZXIucGlwZSc7XG5pbXBvcnQgeyBDZWxsRmllbGRWYWx1ZVBpcGUgfSBmcm9tICcuLi9waXBlcy9jZWxsLWZpZWxkLXZhbHVlLnBpcGUnO1xuaW1wb3J0IHR5cGUgeyBPbmVHcmlkQXBpIH0gZnJvbSAnLi4vaW5zdGFudHMvb25lLWdyaWQtYXBpLmNsYXNzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9uZUdyaWRDZWxsU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfY2VsbEZpZWxkVmFsdWVFbXB0eSA9IG5ldyBDZWxsRmllbGRWYWx1ZUVtcHR5UGlwZSgpO1xuICBwcml2YXRlIF9jZWxsVmFsdWVHZXR0ZXIgPSBuZXcgQ2VsbFZhbHVlR2V0dGVyUGlwZSgpO1xuICBwcml2YXRlIF9jZWxsRmllbGRWYWx1ZSA9IG5ldyBDZWxsRmllbGRWYWx1ZVBpcGUoKTtcbiAgcHJpdmF0ZSBfY29sdW1uRGVmczogT25lQ29sdW1uRGVmW10gPSBbXTtcbiAgcHJpdmF0ZSBfY29udGV4dDogYW55O1xuICBwcml2YXRlIF9hcGk6IE9uZUdyaWRBcGkgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgYXBwbHlDb2x1bW5EZWZzKGNvbHVtbkRlZnM6IE9uZUNvbHVtbkRlZltdLCBjb250ZXh0OiBhbnkpIHtcblxuICAgIHRoaXMuX2NvbHVtbkRlZnMgPSBjb2x1bW5EZWZzO1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBncmlkIGFwaSwgc28gcHJlZGljYXRlIHBhcmFtcyBjYW4gY2FycnkgaXQuXG4gICAqXG4gICAqIFB1c2hlZCBpbiByYXRoZXIgdGhhbiBpbmplY3RlZDogYE9uZUdyaWRBcGlgIGFscmVhZHkgZGVwZW5kcyBvbiB0aGlzXG4gICAqIHNlcnZpY2UsIGFuZCBpbmplY3RpbmcgaXQgYmFjayB3b3VsZCBjbG9zZSBhIERJIGN5Y2xlLlxuICAgKi9cbiAgcHVibGljIHNldEdyaWRBcGkoYXBpOiBPbmVHcmlkQXBpIHwgbnVsbCk6IHZvaWQge1xuXG4gICAgdGhpcy5fYXBpID0gYXBpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbXMgZXZlcnkgcm93LXNjb3BlZCBjb2x1bW4gY2FsbGJhY2sgcmVjZWl2ZXMuXG4gICAqXG4gICAqIE9uZSBidWlsZGVyLCBkZWxpYmVyYXRlbHk6IGBlZGl0YWJsZWAsIGB1cGRhdGFibGVgLCBgZGlzYWJsZWAsIGByb3dEcmFnYCxcbiAgICogYGhpZGVBY3Rpb25CdXR0b25gLCBgY2VsbENsYXNzYCwgYGNlbGxTdHlsZWAsIGBjZWxsUmVuZGVyZXJgIGFuZFxuICAgKiBgdmFsdWVGb3JtYXR0ZXJgIGFyZSBhbGwgXCJkZWNpZGUgc29tZXRoaW5nIGFib3V0IHRoaXMgY2VsbFwiLCBhbmQgYSBjb25zdW1lclxuICAgKiBzaG91bGQgbm90IGhhdmUgdG8gcmVtZW1iZXIgd2hpY2ggb2YgdGhlbSBoYXBwZW5zIHRvIGJlIGhhbmRlZCBgdmFsdWVgIG9yXG4gICAqIGBmaWVsZGAuIEVhY2ggdXNlZCB0byBiZSBjYWxsZWQgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBzdWJzZXQuXG4gICAqL1xuICBwdWJsaWMgY2VsbFBhcmFtcyhjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IE9uZUNlbGxQcmVzZW50YXRpb25QYXJhbXMge1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENvbHVtbiBjb25maWcgZmlyc3QsIHNvIHRoZSBncmlkJ3Mgb3duIGZpZWxkcyB3aW4gYSBuYW1lIGNvbGxpc2lvbjogYVxuICAgICAgLy8gc3RhbGUgYHZhbHVlYCBsZWZ0IGluIGBjZWxsUmVuZGVyZXJQYXJhbXNgIG11c3Qgbm90IHNoYWRvdyB0aGlzIGNlbGwncy5cbiAgICAgIC4uLihjb2x1bW4/LmNlbGxSZW5kZXJlclBhcmFtcyA/PyB7fSksXG4gICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlVmFsdWUobm9kZSwgY29sdW1uKSxcbiAgICAgIGRhdGE6IG5vZGUuZGF0YSxcbiAgICAgIG5vZGUsXG4gICAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICAgIGZpZWxkOiBjb2x1bW4/LmZpZWxkIGFzIHN0cmluZyxcbiAgICAgIGNvbHVtbkRlZjogY29sdW1uLFxuICAgICAgYXBpOiB0aGlzLl9hcGkgPz8gdW5kZWZpbmVkLFxuICAgICAgY29udGV4dDogdGhpcy5fY29udGV4dCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIE5ldyBOb2RlIFN0YXRlc1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlQ2VsbFN0YXRlcyhub2RlOiBPbmVSb3dOb2RlKTogT25lQ2VsbFN0YXRlcyB8IG51bGwge1xuXG4gICAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG5ld1N0YXRlczogT25lQ2VsbFN0YXRlcyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5fY29sdW1uRGVmcykge1xuXG4gICAgICBjb25zdCBmaWVsZCA9IGNvbHVtbi5maWVsZDtcblxuICAgICAgLy8gQ2VsbCBzdGF0ZSBpcyBrZXllZCBieSBmaWVsZCwgc28gYSBjb2x1bW4gd2l0aG91dCBvbmUgY29udHJpYnV0ZXNcbiAgICAgIC8vIG5vdGhpbmcuIFNraXBwaW5nIGl0IGtlZXBzIGB1bmRlZmluZWRgIG91dCBvZiB0aGUgc3RhdGUgb2JqZWN0OyBzdWNoIGFcbiAgICAgIC8vIGNvbHVtbiBzdGlsbCByZW5kZXJzIGl0cyBhY3Rpb24gYnV0dG9ucywgd2hpY2ggZG8gbm90IHJlYWQgY2VsbCBzdGF0ZS5cbiAgICAgIGlmICghZmllbGQpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoZmllbGQgIT09ICdfb25lUm93TnVtYmVyJykge1xuXG4gICAgICAgIG5ld1N0YXRlc1tmaWVsZF0gPSB0aGlzLmdlbmVyYXRlQ2VsbFN0YXRlKG5vZGUsIGNvbHVtbikgPz8gbm9kZS5jZWxsU3RhdGVzW2ZpZWxkXSA/PyB7IHR5cGU6ICdub25lJywgdmFsdWU6ICcnIH07XG5cbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgbmV3U3RhdGVzW2ZpZWxkXSA9IG5vZGUuY2VsbFN0YXRlc1tmaWVsZF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1N0YXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2VsbCdzIHZhbHVlOiB0aGUgYHZhbHVlR2V0dGVyYCdzIG91dHB1dCB3aGVyZSB0aGUgY29sdW1uIGRlY2xhcmVzIG9uZSxcbiAgICogdGhlIHJhdyBmaWVsZCBvdGhlcndpc2UuIFRoaXMgaXMgdGhlIHZhbHVlLCBub3QgdGhlIGRpc3BsYXkgdGV4dCDigJQgc2VlXG4gICAqIHtAbGluayBmb3JtYXRWYWx1ZX0uXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVWYWx1ZShub2RlOiBPbmVSb3dOb2RlLCBjb2x1bW46IE9uZUNvbHVtbkRlZik6IGFueSB7XG5cbiAgICByZXR1cm4gY29sdW1uPy52YWx1ZUdldHRlclxuICAgICAgPyB0aGlzLl9jZWxsVmFsdWVHZXR0ZXIudHJhbnNmb3JtKG5vZGUuZGF0YSwgbm9kZSwgY29sdW1uLCB0aGlzLl9jb250ZXh0KVxuICAgICAgOiB0aGlzLl9jZWxsRmllbGRWYWx1ZS50cmFuc2Zvcm0obm9kZS5kYXRhLCBjb2x1bW4uZmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBjb2x1bW4ncyBgdmFsdWVGb3JtYXR0ZXJgLlxuICAgKlxuICAgKiBgdmFsdWVGb3JtYXR0ZXJgIHdhcyBkZWNsYXJlZCBvbiB0aGUgY29sdW1uIGRlZmluaXRpb24gYW5kIGNhbGxlZCBmcm9tXG4gICAqIG5vd2hlcmUg4oCUIGEgY29uc3VtZXIgY291bGQgd3JpdGUgb25lLCBnZXQgbm8gZXJyb3IsIGFuZCBzZWUgbm90aGluZyBoYXBwZW4uXG4gICAqIEl0IHJ1bnMgb24gZGlzcGxheWVkIHRleHQgb25seSwgYWZ0ZXIgdGhlIGB2YWx1ZUdldHRlcmAsIGFuZCBpcyBkZWxpYmVyYXRlbHlcbiAgICogc2tpcHBlZCBmb3IgcGxhY2Vob2xkZXJzOiBhbiBlbXB0eSBjZWxsIGFscmVhZHkgaGFzIGl0cyBvd24gbWVjaGFuaXNtIGluXG4gICAqIGBjZWxsUmVuZGVyZXJQYXJhbXMucGxhY2Vob2xkZXJgLCBhbmQgdHdvIGZlYXR1cmVzIGNvbXBldGluZyB0byBmaWxsIHRoZVxuICAgKiBzYW1lIGdhcCBpcyB3b3JzZSB0aGFuIG9uZS5cbiAgICpcbiAgICogTm90ZSB0aGF0IHNvcnRpbmcgYW5kIGZpbHRlcmluZyByZWFkIHRoZSB1bmRlcmx5aW5nIHJvdyBkYXRhLCBub3QgdGhpcyDigJRcbiAgICogd2hpY2ggaXMgZXhhY3RseSB3aHkgZm9ybWF0dGluZyBiZWxvbmdzIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIGdldHRlci5cbiAgICovXG4gIHByaXZhdGUgZm9ybWF0VmFsdWUobm9kZTogT25lUm93Tm9kZSwgY29sdW1uOiBPbmVDb2x1bW5EZWYsIHZhbHVlOiBhbnkpOiBhbnkge1xuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4/LnZhbHVlRm9ybWF0dGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cbiAgICAvLyBgdmFsdWVgIGlzIHBhc3NlZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuIGxlZnQgdG8gYGNlbGxQYXJhbXNgOiB0aGUgZW1wdHlcbiAgICAvLyAtY2VsbCBicmFuY2ggcmVzb2x2ZXMgaXQgdGhyb3VnaCB0aGUgZ2V0dGVyIGJlZm9yZSBkZWNpZGluZyB3aGV0aGVyIHRoZXJlXG4gICAgLy8gaXMgYW55dGhpbmcgdG8gZm9ybWF0LCBhbmQgdGhlIGZvcm1hdHRlciBtdXN0IHNlZSB0aGF0IHNhbWUgdmFsdWUuXG4gICAgcmV0dXJuIGNvbHVtbi52YWx1ZUZvcm1hdHRlcih7IC4uLnRoaXMuY2VsbFBhcmFtcyhjb2x1bW4sIG5vZGUpLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxhY2Vob2xkZXIgZm9yIGFuIGVtcHR5IGNlbGwsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhpcyByb3cncyB0cmVlXG4gICAqIGRlcHRoIG1heSBub3QgYmUgZWRpdGVkLlxuICAgKlxuICAgKiBgY2VsbFJlbmRlcmVyUGFyYW1zLnBsYWNlaG9sZGVyYCBpcyBhIHByb21wdCwgbm90IGRhdGE6IGl0IHJlbmRlcnMgYXQgaGFsZlxuICAgKiBvcGFjaXR5IHdoZXJlIHRoZSB2YWx1ZSB3b3VsZCBnbywgd2hpY2ggcmVhZHMgYXMgXCJjbGljayBoZXJlIGFuZCBmaWxsIHRoaXNcbiAgICogaW5cIi4gT24gdGhlIGF1dG8gZ3JvdXAgY29sdW1uIGBlZGl0YWJsZUxldmVsc2AgZGVjaWRlcyB3aGljaCBkZXB0aHMgYWNjZXB0XG4gICAqIGFuIGVkaXQgYXQgYWxsLCBzbyBhIGRlcHRoIG91dHNpZGUgdGhhdCBsaXN0IHdhcyBhZHZlcnRpc2luZyBhbiBlZGl0IHRoZVxuICAgKiBncmlkIHRoZW4gcmVmdXNlcyDigJQgdGhlIGNlbGwgb2ZmZXJzIG5vIGlucHV0IGFuZCB0aGUgcHJvbXB0IG5ldmVyIGNsZWFycy5cbiAgICpcbiAgICogVGhlIHN1cHByZXNzaW9uIGlzIHNjb3BlZCB0byBjb2x1bW5zIHRoYXQgYWN0dWFsbHkgZGVjbGFyZSBgZWRpdGFibGVMZXZlbHNgLlxuICAgKiBUaGUgbGlzdCBpcyBvcHQtaW4sIGFuZCBhIGNvbHVtbiB3aXRob3V0IG9uZSBoYXMgbm8gcGVyLWxldmVsIHJ1bGVzIHJhdGhlclxuICAgKiB0aGFuIG5vIGVkaXRhYmxlIGxldmVscywgc28gcGxhaW4gZ3JpZHMgYW5kIHVudG91Y2hlZCB0cmVlIGNvbHVtbnMga2VlcFxuICAgKiBzaG93aW5nIHRoZWlyIHBsYWNlaG9sZGVyIGV4YWN0bHkgYXMgYmVmb3JlLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUGxhY2Vob2xkZXIobm9kZTogT25lUm93Tm9kZSwgY29sdW1uOiBPbmVDb2x1bW5EZWYpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBjb2x1bW4/LmNlbGxSZW5kZXJlclBhcmFtcz8ucGxhY2Vob2xkZXI7XG4gICAgY29uc3QgZWRpdGFibGVMZXZlbHMgPSBjb2x1bW4/LmVkaXRhYmxlTGV2ZWxzO1xuXG4gICAgaWYgKCFjb2x1bW4/LmF1dG9Hcm91cEZpZWxkIHx8ICFBcnJheS5pc0FycmF5KGVkaXRhYmxlTGV2ZWxzKSkgcmV0dXJuIHBsYWNlaG9sZGVyO1xuXG4gICAgcmV0dXJuIGVkaXRhYmxlTGV2ZWxzLmluY2x1ZGVzKG5vZGU/LmxldmVsKSA/IHBsYWNlaG9sZGVyIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIE5ldyBOb2RlIFN0YXRlIEJhc2VkIG9uIENvbHVtbiBGaWVsZFxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlQ2VsbFN0YXRlKG5vZGU6IE9uZVJvd05vZGUsIGNvbHVtbjogT25lQ29sdW1uRGVmKTogT25lQ2VsbFN0YXRlIHtcblxuICAgIC8vIFRoaXMgd2FzIGBmaWVsZCAhPT0gdW5kZWZpbmVkIHx8IGZpZWxkICE9PSAnJyB8fCBmaWVsZCAhPT0gbnVsbGAsIHdoaWNoIGlzXG4gICAgLy8gdHJ1ZSBmb3IgZXZlcnkgcG9zc2libGUgdmFsdWUgaW5jbHVkaW5nIGFsbCB0aHJlZSBpdCBtZWFudCB0byBleGNsdWRlIOKAlFxuICAgIC8vIGB8fGAgd2hlcmUgYCYmYCB3YXMgaW50ZW5kZWQuIEl0IGdhdGVkIHRoZSBmb3VyIGJyYW5jaGVzIGJlbG93LCBzbyBub25lXG4gICAgLy8gb2YgdGhlbSBjb3VsZCBldmVyIGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdC4gUmVkdWNlZCB0byB0aGUgY2hlY2sgaXRcbiAgICAvLyB3YXMgcmVhY2hpbmcgZm9yOiBhIGNvbHVtbiB3aXRoIG5vIGZpZWxkIGhhcyBubyB2YWx1ZSB0byByZW5kZXIuXG4gICAgY29uc3QgZmllbGQgPSBjb2x1bW4/LmZpZWxkO1xuXG4gICAgaWYgKCFmaWVsZCkge1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAnbm9uZScsIHZhbHVlOiAnJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLl9jZWxsRmllbGRWYWx1ZUVtcHR5LnRyYW5zZm9ybShub2RlLmRhdGEsIGZpZWxkKTtcbiAgICBjb25zdCBpc0dyb3VwID0gbm9kZS5ncm91cCB8fCBub2RlLmxlYWZHcm91cDtcbiAgICBjb25zdCBpc0F1dG9Hcm91cCA9IGNvbHVtbj8uYXV0b0dyb3VwRmllbGQ7XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5jZWxsUmVuZGVyZXIgJiYgIWlzR3JvdXApIHtcblxuICAgICAgLy8gVGhlIHJlbmRlcmVyIHVzZWQgdG8gYmUgaGFuZGVkIGB7IG5vZGUsIGNvbHVtbkRlZiB9YCBhbmQgbm90aGluZyBlbHNlLFxuICAgICAgLy8gc28gdGhlIG9idmlvdXMgd2F5IHRvIHdyaXRlIG9uZSDigJQgYHBhcmFtcy52YWx1ZWAg4oCUIHByb2R1Y2VkIHRoZSBzdHJpbmdcbiAgICAgIC8vIFwidW5kZWZpbmVkXCIsIGFuZCBgcGFyYW1zLmRhdGEueGAgdGhyZXcuIEl0IG5vdyBnZXRzIGV4YWN0bHkgd2hhdCBldmVyeVxuICAgICAgLy8gb3RoZXIgcm93LXNjb3BlZCBob29rIGdldHMuXG4gICAgICByZXR1cm4geyB0eXBlOiAnaHRtbCcsIHZhbHVlOiBjb2x1bW4uY2VsbFJlbmRlcmVyKHRoaXMuY2VsbFBhcmFtcyhjb2x1bW4sIG5vZGUpKSB9XG4gICAgfVxuXG4gICAgLy8gMS4gQ2VsbCBHcm91cCBQbGFjZWhvbGRlclxuICAgIGlmIChpc0VtcHR5ICYmIGlzR3JvdXAgJiYgaXNBdXRvR3JvdXApIHtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3BsYWNlaG9sZGVyJywgdmFsdWU6IHRoaXMucmVzb2x2ZVBsYWNlaG9sZGVyKG5vZGUsIGNvbHVtbikgPz8gdGhpcy5fY2VsbFZhbHVlR2V0dGVyLnRyYW5zZm9ybShub2RlLmRhdGEsIG5vZGUsIGNvbHVtbiwgdGhpcy5fY29udGV4dCkgPz8gJycgfTtcbiAgICB9XG5cbiAgICAvLyAyLiBDZWxsIEdyb3VwIFRleHQgVmFsdWVcbiAgICBpZiAoaXNHcm91cCAmJiBpc0F1dG9Hcm91cCkge1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUobm9kZSwgY29sdW1uLCB0aGlzLnJlc29sdmVWYWx1ZShub2RlLCBjb2x1bW4pKTtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdmFsdWUgPz8gJycgfTtcbiAgICB9XG5cbiAgICAvLyAzLiBDZWxsIFBsYWNlaG9sZGVyXG4gICAgLy9cbiAgICAvLyBUaGUgYXV0byBncm91cCBjb2x1bW4gaXMgZGVsaWJlcmF0ZWx5IE5PVCBleGNsdWRlZCBoZXJlLiBDYXNlcyAxIGFuZCAyXG4gICAgLy8gYWJvdmUgYWxyZWFkeSBjbGFpbWVkIHRoZSBncm91cCByb3dzLCBzbyB3aGF0IHJlYWNoZXMgdGhpcyBwb2ludCBpcyBhXG4gICAgLy8gbGVhZiDigJQgYW5kIGEgbGVhZiBvbiB0aGUgYXV0byBncm91cCBjb2x1bW4gaGFzIHRvIHJlbmRlciBpdHMgbGFiZWwgdG9vLFxuICAgIC8vIGluZGVudGVkIGJ5IGxldmVsLiBFeGNsdWRpbmcgaXQgZHJvcHBlZCBldmVyeSBsZWFmIHRocm91Z2ggdG8gY2FzZSA1IGFuZFxuICAgIC8vIHJlbmRlcmVkIHRoZSBncm91cCBjb2x1bW4gYmxhbmsgZm9yIHRoZSB3aG9sZSBib3R0b20gcm93IG9mIGEgdHJlZS5cbiAgICBpZiAoaXNFbXB0eSAmJiAhaXNHcm91cCkge1xuXG4gICAgICBjb25zdCB2YWx1ZUdldHRlciA9IHRoaXMuX2NlbGxWYWx1ZUdldHRlci50cmFuc2Zvcm0obm9kZS5kYXRhLCBub2RlLCBjb2x1bW4sIHRoaXMuX2NvbnRleHQpO1xuXG4gICAgICBpZiAodmFsdWVHZXR0ZXIpIHtcblxuICAgICAgICByZXR1cm4geyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0aGlzLmZvcm1hdFZhbHVlKG5vZGUsIGNvbHVtbiwgdmFsdWVHZXR0ZXIpIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5yZXNvbHZlUGxhY2Vob2xkZXIobm9kZSwgY29sdW1uKSA/PyAnJztcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3BsYWNlaG9sZGVyJywgdmFsdWU6IHBsYWNlaG9sZGVyIH07XG4gICAgfVxuXG4gICAgLy8gNC4gQ2VsbCBUZXh0IFZhbHVlIChsZWF2ZXMsIGluY2x1ZGluZyB0aGUgYXV0byBncm91cCBjb2x1bW4g4oCUIHNlZSBhYm92ZSlcbiAgICBpZiAoIWlzR3JvdXApIHtcblxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKG5vZGUsIGNvbHVtbiwgdGhpcy5yZXNvbHZlVmFsdWUobm9kZSwgY29sdW1uKSk7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHZhbHVlID8/ICcnIH07XG4gICAgfVxuXG4gICAgLy8gNS4gRGVmYXVsdFxuICAgIHJldHVybiB7IHR5cGU6ICdub25lJywgdmFsdWU6ICcnIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUm93LXNjb3BlZCBjb2x1bW4gcHJlZGljYXRlc1xuICAvL1xuICAvLyBFdmVyeSBvbmUgb2YgdGhlc2UgcmVzb2x2ZXMgdGhlIHNhbWUgd2F5IGFuZCByZWNlaXZlcyB0aGUgc2FtZSBwYXJhbXMsIHZpYVxuICAvLyBgY2VsbFBhcmFtc2AuIFRoZXkgdXNlZCB0byBlYWNoIGJ1aWxkIHRoZWlyIG93biBzdWJzZXQgaW5saW5lLCB3aGljaCBpcyBob3dcbiAgLy8gYHZhbHVlYCwgYGZpZWxkYCBhbmQgYGFwaWAgY2FtZSB0byBiZSBtaXNzaW5nIGZyb20gYWxsIG9mIHRoZW0uXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY2VsbCBtYXkgYmUgZWRpdGVkIGF0IGFsbC4gQSBjYXBhYmlsaXR5OiB1bnNldCBtZWFucyBuby4gKi9cbiAgcHVibGljIGVkaXRhYmxlRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpOiBib29sZWFuID0+XG4gICAgcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2x1bW4/LmVkaXRhYmxlLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmQgZWRpdCBnYXRlLCBBTkRlZCB3aXRoIGBlZGl0YWJsZWAuXG4gICAqXG4gICAqIEEgcmVzdHJpY3Rpb24sIHNvIHVuc2V0IG1lYW5zIFwibm8gcmVzdHJpY3Rpb25cIi4gSXQgdXNlZCB0byByZXNvbHZlIHRocm91Z2hcbiAgICogYCEhdW5kZWZpbmVkYCB0byBgZmFsc2VgLCBjbG9zaW5nIHRoZSBnYXRlIG9uIGV2ZXJ5IGNvbHVtbiB0aGF0IGRpZCBub3QgbmFtZVxuICAgKiBpdCDigJQgc28gYGVkaXRhYmxlOiB0cnVlYCBvbiBpdHMgb3duIG1hZGUgbm90aGluZyBlZGl0YWJsZS5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGFibGVGbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IGJvb2xlYW4gPT5cbiAgICByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbj8udXBkYXRhYmxlLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSwgdHJ1ZSk7XG5cbiAgLyoqIERpc2FibGVzIHRoaXMgY29sdW1uJ3Mgcm93IGFjdGlvbiBidXR0b25zLiBOb3QgYW4gZWRpdCBnYXRlLiAqL1xuICBwdWJsaWMgZGlzYWJsZUZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5kaXNhYmxlLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgLyoqIEhpZGVzIHRoaXMgY29sdW1uJ3Mgcm93IGFjdGlvbiBidXR0b25zIGVudGlyZWx5LiAqL1xuICBwdWJsaWMgaGlkZUFjdGlvbkJ1dHRvbkZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5oaWRlQWN0aW9uQnV0dG9uLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjZWxsIGNhcnJpZXMgYSByb3cgZHJhZyBoYW5kbGUuICovXG4gIHB1YmxpYyByb3dEcmFnRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpOiBib29sZWFuID0+XG4gICAgcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2x1bW4/LnJvd0RyYWcsIHRoaXMuY2VsbFBhcmFtcyhjb2x1bW4sIG5vZGUpKTtcblxuICBwdWJsaWMgdmFsdWVHZXR0ZXJGbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSkgPT5cbiAgICByZXNvbHZlT25lVmFsdWVHZXR0ZXJQYXJhbXMoY29sdW1uPy52YWx1ZUdldHRlciwgeyBkYXRhOiBub2RlLmRhdGEsIHJvd0luZGV4OiBub2RlLnJvd0luZGV4LCBub2RlLCBjb250ZXh0OiB0aGlzLl9jb250ZXh0IH0pO1xufVxuIl19
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWNlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBSXhJLE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFHVSxnQkFBVyxHQUFtQixFQUFFLENBQUM7UUFFakMsU0FBSSxHQUFzQixJQUFJLENBQUM7UUErTnZDLDhFQUE4RTtRQUM5RSwrQkFBK0I7UUFDL0IsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSw4RUFBOEU7UUFDOUUsa0VBQWtFO1FBQ2xFLDhFQUE4RTtRQUU5RSw0RUFBNEU7UUFDckUsZUFBVSxHQUFHLENBQUMsTUFBb0IsRUFBRSxJQUFnQixFQUFXLEVBQUUsQ0FDdEUsNEJBQTRCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWhGOzs7Ozs7V0FNRztRQUNJLGdCQUFXLEdBQUcsQ0FBQyxNQUFvQixFQUFFLElBQWdCLEVBQVcsRUFBRSxDQUN2RSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZGLG1FQUFtRTtRQUM1RCxjQUFTLEdBQUcsQ0FBQyxNQUFvQixFQUFFLElBQWdCLEVBQVcsRUFBRSxDQUNyRSw0QkFB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QztZQUU5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsb0VBQW9FO1FBQ3BFLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUU5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxhQUFhO1FBQ2IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7K0dBak9VLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lQ2VsbFByZXNlbnRhdGlvblBhcmFtcywgT25lQ2VsbFN0YXRlLCBPbmVDZWxsU3RhdGVzLCBPbmVDb2x1bW5EZWYgfSBmcm9tICcuLi9tb2RlbHMvb25lLWNvbHVtbi1kZWYtdHlwZXMubW9kZWwnO1xuaW1wb3J0IHsgT25lUm93Tm9kZSB9IGZyb20gJy4uL2luc3RhbnRzL29uZS1yb3ctbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NlbGxFbXB0eSwgcmVhZENlbGxWYWx1ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvb25lLWNlbGwuaGVscGVyJztcbmltcG9ydCB7IHJlc29sdmVDZWxsVmFsdWVHZXR0ZXIsIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMsIHJlc29sdmVPbmVWYWx1ZUdldHRlclBhcmFtcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvb25lLWNvbHVtbi1kZWYuaGVscGVyJztcbmltcG9ydCB0eXBlIHsgT25lR3JpZEFwaSB9IGZyb20gJy4uL2luc3RhbnRzL29uZS1ncmlkLWFwaS5jbGFzcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPbmVHcmlkQ2VsbFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX2NvbHVtbkRlZnM6IE9uZUNvbHVtbkRlZltdID0gW107XG4gIHByaXZhdGUgX2NvbnRleHQ6IGFueTtcbiAgcHJpdmF0ZSBfYXBpOiBPbmVHcmlkQXBpIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIGFwcGx5Q29sdW1uRGVmcyhjb2x1bW5EZWZzOiBPbmVDb2x1bW5EZWZbXSwgY29udGV4dDogYW55KSB7XG5cbiAgICB0aGlzLl9jb2x1bW5EZWZzID0gY29sdW1uRGVmcztcbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYWNrLXJlZmVyZW5jZSB0byB0aGUgZ3JpZCBhcGksIHNvIHByZWRpY2F0ZSBwYXJhbXMgY2FuIGNhcnJ5IGl0LlxuICAgKlxuICAgKiBQdXNoZWQgaW4gcmF0aGVyIHRoYW4gaW5qZWN0ZWQ6IGBPbmVHcmlkQXBpYCBhbHJlYWR5IGRlcGVuZHMgb24gdGhpc1xuICAgKiBzZXJ2aWNlLCBhbmQgaW5qZWN0aW5nIGl0IGJhY2sgd291bGQgY2xvc2UgYSBESSBjeWNsZS5cbiAgICovXG4gIHB1YmxpYyBzZXRHcmlkQXBpKGFwaTogT25lR3JpZEFwaSB8IG51bGwpOiB2b2lkIHtcblxuICAgIHRoaXMuX2FwaSA9IGFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1zIGV2ZXJ5IHJvdy1zY29wZWQgY29sdW1uIGNhbGxiYWNrIHJlY2VpdmVzLlxuICAgKlxuICAgKiBPbmUgYnVpbGRlciwgZGVsaWJlcmF0ZWx5OiBgZWRpdGFibGVgLCBgdXBkYXRhYmxlYCwgYGRpc2FibGVgLCBgcm93RHJhZ2AsXG4gICAqIGBoaWRlQWN0aW9uQnV0dG9uYCwgYGNlbGxDbGFzc2AsIGBjZWxsU3R5bGVgLCBgY2VsbFJlbmRlcmVyYCBhbmRcbiAgICogYHZhbHVlRm9ybWF0dGVyYCBhcmUgYWxsIFwiZGVjaWRlIHNvbWV0aGluZyBhYm91dCB0aGlzIGNlbGxcIiwgYW5kIGEgY29uc3VtZXJcbiAgICogc2hvdWxkIG5vdCBoYXZlIHRvIHJlbWVtYmVyIHdoaWNoIG9mIHRoZW0gaGFwcGVucyB0byBiZSBoYW5kZWQgYHZhbHVlYCBvclxuICAgKiBgZmllbGRgLiBFYWNoIHVzZWQgdG8gYmUgY2FsbGVkIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgc3Vic2V0LlxuICAgKi9cbiAgcHVibGljIGNlbGxQYXJhbXMoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpOiBPbmVDZWxsUHJlc2VudGF0aW9uUGFyYW1zIHtcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBDb2x1bW4gY29uZmlnIGZpcnN0LCBzbyB0aGUgZ3JpZCdzIG93biBmaWVsZHMgd2luIGEgbmFtZSBjb2xsaXNpb246IGFcbiAgICAgIC8vIHN0YWxlIGB2YWx1ZWAgbGVmdCBpbiBgY2VsbFJlbmRlcmVyUGFyYW1zYCBtdXN0IG5vdCBzaGFkb3cgdGhpcyBjZWxsJ3MuXG4gICAgICAuLi4oY29sdW1uPy5jZWxsUmVuZGVyZXJQYXJhbXMgPz8ge30pLFxuICAgICAgdmFsdWU6IHRoaXMucmVzb2x2ZVZhbHVlKG5vZGUsIGNvbHVtbiksXG4gICAgICBkYXRhOiBub2RlLmRhdGEsXG4gICAgICBub2RlLFxuICAgICAgcm93SW5kZXg6IG5vZGUucm93SW5kZXgsXG4gICAgICBmaWVsZDogY29sdW1uPy5maWVsZCBhcyBzdHJpbmcsXG4gICAgICBjb2x1bW5EZWY6IGNvbHVtbixcbiAgICAgIGFwaTogdGhpcy5fYXBpID8/IHVuZGVmaW5lZCxcbiAgICAgIGNvbnRleHQ6IHRoaXMuX2NvbnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBOZXcgTm9kZSBTdGF0ZXNcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUNlbGxTdGF0ZXMobm9kZTogT25lUm93Tm9kZSk6IE9uZUNlbGxTdGF0ZXMgfCBudWxsIHtcblxuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBuZXdTdGF0ZXM6IE9uZUNlbGxTdGF0ZXMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuX2NvbHVtbkRlZnMpIHtcblxuICAgICAgY29uc3QgZmllbGQgPSBjb2x1bW4uZmllbGQ7XG5cbiAgICAgIC8vIENlbGwgc3RhdGUgaXMga2V5ZWQgYnkgZmllbGQsIHNvIGEgY29sdW1uIHdpdGhvdXQgb25lIGNvbnRyaWJ1dGVzXG4gICAgICAvLyBub3RoaW5nLiBTa2lwcGluZyBpdCBrZWVwcyBgdW5kZWZpbmVkYCBvdXQgb2YgdGhlIHN0YXRlIG9iamVjdDsgc3VjaCBhXG4gICAgICAvLyBjb2x1bW4gc3RpbGwgcmVuZGVycyBpdHMgYWN0aW9uIGJ1dHRvbnMsIHdoaWNoIGRvIG5vdCByZWFkIGNlbGwgc3RhdGUuXG4gICAgICBpZiAoIWZpZWxkKSBjb250aW51ZTtcblxuICAgICAgaWYgKGZpZWxkICE9PSAnX29uZVJvd051bWJlcicpIHtcblxuICAgICAgICBuZXdTdGF0ZXNbZmllbGRdID0gdGhpcy5nZW5lcmF0ZUNlbGxTdGF0ZShub2RlLCBjb2x1bW4pID8/IG5vZGUuY2VsbFN0YXRlc1tmaWVsZF0gPz8geyB0eXBlOiAnbm9uZScsIHZhbHVlOiAnJyB9O1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIG5ld1N0YXRlc1tmaWVsZF0gPSBub2RlLmNlbGxTdGF0ZXNbZmllbGRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdTdGF0ZXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwncyB2YWx1ZTogdGhlIGB2YWx1ZUdldHRlcmAncyBvdXRwdXQgd2hlcmUgdGhlIGNvbHVtbiBkZWNsYXJlcyBvbmUsXG4gICAqIHRoZSByYXcgZmllbGQgb3RoZXJ3aXNlLiBUaGlzIGlzIHRoZSB2YWx1ZSwgbm90IHRoZSBkaXNwbGF5IHRleHQg4oCUIHNlZVxuICAgKiB7QGxpbmsgZm9ybWF0VmFsdWV9LlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlVmFsdWUobm9kZTogT25lUm93Tm9kZSwgY29sdW1uOiBPbmVDb2x1bW5EZWYpOiBhbnkge1xuXG4gICAgcmV0dXJuIGNvbHVtbj8udmFsdWVHZXR0ZXJcbiAgICAgID8gcmVzb2x2ZUNlbGxWYWx1ZUdldHRlcihub2RlLmRhdGEsIG5vZGUsIGNvbHVtbiwgdGhpcy5fY29udGV4dClcbiAgICAgIDogcmVhZENlbGxWYWx1ZShub2RlLmRhdGEsIGNvbHVtbi5maWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIGNvbHVtbidzIGB2YWx1ZUZvcm1hdHRlcmAuXG4gICAqXG4gICAqIGB2YWx1ZUZvcm1hdHRlcmAgd2FzIGRlY2xhcmVkIG9uIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhbmQgY2FsbGVkIGZyb21cbiAgICogbm93aGVyZSDigJQgYSBjb25zdW1lciBjb3VsZCB3cml0ZSBvbmUsIGdldCBubyBlcnJvciwgYW5kIHNlZSBub3RoaW5nIGhhcHBlbi5cbiAgICogSXQgcnVucyBvbiBkaXNwbGF5ZWQgdGV4dCBvbmx5LCBhZnRlciB0aGUgYHZhbHVlR2V0dGVyYCwgYW5kIGlzIGRlbGliZXJhdGVseVxuICAgKiBza2lwcGVkIGZvciBwbGFjZWhvbGRlcnM6IGFuIGVtcHR5IGNlbGwgYWxyZWFkeSBoYXMgaXRzIG93biBtZWNoYW5pc20gaW5cbiAgICogYGNlbGxSZW5kZXJlclBhcmFtcy5wbGFjZWhvbGRlcmAsIGFuZCB0d28gZmVhdHVyZXMgY29tcGV0aW5nIHRvIGZpbGwgdGhlXG4gICAqIHNhbWUgZ2FwIGlzIHdvcnNlIHRoYW4gb25lLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgc29ydGluZyBhbmQgZmlsdGVyaW5nIHJlYWQgdGhlIHVuZGVybHlpbmcgcm93IGRhdGEsIG5vdCB0aGlzIOKAlFxuICAgKiB3aGljaCBpcyBleGFjdGx5IHdoeSBmb3JtYXR0aW5nIGJlbG9uZ3MgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgZ2V0dGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZShub2RlOiBPbmVSb3dOb2RlLCBjb2x1bW46IE9uZUNvbHVtbkRlZiwgdmFsdWU6IGFueSk6IGFueSB7XG5cbiAgICBpZiAodHlwZW9mIGNvbHVtbj8udmFsdWVGb3JtYXR0ZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblxuICAgIC8vIGB2YWx1ZWAgaXMgcGFzc2VkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gbGVmdCB0byBgY2VsbFBhcmFtc2A6IHRoZSBlbXB0eVxuICAgIC8vIC1jZWxsIGJyYW5jaCByZXNvbHZlcyBpdCB0aHJvdWdoIHRoZSBnZXR0ZXIgYmVmb3JlIGRlY2lkaW5nIHdoZXRoZXIgdGhlcmVcbiAgICAvLyBpcyBhbnl0aGluZyB0byBmb3JtYXQsIGFuZCB0aGUgZm9ybWF0dGVyIG11c3Qgc2VlIHRoYXQgc2FtZSB2YWx1ZS5cbiAgICByZXR1cm4gY29sdW1uLnZhbHVlRm9ybWF0dGVyKHsgLi4udGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSksIHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwbGFjZWhvbGRlciBmb3IgYW4gZW1wdHkgY2VsbCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGlzIHJvdydzIHRyZWVcbiAgICogZGVwdGggbWF5IG5vdCBiZSBlZGl0ZWQuXG4gICAqXG4gICAqIGBjZWxsUmVuZGVyZXJQYXJhbXMucGxhY2Vob2xkZXJgIGlzIGEgcHJvbXB0LCBub3QgZGF0YTogaXQgcmVuZGVycyBhdCBoYWxmXG4gICAqIG9wYWNpdHkgd2hlcmUgdGhlIHZhbHVlIHdvdWxkIGdvLCB3aGljaCByZWFkcyBhcyBcImNsaWNrIGhlcmUgYW5kIGZpbGwgdGhpc1xuICAgKiBpblwiLiBPbiB0aGUgYXV0byBncm91cCBjb2x1bW4gYGVkaXRhYmxlTGV2ZWxzYCBkZWNpZGVzIHdoaWNoIGRlcHRocyBhY2NlcHRcbiAgICogYW4gZWRpdCBhdCBhbGwsIHNvIGEgZGVwdGggb3V0c2lkZSB0aGF0IGxpc3Qgd2FzIGFkdmVydGlzaW5nIGFuIGVkaXQgdGhlXG4gICAqIGdyaWQgdGhlbiByZWZ1c2VzIOKAlCB0aGUgY2VsbCBvZmZlcnMgbm8gaW5wdXQgYW5kIHRoZSBwcm9tcHQgbmV2ZXIgY2xlYXJzLlxuICAgKlxuICAgKiBUaGUgc3VwcHJlc3Npb24gaXMgc2NvcGVkIHRvIGNvbHVtbnMgdGhhdCBhY3R1YWxseSBkZWNsYXJlIGBlZGl0YWJsZUxldmVsc2AuXG4gICAqIFRoZSBsaXN0IGlzIG9wdC1pbiwgYW5kIGEgY29sdW1uIHdpdGhvdXQgb25lIGhhcyBubyBwZXItbGV2ZWwgcnVsZXMgcmF0aGVyXG4gICAqIHRoYW4gbm8gZWRpdGFibGUgbGV2ZWxzLCBzbyBwbGFpbiBncmlkcyBhbmQgdW50b3VjaGVkIHRyZWUgY29sdW1ucyBrZWVwXG4gICAqIHNob3dpbmcgdGhlaXIgcGxhY2Vob2xkZXIgZXhhY3RseSBhcyBiZWZvcmUuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVQbGFjZWhvbGRlcihub2RlOiBPbmVSb3dOb2RlLCBjb2x1bW46IE9uZUNvbHVtbkRlZik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGNvbHVtbj8uY2VsbFJlbmRlcmVyUGFyYW1zPy5wbGFjZWhvbGRlcjtcbiAgICBjb25zdCBlZGl0YWJsZUxldmVscyA9IGNvbHVtbj8uZWRpdGFibGVMZXZlbHM7XG5cbiAgICBpZiAoIWNvbHVtbj8uYXV0b0dyb3VwRmllbGQgfHwgIUFycmF5LmlzQXJyYXkoZWRpdGFibGVMZXZlbHMpKSByZXR1cm4gcGxhY2Vob2xkZXI7XG5cbiAgICByZXR1cm4gZWRpdGFibGVMZXZlbHMuaW5jbHVkZXMobm9kZT8ubGV2ZWwpID8gcGxhY2Vob2xkZXIgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgTmV3IE5vZGUgU3RhdGUgQmFzZWQgb24gQ29sdW1uIEZpZWxkXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVDZWxsU3RhdGUobm9kZTogT25lUm93Tm9kZSwgY29sdW1uOiBPbmVDb2x1bW5EZWYpOiBPbmVDZWxsU3RhdGUge1xuXG4gICAgLy8gVGhpcyB3YXMgYGZpZWxkICE9PSB1bmRlZmluZWQgfHwgZmllbGQgIT09ICcnIHx8IGZpZWxkICE9PSBudWxsYCwgd2hpY2ggaXNcbiAgICAvLyB0cnVlIGZvciBldmVyeSBwb3NzaWJsZSB2YWx1ZSBpbmNsdWRpbmcgYWxsIHRocmVlIGl0IG1lYW50IHRvIGV4Y2x1ZGUg4oCUXG4gICAgLy8gYHx8YCB3aGVyZSBgJiZgIHdhcyBpbnRlbmRlZC4gSXQgZ2F0ZWQgdGhlIGZvdXIgYnJhbmNoZXMgYmVsb3csIHNvIG5vbmVcbiAgICAvLyBvZiB0aGVtIGNvdWxkIGV2ZXIgZmFsbCB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0LiBSZWR1Y2VkIHRvIHRoZSBjaGVjayBpdFxuICAgIC8vIHdhcyByZWFjaGluZyBmb3I6IGEgY29sdW1uIHdpdGggbm8gZmllbGQgaGFzIG5vIHZhbHVlIHRvIHJlbmRlci5cbiAgICBjb25zdCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ7XG5cbiAgICBpZiAoIWZpZWxkKSB7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICdub25lJywgdmFsdWU6ICcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgaXNFbXB0eSA9IGlzQ2VsbEVtcHR5KG5vZGUuZGF0YSwgZmllbGQpO1xuICAgIGNvbnN0IGlzR3JvdXAgPSBub2RlLmdyb3VwIHx8IG5vZGUubGVhZkdyb3VwO1xuICAgIGNvbnN0IGlzQXV0b0dyb3VwID0gY29sdW1uPy5hdXRvR3JvdXBGaWVsZDtcblxuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmNlbGxSZW5kZXJlciAmJiAhaXNHcm91cCkge1xuXG4gICAgICAvLyBUaGUgcmVuZGVyZXIgdXNlZCB0byBiZSBoYW5kZWQgYHsgbm9kZSwgY29sdW1uRGVmIH1gIGFuZCBub3RoaW5nIGVsc2UsXG4gICAgICAvLyBzbyB0aGUgb2J2aW91cyB3YXkgdG8gd3JpdGUgb25lIOKAlCBgcGFyYW1zLnZhbHVlYCDigJQgcHJvZHVjZWQgdGhlIHN0cmluZ1xuICAgICAgLy8gXCJ1bmRlZmluZWRcIiwgYW5kIGBwYXJhbXMuZGF0YS54YCB0aHJldy4gSXQgbm93IGdldHMgZXhhY3RseSB3aGF0IGV2ZXJ5XG4gICAgICAvLyBvdGhlciByb3ctc2NvcGVkIGhvb2sgZ2V0cy5cbiAgICAgIHJldHVybiB7IHR5cGU6ICdodG1sJywgdmFsdWU6IGNvbHVtbi5jZWxsUmVuZGVyZXIodGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSkpIH1cbiAgICB9XG5cbiAgICAvLyAxLiBDZWxsIEdyb3VwIFBsYWNlaG9sZGVyXG4gICAgaWYgKGlzRW1wdHkgJiYgaXNHcm91cCAmJiBpc0F1dG9Hcm91cCkge1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAncGxhY2Vob2xkZXInLCB2YWx1ZTogdGhpcy5yZXNvbHZlUGxhY2Vob2xkZXIobm9kZSwgY29sdW1uKSA/PyByZXNvbHZlQ2VsbFZhbHVlR2V0dGVyKG5vZGUuZGF0YSwgbm9kZSwgY29sdW1uLCB0aGlzLl9jb250ZXh0KSA/PyAnJyB9O1xuICAgIH1cblxuICAgIC8vIDIuIENlbGwgR3JvdXAgVGV4dCBWYWx1ZVxuICAgIGlmIChpc0dyb3VwICYmIGlzQXV0b0dyb3VwKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShub2RlLCBjb2x1bW4sIHRoaXMucmVzb2x2ZVZhbHVlKG5vZGUsIGNvbHVtbikpO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAndGV4dCcsIHZhbHVlOiB2YWx1ZSA/PyAnJyB9O1xuICAgIH1cblxuICAgIC8vIDMuIENlbGwgUGxhY2Vob2xkZXJcbiAgICAvL1xuICAgIC8vIFRoZSBhdXRvIGdyb3VwIGNvbHVtbiBpcyBkZWxpYmVyYXRlbHkgTk9UIGV4Y2x1ZGVkIGhlcmUuIENhc2VzIDEgYW5kIDJcbiAgICAvLyBhYm92ZSBhbHJlYWR5IGNsYWltZWQgdGhlIGdyb3VwIHJvd3MsIHNvIHdoYXQgcmVhY2hlcyB0aGlzIHBvaW50IGlzIGFcbiAgICAvLyBsZWFmIOKAlCBhbmQgYSBsZWFmIG9uIHRoZSBhdXRvIGdyb3VwIGNvbHVtbiBoYXMgdG8gcmVuZGVyIGl0cyBsYWJlbCB0b28sXG4gICAgLy8gaW5kZW50ZWQgYnkgbGV2ZWwuIEV4Y2x1ZGluZyBpdCBkcm9wcGVkIGV2ZXJ5IGxlYWYgdGhyb3VnaCB0byBjYXNlIDUgYW5kXG4gICAgLy8gcmVuZGVyZWQgdGhlIGdyb3VwIGNvbHVtbiBibGFuayBmb3IgdGhlIHdob2xlIGJvdHRvbSByb3cgb2YgYSB0cmVlLlxuICAgIGlmIChpc0VtcHR5ICYmICFpc0dyb3VwKSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlR2V0dGVyID0gcmVzb2x2ZUNlbGxWYWx1ZUdldHRlcihub2RlLmRhdGEsIG5vZGUsIGNvbHVtbiwgdGhpcy5fY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWx1ZUdldHRlcikge1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHRoaXMuZm9ybWF0VmFsdWUobm9kZSwgY29sdW1uLCB2YWx1ZUdldHRlcikgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLnJlc29sdmVQbGFjZWhvbGRlcihub2RlLCBjb2x1bW4pID8/ICcnO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAncGxhY2Vob2xkZXInLCB2YWx1ZTogcGxhY2Vob2xkZXIgfTtcbiAgICB9XG5cbiAgICAvLyA0LiBDZWxsIFRleHQgVmFsdWUgKGxlYXZlcywgaW5jbHVkaW5nIHRoZSBhdXRvIGdyb3VwIGNvbHVtbiDigJQgc2VlIGFib3ZlKVxuICAgIGlmICghaXNHcm91cCkge1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUobm9kZSwgY29sdW1uLCB0aGlzLnJlc29sdmVWYWx1ZShub2RlLCBjb2x1bW4pKTtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdmFsdWUgPz8gJycgfTtcbiAgICB9XG5cbiAgICAvLyA1LiBBIGdyb3VwIHJvdyBvdXRzaWRlIHRoZSBncm91cCBjb2x1bW46IHJlbmRlciB0aGUgdmFsdWUgd2hlbiB0aGUgcm93XG4gICAgLy8gYWN0dWFsbHkgY2FycmllcyBvbmUg4oCUIGFnZ3JlZ2F0ZXMgbGFuZCBpbiB0aGVzZSBjZWxscywgYW5kIGEgdHJlZVxuICAgIC8vIHBhcmVudCdzIG93biBkYXRhIGJlbG9uZ3Mgb24gc2NyZWVuIHRvby4gQmxhbmsgc3RheXMgYmxhbmsuXG4gICAgaWYgKCFpc0VtcHR5KSB7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShub2RlLCBjb2x1bW4sIHRoaXMucmVzb2x2ZVZhbHVlKG5vZGUsIGNvbHVtbikpO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAndGV4dCcsIHZhbHVlOiB2YWx1ZSA/PyAnJyB9O1xuICAgIH1cblxuICAgIC8vIDYuIERlZmF1bHRcbiAgICByZXR1cm4geyB0eXBlOiAnbm9uZScsIHZhbHVlOiAnJyB9O1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFJvdy1zY29wZWQgY29sdW1uIHByZWRpY2F0ZXNcbiAgLy9cbiAgLy8gRXZlcnkgb25lIG9mIHRoZXNlIHJlc29sdmVzIHRoZSBzYW1lIHdheSBhbmQgcmVjZWl2ZXMgdGhlIHNhbWUgcGFyYW1zLCB2aWFcbiAgLy8gYGNlbGxQYXJhbXNgLiBUaGV5IHVzZWQgdG8gZWFjaCBidWlsZCB0aGVpciBvd24gc3Vic2V0IGlubGluZSwgd2hpY2ggaXMgaG93XG4gIC8vIGB2YWx1ZWAsIGBmaWVsZGAgYW5kIGBhcGlgIGNhbWUgdG8gYmUgbWlzc2luZyBmcm9tIGFsbCBvZiB0aGVtLlxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogV2hldGhlciB0aGlzIGNlbGwgbWF5IGJlIGVkaXRlZCBhdCBhbGwuIEEgY2FwYWJpbGl0eTogdW5zZXQgbWVhbnMgbm8uICovXG4gIHB1YmxpYyBlZGl0YWJsZUZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5lZGl0YWJsZSwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSkpO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kIGVkaXQgZ2F0ZSwgQU5EZWQgd2l0aCBgZWRpdGFibGVgLlxuICAgKlxuICAgKiBBIHJlc3RyaWN0aW9uLCBzbyB1bnNldCBtZWFucyBcIm5vIHJlc3RyaWN0aW9uXCIuIEl0IHVzZWQgdG8gcmVzb2x2ZSB0aHJvdWdoXG4gICAqIGAhIXVuZGVmaW5lZGAgdG8gYGZhbHNlYCwgY2xvc2luZyB0aGUgZ2F0ZSBvbiBldmVyeSBjb2x1bW4gdGhhdCBkaWQgbm90IG5hbWVcbiAgICogaXQg4oCUIHNvIGBlZGl0YWJsZTogdHJ1ZWAgb24gaXRzIG93biBtYWRlIG5vdGhpbmcgZWRpdGFibGUuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRhYmxlRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpOiBib29sZWFuID0+XG4gICAgcmVzb2x2ZU9uZUNlbGxSZW5kZXJlclBhcmFtcyhjb2x1bW4/LnVwZGF0YWJsZSwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSksIHRydWUpO1xuXG4gIC8qKiBEaXNhYmxlcyB0aGlzIGNvbHVtbidzIHJvdyBhY3Rpb24gYnV0dG9ucy4gTm90IGFuIGVkaXQgZ2F0ZS4gKi9cbiAgcHVibGljIGRpc2FibGVGbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IGJvb2xlYW4gPT5cbiAgICByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbj8uZGlzYWJsZSwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSkpO1xuXG4gIC8qKiBIaWRlcyB0aGlzIGNvbHVtbidzIHJvdyBhY3Rpb24gYnV0dG9ucyBlbnRpcmVseS4gKi9cbiAgcHVibGljIGhpZGVBY3Rpb25CdXR0b25GbiA9IChjb2x1bW46IE9uZUNvbHVtbkRlZiwgbm9kZTogT25lUm93Tm9kZSk6IGJvb2xlYW4gPT5cbiAgICByZXNvbHZlT25lQ2VsbFJlbmRlcmVyUGFyYW1zKGNvbHVtbj8uaGlkZUFjdGlvbkJ1dHRvbiwgdGhpcy5jZWxsUGFyYW1zKGNvbHVtbiwgbm9kZSkpO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY2VsbCBjYXJyaWVzIGEgcm93IGRyYWcgaGFuZGxlLiAqL1xuICBwdWJsaWMgcm93RHJhZ0ZuID0gKGNvbHVtbjogT25lQ29sdW1uRGVmLCBub2RlOiBPbmVSb3dOb2RlKTogYm9vbGVhbiA9PlxuICAgIHJlc29sdmVPbmVDZWxsUmVuZGVyZXJQYXJhbXMoY29sdW1uPy5yb3dEcmFnLCB0aGlzLmNlbGxQYXJhbXMoY29sdW1uLCBub2RlKSk7XG5cbiAgcHVibGljIHZhbHVlR2V0dGVyRm4gPSAoY29sdW1uOiBPbmVDb2x1bW5EZWYsIG5vZGU6IE9uZVJvd05vZGUpID0+XG4gICAgcmVzb2x2ZU9uZVZhbHVlR2V0dGVyUGFyYW1zKGNvbHVtbj8udmFsdWVHZXR0ZXIsIHsgZGF0YTogbm9kZS5kYXRhLCByb3dJbmRleDogbm9kZS5yb3dJbmRleCwgbm9kZSwgY29udGV4dDogdGhpcy5fY29udGV4dCB9KTtcbn1cbiJdfQ==
|
|
@@ -39,4 +39,33 @@ export function resolveCellClass(column, row) {
|
|
|
39
39
|
? column.cellClass(row)
|
|
40
40
|
: column.cellClass;
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* The cell's raw field value, with blank treated as absent.
|
|
44
|
+
*
|
|
45
|
+
* Was `CellFieldValuePipe`. It lived as an Angular pipe but was only ever
|
|
46
|
+
* instantiated inside a service — a utility wearing a `@Pipe` decorator, which
|
|
47
|
+
* also cost it a module declaration for a template use that never existed.
|
|
48
|
+
*/
|
|
49
|
+
export function readCellValue(data, field) {
|
|
50
|
+
const value = getFieldValue(data, field);
|
|
51
|
+
if (value === null || value === undefined)
|
|
52
|
+
return null;
|
|
53
|
+
if (typeof value === 'string' && value.trim() === '')
|
|
54
|
+
return null;
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether a cell has nothing to show.
|
|
59
|
+
*
|
|
60
|
+
* Was `CellFieldValueEmptyPipe`. `field` is optional on `OneColumnDef` — an
|
|
61
|
+
* action-only column legitimately has none — and reading it unguarded used to
|
|
62
|
+
* throw while the grid built cell state, taking the whole grid down. No field
|
|
63
|
+
* means nothing to read, which is empty by definition.
|
|
64
|
+
*/
|
|
65
|
+
export function isCellEmpty(data, field) {
|
|
66
|
+
if (!data || !field)
|
|
67
|
+
return true;
|
|
68
|
+
const value = getFieldValue(data, field);
|
|
69
|
+
return value === null || value === undefined || value === '';
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWNlbGwuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9oZWxwZXJzL29uZS1jZWxsLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBZ0IsRUFBRSxLQUFhO0lBRTFELE9BQU8sR0FBRyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFFckQsT0FBTyxHQUFHLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFJLElBQU8sRUFBRSxLQUFhO0lBRXJELE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQVcsQ0FBQztBQUM3RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBb0IsRUFBRSxHQUFRO0lBRTdELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRWpDLE9BQU8sT0FBTyxNQUFNLENBQUMsU0FBUyxLQUFLLFVBQVU7UUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFvQixFQUFFLEdBQVE7SUFFN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFakMsT0FBTyxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVTtRQUMzQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUksSUFBTyxFQUFFLEtBQWE7SUFFbkQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV6QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV2RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRWxFLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBSSxJQUFPLEVBQUUsS0FBYTtJQUVqRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRWpDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFekMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25lQ29sdW1uRGVmIH0gZnJvbSBcIi4uL2NvcmUvbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsXCI7XG5cbi8qKlxuICogR2VuZXJhdGUgQ2VsbCBGaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2VsbEZpZWxkKHJvd0luZGV4OiBudW1iZXIsIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuXG4gIHJldHVybiBgJHtyb3dJbmRleH0tLSR7ZmllbGR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENlbGxLZXkocm93SWQ6IHN0cmluZywgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgcmV0dXJuIGAke3Jvd0lkfS0tJHtmaWVsZH1gO1xufVxuXG4vKipcbiAqIEdldCBWYWx1ZSBGcm9tIERhdGEgRmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWU8VD4oZGF0YTogVCwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgcmV0dXJuIGZpZWxkPy5zcGxpdCgnLicpPy5yZWR1Y2UoKG9iaiwga2V5KSA9PiBvYmo/LltrZXldLCBkYXRhKSBhcyBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBjZWxsIHN0eWxlIChoYW5kbGVzIGJvdGggc3RhdGljIGFuZCBmdW5jdGlvbi1iYXNlZClcbiAqIEBwYXJhbSBjb2x1bW4gXG4gKiBAcGFyYW0gcm93IFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ2VsbFN0eWxlKGNvbHVtbjogT25lQ29sdW1uRGVmLCByb3c6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuXG4gIGlmICghY29sdW1uLmNlbGxTdHlsZSkgcmV0dXJuIHt9O1xuXG4gIHJldHVybiB0eXBlb2YgY29sdW1uLmNlbGxTdHlsZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gY29sdW1uLmNlbGxTdHlsZShyb3cpXG4gICAgOiBjb2x1bW4uY2VsbFN0eWxlO1xufVxuXG4vKipcbiAqIFJlc29sdmUgY2VsbCBjbGFzcyAoaGFuZGxlcyBib3RoIHN0YXRpYyBhbmQgZnVuY3Rpb24tYmFzZWQpXG4gKiBAcGFyYW0gY29sdW1uIFxuICogQHBhcmFtIHJvdyBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNlbGxDbGFzcyhjb2x1bW46IE9uZUNvbHVtbkRlZiwgcm93OiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cbiAgaWYgKCFjb2x1bW4uY2VsbENsYXNzKSByZXR1cm4gJyc7XG5cbiAgcmV0dXJuIHR5cGVvZiBjb2x1bW4uY2VsbENsYXNzID09PSAnZnVuY3Rpb24nXG4gICAgPyBjb2x1bW4uY2VsbENsYXNzKHJvdylcbiAgICA6IGNvbHVtbi5jZWxsQ2xhc3M7XG59XG5cbi8qKlxuICogVGhlIGNlbGwncyByYXcgZmllbGQgdmFsdWUsIHdpdGggYmxhbmsgdHJlYXRlZCBhcyBhYnNlbnQuXG4gKlxuICogV2FzIGBDZWxsRmllbGRWYWx1ZVBpcGVgLiBJdCBsaXZlZCBhcyBhbiBBbmd1bGFyIHBpcGUgYnV0IHdhcyBvbmx5IGV2ZXJcbiAqIGluc3RhbnRpYXRlZCBpbnNpZGUgYSBzZXJ2aWNlIOKAlCBhIHV0aWxpdHkgd2VhcmluZyBhIGBAUGlwZWAgZGVjb3JhdG9yLCB3aGljaFxuICogYWxzbyBjb3N0IGl0IGEgbW9kdWxlIGRlY2xhcmF0aW9uIGZvciBhIHRlbXBsYXRlIHVzZSB0aGF0IG5ldmVyIGV4aXN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ2VsbFZhbHVlPFQ+KGRhdGE6IFQsIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcblxuICAgIGNvbnN0IHZhbHVlID0gZ2V0RmllbGRWYWx1ZShkYXRhLCBmaWVsZCk7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT09ICcnKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgY2VsbCBoYXMgbm90aGluZyB0byBzaG93LlxuICpcbiAqIFdhcyBgQ2VsbEZpZWxkVmFsdWVFbXB0eVBpcGVgLiBgZmllbGRgIGlzIG9wdGlvbmFsIG9uIGBPbmVDb2x1bW5EZWZgIOKAlCBhblxuICogYWN0aW9uLW9ubHkgY29sdW1uIGxlZ2l0aW1hdGVseSBoYXMgbm9uZSDigJQgYW5kIHJlYWRpbmcgaXQgdW5ndWFyZGVkIHVzZWQgdG9cbiAqIHRocm93IHdoaWxlIHRoZSBncmlkIGJ1aWx0IGNlbGwgc3RhdGUsIHRha2luZyB0aGUgd2hvbGUgZ3JpZCBkb3duLiBObyBmaWVsZFxuICogbWVhbnMgbm90aGluZyB0byByZWFkLCB3aGljaCBpcyBlbXB0eSBieSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDZWxsRW1wdHk8VD4oZGF0YTogVCwgZmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFkYXRhIHx8ICFmaWVsZCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCB2YWx1ZSA9IGdldEZpZWxkVmFsdWUoZGF0YSwgZmllbGQpO1xuXG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xufVxuIl19
|