@coolon/angular-ui-powerups 16.1.0-aplpha.180 → 16.1.0-aplpha.182
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/esm2022/lib/components/forms/number-input/number-input.component.mjs +2 -1
- package/esm2022/lib/components/forms/string-input/string-input.component.mjs +9 -3
- package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +1 -1
- package/esm2022/lib/place/place-router.mjs +43 -33
- package/esm2022/lib/services/loading-monitor.mjs +7 -4
- package/fesm2022/coolon-angular-ui-powerups.mjs +56 -37
- package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
- package/lib/components/forms/string-input/string-input.component.d.ts +3 -1
- package/lib/place/place-router.d.ts +2 -1
- package/lib/services/loading-monitor.d.ts +4 -2
- package/package.json +1 -1
|
@@ -25,6 +25,7 @@ export class NumberInputComponent extends AbstractValueInputComponent {
|
|
|
25
25
|
get max() { return this.#max_accessor_storage; }
|
|
26
26
|
set max(value) { this.#max_accessor_storage = value; }
|
|
27
27
|
#significantDigits$_accessor_storage = proxify((ValueModel));
|
|
28
|
+
// TODO: rename to decimal places. Also need to reject key presses for characters > last decimal place as the clamping rounds things up if you type a digit >= 5
|
|
28
29
|
get significantDigits$() { return this.#significantDigits$_accessor_storage; }
|
|
29
30
|
set significantDigits$(value) { this.#significantDigits$_accessor_storage = value; }
|
|
30
31
|
#significantDigits_accessor_storage;
|
|
@@ -106,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
106
107
|
}], significantDigits: [{
|
|
107
108
|
type: Input
|
|
108
109
|
}] } });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvbnVtYmVyLWlucHV0L251bWJlci1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL251bWJlci1pbnB1dC9udW1iZXItaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQVMsVUFBVSxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7O0FBUTlFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSwyQkFBbUM7SUFFbEUsWUFBWSxDQUFTO0lBR3JCLHlCQUEyQixPQUFPLENBQUMsQ0FBQSxVQUFrQixDQUFBLENBQUMsQ0FBQztJQUF2RCxJQUFBLElBQUksMENBQW1EO0lBQXZELElBQUEsSUFBSSxnREFBbUQ7SUFHdkQsd0JBQU0sTUFBTSxDQUFDLGdCQUFnQixDQUFDO0lBQTlCLElBQUEsR0FBRyx5Q0FBMkI7SUFBOUIsSUFBQSxHQUFHLCtDQUEyQjtJQUc5Qix5QkFBMkIsT0FBTyxDQUFDLENBQUEsVUFBa0IsQ0FBQSxDQUFDLENBQUM7SUFBdkQsSUFBQSxJQUFJLDBDQUFtRDtJQUF2RCxJQUFBLElBQUksZ0RBQW1EO0lBR3ZELHdC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QU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQzt1R0EvRFUsb0JBQW9COzJGQUFwQixvQkFBb0IsK1BDWGpDLG05QkF5QkE7O0FEVFc7SUFEQyxPQUFPLEVBQUU7OEJBQ0osVUFBVTtnREFBdUM7QUFHdkQ7SUFEQyxpQkFBaUIsRUFBRTs7K0NBQ1U7QUFHOUI7SUFEQyxPQUFPLEVBQUU7OEJBQ0osVUFBVTtnREFBdUM7QUFHdkQ7SUFEQyxpQkFBaUIsRUFBRTs7K0NBQ1U7QUFJOUI7SUFEQyxPQUFPLEVBQUU7OEJBQ1MsVUFBVTs4REFBdUM7QUFHcEU7SUFEQyxpQkFBaUIsRUFBRTs7NkRBQ007MkZBckJ4QixvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCOzBFQU1uQixZQUFZO3NCQUFwQixLQUFLO2dCQUdHLElBQUk7c0JBRFosS0FBSztnQkFJRyxHQUFHO3NCQURYLEtBQUs7Z0JBSUcsSUFBSTtzQkFEWixLQUFLO2dCQUlHLEdBQUc7c0JBRFgsS0FBSztnQkFLRyxrQkFBa0I7c0JBRDFCLEtBQUs7Z0JBSUcsaUJBQWlCO3NCQUR6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbWFuZCwgRHNsLCBQcm94aWZ5LCBwcm94aWZ5LCBTdG9yZUluVmFsdWVNb2RlbCwgVHJhY2UsIFZhbHVlTW9kZWwsIFZhbHVlTW9kZWxDaGFpbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge0Fic3RyYWN0VmFsdWVJbnB1dENvbXBvbmVudH0gZnJvbSAnLi4vYWJzdHJhY3QtdmFsdWUtaW5wdXQuY29tcG9uZW50JztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXAtbnVtYmVyLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL251bWJlci1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL251bWJlci1pbnB1dC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlcklucHV0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RWYWx1ZUlucHV0Q29tcG9uZW50PG51bWJlcj4ge1xuXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgbWluJDogVmFsdWVNb2RlbDxudW1iZXI+ID0gcHJveGlmeShWYWx1ZU1vZGVsPG51bWJlcj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIG1pbiA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgbWF4JDogVmFsdWVNb2RlbDxudW1iZXI+ID0gcHJveGlmeShWYWx1ZU1vZGVsPG51bWJlcj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIG1heCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXG4gIC8vIFRPRE86IHJlbmFtZSB0byBkZWNpbWFsIHBsYWNlcy4gICBBbHNvIG5lZWQgdG8gcmVqZWN0IGtleSBwcmVzc2VzIGZvciBjaGFyYWN0ZXJzID4gbGFzdCBkZWNpbWFsIHBsYWNlIGFzIHRoZSBjbGFtcGluZyByb3VuZHMgdGhpbmdzIHVwIGlmIHlvdSB0eXBlIGEgZGlnaXQgPj0gNVxuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIHNpZ25pZmljYW50RGlnaXRzJDpWYWx1ZU1vZGVsPG51bWJlcj4gPSBwcm94aWZ5KFZhbHVlTW9kZWw8bnVtYmVyPik7XG5cbiAgQElucHV0KCkgQFN0b3JlSW5WYWx1ZU1vZGVsKClcbiAgYWNjZXNzb3Igc2lnbmlmaWNhbnREaWdpdHM6IG51bWJlcjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5jcmVtZW50Q29tbWFuZDogQ29tbWFuZDx2b2lkPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlY3JlbWVudENvbW1hbmQ6IENvbW1hbmQ8dm9pZD47XG4gIHByb3RlY3RlZCByZWFkb25seSBkaXNwbGF5VmFsdWUkOiBWYWx1ZU1vZGVsPG51bWJlcj47XG4gIHByb3RlY3RlZCByZWFkb25seSBzdGVwJDogVmFsdWVNb2RlbENoYWluPG51bWJlcj47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVwJCA9IGNoYWluKHRoaXMuc2lnbmlmaWNhbnREaWdpdHMkKS5tYXAodiA9PiAxMCAqKiAoLXYpKS5vdGhlcndpc2UoMSlcblxuICAgIHRoaXMuZGlzcGxheVZhbHVlJCA9IGNoYWluKHRoaXMudmFsdWUkKS5tYXAodiA9PiB0aGlzLmNsYW1wU2lnbmlmaWNhbnREaWdpdHModiksIHtcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5zaWduaWZpY2FudERpZ2l0cyRcbiAgICB9KTtcblxuICAgIGNvbnN0IG5vcm1hbGlzZWRWYWx1ZSQgPSBjaGFpbih0aGlzLnZhbHVlJCkub3RoZXJ3aXNlKDApO1xuXG4gICAgdGhpcy5pbmNyZW1lbnRDb21tYW5kID0gQ29tbWFuZC5jcmVhdGUoKCkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSQudmFsdWUgPSB0aGlzLmluY3JlbWVudCh0aGlzLnZhbHVlJC52YWx1ZSk7XG4gICAgfSkuZW5hYmxlV2hpbGUoY2hhaW4ubnVtZXJpY1ZhbHVlKG5vcm1hbGlzZWRWYWx1ZSQpLmlzTGVzc1RoYW4odGhpcy5tYXgkKS5hbmQodGhpcy5lbmFibGVkJCkpO1xuXG4gICAgdGhpcy5kZWNyZW1lbnRDb21tYW5kID0gQ29tbWFuZC5jcmVhdGUoKCkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSQudmFsdWUgPSB0aGlzLmRlY3JlbWVudCh0aGlzLnZhbHVlJC52YWx1ZSk7XG4gICAgfSkuZW5hYmxlV2hpbGUoY2hhaW4ubnVtZXJpY1ZhbHVlKG5vcm1hbGlzZWRWYWx1ZSQpLmlzR3JlYXRlclRoYW4odGhpcy5taW4kKS5hbmQodGhpcy5lbmFibGVkJCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNyZW1lbnQodmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmNsYW1wU2lnbmlmaWNhbnREaWdpdHMoKHZhbHVlID8/IDApICsgdGhpcy5zdGVwJC52YWx1ZSlcbiAgfVxuXG4gIHByaXZhdGUgZGVjcmVtZW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jbGFtcFNpZ25pZmljYW50RGlnaXRzKCh2YWx1ZSA/PyAwKSAtIHRoaXMuc3RlcCQudmFsdWUpXG4gIH1cblxuICBwcml2YXRlIGNsYW1wU2lnbmlmaWNhbnREaWdpdHModmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuc2lnbmlmaWNhbnREaWdpdHMpID8gdmFsdWUgOiBOdW1iZXIodmFsdWUudG9GaXhlZCh0aGlzLnNpZ25pZmljYW50RGlnaXRzKSk7XG4gIH1cblxuICBvblZhbHVlQ2hhbmdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnZhbHVlJC52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cImFsd2F5c1wiPlxuICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIlxuICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICBbbmdNb2RlbF09XCJkaXNwbGF5VmFsdWUkLnZhbHVlXCJcbiAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICBbZGlzYWJsZWRdPVwiIWVuYWJsZWQkLnZhbHVlXCJcbiAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm5vdGlmeUVudGVyS2V5KClcIlxuICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cIm5vdGlmeUVzY2FwZUtleSgpXCJcbiAgICAgICAgIFtwZWN0aW5Gb2N1c0JpbmRpbmddPVwiZm9jdXNDb250ZXh0XCJcbiAgICAgICAgIFtlcnJvclN0YXRlTWF0Y2hlcl09XCJlcnJvclN0YXRlTWF0Y2hlclwiXG4gICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICBbc2l6ZV09XCI0XCJcbiAgICAgICAgIFtzdGVwXT1cInN0ZXAkLnZhbHVlXCJcbiAgPlxuICA8c2VjdGlvbiBtYXRJY29uU3VmZml4PlxuICAgIDxidXR0b24gW3BlY3RpbkNvbW1hbmRdPVwiZGVjcmVtZW50Q29tbWFuZFwiPi08L2J1dHRvbj5cbiAgICA8YnV0dG9uIFtwZWN0aW5Db21tYW5kXT1cImluY3JlbWVudENvbW1hbmRcIj4rPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbiAgPG1hdC1oaW50ICpuZ0lmPVwiaGludCAmJiAhZGVuc2VcIj57eyBoaW50IH19PC9tYXQtaGludD5cbiAgPG1hdC1lcnJvciAqbmdJZj1cImhhc0Vycm9ycygpXCI+e3sgZmlyc3RFcnJvciB9fTwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==
|
|
@@ -23,6 +23,7 @@ export class StringInputComponent extends AbstractValueInputComponent {
|
|
|
23
23
|
get suffixCommand() { return this.#suffixCommand_accessor_storage; }
|
|
24
24
|
set suffixCommand(value) { this.#suffixCommand_accessor_storage = value; }
|
|
25
25
|
inputMode = 'text';
|
|
26
|
+
trim = true;
|
|
26
27
|
clearCommand;
|
|
27
28
|
elementRef = this.inject(ElementRef);
|
|
28
29
|
constructor() {
|
|
@@ -40,8 +41,11 @@ export class StringInputComponent extends AbstractValueInputComponent {
|
|
|
40
41
|
select() {
|
|
41
42
|
this.elementRef.nativeElement.querySelector('input').select();
|
|
42
43
|
}
|
|
44
|
+
onValueChange($event) {
|
|
45
|
+
this.componentValue$.value = this.trim ? $event?.trim() : $event;
|
|
46
|
+
}
|
|
43
47
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
44
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: StringInputComponent, selector: "aup-string-input", inputs: { autocomplete: "autocomplete", enableClear$: "enableClear$", enableClear: "enableClear", iconPrefix: "iconPrefix", suffixCommand: "suffixCommand", inputMode: "inputMode" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.inputmode]=\"inputMode\"\n [attr.autocomplete]=\"autocomplete\"\n [
|
|
48
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: StringInputComponent, selector: "aup-string-input", inputs: { autocomplete: "autocomplete", enableClear$: "enableClear$", enableClear: "enableClear", iconPrefix: "iconPrefix", suffixCommand: "suffixCommand", inputMode: "inputMode", trim: "trim" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.inputmode]=\"inputMode\"\n [attr.autocomplete]=\"autocomplete\"\n [ngModel]=\"value$.value\"\n (ngModelChange)=\"onValueChange($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors()\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n <span matSuffix>\n <aup-command *ngIf=\"enableClear\" [command]=\"clearCommand\" data-cy=\"clearCommand\"></aup-command>\n <aup-command *ngIf=\"hasSuffixCommand\" [command]=\"suffixCommand\" data-cy=\"suffixCommand\"></aup-command>\n </span>\n</mat-form-field>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }, { kind: "component", type: i6.IconComponent, selector: "aup-icon", inputs: ["icon"] }, { kind: "component", type: i7.CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }] });
|
|
45
49
|
}
|
|
46
50
|
__decorate([
|
|
47
51
|
Proxify(),
|
|
@@ -57,7 +61,7 @@ __decorate([
|
|
|
57
61
|
], StringInputComponent.prototype, "suffixCommand", null);
|
|
58
62
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, decorators: [{
|
|
59
63
|
type: Component,
|
|
60
|
-
args: [{ selector: 'aup-string-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.inputmode]=\"inputMode\"\n [attr.autocomplete]=\"autocomplete\"\n [
|
|
64
|
+
args: [{ selector: 'aup-string-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.inputmode]=\"inputMode\"\n [attr.autocomplete]=\"autocomplete\"\n [ngModel]=\"value$.value\"\n (ngModelChange)=\"onValueChange($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors()\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n <span matSuffix>\n <aup-command *ngIf=\"enableClear\" [command]=\"clearCommand\" data-cy=\"clearCommand\"></aup-command>\n <aup-command *ngIf=\"hasSuffixCommand\" [command]=\"suffixCommand\" data-cy=\"suffixCommand\"></aup-command>\n </span>\n</mat-form-field>\n\n" }]
|
|
61
65
|
}], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
|
|
62
66
|
type: Input
|
|
63
67
|
}], enableClear$: [{
|
|
@@ -70,5 +74,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
70
74
|
type: Input
|
|
71
75
|
}], inputMode: [{
|
|
72
76
|
type: Input
|
|
77
|
+
}], trim: [{
|
|
78
|
+
type: Input
|
|
73
79
|
}] } });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvc3RyaW5nLWlucHV0L3N0cmluZy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL3N0cmluZy1pbnB1dC9zdHJpbmctaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7QUFPaEYsTUFBTSxPQUFPLG9CQUFxQixTQUFRLDJCQUFtQztJQUVsRSxZQUFZLENBQVM7SUFHckIsaUNBQWUsT0FBTyxDQUFDLENBQUEsVUFBbUIsQ0FBQSxDQUFDLENBQUM7SUFBNUMsSUFBQSxZQUFZLGtEQUFnQztJQUE1QyxJQUFBLFlBQVksd0RBQWdDO0lBRzVDLGdDQUFjLEtBQUssQ0FBQztJQUFwQixJQUFBLFdBQVcsaURBQVM7SUFBcEIsSUFBQSxXQUFXLHVEQUFTO0lBRXBCLFVBQVUsQ0FBUztJQUduQixrQ0FBeUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQTFDLElBQUEsYUFBYSxtREFBNkI7SUFBMUMsSUFBQSxhQUFhLHlEQUE2QjtJQUduRCxTQUFTLEdBQXdFLE1BQU0sQ0FBQztJQUd4RixJQUFJLEdBQUcsSUFBSSxDQUFDO0lBRUgsWUFBWSxDQUFnQjtJQUU1QixVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUU5QztRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO2FBQ0MsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3JDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFFUyxhQUFhLENBQUMsTUFBYztRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuRSxDQUFDO3VHQTdDVSxvQkFBb0I7MkZBQXBCLG9CQUFvQixtUkNUakMsc2hDQXVCQTs7QURUVztJQURDLE9BQU8sRUFBRTs7d0RBQ2tDO0FBRzVDO0lBREMsaUJBQWlCLEVBQUU7O3VEQUNBO0FBS3BCO0lBREMsT0FBTyxFQUFFOzhCQUNLLE9BQU87eURBQW9COzJGQWJ4QyxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCOzBFQU1uQixZQUFZO3NCQUFwQixLQUFLO2dCQUdHLFlBQVk7c0JBRHBCLEtBQUs7Z0JBSUcsV0FBVztzQkFEbkIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGFBQWE7c0JBRHJCLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1hbmQsIERzbCwgUHJveGlmeSwgcHJveGlmeSwgU3RvcmVJblZhbHVlTW9kZWwsIFZhbHVlTW9kZWwgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZhbHVlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9hYnN0cmFjdC12YWx1ZS1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXAtc3RyaW5nLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0cmluZy1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0cmluZy1pbnB1dC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN0cmluZ0lucHV0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RWYWx1ZUlucHV0Q29tcG9uZW50PHN0cmluZz4ge1xuXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZW5hYmxlQ2xlYXIkID0gcHJveGlmeShWYWx1ZU1vZGVsPGJvb2xlYW4+KTtcblxuICBASW5wdXQoKSBAU3RvcmVJblZhbHVlTW9kZWwoKVxuICBhY2Nlc3NvciBlbmFibGVDbGVhciA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGljb25QcmVmaXg6IHN0cmluZztcblxuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIHN1ZmZpeENvbW1hbmQ6IENvbW1hbmQgPSBwcm94aWZ5KENvbW1hbmQpO1xuXG4gIEBJbnB1dCgpXG4gIGlucHV0TW9kZTogJ3RleHQnIHwgJ2RlY2ltYWwnIHwgJ251bWVyaWMnIHwgJ3RlbCcgfCAnc2VhcmNoJyB8ICdlbWFpbCcgfCAndXJsJyA9ICd0ZXh0JztcblxuICBASW5wdXQoKVxuICB0cmltID0gdHJ1ZTtcblxuICByZWFkb25seSBjbGVhckNvbW1hbmQ6IENvbW1hbmQ8dm9pZD47XG5cbiAgcmVhZG9ubHkgZWxlbWVudFJlZiA9IHRoaXMuaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT24gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyQ29tbWFuZCA9IENvbW1hbmQuY3JlYXRlKCgpID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50VmFsdWUkLnZhbHVlID0gJyc7XG4gICAgfSlcbiAgICAgIC53aXRoRmFjZSh7IGljb246ICgpID0+ICdtYXQ6Y2xlYXInIH0pXG4gICAgICAuZW5hYmxlV2hpbGUoY2hhaW4uc3RyaW5nVmFsdWUodGhpcy5jb21wb25lbnRWYWx1ZSQpLmlzTm90QmxhbmsoKSk7XG4gIH1cblxuICBnZXQgaGFzU3VmZml4Q29tbWFuZCgpIHtcbiAgICByZXR1cm4gUHJveGlmeS5oYXNUYXJnZXQodGhpcy5zdWZmaXhDb21tYW5kKTtcbiAgfVxuXG4gIHNlbGVjdCgpIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnNlbGVjdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2UoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbXBvbmVudFZhbHVlJC52YWx1ZSA9IHRoaXMudHJpbSA/ICRldmVudD8udHJpbSgpIDogJGV2ZW50O1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiPlxuICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L21hdC1sYWJlbD5cbiAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiXG4gICAgICAgICBbYXR0ci5pbnB1dG1vZGVdPVwiaW5wdXRNb2RlXCJcbiAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuICAgICAgICAgW25nTW9kZWxdPVwidmFsdWUkLnZhbHVlXCJcbiAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICBbZGlzYWJsZWRdPVwiIWVuYWJsZWQkLnZhbHVlXCJcbiAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm5vdGlmeUVudGVyS2V5KClcIlxuICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cIm5vdGlmeUVzY2FwZUtleSgpXCJcbiAgICAgICAgIFtwZWN0aW5Gb2N1c0JpbmRpbmddPVwiZm9jdXNDb250ZXh0XCJcbiAgICAgICAgIFtlcnJvclN0YXRlTWF0Y2hlcl09XCJlcnJvclN0YXRlTWF0Y2hlclwiXG4gID5cbiAgPG1hdC1oaW50ICpuZ0lmPVwic2hvd0hpbnRcIj57e2hpbnR9fTwvbWF0LWhpbnQ+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJoYXNFcnJvcnMoKVwiPnt7Zmlyc3RFcnJvcn19PC9tYXQtZXJyb3I+XG4gIDxhdXAtaWNvbiAqbmdJZj1cImljb25QcmVmaXhcIiBtYXRQcmVmaXggW2ljb25dPVwiaWNvblByZWZpeFwiPjwvYXVwLWljb24+XG4gIDxzcGFuIG1hdFN1ZmZpeD5cbiAgICA8YXVwLWNvbW1hbmQgKm5nSWY9XCJlbmFibGVDbGVhclwiIFtjb21tYW5kXT1cImNsZWFyQ29tbWFuZFwiIGRhdGEtY3k9XCJjbGVhckNvbW1hbmRcIj48L2F1cC1jb21tYW5kPlxuICAgIDxhdXAtY29tbWFuZCAqbmdJZj1cImhhc1N1ZmZpeENvbW1hbmRcIiBbY29tbWFuZF09XCJzdWZmaXhDb21tYW5kXCIgZGF0YS1jeT1cInN1ZmZpeENvbW1hbmRcIj48L2F1cC1jb21tYW5kPlxuICA8L3NwYW4+XG48L21hdC1mb3JtLWZpZWxkPlxuXG4iXX0=
|
|
@@ -18,7 +18,7 @@ export class StringInputActivity extends InputActivity {
|
|
|
18
18
|
[confirmFace]="confirmFace"
|
|
19
19
|
[cancelFace]="cancelFace"
|
|
20
20
|
></aup-activity-actions>
|
|
21
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i1.StringInputComponent, selector: "aup-string-input", inputs: ["autocomplete", "enableClear$", "enableClear", "iconPrefix", "suffixCommand", "inputMode"] }, { kind: "component", type: i2.ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align", "alignContent"] }] });
|
|
21
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i1.StringInputComponent, selector: "aup-string-input", inputs: ["autocomplete", "enableClear$", "enableClear", "iconPrefix", "suffixCommand", "inputMode", "trim"] }, { kind: "component", type: i2.ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align", "alignContent"] }] });
|
|
22
22
|
}
|
|
23
23
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputActivity, decorators: [{
|
|
24
24
|
type: Component,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Location } from "@angular/common";
|
|
2
2
|
import { Injectable } from "@angular/core";
|
|
3
3
|
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from "@angular/router";
|
|
4
|
-
import { assert, DebugContext, DelegatingValueModel, Dsl, GarbageCollector, lang, Logger, MutableValueModel } from
|
|
4
|
+
import { assert, DebugContext, DelegatingValueModel, Dsl, GarbageCollector, lang, Logger, MutableValueModel } from '@coolon/pectin';
|
|
5
5
|
import { InteractionService } from "../interaction/services/interaction.service";
|
|
6
6
|
import { NavigatingDuringInteraction } from "./navigation/session/interactions/navigating-during-interaction";
|
|
7
7
|
import { PopStateDuringInteractionNavigation } from "./navigation/session/interactions/pop-state-during-interaction-navigation";
|
|
@@ -10,6 +10,7 @@ import { Navigating } from "./navigation/session/navigating";
|
|
|
10
10
|
import { NavigationContext } from "./navigation/session/navigation-context";
|
|
11
11
|
import { PopStateNavigation } from "./navigation/session/pop-state-navigation";
|
|
12
12
|
import { PlaceAuthService } from "./place-auth-service";
|
|
13
|
+
import { PlaceComponent } from "./place-component";
|
|
13
14
|
import { PlaceHistory } from "./place-history";
|
|
14
15
|
import { UrlService } from "./url-service";
|
|
15
16
|
import { Visit } from "./visit";
|
|
@@ -46,28 +47,31 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
46
47
|
this.interactionService = interactionService;
|
|
47
48
|
this.urlService = urlService;
|
|
48
49
|
this.placeHistory = placeHistory;
|
|
49
|
-
if (window[
|
|
50
|
-
window[
|
|
50
|
+
if (window['Cypress']) {
|
|
51
|
+
window['aup.PlaceRouter'] = this;
|
|
51
52
|
}
|
|
52
|
-
this.routerInteractionAdapter =
|
|
53
|
+
this.routerInteractionAdapter =
|
|
54
|
+
interactionService.registerPlaceRouter(this);
|
|
53
55
|
// TODO: Make this an interface and use 'this' instead.
|
|
54
56
|
this.navigationContext = new NavigationContext.Impl(this.urlService, this.routerInteractionAdapter, (urlSnapshot, options) => {
|
|
55
57
|
return this.navigateByUrl(urlSnapshot, options);
|
|
56
|
-
}, state => {
|
|
58
|
+
}, (state) => {
|
|
57
59
|
this.transitionTo(state);
|
|
58
|
-
}, segments => {
|
|
60
|
+
}, (segments) => {
|
|
59
61
|
this.routingSessionFinished(segments);
|
|
60
62
|
});
|
|
61
63
|
const { chain } = Dsl.disposeWith(this);
|
|
62
64
|
this.navigationInProgress$ = chain(this.navigationSession$).isNotNil();
|
|
63
|
-
this.interactionSyncInProgress$ = chain(this.navigationSession$)
|
|
64
|
-
|
|
65
|
+
this.interactionSyncInProgress$ = chain(this.navigationSession$)
|
|
66
|
+
.pluck('isInteractionSync')
|
|
67
|
+
.otherwise(false);
|
|
68
|
+
const idleStateName = chain(this.interactionService.active).map((active) => active ? 'IdleDuringInteraction' : 'Idle');
|
|
65
69
|
this.navigationSessionName$ = chain(this.navigationSession$)
|
|
66
|
-
.pluck(
|
|
70
|
+
.pluck('name')
|
|
67
71
|
.otherwise(idleStateName);
|
|
68
|
-
DebugContext.tag(this._activeVisit$,
|
|
72
|
+
DebugContext.tag(this._activeVisit$, 'PlaceRouter.activeVisit');
|
|
69
73
|
// TODO: make setup the callbacks in during module initiation to make this testable.
|
|
70
|
-
angularRouter.events.subscribe(event => {
|
|
74
|
+
angularRouter.events.subscribe((event) => {
|
|
71
75
|
// Routing event sequence
|
|
72
76
|
// ======================
|
|
73
77
|
// NavigationStart -> .... -> NavigationCancel --> redirect, go around again in the same session
|
|
@@ -76,7 +80,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
76
80
|
// =======================
|
|
77
81
|
if (event instanceof NavigationStart) {
|
|
78
82
|
// console.log(`---> NavigationStart[${event.id}]: ${event.url} (${event.navigationTrigger})`);
|
|
79
|
-
if (event.navigationTrigger ===
|
|
83
|
+
if (event.navigationTrigger === 'popstate') {
|
|
80
84
|
this.onPopState(event);
|
|
81
85
|
}
|
|
82
86
|
else {
|
|
@@ -102,7 +106,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
102
106
|
});
|
|
103
107
|
// The router needs to know about url changes and in some cases they are the only way the router can know if
|
|
104
108
|
// the back button was clicked.
|
|
105
|
-
angularLocation.onUrlChange(url => this.onUrlChanged(url));
|
|
109
|
+
angularLocation.onUrlChange((url) => this.onUrlChanged(url));
|
|
106
110
|
}
|
|
107
111
|
postponeRoutingUntil(condition$) {
|
|
108
112
|
this._ready$.setDelegate(condition$);
|
|
@@ -139,22 +143,22 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
139
143
|
}
|
|
140
144
|
// @Trace()
|
|
141
145
|
onPopState(event) {
|
|
142
|
-
assert.isTruthy(event.navigationTrigger ===
|
|
146
|
+
assert.isTruthy(event.navigationTrigger === 'popstate');
|
|
143
147
|
if (this.currentSession) {
|
|
144
148
|
this.currentSession.onPopState(event);
|
|
145
149
|
}
|
|
146
150
|
else {
|
|
147
151
|
const poppedHistoryUrl = event.url;
|
|
148
152
|
const currentRouterUrl = this.urlService.getCurrentRouterUrl();
|
|
149
|
-
const session = this.interactionService.isActive()
|
|
150
|
-
new PopStateDuringInteractionNavigation(this.navigationContext, currentRouterUrl, poppedHistoryUrl)
|
|
151
|
-
new PopStateNavigation(this.navigationContext, currentRouterUrl, poppedHistoryUrl);
|
|
153
|
+
const session = this.interactionService.isActive()
|
|
154
|
+
? new PopStateDuringInteractionNavigation(this.navigationContext, currentRouterUrl, poppedHistoryUrl)
|
|
155
|
+
: new PopStateNavigation(this.navigationContext, currentRouterUrl, poppedHistoryUrl);
|
|
152
156
|
this.transitionTo(session);
|
|
153
157
|
}
|
|
154
158
|
}
|
|
155
159
|
// @Trace()
|
|
156
160
|
onRouterStarted(event) {
|
|
157
|
-
assert.isFalsey(event.navigationTrigger ===
|
|
161
|
+
assert.isFalsey(event.navigationTrigger === 'popstate');
|
|
158
162
|
// const inInteraction = this.interactionService.isActive();
|
|
159
163
|
if (this.currentSession) {
|
|
160
164
|
this.currentSession.onRouterStarted(event);
|
|
@@ -171,7 +175,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
171
175
|
this.currentSession.onUrlChange(newUrl);
|
|
172
176
|
}
|
|
173
177
|
else {
|
|
174
|
-
console.log(
|
|
178
|
+
console.log('FYI: url changed without a navigation session in progress');
|
|
175
179
|
}
|
|
176
180
|
// console.log(`<--- Url Changed`);
|
|
177
181
|
}
|
|
@@ -196,11 +200,11 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
196
200
|
// @Trace()
|
|
197
201
|
async doNavigation(visit, runNavigationCommands) {
|
|
198
202
|
if (this.navigationInProgress$.value) {
|
|
199
|
-
Logger.get().error(
|
|
203
|
+
Logger.get().error('Navigation already in progress', {
|
|
200
204
|
visit: visit,
|
|
201
|
-
session: this.navigationSession
|
|
205
|
+
session: this.navigationSession,
|
|
202
206
|
});
|
|
203
|
-
lang.illegalState(
|
|
207
|
+
lang.illegalState('Navigation already in progress');
|
|
204
208
|
}
|
|
205
209
|
else {
|
|
206
210
|
const navigation = this.createNavigationSession(this.urlService.getCurrentRouterUrl());
|
|
@@ -214,7 +218,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
214
218
|
// Check if the router has finished (in the case where no router change required) and we're still in a
|
|
215
219
|
// transient state and finish of the transition.
|
|
216
220
|
if (!this.angularRouter.getCurrentNavigation() && this.currentSession) {
|
|
217
|
-
this.currentSession.onRouterEnd(new NavigationEnd(-1,
|
|
221
|
+
this.currentSession.onRouterEnd(new NavigationEnd(-1, '', this.urlService.getCurrentRouterUrl()));
|
|
218
222
|
}
|
|
219
223
|
}
|
|
220
224
|
}
|
|
@@ -225,6 +229,10 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
225
229
|
get activeVisit$() {
|
|
226
230
|
return this._activeVisit$.readonly$;
|
|
227
231
|
}
|
|
232
|
+
filterAuthorizedPlaces(places, options) {
|
|
233
|
+
const { chain } = Dsl.disposeWith(options.disposedWith);
|
|
234
|
+
return chain(this.authService.accessGuard$).mapToList((g) => places.filter((p) => g.isAuthorised(PlaceComponent.getDefinition(p))));
|
|
235
|
+
}
|
|
228
236
|
async notifyVisitSegmentChanged(is, was) {
|
|
229
237
|
// console.log("PlaceRouter.notifyVisitSegmentChanged", is.toDebugString(), was.toDebugString());
|
|
230
238
|
this.placeHistory.updateVisitSegment(is);
|
|
@@ -234,16 +242,18 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
234
242
|
// TODO: can I just do a regular navigate using an updated visit?
|
|
235
243
|
// const {when} = Dsl.disposeWith(this);
|
|
236
244
|
await this.doNavigation(visit, () => {
|
|
237
|
-
const urlSnapshot = this.urlService
|
|
245
|
+
const urlSnapshot = this.urlService
|
|
246
|
+
.parseUrl(this.angularRouter.routerState.snapshot.url)
|
|
247
|
+
.updateVisitSegment(is);
|
|
238
248
|
return this.navigateByUrl(urlSnapshot);
|
|
239
249
|
});
|
|
240
250
|
}
|
|
241
251
|
}
|
|
242
252
|
createNavigationSession(currentRouterUrl) {
|
|
243
253
|
const inInteraction = this.interactionService.isActive();
|
|
244
|
-
return inInteraction
|
|
245
|
-
new NavigatingDuringInteraction(this.navigationContext, currentRouterUrl)
|
|
246
|
-
new Navigating(this.navigationContext, currentRouterUrl);
|
|
254
|
+
return inInteraction
|
|
255
|
+
? new NavigatingDuringInteraction(this.navigationContext, currentRouterUrl)
|
|
256
|
+
: new Navigating(this.navigationContext, currentRouterUrl);
|
|
247
257
|
}
|
|
248
258
|
// @Trace()
|
|
249
259
|
transitionTo(next) {
|
|
@@ -273,7 +283,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
273
283
|
session.dispose();
|
|
274
284
|
this.navigationSession$.value = null;
|
|
275
285
|
// console.log(`### Router Session Finished (was ${session.toString()})`);
|
|
276
|
-
this.sessionFinishedJobs.forEach(job => job());
|
|
286
|
+
this.sessionFinishedJobs.forEach((job) => job());
|
|
277
287
|
this.sessionFinishedJobs = [];
|
|
278
288
|
}
|
|
279
289
|
runAfterRoutingSessionFinishes(func) {
|
|
@@ -304,7 +314,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
304
314
|
});
|
|
305
315
|
}
|
|
306
316
|
else {
|
|
307
|
-
return new Promise((
|
|
317
|
+
return new Promise((resolve) => {
|
|
308
318
|
// console.log(`No navigation in progress, starting synchronisation job`);
|
|
309
319
|
this.runAfterRoutingSessionFinishes(() => {
|
|
310
320
|
onSyncComplete();
|
|
@@ -312,7 +322,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
312
322
|
});
|
|
313
323
|
const session = new SynchroniseInteractionContextIdsWithRoute(this.navigationContext, this.urlService.getCurrentRouterUrl(), false);
|
|
314
324
|
this.transitionTo(session);
|
|
315
|
-
})
|
|
325
|
+
});
|
|
316
326
|
}
|
|
317
327
|
}
|
|
318
328
|
toVisit(visitOrPlaceComponent, params) {
|
|
@@ -324,12 +334,12 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
324
334
|
}
|
|
325
335
|
}
|
|
326
336
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, deps: [{ token: i1.Router }, { token: i2.Location }, { token: i3.InteractionService }, { token: i4.UrlService }, { token: i5.PlaceHistory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
327
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, providedIn:
|
|
337
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, providedIn: 'root' });
|
|
328
338
|
}
|
|
329
339
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, decorators: [{
|
|
330
340
|
type: Injectable,
|
|
331
341
|
args: [{
|
|
332
|
-
providedIn:
|
|
342
|
+
providedIn: 'root',
|
|
333
343
|
}]
|
|
334
344
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: i3.InteractionService }, { type: i4.UrlService }, { type: i5.PlaceHistory }]; } });
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2Utcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQUUsb0JBQW9CLEVBQ2xDLEdBQUcsRUFDSCxnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLE1BQU0sRUFDTixpQkFBaUIsRUFHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUM1RyxPQUFPLEVBQ0wsbUNBQW1DLEVBQ3BDLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxFQUNMLHlDQUF5QyxFQUMxQyxNQUFNLGtGQUFrRixDQUFDO0FBQzFGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztB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RSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNwSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FFTDtJQUNILENBQUM7SUFFTyxPQUFPLENBQUMscUJBQTRELEVBQUUsTUFBZ0M7UUFDNUcsSUFBSSxxQkFBcUIsWUFBWSxLQUFLLEVBQUU7WUFDMUMsT0FBTyxxQkFBcUIsQ0FBQztTQUM5QjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQzt1R0F4VlUsV0FBVzsyR0FBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25FeHRyYXMsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90XG59IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgRGVidWdDb250ZXh0LCBEZWxlZ2F0aW5nVmFsdWVNb2RlbCxcbiAgRHNsLFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBsYW5nLFxuICBMb2dnZXIsXG4gIE11dGFibGVWYWx1ZU1vZGVsLCBUcmFuc2FjdGlvbk9ic2VydmVyLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQge0NvbnN0cnVjdGFibGV9IGZyb20gXCJAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzXCI7XG5pbXBvcnQge0ludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyfSBmcm9tIFwiLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24tc2VydmljZS1yb3V0aW5nLWFkYXB0ZXJcIjtcbmltcG9ydCB7SW50ZXJhY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24uc2VydmljZVwiO1xuaW1wb3J0IHtOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvbmF2aWdhdGluZy1kdXJpbmctaW50ZXJhY3Rpb25cIjtcbmltcG9ydCB7XG4gIFBvcFN0YXRlRHVyaW5nSW50ZXJhY3Rpb25OYXZpZ2F0aW9uXG59IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvcG9wLXN0YXRlLWR1cmluZy1pbnRlcmFjdGlvbi1uYXZpZ2F0aW9uXCI7XG5pbXBvcnQge1xuICBTeW5jaHJvbmlzZUludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZVxufSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vaW50ZXJhY3Rpb25zL3N5bmNocm9uaXNlLWludGVyYWN0aW9uLWNvbnRleHQtaWRzLXdpdGgtcm91dGVcIjtcbmltcG9ydCB7TmF2aWdhdGluZ30gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpbmdcIjtcbmltcG9ydCB7TmF2aWdhdGlvbkNvbnRleHR9IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9uYXZpZ2F0aW9uLWNvbnRleHRcIjtcbmltcG9ydCB7TmF2aWdhdGlvblNlc3Npb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9uYXZpZ2F0aW9uLXNlc3Npb25cIjtcbmltcG9ydCB7UG9wU3RhdGVOYXZpZ2F0aW9ufSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vcG9wLXN0YXRlLW5hdmlnYXRpb25cIjtcbmltcG9ydCB7UGxhY2VBdXRoU2VydmljZX0gZnJvbSBcIi4vcGxhY2UtYXV0aC1zZXJ2aWNlXCI7XG5pbXBvcnQge1BsYWNlQ29tcG9uZW50fSBmcm9tIFwiLi9wbGFjZS1jb21wb25lbnRcIjtcbmltcG9ydCB7UGxhY2VIaXN0b3J5fSBmcm9tIFwiLi9wbGFjZS1oaXN0b3J5XCI7XG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuL3VybC1zZXJ2aWNlXCI7XG5pbXBvcnQge1VybFNuYXBzaG90fSBmcm9tIFwiLi91cmwtc25hcHNob3RcIjtcbmltcG9ydCB7VmlzaXR9IGZyb20gXCIuL3Zpc2l0XCI7XG5pbXBvcnQge1Zpc2l0U2VnbWVudH0gZnJvbSBcIi4vdmlzaXQtc2VnbWVudFwiO1xuXG4vLyBmdW5jdGlvbiBhc0FycmF5PFQ+KGl0ZW06IFQgfCBUW10pOiBUW10ge1xuLy8gICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbaXRlbV07XG4vLyB9XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbiQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblNlc3Npb24+KCk7XG4gIHJlYWRvbmx5IG5hdmlnYXRpb25JblByb2dyZXNzJDogVmFsdWVNb2RlbENoYWluPGJvb2xlYW4+O1xuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbk5hbWUkOiBWYWx1ZU1vZGVsQ2hhaW48c3RyaW5nPjsgLy8gdXNlZCBieSB0ZXN0c1xuICByZWFkb25seSBpbnRlcmFjdGlvblN5bmNJblByb2dyZXNzJDogVmFsdWVNb2RlbDxib29sZWFuPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IG5hdmlnYXRpb25Db250ZXh0OiBOYXZpZ2F0aW9uQ29udGV4dC5JbXBsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0JCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxWaXNpdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXI6IEludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyO1xuICBwcml2YXRlIHNlc3Npb25GaW5pc2hlZEpvYnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBuZXcgUGxhY2VBdXRoU2VydmljZSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWR5JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxib29sZWFuPigpLndpdGhEZWZhdWx0KHRydWUpKTtcbiAgcmVhZG9ubHkgcmVhZHkkID0gdGhpcy5fcmVhZHkkLnJlYWRvbmx5JDtcblxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhclJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJMb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25TZXJ2aWNlOiBJbnRlcmFjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsU2VydmljZTogVXJsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGFjZUhpc3Rvcnk6IFBsYWNlSGlzdG9yeSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAod2luZG93W1wiQ3lwcmVzc1wiXSkge1xuICAgICAgd2luZG93W1wiYXVwLlBsYWNlUm91dGVyXCJdID0gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLnJvdXRlckludGVyYWN0aW9uQWRhcHRlciA9IGludGVyYWN0aW9uU2VydmljZS5yZWdpc3RlclBsYWNlUm91dGVyKHRoaXMpO1xuXG4gICAgLy8gVE9ETzogTWFrZSB0aGlzIGFuIGludGVyZmFjZSBhbmQgdXNlICd0aGlzJyBpbnN0ZWFkLlxuICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQgPSBuZXcgTmF2aWdhdGlvbkNvbnRleHQuSW1wbChcbiAgICAgIHRoaXMudXJsU2VydmljZSxcbiAgICAgIHRoaXMucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyLFxuICAgICAgKHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCwgb3B0aW9uczogeyByZXBsYWNlVXJsOiBib29sZWFuIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCwgb3B0aW9ucyk7XG4gICAgICB9LFxuICAgICAgc3RhdGUgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25UbyhzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgc2VnbWVudHMgPT4ge1xuICAgICAgICB0aGlzLnJvdXRpbmdTZXNzaW9uRmluaXNoZWQoc2VnbWVudHMpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpLmlzTm90TmlsKCk7XG4gICAgdGhpcy5pbnRlcmFjdGlvblN5bmNJblByb2dyZXNzJCA9IGNoYWluKHRoaXMubmF2aWdhdGlvblNlc3Npb24kKS5wbHVjayhcImlzSW50ZXJhY3Rpb25TeW5jXCIpLm90aGVyd2lzZShmYWxzZSlcblxuICAgIGNvbnN0IGlkbGVTdGF0ZU5hbWUgPSBjaGFpbih0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmUpLm1hcChhY3RpdmUgPT4gYWN0aXZlID8gXCJJZGxlRHVyaW5nSW50ZXJhY3Rpb25cIiA6IFwiSWRsZVwiKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uTmFtZSQgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uJClcbiAgICAgIC5wbHVjayhcIm5hbWVcIilcbiAgICAgIC5vdGhlcndpc2UoaWRsZVN0YXRlTmFtZSk7XG5cbiAgICBEZWJ1Z0NvbnRleHQudGFnKHRoaXMuX2FjdGl2ZVZpc2l0JCwgXCJQbGFjZVJvdXRlci5hY3RpdmVWaXNpdFwiKTtcblxuICAgIC8vIFRPRE86IG1ha2Ugc2V0dXAgdGhlIGNhbGxiYWNrcyBpbiBkdXJpbmcgbW9kdWxlIGluaXRpYXRpb24gdG8gbWFrZSB0aGlzIHRlc3RhYmxlLlxuICAgIGFuZ3VsYXJSb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAvLyBSb3V0aW5nIGV2ZW50IHNlcXVlbmNlXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIC0tPiByZWRpcmVjdCwgZ28gYXJvdW5kIGFnYWluIGluIHRoZSBzYW1lIHNlc3Npb25cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FbmQgLS0+IG5hdmlnYXRpb24gY29tcGxldGUsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVycm9yIC0tPiBuYXZpZ2F0aW9uIGFib3J0ZWQsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBOYXZpZ2F0aW9uU3RhcnRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH0gKCR7ZXZlbnQubmF2aWdhdGlvblRyaWdnZXJ9KWApO1xuICAgICAgICBpZiAoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09IFwicG9wc3RhdGVcIikge1xuICAgICAgICAgIHRoaXMub25Qb3BTdGF0ZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVuZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBOYXZpZ2F0aW9uRXJyb3JbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkVycm9yWyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9YCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRoZSByb3V0ZXIgbmVlZHMgdG8ga25vdyBhYm91dCB1cmwgY2hhbmdlcyBhbmQgaW4gc29tZSBjYXNlcyB0aGV5IGFyZSB0aGUgb25seSB3YXkgdGhlIHJvdXRlciBjYW4ga25vdyBpZlxuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiB3YXMgY2xpY2tlZC5cbiAgICBhbmd1bGFyTG9jYXRpb24ub25VcmxDaGFuZ2UodXJsID0+IHRoaXMub25VcmxDaGFuZ2VkKHVybCkpO1xuXG4gIH1cblxuICBwb3N0cG9uZVJvdXRpbmdVbnRpbChjb25kaXRpb24kOiBWYWx1ZU1vZGVsPGJvb2xlYW4+KSB7XG4gICAgdGhpcy5fcmVhZHkkLnNldERlbGVnYXRlKGNvbmRpdGlvbiQpXG4gIH1cblxuICBhc3luYyBnZXRBdXRoZW50aWNhdGlvbkZhaWx1cmVSZWRpcmVjdChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPFZpc2l0PiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aGVudGljYXRpb25GYWlsdXJlUmVkaXJlY3QoYWN0aXZhdGVkUm91dGUsIHN0YXRlKVxuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aG9yaXNhdGlvbkZhaWx1cmVSZWRpcmVjdE9wdGlvbnMoY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik6IFByb21pc2U8VmlzaXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcmlzYXRpb25GYWlsdXJlUmVkaXJlY3RPcHRpb25zKGNvbXBvbmVudCk7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblNlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlc3Npb24kLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZTtcbiAgfVxuXG4gIGlzTmF2aWdhdGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQudmFsdWU7XG4gIH1cblxuICBhc3luYyB3YWl0VW50aWxSb3V0ZXJSZWFkeSgpIHtcbiAgICBjb25zdCB7d2FpdFVudGlsfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5yZWFkeSQpLmJlY29tZXNUcnV0aHkoKVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgd2FpdFVudGlsSWRsZSgpOiBQcm9taXNlPHRoaXM+IHtcbiAgICBjb25zdCB7d2FpdFVudGlsfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRBY3Rpdml0aWVzU3luY2hyb25pc2VkKCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IHt3YWl0VW50aWx9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIGF3YWl0IHdhaXRVbnRpbCh0aGlzLmludGVyYWN0aW9uU3luY0luUHJvZ3Jlc3MkKS5iZWNvbWVzRmFsc2V5KClcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGFzc2VydC5pc1RydXRoeShldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gXCJwb3BzdGF0ZVwiKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblBvcFN0YXRlKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcG9wcGVkSGlzdG9yeVVybCA9IGV2ZW50LnVybDtcbiAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZXJVcmwgPSB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgUG9wU3RhdGVEdXJpbmdJbnRlcmFjdGlvbk5hdmlnYXRpb24odGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCwgcG9wcGVkSGlzdG9yeVVybCkgOlxuICAgICAgICBuZXcgUG9wU3RhdGVOYXZpZ2F0aW9uKHRoaXMubmF2aWdhdGlvbkNvbnRleHQsIGN1cnJlbnRSb3V0ZXJVcmwsIHBvcHBlZEhpc3RvcnlVcmwpO1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGFzc2VydC5pc0ZhbHNleShldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gXCJwb3BzdGF0ZVwiKTtcbiAgICAvLyBjb25zdCBpbkludGVyYWN0aW9uID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCkpKTtcbiAgICB9XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblVybENoYW5nZWQobmV3VXJsOiBzdHJpbmcpIHtcbiAgICAvLyB0aGUgYmFjayBidXR0b24gY2FuIHRyaWdnZXIgYSB1cmwgY2hhbmdlIHdpdGhvdXQgYSBuYXZpZ2F0aW9uIHNlc3Npb24gaW4gcHJvZ3Jlc3Mgc28gd2VcbiAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBVcmwgQ2hhbmdlZCAke25ld1VybH1gKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblVybENoYW5nZShuZXdVcmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkZZSTogdXJsIGNoYW5nZWQgd2l0aG91dCBhIG5hdmlnYXRpb24gc2Vzc2lvbiBpbiBwcm9ncmVzc1wiKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYDwtLS0gVXJsIENoYW5nZWRgKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRXJyb3IoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKGV2ZW50KTtcbiAgfVxuXG5cbiAgYXN5bmMgbmF2aWdhdGUodmlzaXQ6IFZpc2l0KVxuICBhc3luYyBuYXZpZ2F0ZShwbGFjZUNvbXBvbmVudDogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICBhc3luYyBuYXZpZ2F0ZSh2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLnRvVmlzaXQodmlzaXRPclBsYWNlQ29tcG9uZW50LCBwYXJhbXMpLmNvcHlXaXRoRGVmYXVsdHNGcm9tKHRoaXMuYWN0aXZlVmlzaXQkLnZhbHVlKVxuICAgIHJldHVybiB0aGlzLmRvTmF2aWdhdGlvbih2aXNpdCwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5hbmd1bGFyUm91dGVyLm5hdmlnYXRlKHZpc2l0LmdldFJvdXRlckNvbW1hbmRzKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgYXN5bmMgZG9OYXZpZ2F0aW9uKHZpc2l0OiBWaXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IGFueSkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzJC52YWx1ZSkge1xuICAgICAgTG9nZ2VyLmdldCgpLmVycm9yKFwiTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCIsIHtcbiAgICAgICAgdmlzaXQ6IHZpc2l0LFxuICAgICAgICBzZXNzaW9uOiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uXG4gICAgICB9KTtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKFwiTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5jcmVhdGVOYXZpZ2F0aW9uU2Vzc2lvbih0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpKTtcbiAgICAgIG5hdmlnYXRpb24uaW5pdGlhbGlzZVZpc2l0U2VnbWVudHModmlzaXQpXG4gICAgICB0aGlzLnRyYW5zaXRpb25UbyhuYXZpZ2F0aW9uKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLmFuZ3VsYXJSb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgcm91dGVyIGhhcyBmaW5pc2hlZCAoaW4gdGhlIGNhc2Ugd2hlcmUgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgYW5kIHdlJ3JlIHN0aWxsIGluICBhXG4gICAgICAvLyB0cmFuc2llbnQgc3RhdGUgYW5kIGZpbmlzaCBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgIGlmICghdGhpcy5hbmd1bGFyUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgJiYgdGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCBcIlwiLCB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdDogVXJsU25hcHNob3QsIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gY29uc29sZS5sb2coYCMjIyBuYXZpZ2F0aW9uQnlVcmwgLT4gJHt1cmxTbmFwc2hvdC51cmxUcmVlLnRvU3RyaW5nKCl9YCk7XG4gICAgcmV0dXJuIHRoaXMuYW5ndWxhclJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90LnVybFRyZWUsIG5hdmlnYXRpb25FeHRyYXMpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZVZpc2l0JCgpOiBWYWx1ZU1vZGVsPFZpc2l0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVZpc2l0JC5yZWFkb25seSQ7XG4gIH1cblxuICBhc3luYyBub3RpZnlWaXNpdFNlZ21lbnRDaGFuZ2VkKGlzOiBWaXNpdFNlZ21lbnQsIHdhczogVmlzaXRTZWdtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJQbGFjZVJvdXRlci5ub3RpZnlWaXNpdFNlZ21lbnRDaGFuZ2VkXCIsIGlzLnRvRGVidWdTdHJpbmcoKSwgd2FzLnRvRGVidWdTdHJpbmcoKSk7XG4gICAgdGhpcy5wbGFjZUhpc3RvcnkudXBkYXRlVmlzaXRTZWdtZW50KGlzKTtcblxuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBjb25zdCB2aXNpdCA9IHRoaXMuYWN0aXZlVmlzaXQkLnZhbHVlLmNvcHlBbmRSZXBsYWNlU2VnbWVudChpcyk7XG4gICAgaWYgKGlzLmhhc1JvdXRpbmdDaGFuZ2VkRnJvbSh3YXMpKSB7XG4gICAgICAvLyBUT0RPOiBjYW4gSSBqdXN0IGRvIGEgcmVndWxhciBuYXZpZ2F0ZSB1c2luZyBhbiB1cGRhdGVkIHZpc2l0P1xuICAgICAgLy8gY29uc3Qge3doZW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgICAgYXdhaXQgdGhpcy5kb05hdmlnYXRpb24odmlzaXQsICgpID0+IHtcbiAgICAgICAgY29uc3QgdXJsU25hcHNob3QgPSB0aGlzLnVybFNlcnZpY2UucGFyc2VVcmwodGhpcy5hbmd1bGFyUm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCkudXBkYXRlVmlzaXRTZWdtZW50KGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgY3JlYXRlTmF2aWdhdGlvblNlc3Npb24oY3VycmVudFJvdXRlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblNlc3Npb24ge1xuICAgIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIHJldHVybiBpbkludGVyYWN0aW9uID9cbiAgICAgIG5ldyBOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCkgOlxuICAgICAgbmV3IE5hdmlnYXRpbmcodGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByb3RlY3RlZCB0cmFuc2l0aW9uVG8obmV4dDogTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubmF2aWdhdGlvblNlc3Npb24kLnZhbHVlO1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5Lm5vdGlmeU5hdmlnYXRpb25TdGFydGVkKCk7XG4gICAgfVxuICAgIGFzc2VydC5pc1RydXRoeShuZXh0ICE9PSBwcmV2aW91cyk7XG4gICAgLy8gTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGAjIyMgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMgPyBwcmV2aW91cy50b1N0cmluZygpIDogJ251bGwnfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZSA9IG5leHQ7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5kaXNwb3NlKCk7XG4gICAgfVxuICAgIG5leHQubm90aWZ5QWN0aXZlKCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByaXZhdGUgcm91dGluZ1Nlc3Npb25GaW5pc2hlZCh2aXNpdD86IFZpc2l0KSB7XG4gICAgaWYgKHZpc2l0KSB7XG4gICAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQudmFsdWUpO1xuICAgICAgdGhpcy5wbGFjZUhpc3Rvcnkubm90aWZ5TmF2aWdhdGlvbkZpbmlzaGVkKHZpc2l0KTtcbiAgICAgIC8vIFdlIHVwZGF0ZSB0aGUgYWN0aXZlIHZpc2l0cyBiZWZvcmUgd2UgZmluaXNoIHRoZSBzZXNzaW9uIHNvIHRoZVxuICAgICAgLy8gcGxhY2Ugb3V0bGV0cyBjYW4gaWdub3JlIHRoZSBpbmNvbWluZyBjaGFuZ2VzIHVudGlsIHRoaW5ncyBhcmUgc2V0dGxlZC5cbiAgICAgIHRoaXMuX2FjdGl2ZVZpc2l0JC52YWx1ZSA9IHZpc2l0O1xuICAgICAgLy8gY29uc29sZS5sb2codmlzaXQudG9EZWJ1Z1N0cmluZygpKVxuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jdXJyZW50U2Vzc2lvbjtcbiAgICBzZXNzaW9uLmRpc3Bvc2UoKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZSA9IG51bGw7XG4gICAgLy8gY29uc29sZS5sb2coYCMjIyBSb3V0ZXIgU2Vzc2lvbiBGaW5pc2hlZCAod2FzICR7c2Vzc2lvbi50b1N0cmluZygpfSlgKTtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMuZm9yRWFjaChqb2IgPT4gam9iKCkpO1xuICAgIHRoaXMuc2Vzc2lvbkZpbmlzaGVkSm9icyA9IFtdO1xuICB9XG5cblxuICBwcml2YXRlIHJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcyhmdW5jOiAoKSA9PiB2b2lkKSB7XG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkKTtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMucHVzaChmdW5jKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFN5bmMncyB0aGUgY3VycmVudCBpbnRlcmFjdGlvbiBzdGF0ZSB3aXRoIHRoZSBVUkwuICBXZSBuZWVkIHRvIHB1c2ggc29tZXRoaW5nIGluIHRoZSBVUkwgaW4gb3JkZXJcbiAgICogdG8gYmUgYWJsZSB0byBjYXB0dXJlIHRoZSBiYWNrIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZS4gIElmIHdlIGRvbid0IHRoZW4gdGhlIGJhY2sgY2xpY2sgd2lsbCBleGl0XG4gICAqIHRoZSBhcHAgZGlyZWN0bHkgYW5kIHdlIGRvbid0IGdldCB0byBhc2suXG4gICAqL1xuICAvLyBAVHJhY2UoKVxuICBzeW5jSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlcihvblN5bmNDb21wbGV0ZTogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAvLyBub29wXG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbikge1xuICAgICAgLy8gY29uc29sZS5sb2coYE5hdmlnYXRpb24gYWN0aXZlIC0+ICR7dGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi50b1N0cmluZygpfSwgc3luYyBkZWxheWVkIHVudGlsIGZpbmlzaGVkLmApO1xuICAgICAgLy8gY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKCgpID0+IHtcbiAgICAgICAgICAgIG9uU3luY0NvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3luY1Nlc3Npb24gPSBuZXcgU3luY2hyb25pc2VJbnRlcmFjdGlvbkNvbnRleHRJZHNXaXRoUm91dGUodGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSwgZmFsc2UpO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN5bmNTZXNzaW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KCgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgTm8gbmF2aWdhdGlvbiBpbiBwcm9ncmVzcywgc3RhcnRpbmcgc3luY2hyb25pc2F0aW9uIGpvYmApO1xuICAgICAgICB0aGlzLnJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcygoKSA9PiB7XG4gICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlKHRoaXMubmF2aWdhdGlvbkNvbnRleHQsIHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksIGZhbHNlKTtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgICB9KSk7XG5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvVmlzaXQodmlzaXRPclBsYWNlQ29tcG9uZW50OiBWaXNpdCB8IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+LCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIGlmICh2aXNpdE9yUGxhY2VDb21wb25lbnQgaW5zdGFuY2VvZiBWaXNpdCkge1xuICAgICAgcmV0dXJuIHZpc2l0T3JQbGFjZUNvbXBvbmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFZpc2l0LmdvdG8odmlzaXRPclBsYWNlQ29tcG9uZW50LCBwYXJhbXMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlUm91dGVyIHtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlZGlyZWN0aW9ucyB7XG4gICAgLyoqXG4gICAgICogTk9URTogZm9yIG5vdyB0aGlzIG9ubHkgc3VwcG9ydHMgdG9wIGxldmVsIHBsYWNlcy4gIFN1cHBvcnQgZm9yIGNoaWxkIHBsYWNlcyB3aWxsIHJlcXVpcmUgYSBtb3JlIGZ1bmRhbWVudGFsXG4gICAgICogY2hhbmdlIHRvIHZpc2l0cyB0byBzdXBwb3J0IG5lc3RpbmdcbiAgICAgKi9cbiAgICBvbkF1dGhlbnRpY2F0aW9uRmFpbHVyZShhY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBOT1RFOiBmb3Igbm93IHRoaXMgb25seSBzdXBwb3J0cyB0b3AgbGV2ZWwgcGxhY2VzLiAgU3VwcG9ydCBmb3IgY2hpbGQgcGxhY2VzIHdpbGwgcmVxdWlyZSBhIG1vcmUgZnVuZGFtZW50YWxcbiAgICAgKiBjaGFuZ2UgdG8gdmlzaXRzIHRvIHN1cHBvcnQgbmVzdGluZ1xuICAgICAqIEBwYXJhbSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBvbkF1dGhvcmlzYXRpb25GYWlsdXJlKGNvbXBvbmVudDogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4pOiAoQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4gfCBWaXNpdClbXTtcbiAgfVxufVxuIl19
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2Utcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQUUsb0JBQW9CLEVBQ2xDLEdBQUcsRUFDSCxnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLE1BQU0sRUFDTixpQkFBaUIsRUFHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUM1RyxPQUFPLEVBQ0wsbUNBQW1DLEVBQ3BDLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxFQUNMLHlDQUF5QyxFQUMxQyxNQUFNLGtGQUFrRixDQUFDO0FBQzFGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFD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Q0FDL0QsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEVBQ3JDLEtBQUssQ0FDTixDQUFDO29CQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNuQywwRUFBMEU7Z0JBQzFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUU7b0JBQ3ZDLGNBQWMsRUFBRSxDQUFDO29CQUNqQixPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLHlDQUF5QyxDQUMzRCxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsRUFDckMsS0FBSyxDQUNOLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLE9BQU8sQ0FDYixxQkFBNEQsRUFDNUQsTUFBZ0M7UUFFaEMsSUFBSSxxQkFBcUIsWUFBWSxLQUFLLEVBQUU7WUFDMUMsT0FBTyxxQkFBcUIsQ0FBQztTQUM5QjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQzt1R0E3WlUsV0FBVzsyR0FBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25FeHRyYXMsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90XG59IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgRGVidWdDb250ZXh0LCBEZWxlZ2F0aW5nVmFsdWVNb2RlbCwgRGlzcG9zYWJsZSwgRGlzcG9zZWRXaXRoLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIGxhbmcsIExpc3RNb2RlbCxcbiAgTG9nZ2VyLFxuICBNdXRhYmxlVmFsdWVNb2RlbCwgVHJhbnNhY3Rpb25PYnNlcnZlcixcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluXG59IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7Q29uc3RydWN0YWJsZX0gZnJvbSBcIkBjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXNcIjtcbmltcG9ydCB7IERpc3Bvc2FibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2Rpc3Bvc2FibGUtY29tcG9uZW50JztcbmltcG9ydCB7SW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXJ9IGZyb20gXCIuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi1zZXJ2aWNlLXJvdXRpbmctYWRhcHRlclwiO1xuaW1wb3J0IHtJbnRlcmFjdGlvblNlcnZpY2V9IGZyb20gXCIuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge05hdmlnYXRpbmdEdXJpbmdJbnRlcmFjdGlvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL2ludGVyYWN0aW9ucy9uYXZpZ2F0aW5nLWR1cmluZy1pbnRlcmFjdGlvblwiO1xuaW1wb3J0IHtcbiAgUG9wU3RhdGVEdXJpbmdJbnRlcmFjdGlvbk5hdmlnYXRpb25cbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL2ludGVyYWN0aW9ucy9wb3Atc3RhdGUtZHVyaW5nLWludGVyYWN0aW9uLW5hdmlnYXRpb25cIjtcbmltcG9ydCB7XG4gIFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlXG59IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvc3luY2hyb25pc2UtaW50ZXJhY3Rpb24tY29udGV4dC1pZHMtd2l0aC1yb3V0ZVwiO1xuaW1wb3J0IHtOYXZpZ2F0aW5nfSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vbmF2aWdhdGluZ1wiO1xuaW1wb3J0IHtOYXZpZ2F0aW9uQ29udGV4dH0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tY29udGV4dFwiO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU2Vzc2lvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvblwiO1xuaW1wb3J0IHtQb3BTdGF0ZU5hdmlnYXRpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9wb3Atc3RhdGUtbmF2aWdhdGlvblwiO1xuaW1wb3J0IHtQbGFjZUF1dGhTZXJ2aWNlfSBmcm9tIFwiLi9wbGFjZS1hdXRoLXNlcnZpY2VcIjtcbmltcG9ydCB7UGxhY2VDb21wb25lbnR9IGZyb20gXCIuL3BsYWNlLWNvbXBvbmVudFwiO1xuaW1wb3J0IHtQbGFjZUhpc3Rvcnl9IGZyb20gXCIuL3BsYWNlLWhpc3RvcnlcIjtcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vdXJsLXNlcnZpY2VcIjtcbmltcG9ydCB7VXJsU25hcHNob3R9IGZyb20gXCIuL3VybC1zbmFwc2hvdFwiO1xuaW1wb3J0IHtWaXNpdH0gZnJvbSBcIi4vdmlzaXRcIjtcbmltcG9ydCB7VmlzaXRTZWdtZW50fSBmcm9tIFwiLi92aXNpdC1zZWdtZW50XCI7XG5cbi8vIGZ1bmN0aW9uIGFzQXJyYXk8VD4oaXRlbTogVCB8IFRbXSk6IFRbXSB7XG4vLyAgIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gaXRlbSA6IFtpdGVtXTtcbi8vIH1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBsYWNlUm91dGVyIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG4gIHJlYWRvbmx5IG5hdmlnYXRpb25TZXNzaW9uJCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU2Vzc2lvbj4oKTtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvbkluUHJvZ3Jlc3MkOiBWYWx1ZU1vZGVsQ2hhaW48Ym9vbGVhbj47XG4gIHJlYWRvbmx5IG5hdmlnYXRpb25TZXNzaW9uTmFtZSQ6IFZhbHVlTW9kZWxDaGFpbjxzdHJpbmc+OyAvLyB1c2VkIGJ5IHRlc3RzXG4gIHJlYWRvbmx5IGludGVyYWN0aW9uU3luY0luUHJvZ3Jlc3MkOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbmF2aWdhdGlvbkNvbnRleHQ6IE5hdmlnYXRpb25Db250ZXh0LkltcGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlVmlzaXQkID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPFZpc2l0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlckludGVyYWN0aW9uQWRhcHRlcjogSW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXI7XG4gIHByaXZhdGUgc2Vzc2lvbkZpbmlzaGVkSm9iczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICByZWFkb25seSBhdXRoU2VydmljZSA9IG5ldyBQbGFjZUF1dGhTZXJ2aWNlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZHkkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUoXG4gICAgbmV3IERlbGVnYXRpbmdWYWx1ZU1vZGVsPGJvb2xlYW4+KCkud2l0aERlZmF1bHQodHJ1ZSlcbiAgKTtcbiAgcmVhZG9ubHkgcmVhZHkkID0gdGhpcy5fcmVhZHkkLnJlYWRvbmx5JDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJSb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJMb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnRlcmFjdGlvblNlcnZpY2U6IEludGVyYWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybFNlcnZpY2U6IFVybFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwbGFjZUhpc3Rvcnk6IFBsYWNlSGlzdG9yeVxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKHdpbmRvd1snQ3lwcmVzcyddKSB7XG4gICAgICB3aW5kb3dbJ2F1cC5QbGFjZVJvdXRlciddID0gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLnJvdXRlckludGVyYWN0aW9uQWRhcHRlciA9XG4gICAgICBpbnRlcmFjdGlvblNlcnZpY2UucmVnaXN0ZXJQbGFjZVJvdXRlcih0aGlzKTtcblxuICAgIC8vIFRPRE86IE1ha2UgdGhpcyBhbiBpbnRlcmZhY2UgYW5kIHVzZSAndGhpcycgaW5zdGVhZC5cbiAgICB0aGlzLm5hdmlnYXRpb25Db250ZXh0ID0gbmV3IE5hdmlnYXRpb25Db250ZXh0LkltcGwoXG4gICAgICB0aGlzLnVybFNlcnZpY2UsXG4gICAgICB0aGlzLnJvdXRlckludGVyYWN0aW9uQWRhcHRlcixcbiAgICAgICh1cmxTbmFwc2hvdDogVXJsU25hcHNob3QsIG9wdGlvbnM6IHsgcmVwbGFjZVVybDogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QsIG9wdGlvbnMpO1xuICAgICAgfSxcbiAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25UbyhzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgKHNlZ21lbnRzKSA9PiB7XG4gICAgICAgIHRoaXMucm91dGluZ1Nlc3Npb25GaW5pc2hlZChzZWdtZW50cyk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHsgY2hhaW4gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzJCA9IGNoYWluKHRoaXMubmF2aWdhdGlvblNlc3Npb24kKS5pc05vdE5pbCgpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25TeW5jSW5Qcm9ncmVzcyQgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uJClcbiAgICAgIC5wbHVjaygnaXNJbnRlcmFjdGlvblN5bmMnKVxuICAgICAgLm90aGVyd2lzZShmYWxzZSk7XG5cbiAgICBjb25zdCBpZGxlU3RhdGVOYW1lID0gY2hhaW4odGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuYWN0aXZlKS5tYXAoKGFjdGl2ZSkgPT5cbiAgICAgIGFjdGl2ZSA/ICdJZGxlRHVyaW5nSW50ZXJhY3Rpb24nIDogJ0lkbGUnXG4gICAgKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uTmFtZSQgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uJClcbiAgICAgIC5wbHVjaygnbmFtZScpXG4gICAgICAub3RoZXJ3aXNlKGlkbGVTdGF0ZU5hbWUpO1xuXG4gICAgRGVidWdDb250ZXh0LnRhZyh0aGlzLl9hY3RpdmVWaXNpdCQsICdQbGFjZVJvdXRlci5hY3RpdmVWaXNpdCcpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBzZXR1cCB0aGUgY2FsbGJhY2tzIGluIGR1cmluZyBtb2R1bGUgaW5pdGlhdGlvbiB0byBtYWtlIHRoaXMgdGVzdGFibGUuXG4gICAgYW5ndWxhclJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gUm91dGluZyBldmVudCBzZXF1ZW5jZVxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkNhbmNlbCAtLT4gcmVkaXJlY3QsIGdvIGFyb3VuZCBhZ2FpbiBpbiB0aGUgc2FtZSBzZXNzaW9uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRW5kIC0tPiBuYXZpZ2F0aW9uIGNvbXBsZXRlLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FcnJvciAtLT4gbmF2aWdhdGlvbiBhYm9ydGVkLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYC0tLT4gTmF2aWdhdGlvblN0YXJ0WyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9ICgke2V2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyfSlgKTtcbiAgICAgICAgaWYgKGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSB7XG4gICAgICAgICAgdGhpcy5vblBvcFN0YXRlKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm91dGVyU3RhcnRlZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvblN0YXJ0WyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9ICgke2V2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyfSlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYC0tLT4gTmF2aWdhdGlvbkVuZFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICB0aGlzLm9uUm91dGVyRW5kKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkVuZFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25FcnJvclske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICB0aGlzLm9uUm91dGVyRXJyb3IoZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgPC0tLSBOYXZpZ2F0aW9uRXJyb3JbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYC0tLT4gTmF2aWdhdGlvbkNhbmNlbFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICB0aGlzLm9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkNhbmNlbFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHJvdXRlciBuZWVkcyB0byBrbm93IGFib3V0IHVybCBjaGFuZ2VzIGFuZCBpbiBzb21lIGNhc2VzIHRoZXkgYXJlIHRoZSBvbmx5IHdheSB0aGUgcm91dGVyIGNhbiBrbm93IGlmXG4gICAgLy8gdGhlIGJhY2sgYnV0dG9uIHdhcyBjbGlja2VkLlxuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSgodXJsKSA9PiB0aGlzLm9uVXJsQ2hhbmdlZCh1cmwpKTtcbiAgfVxuXG4gIHBvc3Rwb25lUm91dGluZ1VudGlsKGNvbmRpdGlvbiQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj4pIHtcbiAgICB0aGlzLl9yZWFkeSQuc2V0RGVsZWdhdGUoY29uZGl0aW9uJCk7XG4gIH1cblxuICBhc3luYyBnZXRBdXRoZW50aWNhdGlvbkZhaWx1cmVSZWRpcmVjdChcbiAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICApOiBQcm9taXNlPFZpc2l0PiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aGVudGljYXRpb25GYWlsdXJlUmVkaXJlY3QoXG4gICAgICBhY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIHN0YXRlXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhvcmlzYXRpb25GYWlsdXJlUmVkaXJlY3RPcHRpb25zKFxuICAgIGNvbXBvbmVudDogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD5cbiAgKTogUHJvbWlzZTxWaXNpdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXNhdGlvbkZhaWx1cmVSZWRpcmVjdE9wdGlvbnMoY29tcG9uZW50KTtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uU2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWU7XG4gIH1cblxuICBnZXQgY3VycmVudFNlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlc3Npb24kLnZhbHVlO1xuICB9XG5cbiAgaXNOYXZpZ2F0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzJC52YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRVbnRpbFJvdXRlclJlYWR5KCkge1xuICAgIGNvbnN0IHsgd2FpdFVudGlsIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgYXdhaXQgd2FpdFVudGlsKHRoaXMucmVhZHkkKS5iZWNvbWVzVHJ1dGh5KCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyB3YWl0VW50aWxJZGxlKCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IHsgd2FpdFVudGlsIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgYXdhaXQgd2FpdFVudGlsKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkKS5iZWNvbWVzRmFsc2V5KCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyB3YWl0QWN0aXZpdGllc1N5bmNocm9uaXNlZCgpOiBQcm9taXNlPHRoaXM+IHtcbiAgICBjb25zdCB7IHdhaXRVbnRpbCB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIGF3YWl0IHdhaXRVbnRpbCh0aGlzLmludGVyYWN0aW9uU3luY0luUHJvZ3Jlc3MkKS5iZWNvbWVzRmFsc2V5KCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUG9wU3RhdGUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb3BwZWRIaXN0b3J5VXJsID0gZXZlbnQudXJsO1xuICAgICAgY29uc3QgY3VycmVudFJvdXRlclVybCA9IHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKVxuICAgICAgICA/IG5ldyBQb3BTdGF0ZUR1cmluZ0ludGVyYWN0aW9uTmF2aWdhdGlvbihcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgICBjdXJyZW50Um91dGVyVXJsLFxuICAgICAgICAgICAgcG9wcGVkSGlzdG9yeVVybFxuICAgICAgICAgIClcbiAgICAgICAgOiBuZXcgUG9wU3RhdGVOYXZpZ2F0aW9uKFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnRSb3V0ZXJVcmwsXG4gICAgICAgICAgICBwb3BwZWRIaXN0b3J5VXJsXG4gICAgICAgICAgKTtcbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKHNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgYXNzZXJ0LmlzRmFsc2V5KGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKTtcbiAgICAvLyBjb25zdCBpbkludGVyYWN0aW9uID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgICAgdGhpcy5jcmVhdGVOYXZpZ2F0aW9uU2Vzc2lvbih0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblVybENoYW5nZWQobmV3VXJsOiBzdHJpbmcpIHtcbiAgICAvLyB0aGUgYmFjayBidXR0b24gY2FuIHRyaWdnZXIgYSB1cmwgY2hhbmdlIHdpdGhvdXQgYSBuYXZpZ2F0aW9uIHNlc3Npb24gaW4gcHJvZ3Jlc3Mgc28gd2VcbiAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBVcmwgQ2hhbmdlZCAke25ld1VybH1gKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblVybENoYW5nZShuZXdVcmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnRllJOiB1cmwgY2hhbmdlZCB3aXRob3V0IGEgbmF2aWdhdGlvbiBzZXNzaW9uIGluIHByb2dyZXNzJyk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIFVybCBDaGFuZ2VkYCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlckVycm9yKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlckVuZChldmVudCk7XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZSh2aXNpdDogVmlzaXQpO1xuICBhc3luYyBuYXZpZ2F0ZShcbiAgICBwbGFjZUNvbXBvbmVudDogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTtcbiAgYXN5bmMgbmF2aWdhdGUoXG4gICAgdmlzaXRPclBsYWNlQ29tcG9uZW50OiBWaXNpdCB8IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+LFxuICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkge1xuICAgIGNvbnN0IHZpc2l0ID0gdGhpcy50b1Zpc2l0KFxuICAgICAgdmlzaXRPclBsYWNlQ29tcG9uZW50LFxuICAgICAgcGFyYW1zXG4gICAgKS5jb3B5V2l0aERlZmF1bHRzRnJvbSh0aGlzLmFjdGl2ZVZpc2l0JC52YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmFuZ3VsYXJSb3V0ZXIubmF2aWdhdGUodmlzaXQuZ2V0Um91dGVyQ29tbWFuZHMoKSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhc3luYyBkb05hdmlnYXRpb24oXG4gICAgdmlzaXQ6IFZpc2l0LFxuICAgIHJ1bk5hdmlnYXRpb25Db21tYW5kczogKHJvdXRlcjogUm91dGVyKSA9PiBhbnlcbiAgKSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlKSB7XG4gICAgICBMb2dnZXIuZ2V0KCkuZXJyb3IoJ05hdmlnYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcycsIHtcbiAgICAgICAgdmlzaXQ6IHZpc2l0LFxuICAgICAgICBzZXNzaW9uOiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uLFxuICAgICAgfSk7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKFxuICAgICAgICB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpXG4gICAgICApO1xuICAgICAgbmF2aWdhdGlvbi5pbml0aWFsaXNlVmlzaXRTZWdtZW50cyh2aXNpdCk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25UbyhuYXZpZ2F0aW9uKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLmFuZ3VsYXJSb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgcm91dGVyIGhhcyBmaW5pc2hlZCAoaW4gdGhlIGNhc2Ugd2hlcmUgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgYW5kIHdlJ3JlIHN0aWxsIGluICBhXG4gICAgICAvLyB0cmFuc2llbnQgc3RhdGUgYW5kIGZpbmlzaCBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgIGlmICghdGhpcy5hbmd1bGFyUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgJiYgdGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKFxuICAgICAgICAgIG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZUJ5VXJsKFxuICAgIHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCxcbiAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhc1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgIyMjIG5hdmlnYXRpb25CeVVybCAtPiAke3VybFNuYXBzaG90LnVybFRyZWUudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdGhpcy5hbmd1bGFyUm91dGVyLm5hdmlnYXRlQnlVcmwoXG4gICAgICB1cmxTbmFwc2hvdC51cmxUcmVlLFxuICAgICAgbmF2aWdhdGlvbkV4dHJhc1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXQkKCk6IFZhbHVlTW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXQkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIGZpbHRlckF1dGhvcml6ZWRQbGFjZXMocGxhY2VzOiBSZWFkb25seUFycmF5PENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+Piwgb3B0aW9uczogRGlzcG9zZWRXaXRoKTogTGlzdE1vZGVsPENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+PiB7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKG9wdGlvbnMuZGlzcG9zZWRXaXRoKTtcbiAgICByZXR1cm4gY2hhaW4odGhpcy5hdXRoU2VydmljZS5hY2Nlc3NHdWFyZCQpLm1hcFRvTGlzdCgoZykgPT5cbiAgICAgIHBsYWNlcy5maWx0ZXIoKHApID0+IGcuaXNBdXRob3Jpc2VkKFBsYWNlQ29tcG9uZW50LmdldERlZmluaXRpb24ocCkpKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBub3RpZnlWaXNpdFNlZ21lbnRDaGFuZ2VkKFxuICAgIGlzOiBWaXNpdFNlZ21lbnQsXG4gICAgd2FzOiBWaXNpdFNlZ21lbnRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJQbGFjZVJvdXRlci5ub3RpZnlWaXNpdFNlZ21lbnRDaGFuZ2VkXCIsIGlzLnRvRGVidWdTdHJpbmcoKSwgd2FzLnRvRGVidWdTdHJpbmcoKSk7XG4gICAgdGhpcy5wbGFjZUhpc3RvcnkudXBkYXRlVmlzaXRTZWdtZW50KGlzKTtcblxuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBjb25zdCB2aXNpdCA9IHRoaXMuYWN0aXZlVmlzaXQkLnZhbHVlLmNvcHlBbmRSZXBsYWNlU2VnbWVudChpcyk7XG4gICAgaWYgKGlzLmhhc1JvdXRpbmdDaGFuZ2VkRnJvbSh3YXMpKSB7XG4gICAgICAvLyBUT0RPOiBjYW4gSSBqdXN0IGRvIGEgcmVndWxhciBuYXZpZ2F0ZSB1c2luZyBhbiB1cGRhdGVkIHZpc2l0P1xuICAgICAgLy8gY29uc3Qge3doZW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgICAgYXdhaXQgdGhpcy5kb05hdmlnYXRpb24odmlzaXQsICgpID0+IHtcbiAgICAgICAgY29uc3QgdXJsU25hcHNob3QgPSB0aGlzLnVybFNlcnZpY2VcbiAgICAgICAgICAucGFyc2VVcmwodGhpcy5hbmd1bGFyUm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybClcbiAgICAgICAgICAudXBkYXRlVmlzaXRTZWdtZW50KGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKGN1cnJlbnRSb3V0ZXJVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TZXNzaW9uIHtcbiAgICBjb25zdCBpbkludGVyYWN0aW9uID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKTtcbiAgICByZXR1cm4gaW5JbnRlcmFjdGlvblxuICAgICAgPyBuZXcgTmF2aWdhdGluZ0R1cmluZ0ludGVyYWN0aW9uKFxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgY3VycmVudFJvdXRlclVybFxuICAgICAgICApXG4gICAgICA6IG5ldyBOYXZpZ2F0aW5nKHRoaXMubmF2aWdhdGlvbkNvbnRleHQsIGN1cnJlbnRSb3V0ZXJVcmwpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcblxuICBwcm90ZWN0ZWQgdHJhbnNpdGlvblRvKG5leHQ6IE5hdmlnYXRpb25TZXNzaW9uKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZTtcbiAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICB0aGlzLnBsYWNlSGlzdG9yeS5ub3RpZnlOYXZpZ2F0aW9uU3RhcnRlZCgpO1xuICAgIH1cbiAgICBhc3NlcnQuaXNUcnV0aHkobmV4dCAhPT0gcHJldmlvdXMpO1xuICAgIC8vIExvZ2dlci5nZXQodGhpcykuaW5mbyhgIyMjIFJvdXRlciBTdGF0ZSBUcmFuc2l0aW9uOiAke3ByZXZpb3VzID8gcHJldmlvdXMudG9TdHJpbmcoKSA6ICdudWxsJ30gLT4gJHtuZXh0LnRvU3RyaW5nKCl9YCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWUgPSBuZXh0O1xuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBuZXh0Lm5vdGlmeUFjdGl2ZSgpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcblxuICBwcml2YXRlIHJvdXRpbmdTZXNzaW9uRmluaXNoZWQodmlzaXQ/OiBWaXNpdCkge1xuICAgIGlmICh2aXNpdCkge1xuICAgICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlKTtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5Lm5vdGlmeU5hdmlnYXRpb25GaW5pc2hlZCh2aXNpdCk7XG4gICAgICAvLyBXZSB1cGRhdGUgdGhlIGFjdGl2ZSB2aXNpdHMgYmVmb3JlIHdlIGZpbmlzaCB0aGUgc2Vzc2lvbiBzbyB0aGVcbiAgICAgIC8vIHBsYWNlIG91dGxldHMgY2FuIGlnbm9yZSB0aGUgaW5jb21pbmcgY2hhbmdlcyB1bnRpbCB0aGluZ3MgYXJlIHNldHRsZWQuXG4gICAgICB0aGlzLl9hY3RpdmVWaXNpdCQudmFsdWUgPSB2aXNpdDtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHZpc2l0LnRvRGVidWdTdHJpbmcoKSlcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3VycmVudFNlc3Npb247XG4gICAgc2Vzc2lvbi5kaXNwb3NlKCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWUgPSBudWxsO1xuICAgIC8vIGNvbnNvbGUubG9nKGAjIyMgUm91dGVyIFNlc3Npb24gRmluaXNoZWQgKHdhcyAke3Nlc3Npb24udG9TdHJpbmcoKX0pYCk7XG4gICAgdGhpcy5zZXNzaW9uRmluaXNoZWRKb2JzLmZvckVhY2goKGpvYikgPT4gam9iKCkpO1xuICAgIHRoaXMuc2Vzc2lvbkZpbmlzaGVkSm9icyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoZnVuYzogKCkgPT4gdm9pZCkge1xuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzJCk7XG4gICAgdGhpcy5zZXNzaW9uRmluaXNoZWRKb2JzLnB1c2goZnVuYyk7XG4gIH1cblxuICAvKipcbiAgICogU3luYydzIHRoZSBjdXJyZW50IGludGVyYWN0aW9uIHN0YXRlIHdpdGggdGhlIFVSTC4gIFdlIG5lZWQgdG8gcHVzaCBzb21ldGhpbmcgaW4gdGhlIFVSTCBpbiBvcmRlclxuICAgKiB0byBiZSBhYmxlIHRvIGNhcHR1cmUgdGhlIGJhY2sgYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlLiAgSWYgd2UgZG9uJ3QgdGhlbiB0aGUgYmFjayBjbGljayB3aWxsIGV4aXRcbiAgICogdGhlIGFwcCBkaXJlY3RseSBhbmQgd2UgZG9uJ3QgZ2V0IHRvIGFzay5cbiAgICovXG4gIC8vIEBUcmFjZSgpXG4gIHN5bmNJbnRlcmFjdGlvbkNvbnRleHRJZHNXaXRoUm91dGVyKFxuICAgIG9uU3luY0NvbXBsZXRlOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgLy8gbm9vcFxuICAgIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBOYXZpZ2F0aW9uIGFjdGl2ZSAtPiAke3RoaXMubmF2aWdhdGlvblNlc3Npb24udG9TdHJpbmcoKX0sIHN5bmMgZGVsYXllZCB1bnRpbCBmaW5pc2hlZC5gKTtcbiAgICAgIC8vIGNvbnN0IHNlc3Npb24gPSB0aGlzLm5hdmlnYXRpb25TZXNzaW9uO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXMucnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcygoKSA9PiB7XG4gICAgICAgICAgICBvblN5bmNDb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHN5bmNTZXNzaW9uID0gbmV3IFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlKFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc3luY1Nlc3Npb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYE5vIG5hdmlnYXRpb24gaW4gcHJvZ3Jlc3MsIHN0YXJ0aW5nIHN5bmNocm9uaXNhdGlvbiBqb2JgKTtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4ge1xuICAgICAgICAgIG9uU3luY0NvbXBsZXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTeW5jaHJvbmlzZUludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZShcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db250ZXh0LFxuICAgICAgICAgIHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvVmlzaXQoXG4gICAgdmlzaXRPclBsYWNlQ29tcG9uZW50OiBWaXNpdCB8IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+LFxuICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkge1xuICAgIGlmICh2aXNpdE9yUGxhY2VDb21wb25lbnQgaW5zdGFuY2VvZiBWaXNpdCkge1xuICAgICAgcmV0dXJuIHZpc2l0T3JQbGFjZUNvbXBvbmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFZpc2l0LmdvdG8odmlzaXRPclBsYWNlQ29tcG9uZW50LCBwYXJhbXMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlUm91dGVyIHtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlZGlyZWN0aW9ucyB7XG4gICAgLyoqXG4gICAgICogTk9URTogZm9yIG5vdyB0aGlzIG9ubHkgc3VwcG9ydHMgdG9wIGxldmVsIHBsYWNlcy4gIFN1cHBvcnQgZm9yIGNoaWxkIHBsYWNlcyB3aWxsIHJlcXVpcmUgYSBtb3JlIGZ1bmRhbWVudGFsXG4gICAgICogY2hhbmdlIHRvIHZpc2l0cyB0byBzdXBwb3J0IG5lc3RpbmdcbiAgICAgKi9cbiAgICBvbkF1dGhlbnRpY2F0aW9uRmFpbHVyZShhY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBOT1RFOiBmb3Igbm93IHRoaXMgb25seSBzdXBwb3J0cyB0b3AgbGV2ZWwgcGxhY2VzLiAgU3VwcG9ydCBmb3IgY2hpbGQgcGxhY2VzIHdpbGwgcmVxdWlyZSBhIG1vcmUgZnVuZGFtZW50YWxcbiAgICAgKiBjaGFuZ2UgdG8gdmlzaXRzIHRvIHN1cHBvcnQgbmVzdGluZ1xuICAgICAqIEBwYXJhbSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBvbkF1dGhvcmlzYXRpb25GYWlsdXJlKGNvbXBvbmVudDogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4pOiAoQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4gfCBWaXNpdClbXTtcbiAgfVxufVxuIl19
|
|
@@ -5,7 +5,7 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
export class LoadingMonitor extends GarbageCollector {
|
|
6
6
|
watchChanges$ = new MutableValueModel(false);
|
|
7
7
|
trackers = new Map();
|
|
8
|
-
createTracker(loadable) {
|
|
8
|
+
createTracker(loadable, options) {
|
|
9
9
|
const existing = this.trackers.get(loadable);
|
|
10
10
|
if (!existing) {
|
|
11
11
|
const tracker = new LoadingMonitor.Tracker(loadable, this.watchChanges$);
|
|
@@ -38,11 +38,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
38
38
|
watchChanges$;
|
|
39
39
|
loadables = [];
|
|
40
40
|
rootName;
|
|
41
|
-
constructor(root, watchChanges
|
|
41
|
+
constructor(root, watchChanges$, tag) {
|
|
42
42
|
super();
|
|
43
43
|
this.root = root;
|
|
44
44
|
this.watchChanges$ = watchChanges$;
|
|
45
|
-
|
|
45
|
+
const bits = [root.constructor.name];
|
|
46
|
+
if (tag)
|
|
47
|
+
bits.push(`[${tag}]`);
|
|
48
|
+
this.rootName = bits.join('');
|
|
46
49
|
}
|
|
47
50
|
registerLoadableDependency(loadable) {
|
|
48
51
|
const { when } = Dsl.disposeWith(this);
|
|
@@ -80,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
80
83
|
}
|
|
81
84
|
LoadingMonitor.Tracker = Tracker;
|
|
82
85
|
})(LoadingMonitor || (LoadingMonitor = {}));
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1tb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvc2VydmljZXMvbG9hZGluZy1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBTW5DLE1BQU0sT0FBTyxjQUFlLFNBQVEsZ0JBQWdCO0lBRWpDLGFBQWEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztJQUVoRSxhQUFhLENBQUMsUUFBeUMsRUFBRSxPQUF1QjtRQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyQyxPQUFPLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3QzthQUFNO1lBQ0wsT0FBTyxRQUFRLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRUQsU0FB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QUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3BFLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxRQUFRLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksYUFBYSxPQUFPLENBQUMsR0FBRyxTQUFTLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2lCQUN0RztxQkFBTTtvQkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLGVBQWUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2lCQUNoRztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FFRjtJQTdDWSxzQkFBTyxVQTZDbkIsQ0FBQTtBQUNILENBQUMsRUEvQ2dCLGNBQWMsS0FBZCxjQUFjLFFBK0M5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpc3Bvc2FibGUsIERzbCwgR2FyYmFnZUNvbGxlY3RvciwgTXV0YWJsZVZhbHVlTW9kZWwsIFZhbHVlTW9kZWwgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBzb3J0QnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgTG9hZGFibGUgYXMgRXh0ZXJuYWxseUxvYWRhYmxlfSBmcm9tICcuLi9jb21wb25lbnRzL3R5cGVzL2xvYWRhYmxlJztcblxudHlwZSBMb2FkYWJsZSA9IFBpY2s8RXh0ZXJuYWxseUxvYWRhYmxlLCBcImxvYWRlZCRcIj47XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2FkaW5nTW9uaXRvciBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd2F0Y2hDaGFuZ2VzJCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbChmYWxzZSk7XG4gIHJlYWRvbmx5IHRyYWNrZXJzID0gbmV3IE1hcDxMb2FkYWJsZSwgTG9hZGluZ01vbml0b3IuVHJhY2tlcj4oKTtcblxuICBjcmVhdGVUcmFja2VyKGxvYWRhYmxlOiBMb2FkYWJsZSAmIERpc3Bvc2FibGUuQ29sbGVjdG9yLCBvcHRpb25zPzoge3RhZzogc3RyaW5nfSApIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMudHJhY2tlcnMuZ2V0KGxvYWRhYmxlKTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICBjb25zdCB0cmFja2VyID0gbmV3IExvYWRpbmdNb25pdG9yLlRyYWNrZXIobG9hZGFibGUsIHRoaXMud2F0Y2hDaGFuZ2VzJCk7XG4gICAgICB0cmFja2VyLm9uRGlzcG9zZSgoKSA9PiB0aGlzLnRyYWNrZXJzLmRlbGV0ZShsb2FkYWJsZSkpO1xuICAgICAgdGhpcy50cmFja2Vycy5zZXQobG9hZGFibGUsIHRyYWNrZXIpO1xuICAgICAgcmV0dXJuIGxvYWRhYmxlLnJlZ2lzdGVyRGlzcG9zYWJsZSh0cmFja2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGR1bXBTdGF0ZSgpIHtcbiAgICBjb25zb2xlLmdyb3VwKCdMb2FkaW5nTW9uaXRvci5kdW1wU3RhdGU6Jyk7XG4gICAgc29ydEJ5KEFycmF5LmZyb20odGhpcy50cmFja2Vycy5lbnRyaWVzKCkpLCBpdCA9PiBpdFswXS5jb25zdHJ1Y3Rvcj8ubmFtZSlcbiAgICAgIC5mb3JFYWNoKChlbnRyeSkgPT4gZW50cnlbMV0uZHVtcFN0YXRlKCkpO1xuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgfVxuXG4gIHdhdGNoQ2hhbmdlcyh3YXRjaDogYm9vbGVhbikge1xuICAgIHRoaXMud2F0Y2hDaGFuZ2VzJC52YWx1ZSA9IHdhdGNoO1xuICB9XG5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBMb2FkaW5nTW9uaXRvciB7XG4gIGV4cG9ydCBjbGFzcyBUcmFja2VyIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRhYmxlczogTG9hZGFibGVbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm9vdE5hbWU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSByb290OiBMb2FkYWJsZSwgcHJvdGVjdGVkIHJlYWRvbmx5IHdhdGNoQ2hhbmdlcyQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj4sIHRhZz86c3RyaW5nKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgY29uc3QgYml0cyA9IFtyb290LmNvbnN0cnVjdG9yLm5hbWVdO1xuICAgICAgaWYgKHRhZykgYml0cy5wdXNoKGBbJHt0YWd9XWApO1xuICAgICAgdGhpcy5yb290TmFtZSA9IGJpdHMuam9pbignJyk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJMb2FkYWJsZURlcGVuZGVuY3kobG9hZGFibGU6IExvYWRhYmxlKSB7XG4gICAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICAgIGlmICh0aGlzLmxvYWRhYmxlcy5pbmNsdWRlcyhsb2FkYWJsZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAlYyR7dGhpcy5yb290TmFtZX0gYWxyZWFkeSBoYXMgYSBkZXBlbmRlbmN5IG9uICR7bG9hZGFibGUuY29uc3RydWN0b3I/Lm5hbWV9YCwgJ2NvbG9yOiByZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoZW4obG9hZGFibGUubG9hZGVkJCkuY2hhbmdlcygoaXMsIHdhcykgPT4gdGhpcy5kdW1wU3RhdGUoe1xuICAgICAgICAgIGxvYWRhYmxlLFxuICAgICAgICAgIGlzLFxuICAgICAgICAgIHdhc1xuICAgICAgICB9KSwgeyBhc0xvbmdBczogdGhpcy53YXRjaENoYW5nZXMkIH0pO1xuICAgICAgICB0aGlzLmxvYWRhYmxlcy5wdXNoKGxvYWRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkdW1wU3RhdGUoY2hhbmdlZD86IHsgbG9hZGFibGU6IExvYWRhYmxlLCBpczogYm9vbGVhbiwgd2FzOiBib29sZWFuIH0pIHtcbiAgICAgIGNvbnN0IGxvYWRlZENvbG9yID0gXCIjM2EzXCJcbiAgICAgIGNvbnN0IG5vdExvYWRlZENvbG9yID0gXCIjYTMzXCJcbiAgICAgIGNvbnN0IGlzTG9hZGVkID0gdGhpcy5yb290LmxvYWRlZCQudmFsdWU7XG4gICAgICBjb25zdCBzdHlsZXMgPSBbXG4gICAgICAgIGBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogJHtpc0xvYWRlZCA/IGxvYWRlZENvbG9yIDogbm90TG9hZGVkQ29sb3J9YCxcbiAgICAgICAgYGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogJHtpc0xvYWRlZCA/IGxvYWRlZENvbG9yIDogbm90TG9hZGVkQ29sb3J9YFxuICAgICAgXVxuICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZChgJWMke3RoaXMucm9vdE5hbWV9IGxvYWRlZDogJWMke2lzTG9hZGVkfWAsIC4uLnN0eWxlcyk7XG4gICAgICBzb3J0QnkodGhpcy5sb2FkYWJsZXMsIGl0ID0+IGl0LmNvbnN0cnVjdG9yPy5uYW1lKS5mb3JFYWNoKGxvYWRhYmxlID0+IHtcbiAgICAgICAgaWYgKGxvYWRhYmxlID09PSBjaGFuZ2VkPy5sb2FkYWJsZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAlYyR7bG9hZGFibGUuY29uc3RydWN0b3I/Lm5hbWV9LmxvYWRlZCQ6ICR7Y2hhbmdlZC53YXN9IC0+ICVjJHtjaGFuZ2VkLmlzfWAsIC4uLnN0eWxlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCVjJHtsb2FkYWJsZS5jb25zdHJ1Y3Rvcj8ubmFtZX0ubG9hZGVkJDogJWMke2xvYWRhYmxlLmxvYWRlZCQudmFsdWV9YCwgLi4uc3R5bGVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==
|