@aquera/ngx-smart-table 0.0.13-alpha → 0.0.14-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/editors/nile-select-editor.mjs +110 -39
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +2 -2
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +44 -1
- package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +30 -4
- package/fesm2015/aquera-ngx-smart-table.mjs +183 -42
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +181 -42
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/lib/editors/nile-select-editor.d.ts +6 -0
- package/lib/renderer/components/st-table/st-table.component.d.ts +11 -0
- package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +16 -0
- package/package.json +1 -1
|
@@ -32,6 +32,77 @@ export class NileSelectEditor {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Inject global styles to remove border from nile-select combobox
|
|
37
|
+
* Uses ::part selector which works across shadow DOM boundaries
|
|
38
|
+
*/
|
|
39
|
+
injectBorderlessStyles() {
|
|
40
|
+
if (NileSelectEditor.stylesInjected)
|
|
41
|
+
return;
|
|
42
|
+
const styleId = 'nile-select-borderless-styles';
|
|
43
|
+
if (document.getElementById(styleId)) {
|
|
44
|
+
NileSelectEditor.stylesInjected = true;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const style = document.createElement('style');
|
|
48
|
+
style.id = styleId;
|
|
49
|
+
style.textContent = `
|
|
50
|
+
.st-cell-editor::part(combobox) {
|
|
51
|
+
border: none !important;
|
|
52
|
+
outline: none !important;
|
|
53
|
+
box-shadow: none !important;
|
|
54
|
+
min-height: unset !important;
|
|
55
|
+
height: 100% !important;
|
|
56
|
+
padding: 0 !important;
|
|
57
|
+
}
|
|
58
|
+
.st-cell-editor::part(combobox):hover {
|
|
59
|
+
border: none !important;
|
|
60
|
+
outline: none !important;
|
|
61
|
+
box-shadow: none !important;
|
|
62
|
+
}
|
|
63
|
+
.st-cell-editor::part(combobox):focus {
|
|
64
|
+
border: none !important;
|
|
65
|
+
outline: none !important;
|
|
66
|
+
box-shadow: none !important;
|
|
67
|
+
}
|
|
68
|
+
// .st-cell-editor::part(tag) {
|
|
69
|
+
// margin: 1px 2px !important;
|
|
70
|
+
// border-radius: 3px !important;
|
|
71
|
+
// background-color: #e2e8f0 !important;
|
|
72
|
+
// font-size: 12px !important;
|
|
73
|
+
// height: auto !important;
|
|
74
|
+
// }
|
|
75
|
+
// .st-cell-editor::part(tag__base) {
|
|
76
|
+
// border: none !important;
|
|
77
|
+
// outline: none !important;
|
|
78
|
+
// padding: 0 2px !important;
|
|
79
|
+
// height: auto !important;
|
|
80
|
+
// }
|
|
81
|
+
// .st-cell-editor::part(tag__content) {
|
|
82
|
+
// padding: 0 !important;
|
|
83
|
+
// }
|
|
84
|
+
.st-cell-editor::part(tags) {
|
|
85
|
+
gap: 2px !important;
|
|
86
|
+
align-items: center !important;
|
|
87
|
+
}
|
|
88
|
+
.st-cell-editor::part(tags-count) {
|
|
89
|
+
margin: 0 !important;
|
|
90
|
+
}
|
|
91
|
+
.st-cell-editor::part(footer) {
|
|
92
|
+
height: 35px !important;
|
|
93
|
+
min-height: 35px !important;
|
|
94
|
+
padding: 8px !important;
|
|
95
|
+
padding-bottom: 30px !important;
|
|
96
|
+
box-sizing: border-box !important;
|
|
97
|
+
}
|
|
98
|
+
.st-cell-editor::part(listbox) {
|
|
99
|
+
margin-bottom: 0 !important;
|
|
100
|
+
padding-bottom: 0 !important;
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
103
|
+
document.head.appendChild(style);
|
|
104
|
+
NileSelectEditor.stylesInjected = true;
|
|
105
|
+
}
|
|
35
106
|
edit(context) {
|
|
36
107
|
if (!context.container) {
|
|
37
108
|
console.warn('NileSelectEditor requires a container element');
|
|
@@ -42,10 +113,18 @@ export class NileSelectEditor {
|
|
|
42
113
|
// Create NileSelect custom element using document.createElement
|
|
43
114
|
this.select = document.createElement('nile-select');
|
|
44
115
|
this.select.className = 'st-cell-editor';
|
|
45
|
-
// Apply inline styles for proper cell fitting
|
|
46
|
-
this.select.style.width = '100%';
|
|
47
|
-
this.select.style.height = '
|
|
116
|
+
// Apply inline styles for proper cell fitting - prevent height changes
|
|
117
|
+
this.select.style.width = 'calc(100% - 4px)';
|
|
118
|
+
this.select.style.height = '100%';
|
|
119
|
+
this.select.style.maxHeight = '100%';
|
|
48
120
|
this.select.style.boxSizing = 'border-box';
|
|
121
|
+
this.select.style.margin = '0 2px';
|
|
122
|
+
this.select.style.overflow = 'hidden';
|
|
123
|
+
// Inject styles to remove border using ::part selector
|
|
124
|
+
this.injectBorderlessStyles();
|
|
125
|
+
// Also try removing outline on host element
|
|
126
|
+
this.select.style.outline = 'none';
|
|
127
|
+
this.select.style.border = 'none';
|
|
49
128
|
// Set initial value
|
|
50
129
|
this.setInitialValue(context.value);
|
|
51
130
|
// Apply all configuration options
|
|
@@ -57,26 +136,21 @@ export class NileSelectEditor {
|
|
|
57
136
|
// Clear container and append select
|
|
58
137
|
context.container.innerHTML = '';
|
|
59
138
|
context.container.appendChild(this.select);
|
|
60
|
-
// Focus after render
|
|
139
|
+
// Focus and auto-open after render
|
|
61
140
|
setTimeout(() => {
|
|
62
141
|
this.select?.focus();
|
|
63
|
-
//
|
|
142
|
+
// Auto-open the dropdown
|
|
64
143
|
if (this.select) {
|
|
65
144
|
this.select.open = true;
|
|
66
145
|
}
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
146
|
+
// Clear initializing flag after dropdown has opened
|
|
147
|
+
setTimeout(() => {
|
|
148
|
+
this.isInitializing = false;
|
|
149
|
+
// For multi-select, find the portal div for click detection
|
|
150
|
+
if (this.options.multiple) {
|
|
70
151
|
this.portalDiv = document.querySelector('.nile-select-portal-append');
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
// Clear initializing flag after dropdown has time to open
|
|
76
|
-
setTimeout(() => {
|
|
77
|
-
this.isInitializing = false;
|
|
78
|
-
}, 100);
|
|
79
|
-
}
|
|
152
|
+
}
|
|
153
|
+
}, 100);
|
|
80
154
|
}, 0);
|
|
81
155
|
}
|
|
82
156
|
/**
|
|
@@ -241,6 +315,13 @@ export class NileSelectEditor {
|
|
|
241
315
|
if (!this.select)
|
|
242
316
|
return;
|
|
243
317
|
const validateOnSave = this.options.validateOnSave !== false;
|
|
318
|
+
// Prevent click events from bubbling up to the cell container
|
|
319
|
+
// This prevents parent handlers from interfering with nile-select's toggle
|
|
320
|
+
const clickHandler = (e) => {
|
|
321
|
+
e.stopPropagation();
|
|
322
|
+
};
|
|
323
|
+
this.select.addEventListener('click', clickHandler);
|
|
324
|
+
this.eventListeners.push({ event: 'click', handler: clickHandler });
|
|
244
325
|
// Handle keyboard events (keydown is not replaced by custom events)
|
|
245
326
|
const keydownHandler = (e) => {
|
|
246
327
|
const keyEvent = e;
|
|
@@ -271,7 +352,8 @@ export class NileSelectEditor {
|
|
|
271
352
|
};
|
|
272
353
|
this.select.addEventListener('nile-change', changeHandler);
|
|
273
354
|
this.eventListeners.push({ event: 'nile-change', handler: changeHandler });
|
|
274
|
-
// Handle blur as secondary save trigger
|
|
355
|
+
// Handle blur as secondary save trigger - only for single-select
|
|
356
|
+
// Multi-select uses hide event instead
|
|
275
357
|
const blurHandler = (e) => {
|
|
276
358
|
// Ignore blur during initialization
|
|
277
359
|
if (this.isInitializing) {
|
|
@@ -281,26 +363,13 @@ export class NileSelectEditor {
|
|
|
281
363
|
this.select?.reportValidity();
|
|
282
364
|
return;
|
|
283
365
|
}
|
|
284
|
-
//
|
|
366
|
+
// For single-select, save on blur (when clicking outside)
|
|
367
|
+
if (!this.options.multiple) {
|
|
368
|
+
context.onSave(this.getCurrentValue());
|
|
369
|
+
}
|
|
285
370
|
};
|
|
286
371
|
this.select.addEventListener('nile-blur', blurHandler);
|
|
287
372
|
this.eventListeners.push({ event: 'nile-blur', handler: blurHandler });
|
|
288
|
-
// Handle nile-hide event to prevent unwanted closing during initialization
|
|
289
|
-
const hideHandler = (e) => {
|
|
290
|
-
// If dropdown closes during initialization, re-open it (for both single and multi-select)
|
|
291
|
-
if (this.isInitializing) {
|
|
292
|
-
e.preventDefault();
|
|
293
|
-
e.stopPropagation();
|
|
294
|
-
// Re-open the dropdown after a brief delay using the open property
|
|
295
|
-
setTimeout(() => {
|
|
296
|
-
if (this.select && this.isInitializing) {
|
|
297
|
-
this.select.open = true;
|
|
298
|
-
}
|
|
299
|
-
}, 10);
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
this.select.addEventListener('nile-hide', hideHandler);
|
|
303
|
-
this.eventListeners.push({ event: 'nile-hide', handler: hideHandler });
|
|
304
373
|
// Handle clear button if enabled
|
|
305
374
|
if (this.options.clearable) {
|
|
306
375
|
const clearHandler = (e) => {
|
|
@@ -347,7 +416,8 @@ export class NileSelectEditor {
|
|
|
347
416
|
setTimeout(() => {
|
|
348
417
|
// Only add if select still exists (editor not destroyed)
|
|
349
418
|
if (this.select) {
|
|
350
|
-
|
|
419
|
+
// Use bubbling phase (false) instead of capture to not interfere with nile-select's toggle
|
|
420
|
+
document.addEventListener('click', documentClickHandler, false);
|
|
351
421
|
this.eventListeners.push({
|
|
352
422
|
event: 'document-click',
|
|
353
423
|
handler: documentClickHandler
|
|
@@ -385,8 +455,8 @@ export class NileSelectEditor {
|
|
|
385
455
|
if (this.select) {
|
|
386
456
|
this.eventListeners.forEach(({ event, handler }) => {
|
|
387
457
|
if (event === 'document-click') {
|
|
388
|
-
// Remove from document for multi-select click handler
|
|
389
|
-
document.removeEventListener('click', handler,
|
|
458
|
+
// Remove from document for multi-select click handler (bubbling phase)
|
|
459
|
+
document.removeEventListener('click', handler, false);
|
|
390
460
|
}
|
|
391
461
|
else {
|
|
392
462
|
// Remove from select element
|
|
@@ -415,4 +485,5 @@ export class NileSelectEditor {
|
|
|
415
485
|
return (Array.isArray(value) ? (value.length > 0 ? value[0] : '') : value);
|
|
416
486
|
}
|
|
417
487
|
}
|
|
418
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQW1GOUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQVUzQixZQUE2QixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQVQ3RCwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFJdkIsbUJBQWMsR0FBcUQsRUFBRSxDQUFDO1FBRXRFLG1CQUFjLEdBQThCLEVBQUUsQ0FBQztRQUMvQyxtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLHdEQUF3RDtRQUd0Riw0QkFBNEI7UUFDNUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLDhDQUE4QztnQkFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNmLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDdEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2FBQzFEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQs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SUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQWlCLENBQUM7U0FDMUQ7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVoQyw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFpQixDQUFDO1NBQ2pFO1FBRUQsMEJBQTBCO1FBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQWlCLENBQUM7SUFDN0YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBTZWxlY3Qgb3B0aW9uIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb24ge1xuICAvKiogVGhlIG9wdGlvbidzIHZhbHVlICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgZGlzYWJsZWQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgcHJlZml4IGljb24gb3IgY29udGVudCAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBpbnRlcmZhY2UgZm9yIE5pbGVTZWxlY3RFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaWxlU2VsZWN0RWRpdG9yT3B0aW9ucyB7XG4gIC8vIE9wdGlvbnMgY29uZmlndXJhdGlvbiAoUkVRVUlSRUQpXG4gIC8qKiBBcnJheSBvZiBvcHRpb25zIC0gc3VwcG9ydHMgc3RhdGljIGFycmF5cywgT2JzZXJ2YWJsZSwgb3IgQmVoYXZpb3JTdWJqZWN0IGZvciByZWFjdGl2ZSB1cGRhdGVzICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdIHwgc3RyaW5nW10gfCBPYnNlcnZhYmxlPFNlbGVjdE9wdGlvbltdIHwgc3RyaW5nW10+O1xuICBcbiAgLy8gQmFzaWMgcHJvcGVydGllc1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB3aGVuIG5vIHNlbGVjdGlvbiBpcyBtYWRlICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogU2l6ZSBvZiB0aGUgc2VsZWN0IGNvbnRyb2wgKi9cbiAgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIC8qKiBFbmFibGUgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGUgKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBcbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAvKiogQWRkcyBjbGVhciBidXR0b24gd2hlbiB2YWx1ZSBpcyBub3QgZW1wdHkgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgLyoqIERpc2FibGUgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE1ha2UgdGhlIHNlbGVjdCByZXF1aXJlZCAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgKi9cbiAgc2VhcmNoRW5hYmxlZD86IGJvb2xlYW47XG4gIFxuICAvLyBWaXN1YWwgc3RhdGVzXG4gIC8qKiBXYXJuaW5nIHN0YXRlIHN0eWxpbmcgKi9cbiAgd2FybmluZz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBzdGF0ZSBzdHlsaW5nICovXG4gIGVycm9yPzogYm9vbGVhbjtcbiAgLyoqIFN1Y2Nlc3Mgc3RhdGUgc3R5bGluZyAqL1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBIZWxwIHRleHQgdG8gZGlzcGxheSAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgXG4gIC8vIEFkdmFuY2VkIGZlYXR1cmVzXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBzZWxlY3RlZCBvcHRpb25zIHRvIHNob3cgaW4gbXVsdGlwbGUgbW9kZSAoMCA9IG5vIGxpbWl0KSAqL1xuICBtYXhPcHRpb25zVmlzaWJsZT86IG51bWJlcjtcbiAgLyoqIERyYXdzIGEgZmlsbGVkIHNlbGVjdCBzdHlsZSAqL1xuICBmaWxsZWQ/OiBib29sZWFuO1xuICAvKiogUGlsbC1zdHlsZSB3aXRoIHJvdW5kZWQgZWRnZXMgKi9cbiAgcGlsbD86IGJvb2xlYW47XG4gIC8qKiBVc2UgZml4ZWQgcG9zaXRpb25pbmcgdG8gcHJldmVudCBjbGlwcGluZyAqL1xuICBob2lzdD86IGJvb2xlYW47XG4gIC8qKiBQbGFjZW1lbnQgb2YgdGhlIGRyb3Bkb3duIG1lbnUgKi9cbiAgcGxhY2VtZW50PzogJ3RvcCcgfCAnYm90dG9tJztcbiAgXG4gIC8vIFZpcnR1YWwgc2Nyb2xsIGZvciBsYXJnZSBsaXN0c1xuICAvKiogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsaW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBtYW55IG9wdGlvbnMgKi9cbiAgZW5hYmxlVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG4gIFxuICAvLyBTZWFyY2ggY29uZmlndXJhdGlvblxuICAvKiogRGlzYWJsZSBsb2NhbCBzZWFyY2ggKHVzZSBmb3Igc2VydmVyLXNpZGUgc2VhcmNoKSAqL1xuICBkaXNhYmxlTG9jYWxTZWFyY2g/OiBib29sZWFuO1xuICBcbiAgLy8gVmFsaWRhdGlvblxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xuICBcbiAgLy8gUG9ydGFsIG9wdGlvbnNcbiAgLyoqIEFwcGVuZCBkcm9wZG93biB0byBkb2N1bWVudCBib2R5IGluc3RlYWQgb2YgcGFyZW50ICovXG4gIHBvcnRhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3VzdG9tIGVkaXRvciB0aGF0IHVzZXMgTmlsZVNlbGVjdCBjb21wb25lbnRcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB2YWx1ZSB0eXBlIChzdHJpbmcgZm9yIHNpbmdsZSBzZWxlY3Rpb24sIHN0cmluZ1tdIGZvciBtdWx0aXBsZSlcbiAqL1xuZXhwb3J0IGNsYXNzIE5pbGVTZWxlY3RFZGl0b3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDZWxsRWRpdG9yPFQ+IHtcbiAgYWNjZXB0c0luaXRpYWxLZXlwcmVzcyA9IGZhbHNlO1xuICBcbiAgcHJpdmF0ZSBzZWxlY3Q/OiBhbnk7XG4gIHByaXZhdGUgcG9ydGFsRGl2PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZXZlbnQ6IHN0cmluZzsgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciB9PiA9IFtdO1xuICBwcml2YXRlIG9wdGlvbnNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY3VycmVudE9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10gPSBbXTtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemluZyA9IGZhbHNlOyAvLyBGbGFnIHRvIHByZXZlbnQgaW1tZWRpYXRlIGNsb3NlIGR1cmluZyBpbml0aWFsaXphdGlvblxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMpIHtcbiAgICAvLyBIYW5kbGUgT2JzZXJ2YWJsZSBvcHRpb25zXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShvcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSBvcHRpb25zLm9wdGlvbnMuc3Vic2NyaWJlKG9wdHMgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0cztcbiAgICAgICAgLy8gSWYgZWRpdG9yIGlzIGFscmVhZHkgYWN0aXZlLCB1cGRhdGUgdGhlIERPTVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YXRpYyBvcHRpb25zXG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IFtdO1xuICAgICAgaWYgKHRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTmlsZVNlbGVjdEVkaXRvcjogb3B0aW9ucyBhcnJheSBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCBpbml0aWFsaXppbmcgZmxhZyB0byBwcmV2ZW50IGltbWVkaWF0ZSBjbG9zZVxuICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSB0cnVlO1xuXG4gICAgLy8gQ3JlYXRlIE5pbGVTZWxlY3QgY3VzdG9tIGVsZW1lbnQgdXNpbmcgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgIHRoaXMuc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1zZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIG9wdGlvbnMgd2l0aCBjdXJyZW50IG9wdGlvbnNcbiAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgc2VsZWN0XG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpO1xuXG4gICAgLy8gRm9jdXMgYWZ0ZXIgcmVuZGVyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdD8uZm9jdXMoKTtcbiAgICAgIFxuICAgICAgLy8gVXNlIHRoZSBvcGVuIHByb3BlcnR5IHRvIG9wZW4gdGhlIGRyb3Bkb3duIChtb3JlIHJlbGlhYmxlIHRoYW4gY2xpY2spXG4gICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Qub3BlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBtdWx0aS1zZWxlY3QsIGZpbmQgdGhlIHBvcnRhbCBkaXYgZm9yIGNsaWNrIGRldGVjdGlvblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBvcnRhbERpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgdGhpcy5pc0luaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgICB9LCAxNTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgaW5pdGlhbGl6aW5nIGZsYWcgYWZ0ZXIgZHJvcGRvd24gaGFzIHRpbWUgdG8gb3BlblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgc2VsZWN0XG4gICAqL1xuICBwcml2YXRlIHNldEluaXRpYWxWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBzZWxlY3Rpb24gLSB2YWx1ZSBzaG91bGQgYmUgYXJyYXlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IFtTdHJpbmcodmFsdWUpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUgc2VsZWN0aW9uXG4gICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IHZhbHVlID8gU3RyaW5nKHZhbHVlKSA6ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlU2VsZWN0IGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEJhc2ljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHQgZm9yIHRhYmxlIGNlbGxzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5zZWxlY3QubXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMubXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVpcmVkID0gdGhpcy5vcHRpb25zLnJlcXVpcmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3Quc2VhcmNoRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zZWxlY3QuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QubWF4T3B0aW9uc1Zpc2libGUgPSB0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZmlsbGVkID0gdGhpcy5vcHRpb25zLmZpbGxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBpbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBpbGwgPSB0aGlzLm9wdGlvbnMucGlsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhvaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhvaXN0ID0gdGhpcy5vcHRpb25zLmhvaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IGhvaXN0IHRvIHRydWUgZm9yIGFsbCBzZWxlY3RzIHRvIHByZXZlbnQgY2xpcHBpbmcgaXNzdWVzIGluIHRhYmxlIGNlbGxzXG4gICAgICB0aGlzLnNlbGVjdC5ob2lzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBsYWNlbWVudCA9IHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lbmFibGVWaXJ0dWFsU2Nyb2xsID0gdGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVMb2NhbFNlYXJjaCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wb3J0YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdGhpcy5vcHRpb25zLnBvcnRhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdHJ1ZTsgLy8gRGVmYXVsdCB0byBwb3J0YWwgbW9kZSBmb3IgYmV0dGVyIHBvc2l0aW9uaW5nXG4gICAgfVxuXG4gICAgLy8gUHJldmVudCB3aWR0aCBzeW5jaW5nIGlzc3VlcyBpbiB0YWJsZSBjZWxsc1xuICAgIHRoaXMuc2VsZWN0Lm5vV2lkdGhTeW5jID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgb3B0aW9ucyBkeW5hbWljYWxseSB3aGlsZSBlZGl0b3IgaXMgYWN0aXZlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgZXhpc3Rpbmcgb3B0aW9uc1xuICAgIHdoaWxlICh0aGlzLnNlbGVjdC5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZW1vdmVDaGlsZCh0aGlzLnNlbGVjdC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICAvLyBSZS1hcHBlbmQgd2l0aCBuZXcgb3B0aW9uc1xuICAgIHRoaXMuY3JlYXRlQW5kQXBwZW5kT3B0aW9ucyh0aGlzLmN1cnJlbnRPcHRpb25zKTtcbiAgICBcbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBOaWxlT3B0aW9uIGVsZW1lbnRzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgc2VsZWN0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcmVuZGVyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFuZEFwcGVuZE9wdGlvbnMob3B0aW9uczogKFNlbGVjdE9wdGlvbiB8IHN0cmluZylbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIG9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgY29uc3QgbmlsZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtb3B0aW9uJykgYXMgYW55O1xuXG4gICAgICAvLyBBdXRvLWRldGVjdCBmb3JtYXQ6IHN0cmluZyBvciBTZWxlY3RPcHRpb24gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdDtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0KTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pbGVPcHRpb24udmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIG9wdC52YWx1ZSk7XG4gICAgICAgIG5pbGVPcHRpb24udGV4dENvbnRlbnQgPSBvcHQubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgbmlsZU9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBwcmVmaXggaWYgcHJvdmlkZWQgKGNvdWxkIGJlIGljb24gbmFtZSBvciBjb250ZW50KVxuICAgICAgICBpZiAob3B0LnByZWZpeCkge1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByZWZpeCcpO1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uaW5uZXJIVE1MID0gYDxuaWxlLWljb24gbmFtZT1cIiR7b3B0LnByZWZpeH1cIj48L25pbGUtaWNvbj5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0IS5hcHBlbmRDaGlsZChuaWxlT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIChrZXlkb3duIGlzIG5vdCByZXBsYWNlZCBieSBjdXN0b20gZXZlbnRzKVxuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuXG4gICAgLy8gVXNlIG5pbGUtY2hhbmdlIGN1c3RvbSBldmVudCBhcyBwcmltYXJ5IHNhdmUgdHJpZ2dlclxuICAgIGNvbnN0IGNoYW5nZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIC8vIElnbm9yZSBjaGFuZ2UgZXZlbnRzIGR1cmluZyBpbml0aWFsaXphdGlvbiAoY2FuIGZpcmUgd2hlbiBzZXR0aW5nIGluaXRpYWwgdmFsdWUpXG4gICAgICBpZiAodGhpcy5pc0luaXRpYWxpemluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIGlmICh2YWxpZGF0ZU9uU2F2ZSAmJiAhdGhpcy5zZWxlY3Q/LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICB0aGlzLnNlbGVjdD8ucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBPbmx5IHNhdmUgaW1tZWRpYXRlbHkgZm9yIHNpbmdsZS1zZWxlY3RcbiAgICAgIC8vIE11bHRpLXNlbGVjdCBzYXZlcyBvbiBvdXRzaWRlIGNsaWNrXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUoY3VzdG9tRXZlbnQuZGV0YWlsLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNoYW5nZScsIGNoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiBjaGFuZ2VIYW5kbGVyIH0pO1xuXG4gICAgLy8gSGFuZGxlIGJsdXIgYXMgc2Vjb25kYXJ5IHNhdmUgdHJpZ2dlclxuICAgIGNvbnN0IGJsdXJIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBJZ25vcmUgYmx1ciBkdXJpbmcgaW5pdGlhbGl6YXRpb25cbiAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWxpZGF0ZU9uU2F2ZSAmJiAhdGhpcy5zZWxlY3Q/LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICB0aGlzLnNlbGVjdD8ucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gY29udGV4dC5vblNhdmUodGhpcy5nZXRDdXJyZW50VmFsdWUoKSk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWJsdXInLCBibHVySGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWJsdXInLCBoYW5kbGVyOiBibHVySGFuZGxlciB9KTtcblxuICAgIC8vIEhhbmRsZSBuaWxlLWhpZGUgZXZlbnQgdG8gcHJldmVudCB1bndhbnRlZCBjbG9zaW5nIGR1cmluZyBpbml0aWFsaXphdGlvblxuICAgIGNvbnN0IGhpZGVIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBJZiBkcm9wZG93biBjbG9zZXMgZHVyaW5nIGluaXRpYWxpemF0aW9uLCByZS1vcGVuIGl0IChmb3IgYm90aCBzaW5nbGUgYW5kIG11bHRpLXNlbGVjdClcbiAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6aW5nKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgLy8gUmUtb3BlbiB0aGUgZHJvcGRvd24gYWZ0ZXIgYSBicmllZiBkZWxheSB1c2luZyB0aGUgb3BlbiBwcm9wZXJ0eVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3QgJiYgdGhpcy5pc0luaXRpYWxpemluZykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Qub3BlbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWhpZGUnLCBoaWRlSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWhpZGUnLCBoYW5kbGVyOiBoaWRlSGFuZGxlciB9KTtcblxuICAgIC8vIEhhbmRsZSBjbGVhciBidXR0b24gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICBjb25zdCBjbGVhckhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy5tdWx0aXBsZSA/IFtdIDogJycpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNsZWFyJywgY2xlYXJIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jbGVhcicsIGhhbmRsZXI6IGNsZWFySGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VhcmNoIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2ggc2NlbmFyaW9zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICAvLyBFbWl0IHNlYXJjaCBxdWVyeSB0aHJvdWdoIG9uQ2hhbmdlIGZvciBleHRlcm5hbCBoYW5kbGluZ1xuICAgICAgICBjb250ZXh0Lm9uQ2hhbmdlKGN1c3RvbUV2ZW50LmRldGFpbCBhcyBUKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLXNlYXJjaCcsIHNlYXJjaEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLXNlYXJjaCcsIGhhbmRsZXI6IHNlYXJjaEhhbmRsZXIgfSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIG11bHRpLXNlbGVjdDogZGV0ZWN0IGNsaWNrcyBvdXRzaWRlIHBvcnRhbCBhbmQgc2VsZWN0XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgY29uc3QgZG9jdW1lbnRDbGlja0hhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGUgYXMgTW91c2VFdmVudDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBwb3J0YWwgZGl2IGV4aXN0cyAobWlnaHQgdGFrZSBhIG1vbWVudCB0byByZW5kZXIpXG4gICAgICAgIGlmICghdGhpcy5wb3J0YWxEaXYpIHtcbiAgICAgICAgICB0aGlzLnBvcnRhbERpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIERldGVybWluZSBpZiBjbGljayBpcyBpbnNpZGUgdGhlIHNlbGVjdCBvciBwb3J0YWxcbiAgICAgICAgY29uc3QgY2xpY2tlZEluc2lkZVNlbGVjdCA9IHRoaXMuc2VsZWN0Py5jb250YWlucyh0YXJnZXQpO1xuICAgICAgICBjb25zdCBjbGlja2VkSW5zaWRlUG9ydGFsID0gdGhpcy5wb3J0YWxEaXY/LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiBjbGlja2VkIG91dHNpZGUgYm90aCBzZWxlY3QgYW5kIHBvcnRhbCwgc2F2ZSBhbmQgY2xvc2VcbiAgICAgICAgaWYgKCFjbGlja2VkSW5zaWRlU2VsZWN0ICYmICFjbGlja2VkSW5zaWRlUG9ydGFsKSB7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlT25TYXZlICYmICF0aGlzLnNlbGVjdD8uY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdD8ucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5nZXRDdXJyZW50VmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBjbGljayBpcyBpbnNpZGUgLSBkbyBub3RoaW5nIChkcm9wZG93biBzdGF5cyBvcGVuKVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gRGVsYXkgYWRkaW5nIHRoZSBkb2N1bWVudCBjbGljayBoYW5kbGVyIHRvIHByZXZlbnQgdGhlIGluaXRpYWwgY2xpY2sgXG4gICAgICAvLyAodGhhdCBvcGVuZWQgdGhlIGVkaXRvcikgZnJvbSBpbW1lZGlhdGVseSB0cmlnZ2VyaW5nIGl0IGFuZCBjbG9zaW5nIHRoZSBkcm9wZG93blxuICAgICAgLy8gVXNlIDIwMG1zIHRvIGVuc3VyZSB0aGUgZHJvcGRvd24gaGFzIGZ1bGx5IG9wZW5lZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgYWRkIGlmIHNlbGVjdCBzdGlsbCBleGlzdHMgKGVkaXRvciBub3QgZGVzdHJveWVkKVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvY3VtZW50Q2xpY2tIYW5kbGVyLCB0cnVlKTtcbiAgICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBcbiAgICAgICAgICAgIGV2ZW50OiAnZG9jdW1lbnQtY2xpY2snLCAgLy8gVXNlIGN1c3RvbSBuYW1lIHRvIGlkZW50aWZ5IGl0XG4gICAgICAgICAgICBoYW5kbGVyOiBkb2N1bWVudENsaWNrSGFuZGxlciBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsdWUgYmFzZWQgb24gc2VsZWN0aW9uIG1vZGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBFbnN1cmUgYXJyYXkgZm9yIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlID8gW3ZhbHVlXSA6IFtdKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gLSByZXR1cm4gc3RyaW5nXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGluaXRpYWxpemF0aW9uIGZsYWdcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBvcHRpb25zIE9ic2VydmFibGVcbiAgICBpZiAodGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIGlmIChldmVudCA9PT0gJ2RvY3VtZW50LWNsaWNrJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGRvY3VtZW50IGZvciBtdWx0aS1zZWxlY3QgY2xpY2sgaGFuZGxlclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2VsZWN0IGVsZW1lbnRcbiAgICAgICAgICB0aGlzLnNlbGVjdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLnNlbGVjdC5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc2VsZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wb3J0YWxEaXYgPSB1bmRlZmluZWQ7ICAvLyBDbGVhbiB1cCBwb3J0YWwgcmVmZXJlbmNlXG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkge1xuICAgICAgcmV0dXJuICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPyBbXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgXG4gICAgLy8gSGFuZGxlIG11bHRpcGxlIHNlbGVjdGlvblxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIHNpbmdsZSBzZWxlY3Rpb25cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSA6IHZhbHVlKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|
|
488
|
+
NileSelectEditor.stylesInjected = false;
|
|
489
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQW1GOUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQW9GM0IsWUFBNkIsT0FBZ0M7UUFBaEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFuRjdELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUt2QixtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBQy9DLG1CQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsd0RBQXdEO1FBNEV0Riw0QkFBNEI7UUFDNUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLDhDQUE4QztnQkFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNmLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDdEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2FBQzFEO1NBQ0Y7SUFDSCxDQUFDO0lB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QUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFpQixDQUFDO1NBQ2pFO1FBRUQsMEJBQTBCO1FBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQWlCLENBQUM7SUFDN0YsQ0FBQzs7QUE5aEJjLCtCQUFjLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBTZWxlY3Qgb3B0aW9uIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb24ge1xuICAvKiogVGhlIG9wdGlvbidzIHZhbHVlICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgZGlzYWJsZWQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgcHJlZml4IGljb24gb3IgY29udGVudCAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBpbnRlcmZhY2UgZm9yIE5pbGVTZWxlY3RFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaWxlU2VsZWN0RWRpdG9yT3B0aW9ucyB7XG4gIC8vIE9wdGlvbnMgY29uZmlndXJhdGlvbiAoUkVRVUlSRUQpXG4gIC8qKiBBcnJheSBvZiBvcHRpb25zIC0gc3VwcG9ydHMgc3RhdGljIGFycmF5cywgT2JzZXJ2YWJsZSwgb3IgQmVoYXZpb3JTdWJqZWN0IGZvciByZWFjdGl2ZSB1cGRhdGVzICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdIHwgc3RyaW5nW10gfCBPYnNlcnZhYmxlPFNlbGVjdE9wdGlvbltdIHwgc3RyaW5nW10+O1xuICBcbiAgLy8gQmFzaWMgcHJvcGVydGllc1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB3aGVuIG5vIHNlbGVjdGlvbiBpcyBtYWRlICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogU2l6ZSBvZiB0aGUgc2VsZWN0IGNvbnRyb2wgKi9cbiAgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIC8qKiBFbmFibGUgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGUgKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBcbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAvKiogQWRkcyBjbGVhciBidXR0b24gd2hlbiB2YWx1ZSBpcyBub3QgZW1wdHkgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgLyoqIERpc2FibGUgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE1ha2UgdGhlIHNlbGVjdCByZXF1aXJlZCAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgKi9cbiAgc2VhcmNoRW5hYmxlZD86IGJvb2xlYW47XG4gIFxuICAvLyBWaXN1YWwgc3RhdGVzXG4gIC8qKiBXYXJuaW5nIHN0YXRlIHN0eWxpbmcgKi9cbiAgd2FybmluZz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBzdGF0ZSBzdHlsaW5nICovXG4gIGVycm9yPzogYm9vbGVhbjtcbiAgLyoqIFN1Y2Nlc3Mgc3RhdGUgc3R5bGluZyAqL1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBIZWxwIHRleHQgdG8gZGlzcGxheSAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgXG4gIC8vIEFkdmFuY2VkIGZlYXR1cmVzXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBzZWxlY3RlZCBvcHRpb25zIHRvIHNob3cgaW4gbXVsdGlwbGUgbW9kZSAoMCA9IG5vIGxpbWl0KSAqL1xuICBtYXhPcHRpb25zVmlzaWJsZT86IG51bWJlcjtcbiAgLyoqIERyYXdzIGEgZmlsbGVkIHNlbGVjdCBzdHlsZSAqL1xuICBmaWxsZWQ/OiBib29sZWFuO1xuICAvKiogUGlsbC1zdHlsZSB3aXRoIHJvdW5kZWQgZWRnZXMgKi9cbiAgcGlsbD86IGJvb2xlYW47XG4gIC8qKiBVc2UgZml4ZWQgcG9zaXRpb25pbmcgdG8gcHJldmVudCBjbGlwcGluZyAqL1xuICBob2lzdD86IGJvb2xlYW47XG4gIC8qKiBQbGFjZW1lbnQgb2YgdGhlIGRyb3Bkb3duIG1lbnUgKi9cbiAgcGxhY2VtZW50PzogJ3RvcCcgfCAnYm90dG9tJztcbiAgXG4gIC8vIFZpcnR1YWwgc2Nyb2xsIGZvciBsYXJnZSBsaXN0c1xuICAvKiogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsaW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBtYW55IG9wdGlvbnMgKi9cbiAgZW5hYmxlVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG4gIFxuICAvLyBTZWFyY2ggY29uZmlndXJhdGlvblxuICAvKiogRGlzYWJsZSBsb2NhbCBzZWFyY2ggKHVzZSBmb3Igc2VydmVyLXNpZGUgc2VhcmNoKSAqL1xuICBkaXNhYmxlTG9jYWxTZWFyY2g/OiBib29sZWFuO1xuICBcbiAgLy8gVmFsaWRhdGlvblxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xuICBcbiAgLy8gUG9ydGFsIG9wdGlvbnNcbiAgLyoqIEFwcGVuZCBkcm9wZG93biB0byBkb2N1bWVudCBib2R5IGluc3RlYWQgb2YgcGFyZW50ICovXG4gIHBvcnRhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3VzdG9tIGVkaXRvciB0aGF0IHVzZXMgTmlsZVNlbGVjdCBjb21wb25lbnRcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB2YWx1ZSB0eXBlIChzdHJpbmcgZm9yIHNpbmdsZSBzZWxlY3Rpb24sIHN0cmluZ1tdIGZvciBtdWx0aXBsZSlcbiAqL1xuZXhwb3J0IGNsYXNzIE5pbGVTZWxlY3RFZGl0b3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDZWxsRWRpdG9yPFQ+IHtcbiAgYWNjZXB0c0luaXRpYWxLZXlwcmVzcyA9IGZhbHNlO1xuICBcbiAgcHJpdmF0ZSBzdGF0aWMgc3R5bGVzSW5qZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzZWxlY3Q/OiBhbnk7XG4gIHByaXZhdGUgcG9ydGFsRGl2PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZXZlbnQ6IHN0cmluZzsgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciB9PiA9IFtdO1xuICBwcml2YXRlIG9wdGlvbnNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY3VycmVudE9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10gPSBbXTtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemluZyA9IGZhbHNlOyAvLyBGbGFnIHRvIHByZXZlbnQgaW1tZWRpYXRlIGNsb3NlIGR1cmluZyBpbml0aWFsaXphdGlvblxuXG4gIC8qKlxuICAgKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyB0byByZW1vdmUgYm9yZGVyIGZyb20gbmlsZS1zZWxlY3QgY29tYm9ib3hcbiAgICogVXNlcyA6OnBhcnQgc2VsZWN0b3Igd2hpY2ggd29ya3MgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllc1xuICAgKi9cbiAgcHJpdmF0ZSBpbmplY3RCb3JkZXJsZXNzU3R5bGVzKCk6IHZvaWQge1xuICAgIGlmIChOaWxlU2VsZWN0RWRpdG9yLnN0eWxlc0luamVjdGVkKSByZXR1cm47XG4gICAgXG4gICAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLXNlbGVjdC1ib3JkZXJsZXNzLXN0eWxlcyc7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlSWQpKSB7XG4gICAgICBOaWxlU2VsZWN0RWRpdG9yLnN0eWxlc0luamVjdGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAuc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KGNvbWJvYm94KTpmb2N1cyB7XG4gICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC8vIC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWcpIHtcbiAgICAgIC8vICAgbWFyZ2luOiAxcHggMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAvLyAgIGJvcmRlci1yYWRpdXM6IDNweCAhaW1wb3J0YW50O1xuICAgICAgLy8gICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlOGYwICFpbXBvcnRhbnQ7XG4gICAgICAvLyAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1xuICAgICAgLy8gICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgIC8vIH1cbiAgICAgIC8vIC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWdfX2Jhc2UpIHtcbiAgICAgIC8vICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAvLyAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIC8vICAgcGFkZGluZzogMCAycHggIWltcG9ydGFudDtcbiAgICAgIC8vICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICAvLyB9XG4gICAgICAvLyAuc3QtY2VsbC1lZGl0b3I6OnBhcnQodGFnX19jb250ZW50KSB7XG4gICAgICAvLyAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgIC8vIH1cbiAgICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWdzKSB7XG4gICAgICAgIGdhcDogMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWdzLWNvdW50KSB7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KGZvb3Rlcikge1xuICAgICAgICBoZWlnaHQ6IDM1cHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLWhlaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiA4cHggIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDMwcHggIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KGxpc3Rib3gpIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgTmlsZVNlbGVjdEVkaXRvci5zdHlsZXNJbmplY3RlZCA9IHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5pbGVTZWxlY3RFZGl0b3JPcHRpb25zKSB7XG4gICAgLy8gSGFuZGxlIE9ic2VydmFibGUgb3B0aW9uc1xuICAgIGlmIChpc09ic2VydmFibGUob3B0aW9ucy5vcHRpb25zKSkge1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gb3B0aW9ucy5vcHRpb25zLnN1YnNjcmliZShvcHRzID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50T3B0aW9ucyA9IG9wdHM7XG4gICAgICAgIC8vIElmIGVkaXRvciBpcyBhbHJlYWR5IGFjdGl2ZSwgdXBkYXRlIHRoZSBET01cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGF0aWMgb3B0aW9uc1xuICAgICAgdGhpcy5jdXJyZW50T3B0aW9ucyA9IG9wdGlvbnMub3B0aW9ucyB8fCBbXTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3I6IG9wdGlvbnMgYXJyYXkgaXMgZW1wdHknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlU2VsZWN0RWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgaW5pdGlhbGl6aW5nIGZsYWcgdG8gcHJldmVudCBpbW1lZGlhdGUgY2xvc2VcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gdHJ1ZTtcblxuICAgIC8vIENyZWF0ZSBOaWxlU2VsZWN0IGN1c3RvbSBlbGVtZW50IHVzaW5nIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICB0aGlzLnNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtc2VsZWN0Jyk7XG4gICAgdGhpcy5zZWxlY3QuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yJztcbiAgICBcbiAgICAvLyBBcHBseSBpbmxpbmUgc3R5bGVzIGZvciBwcm9wZXIgY2VsbCBmaXR0aW5nIC0gcHJldmVudCBoZWlnaHQgY2hhbmdlc1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLndpZHRoID0gJ2NhbGMoMTAwJSAtIDRweCknO1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5tYXhIZWlnaHQgPSAnMTAwJSc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLm1hcmdpbiA9ICcwIDJweCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBcbiAgICAvLyBJbmplY3Qgc3R5bGVzIHRvIHJlbW92ZSBib3JkZXIgdXNpbmcgOjpwYXJ0IHNlbGVjdG9yXG4gICAgdGhpcy5pbmplY3RCb3JkZXJsZXNzU3R5bGVzKCk7XG4gICAgXG4gICAgLy8gQWxzbyB0cnkgcmVtb3Zpbmcgb3V0bGluZSBvbiBob3N0IGVsZW1lbnRcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLmJvcmRlciA9ICdub25lJztcbiAgICBcbiAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZVxuICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlKGNvbnRleHQudmFsdWUpO1xuXG4gICAgLy8gQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG5cbiAgICAvLyBDcmVhdGUgYW5kIGFwcGVuZCBvcHRpb25zIHdpdGggY3VycmVudCBvcHRpb25zXG4gICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuXG4gICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0KTtcblxuICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgYXBwZW5kIHNlbGVjdFxuICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgIGNvbnRleHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KTtcblxuICAgIC8vIEZvY3VzIGFuZCBhdXRvLW9wZW4gYWZ0ZXIgcmVuZGVyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdD8uZm9jdXMoKTtcbiAgICAgIFxuICAgICAgLy8gQXV0by1vcGVuIHRoZSBkcm9wZG93blxuICAgICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Lm9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDbGVhciBpbml0aWFsaXppbmcgZmxhZyBhZnRlciBkcm9wZG93biBoYXMgb3BlbmVkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgICBcbiAgICAgICAgLy8gRm9yIG11bHRpLXNlbGVjdCwgZmluZCB0aGUgcG9ydGFsIGRpdiBmb3IgY2xpY2sgZGV0ZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnBvcnRhbERpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgc2VsZWN0XG4gICAqL1xuICBwcml2YXRlIHNldEluaXRpYWxWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBzZWxlY3Rpb24gLSB2YWx1ZSBzaG91bGQgYmUgYXJyYXlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IFtTdHJpbmcodmFsdWUpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUgc2VsZWN0aW9uXG4gICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IHZhbHVlID8gU3RyaW5nKHZhbHVlKSA6ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlU2VsZWN0IGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEJhc2ljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHQgZm9yIHRhYmxlIGNlbGxzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5zZWxlY3QubXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMubXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVpcmVkID0gdGhpcy5vcHRpb25zLnJlcXVpcmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3Quc2VhcmNoRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zZWxlY3QuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QubWF4T3B0aW9uc1Zpc2libGUgPSB0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZmlsbGVkID0gdGhpcy5vcHRpb25zLmZpbGxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBpbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBpbGwgPSB0aGlzLm9wdGlvbnMucGlsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhvaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhvaXN0ID0gdGhpcy5vcHRpb25zLmhvaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IGhvaXN0IHRvIHRydWUgZm9yIGFsbCBzZWxlY3RzIHRvIHByZXZlbnQgY2xpcHBpbmcgaXNzdWVzIGluIHRhYmxlIGNlbGxzXG4gICAgICB0aGlzLnNlbGVjdC5ob2lzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBsYWNlbWVudCA9IHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lbmFibGVWaXJ0dWFsU2Nyb2xsID0gdGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVMb2NhbFNlYXJjaCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wb3J0YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdGhpcy5vcHRpb25zLnBvcnRhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdHJ1ZTsgLy8gRGVmYXVsdCB0byBwb3J0YWwgbW9kZSBmb3IgYmV0dGVyIHBvc2l0aW9uaW5nXG4gICAgfVxuXG4gICAgLy8gUHJldmVudCB3aWR0aCBzeW5jaW5nIGlzc3VlcyBpbiB0YWJsZSBjZWxsc1xuICAgIHRoaXMuc2VsZWN0Lm5vV2lkdGhTeW5jID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgb3B0aW9ucyBkeW5hbWljYWxseSB3aGlsZSBlZGl0b3IgaXMgYWN0aXZlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgZXhpc3Rpbmcgb3B0aW9uc1xuICAgIHdoaWxlICh0aGlzLnNlbGVjdC5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZW1vdmVDaGlsZCh0aGlzLnNlbGVjdC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICAvLyBSZS1hcHBlbmQgd2l0aCBuZXcgb3B0aW9uc1xuICAgIHRoaXMuY3JlYXRlQW5kQXBwZW5kT3B0aW9ucyh0aGlzLmN1cnJlbnRPcHRpb25zKTtcbiAgICBcbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBOaWxlT3B0aW9uIGVsZW1lbnRzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgc2VsZWN0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcmVuZGVyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFuZEFwcGVuZE9wdGlvbnMob3B0aW9uczogKFNlbGVjdE9wdGlvbiB8IHN0cmluZylbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIG9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgY29uc3QgbmlsZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtb3B0aW9uJykgYXMgYW55O1xuXG4gICAgICAvLyBBdXRvLWRldGVjdCBmb3JtYXQ6IHN0cmluZyBvciBTZWxlY3RPcHRpb24gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdDtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0KTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pbGVPcHRpb24udmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIG9wdC52YWx1ZSk7XG4gICAgICAgIG5pbGVPcHRpb24udGV4dENvbnRlbnQgPSBvcHQubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgbmlsZU9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBwcmVmaXggaWYgcHJvdmlkZWQgKGNvdWxkIGJlIGljb24gbmFtZSBvciBjb250ZW50KVxuICAgICAgICBpZiAob3B0LnByZWZpeCkge1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByZWZpeCcpO1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uaW5uZXJIVE1MID0gYDxuaWxlLWljb24gbmFtZT1cIiR7b3B0LnByZWZpeH1cIj48L25pbGUtaWNvbj5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0IS5hcHBlbmRDaGlsZChuaWxlT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBQcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHVwIHRvIHRoZSBjZWxsIGNvbnRhaW5lclxuICAgIC8vIFRoaXMgcHJldmVudHMgcGFyZW50IGhhbmRsZXJzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBuaWxlLXNlbGVjdCdzIHRvZ2dsZVxuICAgIGNvbnN0IGNsaWNrSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xpY2tIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2NsaWNrJywgaGFuZGxlcjogY2xpY2tIYW5kbGVyIH0pO1xuXG4gICAgLy8gSGFuZGxlIGtleWJvYXJkIGV2ZW50cyAoa2V5ZG93biBpcyBub3QgcmVwbGFjZWQgYnkgY3VzdG9tIGV2ZW50cylcbiAgICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29udGV4dC5vbkNhbmNlbCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25IYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2tleWRvd24nLCBoYW5kbGVyOiBrZXlkb3duSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuaWxlLWNoYW5nZSBjdXN0b20gZXZlbnQgYXMgcHJpbWFyeSBzYXZlIHRyaWdnZXJcbiAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBJZ25vcmUgY2hhbmdlIGV2ZW50cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKGNhbiBmaXJlIHdoZW4gc2V0dGluZyBpbml0aWFsIHZhbHVlKVxuICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgIXRoaXMuc2VsZWN0Py5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Q/LnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gT25seSBzYXZlIGltbWVkaWF0ZWx5IGZvciBzaW5nbGUtc2VsZWN0XG4gICAgICAvLyBNdWx0aS1zZWxlY3Qgc2F2ZXMgb24gb3V0c2lkZSBjbGlja1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCBjaGFuZ2VIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogY2hhbmdlSGFuZGxlciB9KTtcblxuICAgIC8vIEhhbmRsZSBibHVyIGFzIHNlY29uZGFyeSBzYXZlIHRyaWdnZXIgLSBvbmx5IGZvciBzaW5nbGUtc2VsZWN0XG4gICAgLy8gTXVsdGktc2VsZWN0IHVzZXMgaGlkZSBldmVudCBpbnN0ZWFkXG4gICAgY29uc3QgYmx1ckhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIC8vIElnbm9yZSBibHVyIGR1cmluZyBpbml0aWFsaXphdGlvblxuICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlT25TYXZlICYmICF0aGlzLnNlbGVjdD8uY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBGb3Igc2luZ2xlLXNlbGVjdCwgc2F2ZSBvbiBibHVyICh3aGVuIGNsaWNraW5nIG91dHNpZGUpXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtYmx1cicsIGJsdXJIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtYmx1cicsIGhhbmRsZXI6IGJsdXJIYW5kbGVyIH0pO1xuXG5cbiAgICAvLyBIYW5kbGUgY2xlYXIgYnV0dG9uIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsZWFyYWJsZSkge1xuICAgICAgY29uc3QgY2xlYXJIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZSh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPyBbXSA6ICcnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jbGVhcicsIGNsZWFySGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2xlYXInLCBoYW5kbGVyOiBjbGVhckhhbmRsZXIgfSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNlYXJjaCBmb3Igc2VydmVyLXNpZGUgc2VhcmNoIHNjZW5hcmlvc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUxvY2FsU2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgLy8gRW1pdCBzZWFyY2ggcXVlcnkgdGhyb3VnaCBvbkNoYW5nZSBmb3IgZXh0ZXJuYWwgaGFuZGxpbmdcbiAgICAgICAgY29udGV4dC5vbkNoYW5nZShjdXN0b21FdmVudC5kZXRhaWwgYXMgVCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1zZWFyY2gnLCBzZWFyY2hIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1zZWFyY2gnLCBoYW5kbGVyOiBzZWFyY2hIYW5kbGVyIH0pO1xuICAgIH1cblxuICAgIC8vIEZvciBtdWx0aS1zZWxlY3Q6IGRldGVjdCBjbGlja3Mgb3V0c2lkZSBwb3J0YWwgYW5kIHNlbGVjdFxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50Q2xpY2tIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBlIGFzIE1vdXNlRXZlbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgcG9ydGFsIGRpdiBleGlzdHMgKG1pZ2h0IHRha2UgYSBtb21lbnQgdG8gcmVuZGVyKVxuICAgICAgICBpZiAoIXRoaXMucG9ydGFsRGl2KSB7XG4gICAgICAgICAgdGhpcy5wb3J0YWxEaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBEZXRlcm1pbmUgaWYgY2xpY2sgaXMgaW5zaWRlIHRoZSBzZWxlY3Qgb3IgcG9ydGFsXG4gICAgICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVTZWxlY3QgPSB0aGlzLnNlbGVjdD8uY29udGFpbnModGFyZ2V0KTtcbiAgICAgICAgY29uc3QgY2xpY2tlZEluc2lkZVBvcnRhbCA9IHRoaXMucG9ydGFsRGl2Py5jb250YWlucyh0YXJnZXQpO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgY2xpY2tlZCBvdXRzaWRlIGJvdGggc2VsZWN0IGFuZCBwb3J0YWwsIHNhdmUgYW5kIGNsb3NlXG4gICAgICAgIGlmICghY2xpY2tlZEluc2lkZVNlbGVjdCAmJiAhY2xpY2tlZEluc2lkZVBvcnRhbCkge1xuICAgICAgICAgIGlmICh2YWxpZGF0ZU9uU2F2ZSAmJiAhdGhpcy5zZWxlY3Q/LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Q/LnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSwgY2xpY2sgaXMgaW5zaWRlIC0gZG8gbm90aGluZyAoZHJvcGRvd24gc3RheXMgb3BlbilcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIERlbGF5IGFkZGluZyB0aGUgZG9jdW1lbnQgY2xpY2sgaGFuZGxlciB0byBwcmV2ZW50IHRoZSBpbml0aWFsIGNsaWNrIFxuICAgICAgLy8gKHRoYXQgb3BlbmVkIHRoZSBlZGl0b3IpIGZyb20gaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBpdCBhbmQgY2xvc2luZyB0aGUgZHJvcGRvd25cbiAgICAgIC8vIFVzZSAyMDBtcyB0byBlbnN1cmUgdGhlIGRyb3Bkb3duIGhhcyBmdWxseSBvcGVuZWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IGFkZCBpZiBzZWxlY3Qgc3RpbGwgZXhpc3RzIChlZGl0b3Igbm90IGRlc3Ryb3llZClcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICAgICAgLy8gVXNlIGJ1YmJsaW5nIHBoYXNlIChmYWxzZSkgaW5zdGVhZCBvZiBjYXB0dXJlIHRvIG5vdCBpbnRlcmZlcmUgd2l0aCBuaWxlLXNlbGVjdCdzIHRvZ2dsZVxuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZG9jdW1lbnRDbGlja0hhbmRsZXIsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBcbiAgICAgICAgICAgIGV2ZW50OiAnZG9jdW1lbnQtY2xpY2snLCAgLy8gVXNlIGN1c3RvbSBuYW1lIHRvIGlkZW50aWZ5IGl0XG4gICAgICAgICAgICBoYW5kbGVyOiBkb2N1bWVudENsaWNrSGFuZGxlciBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsdWUgYmFzZWQgb24gc2VsZWN0aW9uIG1vZGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBFbnN1cmUgYXJyYXkgZm9yIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlID8gW3ZhbHVlXSA6IFtdKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gLSByZXR1cm4gc3RyaW5nXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGluaXRpYWxpemF0aW9uIGZsYWdcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBvcHRpb25zIE9ic2VydmFibGVcbiAgICBpZiAodGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIGlmIChldmVudCA9PT0gJ2RvY3VtZW50LWNsaWNrJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGRvY3VtZW50IGZvciBtdWx0aS1zZWxlY3QgY2xpY2sgaGFuZGxlciAoYnViYmxpbmcgcGhhc2UpXG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2VsZWN0IGVsZW1lbnRcbiAgICAgICAgICB0aGlzLnNlbGVjdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLnNlbGVjdC5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc2VsZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wb3J0YWxEaXYgPSB1bmRlZmluZWQ7ICAvLyBDbGVhbiB1cCBwb3J0YWwgcmVmZXJlbmNlXG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkge1xuICAgICAgcmV0dXJuICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPyBbXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgXG4gICAgLy8gSGFuZGxlIG11bHRpcGxlIHNlbGVjdGlvblxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIHNpbmdsZSBzZWxlY3Rpb25cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSA6IHZhbHVlKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -363,10 +363,10 @@ export class StCellComponent {
|
|
|
363
363
|
}
|
|
364
364
|
}
|
|
365
365
|
StCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
366
|
-
StCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StCellComponent, selector: "st-cell", inputs: { cell: "cell", editMode: "editMode", tableState: "tableState", tableConfig: "tableConfig", columnIndex: "columnIndex" }, outputs: { cellChange: "cellChange", cellEdit: "cellEdit", cellSave: "cellSave", cellCancel: "cellCancel", cellSaveAndNavigate: "cellSaveAndNavigate" }, host: { listeners: { "keydown": "onCellKeyDown($event)" } }, viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
366
|
+
StCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StCellComponent, selector: "st-cell", inputs: { cell: "cell", editMode: "editMode", tableState: "tableState", tableConfig: "tableConfig", columnIndex: "columnIndex" }, outputs: { cellChange: "cellChange", cellEdit: "cellEdit", cellSave: "cellSave", cellCancel: "cellCancel", cellSaveAndNavigate: "cellSaveAndNavigate" }, host: { listeners: { "keydown": "onCellKeyDown($event)" } }, viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-editor nile-select::part(combobox){border:none!important;outline:none!important;box-shadow:none!important}.cell-editor nile-select::part(tag){border:none!important;outline:none!important}.cell-editor nile-select::part(listbox){border:none!important}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
367
367
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StCellComponent, decorators: [{
|
|
368
368
|
type: Component,
|
|
369
|
-
args: [{ selector: 'st-cell', template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"] }]
|
|
369
|
+
args: [{ selector: 'st-cell', template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-editor nile-select::part(combobox){border:none!important;outline:none!important;box-shadow:none!important}.cell-editor nile-select::part(tag){border:none!important;outline:none!important}.cell-editor nile-select::part(listbox){border:none!important}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"] }]
|
|
370
370
|
}], ctorParameters: function () { return []; }, propDecorators: { cell: [{
|
|
371
371
|
type: Input
|
|
372
372
|
}], editMode: [{
|