@rlucan/ui 17.1.1 → 17.1.2

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.
@@ -6,49 +6,72 @@ import * as i2 from "../services/ui-file.service";
6
6
  import * as i3 from "@angular/common";
7
7
  import * as i4 from "@angular/material/progress-spinner";
8
8
  export class FileComponent {
9
- get fitImageFileSize() {
10
- if (!this.fileServiceConfig.imageSizes[this.fileSize]) {
11
- console.error('Missing filesize for ' + this.fileSize);
9
+ set fileSize(fs) {
10
+ if (typeof fs === 'string') {
11
+ const f = this.fileServiceConfig.imageSizes.find(n => n.name === fs);
12
+ if (!f) {
13
+ console.error('Missing filesize for ' + fs);
14
+ }
15
+ else {
16
+ this.uiFileSize = f;
17
+ }
18
+ }
19
+ else {
20
+ this.uiFileSize = fs;
12
21
  }
13
- return this.fileServiceConfig.imageSizes[this.fileSize][0] < 0 || this.fileServiceConfig.imageSizes[this.fileSize][1] < 0;
22
+ }
23
+ get fitImageFileSize() {
24
+ return this.uiFileSize.limit === 'maxHeight' || this.uiFileSize.limit === 'maxWidth';
14
25
  }
15
26
  get width() {
16
27
  if (this.fitImageFileSize) {
17
- if (this.nativeFileSizeRatio === -1) {
18
- return '100%';
19
- }
20
- else {
21
- return this.nativeFileWidth + 'px';
22
- }
28
+ return '';
29
+ // if (this.nativeFileSizeRatio === -1) {
30
+ // return '100%';
31
+ // } else {
32
+ // return this.nativeFileWidth + 'px'
33
+ // }
23
34
  }
24
35
  else {
25
- return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][0] + 'px' : undefined;
36
+ return this.uiFileSize.width + 'px';
26
37
  }
27
38
  }
28
39
  get maxWidth() {
29
- if (this.fileServiceConfig.imageSizes[this.fileSize][0] < 0) {
30
- return this.width;
31
- }
32
- return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][0] + 'px' : undefined;
40
+ return this.width; // uiFileSize.x + 'px';
41
+ // if (this.fileServiceConfig.imageSizes[this.fileSize][0] < 0) {
42
+ // return this.width;
43
+ // }
44
+ // return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][0] + 'px' : undefined;
33
45
  }
34
46
  get height() {
35
47
  if (this.fitImageFileSize) {
36
- if (this.nativeFileSizeRatio === -1) {
37
- return '100%';
38
- }
39
- else {
40
- return this.nativeFileHeight + 'px';
41
- }
48
+ return '';
49
+ // if (this.nativeFileSizeRatio === -1) {
50
+ // return '100%';
51
+ // } else {
52
+ // return this.nativeFileHeight + 'px';
53
+ // }
42
54
  }
43
55
  else {
44
- return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][1] + 'px' : undefined;
56
+ return this.uiFileSize.height + 'px';
45
57
  }
46
58
  }
47
59
  get maxHeight() {
48
- if (this.fileServiceConfig.imageSizes[this.fileSize][1] < 0) {
49
- return this.height;
60
+ return this.height; // uiFileSize.y + 'px';
61
+ // if (this.fileServiceConfig.imageSizes[this.fileSize][1] < 0) {
62
+ // return this.height;
63
+ // }
64
+ // return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][1] + 'px' : undefined;
65
+ }
66
+ get imgStyle() {
67
+ const ret = {};
68
+ if (this.uiFileSize.limit === 'maxHeight') {
69
+ ret['height'] = this.uiFileSize.height + 'px';
70
+ }
71
+ if (this.uiFileSize.limit === 'maxWidth') {
72
+ ret['width'] = this.uiFileSize.width + 'px';
50
73
  }
51
- return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][1] + 'px' : undefined;
74
+ return ret;
52
75
  }
53
76
  get isVideo() {
54
77
  return this.mime.startsWith('video/');
@@ -71,12 +94,9 @@ export class FileComponent {
71
94
  this.fileServiceConfig = fileServiceConfig;
72
95
  this.domSanitizer = domSanitizer;
73
96
  this.fileService = fileService;
74
- this.fileSize = 'default';
75
97
  this.visible = false;
76
98
  this.nativeFileSizeRatio = -1;
77
99
  }
78
- ngOnInit() {
79
- }
80
100
  ngOnChanges(changes) {
81
101
  if (changes.srcData) {
82
102
  this.nativeFileSizeRatio = -1;
@@ -85,7 +105,7 @@ export class FileComponent {
85
105
  const img = new Image();
86
106
  img.onload = () => {
87
107
  if (this.fitImageFileSize) {
88
- this.nativeFileSizeRatio = Math.max(img.width / this.fileServiceConfig.imageSizes[this.fileSize][0], img.height / this.fileServiceConfig.imageSizes[this.fileSize][1], 1);
108
+ this.nativeFileSizeRatio = Math.max(img.width / this.uiFileSize.width, img.height / this.uiFileSize.height, 1);
89
109
  }
90
110
  else {
91
111
  this.nativeFileSizeRatio = 1;
@@ -97,7 +117,7 @@ export class FileComponent {
97
117
  img.src = URL.createObjectURL(changes.srcData.currentValue.nativeFile);
98
118
  }
99
119
  else {
100
- this.src = this.fileServiceConfig.getMediaSrc(this.fileSize, changes.srcData.currentValue, this.srcOptions);
120
+ this.src = this.fileServiceConfig.getMediaSrc(this.uiFileSize, changes.srcData.currentValue, this.srcOptions);
101
121
  }
102
122
  }
103
123
  if (changes.srcUrl) {
@@ -111,18 +131,19 @@ export class FileComponent {
111
131
  }
112
132
  }
113
133
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FileComponent, deps: [{ token: UI_FILESERVICE, optional: true }, { token: i1.DomSanitizer }, { token: i2.UiFileService }], target: i0.ɵɵFactoryTarget.Component }); }
114
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: FileComponent, selector: "ui-file", inputs: { fileSize: "fileSize", srcOptions: "srcOptions", srcData: "srcData", srcUrl: "srcUrl" }, host: { properties: { "style.width": "this.width", "style.maxWidth": "this.maxWidth", "style.height": "this.height", "style.maxHeight": "this.maxHeight" } }, usesOnChanges: true, ngImport: i0, template: "<mat-spinner *ngIf=\"visible\"></mat-spinner>\r\n<img *ngIf=\"!isVideo && useRetinaSrc\" [src]=\"src\" [srcset]=\"src + ' 2x'\"/>\r\n<img *ngIf=\"!isVideo && !useRetinaSrc\" [src]=\"src\"/>\r\n<video *ngIf=\"isVideo\" muted controls [src]=\"src\"></video>\r\n\r\n", styles: [":host{display:flex;align-items:center;justify-content:center;position:relative}:host img,:host video{max-width:100%;max-height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: FileComponent, selector: "ui-file", inputs: { fileSize: "fileSize", srcOptions: "srcOptions", srcData: "srcData", srcUrl: "srcUrl" }, host: { properties: { "style.width": "this.width", "style.maxWidth": "this.maxWidth", "style.height": "this.height", "style.maxHeight": "this.maxHeight" } }, usesOnChanges: true, ngImport: i0, template: "<mat-spinner *ngIf=\"visible\"></mat-spinner>\r\n<img *ngIf=\"!isVideo && useRetinaSrc\" [ngStyle]=\"imgStyle\" [src]=\"src\" [srcset]=\"src + ' 2x'\"/>\r\n<img *ngIf=\"!isVideo && !useRetinaSrc\" [ngStyle]=\"imgStyle\" [src]=\"src\"/>\r\n<video *ngIf=\"isVideo\" muted controls [src]=\"src\"></video>\r\n\r\n", styles: [":host{display:flex;align-items:center;justify-content:center;position:relative}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
115
135
  }
116
136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FileComponent, decorators: [{
117
137
  type: Component,
118
- args: [{ selector: 'ui-file', template: "<mat-spinner *ngIf=\"visible\"></mat-spinner>\r\n<img *ngIf=\"!isVideo && useRetinaSrc\" [src]=\"src\" [srcset]=\"src + ' 2x'\"/>\r\n<img *ngIf=\"!isVideo && !useRetinaSrc\" [src]=\"src\"/>\r\n<video *ngIf=\"isVideo\" muted controls [src]=\"src\"></video>\r\n\r\n", styles: [":host{display:flex;align-items:center;justify-content:center;position:relative}:host img,:host video{max-width:100%;max-height:100%}\n"] }]
138
+ args: [{ selector: 'ui-file', template: "<mat-spinner *ngIf=\"visible\"></mat-spinner>\r\n<img *ngIf=\"!isVideo && useRetinaSrc\" [ngStyle]=\"imgStyle\" [src]=\"src\" [srcset]=\"src + ' 2x'\"/>\r\n<img *ngIf=\"!isVideo && !useRetinaSrc\" [ngStyle]=\"imgStyle\" [src]=\"src\"/>\r\n<video *ngIf=\"isVideo\" muted controls [src]=\"src\"></video>\r\n\r\n", styles: [":host{display:flex;align-items:center;justify-content:center;position:relative}\n"] }]
119
139
  }], ctorParameters: () => [{ type: undefined, decorators: [{
120
140
  type: Optional
121
141
  }, {
122
142
  type: Inject,
123
143
  args: [UI_FILESERVICE]
124
144
  }] }, { type: i1.DomSanitizer }, { type: i2.UiFileService }], propDecorators: { fileSize: [{
125
- type: Input
145
+ type: Input,
146
+ args: [{ required: true }]
126
147
  }], srcOptions: [{
127
148
  type: Input
128
149
  }], srcData: [{
@@ -142,4 +163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
142
163
  type: HostBinding,
143
164
  args: ['style.maxHeight']
144
165
  }] } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUvZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUvZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBa0IsY0FBYyxFQUFpQixNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFRNUYsTUFBTSxPQUFPLGFBQWE7SUFNeEIsSUFBSSxnQkFBZ0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEQsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzSCxDQUFDO0lBU0QsSUFDSSxLQUFLO1FBQ1AsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQUMsZUFBZSxHQUFH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RkRJYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFNBQVM7OzBCQXFGTixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7Z0dBL0VyQyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFnQkYsS0FBSztzQkFEUixXQUFXO3VCQUFDLGFBQWE7Z0JBY3RCLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBU3pCLE1BQU07c0JBRFQsV0FBVzt1QkFBQyxjQUFjO2dCQWN2QixTQUFTO3NCQURaLFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElVaUZpbGVTZXJ2aWNlLCBVSV9GSUxFU0VSVklDRSwgVWlGaWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1maWxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBmaWxlU2l6ZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBzcmNPcHRpb25zO1xyXG4gIEBJbnB1dCgpIHNyY0RhdGE6IGFueTtcclxuICBASW5wdXQoKSBzcmNVcmw6IHsgc3JjOiBzdHJpbmcsIG1pbWVUeXBlPzogc3RyaW5nIH07XHJcbiAgZ2V0IGZpdEltYWdlRmlsZVNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIGZpbGVzaXplIGZvciAnICsgdGhpcy5maWxlU2l6ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdIDwgMCB8fCB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMV0gPCAwXHJcbiAgfVxyXG5cclxuICB2aXNpYmxlID0gZmFsc2U7XHJcbiAgc3JjO1xyXG4gIHNyY1VybE1pbWVUeXBlO1xyXG4gIG5hdGl2ZUZpbGVTaXplUmF0aW8gPSAtMTtcclxuICBuYXRpdmVGaWxlV2lkdGg7XHJcbiAgbmF0aXZlRmlsZUhlaWdodDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXHJcbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maXRJbWFnZUZpbGVTaXplKSB7XHJcbiAgICAgIGlmICh0aGlzLm5hdGl2ZUZpbGVTaXplUmF0aW8gPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuICcxMDAlJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVGaWxlV2lkdGggKyAncHgnXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV0gPyB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMF0gKyAncHgnIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXhXaWR0aCcpXHJcbiAgZ2V0IG1heFdpZHRoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdIDwgMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWR0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV0gPyB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMF0gKyAncHgnIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxyXG4gIGdldCBoZWlnaHQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmZpdEltYWdlRmlsZVNpemUpIHtcclxuICAgICAgaWYgKHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbyA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gJzEwMCUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUZpbGVIZWlnaHQgKyAncHgnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdID8gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdICsgJ3B4JyA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWF4SGVpZ2h0JylcclxuICBnZXQgbWF4SGVpZ2h0KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdIDwgMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdID8gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdICsgJ3B4JyA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldCBpc1ZpZGVvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWltZS5zdGFydHNXaXRoKCd2aWRlby8nKTtcclxuICB9XHJcblxyXG4gIGdldCBtaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuc3JjVXJsTWltZVR5cGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc3JjVXJsTWltZVR5cGVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNyY0RhdGEubmF0aXZlRmlsZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNyY0RhdGEubmF0aXZlRmlsZS50eXBlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmdldE1pbWVUeXBlKHRoaXMuc3JjRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlUmV0aW5hU3JjKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2VDb25maWcudXNlUmV0aW5hU3JjXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KFVJX0ZJTEVTRVJWSUNFKSBwcml2YXRlIGZpbGVTZXJ2aWNlQ29uZmlnOiBJVWlGaWxlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IFVpRmlsZVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLnNyY0RhdGEpIHtcclxuICAgICAgdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvID0gLTE7XHJcbiAgICAgIGlmIChjaGFuZ2VzLnNyY0RhdGEuY3VycmVudFZhbHVlLm5hdGl2ZUZpbGUpIHtcclxuICAgICAgICB0aGlzLnNyYyA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoVVJMLmNyZWF0ZU9iamVjdFVSTChjaGFuZ2VzLnNyY0RhdGEuY3VycmVudFZhbHVlLm5hdGl2ZUZpbGUpKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maXRJbWFnZUZpbGVTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbyA9IE1hdGgubWF4KGltZy53aWR0aCAvIHRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXVswXSxcclxuICAgICAgICAgICAgICAgIGltZy5oZWlnaHQgLyB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMV0sIDEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvID0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubmF0aXZlRmlsZVdpZHRoID0gaW1nLndpZHRoIC8gdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvO1xyXG4gICAgICAgICAgdGhpcy5uYXRpdmVGaWxlSGVpZ2h0ID0gaW1nLmhlaWdodCAvIHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbztcclxuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1nLnNyYyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoY2hhbmdlcy5zcmNEYXRhLmN1cnJlbnRWYWx1ZS5uYXRpdmVGaWxlKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcmMgPSB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmdldE1lZGlhU3JjKHRoaXMuZmlsZVNpemUsIGNoYW5nZXMuc3JjRGF0YS5jdXJyZW50VmFsdWUsIHRoaXMuc3JjT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLnNyY1VybCkge1xyXG4gICAgICB0aGlzLnNyYyA9IGNoYW5nZXMuc3JjVXJsLmN1cnJlbnRWYWx1ZT8uc3JjO1xyXG4gICAgICBpZiAodGhpcy5zcmMpIHtcclxuICAgICAgICB0aGlzLnNyY1VybE1pbWVUeXBlID0gY2hhbmdlcy5zcmNVcmwuY3VycmVudFZhbHVlPy5taW1lVHlwZSB8fCAnaW1hZ2UvcG5nJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNyY1VybE1pbWVUeXBlID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtc3Bpbm5lciAqbmdJZj1cInZpc2libGVcIj48L21hdC1zcGlubmVyPlxyXG48aW1nICpuZ0lmPVwiIWlzVmlkZW8gJiYgdXNlUmV0aW5hU3JjXCIgW3NyY109XCJzcmNcIiBbc3Jjc2V0XT1cInNyYyArICcgMngnXCIvPlxyXG48aW1nICpuZ0lmPVwiIWlzVmlkZW8gJiYgIXVzZVJldGluYVNyY1wiIFtzcmNdPVwic3JjXCIvPlxyXG48dmlkZW8gKm5nSWY9XCJpc1ZpZGVvXCIgbXV0ZWQgY29udHJvbHMgW3NyY109XCJzcmNcIj48L3ZpZGVvPlxyXG5cclxuIl19
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUvZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUvZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFrQixjQUFjLEVBQThCLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQVF6RyxNQUFNLE9BQU8sYUFBYTtJQUl4QixJQUNJLFFBQVEsQ0FBQyxFQUF3QjtRQUNuQyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFNRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7SUFDdkYsQ0FBQztJ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Q0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7WUFDNUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxRQUFRLElBQUksV0FBVyxDQUFDO1lBQzdFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBbkpVLGFBQWEsa0JBNkdRLGNBQWM7a0dBN0duQyxhQUFhLG9VQ1QxQix1VEFLQTs7MkZESWEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxTQUFTOzswQkFpSE4sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjO2dHQXhHMUMsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFjaEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQWNGLEtBQUs7c0JBRFIsV0FBVzt1QkFBQyxhQUFhO2dCQWV0QixRQUFRO3NCQURYLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQVV6QixNQUFNO3NCQURULFdBQVc7dUJBQUMsY0FBYztnQkFldkIsU0FBUztzQkFEWixXQUFXO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT3B0aW9uYWwsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSVVpRmlsZVNlcnZpY2UsIFVJX0ZJTEVTRVJWSUNFLCBVaUZpbGVTZXJ2aWNlLCBJVWlGaWxlU2l6ZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1maWxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgcHJpdmF0ZSB1aUZpbGVTaXplOiBJVWlGaWxlU2l6ZTtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBzZXQgZmlsZVNpemUoZnM6IHN0cmluZyB8IElVaUZpbGVTaXplKSB7XHJcbiAgICBpZiAodHlwZW9mIGZzID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBmID0gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzLmZpbmQobiA9PiBuLm5hbWUgPT09IGZzKTtcclxuICAgICAgaWYgKCFmKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyBmaWxlc2l6ZSBmb3IgJyArIGZzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVpRmlsZVNpemUgPSBmO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVpRmlsZVNpemUgPSBmcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNyY09wdGlvbnM7XHJcbiAgQElucHV0KCkgc3JjRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHNyY1VybDogeyBzcmM6IHN0cmluZywgbWltZVR5cGU/OiBzdHJpbmcgfTtcclxuXHJcbiAgZ2V0IGZpdEltYWdlRmlsZVNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51aUZpbGVTaXplLmxpbWl0ID09PSAnbWF4SGVpZ2h0JyB8fCB0aGlzLnVpRmlsZVNpemUubGltaXQgPT09ICdtYXhXaWR0aCc7XHJcbiAgfVxyXG5cclxuICB2aXNpYmxlID0gZmFsc2U7XHJcbiAgc3JjO1xyXG4gIHNyY1VybE1pbWVUeXBlO1xyXG4gIG5hdGl2ZUZpbGVTaXplUmF0aW8gPSAtMTtcclxuICBuYXRpdmVGaWxlV2lkdGg7XHJcbiAgbmF0aXZlRmlsZUhlaWdodDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXHJcbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maXRJbWFnZUZpbGVTaXplKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgICAgLy8gaWYgKHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbyA9PT0gLTEpIHtcclxuICAgICAgLy8gICByZXR1cm4gJzEwMCUnO1xyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAvLyAgIHJldHVybiB0aGlzLm5hdGl2ZUZpbGVXaWR0aCArICdweCdcclxuICAgICAgLy8gfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudWlGaWxlU2l6ZS53aWR0aCArICdweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heFdpZHRoJylcclxuICBnZXQgbWF4V2lkdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLndpZHRoOyAvLyB1aUZpbGVTaXplLnggKyAncHgnO1xyXG4gICAgLy8gaWYgKHRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXVswXSA8IDApIHtcclxuICAgIC8vICAgcmV0dXJuIHRoaXMud2lkdGg7XHJcbiAgICAvLyB9XHJcbiAgICAvLyByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdID8gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdICsgJ3B4JyA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JylcclxuICBnZXQgaGVpZ2h0KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maXRJbWFnZUZpbGVTaXplKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgICAgLy8gaWYgKHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbyA9PT0gLTEpIHtcclxuICAgICAgLy8gICByZXR1cm4gJzEwMCUnO1xyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAvLyAgIHJldHVybiB0aGlzLm5hdGl2ZUZpbGVIZWlnaHQgKyAncHgnO1xyXG4gICAgICAvLyB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy51aUZpbGVTaXplLmhlaWdodCArICdweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heEhlaWdodCcpXHJcbiAgZ2V0IG1heEhlaWdodCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVpZ2h0OyAvLyB1aUZpbGVTaXplLnkgKyAncHgnO1xyXG4gICAgLy8gaWYgKHRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXVsxXSA8IDApIHtcclxuICAgIC8vICAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXSA/IHRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXVsxXSArICdweCcgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgaW1nU3R5bGUoKSB7XHJcbiAgICBjb25zdCByZXQgPSB7fTtcclxuICAgIGlmICh0aGlzLnVpRmlsZVNpemUubGltaXQgPT09ICdtYXhIZWlnaHQnKSB7XHJcbiAgICAgIHJldFsnaGVpZ2h0J10gPSB0aGlzLnVpRmlsZVNpemUuaGVpZ2h0ICsgJ3B4JztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVpRmlsZVNpemUubGltaXQgPT09ICdtYXhXaWR0aCcpIHtcclxuICAgICAgcmV0Wyd3aWR0aCddID0gdGhpcy51aUZpbGVTaXplLndpZHRoICsgJ3B4JztcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNWaWRlbygpIHtcclxuICAgIHJldHVybiB0aGlzLm1pbWUuc3RhcnRzV2l0aCgndmlkZW8vJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgbWltZSgpIHtcclxuICAgIGlmICh0aGlzLnNyY1VybE1pbWVUeXBlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNyY1VybE1pbWVUeXBlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5zcmNEYXRhLm5hdGl2ZUZpbGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zcmNEYXRhLm5hdGl2ZUZpbGUudHlwZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5nZXRNaW1lVHlwZSh0aGlzLnNyY0RhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHVzZVJldGluYVNyYygpIHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLnVzZVJldGluYVNyY1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChVSV9GSUxFU0VSVklDRSkgcHJpdmF0ZSBmaWxlU2VydmljZUNvbmZpZzogSVVpRmlsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgICAgICAgICAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBVaUZpbGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMuc3JjRGF0YSkge1xyXG4gICAgICB0aGlzLm5hdGl2ZUZpbGVTaXplUmF0aW8gPSAtMTtcclxuICAgICAgaWYgKGNoYW5nZXMuc3JjRGF0YS5jdXJyZW50VmFsdWUubmF0aXZlRmlsZSkge1xyXG4gICAgICAgIHRoaXMuc3JjID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChVUkwuY3JlYXRlT2JqZWN0VVJMKGNoYW5nZXMuc3JjRGF0YS5jdXJyZW50VmFsdWUubmF0aXZlRmlsZSkpO1xyXG5cclxuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZpdEltYWdlRmlsZVNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvID0gTWF0aC5tYXgoaW1nLndpZHRoIC8gdGhpcy51aUZpbGVTaXplLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaW1nLmhlaWdodCAvIHRoaXMudWlGaWxlU2l6ZS5oZWlnaHQsIDEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvID0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubmF0aXZlRmlsZVdpZHRoID0gaW1nLndpZHRoIC8gdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvO1xyXG4gICAgICAgICAgdGhpcy5uYXRpdmVGaWxlSGVpZ2h0ID0gaW1nLmhlaWdodCAvIHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbztcclxuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1nLnNyYyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoY2hhbmdlcy5zcmNEYXRhLmN1cnJlbnRWYWx1ZS5uYXRpdmVGaWxlKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcmMgPSB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmdldE1lZGlhU3JjKHRoaXMudWlGaWxlU2l6ZSwgY2hhbmdlcy5zcmNEYXRhLmN1cnJlbnRWYWx1ZSwgdGhpcy5zcmNPcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMuc3JjVXJsKSB7XHJcbiAgICAgIHRoaXMuc3JjID0gY2hhbmdlcy5zcmNVcmwuY3VycmVudFZhbHVlPy5zcmM7XHJcbiAgICAgIGlmICh0aGlzLnNyYykge1xyXG4gICAgICAgIHRoaXMuc3JjVXJsTWltZVR5cGUgPSBjaGFuZ2VzLnNyY1VybC5jdXJyZW50VmFsdWU/Lm1pbWVUeXBlIHx8ICdpbWFnZS9wbmcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3JjVXJsTWltZVR5cGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG1hdC1zcGlubmVyICpuZ0lmPVwidmlzaWJsZVwiPjwvbWF0LXNwaW5uZXI+XHJcbjxpbWcgKm5nSWY9XCIhaXNWaWRlbyAmJiB1c2VSZXRpbmFTcmNcIiBbbmdTdHlsZV09XCJpbWdTdHlsZVwiIFtzcmNdPVwic3JjXCIgW3NyY3NldF09XCJzcmMgKyAnIDJ4J1wiLz5cclxuPGltZyAqbmdJZj1cIiFpc1ZpZGVvICYmICF1c2VSZXRpbmFTcmNcIiBbbmdTdHlsZV09XCJpbWdTdHlsZVwiIFtzcmNdPVwic3JjXCIvPlxyXG48dmlkZW8gKm5nSWY9XCJpc1ZpZGVvXCIgbXV0ZWQgY29udHJvbHMgW3NyY109XCJzcmNcIj48L3ZpZGVvPlxyXG5cclxuIl19