zek 17.3.92 → 17.3.118

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.
@@ -0,0 +1,57 @@
1
+ import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import { Convert, MathHelper } from '../utils';
5
+ import * as i0 from "@angular/core";
6
+ export class ZekDelayedInputDirective {
7
+ constructor() {
8
+ this._inputSubject$ = new Subject();
9
+ this.delayedInput = new EventEmitter();
10
+ this._delay = 500;
11
+ }
12
+ get delay() {
13
+ return this._delay;
14
+ }
15
+ set delay(v) {
16
+ const tmp = MathHelper.clamp(Convert.toNumber(v), 1, 3600000);
17
+ if (this._delay !== tmp) {
18
+ this._delay = tmp;
19
+ }
20
+ }
21
+ ngOnInit() {
22
+ this.initSubscription();
23
+ }
24
+ initSubscription() {
25
+ // Emit values after the specified debounce time
26
+ this._inputSubject$.pipe(debounceTime(this.delay)).subscribe((value) => {
27
+ this.delayedInput.emit(value);
28
+ });
29
+ }
30
+ // ngOnChanges(changes: SimpleChanges) {
31
+ // if (changes['delayTime']) {
32
+ // // Reset the subscription when delayTime changes
33
+ // this._inputSubject$ = new Subject<string>(); // Replace the Subject
34
+ // this.initSubscription(); // Reinitialize with the new delayTime
35
+ // }
36
+ // }
37
+ onInput(value) {
38
+ this._inputSubject$.next(value); // Push new value to the Subject
39
+ }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ZekDelayedInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
41
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: ZekDelayedInputDirective, isStandalone: true, selector: "[zek-delayed-input]", inputs: { delay: "delay" }, outputs: { delayedInput: "delayedInput" }, host: { listeners: { "input": "onInput($event.target.value)" } }, ngImport: i0 }); }
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ZekDelayedInputDirective, decorators: [{
44
+ type: Directive,
45
+ args: [{
46
+ standalone: true,
47
+ selector: '[zek-delayed-input]'
48
+ }]
49
+ }], propDecorators: { delayedInput: [{
50
+ type: Output
51
+ }], delay: [{
52
+ type: Input
53
+ }], onInput: [{
54
+ type: HostListener,
55
+ args: ['input', ['$event.target.value']]
56
+ }] } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXllZC1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9kaXJlY3RpdmVzL2RlbGF5ZWQtaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBTy9DLE1BQU0sT0FBTyx3QkFBd0I7SUFKckM7UUFNWSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDckMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTVDLFdBQU0sR0FBRyxHQUFHLENBQUM7S0FtQ3hCO0lBbENHLElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFDSSxLQUFLLENBQUMsQ0FBYztRQUNwQixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQVMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLGtDQUFrQztJQUNsQywyREFBMkQ7SUFDM0QsOEVBQThFO0lBQzlFLDBFQUEwRTtJQUMxRSxVQUFVO0lBQ1YsSUFBSTtJQUdKLE9BQU8sQ0FBQyxLQUFhO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO0lBQ3JFLENBQUM7OEdBdkNRLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUscUJBQXFCO2lCQUNsQzs4QkFJYSxZQUFZO3NCQUFyQixNQUFNO2dCQU9ILEtBQUs7c0JBRFIsS0FBSztnQkE0Qk4sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29udmVydCwgTWF0aEhlbHBlciB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgTnVtYmVySW5wdXQgfSBmcm9tICcuLi9jb21wb25lbnRzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIHNlbGVjdG9yOiAnW3play1kZWxheWVkLWlucHV0XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFpla0RlbGF5ZWRJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7Ly9PbkNoYW5nZXNcclxuXHJcbiAgICBwcml2YXRlIF9pbnB1dFN1YmplY3QkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIGRlbGF5ZWRJbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIHByaXZhdGUgX2RlbGF5ID0gNTAwO1xyXG4gICAgZ2V0IGRlbGF5KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGF5O1xyXG4gICAgfVxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkZWxheSh2OiBOdW1iZXJJbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IHRtcCA9IE1hdGhIZWxwZXIuY2xhbXAoQ29udmVydC50b051bWJlcih2KSwgMSwgM182MDBfMDAwKTtcclxuICAgICAgICBpZiAodGhpcy5fZGVsYXkgIT09IHRtcCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWxheSA9IHRtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0U3Vic2NyaXB0aW9uKCkge1xyXG4gICAgICAgIC8vIEVtaXQgdmFsdWVzIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVib3VuY2UgdGltZVxyXG4gICAgICAgIHRoaXMuX2lucHV0U3ViamVjdCQucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWxheSkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZWxheWVkSW5wdXQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy8gICAgIGlmIChjaGFuZ2VzWydkZWxheVRpbWUnXSkge1xyXG4gICAgLy8gICAgICAgICAvLyBSZXNldCB0aGUgc3Vic2NyaXB0aW9uIHdoZW4gZGVsYXlUaW1lIGNoYW5nZXNcclxuICAgIC8vICAgICAgICAgdGhpcy5faW5wdXRTdWJqZWN0JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTsgLy8gUmVwbGFjZSB0aGUgU3ViamVjdFxyXG4gICAgLy8gICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTsgLy8gUmVpbml0aWFsaXplIHdpdGggdGhlIG5ldyBkZWxheVRpbWVcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50LnRhcmdldC52YWx1ZSddKVxyXG4gICAgb25JbnB1dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5faW5wdXRTdWJqZWN0JC5uZXh0KHZhbHVlKTsgLy8gUHVzaCBuZXcgdmFsdWUgdG8gdGhlIFN1YmplY3RcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './delayed-input.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9kaXJlY3RpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RlbGF5ZWQtaW5wdXQuZGlyZWN0aXZlJzsiXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL21vZGVscy90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElGbGF0dGVuVHJlZTxUS2V5ID0gYW55LCBUVmFsdWUgPSBhbnk+IHtcclxuICAgIGtleT86IFRLZXkgfCBudWxsO1xyXG4gICAgdmFsdWU/OiBUVmFsdWUgfCBudWxsO1xyXG4gICAgaW5kZW50OiBudW1iZXI7XHJcbiAgICBjb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlIHtcclxuICAgIGlkOiBudW1iZXI7XHJcbiAgICBwYXJlbnRJZD86IG51bWJlciB8IG51bGw7XHJcbiAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgY2hlY2tlZD86IGJvb2xlYW4gfCBudWxsO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyZWVOb2RlIGV4dGVuZHMgSU5vZGUge1xyXG4gICAgY2hpbGRyZW46IElUcmVlTm9kZVtdIHwgbnVsbDtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElGbGF0dGVuVHJlZU5vZGUge1xyXG4gICAgaWQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgbmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICBpbmRlbnQ6IG51bWJlcjtcclxuICAgIGNvdW50OiBudW1iZXI7XHJcbiAgICBjaGVja2VkPzogYm9vbGVhbiB8IG51bGw7XHJcbn1cclxuIl19
@@ -1,4 +1,7 @@
1
1
  import { KeyPairChecked } from './key-pair.model';
2
+ /**
3
+ * @deprecated use ITreeNode
4
+ */
2
5
  export class Tree extends KeyPairChecked {
3
6
  }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL21vZGVscy90cmVlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxNQUFNLE9BQU8sSUFBSyxTQUFRLGNBQThCO0NBTXZEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5UGFpckNoZWNrZWQgfSBmcm9tICcuL2tleS1wYWlyLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmVlIGV4dGVuZHMgS2V5UGFpckNoZWNrZWQ8bnVtYmVyLCBzdHJpbmc+IHtcclxuICAgIHBhcmVudElkPzogbnVtYmVyIHwgbnVsbDtcclxuICAgIGNoaWxkcmVuPzogVHJlZVtdIHwgbnVsbDtcclxuICAgIGNoaWxkcmVuQ291bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5kZW50PzogbnVtYmVyIHwgbnVsbDtcclxuICAgIGNoaWxkcmVuSWRzPzogbnVtYmVyW10gfCBudWxsO1xyXG59Il19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL21vZGVscy90cmVlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRDs7R0FFRztBQUNILE1BQU0sT0FBTyxJQUFLLFNBQVEsY0FBOEI7Q0FNdkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlQYWlyQ2hlY2tlZCB9IGZyb20gJy4va2V5LXBhaXIubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIHVzZSBJVHJlZU5vZGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmVlIGV4dGVuZHMgS2V5UGFpckNoZWNrZWQ8bnVtYmVyLCBzdHJpbmc+IHtcclxuICAgIHBhcmVudElkPzogbnVtYmVyIHwgbnVsbDtcclxuICAgIGNoaWxkcmVuPzogVHJlZVtdIHwgbnVsbDtcclxuICAgIGNoaWxkcmVuQ291bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5kZW50PzogbnVtYmVyIHwgbnVsbDtcclxuICAgIGNoaWxkcmVuSWRzPzogbnVtYmVyW10gfCBudWxsO1xyXG59Il19
@@ -1,18 +1,15 @@
1
1
  import { Component, Input } from '@angular/core';
2
- import { BootstrapHelper, Convert } from '../../../utils';
2
+ import { BootstrapHelper, Convert, MathHelper } from '../../../utils';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "../../../services/alert.service";
6
6
  import * as i2 from "@angular/common";
7
- function clamp(v, min = 10, max = 3600000) {
8
- return Math.max(min, Math.min(max, v));
9
- }
10
7
  export class ZekToast {
11
8
  get delay() {
12
9
  return this._delay;
13
10
  }
14
11
  set delay(v) {
15
- const tmp = clamp(Convert.toNumber(v) || 0);
12
+ const tmp = MathHelper.clamp(Convert.toNumber(v) || 0, 10, 3600000);
16
13
  if (this._delay !== tmp) {
17
14
  this._delay = tmp;
18
15
  }
@@ -119,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
119
116
  }], icon: [{
120
117
  type: Input
121
118
  }] } });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9tb2R1bGVzL2FsZXJ0L3RvYXN0L3RvYXN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvbW9kdWxlcy9hbGVydC90b2FzdC90b2FzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUUvQyxTQUFTLEtBQUssQ0FBQyxDQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsT0FBTztJQUM3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQVNELE1BQU0sT0FBTyxRQUFRO0lBQ2pCLElBQ0ksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBYztRQUNwQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDdEIsQ0FBQztJQUNMLENBQUM7SUFVRCxZQUE2QixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVR2RCxXQUFNLEdBQVcsSUFBSSxD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QUcsb0JBQW9CLENBQUM7Z0JBQzdCLHFDQUFxQztnQkFDckMseUNBQXlDO2dCQUN6QyxNQUFNO1lBQ1YsS0FBSyxPQUFPO2dCQUNSLENBQUMsQ0FBQyxHQUFHLEdBQUcsb0JBQW9CLENBQUM7Z0JBQzdCLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsQ0FBQyxDQUFDLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztnQkFDN0IsTUFBTTtZQUdWO2dCQUNJLENBQUMsQ0FBQyxHQUFHLEdBQUcseUJBQXlCLENBQUM7Z0JBQ2xDLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQzs4R0E3SFEsUUFBUTtrR0FBUixRQUFRLCtHQ3BCckIscXREQTJCTSw0R0RUUSxZQUFZOzsyRkFFYixRQUFRO2tCQVBwQixTQUFTO2lDQUNNLElBQUksWUFDTixXQUFXLFdBR1osQ0FBQyxZQUFZLENBQUM7aUZBSW5CLEtBQUs7c0JBRFIsS0FBSztnQkFhRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQm9vdHN0cmFwSGVscGVyLCBDb252ZXJ0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xyXG4vL2RlY2xhcmUgbGV0IGJvb3RzdHJhcDogYW55O1xyXG5cclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBUb2FzdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOdW1iZXJJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuZnVuY3Rpb24gY2xhbXAodjogbnVtYmVyLCBtaW4gPSAxMCwgbWF4ID0gMzYwMDAwMCkge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2KSk7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIHNlbGVjdG9yOiAnemVrLXRvYXN0JyxcclxuICAgIHN0eWxlVXJsczogWycuL3RvYXN0LmNzcyddLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RvYXN0Lmh0bWwnLFxyXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFpla1RvYXN0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBkZWxheSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxheTtcclxuICAgIH1cclxuICAgIHNldCBkZWxheSh2OiBOdW1iZXJJbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IHRtcCA9IGNsYW1wKENvbnZlcnQudG9OdW1iZXIodikgfHwgMCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlbGF5ICE9PSB0bXApIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVsYXkgPSB0bXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2RlbGF5OiBudW1iZXIgPSAzMDAwO1xyXG4gICAgXHJcbiAgICBcclxuICAgIEBJbnB1dCgpIGljb24gPSB0cnVlO1xyXG5cclxuICAgIHRvYXN0czogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX3RpbWVvdXQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLmFsZXJ0U2VydmljZS5nZXRUb2FzdCgpLnN1YnNjcmliZSgodG9hc3Q6IFRvYXN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdG9hc3QpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFyIGFsZXJ0cyB3aGVuIGFuIGVtcHR5IGFsZXJ0IGlzIHJlY2VpdmVkXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZGQgdG9hc3QgdG8gYXJyYXlcclxuICAgICAgICAgICAgdGhpcy5jc3NJbml0KHRvYXN0KTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHMudW5zaGlmdCh0b2FzdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSh0b2FzdCk7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgdG9hc3RFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB0b2FzdC0ke3RvYXN0LmlkfWApO1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IHQgPSBuZXcgYm9vdHN0cmFwLlRvYXN0KHRvYXN0RWwpO1xyXG4gICAgICAgICAgICAgICAgLy8gdC5zaG93KCk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuX2RlbGF5KTtcclxuXHJcblxyXG4gICAgICAgICAgICAvLyBsZXQgdG9hc3RFbExpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2FzdCcpKVxyXG4gICAgICAgICAgICAvLyBsZXQgdG9hc3RMaXN0ID0gdG9hc3RFbExpc3QubWFwKGZ1bmN0aW9uICh0b2FzdEVsKSB7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gbmV3IGJvb3RzdHJhcC5Ub2FzdCh0b2FzdEVsKVxyXG4gICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAvLyB0b2FzdExpc3QuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIHQuc2hvdygpO1xyXG4gICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jbGVhclRpbWVvdXQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIHJlbW92ZSh0b2FzdDogVG9hc3QpIHtcclxuICAgICAgICB0aGlzLnRvYXN0cyA9IHRoaXMudG9hc3RzLmZpbHRlcih4ID0+IHggIT09IHRvYXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRpbWVvdXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNzc0luaXQodG9hc3Q6IFRvYXN0KSB7XHJcbiAgICAgICAgaWYgKCF0b2FzdCB8fCAhdG9hc3QudHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaWNvbiAmJiAhdG9hc3QuaWNvbikge1xyXG4gICAgICAgICAgICB0b2FzdC5pY29uID0gQm9vdHN0cmFwSGVscGVyLmNzc0FsZXJ0SWNvbih0b2FzdC50eXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2ID0gdG9hc3QgYXMgYW55O1xyXG4gICAgICAgIHN3aXRjaCAodG9hc3QudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdwcmltYXJ5JzpcclxuICAgICAgICAgICAgICAgIHYuY3NzID0gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XHJcbiAgICAgICAgICAgICAgICB2LmNzcyA9ICdiZy1zdWNjZXNzIHRleHQtd2hpdGUnO1xyXG4gICAgICAgICAgICAgICAgLy8gdi5pY29uQ29sb3IgPSAndGV4dC0tYWNjZW50LWdyZWVuJztcclxuICAgICAgICAgICAgICAgIC8vIHYuYm9yZGVyQ29sb3IgPSAnYm9yZGVyLS1hY2NlbnQtZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Rhbmdlcic6XHJcbiAgICAgICAgICAgICAgICB2LmNzcyA9ICdiZy1kYW5nZXIgdGV4dC13aGl0ZSc7XHJcbiAgICAgICAgICAgICAgICAvLyB2Lmljb25Db2xvciA9ICd0ZXh0LS1hY2NlbnQtcmVkJztcclxuICAgICAgICAgICAgICAgIC8vIHYuYm9yZGVyQ29sb3IgPSAnYm9yZGVyLS1hY2NlbnQtcmVkJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXJuaW5nJzpcclxuICAgICAgICAgICAgICAgIHYuY3NzID0gJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJztcclxuICAgICAgICAgICAgICAgIC8vIHYuaWNvbkNvbG9yID0gJ3RleHQtLWFjY2VudC15ZWxsb3cnO1xyXG4gICAgICAgICAgICAgICAgLy8gdi5ib3JkZXJDb2xvciA9ICdib3JkZXItLWFjY2VudC15ZWxsb3cnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2luZm8nOlxyXG4gICAgICAgICAgICAgICAgdi5jc3MgPSAnYmctaW5mbyB0ZXh0LXdoaXRlJztcclxuICAgICAgICAgICAgICAgIC8vIHYuaWNvbkNvbG9yID0gJ3RleHQtLWFjY2VudC1ibHVlJztcclxuICAgICAgICAgICAgICAgIC8vIHYuYm9yZGVyQ29sb3IgPSAnYm9yZGVyLS1hY2NlbnQtYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlnaHQnOlxyXG4gICAgICAgICAgICAgICAgdi5jc3MgPSAnYmctbGlnaHQgdGV4dC1kYXJrJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkYXJrJzpcclxuICAgICAgICAgICAgICAgIHYuY3NzID0gJ2JnLWRhcmsgdGV4dC13aGl0ZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdi5jc3MgPSAnYmctc2Vjb25kYXJ5IHRleHQtd2hpdGUnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwidG9hc3QtY29udGFpbmVyIHBvc2l0aW9uLWZpeGVkIHRvcC0wIGVuZC0wIHAtM1wiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgdG9hc3Qgb2YgdG9hc3RzXCIgY2xhc3M9XCJ0b2FzdCBmYWRlIHNob3cgYm9yZGVyLTAge3sgdG9hc3QuY3NzIH19XCIgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgW2F0dHIuZGF0YS1icy1kZWxheV09XCJfZGVsYXlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9hc3QtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiICpuZ0lmPVwiaWNvbiAmJiB0b2FzdC5pY29uXCI+PGkgY2xhc3M9XCJ7eyB0b2FzdC5pY29uIH19XCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cIm1lLWF1dG9cIiAqbmdJZj1cInRvYXN0LnRpdGxlXCI+e3sgdG9hc3QudGl0bGUgfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgbXMtYXV0byBtZS0yXCIgZGF0YS1icy1kaXNtaXNzPVwidG9hc3RcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwicmVtb3ZlKHRvYXN0KVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2FzdC1ib2R5XCI+XHJcbiAgICAgICAgICAgIHt7IHRvYXN0Lm1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCB0b2FzdCBvZiB0b2FzdHNcIiBjbGFzcz1cInRvYXN0IGZhZGUgc2hvd1wiIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGRhdGEtYnMtZGVsYXk9XCIzMDAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvYXN0LWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHBlLTEgYm9yZGVyLXN0YXJ0IGJvcmRlci04IHt7dG9hc3QuYm9yZGVyQ29sb3J9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidG9hc3QuaWNvblwiIGNsYXNzPVwiaWNvbiBmbGV4LXNocmluay0wIHt7dG9hc3QuaWNvbkNvbG9yfX1cIj48aSBjbGFzcz1cInt7dG9hc3QuaWNvbn19XCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0b2FzdC50aXRsZVwiPjxoNT57e3RvYXN0LnRpdGxlfX08L2g1PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHRvYXN0Lm1lc3NhZ2UgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlIG1zLWF1dG8gbWUtMlwiIGRhdGEtYnMtZGlzbWlzcz1cInRvYXN0XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cInJlbW92ZSh0b2FzdClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9kaXY+Il19
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9tb2R1bGVzL2FsZXJ0L3RvYXN0L3RvYXN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvbW9kdWxlcy9hbGVydC90b2FzdC90b2FzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFTL0MsTUFBTSxPQUFPLFFBQVE7SUFDakIsSUFDSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDO0lBQ0wsQ0FBQztJQVVELFlBQTZCLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBVHZELFdBQU0sR0FBVyxJQUFJLENBQUM7UUFHYixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBRXJCLFdBQU0sR0FBVSxFQUFFLENBQUM7SUFJd0MsQ0FBQztJQUU1RCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEs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QUssTUFBTTtnQkFDUCxDQUFDLENBQUMsR0FBRyxHQUFHLG9CQUFvQixDQUFDO2dCQUM3QixNQUFNO1lBR1Y7Z0JBQ0ksQ0FBQyxDQUFDLEdBQUcsR0FBRyx5QkFBeUIsQ0FBQztnQkFDbEMsTUFBTTtRQUNkLENBQUM7SUFDTCxDQUFDOzhHQTdIUSxRQUFRO2tHQUFSLFFBQVEsK0dDZnJCLHF0REEyQk0sNEdEZFEsWUFBWTs7MkZBRWIsUUFBUTtrQkFQcEIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sV0FBVyxXQUdaLENBQUMsWUFBWSxDQUFDO2lGQUluQixLQUFLO3NCQURSLEtBQUs7Z0JBYUcsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJvb3RzdHJhcEhlbHBlciwgQ29udmVydCwgTWF0aEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgVG9hc3QgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnVtYmVySW5wdXQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIHNlbGVjdG9yOiAnemVrLXRvYXN0JyxcclxuICAgIHN0eWxlVXJsczogWycuL3RvYXN0LmNzcyddLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RvYXN0Lmh0bWwnLFxyXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFpla1RvYXN0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBkZWxheSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxheTtcclxuICAgIH1cclxuICAgIHNldCBkZWxheSh2OiBOdW1iZXJJbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IHRtcCA9IE1hdGhIZWxwZXIuY2xhbXAoQ29udmVydC50b051bWJlcih2KSB8fCAwLCAxMCwgMzYwMDAwMCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlbGF5ICE9PSB0bXApIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVsYXkgPSB0bXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2RlbGF5OiBudW1iZXIgPSAzMDAwO1xyXG4gICAgXHJcbiAgICBcclxuICAgIEBJbnB1dCgpIGljb24gPSB0cnVlO1xyXG5cclxuICAgIHRvYXN0czogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX3RpbWVvdXQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLmFsZXJ0U2VydmljZS5nZXRUb2FzdCgpLnN1YnNjcmliZSgodG9hc3Q6IFRvYXN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdG9hc3QpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFyIGFsZXJ0cyB3aGVuIGFuIGVtcHR5IGFsZXJ0IGlzIHJlY2VpdmVkXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZGQgdG9hc3QgdG8gYXJyYXlcclxuICAgICAgICAgICAgdGhpcy5jc3NJbml0KHRvYXN0KTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHMudW5zaGlmdCh0b2FzdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSh0b2FzdCk7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgdG9hc3RFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB0b2FzdC0ke3RvYXN0LmlkfWApO1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IHQgPSBuZXcgYm9vdHN0cmFwLlRvYXN0KHRvYXN0RWwpO1xyXG4gICAgICAgICAgICAgICAgLy8gdC5zaG93KCk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuX2RlbGF5KTtcclxuXHJcblxyXG4gICAgICAgICAgICAvLyBsZXQgdG9hc3RFbExpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2FzdCcpKVxyXG4gICAgICAgICAgICAvLyBsZXQgdG9hc3RMaXN0ID0gdG9hc3RFbExpc3QubWFwKGZ1bmN0aW9uICh0b2FzdEVsKSB7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gbmV3IGJvb3RzdHJhcC5Ub2FzdCh0b2FzdEVsKVxyXG4gICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAvLyB0b2FzdExpc3QuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIHQuc2hvdygpO1xyXG4gICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jbGVhclRpbWVvdXQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIHJlbW92ZSh0b2FzdDogVG9hc3QpIHtcclxuICAgICAgICB0aGlzLnRvYXN0cyA9IHRoaXMudG9hc3RzLmZpbHRlcih4ID0+IHggIT09IHRvYXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclRpbWVvdXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNzc0luaXQodG9hc3Q6IFRvYXN0KSB7XHJcbiAgICAgICAgaWYgKCF0b2FzdCB8fCAhdG9hc3QudHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaWNvbiAmJiAhdG9hc3QuaWNvbikge1xyXG4gICAgICAgICAgICB0b2FzdC5pY29uID0gQm9vdHN0cmFwSGVscGVyLmNzc0FsZXJ0SWNvbih0b2FzdC50eXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2ID0gdG9hc3QgYXMgYW55O1xyXG4gICAgICAgIHN3aXRjaCAodG9hc3QudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdwcmltYXJ5JzpcclxuICAgICAgICAgICAgICAgIHYuY3NzID0gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XHJcbiAgICAgICAgICAgICAgICB2LmNzcyA9ICdiZy1zdWNjZXNzIHRleHQtd2hpdGUnO1xyXG4gICAgICAgICAgICAgICAgLy8gdi5pY29uQ29sb3IgPSAndGV4dC0tYWNjZW50LWdyZWVuJztcclxuICAgICAgICAgICAgICAgIC8vIHYuYm9yZGVyQ29sb3IgPSAnYm9yZGVyLS1hY2NlbnQtZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Rhbmdlcic6XHJcbiAgICAgICAgICAgICAgICB2LmNzcyA9ICdiZy1kYW5nZXIgdGV4dC13aGl0ZSc7XHJcbiAgICAgICAgICAgICAgICAvLyB2Lmljb25Db2xvciA9ICd0ZXh0LS1hY2NlbnQtcmVkJztcclxuICAgICAgICAgICAgICAgIC8vIHYuYm9yZGVyQ29sb3IgPSAnYm9yZGVyLS1hY2NlbnQtcmVkJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3YXJuaW5nJzpcclxuICAgICAgICAgICAgICAgIHYuY3NzID0gJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJztcclxuICAgICAgICAgICAgICAgIC8vIHYuaWNvbkNvbG9yID0gJ3RleHQtLWFjY2VudC15ZWxsb3cnO1xyXG4gICAgICAgICAgICAgICAgLy8gdi5ib3JkZXJDb2xvciA9ICdib3JkZXItLWFjY2VudC15ZWxsb3cnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2luZm8nOlxyXG4gICAgICAgICAgICAgICAgdi5jc3MgPSAnYmctaW5mbyB0ZXh0LXdoaXRlJztcclxuICAgICAgICAgICAgICAgIC8vIHYuaWNvbkNvbG9yID0gJ3RleHQtLWFjY2VudC1ibHVlJztcclxuICAgICAgICAgICAgICAgIC8vIHYuYm9yZGVyQ29sb3IgPSAnYm9yZGVyLS1hY2NlbnQtYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbGlnaHQnOlxyXG4gICAgICAgICAgICAgICAgdi5jc3MgPSAnYmctbGlnaHQgdGV4dC1kYXJrJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkYXJrJzpcclxuICAgICAgICAgICAgICAgIHYuY3NzID0gJ2JnLWRhcmsgdGV4dC13aGl0ZSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdi5jc3MgPSAnYmctc2Vjb25kYXJ5IHRleHQtd2hpdGUnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwidG9hc3QtY29udGFpbmVyIHBvc2l0aW9uLWZpeGVkIHRvcC0wIGVuZC0wIHAtM1wiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgdG9hc3Qgb2YgdG9hc3RzXCIgY2xhc3M9XCJ0b2FzdCBmYWRlIHNob3cgYm9yZGVyLTAge3sgdG9hc3QuY3NzIH19XCIgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgW2F0dHIuZGF0YS1icy1kZWxheV09XCJfZGVsYXlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9hc3QtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiICpuZ0lmPVwiaWNvbiAmJiB0b2FzdC5pY29uXCI+PGkgY2xhc3M9XCJ7eyB0b2FzdC5pY29uIH19XCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cIm1lLWF1dG9cIiAqbmdJZj1cInRvYXN0LnRpdGxlXCI+e3sgdG9hc3QudGl0bGUgfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgbXMtYXV0byBtZS0yXCIgZGF0YS1icy1kaXNtaXNzPVwidG9hc3RcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwicmVtb3ZlKHRvYXN0KVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2FzdC1ib2R5XCI+XHJcbiAgICAgICAgICAgIHt7IHRvYXN0Lm1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCB0b2FzdCBvZiB0b2FzdHNcIiBjbGFzcz1cInRvYXN0IGZhZGUgc2hvd1wiIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGRhdGEtYnMtZGVsYXk9XCIzMDAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvYXN0LWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHBlLTEgYm9yZGVyLXN0YXJ0IGJvcmRlci04IHt7dG9hc3QuYm9yZGVyQ29sb3J9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidG9hc3QuaWNvblwiIGNsYXNzPVwiaWNvbiBmbGV4LXNocmluay0wIHt7dG9hc3QuaWNvbkNvbG9yfX1cIj48aSBjbGFzcz1cInt7dG9hc3QuaWNvbn19XCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0b2FzdC50aXRsZVwiPjxoNT57e3RvYXN0LnRpdGxlfX08L2g1PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHRvYXN0Lm1lc3NhZ2UgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlIG1zLWF1dG8gbWUtMlwiIGRhdGEtYnMtZGlzbWlzcz1cInRvYXN0XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cInJlbW92ZSh0b2FzdClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9kaXY+Il19
@@ -1,11 +1,8 @@
1
1
  import { Component, Input } from '@angular/core';
2
- import { Convert } from '../../utils';
2
+ import { Convert, MathHelper } from '../../utils';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
- function clamp(v, min = 0, max = 100) {
7
- return Math.max(min, Math.min(max, v));
8
- }
9
6
  export class ZekProgress {
10
7
  constructor() {
11
8
  this._value = 0;
@@ -21,7 +18,7 @@ export class ZekProgress {
21
18
  return this._value;
22
19
  }
23
20
  set value(v) {
24
- const tmp = clamp(Convert.toNumber(v) || 0);
21
+ const tmp = MathHelper.clamp(Convert.toNumber(v) || 0, 0, 100);
25
22
  if (this._value !== tmp) {
26
23
  this._value = tmp;
27
24
  }
@@ -97,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
97
94
  }], background: [{
98
95
  type: Input
99
96
  }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9tb2R1bGVzL3Byb2dyZXNzL3Byb2dyZXNzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvbW9kdWxlcy9wcm9ncmVzcy9wcm9ncmVzcy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFL0MsU0FBUyxLQUFLLENBQUMsQ0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUc7SUFDeEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFhRCxNQUFNLE9BQU8sV0FBVztJQVR4QjtRQW9CWSxXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBVW5CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFTbkIsZUFBVSxHQUFHLElBQUksQ0FBQztRQWNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBVWpCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFTbEIsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFZN0IsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFVOUIsZ0JBQVcsR0FBZSxTQUFTLENBQUM7S0FDL0M7SUFyRkcsSUFDSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDO0lBQ0wsQ0FBQztJQUlELElBQ0ksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsQ0FBZTtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBR0QsSUFDSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxDQUFlO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFHRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUdELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsQ0FBZTtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBSUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxDQUFlO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFHRCxJQUNJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLENBQTRCO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBS0QsSUFDSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxDQUFjO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUlELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsQ0FBYTtRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDOzhHQXBGUSxXQUFXO2tHQUFYLFdBQVcsMFBDcEJ4QiwraEJBV00sK0VETUUsWUFBWTs7MkZBR1AsV0FBVztrQkFUdkIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sY0FBYyxXQUdmO3dCQUNMLFlBQVk7cUJBQ2Y7OEJBSUcsS0FBSztzQkFEUixLQUFLO2dCQWNGLFNBQVM7c0JBRFosS0FBSztnQkFVRixTQUFTO3NCQURaLEtBQUs7Z0JBZUYsT0FBTztzQkFEVixLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUs7Z0JBWUYsTUFBTTtzQkFEVCxLQUFLO2dCQVlGLFVBQVU7c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBOdW1iZXJJbnB1dCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBDb252ZXJ0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuZnVuY3Rpb24gY2xhbXAodjogbnVtYmVyLCBtaW4gPSAwLCBtYXggPSAxMDApIHtcclxuICAgIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdikpO1xyXG59XHJcblxyXG50eXBlIEJhY2tncm91bmQgPSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICdkYW5nZXInIHwgJ3dhcm5pbmcnIHwgJ2luZm8nIHwgJ2xpZ2h0JyB8ICdkYXJrJyB8ICdib2R5JyB8ICd3aGl0ZScgfCAndHJhbnNwYXJlbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgc2VsZWN0b3I6ICd6ZWstcHJvZ3Jlc3MnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyZXNzLmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFpla1Byb2dyZXNzIHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdmFsdWUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUodjogTnVtYmVySW5wdXQpIHtcclxuICAgICAgICBjb25zdCB0bXAgPSBjbGFtcChDb252ZXJ0LnRvTnVtYmVyKHYpIHx8IDApO1xyXG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdG1wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdG1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgPSAwO1xyXG5cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNob3dWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHNob3dWYWx1ZSh2OiBCb29sZWFuSW5wdXQpIHtcclxuICAgICAgICB0aGlzLl9zaG93VmFsdWUgPSBDb252ZXJ0LnRvQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2hvd1ZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzaG93VGl0bGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dUaXRsZTtcclxuICAgIH1cclxuICAgIHNldCBzaG93VGl0bGUodjogQm9vbGVhbklucHV0KSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1RpdGxlID0gQ29udmVydC50b0Jvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3Nob3dUaXRsZSA9IHRydWU7XHJcblxyXG4gICAgZ2V0IF90aXRsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1RpdGxlID8gYCR7dGhpcy5fdmFsdWV9ICVgIDogbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzdHJpcGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJpcGVkO1xyXG4gICAgfVxyXG4gICAgc2V0IHN0cmlwZWQodjogQm9vbGVhbklucHV0KSB7XHJcbiAgICAgICAgdGhpcy5fc3RyaXBlZCA9IENvbnZlcnQudG9Cb29sZWFuUHJvcGVydHkodik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zdHJpcGVkID0gZmFsc2U7XHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgYW5pbWF0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdGVkO1xyXG4gICAgfVxyXG4gICAgc2V0IGFuaW1hdGVkKHY6IEJvb2xlYW5JbnB1dCkge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGVkID0gQ29udmVydC50b0Jvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2FuaW1hdGVkID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBsYWJlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XHJcbiAgICB9XHJcbiAgICBzZXQgbGFiZWwodjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX2xhYmVsID0gdiA/IHYgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfbGFiZWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBoZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH1cclxuICAgIHNldCBoZWlnaHQodjogTnVtYmVySW5wdXQpIHtcclxuICAgICAgICBjb25zdCB0bXAgPSBDb252ZXJ0LnRvTnVtYmVyKHYpIHx8IDA7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdG1wID4gMCA/IHRtcCA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGJhY2tncm91bmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmQ7XHJcbiAgICB9XHJcbiAgICBzZXQgYmFja2dyb3VuZCh2OiBCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgdGhpcy5fYmFja2dyb3VuZCA9IHY7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9iYWNrZ3JvdW5kOiBCYWNrZ3JvdW5kID0gJ3ByaW1hcnknO1xyXG59IiwiPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIiBbdGl0bGVdPVwiX3RpdGxlXCIgPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciBiZy17e2JhY2tncm91bmR9fVwiIHJvbGU9XCJwcm9ncmVzc2JhclwiXHJcbiAgICAgICAgW2NsYXNzLnByb2dyZXNzLWJhci1zdHJpcGVkXT1cInN0cmlwZWQgfHwgYW5pbWF0ZWRcIlxyXG4gICAgICAgIFtjbGFzcy5wcm9ncmVzcy1iYXItYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIlxyXG4gICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInZhbHVlXCJcclxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlXCJcclxuICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiXHJcbiAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VmFsdWVcIj57e3ZhbHVlfX0lPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9tb2R1bGVzL3Byb2dyZXNzL3Byb2dyZXNzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvbW9kdWxlcy9wcm9ncmVzcy9wcm9ncmVzcy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBYS9DLE1BQU0sT0FBTyxXQUFXO0lBVHhCO1FBb0JZLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFVbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQVNuQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBY2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFVakIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQVNsQixXQUFNLEdBQWtCLElBQUksQ0FBQztRQVk3QixZQUFPLEdBQWtCLElBQUksQ0FBQztRQVU5QixnQkFBVyxHQUFlLFNBQVMsQ0FBQztLQUMvQztJQXJGRyxJQUNJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLENBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLENBQUM7SUFDTCxDQUFDO0lBSUQsSUFDSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxDQUFlO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFHRCxJQUNJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLENBQWU7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUdELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN2RCxDQUFDO0lBR0QsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxDQUFlO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFJRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLENBQWU7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUdELElBQ0ksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBNEI7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFLRCxJQUNJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLENBQWM7UUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBSUQsSUFDSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxDQUFhO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7OEdBcEZRLFdBQVc7a0dBQVgsV0FBVywwUENoQnhCLCtoQkFXTSwrRURFRSxZQUFZOzsyRkFHUCxXQUFXO2tCQVR2QixTQUFTO2lDQUNNLElBQUksWUFDTixjQUFjLFdBR2Y7d0JBQ0wsWUFBWTtxQkFDZjs4QkFJRyxLQUFLO3NCQURSLEtBQUs7Z0JBY0YsU0FBUztzQkFEWixLQUFLO2dCQVVGLFNBQVM7c0JBRFosS0FBSztnQkFlRixPQUFPO3NCQURWLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLEtBQUs7c0JBRFIsS0FBSztnQkFZRixNQUFNO3NCQURULEtBQUs7Z0JBWUYsVUFBVTtzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIE51bWJlcklucHV0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IENvbnZlcnQsIE1hdGhIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG50eXBlIEJhY2tncm91bmQgPSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICdkYW5nZXInIHwgJ3dhcm5pbmcnIHwgJ2luZm8nIHwgJ2xpZ2h0JyB8ICdkYXJrJyB8ICdib2R5JyB8ICd3aGl0ZScgfCAndHJhbnNwYXJlbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgc2VsZWN0b3I6ICd6ZWstcHJvZ3Jlc3MnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyZXNzLmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFpla1Byb2dyZXNzIHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdmFsdWUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUodjogTnVtYmVySW5wdXQpIHtcclxuICAgICAgICBjb25zdCB0bXAgPSBNYXRoSGVscGVyLmNsYW1wKENvbnZlcnQudG9OdW1iZXIodikgfHwgMCwgMCwgMTAwKTtcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT09IHRtcCkge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF92YWx1ZTogbnVtYmVyID0gMDtcclxuXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzaG93VmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dWYWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBzaG93VmFsdWUodjogQm9vbGVhbklucHV0KSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1ZhbHVlID0gQ29udmVydC50b0Jvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3Nob3dWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93VGl0bGU7XHJcbiAgICB9XHJcbiAgICBzZXQgc2hvd1RpdGxlKHY6IEJvb2xlYW5JbnB1dCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dUaXRsZSA9IENvbnZlcnQudG9Cb29sZWFuUHJvcGVydHkodik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zaG93VGl0bGUgPSB0cnVlO1xyXG5cclxuICAgIGdldCBfdGl0bGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dUaXRsZSA/IGAke3RoaXMuX3ZhbHVlfSAlYCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc3RyaXBlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RyaXBlZDtcclxuICAgIH1cclxuICAgIHNldCBzdHJpcGVkKHY6IEJvb2xlYW5JbnB1dCkge1xyXG4gICAgICAgIHRoaXMuX3N0cmlwZWQgPSBDb252ZXJ0LnRvQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc3RyaXBlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGFuaW1hdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRlZDtcclxuICAgIH1cclxuICAgIHNldCBhbmltYXRlZCh2OiBCb29sZWFuSW5wdXQpIHtcclxuICAgICAgICB0aGlzLl9hbmltYXRlZCA9IENvbnZlcnQudG9Cb29sZWFuUHJvcGVydHkodik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9hbmltYXRlZCA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgbGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xyXG4gICAgfVxyXG4gICAgc2V0IGxhYmVsKHY6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9sYWJlbCA9IHYgPyB2IDogbnVsbDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2xhYmVsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBzZXQgaGVpZ2h0KHY6IE51bWJlcklucHV0KSB7XHJcbiAgICAgICAgY29uc3QgdG1wID0gQ29udmVydC50b051bWJlcih2KSB8fCAwO1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHRtcCA+IDAgPyB0bXAgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBiYWNrZ3JvdW5kKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gICAgc2V0IGJhY2tncm91bmQodjogQmFja2dyb3VuZCkge1xyXG4gICAgICAgIHRoaXMuX2JhY2tncm91bmQgPSB2O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfYmFja2dyb3VuZDogQmFja2dyb3VuZCA9ICdwcmltYXJ5JztcclxufSIsIjxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0XCIgW3RpdGxlXT1cIl90aXRsZVwiID5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgYmcte3tiYWNrZ3JvdW5kfX1cIiByb2xlPVwicHJvZ3Jlc3NiYXJcIlxyXG4gICAgICAgIFtjbGFzcy5wcm9ncmVzcy1iYXItc3RyaXBlZF09XCJzdHJpcGVkIHx8IGFuaW1hdGVkXCJcclxuICAgICAgICBbY2xhc3MucHJvZ3Jlc3MtYmFyLWFuaW1hdGVkXT1cImFuaW1hdGVkXCJcclxuICAgICAgICBbc3R5bGUud2lkdGguJV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ2YWx1ZVwiXHJcbiAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxyXG4gICAgICAgIGFyaWEtdmFsdWVtYXg9XCIxMDBcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1ZhbHVlXCI+e3t2YWx1ZX19JTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
@@ -1,60 +1,63 @@
1
1
  import { Injectable, } from '@angular/core';
2
- import { BehaviorSubject, Subject } from 'rxjs';
2
+ import { Subject } from 'rxjs';
3
3
  import { DateHelper, ObjectHelper, StorageHelper } from '../utils';
4
4
  import { BitwiseHelper } from '../utils/bitwise-helper';
5
5
  import * as i0 from "@angular/core";
6
6
  export class AuthService {
7
+ static { this.USER_KEY = 'user'; }
8
+ static { this.REFRESH_TOKEN_INTERVAL = 15 * 60 * 1000; }
7
9
  constructor() {
8
- this._isInitialized = false;
9
10
  this._auth = false;
10
11
  this._user = null;
11
- }
12
- static { this.USER_KEY = 'user'; }
13
- // access_token
14
- get user() {
15
- if (!this._isInitialized) {
16
- const user = StorageHelper.get(AuthService.USER_KEY);
12
+ const user = StorageHelper.get(AuthService.USER_KEY);
13
+ if (user) {
17
14
  this._init(user);
18
15
  }
16
+ }
17
+ get _isAuthenticated() {
18
+ const expired = this.getExpired();
19
+ return new Date() < expired;
20
+ }
21
+ get user() {
19
22
  return this._user;
20
23
  }
21
- /**
22
- * Inits user (parses fields and starts refresh token timer if needed)
23
- * @param user user from json or storage
24
- */
25
- _init(user) {
26
- if (user) {
27
- //convert string to specified types
28
- user.expired = ObjectHelper.isDefined(user.expired) ? DateHelper.parseDate(user.expired) : user.expired;
29
- user.refreshTokenTime = ObjectHelper.isDefined(user.refreshTokenTime) ? DateHelper.parseDate(user.refreshTokenTime) : user.refreshTokenTime;
30
- if (Array.isArray(user.roles)) {
31
- user.roles = user.roles.map(function (e) { return e ? e.toUpperCase() : e; });
32
- }
24
+ get isAuthenticated() {
25
+ return this._auth;
26
+ }
27
+ _starTimer() {
28
+ this._stopTimer();
29
+ let interval = this.getExpired().getTime() - new Date().getTime() + 1000;
30
+ if (interval < 1000)
31
+ interval = 1000;
32
+ if (interval > 0 && this._user) {
33
+ this._timerId = setTimeout(() => {
34
+ this._onTick();
35
+ }, interval);
36
+ }
37
+ }
38
+ _stopTimer() {
39
+ if (typeof this._timerId === 'number') {
40
+ clearTimeout(this._timerId);
41
+ }
42
+ }
43
+ _onTick() {
44
+ const newValue = this._isAuthenticated;
45
+ if (this._auth !== newValue && !newValue) {
46
+ this.logout();
33
47
  }
34
- this._user = user;
35
- this._isInitialized = true;
36
- this._starRefreshTokenTimer();
37
48
  }
38
49
  _starRefreshTokenTimer() {
39
50
  this._stopRefreshTokenTimer();
40
- const user = this._user;
41
- if (user && user.refreshTokenTime) {
42
- let timeout = user.refreshTokenTime.getTime() - Date.now(); // - (60 * 1000);
43
- if (timeout < 0) {
51
+ const interval = AuthService.REFRESH_TOKEN_INTERVAL;
52
+ if (interval > 0 && this._user) {
53
+ this._refreshTimerId = setInterval(() => {
44
54
  this.emitOnRefreshToken();
45
- }
46
- const minRefreshTime = 60000; //1 min;
47
- if (timeout < minRefreshTime) {
48
- timeout = minRefreshTime;
49
- }
50
- this._timerId = setInterval(() => {
51
- this.emitOnRefreshToken();
52
- }, timeout);
55
+ }, interval);
53
56
  }
54
57
  }
55
58
  _stopRefreshTokenTimer() {
56
- if (typeof this._timerId === 'number') {
57
- clearInterval(this._timerId);
59
+ if (typeof this._refreshTimerId === 'number') {
60
+ clearInterval(this._refreshTimerId);
58
61
  }
59
62
  }
60
63
  emitOnRefreshToken() {
@@ -62,29 +65,6 @@ export class AuthService {
62
65
  this._onRefreshTokenSubject.next();
63
66
  }
64
67
  }
65
- get _isAuthenticated() {
66
- const expired = this.getExpired();
67
- return new Date() < expired;
68
- }
69
- /**
70
- * Dynamic property. gets auth user and checks expired;
71
- */
72
- get isAuthenticated() {
73
- const newValue = this._isAuthenticated;
74
- if (this._auth !== newValue) {
75
- this._auth = newValue;
76
- //if user is signed in and expired we need to logout (remove from localStorage)
77
- if (!newValue) {
78
- this.logout(); //this executes emitOnSignedIn so we don't need here execute emitOnSignedIn
79
- }
80
- else {
81
- //this line need if you already logged in and refresh page. (System will init user from storage and verify)
82
- this.emitOnSignedIn();
83
- }
84
- return newValue;
85
- }
86
- return newValue;
87
- }
88
68
  emitOnSignedIn() {
89
69
  if (this._onSignedInSubject) {
90
70
  this._onSignedInSubject.next(this._auth);
@@ -92,7 +72,7 @@ export class AuthService {
92
72
  }
93
73
  get onSignedIn() {
94
74
  if (!this._onSignedInSubject) {
95
- this._onSignedInSubject = new BehaviorSubject(false);
75
+ this._onSignedInSubject = new Subject(); //(this.isAuthenticated);
96
76
  this._onSignedInObservable = this._onSignedInSubject.asObservable();
97
77
  }
98
78
  if (!this._onSignedInObservable)
@@ -108,41 +88,46 @@ export class AuthService {
108
88
  throw new Error("onRefreshTokenObservable is undefined");
109
89
  return this._onRefreshTokenObservable;
110
90
  }
111
- _login(user) {
91
+ login(user) {
112
92
  StorageHelper.set(AuthService.USER_KEY, user);
113
- this._isInitialized = false; //user get method will init user
114
93
  this._init(user);
115
- this._auth = ObjectHelper.isDefined(user);
116
- this.emitOnSignedIn();
117
94
  }
118
- login(user) {
119
- this._login(user);
95
+ _init(user) {
96
+ if (user) {
97
+ //convert string to local date/time
98
+ user.expired = ObjectHelper.isDefined(user.expired) ? DateHelper.parseDate(user.expired) : user.expired;
99
+ if (Array.isArray(user.roles)) {
100
+ user.roles = user.roles.map(function (e) { return e ? e.toUpperCase() : e; });
101
+ }
102
+ }
103
+ this._user = user;
104
+ // if (!this._auth) {
105
+ // this._auth = true;
106
+ // this.emitOnSignedIn();
107
+ // }
108
+ this._auth = true;
109
+ this.emitOnSignedIn();
110
+ //restart timers for new timeouts
111
+ this._starTimer();
112
+ this._starRefreshTokenTimer();
120
113
  }
121
114
  logout() {
122
- this._login(null);
115
+ StorageHelper.set(AuthService.USER_KEY, null);
116
+ this._user = null;
117
+ if (this._auth) {
118
+ this._auth = false;
119
+ this.emitOnSignedIn();
120
+ }
121
+ this._stopTimer();
122
+ this._stopRefreshTokenTimer();
123
123
  }
124
+ /**
125
+ *
126
+ * @returns user expiry date. if user is null returns min JS date
127
+ */
124
128
  getExpired() {
125
- return this.user?.expired ?? new Date(0); // if getExpired is null return min JS date;
126
- }
127
- // protected getRefreshTokenExpired(): Date | null | undefined {
128
- // const user = this.user;
129
- // if (user) {
130
- // return user.refreshTokenTime;
131
- // }
132
- // return null;
133
- // }
134
- // isInRole(allowedRoles: string[]): boolean {
135
- // if (!allowedRoles || allowedRoles.length === 0) {
136
- // return true;
137
- // }
138
- // const tmp = this.getUser();
139
- // const roles = tmp ? tmp.roles : null;
140
- // if (!roles || roles.length === 0) {
141
- // return false;
142
- // }
143
- // let isInRole = allowedRoles.some(role => roles.indexOf(role) !== -1);
144
- // return isInRole;
145
- // }
129
+ return this.user?.expired ?? new Date(0);
130
+ }
146
131
  hasPermission(permission) {
147
132
  if (!permission) {
148
133
  return true;
@@ -205,5 +190,5 @@ export class AuthService {
205
190
  }
206
191
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: AuthService, decorators: [{
207
192
  type: Injectable
208
- }] });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFXLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHeEQsTUFBTSxPQUFPLFdBQVc7SUFEeEI7UUFFWSxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsVUFBSyxHQUFxQixJQUFJLENBQUM7S0FtUDFDO2FBalBVLGFBQVEsR0FBRyxNQUFNLEFBQVQsQ0FBVTtJQUN6QixlQUFlO0lBRWYsSUFBSSxJQUFJO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxJQUFTO1FBQ25CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FB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Q0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLEtBQUs7b0JBQ0wsT0FBTyxJQUFJLENBQUM7WUFDcEIsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsaUJBQWlCLENBQUMsSUFBUztRQUN2Qix1REFBdUQ7UUFDdkQsbUNBQW1DO1FBQ25DLDhDQUE4QztRQUU5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRW5DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckQsb0NBQW9DO1FBQ3BDLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7OEdBclBRLFdBQVc7a0hBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBLZXlQYWlyLCBMb2dpblRva2VuLCBMb2dpblVzZXIgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb252ZXJ0LCBEYXRlSGVscGVyLCBPYmplY3RIZWxwZXIsIFN0b3JhZ2VIZWxwZXIgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEJpdHdpc2VIZWxwZXIgfSBmcm9tICcuLi91dGlscy9iaXR3aXNlLWhlbHBlcic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9hdXRoID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF91c2VyOiBMb2dpblVzZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBzdGF0aWMgVVNFUl9LRVkgPSAndXNlcic7XHJcbiAgICAvLyBhY2Nlc3NfdG9rZW5cclxuXHJcbiAgICBnZXQgdXNlcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IFN0b3JhZ2VIZWxwZXIuZ2V0KEF1dGhTZXJ2aWNlLlVTRVJfS0VZKTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdCh1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0cyB1c2VyIChwYXJzZXMgZmllbGRzIGFuZCBzdGFydHMgcmVmcmVzaCB0b2tlbiB0aW1lciBpZiBuZWVkZWQpXHJcbiAgICAgKiBAcGFyYW0gdXNlciB1c2VyIGZyb20ganNvbiBvciBzdG9yYWdlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2luaXQodXNlcjogYW55KSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgLy9jb252ZXJ0IHN0cmluZyB0byBzcGVjaWZpZWQgdHlwZXNcclxuICAgICAgICAgICAgdXNlci5leHBpcmVkID0gT2JqZWN0SGVscGVyLmlzRGVmaW5lZCh1c2VyLmV4cGlyZWQpID8gRGF0ZUhlbHBlci5wYXJzZURhdGUodXNlci5leHBpcmVkKSA6IHVzZXIuZXhwaXJlZDtcclxuICAgICAgICAgICAgdXNlci5yZWZyZXNoVG9rZW5UaW1lID0gT2JqZWN0SGVscGVyLmlzRGVmaW5lZCh1c2VyLnJlZnJlc2hUb2tlblRpbWUpID8gRGF0ZUhlbHBlci5wYXJzZURhdGUodXNlci5yZWZyZXNoVG9rZW5UaW1lKSA6IHVzZXIucmVmcmVzaFRva2VuVGltZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVzZXIucm9sZXMpKSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyLnJvbGVzID0gdXNlci5yb2xlcy5tYXAoZnVuY3Rpb24gKGU6IGFueSkgeyByZXR1cm4gZSA/IGUudG9VcHBlckNhc2UoKSA6IGU7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VzZXIgPSB1c2VyO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3N0YXJSZWZyZXNoVG9rZW5UaW1lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3RpbWVySWQ6IGFueTtcclxuICAgIHByaXZhdGUgX3N0YXJSZWZyZXNoVG9rZW5UaW1lcigpIHtcclxuICAgICAgICB0aGlzLl9zdG9wUmVmcmVzaFRva2VuVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3VzZXI7XHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5yZWZyZXNoVG9rZW5UaW1lKSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gdXNlci5yZWZyZXNoVG9rZW5UaW1lLmdldFRpbWUoKSAtIERhdGUubm93KCk7Ly8gLSAoNjAgKiAxMDAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0T25SZWZyZXNoVG9rZW4oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbWluUmVmcmVzaFRpbWUgPSA2MF8wMDAvLzEgbWluO1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCA8IG1pblJlZnJlc2hUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbWluUmVmcmVzaFRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRPblJlZnJlc2hUb2tlbigpO1xyXG4gICAgICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zdG9wUmVmcmVzaFRva2VuVGltZXIoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl90aW1lcklkID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX3RpbWVySWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVtaXRPblJlZnJlc2hUb2tlbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uUmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGdldCBfaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IGV4cGlyZWQgPSB0aGlzLmdldEV4cGlyZWQoKVxyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpIDwgZXhwaXJlZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRHluYW1pYyBwcm9wZXJ0eS4gZ2V0cyBhdXRoIHVzZXIgYW5kIGNoZWNrcyBleHBpcmVkO1xyXG4gICAgICovXHJcbiAgICBnZXQgaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5faXNBdXRoZW50aWNhdGVkO1xyXG4gICAgICAgIGlmICh0aGlzLl9hdXRoICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRoID0gbmV3VmFsdWU7XHJcblxyXG5cclxuICAgICAgICAgICAgLy9pZiB1c2VyIGlzIHNpZ25lZCBpbiBhbmQgZXhwaXJlZCB3ZSBuZWVkIHRvIGxvZ291dCAocmVtb3ZlIGZyb20gbG9jYWxTdG9yYWdlKVxyXG4gICAgICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ291dCgpOy8vdGhpcyBleGVjdXRlcyBlbWl0T25TaWduZWRJbiBzbyB3ZSBkb24ndCBuZWVkIGhlcmUgZXhlY3V0ZSBlbWl0T25TaWduZWRJblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy90aGlzIGxpbmUgbmVlZCBpZiB5b3UgYWxyZWFkeSBsb2dnZWQgaW4gYW5kIHJlZnJlc2ggcGFnZS4gKFN5c3RlbSB3aWxsIGluaXQgdXNlciBmcm9tIHN0b3JhZ2UgYW5kIHZlcmlmeSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdE9uU2lnbmVkSW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBlbWl0T25TaWduZWRJbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fb25TaWduZWRJblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25TaWduZWRJblN1YmplY3QubmV4dCh0aGlzLl9hdXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfb25TaWduZWRJblN1YmplY3Q/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47Ly9CZWhhdmlvclN1YmplY3QgaXMgZm9yIGluaXRpYWwgZmlydCB2YWx1ZSA9IGZhbHNlXHJcbiAgICBwcml2YXRlIF9vblNpZ25lZEluT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBnZXQgb25TaWduZWRJbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX29uU2lnbmVkSW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2lnbmVkSW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2lnbmVkSW5PYnNlcnZhYmxlID0gdGhpcy5fb25TaWduZWRJblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX29uU2lnbmVkSW5PYnNlcnZhYmxlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfb25FeGVjdXRlT2JzZXJ2YWJsZSBpcyB1bmRlZmluZWRcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vblNpZ25lZEluT2JzZXJ2YWJsZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfb25SZWZyZXNoVG9rZW5TdWJqZWN0PzogU3ViamVjdDx2b2lkPjtcclxuICAgIHByaXZhdGUgX29uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICBnZXQgb25SZWZyZXNoVG9rZW4oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblJlZnJlc2hUb2tlblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgICAgICAgICAgdGhpcy5fb25SZWZyZXNoVG9rZW5PYnNlcnZhYmxlID0gdGhpcy5fb25SZWZyZXNoVG9rZW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9vblJlZnJlc2hUb2tlbk9ic2VydmFibGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZSBpcyB1bmRlZmluZWRcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vblJlZnJlc2hUb2tlbk9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwcml2YXRlIF9sb2dpbih1c2VyOiBhbnkpIHtcclxuICAgICAgICBTdG9yYWdlSGVscGVyLnNldChBdXRoU2VydmljZS5VU0VSX0tFWSwgdXNlcik7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlOy8vdXNlciBnZXQgbWV0aG9kIHdpbGwgaW5pdCB1c2VyXHJcbiAgICAgICAgdGhpcy5faW5pdCh1c2VyKTtcclxuICAgICAgICB0aGlzLl9hdXRoID0gT2JqZWN0SGVscGVyLmlzRGVmaW5lZCh1c2VyKTtcclxuICAgICAgICB0aGlzLmVtaXRPblNpZ25lZEluKCk7XHJcbiAgICB9XHJcbiAgICBsb2dpbih1c2VyOiBMb2dpblRva2VuIHwgTG9naW5Vc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fbG9naW4odXNlcik7XHJcbiAgICB9XHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5fbG9naW4obnVsbCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRFeHBpcmVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXI/LmV4cGlyZWQgPz8gbmV3IERhdGUoMCk7Ly8gaWYgZ2V0RXhwaXJlZCBpcyBudWxsIHJldHVybiBtaW4gSlMgZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcm90ZWN0ZWQgZ2V0UmVmcmVzaFRva2VuRXhwaXJlZCgpOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCB7XHJcbiAgICAvLyAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlcjtcclxuICAgIC8vICAgICBpZiAodXNlcikge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdXNlci5yZWZyZXNoVG9rZW5UaW1lO1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICAgIC8vIGlzSW5Sb2xlKGFsbG93ZWRSb2xlczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIC8vICAgICBpZiAoIWFsbG93ZWRSb2xlcyB8fCBhbGxvd2VkUm9sZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgY29uc3QgdG1wID0gdGhpcy5nZXRVc2VyKCk7XHJcbiAgICAvLyAgICAgY29uc3Qgcm9sZXMgPSB0bXAgPyB0bXAucm9sZXMgOiBudWxsO1xyXG4gICAgLy8gICAgIGlmICghcm9sZXMgfHwgcm9sZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIGxldCBpc0luUm9sZSA9IGFsbG93ZWRSb2xlcy5zb21lKHJvbGUgPT4gcm9sZXMuaW5kZXhPZihyb2xlKSAhPT0gLTEpO1xyXG4gICAgLy8gICAgIHJldHVybiBpc0luUm9sZTtcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uPzogS2V5UGFpcjxudW1iZXIsIG51bWJlcj4gfCBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGtleSA9IDA7XHJcbiAgICAgICAgbGV0IHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHBlcm1pc3Npb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGtleSA9ICtwZXJtaXNzaW9uO1xyXG4gICAgICAgIH0vLyBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwZXJtaXNzaW9uID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb24ua2V5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICBrZXkgPSBwZXJtaXNzaW9uLmtleTtcclxuICAgICAgICAgICAgdmFsdWUgPSBwZXJtaXNzaW9uLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMoW2tleV0sIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFzUGVybWlzc2lvbnMocGVybWlzc2lvbnM/OiBBcnJheTxudW1iZXI+LCB2YWx1ZT86IG51bWJlciB8IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXBlcm1pc3Npb25zIHx8IHBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXI7XHJcbiAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlciA/IHVzZXIucGVybWlzc2lvbnMgOiBudWxsO1xyXG4gICAgICAgIGlmICghdXNlclBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGVybWlzc2lvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHVzZXJQZXJtaXNzaW9uc1twXTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSBCaXR3aXNlSGVscGVyLmhhc0ZsYWcoZm91bmQsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGVybWlzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGVybWlzc2lvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHVzZXJQZXJtaXNzaW9uc1twXTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBoYXNEYXRhUGVybWlzc2lvbihkYXRhOiBhbnkpIHtcclxuICAgICAgICAvL2lmIChkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYWxsb3dlZFJvbGVzID0gZGF0YS5yb2xlcztcclxuICAgICAgICAvLyBsZXQgaXNJblJvbGUgPSB0aGlzLmlzSW5Sb2xlKGFsbG93ZWRSb2xlcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBkYXRhLnBlcm1pc3Npb247XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSB0aGlzLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbik7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBpc0luUm9sZSAmJiBoYXNQZXJtaXNzaW9uO1xyXG4gICAgICAgIHJldHVybiBoYXNQZXJtaXNzaW9uO1xyXG4gICAgfVxyXG59Il19
193
+ }], ctorParameters: () => [] });
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvemVrL3NyYy9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUErQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHeEQsTUFBTSxPQUFPLFdBQVc7YUFDYixhQUFRLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDbEIsMkJBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEFBQWpCLENBQWtCO0lBTy9DO1FBTFEsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLFVBQUssR0FBcUIsSUFBSSxDQUFDO1FBS25DLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDO0lBR0QsSUFBWSxnQkFBZ0I7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE9BQU8sSUFBSSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUlELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFB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QUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLEtBQUs7b0JBQ0wsT0FBTyxJQUFJLENBQUM7WUFDcEIsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsaUJBQWlCLENBQUMsSUFBUztRQUN2Qix1REFBdUQ7UUFDdkQsbUNBQW1DO1FBQ25DLDhDQUE4QztRQUU5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRW5DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckQsb0NBQW9DO1FBQ3BDLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7OEdBMU9RLFdBQVc7a0hBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBLZXlQYWlyLCBMb2dpblRva2VuLCBMb2dpblVzZXIgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEYXRlSGVscGVyLCBPYmplY3RIZWxwZXIsIFN0b3JhZ2VIZWxwZXIgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEJpdHdpc2VIZWxwZXIgfSBmcm9tICcuLi91dGlscy9iaXR3aXNlLWhlbHBlcic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgICBzdGF0aWMgVVNFUl9LRVkgPSAndXNlcic7XHJcbiAgICBzdGF0aWMgUkVGUkVTSF9UT0tFTl9JTlRFUlZBTCA9IDE1ICogNjAgKiAxMDAwO1xyXG5cclxuICAgIHByaXZhdGUgX2F1dGggPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3VzZXI6IExvZ2luVXNlciB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBfdGltZXJJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBfcmVmcmVzaFRpbWVySWQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBjb25zdCB1c2VyID0gU3RvcmFnZUhlbHBlci5nZXQoQXV0aFNlcnZpY2UuVVNFUl9LRVkpO1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXQodXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGdldCBfaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IGV4cGlyZWQgPSB0aGlzLmdldEV4cGlyZWQoKVxyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpIDwgZXhwaXJlZDtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGdldCB1c2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zdGFyVGltZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fc3RvcFRpbWVyKCk7XHJcblxyXG4gICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuZ2V0RXhwaXJlZCgpLmdldFRpbWUoKSAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgMTAwMDtcclxuICAgICAgICBpZiAoaW50ZXJ2YWwgPCAxMDAwKVxyXG4gICAgICAgICAgICBpbnRlcnZhbCA9IDEwMDA7XHJcbiAgICAgICAgaWYgKGludGVydmFsID4gMCAmJiB0aGlzLl91c2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uVGljaygpO1xyXG4gICAgICAgICAgICB9LCBpbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc3RvcFRpbWVyKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fdGltZXJJZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVySWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9vblRpY2soKSB7XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1dGggIT09IG5ld1ZhbHVlICYmICFuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfc3RhclJlZnJlc2hUb2tlblRpbWVyKCkge1xyXG4gICAgICAgIHRoaXMuX3N0b3BSZWZyZXNoVG9rZW5UaW1lcigpO1xyXG5cclxuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IEF1dGhTZXJ2aWNlLlJFRlJFU0hfVE9LRU5fSU5URVJWQUw7XHJcbiAgICAgICAgaWYgKGludGVydmFsID4gMCAmJiB0aGlzLl91c2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hUaW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0T25SZWZyZXNoVG9rZW4oKTtcclxuICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX3N0b3BSZWZyZXNoVG9rZW5UaW1lcigpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3JlZnJlc2hUaW1lcklkID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX3JlZnJlc2hUaW1lcklkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbWl0T25SZWZyZXNoVG9rZW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX29uUmVmcmVzaFRva2VuU3ViamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vblJlZnJlc2hUb2tlblN1YmplY3QubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgZW1pdE9uU2lnbmVkSW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX29uU2lnbmVkSW5TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2lnbmVkSW5TdWJqZWN0Lm5leHQodGhpcy5fYXV0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX29uU2lnbmVkSW5TdWJqZWN0PzogU3ViamVjdDxib29sZWFuPjsvL0JlaGF2aW9yU3ViamVjdCBpcyBmb3IgaW5pdGlhbCBmaXJ0IHZhbHVlID0gZmFsc2VcclxuICAgIHByaXZhdGUgX29uU2lnbmVkSW5PYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGdldCBvblNpZ25lZEluKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fb25TaWduZWRJblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25TaWduZWRJblN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpOy8vKHRoaXMuaXNBdXRoZW50aWNhdGVkKTtcclxuICAgICAgICAgICAgdGhpcy5fb25TaWduZWRJbk9ic2VydmFibGUgPSB0aGlzLl9vblNpZ25lZEluU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fb25TaWduZWRJbk9ic2VydmFibGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIl9vbkV4ZWN1dGVPYnNlcnZhYmxlIGlzIHVuZGVmaW5lZFwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uU2lnbmVkSW5PYnNlcnZhYmxlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIF9vblJlZnJlc2hUb2tlblN1YmplY3Q/OiBTdWJqZWN0PHZvaWQ+O1xyXG4gICAgcHJpdmF0ZSBfb25SZWZyZXNoVG9rZW5PYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgIGdldCBvblJlZnJlc2hUb2tlbigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX29uUmVmcmVzaFRva2VuU3ViamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vblJlZnJlc2hUb2tlblN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgICAgICAgICB0aGlzLl9vblJlZnJlc2hUb2tlbk9ic2VydmFibGUgPSB0aGlzLl9vblJlZnJlc2hUb2tlblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX29uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwib25SZWZyZXNoVG9rZW5PYnNlcnZhYmxlIGlzIHVuZGVmaW5lZFwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uUmVmcmVzaFRva2VuT2JzZXJ2YWJsZTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGxvZ2luKHVzZXI6IExvZ2luVG9rZW4gfCBMb2dpblVzZXIpIHtcclxuICAgICAgICBTdG9yYWdlSGVscGVyLnNldChBdXRoU2VydmljZS5VU0VSX0tFWSwgdXNlcik7XHJcbiAgICAgICAgdGhpcy5faW5pdCh1c2VyKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2luaXQodXNlcjogTG9naW5Ub2tlbiB8IExvZ2luVXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIC8vY29udmVydCBzdHJpbmcgdG8gbG9jYWwgZGF0ZS90aW1lXHJcbiAgICAgICAgICAgIHVzZXIuZXhwaXJlZCA9IE9iamVjdEhlbHBlci5pc0RlZmluZWQodXNlci5leHBpcmVkKSA/IERhdGVIZWxwZXIucGFyc2VEYXRlKHVzZXIuZXhwaXJlZCkgOiB1c2VyLmV4cGlyZWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh1c2VyLnJvbGVzKSkge1xyXG4gICAgICAgICAgICAgICAgdXNlci5yb2xlcyA9IHVzZXIucm9sZXMubWFwKGZ1bmN0aW9uIChlOiBhbnkpIHsgcmV0dXJuIGUgPyBlLnRvVXBwZXJDYXNlKCkgOiBlOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91c2VyID0gdXNlciBhcyBhbnk7XHJcblxyXG4gICAgICAgIC8vIGlmICghdGhpcy5fYXV0aCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl9hdXRoID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgdGhpcy5lbWl0T25TaWduZWRJbigpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLl9hdXRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVtaXRPblNpZ25lZEluKCk7XHJcblxyXG4gICAgICAgIC8vcmVzdGFydCB0aW1lcnMgZm9yIG5ldyB0aW1lb3V0c1xyXG4gICAgICAgIHRoaXMuX3N0YXJUaW1lcigpO1xyXG4gICAgICAgIHRoaXMuX3N0YXJSZWZyZXNoVG9rZW5UaW1lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICBTdG9yYWdlSGVscGVyLnNldChBdXRoU2VydmljZS5VU0VSX0tFWSwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1dGgpIHtcclxuICAgICAgICAgICAgdGhpcy5fYXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRPblNpZ25lZEluKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zdG9wVGltZXIoKTtcclxuICAgICAgICB0aGlzLl9zdG9wUmVmcmVzaFRva2VuVGltZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB1c2VyIGV4cGlyeSBkYXRlLiBpZiB1c2VyIGlzIG51bGwgcmV0dXJucyBtaW4gSlMgZGF0ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0RXhwaXJlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyPy5leHBpcmVkID8/IG5ldyBEYXRlKDApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbj86IEtleVBhaXI8bnVtYmVyLCBudW1iZXI+IHwgbnVtYmVyIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghcGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBrZXkgPSAwO1xyXG4gICAgICAgIGxldCB2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodHlwZW9mIHBlcm1pc3Npb24gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwZXJtaXNzaW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBrZXkgPSArcGVybWlzc2lvbjtcclxuICAgICAgICB9Ly8gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwZXJtaXNzaW9uKSkge1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uLmtleSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAga2V5ID0gcGVybWlzc2lvbi5rZXk7XHJcbiAgICAgICAgICAgIHZhbHVlID0gcGVybWlzc2lvbi52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb25zKFtrZXldLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGhhc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zPzogQXJyYXk8bnVtYmVyPiwgdmFsdWU/OiBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9ucyB8fCBwZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyO1xyXG4gICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXIgPyB1c2VyLnBlcm1pc3Npb25zIDogbnVsbDtcclxuICAgICAgICBpZiAoIXVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHBlcm1pc3Npb25zW2ldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB1c2VyUGVybWlzc2lvbnNbcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gQml0d2lzZUhlbHBlci5oYXNGbGFnKGZvdW5kLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Blcm1pc3Npb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHBlcm1pc3Npb25zW2ldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB1c2VyUGVybWlzc2lvbnNbcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFzRGF0YVBlcm1pc3Npb24oZGF0YTogYW55KSB7XHJcbiAgICAgICAgLy9pZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnN0IGFsbG93ZWRSb2xlcyA9IGRhdGEucm9sZXM7XHJcbiAgICAgICAgLy8gbGV0IGlzSW5Sb2xlID0gdGhpcy5pc0luUm9sZShhbGxvd2VkUm9sZXMpO1xyXG5cclxuICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gZGF0YS5wZXJtaXNzaW9uO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gdGhpcy5oYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gaXNJblJvbGUgJiYgaGFzUGVybWlzc2lvbjtcclxuICAgICAgICByZXR1cm4gaGFzUGVybWlzc2lvbjtcclxuICAgIH1cclxufSJdfQ==
@@ -136,4 +136,4 @@ export class CustomHttpParamEncoder {
136
136
  return decodeURIComponent(value);
137
137
  }
138
138
  }
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL3NlcnZpY2VzL3dlYi5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLENBQUEsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFPckMsTUFBTSxPQUFPLFlBQVk7SUFDckIsWUFDdUIsSUFBZ0IsRUFDaEIsSUFBaUIsRUFDRyxPQUFlO1FBRm5DLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNHLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFDMUQsQ0FBQztJQUVELEdBQUcsQ0FBVSxHQUFXLEVBQUUsTUFBWTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4Rzs7Ozs7Ozs7O01BU0Y7SUFDRixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFlO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxJ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Y3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMvKiwgSHR0cEVycm9yUmVzcG9uc2UqLyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG4vL2ltcG9ydCB7IG9mIH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL29mJztcclxuLy9pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbi8vaW1wb3J0IHsgZGVsZXRlTnVsbFByb3BlcnRpZXMgfSBmcm9tICcuLi91dGlscyc7XHJcbi8vaW1wb3J0IHsgSHR0cEVycm9ySGFuZGxlciwgSGFuZGxlRXJyb3IgfSBmcm9tICcuL2h0dHAtZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFBhcmFtZXRlckNvZGVjIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBUElfQkFTRV9VUkwgfSBmcm9tICcuLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBVcmxIZWxwZXIgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdlYkFwaUNvbmZpZyB7XHJcbiAgICBiYXNlVXJsOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFdlYkFwaUNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aDogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdChBUElfQkFTRV9VUkwpIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0PFQgPSBhbnk+KHVybDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPihjb21iaW5lZFVybCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgcGFyYW1zOiB0aGlzLnRvSHR0cFBhcmFtcyhwYXJhbXMpIH0pO1xyXG4gICAgICAgIC8qLmNhdGNoKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcih1cmwpKSlcclxuICAgICAgICAuZG8oKHJlczogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3MsIG1heWJlIGRpc3BsYXkgbm90aWZpY2F0aW9uXHJcbiAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZXF1ZXN0IGNvbXBsZXRlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgKi9cclxuICAgIH1cclxuXHJcbiAgICBnZXRTdHJpbmcodXJsOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkVXJsID0gVXJsSGVscGVyLmNvbWJpbmUodGhpcy5iYXNlVXJsLCB1cmwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGNvbWJpbmVkVXJsLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLCByZXNwb25zZVR5cGU6ICd0ZXh0JywgcGFyYW1zOiB0aGlzLnRvSHR0cFBhcmFtcyhwYXJhbXMpIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0Qnl0ZXModXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8QXJyYXlCdWZmZXI+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChjb21iaW5lZFVybCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLCBwYXJhbXM6IHRoaXMudG9IdHRwUGFyYW1zKHBhcmFtcykgfSk7XHJcbiAgICB9XHJcbiAgICBnZXRCbG9iKHVybDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPEJsb2I+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChjb21iaW5lZFVybCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgcmVzcG9uc2VUeXBlOiAnYmxvYicsIHBhcmFtczogdGhpcy50b0h0dHBQYXJhbXMocGFyYW1zKSB9KTtcclxuICAgIH1cclxuICAgIHBvc3RCbG9iKHVybDogc3RyaW5nLCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPEJsb2I+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoY29tYmluZWRVcmwsIGJvZHksIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksIHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9IdHRwUGFyYW1zKG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKCFvYmopXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IG5ldyBDdXN0b21IdHRwUGFyYW1FbmNvZGVyKCkgfSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IG9ialtrZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgZmllbGQgPT09IG51bGwgfHwgKHR5cGVvZiBmaWVsZCA9PT0gJ3N0cmluZycgJiYgZmllbGQubGVuZ3RoID09PSAwKSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZDtcclxuICAgICAgICAgICAgLy8gaWYgKHR5cGVvZiBmaWVsZCA9PT0gJ3N0cmluZycgJiYgZmllbGQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyAgICAgdmFsdWUgPSBmaWVsZC5yZXBsYWNlKC9cXCsvZ2ksICclMkInKTtcclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgLy8gaWYgKGZpZWxkIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgLy8gICAgIGZpZWxkLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoYCR7a2V5fVtdYCwgaXRlbSk7XHJcbiAgICAgICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoa2V5LCBmaWVsZCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuXHJcblxyXG4gICAgICAgIC8vZGVsZXRlTnVsbFByb3BlcnRpZXMob2JqKTtcclxuICAgICAgICAvL2NvbW1lbnQgYmVjYXVzZSBpbnRbXSBub3Qgc2VuZGluZyBpbiBjIyBpdCBzZW5kIFwiMSwyLDMsNFwiXHJcbiAgICAgICAgLy8gcmV0dXJuIG9ialxyXG4gICAgICAgIC8vICAgICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikucmVkdWNlKChwLCBrZXkpID0+IHAuc2V0KGtleSwgb2JqW2tleV0pLCBuZXcgSHR0cFBhcmFtcygpKVxyXG4gICAgICAgIC8vICAgICA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvL3RvS2V5UGFpcnMob2JqOiBhbnkpOiBLZXlQYWlyW10gfCB1bmRlZmluZWQge1xyXG4gICAgLy8gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgLy8gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopO1xyXG4gICAgLy8gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxLZXlQYWlyPigpO1xyXG4gICAgLy8gICAgICAgIGZvciAobGV0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcclxuICAgIC8vICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcGVydHldO1xyXG4gICAgLy8gICAgICAgICAgICByZXN1bHQucHVzaCh7IGtleTogcHJvcGVydHksIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgIC8vICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIC8vICAgIH1cclxuICAgIC8vICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvL31cclxuXHJcbiAgICBwb3N0PFQgPSBhbnk+KHVybDogc3RyaW5nLCBib2R5PzogYW55IHwgbnVsbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPihVcmxIZWxwZXIuY29tYmluZSh0aGlzLmJhc2VVcmwsIHVybCksIGJvZHksIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKGJvZHkpIH0pO1xyXG4gICAgICAgIC8vLnBpcGUoXHJcbiAgICAgICAgLy9jYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IodXJsKSlcclxuICAgICAgICAvLyk7XHJcbiAgICB9XHJcbiAgICBwdXQ8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk/OiBhbnkgfCBudWxsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4oVXJsSGVscGVyLmNvbWJpbmUodGhpcy5iYXNlVXJsLCB1cmwpLCBib2R5LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyhib2R5KSB9KTtcclxuICAgICAgICAvLy5waXBlKFxyXG4gICAgICAgIC8vY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKHVybCkpXHJcbiAgICAgICAgLy8pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlKHVybDogc3RyaW5nLCBib2R5PzogYW55IHwgbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBVcmxIZWxwZXIuY29tYmluZSh0aGlzLmJhc2VVcmwsIHVybCksIHsgYm9keSwgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKGJvZHkpIH0pO1xyXG4gICAgICAgIC8vcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW52aXJvbm1lbnQudXJsICsgdXJsLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpIH0pO1xyXG4gICAgICAgIC8vLnBpcGUoXHJcbiAgICAgICAgLy9jYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IodXJsKSlcclxuICAgICAgICAvLyk7XHJcbiAgICB9XHJcbiAgICBwYXRjaDxUID0gYW55Pih1cmw6IHN0cmluZywgYm9keT86IGFueSB8IG51bGwpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFQ+KFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKSwgYm9keSwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoYm9keSkgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRIZWFkZXJzKGJvZHk/OiBhbnkgfCBudWxsKTogSHR0cEhlYWRlcnMge1xyXG4gICAgICAgIGxldCBodHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIGlmICghKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpXHJcbiAgICAgICAgICAgIGh0dHBIZWFkZXJzID0gaHR0cEhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuYXV0aC51c2VyO1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gdG1wID8gdG1wLnRva2VuIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0b2tlbilcclxuICAgICAgICAgICAgaHR0cEhlYWRlcnMgPSBodHRwSGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0b2tlbik7XHJcbiAgICAgICAgcmV0dXJuIGh0dHBIZWFkZXJzO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy9wcml2YXRlIGdldFBhcmFtcyhwYXJhbXM/OiBLZXlQYWlyW10gfCBudWxsKSB7XHJcbiAgICAvLyAgICBpZiAoIXBhcmFtcyB8fCBwYXJhbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAvLyAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIC8vICAgIH1cclxuICAgIC8vICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIC8vICAgIGlmIChwYXJhbXMpIHtcclxuICAgIC8vICAgICAgICBmb3IgKGxldCBwYXJhbSBvZiBwYXJhbXMpIHtcclxuICAgIC8vICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuc2V0KHBhcmFtLmtleSwgcGFyYW0udmFsdWUpO1xyXG4gICAgLy8gICAgICAgIH1cclxuICAgIC8vICAgIH1cclxuICAgIC8vICAgIHJldHVybiBodHRwUGFyYW1zO1xyXG4gICAgLy99XHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUh0dHBQYXJhbUVuY29kZXIgaW1wbGVtZW50cyBIdHRwUGFyYW1ldGVyQ29kZWMge1xyXG4gICAgZW5jb2RlS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XHJcbiAgICB9XHJcbiAgICBlbmNvZGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGRlY29kZUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChrZXkpO1xyXG4gICAgfVxyXG4gICAgZGVjb2RlVmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICB9XHJcbn0iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL3NlcnZpY2VzL3dlYi5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLENBQUEsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFPckMsTUFBTSxPQUFPLFlBQVk7SUFDckIsWUFDdUIsSUFBZ0IsRUFDaEIsSUFBaUIsRUFDRyxPQUFlO1FBRm5DLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNHLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFDMUQsQ0FBQztJQUVELEdBQUcsQ0FBVSxHQUFXLEVBQUUsTUFBWTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4Rzs7Ozs7Ozs7O01BU0Y7SUFDRixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFlO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUNELFFBQVEsQ0FBQyxHQUFXLEVBQUUsTUFBWTtRQUM5QixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RJLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBVyxFQUFFLE1BQVk7UUFDN0IsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvSCxDQUFDO0lBQ0QsUUFBUSxDQUFDLEdBQVcsRUFBRSxJQUFTO1FBQzNCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFHUyxZQUFZLENBQUMsR0FBUTtRQUMzQixJQUFJLENBQUMsR0FBRztZQUNKLE9BQU8sU0FBUyxDQUFDO1FBRXJCLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksc0JBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkUsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXZCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUMxRixTQUFTO1lBRWIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLHVEQUF1RDtZQUN2RCw0Q0FBNEM7WUFDNUMsSUFBSTtZQUVKLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuQyxnQ0FBZ0M7WUFDaEMscUNBQXFDO1lBQ3JDLG9EQUFvRDtZQUNwRCxVQUFVO1lBQ1YsV0FBVztZQUNYLDBDQUEwQztZQUMxQyxJQUFJO1FBQ1IsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO1FBR2QsNEJBQTRCO1FBQzVCLDJEQUEyRDtRQUMzRCxhQUFhO1FBQ2IsbUdBQW1HO1FBQ25HLG1CQUFtQjtJQUN2QixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGtDQUFrQztJQUNsQyw2REFBNkQ7SUFDN0QsOENBQThDO0lBQzlDLDRDQUE0QztJQUM1QywwQ0FBMEM7SUFDMUMsMkRBQTJEO0lBQzNELFdBQVc7SUFDWCx3QkFBd0I7SUFDeEIsT0FBTztJQUNQLHVCQUF1QjtJQUN2QixHQUFHO0lBRUgsSUFBSSxDQUFVLEdBQVcsRUFBRSxJQUFpQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekcsUUFBUTtRQUNSLG1DQUFtQztRQUNuQyxJQUFJO0lBQ1IsQ0FBQztJQUNELEdBQUcsQ0FBVSxHQUFXLEVBQUUsSUFBaUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLFFBQVE7UUFDUixtQ0FBbUM7UUFDbkMsSUFBSTtJQUNSLENBQUM7SUFDRCxNQUFNLENBQVUsR0FBVyxFQUFFLElBQWlCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEgsaUZBQWlGO1FBQ2pGLFFBQVE7UUFDUixtQ0FBbUM7UUFDbkMsSUFBSTtJQUNSLENBQUM7SUFDRCxLQUFLLENBQVUsR0FBVyxFQUFFLElBQWlCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBR1MsVUFBVSxDQUFDLElBQWlCO1FBQ2xDLElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLFFBQVEsQ0FBQztZQUMzQixXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN0RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLEtBQUs7WUFDTCxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQzs4R0F6SFEsWUFBWSx1RUFJVCxZQUFZO2tIQUpmLFlBQVk7OzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQUtGLE1BQU07MkJBQUMsWUFBWTs7QUF5STVCLE1BQU0sT0FBTyxzQkFBc0I7SUFDL0IsU0FBUyxDQUFDLEdBQVc7UUFDakIsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWE7UUFDckIsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsU0FBUyxDQUFDLEdBQVc7UUFDakIsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWE7UUFDckIsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMvKiwgSHR0cEVycm9yUmVzcG9uc2UqLyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG4vL2ltcG9ydCB7IG9mIH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL29mJztcclxuLy9pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbi8vaW1wb3J0IHsgZGVsZXRlTnVsbFByb3BlcnRpZXMgfSBmcm9tICcuLi91dGlscyc7XHJcbi8vaW1wb3J0IHsgSHR0cEVycm9ySGFuZGxlciwgSGFuZGxlRXJyb3IgfSBmcm9tICcuL2h0dHAtZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFBhcmFtZXRlckNvZGVjIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBUElfQkFTRV9VUkwgfSBmcm9tICcuLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBVcmxIZWxwZXIgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdlYkFwaUNvbmZpZyB7XHJcbiAgICBiYXNlVXJsOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFdlYkFwaUNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aDogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdChBUElfQkFTRV9VUkwpIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0PFQgPSBhbnk+KHVybDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPihjb21iaW5lZFVybCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgcGFyYW1zOiB0aGlzLnRvSHR0cFBhcmFtcyhwYXJhbXMpIH0pO1xyXG4gICAgICAgIC8qLmNhdGNoKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcih1cmwpKSlcclxuICAgICAgICAuZG8oKHJlczogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3MsIG1heWJlIGRpc3BsYXkgbm90aWZpY2F0aW9uXHJcbiAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZXF1ZXN0IGNvbXBsZXRlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgKi9cclxuICAgIH1cclxuXHJcbiAgICBnZXRTdHJpbmcodXJsOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkVXJsID0gVXJsSGVscGVyLmNvbWJpbmUodGhpcy5iYXNlVXJsLCB1cmwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGNvbWJpbmVkVXJsLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLCByZXNwb25zZVR5cGU6ICd0ZXh0JywgcGFyYW1zOiB0aGlzLnRvSHR0cFBhcmFtcyhwYXJhbXMpIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0Qnl0ZXModXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8QXJyYXlCdWZmZXI+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChjb21iaW5lZFVybCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLCBwYXJhbXM6IHRoaXMudG9IdHRwUGFyYW1zKHBhcmFtcykgfSk7XHJcbiAgICB9XHJcbiAgICBnZXRCbG9iKHVybDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPEJsb2I+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChjb21iaW5lZFVybCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgcmVzcG9uc2VUeXBlOiAnYmxvYicsIHBhcmFtczogdGhpcy50b0h0dHBQYXJhbXMocGFyYW1zKSB9KTtcclxuICAgIH1cclxuICAgIHBvc3RCbG9iKHVybDogc3RyaW5nLCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPEJsb2I+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZFVybCA9IFVybEhlbHBlci5jb21iaW5lKHRoaXMuYmFzZVVybCwgdXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoY29tYmluZWRVcmwsIGJvZHksIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksIHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9IdHRwUGFyYW1zKG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKCFvYmopXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IG5ldyBDdXN0b21IdHRwUGFyYW1FbmNvZGVyKCkgfSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IG9ialtrZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgZmllbGQgPT09IG51bGwgfHwgKHR5cGVvZiBmaWVsZCA9PT0gJ3N0cmluZycgJiYgZmllbGQubGVuZ3RoID09PSAwKSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZDtcclxuICAgICAgICAgICAgLy8gaWYgKHR5cGVvZiBmaWVsZCA9PT0gJ3N0cmluZycgJiYgZmllbGQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyAgICAgdmFsdWUgPSBmaWVsZC5yZXBsYWNlKC9cXCsvZ2ksICclMkInKTtcclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgLy8gaWYgKGZpZWxkIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgLy8gICAgIGZpZWxkLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoYCR7a2V5fVtdYCwgaXRlbSk7XHJcbiAgICAgICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoa2V5LCBmaWVsZCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuXHJcblxyXG4gICAgICAgIC8vZGVsZXRlTnVsbFByb3BlcnRpZXMob2JqKTtcclxuICAgICAgICAvL2NvbW1lbnQgYmVjYXVzZSBpbnRbXSBub3Qgc2VuZGluZyBpbiBjIyBpdCBzZW5kIFwiMSwyLDMsNFwiXHJcbiAgICAgICAgLy8gcmV0dXJuIG9ialxyXG4gICAgICAgIC8vICAgICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikucmVkdWNlKChwLCBrZXkpID0+IHAuc2V0KGtleSwgb2JqW2tleV0pLCBuZXcgSHR0cFBhcmFtcygpKVxyXG4gICAgICAgIC8vICAgICA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvL3RvS2V5UGFpcnMob2JqOiBhbnkpOiBLZXlQYWlyW10gfCB1bmRlZmluZWQge1xyXG4gICAgLy8gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgLy8gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopO1xyXG4gICAgLy8gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxLZXlQYWlyPigpO1xyXG4gICAgLy8gICAgICAgIGZvciAobGV0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcclxuICAgIC8vICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcGVydHldO1xyXG4gICAgLy8gICAgICAgICAgICByZXN1bHQucHVzaCh7IGtleTogcHJvcGVydHksIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgIC8vICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIC8vICAgIH1cclxuICAgIC8vICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvL31cclxuXHJcbiAgICBwb3N0PFQgPSBhbnk+KHVybDogc3RyaW5nLCBib2R5PzogYW55IHwgbnVsbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPihVcmxIZWxwZXIuY29tYmluZSh0aGlzLmJhc2VVcmwsIHVybCksIGJvZHksIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKGJvZHkpIH0pO1xyXG4gICAgICAgIC8vLnBpcGUoXHJcbiAgICAgICAgLy9jYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IodXJsKSlcclxuICAgICAgICAvLyk7XHJcbiAgICB9XHJcbiAgICBwdXQ8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk/OiBhbnkgfCBudWxsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4oVXJsSGVscGVyLmNvbWJpbmUodGhpcy5iYXNlVXJsLCB1cmwpLCBib2R5LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyhib2R5KSB9KTtcclxuICAgICAgICAvLy5waXBlKFxyXG4gICAgICAgIC8vY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKHVybCkpXHJcbiAgICAgICAgLy8pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlPFQgPSBhbnk+KHVybDogc3RyaW5nLCBib2R5PzogYW55IHwgbnVsbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxUPignZGVsZXRlJywgVXJsSGVscGVyLmNvbWJpbmUodGhpcy5iYXNlVXJsLCB1cmwpLCB7IGJvZHksIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyhib2R5KSB9KTtcclxuICAgICAgICAvL3JldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVudmlyb25tZW50LnVybCArIHVybCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSB9KTtcclxuICAgICAgICAvLy5waXBlKFxyXG4gICAgICAgIC8vY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKHVybCkpXHJcbiAgICAgICAgLy8pO1xyXG4gICAgfVxyXG4gICAgcGF0Y2g8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk/OiBhbnkgfCBudWxsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxUPihVcmxIZWxwZXIuY29tYmluZSh0aGlzLmJhc2VVcmwsIHVybCksIGJvZHksIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKGJvZHkpIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SGVhZGVycyhib2R5PzogYW55IHwgbnVsbCk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICBpZiAoIShib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKVxyXG4gICAgICAgICAgICBodHRwSGVhZGVycyA9IGh0dHBIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBjb25zdCB0bXAgPSB0aGlzLmF1dGgudXNlcjtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHRtcCA/IHRtcC50b2tlbiA6IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodG9rZW4pXHJcbiAgICAgICAgICAgIGh0dHBIZWFkZXJzID0gaHR0cEhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdG9rZW4pO1xyXG4gICAgICAgIHJldHVybiBodHRwSGVhZGVycztcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vcHJpdmF0ZSBnZXRQYXJhbXMocGFyYW1zPzogS2V5UGFpcltdIHwgbnVsbCkge1xyXG4gICAgLy8gICAgaWYgKCFwYXJhbXMgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgLy8gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvLyAgICB9XHJcbiAgICAvLyAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAvLyAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAvLyAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgcGFyYW1zKSB7XHJcbiAgICAvLyAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLnNldChwYXJhbS5rZXksIHBhcmFtLnZhbHVlKTtcclxuICAgIC8vICAgICAgICB9XHJcbiAgICAvLyAgICB9XHJcbiAgICAvLyAgICByZXR1cm4gaHR0cFBhcmFtcztcclxuICAgIC8vfVxyXG59XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21IdHRwUGFyYW1FbmNvZGVyIGltcGxlbWVudHMgSHR0cFBhcmFtZXRlckNvZGVjIHtcclxuICAgIGVuY29kZUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xyXG4gICAgfVxyXG4gICAgZW5jb2RlVmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBkZWNvZGVLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoa2V5KTtcclxuICAgIH1cclxuICAgIGRlY29kZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gICAgfVxyXG59Il19