@firestitch/form 18.0.34 → 18.0.36
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/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +19 -7
- package/app/directives/form-base/form-base.directive.d.ts +7 -0
- package/app/directives/validators/control.directive.d.ts +14 -1
- package/esm2022/app/components/form-dialog-actions/form-dialog-actions.component.mjs +28 -11
- package/esm2022/app/directives/form-base/form-base.directive.mjs +1 -1
- package/esm2022/app/directives/validators/control.directive.mjs +42 -11
- package/fesm2022/firestitch-form.mjs +68 -20
- package/fesm2022/firestitch-form.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class FsFormDialogActionsComponent implements OnInit, OnDestroy {
|
|
4
|
-
/** Leave unset
|
|
4
|
+
/** Leave unset to follow whether the enclosing form or container has anything to save. */
|
|
5
5
|
save: boolean;
|
|
6
6
|
create: boolean;
|
|
7
7
|
close: boolean;
|
|
8
|
-
/** Leave unset
|
|
8
|
+
/** Leave unset to fill in whenever Save does not apply. */
|
|
9
9
|
done: boolean;
|
|
10
10
|
closeData: any;
|
|
11
11
|
name: string;
|
|
@@ -16,11 +16,23 @@ export declare class FsFormDialogActionsComponent implements OnInit, OnDestroy {
|
|
|
16
16
|
private _form;
|
|
17
17
|
private _cdRef;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
* Whatever owns the form set these actions act on, or null when nothing does.
|
|
20
|
+
* A container answers for every form mounted under it; failing that the
|
|
21
|
+
* enclosing form's root answers for itself and anything linked into it.
|
|
22
|
+
*/
|
|
23
|
+
private get _owner();
|
|
24
|
+
/**
|
|
25
|
+
* Save and Done are one decision - whether there is anything to save - rather
|
|
26
|
+
* than two independent switches, so a bare `<fs-form-dialog-actions>` resolves
|
|
27
|
+
* it off the form set it sits in and needs no bindings at all. A footer in a
|
|
28
|
+
* container swaps Save for Done as tabs change without the dialog listing
|
|
29
|
+
* which tabs are savable, and a dialog with no form at all - a read-only one
|
|
30
|
+
* of labelled facts - gets Done, because a submit button there has nothing to
|
|
31
|
+
* submit.
|
|
32
|
+
*
|
|
33
|
+
* An explicit binding always wins. `[done]="true"` on its own means Done and
|
|
34
|
+
* only Done: turning Done on while leaving a Save beside it is never what the
|
|
35
|
+
* caller meant, and the two-flag version of this let that happen silently.
|
|
24
36
|
*/
|
|
25
37
|
get showSave(): boolean;
|
|
26
38
|
get showDone(): boolean;
|
|
@@ -45,6 +45,13 @@ export declare abstract class FsFormBaseDirective implements OnInit, AfterConten
|
|
|
45
45
|
private _confirmTabGroups;
|
|
46
46
|
private _destroy$;
|
|
47
47
|
abstract submitting: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* True when anything in the owned set has a submit handler - i.e. there is
|
|
50
|
+
* something for a Save button to do. Both a form and a container answer this
|
|
51
|
+
* over their linked set, so whichever one owns a footer can be asked the same
|
|
52
|
+
* question without knowing which it got.
|
|
53
|
+
*/
|
|
54
|
+
abstract submits: boolean;
|
|
48
55
|
/** True when anything in the owned set has unsaved changes. */
|
|
49
56
|
abstract dirtyLinked: boolean;
|
|
50
57
|
/** Every form in the owned set, at any depth. */
|
|
@@ -17,7 +17,6 @@ export declare class FsControlDirective implements OnInit, AfterContentInit, OnD
|
|
|
17
17
|
appendHintClass: string;
|
|
18
18
|
set validateMessages(messages: Record<string, string>);
|
|
19
19
|
errors: any[];
|
|
20
|
-
protected _control: AbstractControl;
|
|
21
20
|
protected _elementRef: ElementRef<any>;
|
|
22
21
|
protected _renderer2: Renderer2;
|
|
23
22
|
protected _injector: Injector;
|
|
@@ -25,7 +24,20 @@ export declare class FsControlDirective implements OnInit, AfterContentInit, OnD
|
|
|
25
24
|
protected _ngControl: NgControl;
|
|
26
25
|
protected _formDirective: FsFormDirective;
|
|
27
26
|
private _destroy$;
|
|
27
|
+
private _statusChanges$;
|
|
28
|
+
private _boundControl;
|
|
28
29
|
constructor();
|
|
30
|
+
/**
|
|
31
|
+
* Always read the control through the directive rather than caching it.
|
|
32
|
+
*
|
|
33
|
+
* NgForm.addControl() runs in a microtask and reassigns dir.control to
|
|
34
|
+
* whatever FormGroup.registerControl() returns — and registerControl() hands
|
|
35
|
+
* back the EXISTING control when the name is already taken (two fields
|
|
36
|
+
* sharing a name, or lazily created content re-registering). A control
|
|
37
|
+
* captured in the constructor is then an orphan: it never emits again, so
|
|
38
|
+
* statusChanges never fires and the validation message is never rendered.
|
|
39
|
+
*/
|
|
40
|
+
protected get _control(): AbstractControl;
|
|
29
41
|
ngOnInit(): void;
|
|
30
42
|
ngOnDestroy(): void;
|
|
31
43
|
ngAfterContentInit(): void;
|
|
@@ -40,6 +52,7 @@ export declare class FsControlDirective implements OnInit, AfterContentInit, OnD
|
|
|
40
52
|
protected _renderHint(error: any, messageWrapper: any): void;
|
|
41
53
|
protected _renderError(wrapper: any, messageWrapper: any, error: any): void;
|
|
42
54
|
protected _subscribeToStatusChagnes(): void;
|
|
55
|
+
private _bindStatusChanges;
|
|
43
56
|
protected _getWrapper(node: any, count?: number): any;
|
|
44
57
|
protected _parseErrorMessage(message: any, args: any): string;
|
|
45
58
|
protected _getError(controlRef: any): {
|
|
@@ -11,11 +11,11 @@ import { FsFormDirective } from '../../directives/form/form.directive';
|
|
|
11
11
|
import { withinSameDialog } from '../../helpers/within-same-dialog';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
export class FsFormDialogActionsComponent {
|
|
14
|
-
/** Leave unset
|
|
14
|
+
/** Leave unset to follow whether the enclosing form or container has anything to save. */
|
|
15
15
|
save;
|
|
16
16
|
create = false;
|
|
17
17
|
close = false;
|
|
18
|
-
/** Leave unset
|
|
18
|
+
/** Leave unset to fill in whenever Save does not apply. */
|
|
19
19
|
done;
|
|
20
20
|
closeData = null;
|
|
21
21
|
name;
|
|
@@ -29,20 +29,37 @@ export class FsFormDialogActionsComponent {
|
|
|
29
29
|
_form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));
|
|
30
30
|
_cdRef = inject(ChangeDetectorRef);
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
* Whatever owns the form set these actions act on, or null when nothing does.
|
|
33
|
+
* A container answers for every form mounted under it; failing that the
|
|
34
|
+
* enclosing form's root answers for itself and anything linked into it.
|
|
35
|
+
*/
|
|
36
|
+
get _owner() {
|
|
37
|
+
return this._container || this._form?.rootForm || null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Save and Done are one decision - whether there is anything to save - rather
|
|
41
|
+
* than two independent switches, so a bare `<fs-form-dialog-actions>` resolves
|
|
42
|
+
* it off the form set it sits in and needs no bindings at all. A footer in a
|
|
43
|
+
* container swaps Save for Done as tabs change without the dialog listing
|
|
44
|
+
* which tabs are savable, and a dialog with no form at all - a read-only one
|
|
45
|
+
* of labelled facts - gets Done, because a submit button there has nothing to
|
|
46
|
+
* submit.
|
|
47
|
+
*
|
|
48
|
+
* An explicit binding always wins. `[done]="true"` on its own means Done and
|
|
49
|
+
* only Done: turning Done on while leaving a Save beside it is never what the
|
|
50
|
+
* caller meant, and the two-flag version of this let that happen silently.
|
|
37
51
|
*/
|
|
38
52
|
get showSave() {
|
|
39
|
-
|
|
53
|
+
if (this.save !== undefined) {
|
|
54
|
+
return this.save;
|
|
55
|
+
}
|
|
56
|
+
return this.done === true ? false : this._owner?.submits ?? false;
|
|
40
57
|
}
|
|
41
58
|
get showDone() {
|
|
42
|
-
return this.done ?? (
|
|
59
|
+
return this.done ?? (!this.showSave && !this.create);
|
|
43
60
|
}
|
|
44
61
|
ngOnInit() {
|
|
45
|
-
const owner = this.
|
|
62
|
+
const owner = this._owner;
|
|
46
63
|
if (owner) {
|
|
47
64
|
// Track the whole set, not one form's own controls: with a form scoped to a
|
|
48
65
|
// tab's fields, the actions sit outside it in the dialog footer and that
|
|
@@ -106,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
106
123
|
}], name: [{
|
|
107
124
|
type: Input
|
|
108
125
|
}] } });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLWRpYWxvZy1hY3Rpb25zL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXFCcEUsTUFBTSxPQUFPLDRCQUE0QjtJQUV2Qyx5RkFBeUY7SUFDekUsSUFBSSxDQUFVO0lBQ2QsTUFBTSxHQUFHLEtB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QVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwrRUFBK0U7SUFDdkUsY0FBYyxDQUFnQyxLQUFRO1FBQzVELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQzt1R0FyRlUsNEJBQTRCOzJGQUE1Qiw0QkFBNEIsdVNDbkN6Qyw2L0JBNkNjLDY3Q0RqQlYsU0FBUyxpTEFDVCxpQkFBaUIsdUtBQ2pCLGNBQWMscUxBQ2QsZ0JBQWdCLG9KQUNoQiwwQkFBMEI7OzJGQUdqQiw0QkFBNEI7a0JBbEJ4QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFFBQ1Y7d0JBQ0osT0FBTyxFQUFFLGNBQWM7d0JBQ3ZCLHFCQUFxQixFQUFFLG9CQUFvQjtxQkFDNUMsV0FDUTt3QkFDUCxTQUFTO3dCQUNULGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDM0I7OEJBS2UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBRVUsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZzQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzRm9ybUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tYmFzZSc7XG5pbXBvcnQgeyBGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tY29udGFpbmVyJztcbmltcG9ydCB7IEZzRm9ybURpYWxvZ0Nsb3NlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWRpYWxvZy1jbG9zZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcbmltcG9ydCB7IHdpdGhpblNhbWVEaWFsb2cgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3dpdGhpbi1zYW1lLWRpYWxvZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZm9ybS1kaWFsb2ctYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdmb3JtLWJ1dHRvbnMnLFxuICAgICdbY2xhc3Muc2F2ZS1jcmVhdGVdJzogJ3Nob3dTYXZlIHx8IGNyZWF0ZScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b24sXG4gICAgRnNCdXR0b25EaXJlY3RpdmUsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGc0Zvcm1EaWFsb2dDbG9zZURpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNGb3JtRGlhbG9nQWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvKiogTGVhdmUgdW5zZXQgaW5zaWRlIGFuIGBmc0Zvcm1Db250YWluZXJgIHRvIGZvbGxvdyB3aGV0aGVyIGl0IGhhcyBhbnl0aGluZyB0byBzYXZlLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGNyZWF0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2UgPSBmYWxzZTtcbiAgLyoqIExlYXZlIHVuc2V0IGluc2lkZSBhbiBgZnNGb3JtQ29udGFpbmVyYCB0byBmaWxsIGluIHdoZW5ldmVyIFNhdmUgZG9lcyBub3QgYXBwbHkuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkb25lOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VEYXRhID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvLyBBIGRpYWxvZyBvcGVuZWQgd2l0aCBgdmlld0NvbnRhaW5lclJlZmAgcmVzb2x2ZXMgdGhyb3VnaCB0byB3aGF0ZXZlciBvcGVuZWRcbiAgLy8gaXQsIHNvIGFuIG93bmVyIGZyb20gYW5vdGhlciBkaWFsb2cgaXMgZGlzY2FyZGVkIC0gdGhlc2UgYWN0aW9ucyBiZWxvbmcgdG9cbiAgLy8gdGhlaXIgb3duIGRpYWxvZydzIGZvcm0gc2V0IGFuZCBubyBvbmUgZWxzZSdzLlxuICBwcml2YXRlIF9jb250YWluZXIgPSB0aGlzLl9vd25EaWFsb2dPbmx5KGluamVjdChGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSkpO1xuICBwcml2YXRlIF9mb3JtID0gdGhpcy5fb3duRGlhbG9nT25seShpbmplY3QoRnNGb3JtRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pKTtcbiAgcHJpdmF0ZSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBJbnNpZGUgYSBjb250YWluZXIgdGhlc2UgZGVmYXVsdCB0byB3aGV0aGVyIGFueXRoaW5nIG1vdW50ZWQgY2FuIGFjdHVhbGx5XG4gICAqIHNhdmUsIHNvIGEgZm9vdGVyIGxlZnQgYXMgYSBiYXJlIGA8ZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5gIHN3YXBzIFNhdmUgZm9yXG4gICAqIERvbmUgYXMgdGFicyBjaGFuZ2Ugd2l0aG91dCB0aGUgZGlhbG9nIGxpc3Rpbmcgd2hpY2ggdGFicyBhcmUgc2F2YWJsZS4gQW5cbiAgICogZXhwbGljaXQgYmluZGluZyBhbHdheXMgd2lucywgYW5kIG91dHNpZGUgYSBjb250YWluZXIgU2F2ZSBzdGF5cyBvbiBhcyBpdFxuICAgKiBhbHdheXMgZGlkLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93U2F2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zYXZlID8/ICh0aGlzLl9jb250YWluZXIgPyB0aGlzLl9jb250YWluZXIuc3VibWl0cyA6IHRydWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93RG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb25lID8/ICh0aGlzLl9jb250YWluZXIgPyAhdGhpcy5fY29udGFpbmVyLnN1Ym1pdHMgJiYgIXRoaXMuY3JlYXRlIDogZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG93bmVyID0gdGhpcy5fY29udGFpbmVyIHx8IHRoaXMuX2Zvcm0/LnJvb3RGb3JtO1xuXG4gICAgaWYob3duZXIpIHtcbiAgICAgIC8vIFRyYWNrIHRoZSB3aG9sZSBzZXQsIG5vdCBvbmUgZm9ybSdzIG93biBjb250cm9sczogd2l0aCBhIGZvcm0gc2NvcGVkIHRvIGFcbiAgICAgIC8vIHRhYidzIGZpZWxkcywgdGhlIGFjdGlvbnMgc2l0IG91dHNpZGUgaXQgaW4gdGhlIGRpYWxvZyBmb290ZXIgYW5kIHRoYXRcbiAgICAgIC8vIGZvcm0ncyBOZ0Zvcm0gaG9sZHMgbm90aGluZyBvZiBpdHMgb3duLiBSZWNvbXB1dGVkIG9uIGV2ZXJ5IGVtaXNzaW9uXG4gICAgICAvLyByYXRoZXIgdGhhbiBsYXRjaGVkLCBzbyBhIHN3aXRjaCB0byBhIHByaXN0aW5lIHRhYiBjbGVhcnMgaXQgdG9vLlxuICAgICAgb3duZXIuZGlydHlDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IG93bmVyLmRpcnR5TGlua2VkO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgb3duZXIuc3VibWl0dGVkJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSg1MCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX2Zvcm0ucmVzZXRlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBLZWVwcyBhIERJLXJlc29sdmVkIG93bmVyIG9ubHkgd2hlbiBpdCBiZWxvbmdzIHRvIHRoZXNlIGFjdGlvbnMnIGRpYWxvZy4gKi9cbiAgcHJpdmF0ZSBfb3duRGlhbG9nT25seTxUIGV4dGVuZHMgRnNGb3JtQmFzZURpcmVjdGl2ZT4ob3duZXI6IFQpOiBUIHtcbiAgICByZXR1cm4gd2l0aGluU2FtZURpYWxvZyhvd25lciwgdGhpcy5fZGlhbG9nUmVmKSA/IG93bmVyIDogbnVsbDtcbiAgfVxufVxuIiwiQGlmIChzaG93U2F2ZSB8fCBjcmVhdGUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW25hbWVdPVwibmFtZVwiPlxuICAgIHt7IGNyZWF0ZSA/ICdDcmVhdGUnIDogJ1NhdmUnIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiY2xvc2UgJiYgIWRpcnR5ICYmICFjcmVhdGVcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIENhbmNlbFxuICA8L2J1dHRvbj5cbn1cbkBpZiAoc2hvd0RvbmUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIERvbmVcbiAgPC9idXR0b24+XG59XG5AaWYgKHNob3dTYXZlIHx8IGNyZWF0ZSkge1xuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG59XG5AaWYgKGNsb3NlKSB7XG4gIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZS1idXR0b25cIlxuICAgICAgZnNGb3JtRGlhbG9nQ2xvc2VcbiAgICAgIFtjbG9zZURhdGFdPVwiY2xvc2VEYXRhXCJcbiAgICAgIFtjb2xvcl09XCJkaXJ0eSA/ICdiYXNpYycgOiAncHJpbWFyeSdcIj5cbiAgICBDbG9zZVxuICA8L2J1dHRvbj5cbn1cbkBpZiAoIShzaG93U2F2ZSB8fCBjcmVhdGUpKSB7XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLWRpYWxvZy1hY3Rpb25zL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXFCcEUsTUFBTSxPQUFPLDRCQUE0QjtJQUV2QywwRkFBMEY7SUFDMUUsSUFBSSxDQUFVO0lBQ2QsTUFBTSxHQUFHLEtB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QUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLGNBQWMsQ0FBZ0MsS0FBUTtRQUM1RCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pFLENBQUM7dUdBeEdVLDRCQUE0QjsyRkFBNUIsNEJBQTRCLHVTQ25DekMsNi9CQTZDYyw2N0NEakJWLFNBQVMsaUxBQ1QsaUJBQWlCLHVLQUNqQixjQUFjLHFMQUNkLGdCQUFnQixvSkFDaEIsMEJBQTBCOzsyRkFHakIsNEJBQTRCO2tCQWxCeEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxRQUNWO3dCQUNKLE9BQU8sRUFBRSxjQUFjO3dCQUN2QixxQkFBcUIsRUFBRSxvQkFBb0I7cUJBQzVDLFdBQ1E7d0JBQ1AsU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQiwwQkFBMEI7cUJBQzNCOzhCQUtlLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUVVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc0Zvcm1CYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWJhc2UnO1xuaW1wb3J0IHsgRnNGb3JtQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBGc0Zvcm1EaWFsb2dDbG9zZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9ybS1kaWFsb2ctY2xvc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9ybS9mb3JtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB3aXRoaW5TYW1lRGlhbG9nIH0gZnJvbSAnLi4vLi4vaGVscGVycy93aXRoaW4tc2FtZS1kaWFsb2cnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWZvcm0tZGlhbG9nLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZm9ybS1idXR0b25zJyxcbiAgICAnW2NsYXNzLnNhdmUtY3JlYXRlXSc6ICdzaG93U2F2ZSB8fCBjcmVhdGUnLFxuICB9LFxuICBpbXBvcnRzOiBbXG4gICAgTWF0QnV0dG9uLFxuICAgIEZzQnV0dG9uRGlyZWN0aXZlLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgRnNGb3JtRGlhbG9nQ2xvc2VEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybURpYWxvZ0FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqIExlYXZlIHVuc2V0IHRvIGZvbGxvdyB3aGV0aGVyIHRoZSBlbmNsb3NpbmcgZm9ybSBvciBjb250YWluZXIgaGFzIGFueXRoaW5nIHRvIHNhdmUuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzYXZlOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBjbG9zZSA9IGZhbHNlO1xuICAvKiogTGVhdmUgdW5zZXQgdG8gZmlsbCBpbiB3aGVuZXZlciBTYXZlIGRvZXMgbm90IGFwcGx5LiAqL1xuICBASW5wdXQoKSBwdWJsaWMgZG9uZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGNsb3NlRGF0YSA9IG51bGw7XG4gIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIGRpcnR5ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kaWFsb2dSZWYgPSBpbmplY3Q8TWF0RGlhbG9nUmVmPGFueT4+KE1hdERpYWxvZ1JlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLy8gQSBkaWFsb2cgb3BlbmVkIHdpdGggYHZpZXdDb250YWluZXJSZWZgIHJlc29sdmVzIHRocm91Z2ggdG8gd2hhdGV2ZXIgb3BlbmVkXG4gIC8vIGl0LCBzbyBhbiBvd25lciBmcm9tIGFub3RoZXIgZGlhbG9nIGlzIGRpc2NhcmRlZCAtIHRoZXNlIGFjdGlvbnMgYmVsb25nIHRvXG4gIC8vIHRoZWlyIG93biBkaWFsb2cncyBmb3JtIHNldCBhbmQgbm8gb25lIGVsc2Uncy5cbiAgcHJpdmF0ZSBfY29udGFpbmVyID0gdGhpcy5fb3duRGlhbG9nT25seShpbmplY3QoRnNGb3JtQ29udGFpbmVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pKTtcbiAgcHJpdmF0ZSBfZm9ybSA9IHRoaXMuX293bkRpYWxvZ09ubHkoaW5qZWN0KEZzRm9ybURpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KSk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogV2hhdGV2ZXIgb3ducyB0aGUgZm9ybSBzZXQgdGhlc2UgYWN0aW9ucyBhY3Qgb24sIG9yIG51bGwgd2hlbiBub3RoaW5nIGRvZXMuXG4gICAqIEEgY29udGFpbmVyIGFuc3dlcnMgZm9yIGV2ZXJ5IGZvcm0gbW91bnRlZCB1bmRlciBpdDsgZmFpbGluZyB0aGF0IHRoZVxuICAgKiBlbmNsb3NpbmcgZm9ybSdzIHJvb3QgYW5zd2VycyBmb3IgaXRzZWxmIGFuZCBhbnl0aGluZyBsaW5rZWQgaW50byBpdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0IF9vd25lcigpOiBGc0Zvcm1CYXNlRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyIHx8IHRoaXMuX2Zvcm0/LnJvb3RGb3JtIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhbmQgRG9uZSBhcmUgb25lIGRlY2lzaW9uIC0gd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyB0byBzYXZlIC0gcmF0aGVyXG4gICAqIHRoYW4gdHdvIGluZGVwZW5kZW50IHN3aXRjaGVzLCBzbyBhIGJhcmUgYDxmcy1mb3JtLWRpYWxvZy1hY3Rpb25zPmAgcmVzb2x2ZXNcbiAgICogaXQgb2ZmIHRoZSBmb3JtIHNldCBpdCBzaXRzIGluIGFuZCBuZWVkcyBubyBiaW5kaW5ncyBhdCBhbGwuIEEgZm9vdGVyIGluIGFcbiAgICogY29udGFpbmVyIHN3YXBzIFNhdmUgZm9yIERvbmUgYXMgdGFicyBjaGFuZ2Ugd2l0aG91dCB0aGUgZGlhbG9nIGxpc3RpbmdcbiAgICogd2hpY2ggdGFicyBhcmUgc2F2YWJsZSwgYW5kIGEgZGlhbG9nIHdpdGggbm8gZm9ybSBhdCBhbGwgLSBhIHJlYWQtb25seSBvbmVcbiAgICogb2YgbGFiZWxsZWQgZmFjdHMgLSBnZXRzIERvbmUsIGJlY2F1c2UgYSBzdWJtaXQgYnV0dG9uIHRoZXJlIGhhcyBub3RoaW5nIHRvXG4gICAqIHN1Ym1pdC5cbiAgICpcbiAgICogQW4gZXhwbGljaXQgYmluZGluZyBhbHdheXMgd2lucy4gYFtkb25lXT1cInRydWVcImAgb24gaXRzIG93biBtZWFucyBEb25lIGFuZFxuICAgKiBvbmx5IERvbmU6IHR1cm5pbmcgRG9uZSBvbiB3aGlsZSBsZWF2aW5nIGEgU2F2ZSBiZXNpZGUgaXQgaXMgbmV2ZXIgd2hhdCB0aGVcbiAgICogY2FsbGVyIG1lYW50LCBhbmQgdGhlIHR3by1mbGFnIHZlcnNpb24gb2YgdGhpcyBsZXQgdGhhdCBoYXBwZW4gc2lsZW50bHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dTYXZlKCk6IGJvb2xlYW4ge1xuICAgIGlmKHRoaXMuc2F2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRvbmUgPT09IHRydWUgPyBmYWxzZSA6IHRoaXMuX293bmVyPy5zdWJtaXRzID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93RG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb25lID8/ICghdGhpcy5zaG93U2F2ZSAmJiAhdGhpcy5jcmVhdGUpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG93bmVyID0gdGhpcy5fb3duZXI7XG5cbiAgICBpZihvd25lcikge1xuICAgICAgLy8gVHJhY2sgdGhlIHdob2xlIHNldCwgbm90IG9uZSBmb3JtJ3Mgb3duIGNvbnRyb2xzOiB3aXRoIGEgZm9ybSBzY29wZWQgdG8gYVxuICAgICAgLy8gdGFiJ3MgZmllbGRzLCB0aGUgYWN0aW9ucyBzaXQgb3V0c2lkZSBpdCBpbiB0aGUgZGlhbG9nIGZvb3RlciBhbmQgdGhhdFxuICAgICAgLy8gZm9ybSdzIE5nRm9ybSBob2xkcyBub3RoaW5nIG9mIGl0cyBvd24uIFJlY29tcHV0ZWQgb24gZXZlcnkgZW1pc3Npb25cbiAgICAgIC8vIHJhdGhlciB0aGFuIGxhdGNoZWQsIHNvIGEgc3dpdGNoIHRvIGEgcHJpc3RpbmUgdGFiIGNsZWFycyBpdCB0b28uXG4gICAgICBvd25lci5kaXJ0eUNoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gb3duZXIuZGlydHlMaW5rZWQ7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBvd25lci5zdWJtaXR0ZWQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlbGF5KDUwKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5fZm9ybSkge1xuICAgICAgdGhpcy5fZm9ybS5yZXNldGVkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqIEtlZXBzIGEgREktcmVzb2x2ZWQgb3duZXIgb25seSB3aGVuIGl0IGJlbG9uZ3MgdG8gdGhlc2UgYWN0aW9ucycgZGlhbG9nLiAqL1xuICBwcml2YXRlIF9vd25EaWFsb2dPbmx5PFQgZXh0ZW5kcyBGc0Zvcm1CYXNlRGlyZWN0aXZlPihvd25lcjogVCk6IFQge1xuICAgIHJldHVybiB3aXRoaW5TYW1lRGlhbG9nKG93bmVyLCB0aGlzLl9kaWFsb2dSZWYpID8gb3duZXIgOiBudWxsO1xuICB9XG59XG4iLCJAaWYgKHNob3dTYXZlIHx8IGNyZWF0ZSkge1xuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBbbmFtZV09XCJuYW1lXCI+XG4gICAge3sgY3JlYXRlID8gJ0NyZWF0ZScgOiAnU2F2ZScgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCJjbG9zZSAmJiAhZGlydHkgJiYgIWNyZWF0ZVwiXG4gICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCI+XG4gICAgQ2FuY2VsXG4gIDwvYnV0dG9uPlxufVxuQGlmIChzaG93RG9uZSkge1xuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCI+XG4gICAgRG9uZVxuICA8L2J1dHRvbj5cbn1cbkBpZiAoc2hvd1NhdmUgfHwgY3JlYXRlKSB7XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbkBpZiAoY2xvc2UpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNsb3NlLWJ1dHRvblwiXG4gICAgICBmc0Zvcm1EaWFsb2dDbG9zZVxuICAgICAgW2Nsb3NlRGF0YV09XCJjbG9zZURhdGFcIlxuICAgICAgW2NvbG9yXT1cImRpcnR5ID8gJ2Jhc2ljJyA6ICdwcmltYXJ5J1wiPlxuICAgIENsb3NlXG4gIDwvYnV0dG9uPlxufVxuQGlmICghKHNob3dTYXZlIHx8IGNyZWF0ZSkpIHtcbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxufVxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -354,4 +354,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
354
354
|
type: ContentChildren,
|
|
355
355
|
args: [MatTabGroup, { descendants: true }]
|
|
356
356
|
}] } });
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1iYXNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb3JtLWJhc2UvZm9ybS1iYXNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBVSxXQUFXLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBS3ZEOzs7Ozs7Ozs7O0dBVUc7QUFFSCxN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akYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO3VHQTlhbUIsbUJBQW1COzJGQUFuQixtQkFBbUIsbVJBaUN0QixXQUFXOzsyRkFqQ1IsbUJBQW1CO2tCQUR4QyxTQUFTOzhCQUlELFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBY0UsVUFBVTtzQkFEakIsZUFBZTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAsIE1hdFRhYkhlYWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuXG5pbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpaWYsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29uZmlybVJlc3VsdCB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcy9mb3JtLXN0YXR1cyc7XG5pbXBvcnQgeyBGb3JtRGVhY3RpdmF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vZ3VhcmRzL2Zvcm0tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBjb25maXJtUmVzdWx0Q29udGludWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldEFjdGl2ZVJvdXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtYWN0aXZlLXJvdXRlJztcbmltcG9ydCB7IENvbmZpcm1Db25maWcsIENvbmZpcm1UYWJHcm91cCwgU3VibWl0RXZlbnQsIFN1Ym1pdHRlZEV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGc0Zvcm0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mc2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHR5cGUgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcblxuXG4vKipcbiAqIFNoYXJlZCBieSB0aGUgdHdvIHRoaW5ncyB0aGF0IGNhbiBvd24gYSBzZXQgb2YgZm9ybXM6IGFuIGBmc0Zvcm1gIHNpdHRpbmcgYXRcbiAqIHRoZSByb290IG9mIGl0cyBsaW5rZWQgc2V0LCBhbmQgYW4gYGZzRm9ybUNvbnRhaW5lcmAgaG9sZGluZyBmb3JtcyB0aGF0IGFyZVxuICogc2libGluZ3MgcmF0aGVyIHRoYW4gbmVzdGVkLlxuICpcbiAqIEl0IGhvbGRzIHRoZSBzdWJtaXQtYnV0dG9uIHJlZ2lzdHJ5IGJvdGggb2YgdGhlbSBleHBvc2UgdG8gYnV0dG9ucywgYW5kIHRoZVxuICogbGlmZWN5Y2xlIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gdG8gYW55IG9uZSBmb3JtIC1cbiAqIHRoZSBkaWFsb2cgYmFja2Ryb3AgYW5kIEVzY2FwZSwgQ3RybCtTLCB0aGUgYnJvd3NlciBjbG9zZSBwcm9tcHQsIHRoZSBkcmF3ZXJcbiAqIGFuZCB0YWItc3dpdGNoIGNvbmZpcm1zLiBFeGFjdGx5IG9uZSBvd25lciByZWdpc3RlcnMgdGhhdCBsaWZlY3ljbGU7IHNlZVxuICogYF9yZWdpc3Rlck93bmVyTGlmZWN5Y2xlYC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnNGb3JtQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybVRhYnMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtOiBDb25maXJtQ29uZmlnIHwgYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1EaWFsb2cgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtRHJhd2VyID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybUJyb3dzZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG9ydGN1dHMgPSB0cnVlOyAvLyBDdHJsICsgc1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWFjdGl2YXRpb25HdWFyZCA9IHRydWU7XG5cbiAgcHJvdGVjdGVkIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJvdGVjdGVkIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCBfZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIF9mb3JtID0gaW5qZWN0KEZzRm9ybSk7XG4gIHByb3RlY3RlZCBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RyYXdlclJlZiA9IGluamVjdDxEcmF3ZXJSZWY8YW55Pj4oRHJhd2VyUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ0JhY2tkcm9wRXNjYXBlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGVDb25maWc6IFJvdXRlIHwgbnVsbDtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdFRhYkdyb3VwLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgX3RhYkdyb3VwczogUXVlcnlMaXN0PE1hdFRhYkdyb3VwPiA9IG5ldyBRdWVyeUxpc3QoKTtcblxuICBwcml2YXRlIF9idXR0b25zID0gbmV3IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4oKTtcbiAgcHJpdmF0ZSBfYWN0aXZlU3VibWl0QnV0dG9uOiBGc0J1dHRvbkRpcmVjdGl2ZTtcbiAgcHJpdmF0ZSBfY29uZmlybVRhYkdyb3VwcyA9IG5ldyBXZWFrU2V0PE1hdFRhYkdyb3VwPigpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdHRpbmc6IGJvb2xlYW47XG5cbiAgLyoqIFRydWUgd2hlbiBhbnl0aGluZyBpbiB0aGUgb3duZWQgc2V0IGhhcyB1bnNhdmVkIGNoYW5nZXMuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBkaXJ0eUxpbmtlZDogYm9vbGVhbjtcblxuICAvKiogRXZlcnkgZm9ybSBpbiB0aGUgb3duZWQgc2V0LCBhdCBhbnkgZGVwdGguICovXG4gIHB1YmxpYyBhYnN0cmFjdCBsaW5rZWRGb3JtczogRnNGb3JtRGlyZWN0aXZlW107XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBvd25lZCBzZXQncyBkaXJ0eSBzdGF0ZSBtYXkgaGF2ZSBtb3ZlZC4gKi9cbiAgcHVibGljIGFic3RyYWN0IGRpcnR5Q2hhbmdlJDogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAvKiogRW1pdHMgb25jZSBhIHN1Ym1pdCBvdmVyIHRoZSBvd25lZCBzZXQgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBzdWJtaXR0ZWQkOiBPYnNlcnZhYmxlPFN1Ym1pdHRlZEV2ZW50PjtcblxuICAvKiogVHJhY2tzIHRoZSBvd25lZCBzZXQncyBzdWJtaXQgbGlmZWN5Y2xlLCBzbyB0aGUgZHJhd2VyIGNhbiB3YWl0IG9uZSBvdXQuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBzdGF0dXMkOiBPYnNlcnZhYmxlPEZvcm1TdGF0dXM+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlhbG9nIHRoaXMgb3duZXIgbGl2ZXMgaW4sIG9yIG51bGwgb3V0c2lkZSBvbmUuIFVzZWQgdG8ga2VlcCBhIGZvcm0gc2V0XG4gICAqIGZyb20gc3Bhbm5pbmcgYSBkaWFsb2cgYm91bmRhcnkgLSBzZWUgYHdpdGhpblNhbWVEaWFsb2dgLlxuICAgKi9cbiAgcHVibGljIGdldCBkaWFsb2dSZWYoKTogTWF0RGlhbG9nUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9kaWFsb2dSZWY7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPd25lckxpZmVjeWNsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3Rlck93bmVyQ29udGVudExpZmVjeWNsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXN0cm95JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGVzdHJveSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fY2xlYW51cENhbkRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJ1dHRvbnMoKTogUXVlcnlMaXN0PEZzQnV0dG9uRGlyZWN0aXZlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZVN1Ym1pdEJ1dHRvbigpOiBGc0J1dHRvbkRpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVN1Ym1pdEJ1dHRvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYWN0aXZlU3VibWl0QnV0dG9uKGJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmUpIHtcbiAgICB0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b24gPSBidXR0b247XG4gIH1cblxuICAvKipcbiAgICogQnJpbmcgYSB0YWIgZ3JvdXAgaW50byB0aGlzIG93bmVyJ3MgdW5zYXZlZC1jaGFuZ2VzIGNvbmZpcm0uXG4gICAqXG4gICAqIGBfdGFiR3JvdXBzYCBvbmx5IHJlYWNoZXMgZ3JvdXBzIGluIHRoaXMgb3duZXIncyBwcm9qZWN0ZWQgY29udGVudCwgc28gYSBncm91cFxuICAgKiBkZWNsYXJlZCBpbnNpZGUgYSBjaGlsZCBjb21wb25lbnQncyBvd24gdGVtcGxhdGUgaGFzIHRvIGFubm91bmNlIGl0c2VsZi5cbiAgICogYGZzRm9ybUNvbmZpcm1UYWJzYCBjYWxscyB0aGlzIC0gY29uc3VtZXJzIG5ldmVyIGNhbGwgaXQgZGlyZWN0bHkuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJUYWJHcm91cCh0YWJHcm91cDogTWF0VGFiR3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cCk7XG4gIH1cblxuICBwdWJsaWMgYWRkQnV0dG9uKGJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICB0aGlzLl9idXR0b25zXG4gICAgICAucmVzZXQoXG4gICAgICAgIFtcbiAgICAgICAgICAuLi50aGlzLl9idXR0b25zLnRvQXJyYXkoKSxcbiAgICAgICAgICBidXR0b24sXG4gICAgICAgIF0pO1xuXG4gICAgLy8gUXVlcnlMaXN0LnJlc2V0KCkgZG9lcyBub3QgZW1pdCBgY2hhbmdlc2A7IG5vdGlmeSBzbyBzdWJzY3JpYmVycyAoZS5nLiB0aGVcbiAgICAvLyBmb3JtJ3MgZGlydHktc3VibWl0LWJ1dHRvbiB0cmFja2luZykgcmVhY3QgdG8gYnV0dG9ucyBiZWluZyByZWdpc3RlcmVkLlxuICAgIHRoaXMuX2J1dHRvbnMubm90aWZ5T25DaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQnV0dG9uKGJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZih0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b24gPT09IGJ1dHRvbikge1xuICAgICAgdGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9idXR0b25zLnJlc2V0KFxuICAgICAgW1xuICAgICAgICAuLi50aGlzLl9idXR0b25zLnRvQXJyYXkoKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IChidXR0b24gIT09IGl0ZW0pKSxcbiAgICAgIF0pO1xuXG4gICAgdGhpcy5fYnV0dG9ucy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVyeXRoaW5nIGhlcmUgYWN0cyBvbiB0aGUgZm9ybSBzZXQgYXMgYSB3aG9sZSwgc28gZXhhY3RseSBvbmUgdGhpbmcgbWF5XG4gICAqIHJlZ2lzdGVyIGl0LiBBIGZvcm0gbGlua2VkIGludG8gYSBwYXJlbnQgZGVmZXJzIHRvIHRoYXQgcGFyZW50OyBldmVyeSBmb3JtXG4gICAqIGluc2lkZSBhIGNvbnRhaW5lciBkZWZlcnMgdG8gdGhlIGNvbnRhaW5lci4gUmVnaXN0ZXJpbmcgdHdpY2Ugd291bGQgcHV0IHR3b1xuICAgKiBjb25maXJtcyBvbiB0aGUgc2FtZSBiYWNrZHJvcCBjbGljayBhbmQgdHdvIGhhbmRsZXJzIG9uIHRoZSBzYW1lIEN0cmwrUy5cbiAgICovXG4gIHByb3RlY3RlZCBfcmVnaXN0ZXJPd25lckxpZmVjeWNsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWFjdGl2YXRpb25HdWFyZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJDYW5EZWFjdGl2YXRlR3VhcmQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1EaWFsb2dCYWNrZHJvcEVzY2FwZSgpO1xuICAgIHRoaXMuX2xpc3RlbkhvdEtleXMoKTtcbiAgICB0aGlzLl9saXN0ZW5XaW5kb3dDbG9zZSgpO1xuICB9XG5cbiAgLyoqIFRoZSBoYWxmIG9mIHRoZSBzYW1lIG93bmVyc2hpcCB0aGF0IG5lZWRzIHByb2plY3RlZCBjb250ZW50IHJlc29sdmVkLiAqL1xuICBwcm90ZWN0ZWQgX3JlZ2lzdGVyT3duZXJDb250ZW50TGlmZWN5Y2xlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYnMoKTtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyRHJhd2VyQ2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGluc2lkZSB3aGF0IHRoaXMgb3duZXIgY292ZXJzLiBPdmVycmlkZGVuIGJ5IHRoZVxuICAgKiBjb250YWluZXIsIHdob3NlIG93biBlbGVtZW50IGlzIGEgcG9vciBwcm94eTogaXQgbWF5IGJlIGFuIGA8bmctY29udGFpbmVyPmAsXG4gICAqIHdoaWNoIGlzIGEgY29tbWVudCBub2RlIGFuZCBjb250YWlucyBub3RoaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9jb250YWluc0VsZW1lbnQoZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZUNvbnRhaW5zKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgZWwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ub2RlQ29udGFpbnMocm9vdDogTm9kZSwgZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIXJvb3QgfHwgIWVsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGVsID09PSByb290KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWwucGFyZW50RWxlbWVudCA/IHRoaXMuX25vZGVDb250YWlucyhyb290LCBlbC5wYXJlbnRFbGVtZW50KSA6IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9mb3JtQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1EaWFsb2cpIHtcbiAgICAgIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJlc3VsdCkgPT4gY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpLFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBDb25maXJtUmVzdWx0Lk5vQ2hhbmdlcyB8fCByZXN1bHQgPT09IENvbmZpcm1SZXN1bHQuRGlzY2FyZFxuICAgICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICAgIDogdGhpcy5zdWJtaXR0ZWQkO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBTdWJtaXR0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShyZXN1bHQ/LnJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5XaW5kb3dDbG9zZSgpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQod2luZG93LCAnYmVmb3JldW5sb2FkJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtQnJvd3NlciAmJiB0aGlzLmRpcnR5TGlua2VkKSB7XG4gICAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVEaWFsb2coZWw6IE5vZGUsIGRpYWxvZzogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZUNvbnRhaW5zKGRpYWxvZywgZWwgYXMgRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Ib3RLZXlzKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSAmJiBldmVudC5jb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgY29uc3QgY2RrT3ZlcmxheVBhbmUgPSBBcnJheVxuICAgICAgICAgICAgICAuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmNkay1vdmVybGF5LXBhbmUnKSkucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZURpYWxvZyA9IHRoaXNcbiAgICAgICAgICAgICAgLl9hY3RpdmVEaWFsb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fZGlhbG9nUmVmLmlkKSwgY2RrT3ZlcmxheVBhbmUpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aXZlRGlhbG9nKSB7XG4gICAgICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1DbG9zZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuY29kZSA9PT0gJ0tleVMnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG9ydGN1dHMpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5zRWxlbWVudChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtRGlhbG9nQmFja2Ryb3BFc2NhcGUoKTogdm9pZCB7XG4gICAgaWYodGhpcy5fZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSA9ICF0aGlzLl9kaWFsb2dSZWY/LmRpc2FibGVDbG9zZTtcblxuICAgICAgaWYgKHRoaXMuX2RpYWxvZ0JhY2tkcm9wRXNjYXBlKSB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5iYWNrZHJvcENsaWNrKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZm9ybUNsb3NlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kaXNhYmxlQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckRyYXdlckNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kcmF3ZXJSZWYpIHtcbiAgICAgIHRoaXMuX2RyYXdlclJlZi5jbG9zZVN0YXJ0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdWJtaXR0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyRcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0dXMpID0+IHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5TdWNjZXNzIHx8IHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5FcnJvciksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBGb3JtU3RhdHVzLlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybURyYXdlckNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kcmF3ZXJSZWYpIHtcbiAgICAgIHRoaXMuX2RyYXdlclJlZi5jbG9zZVN0YXJ0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpaWYoXG4gICAgICAgICAgICAgICgpID0+ICEhdGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybURyYXdlcixcbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyQ29uZmlybSgpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdCkgPT4gY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpLFxuICAgICAgICAgICAgICAgICAgdGFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtVGFicygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cHModGhpcy5fdGFiR3JvdXBzLnRvQXJyYXkoKSk7XG4gICAgdGhpcy5fdGFiR3JvdXBzLmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3Vwcyh0aGlzLl90YWJHcm91cHMudG9BcnJheSgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtVGFiR3JvdXBzKHRhYkdyb3VwczogTWF0VGFiR3JvdXBbXSk6IHZvaWQge1xuICAgIHRhYkdyb3Vwcy5mb3JFYWNoKCh0YWJHcm91cDogTWF0VGFiR3JvdXApID0+IHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3VwKHRhYkdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3VwKHRhYkdyb3VwOiBNYXRUYWJHcm91cCk6IHZvaWQge1xuICAgIC8vIGBfdGFiR3JvdXBzLmNoYW5nZXNgIHJlLWVtaXRzIHRoZSB3aG9sZSBsaXN0LCBub3QganVzdCB3aGF0IGFycml2ZWQsIGFuZCBpdFxuICAgIC8vIGVtaXRzIGV2ZXJ5IHRpbWUgYSBsYXp5IHRhYiBib2R5IG1vdW50cyBhIG5lc3RlZCBncm91cC4gR3JvdXBzIGFscmVhZHlcbiAgICAvLyB3aXJlZCB0aGVyZWZvcmUgY29tZSBiYWNrIGFyb3VuZCAtIHNvIHdpdGhvdXQgdGhpcyB0aGUgb3V0ZXIgZ3JvdXBcbiAgICAvLyBhY2N1bXVsYXRlcyBvbmUgc3Vic2NyaXB0aW9uIHBlciBlbWlzc2lvbiwgYW5kIGEgc2luZ2xlIGNsaWNrIG9uIGl0IG9wZW5zXG4gICAgLy8gdGhhdCBtYW55IHN0YWNrZWQgY29uZmlybSBkaWFsb2dzLlxuICAgIGlmICh0aGlzLl9jb25maXJtVGFiR3JvdXBzLmhhcyh0YWJHcm91cCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maXJtVGFiR3JvdXBzLmFkZCh0YWJHcm91cCk7XG5cbiAgICBjb25zdCBjb25maXJtVGFiR3JvdXAgPSB0YWJHcm91cCBhcyBDb25maXJtVGFiR3JvdXA7XG4gICAgaWYgKCFjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2spIHtcbiAgICAgIGNvbmZpcm1UYWJHcm91cC5fb3JpZ2luYWxIYW5kbGVDbGljayA9IHRhYkdyb3VwLl9oYW5kbGVDbGljaztcbiAgICAgIGNvbmZpcm1UYWJHcm91cC5faGFuZGxDbGljayQgPSBuZXcgU3ViamVjdDx7XG4gICAgICAgICB0YWI6IE1hdFRhYjtcbiAgICAgICAgIHRhYkhlYWRlcjogTWF0VGFiSGVhZGVyO1xuICAgICAgICAgaWR4OiBudW1iZXJcbiAgICAgICAgfT4oKTtcblxuICAgICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbGVDbGljayA9ICh0YWI6IE1hdFRhYiwgdGFiSGVhZGVyOiBNYXRUYWJIZWFkZXIsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skLm5leHQoeyB0YWIsIHRhYkhlYWRlciwgaWR4IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbmZpcm1UYWJHcm91cC5fb3JpZ2luYWxIYW5kbGVDbGljayh0YWIsIHRhYkhlYWRlciwgaWR4KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnN1Ym1pdHRpbmcpLFxuICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYodGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybVRhYnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJDb25maXJtKClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjb25maXJtUmVzdWx0Q29udGludWUocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maXJtVGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9IGV2ZW50LmlkeDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2soZXZlbnQudGFiLCBldmVudC50YWJIZWFkZXIsIGV2ZW50LmlkeCk7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cblxuICBwcml2YXRlIF9yZWdpc3RlckNhbkRlYWN0aXZhdGVHdWFyZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZyA9IGdldEFjdGl2ZVJvdXRlKHRoaXMuX3JvdXRlKT8ucm91dGVDb25maWc7XG5cbiAgICBpZiAoIXRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybS5yZWdpc3RlckZvcm1EaXJlY3RpdmUodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY29tcG9uZW50LCB0aGlzKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlKSkge1xuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLmluZGV4T2YoRm9ybURlYWN0aXZhdGVHdWFyZCkgPT09IC0xKSB7XG4gICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLnB1c2goRm9ybURlYWN0aXZhdGVHdWFyZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cENhbkRlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGd1YXJkSW5kZXggPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLmluZGV4T2YoRm9ybURlYWN0aXZhdGVHdWFyZCk7XG4gICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5zcGxpY2UoZ3VhcmRJbmRleCwgMSk7XG5cbiAgICB0aGlzLl9mb3JtLnJlbW92ZUZvcm1EaXJlY3RpdmUodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY29tcG9uZW50KTtcbiAgfVxuXG5cbiAgcHVibGljIGFic3RyYWN0IHRyaWdnZXJTdWJtaXQoKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IHRyaWdnZXJDb25maXJtKCk6IE9ic2VydmFibGU8Q29uZmlybVJlc3VsdD47XG4gIHB1YmxpYyBhYnN0cmFjdCByZXNldCgpOiB2b2lkO1xuICBwdWJsaWMgYWJzdHJhY3Qgc3VibWl0JChldmVudD86IFN1Ym1pdEV2ZW50KTogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD47XG59XG4iXX0=
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1iYXNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb3JtLWJhc2UvZm9ybS1iYXNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBVSxXQUFXLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBS3ZEOzs7Ozs7Ozs7O0dBVUc7QUFFSCxN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akYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO3VHQXRibUIsbUJBQW1COzJGQUFuQixtQkFBbUIsbVJBaUN0QixXQUFXOzsyRkFqQ1IsbUJBQW1CO2tCQUR4QyxTQUFTOzhCQUlELFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBY0UsVUFBVTtzQkFEakIsZUFBZTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAsIE1hdFRhYkhlYWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuXG5pbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpaWYsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29uZmlybVJlc3VsdCB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcy9mb3JtLXN0YXR1cyc7XG5pbXBvcnQgeyBGb3JtRGVhY3RpdmF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vZ3VhcmRzL2Zvcm0tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBjb25maXJtUmVzdWx0Q29udGludWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldEFjdGl2ZVJvdXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtYWN0aXZlLXJvdXRlJztcbmltcG9ydCB7IENvbmZpcm1Db25maWcsIENvbmZpcm1UYWJHcm91cCwgU3VibWl0RXZlbnQsIFN1Ym1pdHRlZEV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGc0Zvcm0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mc2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHR5cGUgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcblxuXG4vKipcbiAqIFNoYXJlZCBieSB0aGUgdHdvIHRoaW5ncyB0aGF0IGNhbiBvd24gYSBzZXQgb2YgZm9ybXM6IGFuIGBmc0Zvcm1gIHNpdHRpbmcgYXRcbiAqIHRoZSByb290IG9mIGl0cyBsaW5rZWQgc2V0LCBhbmQgYW4gYGZzRm9ybUNvbnRhaW5lcmAgaG9sZGluZyBmb3JtcyB0aGF0IGFyZVxuICogc2libGluZ3MgcmF0aGVyIHRoYW4gbmVzdGVkLlxuICpcbiAqIEl0IGhvbGRzIHRoZSBzdWJtaXQtYnV0dG9uIHJlZ2lzdHJ5IGJvdGggb2YgdGhlbSBleHBvc2UgdG8gYnV0dG9ucywgYW5kIHRoZVxuICogbGlmZWN5Y2xlIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gdG8gYW55IG9uZSBmb3JtIC1cbiAqIHRoZSBkaWFsb2cgYmFja2Ryb3AgYW5kIEVzY2FwZSwgQ3RybCtTLCB0aGUgYnJvd3NlciBjbG9zZSBwcm9tcHQsIHRoZSBkcmF3ZXJcbiAqIGFuZCB0YWItc3dpdGNoIGNvbmZpcm1zLiBFeGFjdGx5IG9uZSBvd25lciByZWdpc3RlcnMgdGhhdCBsaWZlY3ljbGU7IHNlZVxuICogYF9yZWdpc3Rlck93bmVyTGlmZWN5Y2xlYC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnNGb3JtQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybVRhYnMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtOiBDb25maXJtQ29uZmlnIHwgYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1EaWFsb2cgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtRHJhd2VyID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybUJyb3dzZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG9ydGN1dHMgPSB0cnVlOyAvLyBDdHJsICsgc1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWFjdGl2YXRpb25HdWFyZCA9IHRydWU7XG5cbiAgcHJvdGVjdGVkIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJvdGVjdGVkIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCBfZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIF9mb3JtID0gaW5qZWN0KEZzRm9ybSk7XG4gIHByb3RlY3RlZCBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RyYXdlclJlZiA9IGluamVjdDxEcmF3ZXJSZWY8YW55Pj4oRHJhd2VyUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ0JhY2tkcm9wRXNjYXBlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGVDb25maWc6IFJvdXRlIHwgbnVsbDtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdFRhYkdyb3VwLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgX3RhYkdyb3VwczogUXVlcnlMaXN0PE1hdFRhYkdyb3VwPiA9IG5ldyBRdWVyeUxpc3QoKTtcblxuICBwcml2YXRlIF9idXR0b25zID0gbmV3IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4oKTtcbiAgcHJpdmF0ZSBfYWN0aXZlU3VibWl0QnV0dG9uOiBGc0J1dHRvbkRpcmVjdGl2ZTtcbiAgcHJpdmF0ZSBfY29uZmlybVRhYkdyb3VwcyA9IG5ldyBXZWFrU2V0PE1hdFRhYkdyb3VwPigpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdHRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRydWUgd2hlbiBhbnl0aGluZyBpbiB0aGUgb3duZWQgc2V0IGhhcyBhIHN1Ym1pdCBoYW5kbGVyIC0gaS5lLiB0aGVyZSBpc1xuICAgKiBzb21ldGhpbmcgZm9yIGEgU2F2ZSBidXR0b24gdG8gZG8uIEJvdGggYSBmb3JtIGFuZCBhIGNvbnRhaW5lciBhbnN3ZXIgdGhpc1xuICAgKiBvdmVyIHRoZWlyIGxpbmtlZCBzZXQsIHNvIHdoaWNoZXZlciBvbmUgb3ducyBhIGZvb3RlciBjYW4gYmUgYXNrZWQgdGhlIHNhbWVcbiAgICogcXVlc3Rpb24gd2l0aG91dCBrbm93aW5nIHdoaWNoIGl0IGdvdC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBzdWJtaXRzOiBib29sZWFuO1xuXG4gIC8qKiBUcnVlIHdoZW4gYW55dGhpbmcgaW4gdGhlIG93bmVkIHNldCBoYXMgdW5zYXZlZCBjaGFuZ2VzLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZGlydHlMaW5rZWQ6IGJvb2xlYW47XG5cbiAgLyoqIEV2ZXJ5IGZvcm0gaW4gdGhlIG93bmVkIHNldCwgYXQgYW55IGRlcHRoLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgbGlua2VkRm9ybXM6IEZzRm9ybURpcmVjdGl2ZVtdO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgb3duZWQgc2V0J3MgZGlydHkgc3RhdGUgbWF5IGhhdmUgbW92ZWQuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBkaXJ0eUNoYW5nZSQ6IE9ic2VydmFibGU8dm9pZD47XG5cbiAgLyoqIEVtaXRzIG9uY2UgYSBzdWJtaXQgb3ZlciB0aGUgb3duZWQgc2V0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgc3VibWl0dGVkJDogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD47XG5cbiAgLyoqIFRyYWNrcyB0aGUgb3duZWQgc2V0J3Mgc3VibWl0IGxpZmVjeWNsZSwgc28gdGhlIGRyYXdlciBjYW4gd2FpdCBvbmUgb3V0LiAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgc3RhdHVzJDogT2JzZXJ2YWJsZTxGb3JtU3RhdHVzPjtcblxuICAvKipcbiAgICogVGhlIGRpYWxvZyB0aGlzIG93bmVyIGxpdmVzIGluLCBvciBudWxsIG91dHNpZGUgb25lLiBVc2VkIHRvIGtlZXAgYSBmb3JtIHNldFxuICAgKiBmcm9tIHNwYW5uaW5nIGEgZGlhbG9nIGJvdW5kYXJ5IC0gc2VlIGB3aXRoaW5TYW1lRGlhbG9nYC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGlhbG9nUmVmKCk6IE1hdERpYWxvZ1JlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZGlhbG9nUmVmO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdGVyT3duZXJMaWZlY3ljbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPd25lckNvbnRlbnRMaWZlY3ljbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzdHJveSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3kkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NsZWFudXBDYW5EZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBidXR0b25zKCk6IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4ge1xuICAgIHJldHVybiB0aGlzLl9idXR0b25zO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVTdWJtaXRCdXR0b24oKTogRnNCdXR0b25EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b247XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZVN1Ym1pdEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKSB7XG4gICAgdGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID0gYnV0dG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJyaW5nIGEgdGFiIGdyb3VwIGludG8gdGhpcyBvd25lcidzIHVuc2F2ZWQtY2hhbmdlcyBjb25maXJtLlxuICAgKlxuICAgKiBgX3RhYkdyb3Vwc2Agb25seSByZWFjaGVzIGdyb3VwcyBpbiB0aGlzIG93bmVyJ3MgcHJvamVjdGVkIGNvbnRlbnQsIHNvIGEgZ3JvdXBcbiAgICogZGVjbGFyZWQgaW5zaWRlIGEgY2hpbGQgY29tcG9uZW50J3Mgb3duIHRlbXBsYXRlIGhhcyB0byBhbm5vdW5jZSBpdHNlbGYuXG4gICAqIGBmc0Zvcm1Db25maXJtVGFic2AgY2FsbHMgdGhpcyAtIGNvbnN1bWVycyBuZXZlciBjYWxsIGl0IGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyVGFiR3JvdXAodGFiR3JvdXA6IE1hdFRhYkdyb3VwKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtVGFiR3JvdXAodGFiR3JvdXApO1xuICB9XG5cbiAgcHVibGljIGFkZEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgdGhpcy5fYnV0dG9uc1xuICAgICAgLnJlc2V0KFxuICAgICAgICBbXG4gICAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KCksXG4gICAgICAgICAgYnV0dG9uLFxuICAgICAgICBdKTtcblxuICAgIC8vIFF1ZXJ5TGlzdC5yZXNldCgpIGRvZXMgbm90IGVtaXQgYGNoYW5nZXNgOyBub3RpZnkgc28gc3Vic2NyaWJlcnMgKGUuZy4gdGhlXG4gICAgLy8gZm9ybSdzIGRpcnR5LXN1Ym1pdC1idXR0b24gdHJhY2tpbmcpIHJlYWN0IHRvIGJ1dHRvbnMgYmVpbmcgcmVnaXN0ZXJlZC5cbiAgICB0aGlzLl9idXR0b25zLm5vdGlmeU9uQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYodGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID09PSBidXR0b24pIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVN1Ym1pdEJ1dHRvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fYnV0dG9ucy5yZXNldChcbiAgICAgIFtcbiAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAoYnV0dG9uICE9PSBpdGVtKSksXG4gICAgICBdKTtcblxuICAgIHRoaXMuX2J1dHRvbnMubm90aWZ5T25DaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRXZlcnl0aGluZyBoZXJlIGFjdHMgb24gdGhlIGZvcm0gc2V0IGFzIGEgd2hvbGUsIHNvIGV4YWN0bHkgb25lIHRoaW5nIG1heVxuICAgKiByZWdpc3RlciBpdC4gQSBmb3JtIGxpbmtlZCBpbnRvIGEgcGFyZW50IGRlZmVycyB0byB0aGF0IHBhcmVudDsgZXZlcnkgZm9ybVxuICAgKiBpbnNpZGUgYSBjb250YWluZXIgZGVmZXJzIHRvIHRoZSBjb250YWluZXIuIFJlZ2lzdGVyaW5nIHR3aWNlIHdvdWxkIHB1dCB0d29cbiAgICogY29uZmlybXMgb24gdGhlIHNhbWUgYmFja2Ryb3AgY2xpY2sgYW5kIHR3byBoYW5kbGVycyBvbiB0aGUgc2FtZSBDdHJsK1MuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3JlZ2lzdGVyT3duZXJMaWZlY3ljbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVhY3RpdmF0aW9uR3VhcmQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyQ2FuRGVhY3RpdmF0ZUd1YXJkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtRGlhbG9nQmFja2Ryb3BFc2NhcGUoKTtcbiAgICB0aGlzLl9saXN0ZW5Ib3RLZXlzKCk7XG4gICAgdGhpcy5fbGlzdGVuV2luZG93Q2xvc2UoKTtcbiAgfVxuXG4gIC8qKiBUaGUgaGFsZiBvZiB0aGUgc2FtZSBvd25lcnNoaXAgdGhhdCBuZWVkcyBwcm9qZWN0ZWQgY29udGVudCByZXNvbHZlZC4gKi9cbiAgcHJvdGVjdGVkIF9yZWdpc3Rlck93bmVyQ29udGVudExpZmVjeWNsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJzKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtRHJhd2VyQ2xvc2UoKTtcbiAgICB0aGlzLl9yZWdpc3RlckRyYXdlckNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyBpbnNpZGUgd2hhdCB0aGlzIG93bmVyIGNvdmVycy4gT3ZlcnJpZGRlbiBieSB0aGVcbiAgICogY29udGFpbmVyLCB3aG9zZSBvd24gZWxlbWVudCBpcyBhIHBvb3IgcHJveHk6IGl0IG1heSBiZSBhbiBgPG5nLWNvbnRhaW5lcj5gLFxuICAgKiB3aGljaCBpcyBhIGNvbW1lbnQgbm9kZSBhbmQgY29udGFpbnMgbm90aGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBfY29udGFpbnNFbGVtZW50KGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWlucyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGVsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbm9kZUNvbnRhaW5zKHJvb3Q6IE5vZGUsIGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb290IHx8ICFlbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlbCA9PT0gcm9vdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsLnBhcmVudEVsZW1lbnQgPyB0aGlzLl9ub2RlQ29udGFpbnMocm9vdCwgZWwucGFyZW50RWxlbWVudCkgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZm9ybUNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtRGlhbG9nKSB7XG4gICAgICB0aGlzLnRyaWdnZXJDb25maXJtKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChyZXN1bHQpID0+IGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gQ29uZmlybVJlc3VsdC5Ob0NoYW5nZXMgfHwgcmVzdWx0ID09PSBDb25maXJtUmVzdWx0LkRpc2NhcmRcbiAgICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgICA6IHRoaXMuc3VibWl0dGVkJDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogU3VibWl0dGVkRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UocmVzdWx0Py5yZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93Q2xvc2UoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybUJyb3dzZXIgJiYgdGhpcy5kaXJ0eUxpbmtlZCkge1xuICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nKGVsOiBOb2RlLCBkaWFsb2c6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWlucyhkaWFsb2csIGVsIGFzIEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSG90S2V5cygpOiB2b2lkIHtcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUgJiYgZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGNka092ZXJsYXlQYW5lID0gQXJyYXlcbiAgICAgICAgICAgICAgLmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5jZGstb3ZlcmxheS1wYW5lJykpLnBvcCgpO1xuXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVEaWFsb2cgPSB0aGlzXG4gICAgICAgICAgICAgIC5fYWN0aXZlRGlhbG9nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2RpYWxvZ1JlZi5pZCksIGNka092ZXJsYXlQYW5lKTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtQ2xvc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmNvZGUgPT09ICdLZXlTJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvcnRjdXRzKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWluc0VsZW1lbnQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybURpYWxvZ0JhY2tkcm9wRXNjYXBlKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuX2RpYWxvZ1JlZikge1xuICAgICAgdGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUgPSAhdGhpcy5fZGlhbG9nUmVmPy5kaXNhYmxlQ2xvc2U7XG5cbiAgICAgIGlmICh0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSkge1xuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuYmFja2Ryb3BDbGljaygpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1DbG9zZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJEcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3VibWl0dGluZykge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMkXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdHVzKSA9PiBzdGF0dXMgPT09IEZvcm1TdGF0dXMuU3VjY2VzcyB8fCBzdGF0dXMgPT09IEZvcm1TdGF0dXMuRXJyb3IpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaWlmKFxuICAgICAgICAgICAgICAoKSA9PiAhIXRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1EcmF3ZXIsXG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgbWFwKChyZXN1bHQpID0+IGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSxcbiAgICAgICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYnMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtVGFiR3JvdXBzKHRoaXMuX3RhYkdyb3Vwcy50b0FycmF5KCkpO1xuICAgIHRoaXMuX3RhYkdyb3Vwcy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cHModGhpcy5fdGFiR3JvdXBzLnRvQXJyYXkoKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3Vwcyh0YWJHcm91cHM6IE1hdFRhYkdyb3VwW10pOiB2b2lkIHtcbiAgICB0YWJHcm91cHMuZm9yRWFjaCgodGFiR3JvdXA6IE1hdFRhYkdyb3VwKSA9PiB7XG4gICAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cDogTWF0VGFiR3JvdXApOiB2b2lkIHtcbiAgICAvLyBgX3RhYkdyb3Vwcy5jaGFuZ2VzYCByZS1lbWl0cyB0aGUgd2hvbGUgbGlzdCwgbm90IGp1c3Qgd2hhdCBhcnJpdmVkLCBhbmQgaXRcbiAgICAvLyBlbWl0cyBldmVyeSB0aW1lIGEgbGF6eSB0YWIgYm9keSBtb3VudHMgYSBuZXN0ZWQgZ3JvdXAuIEdyb3VwcyBhbHJlYWR5XG4gICAgLy8gd2lyZWQgdGhlcmVmb3JlIGNvbWUgYmFjayBhcm91bmQgLSBzbyB3aXRob3V0IHRoaXMgdGhlIG91dGVyIGdyb3VwXG4gICAgLy8gYWNjdW11bGF0ZXMgb25lIHN1YnNjcmlwdGlvbiBwZXIgZW1pc3Npb24sIGFuZCBhIHNpbmdsZSBjbGljayBvbiBpdCBvcGVuc1xuICAgIC8vIHRoYXQgbWFueSBzdGFja2VkIGNvbmZpcm0gZGlhbG9ncy5cbiAgICBpZiAodGhpcy5fY29uZmlybVRhYkdyb3Vwcy5oYXModGFiR3JvdXApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlybVRhYkdyb3Vwcy5hZGQodGFiR3JvdXApO1xuXG4gICAgY29uc3QgY29uZmlybVRhYkdyb3VwID0gdGFiR3JvdXAgYXMgQ29uZmlybVRhYkdyb3VwO1xuICAgIGlmICghY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrKSB7XG4gICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2sgPSB0YWJHcm91cC5faGFuZGxlQ2xpY2s7XG4gICAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skID0gbmV3IFN1YmplY3Q8e1xuICAgICAgICAgdGFiOiBNYXRUYWI7XG4gICAgICAgICB0YWJIZWFkZXI6IE1hdFRhYkhlYWRlcjtcbiAgICAgICAgIGlkeDogbnVtYmVyXG4gICAgICAgIH0+KCk7XG5cbiAgICAgIGNvbmZpcm1UYWJHcm91cC5faGFuZGxlQ2xpY2sgPSAodGFiOiBNYXRUYWIsIHRhYkhlYWRlcjogTWF0VGFiSGVhZGVyLCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJC5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJC5uZXh0KHsgdGFiLCB0YWJIZWFkZXIsIGlkeCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2sodGFiLCB0YWJIZWFkZXIsIGlkeCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5zdWJtaXR0aW5nKSxcbiAgICAgICAgc3dpdGNoTWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmKHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1UYWJzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQ29uZmlybSgpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSBldmVudC5pZHg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrKGV2ZW50LnRhYiwgZXZlbnQudGFiSGVhZGVyLCBldmVudC5pZHgpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDYW5EZWFjdGl2YXRlR3VhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcgPSBnZXRBY3RpdmVSb3V0ZSh0aGlzLl9yb3V0ZSk/LnJvdXRlQ29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Zvcm0ucmVnaXN0ZXJGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCwgdGhpcyk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSkpIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpID09PSAtMSkge1xuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5wdXNoKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFudXBDYW5EZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBndWFyZEluZGV4ID0gdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUuc3BsaWNlKGd1YXJkSW5kZXgsIDEpO1xuXG4gICAgdGhpcy5fZm9ybS5yZW1vdmVGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCk7XG4gIH1cblxuXG4gIHB1YmxpYyBhYnN0cmFjdCB0cmlnZ2VyU3VibWl0KCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCB0cmlnZ2VyQ29uZmlybSgpOiBPYnNlcnZhYmxlPENvbmZpcm1SZXN1bHQ+O1xuICBwdWJsaWMgYWJzdHJhY3QgcmVzZXQoKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdCQoZXZlbnQ/OiBTdWJtaXRFdmVudCk6IE9ic2VydmFibGU8U3VibWl0dGVkRXZlbnQ+O1xufVxuIl19
|
|
@@ -6,6 +6,7 @@ import { keys, values } from 'lodash-es';
|
|
|
6
6
|
import { VALIDATE_MESSAGES, VALIDATE_MESSAGE_PROVIDER, } from '../../providers/validate-messages.provider';
|
|
7
7
|
import { FsFormDirective } from '../form/form.directive';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
|
+
const resolvedPromise = Promise.resolve();
|
|
9
10
|
export class FsControlDirective {
|
|
10
11
|
wrapperSelector;
|
|
11
12
|
messageSelector;
|
|
@@ -21,7 +22,6 @@ export class FsControlDirective {
|
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
24
|
errors = [];
|
|
24
|
-
_control;
|
|
25
25
|
_elementRef = inject(ElementRef);
|
|
26
26
|
_renderer2 = inject(Renderer2);
|
|
27
27
|
_injector = inject(Injector);
|
|
@@ -29,19 +29,31 @@ export class FsControlDirective {
|
|
|
29
29
|
_ngControl = inject(NgControl, { optional: true });
|
|
30
30
|
_formDirective = inject(FsFormDirective, { optional: true });
|
|
31
31
|
_destroy$ = new Subject();
|
|
32
|
+
_statusChanges$ = new Subject();
|
|
33
|
+
_boundControl;
|
|
32
34
|
constructor() {
|
|
33
|
-
|
|
34
|
-
if (_ngControl) {
|
|
35
|
-
this._control = _ngControl.control;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
35
|
+
if (!this._ngControl) {
|
|
38
36
|
console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);
|
|
39
37
|
}
|
|
40
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Always read the control through the directive rather than caching it.
|
|
41
|
+
*
|
|
42
|
+
* NgForm.addControl() runs in a microtask and reassigns dir.control to
|
|
43
|
+
* whatever FormGroup.registerControl() returns — and registerControl() hands
|
|
44
|
+
* back the EXISTING control when the name is already taken (two fields
|
|
45
|
+
* sharing a name, or lazily created content re-registering). A control
|
|
46
|
+
* captured in the constructor is then an orphan: it never emits again, so
|
|
47
|
+
* statusChanges never fires and the validation message is never rendered.
|
|
48
|
+
*/
|
|
49
|
+
get _control() {
|
|
50
|
+
return this._ngControl?.control;
|
|
51
|
+
}
|
|
41
52
|
ngOnInit() {
|
|
42
53
|
this._setupValidators();
|
|
43
54
|
}
|
|
44
55
|
ngOnDestroy() {
|
|
56
|
+
this._statusChanges$.complete();
|
|
45
57
|
this._destroy$.next(null);
|
|
46
58
|
this._destroy$.complete();
|
|
47
59
|
}
|
|
@@ -183,11 +195,30 @@ export class FsControlDirective {
|
|
|
183
195
|
}
|
|
184
196
|
}
|
|
185
197
|
_subscribeToStatusChagnes() {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
198
|
+
// Registration is deferred to a microtask by NgForm.addControl(), so wait
|
|
199
|
+
// for it to settle before binding — otherwise we subscribe to the control
|
|
200
|
+
// that is about to be replaced.
|
|
201
|
+
resolvedPromise
|
|
202
|
+
.then(() => this._bindStatusChanges());
|
|
203
|
+
}
|
|
204
|
+
_bindStatusChanges() {
|
|
205
|
+
const control = this._control;
|
|
206
|
+
if (!control || control === this._boundControl) {
|
|
207
|
+
return;
|
|
190
208
|
}
|
|
209
|
+
this._boundControl = control;
|
|
210
|
+
this._statusChanges$.next();
|
|
211
|
+
control.statusChanges
|
|
212
|
+
.pipe(takeUntil(this._statusChanges$), takeUntil(this._destroy$))
|
|
213
|
+
.subscribe(() => {
|
|
214
|
+
// The control can still be swapped out from under us (a sibling with
|
|
215
|
+
// the same name registering later), so re-bind before rendering.
|
|
216
|
+
if (this._control !== this._boundControl) {
|
|
217
|
+
this._bindStatusChanges();
|
|
218
|
+
}
|
|
219
|
+
this.render();
|
|
220
|
+
});
|
|
221
|
+
this.render();
|
|
191
222
|
}
|
|
192
223
|
_getWrapper(node, count = 0) {
|
|
193
224
|
if (!node || count > 10) {
|
|
@@ -263,4 +294,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
263
294
|
}], validateMessages: [{
|
|
264
295
|
type: Input
|
|
265
296
|
}] } });
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQW1CLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHlCQUF5QixHQUMxQixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFnQnpELE1BQU0sT0FBTyxrQkFBa0I7SUFFYixlQUFlLENBQWlCO0lBQ2hDLGVBQWUsQ0FBaUI7SUFDaEMsWUFBWSxDQUFpQjtJQUM3QixhQUFhLENBQWlCO0lBQzlCLGtCQUFrQixDQUFTO0lBQzNCLGdCQUFnQixDQUFTO0lBQ3pCLGVBQWUsQ0FBUztJQUV4QyxJQUNXLGdCQUFnQixDQUFDLFFBQWdDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixHQUFHLElBQUksQ0FBQyxpQkFBaUI7WUFDekIsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRVQsUUFBUSxDQUFrQjtJQUMxQixXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLFVBQVUsR0FBRyxN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Z0I7c0JBRDFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBrZXlzLCB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQge1xuICBWQUxJREFURV9NRVNTQUdFUyxcbiAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUixcbn0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3ZhbGlkYXRlLW1lc3NhZ2VzLnByb3ZpZGVyJztcbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0vZm9ybS5kaXJlY3RpdmUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgRnNDb250cm9sRGlyZWN0aXZlIHtcbiAgdmFsaWRhdGU/KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xuICB2YWxpZGF0ZUFzeW5jPyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiB8IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+O1xufVxuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1Db250cm9sXScsXG4gIHByb3ZpZGVyczogW1xuICAgIFZBTElEQVRFX01FU1NBR0VfUFJPVklERVIsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZzQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBwdWJsaWMgd3JhcHBlclNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIG1lc3NhZ2VTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBoaW50U2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWxTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBhcHBlbmRNZXNzYWdlQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZEVycm9yQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZEhpbnRDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGVNZXNzYWdlcyhtZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMgPSB7XG4gICAgICAuLi50aGlzLl92YWxpZGF0ZU1lc3NhZ2VzLFxuICAgICAgLi4ubWVzc2FnZXMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlcnJvcnMgPSBbXTtcblxuICBwcm90ZWN0ZWQgX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcbiAgcHJvdGVjdGVkIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcm90ZWN0ZWQgX3JlbmRlcmVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcm90ZWN0ZWQgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJvdGVjdGVkIF92YWxpZGF0ZU1lc3NhZ2VzID0gaW5qZWN0KFZBTElEQVRFX01FU1NBR0VTLCB7IHNlbGY6IHRydWUgfSk7XG4gIHByb3RlY3RlZCBfbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJvdGVjdGVkIF9mb3JtRGlyZWN0aXZlID0gaW5qZWN0PEZzRm9ybURpcmVjdGl2ZT4oRnNGb3JtRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBfbmdDb250cm9sID0gdGhpcy5fbmdDb250cm9sO1xuXG5cbiAgICBpZiAoX25nQ29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbCA9IF9uZ0NvbnRyb2wuY29udHJvbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIG5nTW9kZWwnLCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9zZXR1cFZhbGlkYXRvcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmliZVRvU3RhdHVzQ2hhZ25lcygpO1xuICB9XG5cbiAgcHVibGljIGdldE1lc3NhZ2VTZWxlY3RvcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXNzYWdlU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZWxlY3RvcjtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5fZm9ybURpcmVjdGl2ZT8ubWVzc2FnZVNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybURpcmVjdGl2ZS5tZXNzYWdlU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEhpbnRXcmFwcGVyKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGludFdyYXBwZXJTZWxlY3RvcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5oaW50U2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaW50U2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/LmhpbnRTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXJlY3RpdmUuaGludFNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRXcmFwcGVyU2VsZWN0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53cmFwcGVyU2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlclNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy53cmFwcGVyU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/LndyYXBwZXJTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXJlY3RpdmUud3JhcHBlclNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRsYWJlbFNlbGVjdG9yKCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy5sYWJlbFNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxhYmVsU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhYmVsU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/LmxhYmVsU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtRGlyZWN0aXZlLmxhYmVsU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFdyYXBwZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLl9nZXRXcmFwcGVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICBpZiAod3JhcHBlcikge1xuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIC8qXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZvcm0tZmllbGRcIj4gIDwtLSBGaWVsZCBXcmFwcGVyIENsYXNzLiBMb29rIGZvciBwYXJlbnRzIGZyb20gdGhlIG5hdGl2ZSBlbGVtZW50IHdpdGggdGhlIG1hdGNoaW5nIHdyYXBwZXJTZWxlY3Rvci4gSWYgbm90IGZvdW5kIGRlZmF1bHRzIHRvIG5hdGl2ZSBlbGVtZW50LlxuICAgICAgPGlucHV0PlxuICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPiA8LS0gTWVzc2FnZSBTZWxlY3Rvci4gTG9vayBmb3IgdGhlIGVsZW1lbnQgd2l0aCBjbGFzcyAuZnMtZm9ybS1tZXNzYWdlIG9yIG1lc3NhZ2VTZWxlY3RvclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLWhpbnRcIj48L2Rpdj4gPC0tIEhpbnQgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0taGludCBvciBoaW50U2VsZWN0b3JcbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICovXG5cbiAgcHJpdmF0ZSBnZXQgX3Nob3VsZEVycm9yQmVSZW5kZXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sLmludmFsaWRcbiAgICAgICYmICh0aGlzLl9uZ0NvbnRyb2wuZGlydHkgfHwgdGhpcy5fZm9ybURpcmVjdGl2ZT8ubmdGb3JtPy5zdWJtaXR0ZWQpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyMjtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5kaXJ0eSA/IHRoaXMuX2dldEVycm9yKHRoaXMuX25nQ29udHJvbCkgOiBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fc2hvdWxkRXJyb3JCZVJlbmRlcmVkICYmIGVycm9yKSB7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnbmctaW52YWxpZCcsICduZy1kaXJ0eScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCduZy1pbnZhbGlkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5nZXRNZXNzYWdlU2VsZWN0b3IoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCkpO1xuICAgXG4gICAgICBpZiAoIW1lc3NhZ2VXcmFwcGVyKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlXG4gICAgICAgICAgLndhcm4oYEZhaWxlZCB0byBsb2NhdGUgJHsgIHRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCl9YCwgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MobWVzc2FnZVdyYXBwZXIsICdmcy1mb3JtLW1lc3NhZ2UnKTtcblxuICAgICAgaWYgKHRoaXMuYXBwZW5kTWVzc2FnZUNsYXNzKSB7XG4gICAgICAgIHJlbmRlcmVyLmFkZENsYXNzKG1lc3NhZ2VXcmFwcGVyLCB0aGlzLmFwcGVuZE1lc3NhZ2VDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlbmRlckhpbnQoZXJyb3IsIG1lc3NhZ2VXcmFwcGVyKTtcbiAgICAgIHRoaXMuX3JlbmRlckVycm9yKHdyYXBwZXIsIG1lc3NhZ2VXcmFwcGVyLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9yZW5kZXJIaW50KGVycm9yLCBtZXNzYWdlV3JhcHBlcikge1xuICAgIGNvbnN0IGhpbnRzID0gW1xuICAgICAgLi4ubWVzc2FnZVdyYXBwZXIucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1tZGMtZm9ybS1maWVsZC1oaW50JyksXG4gICAgXTtcblxuICAgIGNvbnN0IGhpbnRXcmFwcGVyOiBIVE1MRWxlbWVudCA9IHRoaXMuZ2V0SGludFdyYXBwZXIoKTtcbiAgICBpZiAoaGludFdyYXBwZXIpIHtcbiAgICAgIGhpbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ZzLWZvcm0taGludC13cmFwcGVyJyk7XG4gICAgfVxuXG4gICAgaGludHMuZm9yRWFjaCgoaGludCkgPT4ge1xuICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKGhpbnQsICdkaXNwbGF5JywgZXJyb3IgPyAnbm9uZScgOiAnYmxvY2snKTtcblxuICAgICAgaWYgKHRoaXMuYXBwZW5kSGludENsYXNzKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhoaW50LCAnZnMtZm9ybS1oaW50Jyk7XG4gICAgICAgIGlmKHRoaXMuYXBwZW5kSGludENsYXNzKSB7XG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGhpbnQsIHRoaXMuYXBwZW5kSGludENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yZW5kZXJFcnJvcih3cmFwcGVyLCBtZXNzYWdlV3JhcHBlciwgZXJyb3IpIHtcbiAgICBsZXQgZXJyb3JXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZnMtZm9ybS1lcnJvcicpO1xuICAgIGlmIChlcnJvcldyYXBwZXIpIHtcbiAgICAgIGVycm9yV3JhcHBlci5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3Nob3VsZEVycm9yQmVSZW5kZXJlZCB8fCAhZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlcnJvcldyYXBwZXIgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgJ2ZzLWZvcm0tZXJyb3InKTtcbiAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCBgZnMtZm9ybS1lcnJvci0ke2Vycm9yLm5hbWV9YCk7XG5cbiAgICBpZih0aGlzLmFwcGVuZEVycm9yQ2xhc3MpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhlcnJvcldyYXBwZXIsIHRoaXMuYXBwZW5kRXJyb3JDbGFzcyk7XG4gICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCBgJHt0aGlzLmFwcGVuZEVycm9yQ2xhc3N9LSR7ZXJyb3IubmFtZX1gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZXJyb3JUZXh0ID0gdGhpcy5fcmVuZGVyZXIyLmNyZWF0ZVRleHQoZXJyb3IubWVzc2FnZSk7XG5cbiAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQoZXJyb3JXcmFwcGVyLCBlcnJvclRleHQpO1xuXG4gICAgY29uc3QgaGludFdyYXBwZXI6IEhUTUxFbGVtZW50ID0gbWVzc2FnZVdyYXBwZXIucXVlcnlTZWxlY3Rvcih0aGlzLmdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKSk7XG4gICAgaWYgKGhpbnRXcmFwcGVyKSB7XG4gICAgICBoaW50V3JhcHBlci5wcmVwZW5kKGVycm9yV3JhcHBlcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmVUb1N0YXR1c0NoYWduZXMoKTp2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLnJlbmRlci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2dldFdyYXBwZXIobm9kZSwgY291bnQgPSAwKSB7XG4gICAgaWYgKCFub2RlIHx8IGNvdW50ID4gMTApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRXcmFwcGVyU2VsZWN0b3IoKSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRXcmFwcGVyKG5vZGUucGFyZW50Tm9kZSwgKytjb3VudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3BhcnNlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGFyZ3MpOiBzdHJpbmcge1xuICAgIHZhbHVlcyhhcmdzKVxuICAgICAgLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwkXFwoXFxkXFwpLywgbmFtZSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9nZXRFcnJvcihjb250cm9sUmVmKTogeyBuYW1lOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHtcblxuICAgIGNvbnN0IG5hbWUgPSBrZXlzKGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnMpWzBdO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWVzc2FnZSA9IGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnNbbmFtZV07XG5cbiAgICBpZiAodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSkge1xuICAgICAgbWVzc2FnZSA9IHRoaXMuX3BhcnNlRXJyb3JNZXNzYWdlKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0sIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5fY29udHJvbDtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRlKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gY29udHJvbC52YWxpZGF0b3JcbiAgICAgICAgPyBbY29udHJvbC52YWxpZGF0b3IsIHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKV1cbiAgICAgICAgOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWxpZGF0ZUFzeW5jKSB7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBjb250cm9sLmFzeW5jVmFsaWRhdG9yXG4gICAgICAgID8gW2NvbnRyb2wuYXN5bmNWYWxpZGF0b3IsIHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpXVxuICAgICAgICA6IHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpO1xuXG4gICAgICBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbn1cbiJdfQ==
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQW1CLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHlCQUF5QixHQUMxQixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFHekQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBZ0IxQyxNQUFNLE9BQU8sa0JBQWtCO0lBRWIsZUFBZSxDQUFpQjtJQUNoQyxlQUFlLENBQWlCO0lBQ2hDLFlBQVksQ0FBaUI7SUFDN0IsYUFBYSxDQUFpQjtJQUM5QixrQkFBa0IsQ0FBUztJQUMzQixnQkFBZ0IsQ0FBUztJQUN6QixlQUFlLENBQVM7SUFFeEMsSUFDVyxnQkFBZ0IsQ0FBQyxRQUFnQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsaUJBQWlCO1lBQ3pCLEdBQUcsUUFBUTtTQUNaLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVULFdBQVcsR0FBRyxNQUFNLENBQUMsVUFB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O2dCQUM1QyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO3VHQXRVVSxrQkFBa0I7MkZBQWxCLGtCQUFrQiwwV0FMbEI7WUFDVCx5QkFBeUI7U0FDMUI7OzJGQUdVLGtCQUFrQjtrQkFQOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUU7d0JBQ1QseUJBQXlCO3FCQUMxQjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBR2lCLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUdLLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTmdDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGtleXMsIHZhbHVlcyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7XG4gIFZBTElEQVRFX01FU1NBR0VTLFxuICBWQUxJREFURV9NRVNTQUdFX1BST1ZJREVSLFxufSBmcm9tICcuLi8uLi9wcm92aWRlcnMvdmFsaWRhdGUtbWVzc2FnZXMucHJvdmlkZXInO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZm9ybS9mb3JtLmRpcmVjdGl2ZSc7XG5cblxuY29uc3QgcmVzb2x2ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBGc0NvbnRyb2xEaXJlY3RpdmUge1xuICB2YWxpZGF0ZT8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGw7XG4gIHZhbGlkYXRlQXN5bmM/KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD47XG59XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzRm9ybUNvbnRyb2xdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUixcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRnNDb250cm9sRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHB1YmxpYyB3cmFwcGVyU2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbWVzc2FnZVNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGhpbnRTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbFNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZE1lc3NhZ2VDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kRXJyb3JDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kSGludENsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWxpZGF0ZU1lc3NhZ2VzKG1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgdGhpcy5fdmFsaWRhdGVNZXNzYWdlcyA9IHtcbiAgICAgIC4uLnRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMsXG4gICAgICAuLi5tZXNzYWdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVycm9ycyA9IFtdO1xuXG4gIHByb3RlY3RlZCBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJvdGVjdGVkIF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByb3RlY3RlZCBfdmFsaWRhdGVNZXNzYWdlcyA9IGluamVjdChWQUxJREFURV9NRVNTQUdFUywgeyBzZWxmOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX25nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByb3RlY3RlZCBfZm9ybURpcmVjdGl2ZSA9IGluamVjdDxGc0Zvcm1EaXJlY3RpdmU+KEZzRm9ybURpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX3N0YXR1c0NoYW5nZXMkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfYm91bmRDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBuZ01vZGVsJywgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWx3YXlzIHJlYWQgdGhlIGNvbnRyb2wgdGhyb3VnaCB0aGUgZGlyZWN0aXZlIHJhdGhlciB0aGFuIGNhY2hpbmcgaXQuXG4gICAqXG4gICAqIE5nRm9ybS5hZGRDb250cm9sKCkgcnVucyBpbiBhIG1pY3JvdGFzayBhbmQgcmVhc3NpZ25zIGRpci5jb250cm9sIHRvXG4gICAqIHdoYXRldmVyIEZvcm1Hcm91cC5yZWdpc3RlckNvbnRyb2woKSByZXR1cm5zIOKAlCBhbmQgcmVnaXN0ZXJDb250cm9sKCkgaGFuZHNcbiAgICogYmFjayB0aGUgRVhJU1RJTkcgY29udHJvbCB3aGVuIHRoZSBuYW1lIGlzIGFscmVhZHkgdGFrZW4gKHR3byBmaWVsZHNcbiAgICogc2hhcmluZyBhIG5hbWUsIG9yIGxhemlseSBjcmVhdGVkIGNvbnRlbnQgcmUtcmVnaXN0ZXJpbmcpLiBBIGNvbnRyb2xcbiAgICogY2FwdHVyZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGlzIHRoZW4gYW4gb3JwaGFuOiBpdCBuZXZlciBlbWl0cyBhZ2Fpbiwgc29cbiAgICogc3RhdHVzQ2hhbmdlcyBuZXZlciBmaXJlcyBhbmQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBuZXZlciByZW5kZXJlZC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgX2NvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sPy5jb250cm9sO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3NldHVwVmFsaWRhdG9ycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb1N0YXR1c0NoYWduZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXNzYWdlU2VsZWN0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlU2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWVzc2FnZVNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/Lm1lc3NhZ2VTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXJlY3RpdmUubWVzc2FnZVNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRIaW50V3JhcHBlcigpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRIaW50V3JhcHBlclNlbGVjdG9yKCkpO1xuICB9XG5cbiAgcHVibGljIGdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuaGludFNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhpbnRTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuaGludFNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9mb3JtRGlyZWN0aXZlPy5oaW50U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtRGlyZWN0aXZlLmhpbnRTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0V3JhcHBlclNlbGVjdG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud3JhcHBlclNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndyYXBwZXJTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMud3JhcHBlclNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9mb3JtRGlyZWN0aXZlPy53cmFwcGVyU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtRGlyZWN0aXZlLndyYXBwZXJTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0bGFiZWxTZWxlY3RvcigpOiBzdHJpbmcge1xuXG4gICAgaWYgKHRoaXMubGFiZWxTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYWJlbFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbFNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9mb3JtRGlyZWN0aXZlPy5sYWJlbFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybURpcmVjdGl2ZS5sYWJlbFNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRXcmFwcGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5fZ2V0V3JhcHBlcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgaWYgKHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvKlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkXCI+ICA8LS0gRmllbGQgV3JhcHBlciBDbGFzcy4gTG9vayBmb3IgcGFyZW50cyBmcm9tIHRoZSBuYXRpdmUgZWxlbWVudCB3aXRoIHRoZSBtYXRjaGluZyB3cmFwcGVyU2VsZWN0b3IuIElmIG5vdCBmb3VuZCBkZWZhdWx0cyB0byBuYXRpdmUgZWxlbWVudC5cbiAgICAgIDxpbnB1dD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLW1lc3NhZ2VcIj4gPC0tIE1lc3NhZ2UgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0tbWVzc2FnZSBvciBtZXNzYWdlU2VsZWN0b3JcbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1oaW50XCI+PC9kaXY+IDwtLSBIaW50IFNlbGVjdG9yLiBMb29rIGZvciB0aGUgZWxlbWVudCB3aXRoIGNsYXNzIC5mcy1mb3JtLWhpbnQgb3IgaGludFNlbGVjdG9yXG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAqL1xuXG4gIHByaXZhdGUgZ2V0IF9zaG91bGRFcnJvckJlUmVuZGVyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC5pbnZhbGlkXG4gICAgICAmJiAodGhpcy5fbmdDb250cm9sLmRpcnR5IHx8IHRoaXMuX2Zvcm1EaXJlY3RpdmU/Lm5nRm9ybT8uc3VibWl0dGVkKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjI7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9uZ0NvbnRyb2wuZGlydHkgPyB0aGlzLl9nZXRFcnJvcih0aGlzLl9uZ0NvbnRyb2wpIDogbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX3Nob3VsZEVycm9yQmVSZW5kZXJlZCAmJiBlcnJvcikge1xuICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ25nLWludmFsaWQnLCAnbmctZGlydHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnbmctaW52YWxpZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlV3JhcHBlciA9IHdyYXBwZXIucXVlcnlTZWxlY3Rvcih0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpKTtcbiAgIFxuICAgICAgaWYgKCFtZXNzYWdlV3JhcHBlcikge1xuICAgICAgICByZXR1cm4gY29uc29sZVxuICAgICAgICAgIC53YXJuKGBGYWlsZWQgdG8gbG9jYXRlICR7ICB0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpfWAsIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKG1lc3NhZ2VXcmFwcGVyLCAnZnMtZm9ybS1tZXNzYWdlJyk7XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZE1lc3NhZ2VDbGFzcykge1xuICAgICAgICByZW5kZXJlci5hZGRDbGFzcyhtZXNzYWdlV3JhcHBlciwgdGhpcy5hcHBlbmRNZXNzYWdlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW5kZXJIaW50KGVycm9yLCBtZXNzYWdlV3JhcHBlcik7XG4gICAgICB0aGlzLl9yZW5kZXJFcnJvcih3cmFwcGVyLCBtZXNzYWdlV3JhcHBlciwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVuZGVySGludChlcnJvciwgbWVzc2FnZVdyYXBwZXIpIHtcbiAgICBjb25zdCBoaW50cyA9IFtcbiAgICAgIC4uLm1lc3NhZ2VXcmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtbWRjLWZvcm0tZmllbGQtaGludCcpLFxuICAgIF07XG5cbiAgICBjb25zdCBoaW50V3JhcHBlcjogSFRNTEVsZW1lbnQgPSB0aGlzLmdldEhpbnRXcmFwcGVyKCk7XG4gICAgaWYgKGhpbnRXcmFwcGVyKSB7XG4gICAgICBoaW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCdmcy1mb3JtLWhpbnQtd3JhcHBlcicpO1xuICAgIH1cblxuICAgIGhpbnRzLmZvckVhY2goKGhpbnQpID0+IHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShoaW50LCAnZGlzcGxheScsIGVycm9yID8gJ25vbmUnIDogJ2Jsb2NrJyk7XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZEhpbnRDbGFzcykge1xuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoaGludCwgJ2ZzLWZvcm0taGludCcpO1xuICAgICAgICBpZih0aGlzLmFwcGVuZEhpbnRDbGFzcykge1xuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhoaW50LCB0aGlzLmFwcGVuZEhpbnRDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVuZGVyRXJyb3Iod3JhcHBlciwgbWVzc2FnZVdyYXBwZXIsIGVycm9yKSB7XG4gICAgbGV0IGVycm9yV3JhcHBlciA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcignLmZzLWZvcm0tZXJyb3InKTtcbiAgICBpZiAoZXJyb3JXcmFwcGVyKSB7XG4gICAgICBlcnJvcldyYXBwZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zaG91bGRFcnJvckJlUmVuZGVyZWQgfHwgIWVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3JXcmFwcGVyID0gdGhpcy5fcmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhlcnJvcldyYXBwZXIsICdmcy1mb3JtLWVycm9yJyk7XG4gICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgYGZzLWZvcm0tZXJyb3ItJHtlcnJvci5uYW1lfWApO1xuXG4gICAgaWYodGhpcy5hcHBlbmRFcnJvckNsYXNzKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCB0aGlzLmFwcGVuZEVycm9yQ2xhc3MpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgYCR7dGhpcy5hcHBlbmRFcnJvckNsYXNzfS0ke2Vycm9yLm5hbWV9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGVycm9yVGV4dCA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVUZXh0KGVycm9yLm1lc3NhZ2UpO1xuXG4gICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKGVycm9yV3JhcHBlciwgZXJyb3JUZXh0KTtcblxuICAgIGNvbnN0IGhpbnRXcmFwcGVyOiBIVE1MRWxlbWVudCA9IG1lc3NhZ2VXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRIaW50V3JhcHBlclNlbGVjdG9yKCkpO1xuICAgIGlmIChoaW50V3JhcHBlcikge1xuICAgICAgaGludFdyYXBwZXIucHJlcGVuZChlcnJvcldyYXBwZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfc3Vic2NyaWJlVG9TdGF0dXNDaGFnbmVzKCk6dm9pZCB7XG4gICAgLy8gUmVnaXN0cmF0aW9uIGlzIGRlZmVycmVkIHRvIGEgbWljcm90YXNrIGJ5IE5nRm9ybS5hZGRDb250cm9sKCksIHNvIHdhaXRcbiAgICAvLyBmb3IgaXQgdG8gc2V0dGxlIGJlZm9yZSBiaW5kaW5nIOKAlCBvdGhlcndpc2Ugd2Ugc3Vic2NyaWJlIHRvIHRoZSBjb250cm9sXG4gICAgLy8gdGhhdCBpcyBhYm91dCB0byBiZSByZXBsYWNlZC5cbiAgICByZXNvbHZlZFByb21pc2VcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuX2JpbmRTdGF0dXNDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYmluZFN0YXR1c0NoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2NvbnRyb2w7XG5cbiAgICBpZiAoIWNvbnRyb2wgfHwgY29udHJvbCA9PT0gdGhpcy5fYm91bmRDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYm91bmRDb250cm9sID0gY29udHJvbDtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJC5uZXh0KCk7XG5cbiAgICBjb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fc3RhdHVzQ2hhbmdlcyQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sIGNhbiBzdGlsbCBiZSBzd2FwcGVkIG91dCBmcm9tIHVuZGVyIHVzIChhIHNpYmxpbmcgd2l0aFxuICAgICAgICAvLyB0aGUgc2FtZSBuYW1lIHJlZ2lzdGVyaW5nIGxhdGVyKSwgc28gcmUtYmluZCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAgICBpZiAodGhpcy5fY29udHJvbCAhPT0gdGhpcy5fYm91bmRDb250cm9sKSB7XG4gICAgICAgICAgdGhpcy5fYmluZFN0YXR1c0NoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2dldFdyYXBwZXIobm9kZSwgY291bnQgPSAwKSB7XG4gICAgaWYgKCFub2RlIHx8IGNvdW50ID4gMTApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRXcmFwcGVyU2VsZWN0b3IoKSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRXcmFwcGVyKG5vZGUucGFyZW50Tm9kZSwgKytjb3VudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3BhcnNlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGFyZ3MpOiBzdHJpbmcge1xuICAgIHZhbHVlcyhhcmdzKVxuICAgICAgLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwkXFwoXFxkXFwpLywgbmFtZSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9nZXRFcnJvcihjb250cm9sUmVmKTogeyBuYW1lOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHtcblxuICAgIGNvbnN0IG5hbWUgPSBrZXlzKGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnMpWzBdO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWVzc2FnZSA9IGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnNbbmFtZV07XG5cbiAgICBpZiAodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSkge1xuICAgICAgbWVzc2FnZSA9IHRoaXMuX3BhcnNlRXJyb3JNZXNzYWdlKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0sIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5fY29udHJvbDtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRlKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gY29udHJvbC52YWxpZGF0b3JcbiAgICAgICAgPyBbY29udHJvbC52YWxpZGF0b3IsIHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKV1cbiAgICAgICAgOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWxpZGF0ZUFzeW5jKSB7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBjb250cm9sLmFzeW5jVmFsaWRhdG9yXG4gICAgICAgID8gW2NvbnRyb2wuYXN5bmNWYWxpZGF0b3IsIHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpXVxuICAgICAgICA6IHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpO1xuXG4gICAgICBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbn1cbiJdfQ==
|