@aquera/ngx-smart-table 0.0.17-alpha → 0.0.17-patch-0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/editors/nile-select-editor.mjs +8 -6
- package/fesm2015/aquera-ngx-smart-table.mjs +8 -5
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +7 -5
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/lib/editors/nile-select-editor.d.ts +1 -0
- package/package.json +1 -1
|
@@ -80,6 +80,7 @@ export class NileSelectEditor {
|
|
|
80
80
|
this.eventListeners = [];
|
|
81
81
|
this.currentOptions = [];
|
|
82
82
|
this.trackedValues = []; // Track selected values for virtual scroll
|
|
83
|
+
this.hasChangeOccurred = false; // Whether a nile-change event has fired
|
|
83
84
|
// Handle Observable options
|
|
84
85
|
if (isObservable(options.options)) {
|
|
85
86
|
this.optionsSubscription = options.options.subscribe(opts => {
|
|
@@ -139,6 +140,7 @@ export class NileSelectEditor {
|
|
|
139
140
|
setInitialValue(value) {
|
|
140
141
|
if (!this.select)
|
|
141
142
|
return;
|
|
143
|
+
this.hasChangeOccurred = false;
|
|
142
144
|
if (this.options.multiple) {
|
|
143
145
|
// Handle multiple selection - value should be array
|
|
144
146
|
if (Array.isArray(value)) {
|
|
@@ -343,6 +345,7 @@ export class NileSelectEditor {
|
|
|
343
345
|
const customEvent = e;
|
|
344
346
|
const newValue = customEvent.detail?.value;
|
|
345
347
|
if (newValue !== undefined) {
|
|
348
|
+
this.hasChangeOccurred = true;
|
|
346
349
|
if (Array.isArray(newValue)) {
|
|
347
350
|
this.trackedValues = [...newValue];
|
|
348
351
|
}
|
|
@@ -481,18 +484,17 @@ export class NileSelectEditor {
|
|
|
481
484
|
if (!this.select) {
|
|
482
485
|
return (this.options.multiple ? [] : '');
|
|
483
486
|
}
|
|
484
|
-
// For multi-select, prefer tracked values (more reliable for virtual scroll)
|
|
485
487
|
if (this.options.multiple) {
|
|
486
|
-
//
|
|
487
|
-
|
|
488
|
+
// If a change event fired, always use trackedValues (even if empty = all unchecked).
|
|
489
|
+
// Only fall back to the component value when no change has occurred yet.
|
|
490
|
+
let values = this.hasChangeOccurred ? this.trackedValues : this.select.value;
|
|
488
491
|
if (Array.isArray(values)) {
|
|
489
492
|
return values.filter((v) => v !== undefined && v !== null && v !== '');
|
|
490
493
|
}
|
|
491
494
|
return (values ? [values] : []);
|
|
492
495
|
}
|
|
493
|
-
|
|
494
|
-
let value = this.trackedValues.length > 0 ? this.trackedValues[0] : this.select.value;
|
|
496
|
+
let value = this.hasChangeOccurred ? (this.trackedValues[0] ?? '') : this.select.value;
|
|
495
497
|
return (Array.isArray(value) ? (value.length > 0 ? value[0] : '') : (value || ''));
|
|
496
498
|
}
|
|
497
499
|
}
|
|
498
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtEbkIsQ0FBQztJQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFtRkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQVMzQixZQUE2QixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQVI3RCwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFHdkIsbUJBQWMsR0FBcUQsRUFBRSxDQUFDO1FBRXRFLG1CQUFjLEdBQThCLEVBQUUsQ0FBQztRQUMvQyxrQkFBYSxHQUFhLEVBQUUsQ0FBQyxDQUFFLDJDQUEyQztRQUdoRiw0QkFBNEI7UUFDNUIsSUFBSSxZQUFZLENB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QUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQWlCLENBQUM7SUFDckcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyBmb3IgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGxpbWl0XG4gKi9cbmxldCBkcm9wZG93blN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3REcm9wZG93blN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLXNlbGVjdC1kcm9wZG93bi1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTGltaXQgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGFuZCBlbmFibGUgc2Nyb2xsaW5nICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQge1xuICAgICAgbWF4LWhlaWdodDogMzAwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fbGlzdGJveCB7XG4gICAgICBtaW4td2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtaGVpZ2h0OiAyNjBweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fZm9vdGVyIHtcbiAgICAgIGhlaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBQcmV2ZW50IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gLSB0YXJnZXQgdGhlIG9wdGlvbnMgY29udGFpbmVyICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fb3B0aW9ucyB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbiB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIG5pbGUtb3B0aW9uOjpwYXJ0KGJhc2UpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogRml4IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gYnkgY2hhbmdpbmcgZmxleCBkaXJlY3Rpb24gKi9cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChvcHRpb25fbGFiZWxfY29udGFpbmVyKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvbWJvYm94IHN0eWxpbmcgdXNpbmcgOjpwYXJ0KCkgc2VsZWN0b3IgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbmlsZS1jb2xvcnMtd2hpdGUtYmFzZSwgdmFyKC0tbmctY29sb3JzLWJnLXByaW1hcnkpKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIG1hcmdpbjogMXB4IDRweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCk6aG92ZXIge1xuICAgICAgYm9yZGVyOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KGNvbWJvYm94KSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1uaWxlLWNvbG9ycy13aGl0ZS1iYXNlLCB2YXIoLS1uZy1jb2xvcnMtYmctcHJpbWFyeSkpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgbWFyZ2luOiAxcHggNHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIFNlYXJjaCBpbnB1dCBmdWxsIHdpZHRoICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fc2VhcmNoIHtcbiAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgfVxuICBgO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cblxuLyoqXG4gKiBTZWxlY3Qgb3B0aW9uIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb24ge1xuICAvKiogVGhlIG9wdGlvbidzIHZhbHVlICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgZGlzYWJsZWQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgcHJlZml4IGljb24gb3IgY29udGVudCAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBpbnRlcmZhY2UgZm9yIE5pbGVTZWxlY3RFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaWxlU2VsZWN0RWRpdG9yT3B0aW9ucyB7XG4gIC8vIE9wdGlvbnMgY29uZmlndXJhdGlvbiAoUkVRVUlSRUQpXG4gIC8qKiBBcnJheSBvZiBvcHRpb25zIC0gc3VwcG9ydHMgc3RhdGljIGFycmF5cywgT2JzZXJ2YWJsZSwgb3IgQmVoYXZpb3JTdWJqZWN0IGZvciByZWFjdGl2ZSB1cGRhdGVzICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdIHwgc3RyaW5nW10gfCBPYnNlcnZhYmxlPFNlbGVjdE9wdGlvbltdIHwgc3RyaW5nW10+O1xuICBcbiAgLy8gQmFzaWMgcHJvcGVydGllc1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB3aGVuIG5vIHNlbGVjdGlvbiBpcyBtYWRlICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogU2l6ZSBvZiB0aGUgc2VsZWN0IGNvbnRyb2wgKi9cbiAgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIC8qKiBFbmFibGUgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGUgKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBcbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAvKiogQWRkcyBjbGVhciBidXR0b24gd2hlbiB2YWx1ZSBpcyBub3QgZW1wdHkgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgLyoqIERpc2FibGUgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE1ha2UgdGhlIHNlbGVjdCByZXF1aXJlZCAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgKi9cbiAgc2VhcmNoRW5hYmxlZD86IGJvb2xlYW47XG4gIFxuICAvLyBWaXN1YWwgc3RhdGVzXG4gIC8qKiBXYXJuaW5nIHN0YXRlIHN0eWxpbmcgKi9cbiAgd2FybmluZz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBzdGF0ZSBzdHlsaW5nICovXG4gIGVycm9yPzogYm9vbGVhbjtcbiAgLyoqIFN1Y2Nlc3Mgc3RhdGUgc3R5bGluZyAqL1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBIZWxwIHRleHQgdG8gZGlzcGxheSAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgXG4gIC8vIEFkdmFuY2VkIGZlYXR1cmVzXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBzZWxlY3RlZCBvcHRpb25zIHRvIHNob3cgaW4gbXVsdGlwbGUgbW9kZSAoMCA9IG5vIGxpbWl0KSAqL1xuICBtYXhPcHRpb25zVmlzaWJsZT86IG51bWJlcjtcbiAgLyoqIERyYXdzIGEgZmlsbGVkIHNlbGVjdCBzdHlsZSAqL1xuICBmaWxsZWQ/OiBib29sZWFuO1xuICAvKiogUGlsbC1zdHlsZSB3aXRoIHJvdW5kZWQgZWRnZXMgKi9cbiAgcGlsbD86IGJvb2xlYW47XG4gIC8qKiBVc2UgZml4ZWQgcG9zaXRpb25pbmcgdG8gcHJldmVudCBjbGlwcGluZyAqL1xuICBob2lzdD86IGJvb2xlYW47XG4gIC8qKiBQbGFjZW1lbnQgb2YgdGhlIGRyb3Bkb3duIG1lbnUgKi9cbiAgcGxhY2VtZW50PzogJ3RvcCcgfCAnYm90dG9tJztcbiAgXG4gIC8vIFZpcnR1YWwgc2Nyb2xsIGZvciBsYXJnZSBsaXN0c1xuICAvKiogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsaW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBtYW55IG9wdGlvbnMgKi9cbiAgZW5hYmxlVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG4gIFxuICAvLyBTZWFyY2ggY29uZmlndXJhdGlvblxuICAvKiogRGlzYWJsZSBsb2NhbCBzZWFyY2ggKHVzZSBmb3Igc2VydmVyLXNpZGUgc2VhcmNoKSAqL1xuICBkaXNhYmxlTG9jYWxTZWFyY2g/OiBib29sZWFuO1xuICBcbiAgLy8gVmFsaWRhdGlvblxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xuICBcbiAgLy8gUG9ydGFsIG9wdGlvbnNcbiAgLyoqIEFwcGVuZCBkcm9wZG93biB0byBkb2N1bWVudCBib2R5IGluc3RlYWQgb2YgcGFyZW50ICovXG4gIHBvcnRhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3VzdG9tIGVkaXRvciB0aGF0IHVzZXMgTmlsZVNlbGVjdCBjb21wb25lbnRcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB2YWx1ZSB0eXBlIChzdHJpbmcgZm9yIHNpbmdsZSBzZWxlY3Rpb24sIHN0cmluZ1tdIGZvciBtdWx0aXBsZSlcbiAqL1xuZXhwb3J0IGNsYXNzIE5pbGVTZWxlY3RFZGl0b3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDZWxsRWRpdG9yPFQ+IHtcbiAgYWNjZXB0c0luaXRpYWxLZXlwcmVzcyA9IGZhbHNlO1xuICBcbiAgcHJpdmF0ZSBzZWxlY3Q/OiBhbnk7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZXZlbnQ6IHN0cmluZzsgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciB9PiA9IFtdO1xuICBwcml2YXRlIG9wdGlvbnNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY3VycmVudE9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10gPSBbXTtcbiAgcHJpdmF0ZSB0cmFja2VkVmFsdWVzOiBzdHJpbmdbXSA9IFtdOyAgLy8gVHJhY2sgc2VsZWN0ZWQgdmFsdWVzIGZvciB2aXJ0dWFsIHNjcm9sbFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMpIHtcbiAgICAvLyBIYW5kbGUgT2JzZXJ2YWJsZSBvcHRpb25zXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShvcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSBvcHRpb25zLm9wdGlvbnMuc3Vic2NyaWJlKG9wdHMgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0cztcbiAgICAgICAgLy8gSWYgZWRpdG9yIGlzIGFscmVhZHkgYWN0aXZlLCB1cGRhdGUgdGhlIERPTVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YXRpYyBvcHRpb25zXG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IFtdO1xuICAgICAgaWYgKHRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTmlsZVNlbGVjdEVkaXRvcjogb3B0aW9ucyBhcnJheSBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBkcm9wZG93biBoZWlnaHQgc3R5bGVzIG9uY2VcbiAgICBpbmplY3REcm9wZG93blN0eWxlcygpO1xuXG4gICAgLy8gQ3JlYXRlIE5pbGVTZWxlY3QgY3VzdG9tIGVsZW1lbnQgdXNpbmcgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgIHRoaXMuc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1zZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIG9wdGlvbnMgd2l0aCBjdXJyZW50IG9wdGlvbnNcbiAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgc2VsZWN0XG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpO1xuXG4gICAgLy8gRm9jdXMgdGhlIHNlbGVjdCBhZnRlciByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5mb2N1cygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3JzXG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgc2VsZWN0aW9uIC0gdmFsdWUgc2hvdWxkIGJlIGFycmF5XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLnZhbHVlXTsgIC8vIEluaXRpYWxpemUgdHJhY2tlZCB2YWx1ZXNcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFtTdHJpbmcodmFsdWUpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW107XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgc2luZ2xlIHNlbGVjdGlvblxuICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSB2YWx1ZSA/IFN0cmluZyh2YWx1ZSkgOiAnJztcbiAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IHZhbHVlID8gW1N0cmluZyh2YWx1ZSldIDogW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIE5pbGVTZWxlY3QgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgLy8gQmFzaWMgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2l6ZSkge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9IHRoaXMub3B0aW9ucy5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdC5zaXplID0gJ3NtYWxsJzsgLy8gRGVmYXVsdCBmb3IgdGFibGUgY2VsbHNcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5tdWx0aXBsZSA9IHRoaXMub3B0aW9ucy5tdWx0aXBsZTtcbiAgICB9XG5cbiAgICAvLyBCZWhhdmlvciBvcHRpb25zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmNsZWFyYWJsZSA9IHRoaXMub3B0aW9ucy5jbGVhcmFibGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5zZWxlY3QucmVxdWlyZWQgPSB0aGlzLm9wdGlvbnMucmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5zZWFyY2hFbmFibGVkID0gdGhpcy5vcHRpb25zLnNlYXJjaEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgLy8gVmlzdWFsIHN0YXRlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMud2FybmluZykge1xuICAgICAgdGhpcy5zZWxlY3Qud2FybmluZyA9IHRoaXMub3B0aW9ucy53YXJuaW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3IpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVycm9yID0gdGhpcy5vcHRpb25zLmVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3VjY2Vzcykge1xuICAgICAgdGhpcy5zZWxlY3Quc3VjY2VzcyA9IHRoaXMub3B0aW9ucy5zdWNjZXNzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvck1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGVscFRleHQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhlbHBUZXh0ID0gdGhpcy5vcHRpb25zLmhlbHBUZXh0O1xuICAgIH1cblxuICAgIC8vIEFkdmFuY2VkIGZlYXR1cmVzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhPcHRpb25zVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5tYXhPcHRpb25zVmlzaWJsZSA9IHRoaXMub3B0aW9ucy5tYXhPcHRpb25zVmlzaWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZpbGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5maWxsZWQgPSB0aGlzLm9wdGlvbnMuZmlsbGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGlsbCkge1xuICAgICAgdGhpcy5zZWxlY3QucGlsbCA9IHRoaXMub3B0aW9ucy5waWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaG9pc3QpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhvaXN0ID0gdGhpcy5vcHRpb25zLmhvaXN0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGxhY2VtZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZW1lbnQgPSB0aGlzLm9wdGlvbnMucGxhY2VtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5zZWxlY3QuZW5hYmxlVmlydHVhbFNjcm9sbCA9IHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUxvY2FsU2VhcmNoKSB7XG4gICAgICB0aGlzLnNlbGVjdC5kaXNhYmxlTG9jYWxTZWFyY2ggPSB0aGlzLm9wdGlvbnMuZGlzYWJsZUxvY2FsU2VhcmNoO1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSBwb3J0YWwgbW9kZSBieSBkZWZhdWx0IHRvIHByZXZlbnQgZHJvcGRvd24gY2xpcHBpbmcgaW4gdGFibGUgY2VsbHNcbiAgICB0aGlzLnNlbGVjdC5wb3J0YWwgPSB0aGlzLm9wdGlvbnMucG9ydGFsICE9PSBmYWxzZTtcblxuICAgIC8vIFByZXZlbnQgd2lkdGggc3luY2luZyBpc3N1ZXMgaW4gdGFibGUgY2VsbHNcbiAgICB0aGlzLnNlbGVjdC5ub1dpZHRoU3luYyA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG9wdGlvbnMgZHluYW1pY2FsbHkgd2hpbGUgZWRpdG9yIGlzIGFjdGl2ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEZvciB2aXJ0dWFsIHNjcm9sbCBtb2RlLCBqdXN0IHVwZGF0ZSB0aGUgZGF0YSBwcm9wZXJ0eSAobm8gRE9NIGNoaWxkcmVuIHRvIGNsZWFyKVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGFuZGFyZCBtb2RlOiBjbGVhciBleGlzdGluZyBuaWxlLW9wdGlvbiBlbGVtZW50cyBmaXJzdFxuICAgICAgd2hpbGUgKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlQ2hpbGQodGhpcy5zZWxlY3QuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRyaWdnZXIgdXBkYXRlIG9uIHRoZSB3ZWIgY29tcG9uZW50XG4gICAgaWYgKHRoaXMuc2VsZWN0LnJlcXVlc3RVcGRhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIE5pbGVPcHRpb24gZWxlbWVudHMgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBzZWxlY3RcbiAgICogV2hlbiBlbmFibGVWaXJ0dWFsU2Nyb2xsIGlzIHRydWUsIHVzZXMgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgKiBAc2VlIGh0dHBzOi8vbmlsZS5hcXVlcmFsYWJzLmNvbS9zZWxlY3QtdmlydHVhbD90aGVtZT1lbnRlcnByaXNlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcmVuZGVyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFuZEFwcGVuZE9wdGlvbnMob3B0aW9uczogKFNlbGVjdE9wdGlvbiB8IHN0cmluZylbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIFZpcnR1YWwgc2Nyb2xsIG1vZGU6IHVzZSBkYXRhIHByb3BlcnR5IGluc3RlYWQgb2YgRE9NIGVsZW1lbnRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBjb25zdCB2aXJ0dWFsRGF0YSA9IG9wdGlvbnMubWFwKG9wdCA9PiBcbiAgICAgICAgdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgXG4gICAgICAgICAgPyB7IHZhbHVlOiBvcHQsIGxhYmVsOiBvcHQgfVxuICAgICAgICAgIDogeyB2YWx1ZTogb3B0LnZhbHVlLCBsYWJlbDogb3B0LmxhYmVsLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdC5kYXRhID0gdmlydHVhbERhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RhbmRhcmQgbW9kZTogY3JlYXRlIG5pbGUtb3B0aW9uIGVsZW1lbnRzXG4gICAgb3B0aW9ucy5mb3JFYWNoKG9wdCA9PiB7XG4gICAgICBjb25zdCBuaWxlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1vcHRpb24nKSBhcyBhbnk7XG5cbiAgICAgIC8vIEF1dG8tZGV0ZWN0IGZvcm1hdDogc3RyaW5nIG9yIFNlbGVjdE9wdGlvbiBvYmplY3RcbiAgICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBuaWxlT3B0aW9uLnZhbHVlID0gb3B0O1xuICAgICAgICBuaWxlT3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBvcHQpO1xuICAgICAgICBuaWxlT3B0aW9uLnRleHRDb250ZW50ID0gb3B0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0LnZhbHVlKTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdC5sYWJlbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChvcHQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBuaWxlT3B0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBuaWxlT3B0aW9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHByZWZpeCBpZiBwcm92aWRlZCAoY291bGQgYmUgaWNvbiBuYW1lIG9yIGNvbnRlbnQpXG4gICAgICAgIGlmIChvcHQucHJlZml4KSB7XG4gICAgICAgICAgLy8gbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncHJlZml4Jyk7XG4gICAgICAgICAgLy8gbmlsZU9wdGlvbi5pbm5lckhUTUwgPSBgPG5pbGUtaWNvbiBuYW1lPVwiJHtvcHQucHJlZml4fVwiPjwvbmlsZS1pY29uPmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3QhLmFwcGVuZENoaWxkKG5pbGVPcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIHdpdGggcHJvcGVyIGNsZWFudXAgdHJhY2tpbmdcbiAgICovXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbGlkYXRlT25TYXZlID0gdGhpcy5vcHRpb25zLnZhbGlkYXRlT25TYXZlICE9PSBmYWxzZTtcblxuICAgIC8vIEhhbmRsZSBrZXlib2FyZCBldmVudHMgKGtleWRvd24gaXMgbm90IHJlcGxhY2VkIGJ5IGN1c3RvbSBldmVudHMpXG4gICAgY29uc3Qga2V5ZG93bkhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGtleUV2ZW50ID0gZSBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdrZXlkb3duJywgaGFuZGxlcjoga2V5ZG93bkhhbmRsZXIgfSk7XG5cbiAgICAvLyBVc2UgbmlsZS1jaGFuZ2UgY3VzdG9tIGV2ZW50IGFzIHNhdmUgdHJpZ2dlciAtIE9OTFkgZm9yIHNpbmdsZS1zZWxlY3RcbiAgICAvLyBNdWx0aS1zZWxlY3Qgc2hvdWxkIHN0YXkgb3BlbiB1bnRpbCB1c2VyIGNsaWNrcyBvdXRzaWRlXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IGNoYW5nZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWxpZGF0ZU9uU2F2ZSAmJiB0aGlzLnNlbGVjdCAmJiAhdGhpcy5zZWxlY3QuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gSWdub3JlIHZhbGlkYXRpb24gZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUoY3VzdG9tRXZlbnQuZGV0YWlsLnZhbHVlKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCBjaGFuZ2VIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiBjaGFuZ2VIYW5kbGVyIH0pO1xuICAgIH1cblxuICAgIC8vIEZvciBtdWx0aS1zZWxlY3QsIHRyYWNrIHZhbHVlIGNoYW5nZXMgKG5lZWRlZCBmb3IgdmlydHVhbCBzY3JvbGwgd2hlcmUgdmFsdWUgcHJvcGVydHkgZG9lc24ndCB1cGRhdGUpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgY29uc3QgdHJhY2tWYWx1ZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGN1c3RvbUV2ZW50LmRldGFpbD8udmFsdWU7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbLi4ubmV3VmFsdWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBuZXdWYWx1ZSA/IFtuZXdWYWx1ZV0gOiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNoYW5nZScsIHRyYWNrVmFsdWVIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiB0cmFja1ZhbHVlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBUcmFjayBpZiBzYXZlIHdhcyBhbHJlYWR5IHRyaWdnZXJlZCAodG8gcHJldmVudCBkb3VibGUgc2F2ZSlcbiAgICBsZXQgc2F2ZVRyaWdnZXJlZCA9IGZhbHNlO1xuICAgIFxuICAgIC8vIFVzZSBtb3VzZWRvd24gb24gZG9jdW1lbnQgdG8gZGV0ZWN0IGNsaWNrcyBvdXRzaWRlIHRoZSBzZWxlY3QgYW5kIHBvcnRhbFxuICAgIGNvbnN0IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2F2ZVRyaWdnZXJlZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuICAgICAgXG4gICAgICAvLyBVc2UgY29tcG9zZWRQYXRoIHRvIHRyYXZlcnNlIHNoYWRvdyBET00gYm91bmRhcmllc1xuICAgICAgY29uc3QgcGF0aCA9IGUuY29tcG9zZWRQYXRoKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNsaWNrIGlzIGluc2lkZSB0aGUgc2VsZWN0IGVsZW1lbnQgb3IgYW55IG5pbGUtc2VsZWN0IHJlbGF0ZWQgZWxlbWVudHNcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXRoKSB7XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBvdXIgc2VsZWN0IGVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRoaXMuc2VsZWN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBmb3IgbmlsZS1zZWxlY3QgcG9ydGFscyAodmFyaW91cyBjbGFzcyBuYW1lcylcbiAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnbmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCcpIHx8XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3NlbGVjdF9fbGlzdGJveCcpIHx8XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3NlbGVjdF9fb3B0aW9ucycpIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLW9wdGlvbicgfHxcbiAgICAgICAgICAgIGVsZW1lbnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ25pbGUtc2VsZWN0Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBlbGVtZW50IHdpdGggbmlsZS1zZWxlY3QgaW4gaXRzIGNsYXNzXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZSAmJiB0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ25pbGUtc2VsZWN0JykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWxzbyBjaGVjayBwb3J0YWwgY29udGFpbmVycyBkaXJlY3RseVxuICAgICAgY29uc3QgcG9ydGFscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kLCBbY2xhc3MqPVwic2VsZWN0X19saXN0Ym94XCJdJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvcnRhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvcnRhbHNbaV0uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2xpY2sgaXMgb3V0c2lkZSAtIHNhdmUgYW5kIGV4aXRcbiAgICAgIHNhdmVUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0LnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gSWdub3JlIHZhbGlkYXRpb24gZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICAgIH1cbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgIH07XG4gICAgXG4gICAgLy8gQWRkIGxpc3RlbmVyIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2FwdHVyaW5nIHRoZSBpbml0aWFsIGNsaWNrIHRoYXQgb3BlbmVkIHRoZSBlZGl0b3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGRvY3VtZW50TW91c2Vkb3duSGFuZGxlciwgdHJ1ZSk7XG4gICAgfSwgNTApO1xuICAgIFxuICAgIC8vIFN0b3JlIGZvciBjbGVhbnVwXG4gICAgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyID0gZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyO1xuXG4gICAgLy8gSGFuZGxlIGNsZWFyIGJ1dHRvbiBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpIHtcbiAgICAgIGNvbnN0IGNsZWFySGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2xlYXInLCBjbGVhckhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWNsZWFyJywgaGFuZGxlcjogY2xlYXJIYW5kbGVyIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzZWFyY2ggZm9yIHNlcnZlci1zaWRlIHNlYXJjaCBzY2VuYXJpb3NcbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICAgIC8vIEVtaXQgc2VhcmNoIHF1ZXJ5IHRocm91Z2ggb25DaGFuZ2UgZm9yIGV4dGVybmFsIGhhbmRsaW5nXG4gICAgICAgIGNvbnRleHQub25DaGFuZ2UoY3VzdG9tRXZlbnQuZGV0YWlsIGFzIFQpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtc2VhcmNoJywgc2VhcmNoSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtc2VhcmNoJywgaGFuZGxlcjogc2VhcmNoSGFuZGxlciB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsdWUgYmFzZWQgb24gc2VsZWN0aW9uIG1vZGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBFbnN1cmUgYXJyYXkgZm9yIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlID8gW3ZhbHVlXSA6IFtdKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gLSByZXR1cm4gc3RyaW5nXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gb3B0aW9ucyBPYnNlcnZhYmxlXG4gICAgaWYgKHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBkb2N1bWVudCBtb3VzZWRvd24gaGFuZGxlciBpZiBleGlzdHNcbiAgICBpZiAoKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLnNlbGVjdC5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc2VsZWN0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbGVjdD8uZm9jdXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZ25vcmUgZm9jdXMgZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkge1xuICAgICAgcmV0dXJuICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPyBbXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBtdWx0aS1zZWxlY3QsIHByZWZlciB0cmFja2VkIHZhbHVlcyAobW9yZSByZWxpYWJsZSBmb3IgdmlydHVhbCBzY3JvbGwpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gVXNlIHRyYWNrZWQgdmFsdWVzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRyeSBjb21wb25lbnQgdmFsdWVcbiAgICAgIGxldCB2YWx1ZXMgPSB0aGlzLnRyYWNrZWRWYWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMudHJhY2tlZFZhbHVlcyA6IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgICAgXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlcyA/IFt2YWx1ZXNdIDogW10pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIHNpbmdsZS1zZWxlY3QsIHVzZSB0cmFja2VkIHZhbHVlcyBvciBjb21wb25lbnQgdmFsdWVcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnRyYWNrZWRWYWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMudHJhY2tlZFZhbHVlc1swXSA6IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAodmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlWzBdIDogJycpIDogKHZhbHVlIHx8ICcnKSkgYXMgdW5rbm93biBhcyBUO1xuICB9XG59XG4iXX0=
|
|
500
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtEbkIsQ0FBQztJQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFtRkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQVUzQixZQUE2QixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQVQ3RCwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFHdkIsbUJBQWMsR0FBcUQsRUFBRSxDQUFDO1FBRXRFLG1CQUFjLEdBQThCLEVBQUUsQ0FBQztRQUMvQyxrQkFBYSxHQUFhLEVBQUUsQ0FBQyxDQUFFLDJDQUEyQztRQUMxRSxzQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FB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SyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFpQixDQUFDO0lBQ3JHLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3VzdG9tIGVkaXRvciB1c2luZyBOaWxlU2VsZWN0IGZyb20gQGFxdWVyYS9uaWxlLWVsZW1lbnRzXG4gKiBUaGlzIGRlbW9uc3RyYXRlcyBob3cgdG8gY3JlYXRlIGRyb3Bkb3duL3NlbGVjdCBlZGl0b3JzIGZvciBuZ3gtc21hcnQtdGFibGVcbiAqL1xuXG5pbXBvcnQgeyBDZWxsRWRpdG9yLCBDZWxsRWRpdG9yQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9jZWxsLXN0cmF0ZWdpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogSW5qZWN0IGdsb2JhbCBzdHlsZXMgZm9yIG5pbGUtc2VsZWN0IGRyb3Bkb3duIGhlaWdodCBsaW1pdFxuICovXG5sZXQgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IGZhbHNlO1xuZnVuY3Rpb24gaW5qZWN0RHJvcGRvd25TdHlsZXMoKTogdm9pZCB7XG4gIGlmIChkcm9wZG93blN0eWxlc0luamVjdGVkKSByZXR1cm47XG4gIGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQgPSB0cnVlO1xuXG4gIGNvbnN0IHN0eWxlSWQgPSAnbmlsZS1zZWxlY3QtZHJvcGRvd24tc3R5bGVzJztcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlSWQpKSByZXR1cm47XG5cbiAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS5pZCA9IHN0eWxlSWQ7XG4gIHN0eWxlLnRleHRDb250ZW50ID0gYFxuICAgIC8qIExpbWl0IG5pbGUtc2VsZWN0IGRyb3Bkb3duIGhlaWdodCBhbmQgZW5hYmxlIHNjcm9sbGluZyAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIHtcbiAgICAgIG1heC1oZWlnaHQ6IDMwMHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX2xpc3Rib3gge1xuICAgICAgbWluLXdpZHRoOiAyMjBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjYwcHggIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX2Zvb3RlciB7XG4gICAgICBoZWlnaHQ6IDM1cHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogUHJldmVudCBvcHRpb24gdGV4dCB0cnVuY2F0aW9uIC0gdGFyZ2V0IHRoZSBvcHRpb25zIGNvbnRhaW5lciAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX29wdGlvbnMge1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgbmlsZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChiYXNlKSB7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XG4gICAgICB0ZXh0LW92ZXJmbG93OiBjbGlwICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIEZpeCBvcHRpb24gdGV4dCB0cnVuY2F0aW9uIGJ5IGNoYW5naW5nIGZsZXggZGlyZWN0aW9uICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgbmlsZS1vcHRpb246OnBhcnQob3B0aW9uX2xhYmVsX2NvbnRhaW5lcikge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBDb21ib2JveCBzdHlsaW5nIHVzaW5nIDo6cGFydCgpIHNlbGVjdG9yICovXG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW5pbGUtY29sb3JzLXdoaXRlLWJhc2UsIHZhcigtLW5nLWNvbG9ycy1iZy1wcmltYXJ5KSkgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDFweCA0cHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbmlsZS1jb2xvcnMtd2hpdGUtYmFzZSwgdmFyKC0tbmctY29sb3JzLWJnLXByaW1hcnkpKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIG1hcmdpbjogMXB4IDRweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBTZWFyY2ggaW5wdXQgZnVsbCB3aWR0aCAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX3NlYXJjaCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogU2VsZWN0IG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIHByZWZpeCBpY29uIG9yIGNvbnRlbnQgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlU2VsZWN0RWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMge1xuICAvLyBPcHRpb25zIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAvKiogQXJyYXkgb2Ygb3B0aW9ucyAtIHN1cHBvcnRzIHN0YXRpYyBhcnJheXMsIE9ic2VydmFibGUsIG9yIEJlaGF2aW9yU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcyAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdIHwgT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdPjtcbiAgXG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBzZWxlY3Rpb24gaXMgbWFkZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogRW5hYmxlIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIEFkZHMgY2xlYXIgYnV0dG9uIHdoZW4gdmFsdWUgaXMgbm90IGVtcHR5ICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3QgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBzZWxlY3QgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5ICovXG4gIHNlYXJjaEVuYWJsZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHRvIGRpc3BsYXkgKi9cbiAgaGVscFRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyB0byBzaG93IGluIG11bHRpcGxlIG1vZGUgKDAgPSBubyBsaW1pdCkgKi9cbiAgbWF4T3B0aW9uc1Zpc2libGU/OiBudW1iZXI7XG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBzZWxlY3Qgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBkcm9wZG93biBtZW51ICovXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIFxuICAvLyBWaXJ0dWFsIHNjcm9sbCBmb3IgbGFyZ2UgbGlzdHNcbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbWFueSBvcHRpb25zICovXG4gIGVuYWJsZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBcbiAgLy8gU2VhcmNoIGNvbmZpZ3VyYXRpb25cbiAgLyoqIERpc2FibGUgbG9jYWwgc2VhcmNoICh1c2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCkgKi9cbiAgZGlzYWJsZUxvY2FsU2VhcmNoPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZhbGlkYXRpb25cbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbiAgXG4gIC8vIFBvcnRhbCBvcHRpb25zXG4gIC8qKiBBcHBlbmQgZHJvcGRvd24gdG8gZG9jdW1lbnQgYm9keSBpbnN0ZWFkIG9mIHBhcmVudCAqL1xuICBwb3J0YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVTZWxlY3QgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGZvciBzaW5nbGUgc2VsZWN0aW9uLCBzdHJpbmdbXSBmb3IgbXVsdGlwbGUpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlU2VsZWN0RWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIGFjY2VwdHNJbml0aWFsS2V5cHJlc3MgPSBmYWxzZTtcbiAgXG4gIHByaXZhdGUgc2VsZWN0PzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGN1cnJlbnRPcHRpb25zOiAoU2VsZWN0T3B0aW9uIHwgc3RyaW5nKVtdID0gW107XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlczogc3RyaW5nW10gPSBbXTsgIC8vIFRyYWNrIHNlbGVjdGVkIHZhbHVlcyBmb3IgdmlydHVhbCBzY3JvbGxcbiAgcHJpdmF0ZSBoYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlOyAgICAgLy8gV2hldGhlciBhIG5pbGUtY2hhbmdlIGV2ZW50IGhhcyBmaXJlZFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMpIHtcbiAgICAvLyBIYW5kbGUgT2JzZXJ2YWJsZSBvcHRpb25zXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShvcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSBvcHRpb25zLm9wdGlvbnMuc3Vic2NyaWJlKG9wdHMgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0cztcbiAgICAgICAgLy8gSWYgZWRpdG9yIGlzIGFscmVhZHkgYWN0aXZlLCB1cGRhdGUgdGhlIERPTVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YXRpYyBvcHRpb25zXG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IFtdO1xuICAgICAgaWYgKHRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTmlsZVNlbGVjdEVkaXRvcjogb3B0aW9ucyBhcnJheSBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBkcm9wZG93biBoZWlnaHQgc3R5bGVzIG9uY2VcbiAgICBpbmplY3REcm9wZG93blN0eWxlcygpO1xuXG4gICAgLy8gQ3JlYXRlIE5pbGVTZWxlY3QgY3VzdG9tIGVsZW1lbnQgdXNpbmcgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgIHRoaXMuc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1zZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIG9wdGlvbnMgd2l0aCBjdXJyZW50IG9wdGlvbnNcbiAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgc2VsZWN0XG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpO1xuXG4gICAgLy8gRm9jdXMgdGhlIHNlbGVjdCBhZnRlciByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5mb2N1cygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3JzXG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG4gICAgdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHNlbGVjdGlvbiAtIHZhbHVlIHNob3VsZCBiZSBhcnJheVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFsuLi52YWx1ZV07ICAvLyBJbml0aWFsaXplIHRyYWNrZWQgdmFsdWVzXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW1N0cmluZyh2YWx1ZSldO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZSBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWUgPyBTdHJpbmcodmFsdWUpIDogJyc7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSB2YWx1ZSA/IFtTdHJpbmcodmFsdWUpXSA6IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlU2VsZWN0IGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEJhc2ljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHQgZm9yIHRhYmxlIGNlbGxzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5zZWxlY3QubXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMubXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVpcmVkID0gdGhpcy5vcHRpb25zLnJlcXVpcmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3Quc2VhcmNoRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zZWxlY3QuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QubWF4T3B0aW9uc1Zpc2libGUgPSB0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZmlsbGVkID0gdGhpcy5vcHRpb25zLmZpbGxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBpbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBpbGwgPSB0aGlzLm9wdGlvbnMucGlsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhvaXN0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5ob2lzdCA9IHRoaXMub3B0aW9ucy5ob2lzdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3QucGxhY2VtZW50ID0gdGhpcy5vcHRpb25zLnBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVuYWJsZVZpcnR1YWxTY3JvbGwgPSB0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZUxvY2FsU2VhcmNoID0gdGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaDtcbiAgICB9XG5cbiAgICAvLyBFbmFibGUgcG9ydGFsIG1vZGUgYnkgZGVmYXVsdCB0byBwcmV2ZW50IGRyb3Bkb3duIGNsaXBwaW5nIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdGhpcy5vcHRpb25zLnBvcnRhbCAhPT0gZmFsc2U7XG5cbiAgICAvLyBQcmV2ZW50IHdpZHRoIHN5bmNpbmcgaXNzdWVzIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3Qubm9XaWR0aFN5bmMgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvcHRpb25zIGR5bmFtaWNhbGx5IHdoaWxlIGVkaXRvciBpcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBGb3IgdmlydHVhbCBzY3JvbGwgbW9kZSwganVzdCB1cGRhdGUgdGhlIGRhdGEgcHJvcGVydHkgKG5vIERPTSBjaGlsZHJlbiB0byBjbGVhcilcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuY3JlYXRlQW5kQXBwZW5kT3B0aW9ucyh0aGlzLmN1cnJlbnRPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhbmRhcmQgbW9kZTogY2xlYXIgZXhpc3RpbmcgbmlsZS1vcHRpb24gZWxlbWVudHMgZmlyc3RcbiAgICAgIHdoaWxlICh0aGlzLnNlbGVjdC5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnJlbW92ZUNoaWxkKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBOaWxlT3B0aW9uIGVsZW1lbnRzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgc2VsZWN0XG4gICAqIFdoZW4gZW5hYmxlVmlydHVhbFNjcm9sbCBpcyB0cnVlLCB1c2VzIGRhdGEgcHJvcGVydHkgaW5zdGVhZCBvZiBET00gZWxlbWVudHNcbiAgICogQHNlZSBodHRwczovL25pbGUuYXF1ZXJhbGFicy5jb20vc2VsZWN0LXZpcnR1YWw/dGhlbWU9ZW50ZXJwcmlzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHJlbmRlclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBbmRBcHBlbmRPcHRpb25zKG9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBWaXJ0dWFsIHNjcm9sbCBtb2RlOiB1c2UgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgY29uc3QgdmlydHVhbERhdGEgPSBvcHRpb25zLm1hcChvcHQgPT4gXG4gICAgICAgIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnIFxuICAgICAgICAgID8geyB2YWx1ZTogb3B0LCBsYWJlbDogb3B0IH1cbiAgICAgICAgICA6IHsgdmFsdWU6IG9wdC52YWx1ZSwgbGFiZWw6IG9wdC5sYWJlbCwgZGlzYWJsZWQ6IG9wdC5kaXNhYmxlZCB9XG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3QuZGF0YSA9IHZpcnR1YWxEYXRhO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0YW5kYXJkIG1vZGU6IGNyZWF0ZSBuaWxlLW9wdGlvbiBlbGVtZW50c1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgY29uc3QgbmlsZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtb3B0aW9uJykgYXMgYW55O1xuXG4gICAgICAvLyBBdXRvLWRldGVjdCBmb3JtYXQ6IHN0cmluZyBvciBTZWxlY3RPcHRpb24gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdDtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0KTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pbGVPcHRpb24udmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIG9wdC52YWx1ZSk7XG4gICAgICAgIG5pbGVPcHRpb24udGV4dENvbnRlbnQgPSBvcHQubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgbmlsZU9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBwcmVmaXggaWYgcHJvdmlkZWQgKGNvdWxkIGJlIGljb24gbmFtZSBvciBjb250ZW50KVxuICAgICAgICBpZiAob3B0LnByZWZpeCkge1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByZWZpeCcpO1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uaW5uZXJIVE1MID0gYDxuaWxlLWljb24gbmFtZT1cIiR7b3B0LnByZWZpeH1cIj48L25pbGUtaWNvbj5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0IS5hcHBlbmRDaGlsZChuaWxlT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIChrZXlkb3duIGlzIG5vdCByZXBsYWNlZCBieSBjdXN0b20gZXZlbnRzKVxuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuXG4gICAgLy8gVXNlIG5pbGUtY2hhbmdlIGN1c3RvbSBldmVudCBhcyBzYXZlIHRyaWdnZXIgLSBPTkxZIGZvciBzaW5nbGUtc2VsZWN0XG4gICAgLy8gTXVsdGktc2VsZWN0IHNob3VsZCBzdGF5IG9wZW4gdW50aWwgdXNlciBjbGlja3Mgb3V0c2lkZVxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogY2hhbmdlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCB0cmFjayB2YWx1ZSBjaGFuZ2VzIChuZWVkZWQgZm9yIHZpcnR1YWwgc2Nyb2xsIHdoZXJlIHZhbHVlIHByb3BlcnR5IGRvZXNuJ3QgdXBkYXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHRyYWNrVmFsdWVIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjdXN0b21FdmVudC5kZXRhaWw/LnZhbHVlO1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlT2NjdXJyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gbmV3VmFsdWUgPyBbbmV3VmFsdWVdIDogW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCB0cmFja1ZhbHVlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogdHJhY2tWYWx1ZUhhbmRsZXIgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgaWYgc2F2ZSB3YXMgYWxyZWFkeSB0cmlnZ2VyZWQgKHRvIHByZXZlbnQgZG91YmxlIHNhdmUpXG4gICAgbGV0IHNhdmVUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICBcbiAgICAvLyBVc2UgbW91c2Vkb3duIG9uIGRvY3VtZW50IHRvIGRldGVjdCBjbGlja3Mgb3V0c2lkZSB0aGUgc2VsZWN0IGFuZCBwb3J0YWxcbiAgICBjb25zdCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNhdmVUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gVXNlIGNvbXBvc2VkUGF0aCB0byB0cmF2ZXJzZSBzaGFkb3cgRE9NIGJvdW5kYXJpZXNcbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjbGljayBpcyBpbnNpZGUgdGhlIHNlbGVjdCBlbGVtZW50IG9yIGFueSBuaWxlLXNlbGVjdCByZWxhdGVkIGVsZW1lbnRzXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgb3VyIHNlbGVjdCBlbGVtZW50XG4gICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLnNlbGVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5pbGUtc2VsZWN0IHBvcnRhbHMgKHZhcmlvdXMgY2xhc3MgbmFtZXMpXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ25pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX2xpc3Rib3gnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX29wdGlvbnMnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnbmlsZS1vcHRpb24nIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLXNlbGVjdCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciBhbnkgZWxlbWVudCB3aXRoIG5pbGUtc2VsZWN0IGluIGl0cyBjbGFzc1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgJiYgdHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCduaWxlLXNlbGVjdCcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFsc28gY2hlY2sgcG9ydGFsIGNvbnRhaW5lcnMgZGlyZWN0bHlcbiAgICAgIGNvbnN0IHBvcnRhbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCwgW2NsYXNzKj1cInNlbGVjdF9fbGlzdGJveFwiXScpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3J0YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb3J0YWxzW2ldLmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgLSBzYXZlIGFuZCBleGl0XG4gICAgICBzYXZlVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHZhbGlkYXRlT25TYXZlICYmIHRoaXMuc2VsZWN0ICYmICF0aGlzLnNlbGVjdC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICB9XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIEFkZCBsaXN0ZW5lciBhZnRlciBhIHNob3J0IGRlbGF5IHRvIGF2b2lkIGNhcHR1cmluZyB0aGUgaW5pdGlhbCBjbGljayB0aGF0IG9wZW5lZCB0aGUgZWRpdG9yXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIH0sIDUwKTtcbiAgICBcbiAgICAvLyBTdG9yZSBmb3IgY2xlYW51cFxuICAgICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcblxuICAgIC8vIEhhbmRsZSBjbGVhciBidXR0b24gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICBjb25zdCBjbGVhckhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy5tdWx0aXBsZSA/IFtdIDogJycpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNsZWFyJywgY2xlYXJIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jbGVhcicsIGhhbmRsZXI6IGNsZWFySGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VhcmNoIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2ggc2NlbmFyaW9zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICAvLyBFbWl0IHNlYXJjaCBxdWVyeSB0aHJvdWdoIG9uQ2hhbmdlIGZvciBleHRlcm5hbCBoYW5kbGluZ1xuICAgICAgICBjb250ZXh0Lm9uQ2hhbmdlKGN1c3RvbUV2ZW50LmRldGFpbCBhcyBUKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLXNlYXJjaCcsIHNlYXJjaEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLXNlYXJjaCcsIGhhbmRsZXI6IHNlYXJjaEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIGJhc2VkIG9uIHNlbGVjdGlvbiBtb2RlXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogVCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gRW5zdXJlIGFycmF5IGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh2YWx1ZSA/IFt2YWx1ZV0gOiBbXSkgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICAvLyBTaW5nbGUgc2VsZWN0aW9uIC0gcmV0dXJuIHN0cmluZ1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBVbnN1YnNjcmliZSBmcm9tIG9wdGlvbnMgT2JzZXJ2YWJsZVxuICAgIGlmICh0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgZG9jdW1lbnQgbW91c2Vkb3duIGhhbmRsZXIgaWYgZXhpc3RzXG4gICAgaWYgKCh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXI7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgIFxuICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlKCk7XG4gICAgICB0aGlzLnNlbGVjdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWdub3JlIGZvY3VzIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHtcbiAgICAgIHJldHVybiAodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBhIGNoYW5nZSBldmVudCBmaXJlZCwgYWx3YXlzIHVzZSB0cmFja2VkVmFsdWVzIChldmVuIGlmIGVtcHR5ID0gYWxsIHVuY2hlY2tlZCkuXG4gICAgICAvLyBPbmx5IGZhbGwgYmFjayB0byB0aGUgY29tcG9uZW50IHZhbHVlIHdoZW4gbm8gY2hhbmdlIGhhcyBvY2N1cnJlZCB5ZXQuXG4gICAgICBsZXQgdmFsdWVzID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/IHRoaXMudHJhY2tlZFZhbHVlcyA6IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgICAgXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlcyA/IFt2YWx1ZXNdIDogW10pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgbGV0IHZhbHVlID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/ICh0aGlzLnRyYWNrZWRWYWx1ZXNbMF0gPz8gJycpIDogdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/ICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgOiAodmFsdWUgfHwgJycpKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -3600,6 +3600,7 @@ class NileSelectEditor {
|
|
|
3600
3600
|
this.eventListeners = [];
|
|
3601
3601
|
this.currentOptions = [];
|
|
3602
3602
|
this.trackedValues = []; // Track selected values for virtual scroll
|
|
3603
|
+
this.hasChangeOccurred = false; // Whether a nile-change event has fired
|
|
3603
3604
|
// Handle Observable options
|
|
3604
3605
|
if (isObservable(options.options)) {
|
|
3605
3606
|
this.optionsSubscription = options.options.subscribe(opts => {
|
|
@@ -3660,6 +3661,7 @@ class NileSelectEditor {
|
|
|
3660
3661
|
setInitialValue(value) {
|
|
3661
3662
|
if (!this.select)
|
|
3662
3663
|
return;
|
|
3664
|
+
this.hasChangeOccurred = false;
|
|
3663
3665
|
if (this.options.multiple) {
|
|
3664
3666
|
// Handle multiple selection - value should be array
|
|
3665
3667
|
if (Array.isArray(value)) {
|
|
@@ -3865,6 +3867,7 @@ class NileSelectEditor {
|
|
|
3865
3867
|
const customEvent = e;
|
|
3866
3868
|
const newValue = (_a = customEvent.detail) === null || _a === void 0 ? void 0 : _a.value;
|
|
3867
3869
|
if (newValue !== undefined) {
|
|
3870
|
+
this.hasChangeOccurred = true;
|
|
3868
3871
|
if (Array.isArray(newValue)) {
|
|
3869
3872
|
this.trackedValues = [...newValue];
|
|
3870
3873
|
}
|
|
@@ -4003,20 +4006,20 @@ class NileSelectEditor {
|
|
|
4003
4006
|
}
|
|
4004
4007
|
}
|
|
4005
4008
|
getCurrentValue() {
|
|
4009
|
+
var _a;
|
|
4006
4010
|
if (!this.select) {
|
|
4007
4011
|
return (this.options.multiple ? [] : '');
|
|
4008
4012
|
}
|
|
4009
|
-
// For multi-select, prefer tracked values (more reliable for virtual scroll)
|
|
4010
4013
|
if (this.options.multiple) {
|
|
4011
|
-
//
|
|
4012
|
-
|
|
4014
|
+
// If a change event fired, always use trackedValues (even if empty = all unchecked).
|
|
4015
|
+
// Only fall back to the component value when no change has occurred yet.
|
|
4016
|
+
let values = this.hasChangeOccurred ? this.trackedValues : this.select.value;
|
|
4013
4017
|
if (Array.isArray(values)) {
|
|
4014
4018
|
return values.filter((v) => v !== undefined && v !== null && v !== '');
|
|
4015
4019
|
}
|
|
4016
4020
|
return (values ? [values] : []);
|
|
4017
4021
|
}
|
|
4018
|
-
|
|
4019
|
-
let value = this.trackedValues.length > 0 ? this.trackedValues[0] : this.select.value;
|
|
4022
|
+
let value = this.hasChangeOccurred ? ((_a = this.trackedValues[0]) !== null && _a !== void 0 ? _a : '') : this.select.value;
|
|
4020
4023
|
return (Array.isArray(value) ? (value.length > 0 ? value[0] : '') : (value || ''));
|
|
4021
4024
|
}
|
|
4022
4025
|
}
|