ng-select2-component 14.0.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -1
- package/README.md +15 -8
- package/esm2022/lib/select2-hint.component.mjs +3 -3
- package/esm2022/lib/select2-label.component.mjs +3 -3
- package/esm2022/lib/select2-utils.mjs +1 -1
- package/esm2022/lib/select2.component.mjs +11 -5
- package/esm2022/lib/select2.module.mjs +4 -4
- package/fesm2022/ng-select2-component.mjs +20 -14
- package/fesm2022/ng-select2-component.mjs.map +1 -1
- package/lib/select2.component.d.ts +2 -1
- package/lib/select2.component.d.ts.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
# Changelog of ng-select2
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## V15.0.0 (2024-05-31)
|
|
4
|
+
|
|
5
|
+
### Breaking Changes
|
|
6
|
+
|
|
7
|
+
- minimum required support has been upgraded to Angular `18.0`.
|
|
8
|
+
|
|
9
|
+
### Changes
|
|
10
|
+
|
|
11
|
+
- manage blur event (overlay, click on option)
|
|
12
|
+
|
|
13
|
+
## V14.0.1 (2024-03-04)
|
|
14
|
+
|
|
15
|
+
- add `borderless` style
|
|
16
|
+
|
|
17
|
+
## V14.0.0 (2024-01-07)
|
|
4
18
|
|
|
5
19
|
### Breaking Changes
|
|
6
20
|
|
|
7
21
|
- minimum required support has been upgraded to Angular `17.0`.
|
|
8
22
|
|
|
23
|
+
## V13.0.10 (2024-03-04)
|
|
24
|
+
|
|
25
|
+
- add `borderless` style
|
|
26
|
+
|
|
9
27
|
## V13.0.9 (2023-09-24)
|
|
10
28
|
|
|
11
29
|
- add `autoCreate` for single mode #56 (thanks @majora2007)
|
package/README.md
CHANGED
|
@@ -14,11 +14,11 @@ npm i ng-select2-component --save
|
|
|
14
14
|
|
|
15
15
|
- peerDependencies:
|
|
16
16
|
|
|
17
|
-
- `angular`
|
|
18
|
-
- `angular/cdk`
|
|
17
|
+
- `angular` 18.0.0 and more
|
|
18
|
+
- `angular/cdk` 18.0.0 and more
|
|
19
19
|
|
|
20
20
|
- dependencies (include):
|
|
21
|
-
- `ngx-infinite-scroll`
|
|
21
|
+
- `ngx-infinite-scroll` 18.0.0 and more
|
|
22
22
|
|
|
23
23
|
> **Note:**<br>
|
|
24
24
|
>
|
|
@@ -27,9 +27,10 @@ npm i ng-select2-component --save
|
|
|
27
27
|
> - For `angular` 13 (Ivy): use version `9.0.0`.
|
|
28
28
|
> - For `angular` 14 (Ivy): use version `10.0.0`.
|
|
29
29
|
> - For `angular` 15 (Ivy): use version `11.0.0`.
|
|
30
|
-
> - For `angular` 16
|
|
31
|
-
> - For `angular` 16.1
|
|
32
|
-
> - For `angular` 17
|
|
30
|
+
> - For `angular` 16 (Ivy): use version `12.0.0`.
|
|
31
|
+
> - For `angular` 16.1 (Ivy): use version `13.0.0`.
|
|
32
|
+
> - For `angular` 17 (Ivy): use version `14.0.0`.
|
|
33
|
+
> - For `angular` 18 and more (Ivy): use version `15.0.0`.
|
|
33
34
|
|
|
34
35
|
## Demo
|
|
35
36
|
|
|
@@ -97,7 +98,7 @@ class MainModule {}
|
|
|
97
98
|
| `infiniteScrollDistance` | `number` | | `1.5` | infiniteScroll distance | with `ngx-infinite-scroll` |
|
|
98
99
|
| `infiniteScrollThrottle` | `number` | | `150` | infiniteScroll throttle | |
|
|
99
100
|
| `overlay` | `boolean` | | `false` | active an overlay mode for dropdown list (with angular cdk). (See [Overlay](#overlay)) | |
|
|
100
|
-
| `styleMode` | `'default'`<br>`'material'`<br>`'noStyle'`
|
|
101
|
+
| `styleMode` | `'default'`<br>`'material'`<br>`'noStyle'`<br>`'borderless'` | | `'default'` | change style for material style or remove border and background color | |
|
|
101
102
|
| `templates` | `TemplateRef`<br>`{option?: TemplateRef, group?: TemplateRef}`<br>`{templateId1: TemplateRef, ...}` | | | use templates for formatting content (see [Templating](#templating)) | |
|
|
102
103
|
| `noLabelTemplate` | `boolean` | | `false` | do not use the template in the selection, stay in text mode | |
|
|
103
104
|
| `editPattern` | `(str: string) => string` | | | use it for change the pattern of the filter search | |
|
|
@@ -109,7 +110,7 @@ class MainModule {}
|
|
|
109
110
|
| `(blur)` | `(event: Select2) => void` | event | | triggered when user leaves the component | |
|
|
110
111
|
| `(search)` | `(event: `[`Select2SearchEvent`](#select2-data-structure)`) => void` | event | | triggered when search text changed | with `customSearchEnabled` |
|
|
111
112
|
| `(scroll)` | `(event: `[`Select2ScrollEvent`](#select2-data-structure)`) => void` | event | | triggered when infiniteScroll is on `up` or `down` position | with `ngx-infinite-scroll` |
|
|
112
|
-
| `(
|
|
113
|
+
| `(removeOption)` | `(event: `[`Select2RemoveEvent`](#select2-data-structure)`) => void` | event | | triggered when an option is removed from the list of selected options options list | with `multiple` |
|
|
113
114
|
| `(autoCreateItem)` | `(event: `[`Select2AutoCreateEvent`](#select2-data-structure)`) => void` | event | | triggered when a new item has been added | with `autoCreate` |
|
|
114
115
|
|
|
115
116
|
### select2 data structure
|
|
@@ -332,6 +333,12 @@ It's possible to change different colors (and more) with CSS variables without h
|
|
|
332
333
|
/* dropdown panel */
|
|
333
334
|
--select2-dropdown-background: #fff;
|
|
334
335
|
--select2-dropdown-border-color: #aaa;
|
|
336
|
+
--select2-dropdown-above-border-bottom: none;
|
|
337
|
+
--select2-dropdown-above-border-bottom-left-radius: 0;
|
|
338
|
+
--select2-dropdown-above-border-bottom-right-radius: 0;
|
|
339
|
+
--select2-dropdown-below-border-top: none;
|
|
340
|
+
--select2-dropdown-below-border-top-left-radius: 0;
|
|
341
|
+
--select2-dropdown-below-border-top-right-radius: 0;
|
|
335
342
|
|
|
336
343
|
/* overlay */
|
|
337
344
|
--select2-overlay-backdrop: transparent;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Directive } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class Select2Hint {
|
|
4
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
5
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
4
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: Select2Hint, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
5
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: Select2Hint, selector: "select2-hint", ngImport: i0 }); }
|
|
6
6
|
}
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: Select2Hint, decorators: [{
|
|
8
8
|
type: Directive,
|
|
9
9
|
args: [{ selector: 'select2-hint' }]
|
|
10
10
|
}] });
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Directive } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class Select2Label {
|
|
4
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
5
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
4
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: Select2Label, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
5
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: Select2Label, selector: "select2-label", ngImport: i0 }); }
|
|
6
6
|
}
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: Select2Label, decorators: [{
|
|
8
8
|
type: Directive,
|
|
9
9
|
args: [{ selector: 'select2-label' }]
|
|
10
10
|
}] });
|
|
@@ -270,4 +270,4 @@ export class Select2Utils {
|
|
|
270
270
|
return str;
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy9saWIvc2VsZWN0Mi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzNGLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLEtBQXNDO1FBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDOUIsTUFBTSxPQUFPLEdBQUksYUFBOEIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hELElBQUksT0FBTyxFQUFFO29CQUNULEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO3dCQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFOzRCQUN4QixPQUFPLE1BQU0sQ0FBQzt5QkFDakI7cUJBQ0o7aUJBQ0o7cUJBQU0sSUFBSyxhQUErQixDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7b0JBQ3pELE9BQU8sYUFBOEIsQ0FBQztpQkFDekM7YUFDSjtTQUNKO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FDcEIsSUFBaUIsRUFDakIsS0FBNEMsRUFDNUMsUUFBb0M7UUFFcEMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxNQUFNLEdBQW9CLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sQ0FBQyxJQUFJ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QVMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUM1QixLQUFhLEVBQ2IsVUFBeUIsRUFDekIsV0FBa0Q7UUFFbEQsT0FBTyxVQUFVO1lBQ2IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQ3ZDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUN2RSxLQUFLLElBQUk7WUFDWixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBVztRQUNyQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBVztRQUN4QyxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRTtZQUMxQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBVyxFQUFFLFdBQWtEO1FBQ3hGLEdBQUcsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRTtZQUNsRCxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0TWluQ291bnRGb3JTZWFyY2gsIHByb3RlY3RSZWdleHAsIHVuaWNvZGVQYXR0ZXJucyB9IGZyb20gJy4vc2VsZWN0Mi1jb25zdCc7XG5pbXBvcnQgeyBTZWxlY3QyRGF0YSwgU2VsZWN0Mkdyb3VwLCBTZWxlY3QyT3B0aW9uLCBTZWxlY3QyVXBkYXRlVmFsdWUsIFNlbGVjdDJWYWx1ZSB9IGZyb20gJy4vc2VsZWN0Mi1pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdDJVdGlscyB7XG4gICAgc3RhdGljIGdldE9wdGlvbkJ5VmFsdWUoZGF0YTogU2VsZWN0MkRhdGEsIHZhbHVlOiBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uKS52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0T3B0aW9uc0J5VmFsdWUoXG4gICAgICAgIGRhdGE6IFNlbGVjdDJEYXRhLFxuICAgICAgICB2YWx1ZTogU2VsZWN0MlVwZGF0ZVZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlczogU2VsZWN0MlZhbHVlW10gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJPcHRpb25bXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25CeVZhbHVlKGRhdGEsIHYpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uQnlWYWx1ZShkYXRhLCB2YWx1ZSBhcyBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Rmlyc3RBdmFpbGFibGVPcHRpb24oZGF0YTogU2VsZWN0MkRhdGEpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb247XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyB2YWx1ZUlzTm90SW5GaWx0ZXJlZERhdGEoZmlsdGVyZWREYXRhOiBTZWxlY3QyRGF0YSwgdmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKFNlbGVjdDJVdGlscy5pc051bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbikudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQcmV2aW91c09wdGlvbihmaWx0ZXJlZERhdGE6IFNlbGVjdDJEYXRhLCBob3ZlcmluZ1ZhbHVlOiBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBmaW5kSXQgPSBTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoaG92ZXJpbmdWYWx1ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBmaWx0ZXJlZERhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwT3JPcHRpb24gPSBmaWx0ZXJlZERhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gb3B0aW9ucy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0ICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoZmluZEl0ICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5leHRPcHRpb24oZmlsdGVyZWREYXRhOiBTZWxlY3QyRGF0YSwgaG92ZXJpbmdWYWx1ZTogU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgZmluZEl0ID0gU2VsZWN0MlV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKGhvdmVyaW5nVmFsdWUpO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZmlsdGVyZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbmRJdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluZEl0ID0gb3B0aW9uLnZhbHVlID09PSBob3ZlcmluZ1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb247XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluZEl0ID0gb3B0aW9uLnZhbHVlID09PSBob3ZlcmluZ1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmVkdWNlRGF0YShkYXRhOiBTZWxlY3QyRGF0YSwgbWF4UmVzdWx0cyA9IDApOiB7IHJlc3VsdDogU2VsZWN0MkRhdGE7IHJlZHVjZTogYm9vbGVhbiB9IHtcbiAgICAgICAgaWYgKG1heFJlc3VsdHMgPiAwKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBPck9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cC5vcHRpb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCwgcmVkdWNlOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cE9yT3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHQsIHJlZHVjZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCwgcmVkdWNlOiBmYWxzZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBkYXRhLCByZWR1Y2U6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RmlsdGVyZWREYXRhKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgZWRpdFBhdHRlcm4/OiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyxcbiAgICApOiBTZWxlY3QyRGF0YSB7XG4gICAgICAgIGlmIChzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc29tZShncm91cCA9PiBTZWxlY3QyVXRpbHMuY29udGFpblNlYXJjaFRleHQoZ3JvdXAubGFiZWwsIHNlYXJjaFRleHQsIGVkaXRQYXR0ZXJuKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKGdyb3VwID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0MlV0aWxzLmNvbnRhaW5TZWFyY2hUZXh0KGdyb3VwLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybiksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwT3JPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cE9yT3B0aW9uLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZpbHRlcmVkU2VsZWN0ZWREYXRhKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCxcbiAgICApOiBTZWxlY3QyRGF0YSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2VsZWN0MkRhdGEgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBncm91cCA9PiBTZWxlY3QyVXRpbHMuaXNTZWxlY3RlZChzZWxlY3RlZE9wdGlvbnMsIGdyb3VwLCB0cnVlKSA9PT0gJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwT3JPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU2VsZWN0MlV0aWxzLmlzU2VsZWN0ZWQoc2VsZWN0ZWRPcHRpb25zLCBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24sIHRydWUpID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTZWFyY2hib3hIaWRkZXgoZGF0YTogU2VsZWN0MkRhdGEsIG1pbkNvdW50Rm9yU2VhcmNoPzogbnVtYmVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID09PSAnJyB8fFxuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlzTmFOKCttaW5Db3VudEZvclNlYXJjaClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaW5Db3VudEZvclNlYXJjaCA9IGRlZmF1bHRNaW5Db3VudEZvclNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25Db3VudCA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25zQ291bnQoZGF0YSk7XG4gICAgICAgIHJldHVybiBvcHRpb25Db3VudCA8ICttaW5Db3VudEZvclNlYXJjaDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTZWxlY3RlZChcbiAgICAgICAgb3B0aW9uczogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJPcHRpb25bXSB8IG51bGwsXG4gICAgICAgIG9wdGlvbjogU2VsZWN0Mk9wdGlvbixcbiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbXVsdGlwbGVcbiAgICAgICAgICAgID8gb3B0aW9ucyAmJiAob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pLnNvbWUob3AgPT4gb3AudmFsdWUgPT09IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogJ2ZhbHNlJ1xuICAgICAgICAgICAgOiBvcHRpb25zICYmIG9wdGlvbi52YWx1ZSA9PT0gKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbikudmFsdWVcbiAgICAgICAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgICAgICAgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmVTZWxlY3Rpb24ob3B0aW9uczogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJPcHRpb25bXSB8IG51bGwsIG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb25bXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pW2ldLnZhbHVlID09PSBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRPcHRpb25zQ291bnQoZGF0YTogU2VsZWN0MkRhdGEpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBjb3VudCArPSBvcHRpb25zID8gb3B0aW9ucy5sZW5ndGggOiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvbnRhaW5TZWFyY2hUZXh0KFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBzZWFyY2hUZXh0OiBzdHJpbmcgfCBudWxsLFxuICAgICAgICBlZGl0UGF0dGVybjogKChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCxcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNlYXJjaFRleHRcbiAgICAgICAgICAgID8gU2VsZWN0MlV0aWxzLmZvcm1hdFNhbnNVbmljb2RlKGxhYmVsKS5tYXRjaChcbiAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoU2VsZWN0MlV0aWxzLmZvcm1hdFBhdHRlcm4oc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pLCAnaScpLFxuICAgICAgICAgICAgICApICE9PSBudWxsXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJvdGVjdFBhdHRlcm4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocHJvdGVjdFJlZ2V4cCwgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvcm1hdFNhbnNVbmljb2RlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgZm9yIChjb25zdCB1bmljb2RlUGF0dGVybiBvZiB1bmljb2RlUGF0dGVybnMpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKHVuaWNvZGVQYXR0ZXJuLnMsIHVuaWNvZGVQYXR0ZXJuLmwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9ybWF0UGF0dGVybihzdHI6IHN0cmluZywgZWRpdFBhdHRlcm46ICgoc3RyOiBzdHJpbmcpID0+IHN0cmluZykgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgICAgICBzdHIgPSBTZWxlY3QyVXRpbHMuZm9ybWF0U2Fuc1VuaWNvZGUoU2VsZWN0MlV0aWxzLnByb3RlY3RQYXR0ZXJuKHN0cikpO1xuXG4gICAgICAgIGlmIChlZGl0UGF0dGVybiAmJiB0eXBlb2YgZWRpdFBhdHRlcm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0ciA9IGVkaXRQYXR0ZXJuKHN0cik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iXX0=
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNlbGVjdDItY29tcG9uZW50L3NyYy9saWIvc2VsZWN0Mi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzNGLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLEtBQXNDO1FBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLEtBQUssTUFBTSxhQUFhLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sT0FBTyxHQUFJLGFBQThCLENBQUMsT0FBTyxDQUFDO2dCQUN4RCxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNWLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQzNCLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQzs0QkFDekIsT0FBTyxNQUFNLENBQUM7d0JBQ2xCLENBQUM7b0JBQ0wsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLElBQUssYUFBK0IsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQzFELE9BQU8sYUFBOEIsQ0FBQztnQkFDMUMsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FDcEIsSUFBaUIsRUFDakIsS0FBNEMsRUFDNUMsUUFBb0M7UUFFcEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLE1BQU0sTUFBTSxHQUFtQixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVB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ZixDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFXO1FBQ3JDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFXO1FBQ3hDLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7WUFDM0MsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBVyxFQUFFLFdBQWtEO1FBQ3hGLEdBQUcsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ25ELEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdE1pbkNvdW50Rm9yU2VhcmNoLCBwcm90ZWN0UmVnZXhwLCB1bmljb2RlUGF0dGVybnMgfSBmcm9tICcuL3NlbGVjdDItY29uc3QnO1xuaW1wb3J0IHsgU2VsZWN0MkRhdGEsIFNlbGVjdDJHcm91cCwgU2VsZWN0Mk9wdGlvbiwgU2VsZWN0MlVwZGF0ZVZhbHVlLCBTZWxlY3QyVmFsdWUgfSBmcm9tICcuL3NlbGVjdDItaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3QyVXRpbHMge1xuICAgIHN0YXRpYyBnZXRPcHRpb25CeVZhbHVlKGRhdGE6IFNlbGVjdDJEYXRhLCB2YWx1ZTogU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mk9wdGlvbikudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE9wdGlvbnNCeVZhbHVlKFxuICAgICAgICBkYXRhOiBTZWxlY3QyRGF0YSxcbiAgICAgICAgdmFsdWU6IFNlbGVjdDJVcGRhdGVWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgICAgIG11bHRpcGxlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICApIHtcbiAgICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IFNlbGVjdDJWYWx1ZVtdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBTZWxlY3QyT3B0aW9uW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uQnlWYWx1ZShkYXRhLCB2KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUoZGF0YSwgdmFsdWUgYXMgU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZpcnN0QXZhaWxhYmxlT3B0aW9uKGRhdGE6IFNlbGVjdDJEYXRhKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgdmFsdWVJc05vdEluRmlsdGVyZWREYXRhKGZpbHRlcmVkRGF0YTogU2VsZWN0MkRhdGEsIHZhbHVlOiBTZWxlY3QyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChTZWxlY3QyVXRpbHMuaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZmlsdGVyZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UHJldmlvdXNPcHRpb24oZmlsdGVyZWREYXRhOiBTZWxlY3QyRGF0YSwgaG92ZXJpbmdWYWx1ZTogU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgZmluZEl0ID0gU2VsZWN0MlV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKGhvdmVyaW5nVmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gZmlsdGVyZWREYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cE9yT3B0aW9uID0gZmlsdGVyZWREYXRhW2ldO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IG9wdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRJdCAmJiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbmRJdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluZEl0ID0gb3B0aW9uLnZhbHVlID09PSBob3ZlcmluZ1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJPcHRpb247XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJdCAmJiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaGlkZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZpbmRJdCkge1xuICAgICAgICAgICAgICAgICAgICBmaW5kSXQgPSBvcHRpb24udmFsdWUgPT09IGhvdmVyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXROZXh0T3B0aW9uKGZpbHRlcmVkRGF0YTogU2VsZWN0MkRhdGEsIGhvdmVyaW5nVmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGZpbmRJdCA9IFNlbGVjdDJVdGlscy5pc051bGxPclVuZGVmaW5lZChob3ZlcmluZ1ZhbHVlKTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGZpbHRlcmVkRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kSXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5oaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmluZEl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRJdCA9IG9wdGlvbi52YWx1ZSA9PT0gaG92ZXJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlZHVjZURhdGEoZGF0YTogU2VsZWN0MkRhdGEsIG1heFJlc3VsdHMgPSAwKTogeyByZXN1bHQ6IFNlbGVjdDJEYXRhOyByZWR1Y2U6IGJvb2xlYW4gfSB7XG4gICAgICAgIGlmIChtYXhSZXN1bHRzID4gMCkge1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBTZWxlY3QyRGF0YSA9IFtdO1xuICAgICAgICAgICAgLy8gZGVidWdnZXI7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChncm91cE9yT3B0aW9uIGFzIFNlbGVjdDJHcm91cCkub3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwT3JPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAub3B0aW9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT09IG1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHQsIHJlZHVjZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBPck9wdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT09IG1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0LCByZWR1Y2U6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyByZXN1bHQsIHJlZHVjZTogZmFsc2UgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogZGF0YSwgcmVkdWNlOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZpbHRlcmVkRGF0YShcbiAgICAgICAgZGF0YTogU2VsZWN0MkRhdGEsXG4gICAgICAgIHNlYXJjaFRleHQ6IHN0cmluZyB8IG51bGwsXG4gICAgICAgIGVkaXRQYXR0ZXJuPzogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcsXG4gICAgKTogU2VsZWN0MkRhdGEge1xuICAgICAgICBpZiAoc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBTZWxlY3QyRGF0YSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cE9yT3B0aW9uIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNvbWUoZ3JvdXAgPT4gU2VsZWN0MlV0aWxzLmNvbnRhaW5TZWFyY2hUZXh0KGdyb3VwLmxhYmVsLCBzZWFyY2hUZXh0LCBlZGl0UGF0dGVybikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihncm91cCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdDJVdGlscy5jb250YWluU2VhcmNoVGV4dChncm91cC5sYWJlbCwgc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cE9yT3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGZpbHRlcmVkT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTZWxlY3QyVXRpbHMuY29udGFpblNlYXJjaFRleHQoZ3JvdXBPck9wdGlvbi5sYWJlbCwgc2VhcmNoVGV4dCwgZWRpdFBhdHRlcm4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwT3JPcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGaWx0ZXJlZFNlbGVjdGVkRGF0YShcbiAgICAgICAgZGF0YTogU2VsZWN0MkRhdGEsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJPcHRpb25bXSB8IG51bGwsXG4gICAgKTogU2VsZWN0MkRhdGEge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdDJEYXRhID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBPck9wdGlvbiBvZiBkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGdyb3VwT3JPcHRpb24gYXMgU2VsZWN0Mkdyb3VwKS5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPT4gU2VsZWN0MlV0aWxzLmlzU2VsZWN0ZWQoc2VsZWN0ZWRPcHRpb25zLCBncm91cCwgdHJ1ZSkgPT09ICdmYWxzZScsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cE9yT3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFNlbGVjdDJVdGlscy5pc1NlbGVjdGVkKHNlbGVjdGVkT3B0aW9ucywgZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uLCB0cnVlKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwT3JPcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzU2VhcmNoYm94SGlkZGV4KGRhdGE6IFNlbGVjdDJEYXRhLCBtaW5Db3VudEZvclNlYXJjaD86IG51bWJlciB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtaW5Db3VudEZvclNlYXJjaCA9PT0gJycgfHxcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG1pbkNvdW50Rm9yU2VhcmNoID09PSBudWxsIHx8XG4gICAgICAgICAgICBpc05hTigrbWluQ291bnRGb3JTZWFyY2gpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWluQ291bnRGb3JTZWFyY2ggPSBkZWZhdWx0TWluQ291bnRGb3JTZWFyY2g7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uQ291bnQgPSBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uc0NvdW50KGRhdGEpO1xuICAgICAgICByZXR1cm4gb3B0aW9uQ291bnQgPCArbWluQ291bnRGb3JTZWFyY2g7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzU2VsZWN0ZWQoXG4gICAgICAgIG9wdGlvbnM6IFNlbGVjdDJPcHRpb24gfCBTZWxlY3QyT3B0aW9uW10gfCBudWxsLFxuICAgICAgICBvcHRpb246IFNlbGVjdDJPcHRpb24sXG4gICAgICAgIG11bHRpcGxlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG11bHRpcGxlXG4gICAgICAgICAgICA/IG9wdGlvbnMgJiYgKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKS5zb21lKG9wID0+IG9wLnZhbHVlID09PSBvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgICAgICAgICA6ICdmYWxzZSdcbiAgICAgICAgICAgIDogb3B0aW9ucyAmJiBvcHRpb24udmFsdWUgPT09IChvcHRpb25zIGFzIFNlbGVjdDJPcHRpb24pLnZhbHVlXG4gICAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICAgIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtb3ZlU2VsZWN0aW9uKG9wdGlvbnM6IFNlbGVjdDJPcHRpb24gfCBTZWxlY3QyT3B0aW9uW10gfCBudWxsLCBvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAob3B0aW9ucyBhcyBTZWxlY3QyT3B0aW9uW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKVtpXS52YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgKG9wdGlvbnMgYXMgU2VsZWN0Mk9wdGlvbltdKS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0T3B0aW9uc0NvdW50KGRhdGE6IFNlbGVjdDJEYXRhKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwT3JPcHRpb24gb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoZ3JvdXBPck9wdGlvbiBhcyBTZWxlY3QyR3JvdXApLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gb3B0aW9ucyA/IG9wdGlvbnMubGVuZ3RoIDogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb250YWluU2VhcmNoVGV4dChcbiAgICAgICAgbGFiZWw6IHN0cmluZyxcbiAgICAgICAgc2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgZWRpdFBhdHRlcm46ICgoc3RyOiBzdHJpbmcpID0+IHN0cmluZykgfCB1bmRlZmluZWQsXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzZWFyY2hUZXh0XG4gICAgICAgICAgICA/IFNlbGVjdDJVdGlscy5mb3JtYXRTYW5zVW5pY29kZShsYWJlbCkubWF0Y2goXG4gICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKFNlbGVjdDJVdGlscy5mb3JtYXRQYXR0ZXJuKHNlYXJjaFRleHQsIGVkaXRQYXR0ZXJuKSwgJ2knKSxcbiAgICAgICAgICAgICAgKSAhPT0gbnVsbFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHByb3RlY3RQYXR0ZXJuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHByb3RlY3RSZWdleHAsICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBmb3JtYXRTYW5zVW5pY29kZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGZvciAoY29uc3QgdW5pY29kZVBhdHRlcm4gb2YgdW5pY29kZVBhdHRlcm5zKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSh1bmljb2RlUGF0dGVybi5zLCB1bmljb2RlUGF0dGVybi5sKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvcm1hdFBhdHRlcm4oc3RyOiBzdHJpbmcsIGVkaXRQYXR0ZXJuOiAoKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgICAgc3RyID0gU2VsZWN0MlV0aWxzLmZvcm1hdFNhbnNVbmljb2RlKFNlbGVjdDJVdGlscy5wcm90ZWN0UGF0dGVybihzdHIpKTtcblxuICAgICAgICBpZiAoZWRpdFBhdHRlcm4gJiYgdHlwZW9mIGVkaXRQYXR0ZXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdHIgPSBlZGl0UGF0dGVybihzdHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufVxuIl19
|