@ts-core/angular 13.1.29 → 13.1.32

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.
@@ -2,14 +2,22 @@ import { ElementRef, EventEmitter } from '@angular/core';
2
2
  import { DestroyableContainer } from '@ts-core/common';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class ScrollCheckDirective extends DestroyableContainer {
5
+ top: EventEmitter<boolean>;
6
+ bottom: EventEmitter<boolean>;
5
7
  limitExceed: EventEmitter<boolean>;
6
8
  private _scrollLimit;
7
- private _scrollValue;
9
+ private element;
10
+ private isTop;
11
+ private isBottom;
8
12
  private isExceedLimit;
13
+ offset: number;
9
14
  constructor(element: ElementRef);
10
- protected check(): void;
15
+ protected check: () => void;
16
+ protected get scrollValue(): number;
17
+ protected get scrollHeight(): number;
18
+ protected get clientHeight(): number;
11
19
  set scrollLimit(value: number);
12
20
  get scrollLimit(): number;
13
21
  static ɵfac: i0.ɵɵFactoryDeclaration<ScrollCheckDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<ScrollCheckDirective, "[vi-scroll-check]", never, { "scrollLimit": "vi-scroll-check"; }, { "limitExceed": "limitExceed"; }, never>;
22
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ScrollCheckDirective, "[vi-scroll-check]", never, { "offset": "offset"; "scrollLimit": "vi-scroll-check"; }, { "top": "top"; "bottom": "bottom"; "limitExceed": "limitExceed"; }, never>;
15
23
  }
@@ -17,27 +17,58 @@ export class ScrollCheckDirective extends DestroyableContainer {
17
17
  // Properties
18
18
  //
19
19
  //--------------------------------------------------------------------------
20
+ this.top = new EventEmitter();
21
+ this.bottom = new EventEmitter();
20
22
  this.limitExceed = new EventEmitter();
23
+ this.isTop = false;
24
+ this.isBottom = false;
21
25
  this.isExceedLimit = false;
22
- this._scrollValue = element.nativeElement.scrollTop;
23
- fromEvent(element.nativeElement, 'scroll')
24
- .pipe(debounceTime(DateUtil.MILISECONDS_SECOND / 10), takeUntil(this.destroyed))
25
- .subscribe(() => {
26
- this._scrollValue = element.nativeElement.scrollTop;
27
- this.check();
28
- });
26
+ this.offset = 50;
27
+ //--------------------------------------------------------------------------
28
+ //
29
+ // Protected Methods
30
+ //
31
+ //--------------------------------------------------------------------------
32
+ this.check = () => {
33
+ let value = this.scrollValue >= this.scrollLimit;
34
+ if (value !== this.isExceedLimit) {
35
+ this.isExceedLimit = value;
36
+ this.limitExceed.emit(value);
37
+ }
38
+ value = this.scrollValue + this.clientHeight + this.offset > this.scrollHeight;
39
+ if (value !== this.isBottom) {
40
+ this.isBottom = value;
41
+ this.bottom.next(value);
42
+ }
43
+ value = this.scrollValue < this.offset;
44
+ if (value !== this.isTop) {
45
+ this.isTop = value;
46
+ this.top.next(value);
47
+ }
48
+ };
49
+ this.element = element.nativeElement;
50
+ fromEvent(this.element, 'scroll')
51
+ .pipe(debounceTime(DateUtil.MILLISECONDS_SECOND / 10), takeUntil(this.destroyed))
52
+ .subscribe(this.check);
29
53
  }
30
54
  //--------------------------------------------------------------------------
31
55
  //
32
- // Protected Methods
56
+ // Private Properties
33
57
  //
34
58
  //--------------------------------------------------------------------------
35
- check() {
36
- let value = this._scrollValue >= this.scrollLimit;
37
- if (value !== this.isExceedLimit) {
38
- this.isExceedLimit = value;
39
- this.limitExceed.emit(this.isExceedLimit);
40
- }
59
+ // --------------------------------------------------------------------------
60
+ //
61
+ // Private Properties
62
+ //
63
+ // --------------------------------------------------------------------------
64
+ get scrollValue() {
65
+ return this.element.scrollTop;
66
+ }
67
+ get scrollHeight() {
68
+ return this.element.scrollHeight;
69
+ }
70
+ get clientHeight() {
71
+ return this.element.clientHeight;
41
72
  }
42
73
  //--------------------------------------------------------------------------
43
74
  //
@@ -56,16 +87,22 @@ export class ScrollCheckDirective extends DestroyableContainer {
56
87
  }
57
88
  }
58
89
  ScrollCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
59
- ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
90
+ ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { offset: "offset", scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { top: "top", bottom: "bottom", limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
60
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, decorators: [{
61
92
  type: Directive,
62
93
  args: [{
63
94
  selector: '[vi-scroll-check]'
64
95
  }]
65
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { limitExceed: [{
96
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { top: [{
97
+ type: Output
98
+ }], bottom: [{
99
+ type: Output
100
+ }], limitExceed: [{
66
101
  type: Output
102
+ }], offset: [{
103
+ type: Input
67
104
  }], scrollLimit: [{
68
105
  type: Input,
69
106
  args: ['vi-scroll-check']
70
107
  }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nyb2xsQ2hlY2tEaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlL1Njcm9sbENoZWNrRGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUFjMUQsNEVBQTRFO0lBQzVFLEVBQUU7SUFDRixjQUFjO0lBQ2QsRUFBRTtJQUNGLDRFQUE0RTtJQUU1RSxZQUFZLE9BQW1CO1FBQzNCLEtBQUssRUFBRSxDQUFDO1FBcEJaLDRFQUE0RTtRQUM1RSxFQUFFO1FBQ0YsYUFBYTtRQUNiLEVBQUU7UUFDRiw0RUFBNEU7UUFHckUsZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUl2RCxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQVduQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ3BELFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQzthQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9FLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0YsNEVBQTRFO0lBRWxFLEtBQUs7UUFDWCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbEQsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLEVBQUU7SUFDRixvQkFBb0I7SUFDcEIsRUFBRTtJQUNGLDRFQUE0RTtJQUU1RSxJQUNXLFdBQVcsQ0FBQyxLQUFhO1FBQ2hDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7O2tIQTlEUSxvQkFBb0I7c0dBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQUhoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7aUJBQ2hDO2lHQVNVLFdBQVc7c0JBRGpCLE1BQU07Z0JBOENJLFdBQVc7c0JBRHJCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQ29udGFpbmVyIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdmktc2Nyb2xsLWNoZWNrXSdcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsQ2hlY2tEaXJlY3RpdmUgZXh0ZW5kcyBEZXN0cm95YWJsZUNvbnRhaW5lciB7XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsaW1pdEV4Y2VlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBfc2Nyb2xsTGltaXQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zY3JvbGxWYWx1ZTogbnVtYmVyO1xuICAgIHByaXZhdGUgaXNFeGNlZWRMaW1pdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbnN0cnVjdG9yXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fc2Nyb2xsVmFsdWUgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICBmcm9tRXZlbnQoZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZShEYXRlVXRpbC5NSUxJU0VDT05EU19TRUNPTkQgLyAxMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxWYWx1ZSA9IGVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByb3RlY3RlZCBNZXRob2RzXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcm90ZWN0ZWQgY2hlY2soKTogdm9pZCB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuX3Njcm9sbFZhbHVlID49IHRoaXMuc2Nyb2xsTGltaXQ7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pc0V4Y2VlZExpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZWVkTGltaXQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGltaXRFeGNlZWQuZW1pdCh0aGlzLmlzRXhjZWVkTGltaXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFB1YmxpYyBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBASW5wdXQoJ3ZpLXNjcm9sbC1jaGVjaycpXG4gICAgcHVibGljIHNldCBzY3JvbGxMaW1pdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl9zY3JvbGxMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Njcm9sbExpbWl0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hlY2soKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBzY3JvbGxMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsTGltaXQ7XG4gICAgfVxufVxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nyb2xsQ2hlY2tEaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlL1Njcm9sbENoZWNrRGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUF5QjFELDRFQUE0RTtJQUM1RSxFQUFFO0lBQ0YsY0FBYztJQUNkLEVBQUU7SUFDRiw0RUFBNEU7SUFFNUUsWUFBWSxPQUFtQjtRQUMzQixLQUFLLEVBQUUsQ0FBQztRQS9CWiw0RUFBNEU7UUFDNUUsRUFBRTtRQUNGLGFBQWE7UUFDYixFQUFFO1FBQ0YsNEVBQTRFO1FBR3JFLFFBQUcsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRCxXQUFNLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkQsZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU12RCxVQUFLLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFHaEMsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQWlCM0IsNEVBQTRFO1FBQzVFLEVBQUU7UUFDRixvQkFBb0I7UUFDcEIsRUFBRTtRQUNGLDRFQUE0RTtRQUVsRSxVQUFLLEdBQUcsR0FBUyxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNqRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7WUFFRCxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMvRSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0I7WUFFRCxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN4QjtRQUNMLENBQUMsQ0FBQztRQS9CRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFFckMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO2FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEYsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBNEJELDRFQUE0RTtJQUM1RSxFQUFFO0lBQ0YscUJBQXFCO0lBQ3JCLEVBQUU7SUFDRiw0RUFBNEU7SUFFNUUsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixxQkFBcUI7SUFDckIsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxJQUFjLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBYyxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUNELElBQWMsWUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0YsNEVBQTRFO0lBRTVFLElBQ1csV0FBVyxDQUFDLEtBQWE7UUFDaEMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQzs7a0hBeEdRLG9CQUFvQjtzR0FBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtpQkFDaEM7aUdBU1UsR0FBRztzQkFEVCxNQUFNO2dCQUdBLE1BQU07c0JBRFosTUFBTTtnQkFHQSxXQUFXO3NCQURqQixNQUFNO2dCQVlBLE1BQU07c0JBRFosS0FBSztnQkF5RUssV0FBVztzQkFEckIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVzdHJveWFibGVDb250YWluZXIgfSBmcm9tICdAdHMtY29yZS9jb21tb24nO1xuaW1wb3J0IHsgRGF0ZVV0aWwgfSBmcm9tICdAdHMtY29yZS9jb21tb24nO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t2aS1zY3JvbGwtY2hlY2tdJ1xufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxDaGVja0RpcmVjdGl2ZSBleHRlbmRzIERlc3Ryb3lhYmxlQ29udGFpbmVyIHtcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0UHJvcGVydGllc1xuICAgIC8vXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHRvcDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBib3R0b206IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbGltaXRFeGNlZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByaXZhdGUgX3Njcm9sbExpbWl0OiBudW1iZXI7XG5cbiAgICBwcml2YXRlIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBpc1RvcDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNCb3R0b206IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRXhjZWVkTGltaXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9mZnNldDogbnVtYmVyID0gNTA7XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q29uc3RydWN0b3JcbiAgICAvL1xuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKERhdGVVdGlsLk1JTExJU0VDT05EU19TRUNPTkQgLyAxMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuY2hlY2spO1xuICAgIH1cblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRQcm90ZWN0ZWQgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIGNoZWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnNjcm9sbFZhbHVlID49IHRoaXMuc2Nyb2xsTGltaXQ7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pc0V4Y2VlZExpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZWVkTGltaXQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGltaXRFeGNlZWQuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHRoaXMuc2Nyb2xsVmFsdWUgKyB0aGlzLmNsaWVudEhlaWdodCArIHRoaXMub2Zmc2V0ID4gdGhpcy5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pc0JvdHRvbSkge1xuICAgICAgICAgICAgdGhpcy5pc0JvdHRvbSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5ib3R0b20ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHRoaXMuc2Nyb2xsVmFsdWUgPCB0aGlzLm9mZnNldDtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLmlzVG9wKSB7XG4gICAgICAgICAgICB0aGlzLmlzVG9wID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRvcC5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0UHJpdmF0ZSBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByaXZhdGUgUHJvcGVydGllc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByb3RlY3RlZCBnZXQgc2Nyb2xsVmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgc2Nyb2xsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBjbGllbnRIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFB1YmxpYyBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBASW5wdXQoJ3ZpLXNjcm9sbC1jaGVjaycpXG4gICAgcHVibGljIHNldCBzY3JvbGxMaW1pdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl9zY3JvbGxMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Njcm9sbExpbWl0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hlY2soKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBzY3JvbGxMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsTGltaXQ7XG4gICAgfVxufVxuIl19
@@ -32,6 +32,7 @@ export class ResizeManager {
32
32
  this.element = ViewUtil.parseElement(element);
33
33
  this.subject = new BehaviorSubject({ width: ViewUtil.getWidth(this.element), height: ViewUtil.getHeight(this.element) });
34
34
  // this.sensor = new ResizeSensor(this.element, this.handler);
35
+ // Could be undefined in ssr
35
36
  try {
36
37
  this.sensor = new ResizeObserver(this.handler2);
37
38
  this.sensor.observe(this.element);
@@ -85,4 +86,4 @@ export class ResizeManager {
85
86
  this.element = null;
86
87
  }
87
88
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYW5hZ2VyL1Jlc2l6ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFELE1BQU0sT0FBTyxhQUFhO0lBeUJ0QixrQ0FBa0M7SUFFbEMsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixlQUFlO0lBQ2YsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxZQUFZLE9BQXFCO1FBV2pDLDZFQUE2RTtRQUM3RSxFQUFFO1FBQ0Ysa0JBQWtCO1FBQ2xCLEVBQUU7UUFDRiw2RUFBNkU7UUFFbkUsWUFBTyxHQUFHLENBQUMsSUFBVyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xDLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNGLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUVRLGFBQVEsR0FBRyxDQUFDLEtBQWlDLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdEM7UUFDTCxDQUFDLENBQUM7UUEvQkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6SCw4REFBOEQ7UUFDOUQsSUFBSTtZQUNBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQztRQUFDLE9BQU8sS0FBSyxFQUFFLEdBQUU7SUFDdEIsQ0FBQztJQXpDRCw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLGtCQUFrQjtJQUNsQixFQUFFO0lBQ0YsNkVBQTZFO0lBRXRFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBVztRQUNqQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdEQsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBdURELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0YscUJBQXFCO0lBQ3JCLEVBQUU7SUFDRiw2RUFBNkU7SUFFN0UsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLGtCQUFrQjtJQUNsQixFQUFFO0lBQ0YsNkVBQTZFO0lBRXRFLE9BQU87UUFDVixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkI7Ozs7OztjQU1FO1NBQ0w7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFJlc2l6ZVNlbnNvciB9IGZyb20gJ2Nzcy1lbGVtZW50LXF1ZXJpZXMnO1xuaW1wb3J0IHsgSURlc3Ryb3lhYmxlIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElWaWV3RWxlbWVudCwgVmlld1V0aWwgfSBmcm9tICcuLi91dGlsL1ZpZXdVdGlsJztcblxuZXhwb3J0IGNsYXNzIFJlc2l6ZU1hbmFnZXIgaW1wbGVtZW50cyBJRGVzdHJveWFibGUge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgU3RhdGljIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgc3RhdGljIGlzU2l6ZVZhbGlkKGl0ZW06IElTaXplKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChfLmlzTmlsKGl0ZW0pIHx8IGl0ZW0ud2lkdGggPD0gMCB8fCBpdGVtLmhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vICBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIHNpemU6IElTaXplO1xuICAgIHByb3RlY3RlZCBzZW5zb3I6IFJlc2l6ZU9ic2VydmVyO1xuICAgIHByb3RlY3RlZCBzdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SVNpemU+O1xuICAgIHByb3RlY3RlZCBlbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIC8vIHByb3RlY3RlZCBzZW5zb3I6IFJlc2l6ZVNlbnNvcjtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgQ29uc3RydWN0b3JcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBJVmlld0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB0aGlzLnN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHsgd2lkdGg6IFZpZXdVdGlsLmdldFdpZHRoKHRoaXMuZWxlbWVudCksIGhlaWdodDogVmlld1V0aWwuZ2V0SGVpZ2h0KHRoaXMuZWxlbWVudCkgfSk7XG5cbiAgICAgICAgLy8gdGhpcy5zZW5zb3IgPSBuZXcgUmVzaXplU2Vuc29yKHRoaXMuZWxlbWVudCwgdGhpcy5oYW5kbGVyKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2Vuc29yID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuaGFuZGxlcjIpO1xuICAgICAgICAgICAgdGhpcy5zZW5zb3Iub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIEV2ZW50IEhhbmRsZXJzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZXIgPSAoaXRlbTogSVNpemUpID0+IHtcbiAgICAgICAgaWYgKCFSZXNpemVNYW5hZ2VyLmlzU2l6ZVZhbGlkKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTmlsKHRoaXMuc2l6ZSkgJiYgaXRlbS53aWR0aCA9PT0gdGhpcy5zaXplLndpZHRoICYmIGl0ZW0uaGVpZ2h0ID09PSB0aGlzLnNpemUuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaXplID0gaXRlbTtcbiAgICAgICAgdGhpcy5zdWJqZWN0Lm5leHQoaXRlbSk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVyMiA9IChpdGVtczogQXJyYXk8UmVzaXplT2JzZXJ2ZXJFbnRyeT4pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzRW1wdHkoaXRlbXMpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXIoaXRlbXNbMF0uY29udGVudFJlY3QpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgUHVibGljIFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZ2V0IGNoYW5nZWQoKTogT2JzZXJ2YWJsZTxJU2l6ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoXy5pc0VxdWFsKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBJU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIFB1YmxpYyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbCh0aGlzLnNlbnNvcikpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vuc29yLnVub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5zZW5zb3IuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zZW5zb3IgPSBudWxsO1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHRoaXMuc2Vuc29yLmRldGFjaCh0aGlzLmhhbmRsZXIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbnNvci5yZXNldCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICB0aGlzLnNlbnNvciA9IG51bGw7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbCh0aGlzLnN1YmplY3QpKSB7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpemUge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG59XG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYW5hZ2VyL1Jlc2l6ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFELE1BQU0sT0FBTyxhQUFhO0lBeUJ0QixrQ0FBa0M7SUFFbEMsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixlQUFlO0lBQ2YsRUFBRTtJQUNGLDZFQUE2RTtJQUU3RSxZQUFZLE9BQXFCO1FBWWpDLDZFQUE2RTtRQUM3RSxFQUFFO1FBQ0Ysa0JBQWtCO1FBQ2xCLEVBQUU7UUFDRiw2RUFBNkU7UUFFbkUsWUFBTyxHQUFHLENBQUMsSUFBVyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xDLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNGLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUVRLGFBQVEsR0FBRyxDQUFDLEtBQWlDLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdEM7UUFDTCxDQUFDLENBQUM7UUFoQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6SCw4REFBOEQ7UUFDOUQsNEJBQTRCO1FBQzVCLElBQUk7WUFDQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckM7UUFBQyxPQUFPLEtBQUssRUFBRSxHQUFFO0lBQ3RCLENBQUM7SUExQ0QsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixrQkFBa0I7SUFDbEIsRUFBRTtJQUNGLDZFQUE2RTtJQUV0RSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQVc7UUFDakMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQXdERCw2RUFBNkU7SUFDN0UsRUFBRTtJQUNGLHFCQUFxQjtJQUNyQixFQUFFO0lBQ0YsNkVBQTZFO0lBRTdFLElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLEVBQUU7SUFDRixrQkFBa0I7SUFDbEIsRUFBRTtJQUNGLDZFQUE2RTtJQUV0RSxPQUFPO1FBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25COzs7Ozs7Y0FNRTtTQUNMO1FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBSZXNpemVTZW5zb3IgfSBmcm9tICdjc3MtZWxlbWVudC1xdWVyaWVzJztcbmltcG9ydCB7IElEZXN0cm95YWJsZSB9IGZyb20gJ0B0cy1jb3JlL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJVmlld0VsZW1lbnQsIFZpZXdVdGlsIH0gZnJvbSAnLi4vdXRpbC9WaWV3VXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBSZXNpemVNYW5hZ2VyIGltcGxlbWVudHMgSURlc3Ryb3lhYmxlIHtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIFN0YXRpYyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBpc1NpemVWYWxpZChpdGVtOiBJU2l6ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChpdGVtKSB8fCBpdGVtLndpZHRoIDw9IDAgfHwgaXRlbS5oZWlnaHQgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgUHJvcGVydGllc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByb3RlY3RlZCBzaXplOiBJU2l6ZTtcbiAgICBwcm90ZWN0ZWQgc2Vuc29yOiBSZXNpemVPYnNlcnZlcjtcbiAgICBwcm90ZWN0ZWQgc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PElTaXplPjtcbiAgICBwcm90ZWN0ZWQgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICAvLyBwcm90ZWN0ZWQgc2Vuc29yOiBSZXNpemVTZW5zb3I7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIENvbnN0cnVjdG9yXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogSVZpZXdFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgdGhpcy5zdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7IHdpZHRoOiBWaWV3VXRpbC5nZXRXaWR0aCh0aGlzLmVsZW1lbnQpLCBoZWlnaHQ6IFZpZXdVdGlsLmdldEhlaWdodCh0aGlzLmVsZW1lbnQpIH0pO1xuXG4gICAgICAgIC8vIHRoaXMuc2Vuc29yID0gbmV3IFJlc2l6ZVNlbnNvcih0aGlzLmVsZW1lbnQsIHRoaXMuaGFuZGxlcik7XG4gICAgICAgIC8vIENvdWxkIGJlIHVuZGVmaW5lZCBpbiBzc3JcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2Vuc29yID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuaGFuZGxlcjIpO1xuICAgICAgICAgICAgdGhpcy5zZW5zb3Iub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIEV2ZW50IEhhbmRsZXJzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZXIgPSAoaXRlbTogSVNpemUpID0+IHtcbiAgICAgICAgaWYgKCFSZXNpemVNYW5hZ2VyLmlzU2l6ZVZhbGlkKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTmlsKHRoaXMuc2l6ZSkgJiYgaXRlbS53aWR0aCA9PT0gdGhpcy5zaXplLndpZHRoICYmIGl0ZW0uaGVpZ2h0ID09PSB0aGlzLnNpemUuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaXplID0gaXRlbTtcbiAgICAgICAgdGhpcy5zdWJqZWN0Lm5leHQoaXRlbSk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVyMiA9IChpdGVtczogQXJyYXk8UmVzaXplT2JzZXJ2ZXJFbnRyeT4pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzRW1wdHkoaXRlbXMpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXIoaXRlbXNbMF0uY29udGVudFJlY3QpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvLyAgUHVibGljIFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZ2V0IGNoYW5nZWQoKTogT2JzZXJ2YWJsZTxJU2l6ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoXy5pc0VxdWFsKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBJU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy8gIFB1YmxpYyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbCh0aGlzLnNlbnNvcikpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vuc29yLnVub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5zZW5zb3IuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zZW5zb3IgPSBudWxsO1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHRoaXMuc2Vuc29yLmRldGFjaCh0aGlzLmhhbmRsZXIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbnNvci5yZXNldCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICB0aGlzLnNlbnNvciA9IG51bGw7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbCh0aGlzLnN1YmplY3QpKSB7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpemUge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG59XG4iXX0=
@@ -147,6 +147,15 @@ export class ViewUtil {
147
147
  static getStageHeight() {
148
148
  return ViewUtil.window.innerHeight || ViewUtil.document.body.clientHeight;
149
149
  }
150
+ static getCanvasContext2d(container, options) {
151
+ let canvas = ViewUtil.parseElement(container);
152
+ try {
153
+ return canvas.getContext('2d', options);
154
+ }
155
+ catch (error) {
156
+ return null;
157
+ }
158
+ }
150
159
  static getBoundingRectangle(container) {
151
160
  container = ViewUtil.parseElement(container);
152
161
  if (_.isNil(container) || _.isNil(container.getBoundingClientRect)) {
@@ -566,4 +575,4 @@ export class ViewUtil {
566
575
  // --------------------------------------------------------------------------
567
576
  ViewUtil._renderer = null;
568
577
  ViewUtil._document = null;
569
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9WaWV3VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThELGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLE9BQU8sUUFBUTtJQVVWLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWdCO1FBQ3ZDLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDOUIsT0FBTztTQUNWO1FBQ0QsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hFLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWU7UUFDdEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxNQUFNO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLEVBQUU7SUFD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjthQUNKO1NBQ0o7UUFDRCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7QUExbkJELDZFQUE2RTtBQUM3RSxFQUFFO0FBQ0YsWUFBWTtBQUNaLEVBQUU7QUFDRiw2RUFBNkU7QUFFOUQsa0JBQVMsR0FBYyxJQUFJLENBQUM7QUFDNUIsa0JBQVMsR0FBYSxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgUmVuZGVyZXIyLCBSZW5kZXJlclN0eWxlRmxhZ3MyLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFeHRlbmRlZEVycm9yIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNsYXNzIFZpZXdVdGlsIHtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbnN0YW50c1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByaXZhdGUgc3RhdGljIF9yZW5kZXJlcjogUmVuZGVyZXIyID0gbnVsbDtcbiAgICBwcml2YXRlIHN0YXRpYyBfZG9jdW1lbnQ6IERvY3VtZW50ID0gbnVsbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHJlbmRlcmVyKCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIGlmIChfLmlzTmlsKFZpZXdVdGlsLl9yZW5kZXJlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeHRlbmRlZEVycm9yKGBWaWV3VXRpbCBpcyBub3QgaW5pdGlhbGl6ZWQ6IHJlbmRlcmVyIGluIG5pbGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBWaWV3VXRpbC5fcmVuZGVyZXI7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgc2V0IHJlbmRlcmVyKHZhbHVlOiBSZW5kZXJlcjIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBWaWV3VXRpbC5fcmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5fcmVuZGVyZXIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudCB7XG4gICAgICAgIHJldHVybiAhXy5pc05pbChWaWV3VXRpbC5fZG9jdW1lbnQpID8gVmlld1V0aWwuX2RvY3VtZW50IDogZG9jdW1lbnQ7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgc2V0IGRvY3VtZW50KHZhbHVlOiBEb2N1bWVudCkge1xuICAgICAgICBWaWV3VXRpbC5fZG9jdW1lbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCB3aW5kb3coKTogV2luZG93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRQcml2YXRlIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb3B5VG9DbGlwYm9hcmQoKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5kb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbW1vbiBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUVsZW1lbnQoZWxlbWVudDogSVZpZXdFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFfLmlzTmlsKGVsZW1lbnQpID8gZWxlbWVudC5uYXRpdmVFbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUJhc2U2NChlbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50IHwgSFRNTENhbnZhc0VsZW1lbnQgfCBIVE1MVmlkZW9FbGVtZW50KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IGNhbnZhcyA9IFZpZXdVdGlsLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBWaWV3VXRpbC5zZXRQcm9wZXJ0eShjYW52YXMsICd3aWR0aCcsIGVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgICBWaWV3VXRpbC5zZXRQcm9wZXJ0eShjYW52YXMsICdoZWlnaHQnLCBlbGVtZW50Lm9mZnNldEhlaWdodCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShlbGVtZW50LCAwLCAwLCBlbGVtZW50Lm9mZnNldFdpZHRoLCBlbGVtZW50Lm9mZnNldEhlaWdodCk7XG4gICAgICAgICAgICB2YWx1ZSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxLjApO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdENvbnRlbnQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIGlzTmVlZENvcHlUb0NsaXBib2FyZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgaXNXYXNEaXNhYmxlZCA9IGNvbnRhaW5lci5kaXNhYmxlZDtcbiAgICAgICAgICAgIGlmIChpc1dhc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250YWluZXIuc2VsZWN0KCk7XG4gICAgICAgICAgICBpZiAoaXNOZWVkQ29weVRvQ2xpcGJvYXJkKSB7XG4gICAgICAgICAgICAgICAgVmlld1V0aWwuY29weVRvQ2xpcGJvYXJkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNXYXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uID0gVmlld1V0aWwud2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSBWaWV3VXRpbC5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgaWYgKCFfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG5cbiAgICAgICAgICAgIGlmIChpc05lZWRDb3B5VG9DbGlwYm9hcmQpIHtcbiAgICAgICAgICAgICAgICBWaWV3VXRpbC5jb3B5VG9DbGlwYm9hcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0QmFja2dyb3VuZChjb250YWluZXI6IElWaWV3RWxlbWVudCwgaW1hZ2U6IHN0cmluZywgcmVwZWF0OiBzdHJpbmcgPSAncmVwZWF0Jyk6IHZvaWQge1xuICAgICAgICBpZiAoXy5pc05pbChpbWFnZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZVN0eWxlKGNvbnRhaW5lciwgJ2JhY2tncm91bmRJbWFnZScpO1xuICAgICAgICAgICAgVmlld1V0aWwucmVtb3ZlU3R5bGUoY29udGFpbmVyLCAnYmFja2dyb3VuZFJlcGVhdCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbWFnZS5pbmNsdWRlcygndXJsKCcpKSB7XG4gICAgICAgICAgICBpbWFnZSA9ICd1cmwoJyArIGltYWdlICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAnYmFja2dyb3VuZEltYWdlJywgaW1hZ2UpO1xuICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdiYWNrZ3JvdW5kUmVwZWF0JywgcmVwZWF0KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENoaWxkIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBjbGFzc05hbWU/OiBzdHJpbmcsIGlubmVySFRNTD86IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gVmlld1V0aWwucmVuZGVyZXIuY3JlYXRlRWxlbWVudChuYW1lKTtcbiAgICAgICAgaWYgKCFfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRQcm9wZXJ0eShlbGVtZW50LCAnY2xhc3NOYW1lJywgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV8uaXNOaWwoaW5uZXJIVE1MKSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0UHJvcGVydHkoZWxlbWVudCwgJ2lubmVySFRNTCcsIGlubmVySFRNTCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhcHBlbmRDaGlsZChwYXJlbnQ6IGFueSwgY2hpbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwocGFyZW50KSAmJiAhXy5pc05pbChjaGlsZCkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDaGlsZChwYXJlbnQ6IGFueSwgY2hpbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwocGFyZW50KSAmJiAhXy5pc05pbChjaGlsZCkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0b2dnbGVDaGlsZChjb250YWluZXI6IE5vZGUsIGNoaWxkOiBOb2RlLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgaXNDb250YWlucyA9IGNvbnRhaW5lci5jb250YWlucyhjaGlsZCk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhaXNDb250YWlucykge1xuICAgICAgICAgICAgVmlld1V0aWwuYXBwZW5kQ2hpbGQoY29udGFpbmVyLCBjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSAmJiBpc0NvbnRhaW5zKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVDaGlsZChjb250YWluZXIsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0U2l6ZSBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdGFnZVdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBWaWV3VXRpbC53aW5kb3cuaW5uZXJXaWR0aCB8fCBWaWV3VXRpbC5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0U3RhZ2VIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFZpZXdVdGlsLndpbmRvdy5pbm5lckhlaWdodCB8fCBWaWV3VXRpbC5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEJvdW5kaW5nUmVjdGFuZ2xlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogRE9NUmVjdCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOaWwoY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogTmFOLFxuICAgICAgICAgICAgICAgIHk6IE5hTixcbiAgICAgICAgICAgICAgICB3aWR0aDogTmFOLFxuICAgICAgICAgICAgICAgIGhlaWdodDogTmFOLFxuICAgICAgICAgICAgICAgIHRvcDogTmFOLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiBOYU4sXG4gICAgICAgICAgICAgICAgbGVmdDogTmFOLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogTmFOXG4gICAgICAgICAgICB9IGFzIERPTVJlY3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFdpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICd3aWR0aCcpKTtcbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFZpZXdVdGlsLmdldEJvdW5kaW5nUmVjdGFuZ2xlKGNvbnRhaW5lcikud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZXRXaWR0aChjb250YWluZXI6IElWaWV3RWxlbWVudCwgdmFsdWU6IG51bWJlciwgaXNOZWVkQ2hlY2tMaW1pdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc05lZWRDaGVja0xpbWl0cyAmJlxuICAgICAgICAgICAgKHZhbHVlIDwgVmlld1V0aWwuZ2V0TWluV2lkdGgoY29udGFpbmVyKSB8fCB2YWx1ZSA+IFZpZXdVdGlsLmdldE1heFdpZHRoKGNvbnRhaW5lcikgfHwgdmFsdWUgPT09IFZpZXdVdGlsLmdldFdpZHRoKGNvbnRhaW5lcikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAnd2lkdGgnLCB2YWx1ZSArICdweCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldE1heFdpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21heFdpZHRoJykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldE1pbldpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21pbldpZHRoJykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRIZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnaGVpZ2h0JykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gVmlld1V0aWwuZ2V0Qm91bmRpbmdSZWN0YW5nbGUoY29udGFpbmVyKS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHNldEhlaWdodChjb250YWluZXI6IElWaWV3RWxlbWVudCwgdmFsdWU6IG51bWJlciwgaXNOZWVkQ2hlY2tMaW1pdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNOZWVkQ2hlY2tMaW1pdHMgJiZcbiAgICAgICAgICAgICh2YWx1ZSA8IFZpZXdVdGlsLmdldE1pbkhlaWdodChjb250YWluZXIpIHx8IHZhbHVlID4gVmlld1V0aWwuZ2V0TWF4SGVpZ2h0KGNvbnRhaW5lcikgfHwgdmFsdWUgPT09IFZpZXdVdGlsLmdldEhlaWdodChjb250YWluZXIpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdoZWlnaHQnLCB2YWx1ZSArICdweCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXhIZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnbWF4SGVpZ2h0JykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBnZXRNaW5IZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnbWluSGVpZ2h0JykpO1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2l6ZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGlzTmVlZENoZWNrTGltaXRzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldFdpZHRoKGNvbnRhaW5lciwgd2lkdGgsIGlzTmVlZENoZWNrTGltaXRzKTtcbiAgICAgICAgVmlld1V0aWwuc2V0SGVpZ2h0KGNvbnRhaW5lciwgaGVpZ2h0LCBpc05lZWRDaGVja0xpbWl0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRYKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ2xlZnQnKSk7XG4gICAgICAgIHJldHVybiBfLmlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFgoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFfLmlzTmlsKGNvbnRhaW5lcikgJiYgIV8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdsZWZ0JywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0WShjb250YWluZXI6IElWaWV3RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICd0b3AnKSk7XG4gICAgICAgIHJldHVybiBfLmlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBzZXRZKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpICYmICFfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAndG9wJywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIG1vdmUoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldFgoY29udGFpbmVyLCB4KTtcbiAgICAgICAgVmlld1V0aWwuc2V0WShjb250YWluZXIsIHkpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Rm9jdXMgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgZm9jdXNJbnB1dChpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IGNhcmV0SW5kZXggPSAwO1xuICAgICAgICBpZiAoIV8uaXNOaWwoaW5wdXQudmFsdWUpKSB7XG4gICAgICAgICAgICBjYXJldEluZGV4ID0gTWF0aC5tYXgoMCwgaW5wdXQudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGNhcmV0SW5kZXgsIGNhcmV0SW5kZXgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q2xhc3NlcyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5hZGRDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDbGFzc2VzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT4gVmlld1V0aWwuYWRkQ2xhc3MoY29udGFpbmVyLCBuYW1lKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5yZW1vdmVDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDbGFzc2VzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT4gVmlld1V0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBuYW1lKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBoYXNDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiAhXy5pc05pbChjb250YWluZXIpID8gY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9nZ2xlQ2xhc3MoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5hZGRDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVmlld1V0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9nZ2xlQ2xhc3Nlcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLmFkZENsYXNzZXMoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUNsYXNzZXMoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydHkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuICFfLmlzTmlsKGNvbnRhaW5lcikgPyBjb250YWluZXJbbmFtZV0gOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0UHJvcGVydHkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTmlsKHZhbHVlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIuc2V0UHJvcGVydHkoY29udGFpbmVyLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVQcm9wZXJ0eShjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVQcm9wZXJ0eShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlQXR0cmlidXRlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0QXR0cmlidXRlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdHlsZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5zdHlsZVtuYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFN0eWxlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICE9PSBWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsIG5hbWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5zZXRTdHlsZShjb250YWluZXIsIG5hbWUsIHZhbHVlLCBmbGFncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZVN0eWxlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgVmlld1V0aWwucmVuZGVyZXIucmVtb3ZlU3R5bGUoY29udGFpbmVyLCBuYW1lLCBmbGFncyk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRWaWRlbyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVWaWRlbyhpc011dGU6IGJvb2xlYW4gPSB0cnVlLCBpc0lubGluZTogYm9vbGVhbiA9IGZhbHNlKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgICAgIGxldCB2aWRlbyA9IFZpZXdVdGlsLmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KHZpZGVvLCAnYXV0b3BsYXknLCB0cnVlKTtcbiAgICAgICAgaWYgKGlzTXV0ZSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0VmlkZW9NdXRlUGFyYW1ldGVycyh2aWRlbywgaXNNdXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbmxpbmUpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnNldFZpZGVvSW5saW5lUGFyYW1ldGVycyh2aWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpZGVvO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0VmlkZW9NdXRlUGFyYW1ldGVycyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgaXNNdXRlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5tdXRlZCA9IHZpZGVvLmRlZmF1bHRNdXRlZCA9IGlzTXV0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0VmlkZW9JbmxpbmVQYXJhbWV0ZXJzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldEF0dHJpYnV0ZSh2aWRlbywgJ3dlYmtpdC1wbGF5c2lubGluZScsIDEpO1xuICAgICAgICBWaWV3VXRpbC5zZXRBdHRyaWJ1dGUodmlkZW8sICdwbGF5c2lubGluZScsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VmlkZW9FcnJvcih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZpZGVvKSB8fCBfLmlzTmlsKHZpZGVvLmVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I6IE1lZGlhRXJyb3IgPSB2aWRlby5lcnJvcjtcbiAgICAgICAgbGV0IHZhbHVlID0gJ1ZpZGVvIGVycm9yICcgKyB2aWRlby5zcmMgKyAnLCAnO1xuICAgICAgICBzd2l0Y2ggKGVycm9yLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgTWVkaWFFcnJvci5NRURJQV9FUlJfQUJPUlRFRDpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnbWVkaWEgYWJvcnRlZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX0RFQ09ERTpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnZXJyb3IgdG8gZGVjb2RlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTWVkaWFFcnJvci5NRURJQV9FUlJfTkVUV09SSzpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnbmV0d29yayBlcnJvcic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEOlxuICAgICAgICAgICAgICAgIHZhbHVlICs9ICdzb3VyY2Ugbm90IHN1cHBvcnRlZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcGxheVZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZpZGVvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHZpZGVvLnBsYXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHBsYXlBdWRpbyhhdWRpbzogSFRNTEF1ZGlvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXy5pc05pbChhdWRpbykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXVkaW8ucGxheSgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcGF1c2VWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc1ZpZGVvUGxheWluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIV8uaXNOaWwodmlkZW8pID8gIXZpZGVvLnBhdXNlZCAmJiAhdmlkZW8uZW5kZWQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxvYWRWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5sb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0b3BWaWRlb0lmTmVlZCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pICYmICghXy5pc05pbCh2aWRlby5zcmMpIHx8ICFfLmlzTmlsKHZpZGVvLnNyY09iamVjdCkpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zdG9wVmlkZW8odmlkZW8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdG9wVmlkZW8odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKF8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlkZW8uc3JjT2JqZWN0IGluc3RhbmNlb2YgTWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgIGxldCB0cmFja3MgPSB2aWRlby5zcmNPYmplY3QuZ2V0VHJhY2tzKCk7XG4gICAgICAgICAgICB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICB2aWRlby5wYXVzZSgpO1xuICAgICAgICB2aWRlby5zcmMgPSAnJztcbiAgICAgICAgdmlkZW8ubG9hZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZVZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnN0b3BWaWRlbyh2aWRlbyk7XG4gICAgICAgIFZpZXdVdGlsLnJlbW92ZUNoaWxkKHZpZGVvLnBhcmVudE5vZGUsIHZpZGVvKTtcbiAgICAgICAgdmlkZW8ucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBkaXNwb3NlVmlkZW9zKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9IGNvbnRhaW5lci5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgVmlld1V0aWwuZGlzcG9zZVZpZGVvKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRPYmplY3QgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZU9iamVjdHMoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIGlzSUVCcm93c2VyPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSBjb250YWluZXIuY2hpbGRyZW4uaXRlbShpKTtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgSFRNTE9iamVjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBWaWV3VXRpbC5kaXNwb3NlT2JqZWN0KGl0ZW0sIGlzSUVCcm93c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZU9iamVjdChvYmplY3Q6IEhUTUxPYmplY3RFbGVtZW50LCBpc0lFQnJvd3Nlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzSUVCcm93c2VyICYmIG9iamVjdFsncmVhZHlTdGF0ZSddID09PSA0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpIGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqZWN0W2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5yZW1vdmVDaGlsZChvYmplY3QucGFyZW50Tm9kZSwgb2JqZWN0KTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIElWaWV3RWxlbWVudDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD4gPSBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8VD4gfCBWaWV3Q29udGFpbmVyUmVmO1xuIl19
578
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9WaWV3VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThELGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLE9BQU8sUUFBUTtJQVVWLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWdCO1FBQ3ZDLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDOUIsT0FBTztTQUNWO1FBQ0QsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hFLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWU7UUFDdEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxNQUFNO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLEVBQUU7SUFD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LGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDN0M7U0FDSjtJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXlCLEVBQUUsV0FBcUI7UUFDeEUsSUFBSSxXQUFXLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtnQkFDbEIsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjthQUNKO1NBQ0o7UUFDRCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7QUFub0JELDZFQUE2RTtBQUM3RSxFQUFFO0FBQ0YsWUFBWTtBQUNaLEVBQUU7QUFDRiw2RUFBNkU7QUFFOUQsa0JBQVMsR0FBYyxJQUFJLENBQUM7QUFDNUIsa0JBQVMsR0FBYSxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgUmVuZGVyZXIyLCBSZW5kZXJlclN0eWxlRmxhZ3MyLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFeHRlbmRlZEVycm9yIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNsYXNzIFZpZXdVdGlsIHtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbnN0YW50c1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByaXZhdGUgc3RhdGljIF9yZW5kZXJlcjogUmVuZGVyZXIyID0gbnVsbDtcbiAgICBwcml2YXRlIHN0YXRpYyBfZG9jdW1lbnQ6IERvY3VtZW50ID0gbnVsbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHJlbmRlcmVyKCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIGlmIChfLmlzTmlsKFZpZXdVdGlsLl9yZW5kZXJlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeHRlbmRlZEVycm9yKGBWaWV3VXRpbCBpcyBub3QgaW5pdGlhbGl6ZWQ6IHJlbmRlcmVyIGluIG5pbGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBWaWV3VXRpbC5fcmVuZGVyZXI7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgc2V0IHJlbmRlcmVyKHZhbHVlOiBSZW5kZXJlcjIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBWaWV3VXRpbC5fcmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5fcmVuZGVyZXIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudCB7XG4gICAgICAgIHJldHVybiAhXy5pc05pbChWaWV3VXRpbC5fZG9jdW1lbnQpID8gVmlld1V0aWwuX2RvY3VtZW50IDogZG9jdW1lbnQ7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgc2V0IGRvY3VtZW50KHZhbHVlOiBEb2N1bWVudCkge1xuICAgICAgICBWaWV3VXRpbC5fZG9jdW1lbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCB3aW5kb3coKTogV2luZG93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRQcml2YXRlIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb3B5VG9DbGlwYm9hcmQoKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5kb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbW1vbiBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUVsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50ID0gSFRNTEVsZW1lbnQ+KGVsZW1lbnQ6IElWaWV3RWxlbWVudDxUPik6IFQge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudCBhcyBUO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIV8uaXNOaWwoZWxlbWVudCkgPyBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlQmFzZTY0KGVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQgfCBIVE1MQ2FudmFzRWxlbWVudCB8IEhUTUxWaWRlb0VsZW1lbnQpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgY2FudmFzID0gVmlld1V0aWwuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KGNhbnZhcywgJ3dpZHRoJywgZWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KGNhbnZhcywgJ2hlaWdodCcsIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGVsZW1lbnQsIDAsIDAsIGVsZW1lbnQub2Zmc2V0V2lkdGgsIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIHZhbHVlID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0Q29udGVudChjb250YWluZXI6IElWaWV3RWxlbWVudCwgaXNOZWVkQ29weVRvQ2xpcGJvYXJkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCBpc1dhc0Rpc2FibGVkID0gY29udGFpbmVyLmRpc2FibGVkO1xuICAgICAgICAgICAgaWYgKGlzV2FzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRhaW5lci5zZWxlY3QoKTtcbiAgICAgICAgICAgIGlmIChpc05lZWRDb3B5VG9DbGlwYm9hcmQpIHtcbiAgICAgICAgICAgICAgICBWaWV3VXRpbC5jb3B5VG9DbGlwYm9hcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1dhc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSBWaWV3VXRpbC53aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICAgICAgICAgIGxldCByYW5nZSA9IFZpZXdVdGlsLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgICBpZiAoIV8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcblxuICAgICAgICAgICAgaWYgKGlzTmVlZENvcHlUb0NsaXBib2FyZCkge1xuICAgICAgICAgICAgICAgIFZpZXdVdGlsLmNvcHlUb0NsaXBib2FyZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZXRCYWNrZ3JvdW5kKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBpbWFnZTogc3RyaW5nLCByZXBlYXQ6IHN0cmluZyA9ICdyZXBlYXQnKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKGltYWdlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVtb3ZlU3R5bGUoY29udGFpbmVyLCAnYmFja2dyb3VuZEltYWdlJyk7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVTdHlsZShjb250YWluZXIsICdiYWNrZ3JvdW5kUmVwZWF0Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWltYWdlLmluY2x1ZGVzKCd1cmwoJykpIHtcbiAgICAgICAgICAgIGltYWdlID0gJ3VybCgnICsgaW1hZ2UgKyAnKSc7XG4gICAgICAgIH1cblxuICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdiYWNrZ3JvdW5kSW1hZ2UnLCBpbWFnZSk7XG4gICAgICAgIFZpZXdVdGlsLnNldFN0eWxlKGNvbnRhaW5lciwgJ2JhY2tncm91bmRSZXBlYXQnLCByZXBlYXQpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q2hpbGQgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIGNsYXNzTmFtZT86IHN0cmluZywgaW5uZXJIVE1MPzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBWaWV3VXRpbC5yZW5kZXJlci5jcmVhdGVFbGVtZW50KG5hbWUpO1xuICAgICAgICBpZiAoIV8uaXNOaWwobmFtZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KGVsZW1lbnQsICdjbGFzc05hbWUnLCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbChpbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRQcm9wZXJ0eShlbGVtZW50LCAnaW5uZXJIVE1MJywgaW5uZXJIVE1MKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFwcGVuZENoaWxkKHBhcmVudDogYW55LCBjaGlsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChwYXJlbnQpICYmICFfLmlzTmlsKGNoaWxkKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZUNoaWxkKHBhcmVudDogYW55LCBjaGlsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChwYXJlbnQpICYmICFfLmlzTmlsKGNoaWxkKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIucmVtb3ZlQ2hpbGQocGFyZW50LCBjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRvZ2dsZUNoaWxkKGNvbnRhaW5lcjogTm9kZSwgY2hpbGQ6IE5vZGUsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGxldCBpc0NvbnRhaW5zID0gY29udGFpbmVyLmNvbnRhaW5zKGNoaWxkKTtcbiAgICAgICAgaWYgKHZhbHVlICYmICFpc0NvbnRhaW5zKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5hcHBlbmRDaGlsZChjb250YWluZXIsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbHVlICYmIGlzQ29udGFpbnMpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUNoaWxkKGNvbnRhaW5lciwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRTaXplIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFN0YWdlV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFZpZXdVdGlsLndpbmRvdy5pbm5lcldpZHRoIHx8IFZpZXdVdGlsLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdGFnZUhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gVmlld1V0aWwud2luZG93LmlubmVySGVpZ2h0IHx8IFZpZXdVdGlsLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q2FudmFzQ29udGV4dDJkKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50PEhUTUxDYW52YXNFbGVtZW50Piwgb3B0aW9ucz86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzKTogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHtcbiAgICAgICAgbGV0IGNhbnZhcyA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIG9wdGlvbnMpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEJvdW5kaW5nUmVjdGFuZ2xlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogRE9NUmVjdCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOaWwoY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogTmFOLFxuICAgICAgICAgICAgICAgIHk6IE5hTixcbiAgICAgICAgICAgICAgICB3aWR0aDogTmFOLFxuICAgICAgICAgICAgICAgIGhlaWdodDogTmFOLFxuICAgICAgICAgICAgICAgIHRvcDogTmFOLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiBOYU4sXG4gICAgICAgICAgICAgICAgbGVmdDogTmFOLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogTmFOXG4gICAgICAgICAgICB9IGFzIERPTVJlY3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFdpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICd3aWR0aCcpKTtcbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFZpZXdVdGlsLmdldEJvdW5kaW5nUmVjdGFuZ2xlKGNvbnRhaW5lcikud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZXRXaWR0aChjb250YWluZXI6IElWaWV3RWxlbWVudCwgdmFsdWU6IG51bWJlciwgaXNOZWVkQ2hlY2tMaW1pdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc05lZWRDaGVja0xpbWl0cyAmJlxuICAgICAgICAgICAgKHZhbHVlIDwgVmlld1V0aWwuZ2V0TWluV2lkdGgoY29udGFpbmVyKSB8fCB2YWx1ZSA+IFZpZXdVdGlsLmdldE1heFdpZHRoKGNvbnRhaW5lcikgfHwgdmFsdWUgPT09IFZpZXdVdGlsLmdldFdpZHRoKGNvbnRhaW5lcikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAnd2lkdGgnLCB2YWx1ZSArICdweCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldE1heFdpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21heFdpZHRoJykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldE1pbldpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21pbldpZHRoJykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRIZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnaGVpZ2h0JykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gVmlld1V0aWwuZ2V0Qm91bmRpbmdSZWN0YW5nbGUoY29udGFpbmVyKS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHNldEhlaWdodChjb250YWluZXI6IElWaWV3RWxlbWVudCwgdmFsdWU6IG51bWJlciwgaXNOZWVkQ2hlY2tMaW1pdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNOZWVkQ2hlY2tMaW1pdHMgJiZcbiAgICAgICAgICAgICh2YWx1ZSA8IFZpZXdVdGlsLmdldE1pbkhlaWdodChjb250YWluZXIpIHx8IHZhbHVlID4gVmlld1V0aWwuZ2V0TWF4SGVpZ2h0KGNvbnRhaW5lcikgfHwgdmFsdWUgPT09IFZpZXdVdGlsLmdldEhlaWdodChjb250YWluZXIpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdoZWlnaHQnLCB2YWx1ZSArICdweCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXhIZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnbWF4SGVpZ2h0JykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBnZXRNaW5IZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnbWluSGVpZ2h0JykpO1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2l6ZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGlzTmVlZENoZWNrTGltaXRzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldFdpZHRoKGNvbnRhaW5lciwgd2lkdGgsIGlzTmVlZENoZWNrTGltaXRzKTtcbiAgICAgICAgVmlld1V0aWwuc2V0SGVpZ2h0KGNvbnRhaW5lciwgaGVpZ2h0LCBpc05lZWRDaGVja0xpbWl0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRYKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ2xlZnQnKSk7XG4gICAgICAgIHJldHVybiBfLmlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFgoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFfLmlzTmlsKGNvbnRhaW5lcikgJiYgIV8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdsZWZ0JywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0WShjb250YWluZXI6IElWaWV3RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICd0b3AnKSk7XG4gICAgICAgIHJldHVybiBfLmlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBzZXRZKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpICYmICFfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAndG9wJywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIG1vdmUoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldFgoY29udGFpbmVyLCB4KTtcbiAgICAgICAgVmlld1V0aWwuc2V0WShjb250YWluZXIsIHkpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Rm9jdXMgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgZm9jdXNJbnB1dChpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IGNhcmV0SW5kZXggPSAwO1xuICAgICAgICBpZiAoIV8uaXNOaWwoaW5wdXQudmFsdWUpKSB7XG4gICAgICAgICAgICBjYXJldEluZGV4ID0gTWF0aC5tYXgoMCwgaW5wdXQudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGNhcmV0SW5kZXgsIGNhcmV0SW5kZXgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q2xhc3NlcyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5hZGRDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDbGFzc2VzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT4gVmlld1V0aWwuYWRkQ2xhc3MoY29udGFpbmVyLCBuYW1lKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5yZW1vdmVDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDbGFzc2VzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT4gVmlld1V0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBuYW1lKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBoYXNDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiAhXy5pc05pbChjb250YWluZXIpID8gY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9nZ2xlQ2xhc3MoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5hZGRDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVmlld1V0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9nZ2xlQ2xhc3Nlcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLmFkZENsYXNzZXMoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUNsYXNzZXMoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydHkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuICFfLmlzTmlsKGNvbnRhaW5lcikgPyBjb250YWluZXJbbmFtZV0gOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0UHJvcGVydHkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTmlsKHZhbHVlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIuc2V0UHJvcGVydHkoY29udGFpbmVyLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVQcm9wZXJ0eShjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVQcm9wZXJ0eShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlQXR0cmlidXRlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0QXR0cmlidXRlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdHlsZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5zdHlsZVtuYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFN0eWxlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICE9PSBWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsIG5hbWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5zZXRTdHlsZShjb250YWluZXIsIG5hbWUsIHZhbHVlLCBmbGFncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZVN0eWxlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgVmlld1V0aWwucmVuZGVyZXIucmVtb3ZlU3R5bGUoY29udGFpbmVyLCBuYW1lLCBmbGFncyk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRWaWRlbyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVWaWRlbyhpc011dGU6IGJvb2xlYW4gPSB0cnVlLCBpc0lubGluZTogYm9vbGVhbiA9IGZhbHNlKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgICAgIGxldCB2aWRlbyA9IFZpZXdVdGlsLmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KHZpZGVvLCAnYXV0b3BsYXknLCB0cnVlKTtcbiAgICAgICAgaWYgKGlzTXV0ZSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0VmlkZW9NdXRlUGFyYW1ldGVycyh2aWRlbywgaXNNdXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbmxpbmUpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnNldFZpZGVvSW5saW5lUGFyYW1ldGVycyh2aWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpZGVvO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0VmlkZW9NdXRlUGFyYW1ldGVycyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgaXNNdXRlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5tdXRlZCA9IHZpZGVvLmRlZmF1bHRNdXRlZCA9IGlzTXV0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0VmlkZW9JbmxpbmVQYXJhbWV0ZXJzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldEF0dHJpYnV0ZSh2aWRlbywgJ3dlYmtpdC1wbGF5c2lubGluZScsIDEpO1xuICAgICAgICBWaWV3VXRpbC5zZXRBdHRyaWJ1dGUodmlkZW8sICdwbGF5c2lubGluZScsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VmlkZW9FcnJvcih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZpZGVvKSB8fCBfLmlzTmlsKHZpZGVvLmVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I6IE1lZGlhRXJyb3IgPSB2aWRlby5lcnJvcjtcbiAgICAgICAgbGV0IHZhbHVlID0gJ1ZpZGVvIGVycm9yICcgKyB2aWRlby5zcmMgKyAnLCAnO1xuICAgICAgICBzd2l0Y2ggKGVycm9yLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgTWVkaWFFcnJvci5NRURJQV9FUlJfQUJPUlRFRDpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnbWVkaWEgYWJvcnRlZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX0RFQ09ERTpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnZXJyb3IgdG8gZGVjb2RlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTWVkaWFFcnJvci5NRURJQV9FUlJfTkVUV09SSzpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnbmV0d29yayBlcnJvcic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEOlxuICAgICAgICAgICAgICAgIHZhbHVlICs9ICdzb3VyY2Ugbm90IHN1cHBvcnRlZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcGxheVZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZpZGVvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHZpZGVvLnBsYXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHBsYXlBdWRpbyhhdWRpbzogSFRNTEF1ZGlvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXy5pc05pbChhdWRpbykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXVkaW8ucGxheSgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcGF1c2VWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc1ZpZGVvUGxheWluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIV8uaXNOaWwodmlkZW8pID8gIXZpZGVvLnBhdXNlZCAmJiAhdmlkZW8uZW5kZWQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxvYWRWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5sb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0b3BWaWRlb0lmTmVlZCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pICYmICghXy5pc05pbCh2aWRlby5zcmMpIHx8ICFfLmlzTmlsKHZpZGVvLnNyY09iamVjdCkpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zdG9wVmlkZW8odmlkZW8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdG9wVmlkZW8odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKF8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlkZW8uc3JjT2JqZWN0IGluc3RhbmNlb2YgTWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgIGxldCB0cmFja3MgPSB2aWRlby5zcmNPYmplY3QuZ2V0VHJhY2tzKCk7XG4gICAgICAgICAgICB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICB2aWRlby5wYXVzZSgpO1xuICAgICAgICB2aWRlby5zcmMgPSAnJztcbiAgICAgICAgdmlkZW8ubG9hZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZVZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnN0b3BWaWRlbyh2aWRlbyk7XG4gICAgICAgIFZpZXdVdGlsLnJlbW92ZUNoaWxkKHZpZGVvLnBhcmVudE5vZGUsIHZpZGVvKTtcbiAgICAgICAgdmlkZW8ucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBkaXNwb3NlVmlkZW9zKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9IGNvbnRhaW5lci5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgVmlld1V0aWwuZGlzcG9zZVZpZGVvKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRPYmplY3QgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZU9iamVjdHMoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIGlzSUVCcm93c2VyPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSBjb250YWluZXIuY2hpbGRyZW4uaXRlbShpKTtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgSFRNTE9iamVjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBWaWV3VXRpbC5kaXNwb3NlT2JqZWN0KGl0ZW0sIGlzSUVCcm93c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZU9iamVjdChvYmplY3Q6IEhUTUxPYmplY3RFbGVtZW50LCBpc0lFQnJvd3Nlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzSUVCcm93c2VyICYmIG9iamVjdFsncmVhZHlTdGF0ZSddID09PSA0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpIGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqZWN0W2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5yZW1vdmVDaGlsZChvYmplY3QucGFyZW50Tm9kZSwgb2JqZWN0KTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIElWaWV3RWxlbWVudDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD4gPSBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8VD4gfCBWaWV3Q29udGFpbmVyUmVmO1xuIl19
@@ -509,6 +509,15 @@ class ViewUtil {
509
509
  static getStageHeight() {
510
510
  return ViewUtil.window.innerHeight || ViewUtil.document.body.clientHeight;
511
511
  }
512
+ static getCanvasContext2d(container, options) {
513
+ let canvas = ViewUtil.parseElement(container);
514
+ try {
515
+ return canvas.getContext('2d', options);
516
+ }
517
+ catch (error) {
518
+ return null;
519
+ }
520
+ }
512
521
  static getBoundingRectangle(container) {
513
522
  container = ViewUtil.parseElement(container);
514
523
  if (_.isNil(container) || _.isNil(container.getBoundingClientRect)) {
@@ -1963,6 +1972,7 @@ class ResizeManager {
1963
1972
  this.element = ViewUtil.parseElement(element);
1964
1973
  this.subject = new BehaviorSubject({ width: ViewUtil.getWidth(this.element), height: ViewUtil.getHeight(this.element) });
1965
1974
  // this.sensor = new ResizeSensor(this.element, this.handler);
1975
+ // Could be undefined in ssr
1966
1976
  try {
1967
1977
  this.sensor = new ResizeObserver(this.handler2);
1968
1978
  this.sensor.observe(this.element);
@@ -2941,27 +2951,58 @@ class ScrollCheckDirective extends DestroyableContainer {
2941
2951
  // Properties
2942
2952
  //
2943
2953
  //--------------------------------------------------------------------------
2954
+ this.top = new EventEmitter();
2955
+ this.bottom = new EventEmitter();
2944
2956
  this.limitExceed = new EventEmitter();
2957
+ this.isTop = false;
2958
+ this.isBottom = false;
2945
2959
  this.isExceedLimit = false;
2946
- this._scrollValue = element.nativeElement.scrollTop;
2947
- fromEvent(element.nativeElement, 'scroll')
2948
- .pipe(debounceTime(DateUtil.MILISECONDS_SECOND / 10), takeUntil(this.destroyed))
2949
- .subscribe(() => {
2950
- this._scrollValue = element.nativeElement.scrollTop;
2951
- this.check();
2952
- });
2960
+ this.offset = 50;
2961
+ //--------------------------------------------------------------------------
2962
+ //
2963
+ // Protected Methods
2964
+ //
2965
+ //--------------------------------------------------------------------------
2966
+ this.check = () => {
2967
+ let value = this.scrollValue >= this.scrollLimit;
2968
+ if (value !== this.isExceedLimit) {
2969
+ this.isExceedLimit = value;
2970
+ this.limitExceed.emit(value);
2971
+ }
2972
+ value = this.scrollValue + this.clientHeight + this.offset > this.scrollHeight;
2973
+ if (value !== this.isBottom) {
2974
+ this.isBottom = value;
2975
+ this.bottom.next(value);
2976
+ }
2977
+ value = this.scrollValue < this.offset;
2978
+ if (value !== this.isTop) {
2979
+ this.isTop = value;
2980
+ this.top.next(value);
2981
+ }
2982
+ };
2983
+ this.element = element.nativeElement;
2984
+ fromEvent(this.element, 'scroll')
2985
+ .pipe(debounceTime(DateUtil.MILLISECONDS_SECOND / 10), takeUntil(this.destroyed))
2986
+ .subscribe(this.check);
2953
2987
  }
2954
2988
  //--------------------------------------------------------------------------
2955
2989
  //
2956
- // Protected Methods
2990
+ // Private Properties
2957
2991
  //
2958
2992
  //--------------------------------------------------------------------------
2959
- check() {
2960
- let value = this._scrollValue >= this.scrollLimit;
2961
- if (value !== this.isExceedLimit) {
2962
- this.isExceedLimit = value;
2963
- this.limitExceed.emit(this.isExceedLimit);
2964
- }
2993
+ // --------------------------------------------------------------------------
2994
+ //
2995
+ // Private Properties
2996
+ //
2997
+ // --------------------------------------------------------------------------
2998
+ get scrollValue() {
2999
+ return this.element.scrollTop;
3000
+ }
3001
+ get scrollHeight() {
3002
+ return this.element.scrollHeight;
3003
+ }
3004
+ get clientHeight() {
3005
+ return this.element.clientHeight;
2965
3006
  }
2966
3007
  //--------------------------------------------------------------------------
2967
3008
  //
@@ -2980,14 +3021,20 @@ class ScrollCheckDirective extends DestroyableContainer {
2980
3021
  }
2981
3022
  }
2982
3023
  ScrollCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
2983
- ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
3024
+ ScrollCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollCheckDirective, selector: "[vi-scroll-check]", inputs: { offset: "offset", scrollLimit: ["vi-scroll-check", "scrollLimit"] }, outputs: { top: "top", bottom: "bottom", limitExceed: "limitExceed" }, usesInheritance: true, ngImport: i0 });
2984
3025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollCheckDirective, decorators: [{
2985
3026
  type: Directive,
2986
3027
  args: [{
2987
3028
  selector: '[vi-scroll-check]'
2988
3029
  }]
2989
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { limitExceed: [{
3030
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { top: [{
3031
+ type: Output
3032
+ }], bottom: [{
2990
3033
  type: Output
3034
+ }], limitExceed: [{
3035
+ type: Output
3036
+ }], offset: [{
3037
+ type: Input
2991
3038
  }], scrollLimit: [{
2992
3039
  type: Input,
2993
3040
  args: ['vi-scroll-check']