@smartbit4all/ng-client 4.2.40 → 4.2.42

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.
Files changed (46) hide show
  1. package/esm2022/lib/smart-dialog/smartdialog.service.mjs +7 -4
  2. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
  3. package/esm2022/lib/smart-grid/smart-grid.component.mjs +2 -4
  4. package/esm2022/lib/smart-map/impl/leaflet-map.mjs +2 -2
  5. package/esm2022/lib/smart-table/smarttable.model.mjs +10 -4
  6. package/esm2022/lib/smart-table/tables/table.mjs +7 -3
  7. package/esm2022/lib/view-context/api/api-default/binaryData.mjs +2 -0
  8. package/esm2022/lib/view-context/api/api-default/invocationError.mjs +2 -0
  9. package/esm2022/lib/view-context/api/api-default/invocationRequest.mjs +2 -0
  10. package/esm2022/lib/view-context/api/model/models.mjs +3 -1
  11. package/esm2022/lib/view-context/api/model/smartLinkData.mjs +1 -1
  12. package/esm2022/lib/view-context/api/model/smartLinkMigrationStatus.mjs +8 -0
  13. package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -12
  14. package/esm2022/lib/view-context/api/model/uploadWidgetType.mjs +19 -0
  15. package/esm2022/lib/view-context/api/model/uploadedFile.mjs +1 -12
  16. package/esm2022/lib/view-context/api/model/viewEventHandler.mjs +2 -12
  17. package/esm2022/lib/view-context/projects.mjs +4 -1
  18. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/photo-capture-widget/photo-capture-widget.component.mjs +127 -0
  19. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +82 -23
  20. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/voice-record-widget/voice-record-widget.component.mjs +156 -0
  21. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +184 -0
  22. package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +1 -2
  23. package/esm2022/lib/view-context/smart-view-context.module.mjs +18 -3
  24. package/fesm2022/smartbit4all-ng-client.mjs +618 -112
  25. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  26. package/lib/smart-dialog/smartdialog.service.d.ts +1 -1
  27. package/lib/smart-table/smarttable.model.d.ts +5 -7
  28. package/lib/view-context/api/api-default/binaryData.d.ts +2 -0
  29. package/lib/view-context/api/api-default/invocationError.d.ts +2 -0
  30. package/lib/view-context/api/api-default/invocationRequest.d.ts +2 -0
  31. package/lib/view-context/api/model/models.d.ts +2 -0
  32. package/lib/view-context/api/model/smartLinkData.d.ts +5 -0
  33. package/lib/view-context/api/model/smartLinkMigrationStatus.d.ts +39 -0
  34. package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +2 -0
  35. package/lib/view-context/api/model/uploadWidgetType.d.ts +17 -0
  36. package/lib/view-context/api/model/uploadedFile.d.ts +2 -1
  37. package/lib/view-context/api/model/viewEventHandler.d.ts +2 -1
  38. package/lib/view-context/projects.d.ts +3 -0
  39. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/photo-capture-widget/photo-capture-widget.component.d.ts +28 -0
  40. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +14 -4
  41. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/voice-record-widget/voice-record-widget.component.d.ts +30 -0
  42. package/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.d.ts +43 -0
  43. package/lib/view-context/smart-view-context.module.d.ts +47 -44
  44. package/package.json +3 -2
  45. package/smartbit4all-ng-client-4.2.42.tgz +0 -0
  46. package/smartbit4all-ng-client-4.2.40.tgz +0 -0
@@ -0,0 +1,156 @@
1
+ import { Component, ViewChild, Input, Inject, Optional, EventEmitter, Output, } from '@angular/core';
2
+ import WaveSurfer from 'wavesurfer.js';
3
+ import RecordPlugin from 'wavesurfer.js/dist/plugins/record.js';
4
+ import { COMPONENT_LIBRARY, ComponentLibrary } from '../../../../utility/componentLibrary';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/material/button";
8
+ import * as i3 from "primeng/button";
9
+ import * as i4 from "@angular/material/icon";
10
+ import * as i5 from "../../../../../smart-icon/smart-icon/smart-icon.component";
11
+ import * as i6 from "../../../../utility/componentLibrary";
12
+ export class VoiceRecordWidgetComponent {
13
+ constructor(compLib) {
14
+ this.recordingSaved = new EventEmitter();
15
+ this.componentLibrary = ComponentLibrary;
16
+ this.isRecording = false;
17
+ this.recordedBlob = null;
18
+ this.time = '00:00';
19
+ this.isPlaying = false;
20
+ this.compLib = compLib ?? ComponentLibrary.PRIMENG;
21
+ }
22
+ ngOnInit() {
23
+ const cssPrimaryColor = getComputedStyle(document.documentElement)
24
+ .getPropertyValue('--primary-color')
25
+ .trim();
26
+ this.color = this.color ?? (cssPrimaryColor || 'blue');
27
+ this.iconColor = this.iconColor ?? (cssPrimaryColor || 'blue');
28
+ }
29
+ ngAfterViewInit() {
30
+ this.wavesurfer = WaveSurfer.create({
31
+ container: this.waveformRef.nativeElement,
32
+ waveColor: this.color,
33
+ progressColor: this.addAlphaToColor(this.color, 0.5),
34
+ height: 35,
35
+ barWidth: 10,
36
+ barGap: 5,
37
+ barRadius: 5,
38
+ plugins: [
39
+ RecordPlugin.create({
40
+ renderRecordedAudio: true,
41
+ scrollingWaveform: true,
42
+ mimeType: 'audio/webm',
43
+ }),
44
+ ],
45
+ });
46
+ this.wavesurfer.setVolume(1);
47
+ this.record = this.wavesurfer.registerPlugin(RecordPlugin.create({
48
+ renderRecordedAudio: true,
49
+ scrollingWaveform: true,
50
+ continuousWaveform: false,
51
+ continuousWaveformDuration: 15,
52
+ }));
53
+ this.wavesurfer.on('dblclick', () => {
54
+ this.wavesurfer.play();
55
+ });
56
+ this.record.on('record-end', (blob) => {
57
+ this.recordedBlob = blob;
58
+ });
59
+ this.record.on('record-progress', (time) => {
60
+ this.updateProgress(time);
61
+ });
62
+ this.wavesurfer.on('finish', () => {
63
+ this.isPlaying = false;
64
+ });
65
+ }
66
+ async startRecording() {
67
+ const confirmed = await this.checkHasRecorded();
68
+ if (!confirmed)
69
+ return;
70
+ if (this.record && !this.isRecording) {
71
+ this.record.startRecording();
72
+ this.isRecording = true;
73
+ }
74
+ }
75
+ async checkHasRecorded() {
76
+ if (this.recordedBlob) {
77
+ }
78
+ return true;
79
+ }
80
+ updateProgress(time) {
81
+ let formattedTime = [Math.floor((time % 3600000) / 60000), Math.floor((time % 60000) / 1000)]
82
+ .map((v) => (v < 10 ? '0' + v : v))
83
+ .join(':');
84
+ this.time = formattedTime;
85
+ }
86
+ stopRecording() {
87
+ if (this.record && this.isRecording) {
88
+ this.record.stopRecording();
89
+ this.isRecording = false;
90
+ }
91
+ }
92
+ saveRecording() {
93
+ if (this.recordedBlob) {
94
+ const fileName = 'recording.mp3';
95
+ const file = new File([this.recordedBlob], fileName, { type: 'audio/mpeg' });
96
+ this.recordingSaved.emit(file);
97
+ this.recordedBlob = null;
98
+ this.time = '00:00';
99
+ this.isPlaying = false;
100
+ this.wavesurfer.empty();
101
+ }
102
+ }
103
+ replayRecording() {
104
+ if (this.recordedBlob) {
105
+ this.isPlaying = !this.isPlaying;
106
+ this.wavesurfer.playPause();
107
+ }
108
+ }
109
+ ngOnDestroy() {
110
+ if (this.wavesurfer) {
111
+ this.wavesurfer.destroy();
112
+ }
113
+ }
114
+ addAlphaToColor(hexColor, alpha) {
115
+ if (/^#([a-f\d])([a-f\d])([a-f\d])$/i.test(hexColor)) {
116
+ hexColor = hexColor.replace(/^#([a-f\d])([a-f\d])([a-f\d])$/i, (_, r, g, b) => `#${r}${r}${g}${g}${b}${b}`);
117
+ }
118
+ const hexMatch = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hexColor);
119
+ if (hexMatch) {
120
+ const [, r, g, b] = hexMatch;
121
+ return `rgba(${parseInt(r, 16)}, ${parseInt(g, 16)}, ${parseInt(b, 16)}, ${alpha})`;
122
+ }
123
+ const ctx = document.createElement('canvas').getContext('2d');
124
+ if (ctx) {
125
+ ctx.fillStyle = hexColor;
126
+ const parsed = ctx.fillStyle;
127
+ const rgbMatch = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/.exec(parsed);
128
+ if (rgbMatch) {
129
+ const [, r, g, b] = rgbMatch;
130
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
131
+ }
132
+ }
133
+ return hexColor;
134
+ }
135
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: VoiceRecordWidgetComponent, deps: [{ token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
136
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: VoiceRecordWidgetComponent, selector: "voice-record-widget", inputs: { color: "color", iconColor: "iconColor" }, outputs: { recordingSaved: "recordingSaved" }, viewQueries: [{ propertyName: "waveformRef", first: true, predicate: ["waveform"], descendants: true }], ngImport: i0, template: "<div class=\"recorderContainer\">\r\n <div class=\"recorderToolbar\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <!-- Start Recording -->\r\n <button\r\n *ngIf=\"!isRecording\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"startRecording()\"\r\n type=\"button\"\r\n ><smart-icon [icon]=\"'microphone'\" [color]=\"iconColor\"></smart-icon\r\n ></button>\r\n\r\n <!-- Stop Recording -->\r\n <button\r\n *ngIf=\"isRecording\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"stopRecording()\"\r\n type=\"button\"\r\n ><smart-icon [icon]=\"'stop-circle'\" [color]=\"'red'\"></smart-icon\r\n ></button>\r\n\r\n } @else {\r\n <!-- Start Recording -->\r\n <button\r\n *ngIf=\"!isRecording\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"startRecording()\"\r\n type=\"button\"\r\n >\r\n <mat-icon [ngStyle]=\"{ color: iconColor }\">mic</mat-icon>\r\n </button>\r\n\r\n <!-- Stop Recording -->\r\n <button\r\n *ngIf=\"isRecording\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"stopRecording()\"\r\n type=\"button\"\r\n ><mat-icon [ngStyle]=\"{ color: 'red' }\">stop_circle</mat-icon>\r\n </button>\r\n }\r\n <div class=\"progress\">{{ time }}</div>\r\n </div>\r\n <div class=\"waveform\" #waveform></div>\r\n <div class=\"recorderToolbar\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <!-- Save Recording -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"saveRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n ><smart-icon [icon]=\"'save'\" [color]=\"iconColor\"></smart-icon\r\n ></button>\r\n\r\n <!-- Start Play -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"replayRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n ><smart-icon\r\n [icon]=\"isPlaying ? 'stop-circle' : 'play-circle'\"\r\n [color]=\"isPlaying ? 'red' : iconColor\"\r\n ></smart-icon\r\n ></button>\r\n } @else {\r\n <!-- Save Recording -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"saveRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n >\r\n <mat-icon [ngStyle]=\"{ color: iconColor }\">save</mat-icon>\r\n </button>\r\n\r\n <!-- Start Play -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"replayRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n ><mat-icon [ngStyle]=\"{ color: isPlaying ? 'warn' : iconColor }\">\r\n {{ isPlaying ? 'stop_circle' : 'play_circle' }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".recorderContainer{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;border-radius:5px;display:flex;flex-direction:row;padding:.2rem}.waveform{flex:1;align-content:center;height:35}.recorderToolbar{display:flex;flex-direction:row;gap:.2rem;padding:0 .5rem;align-items:center}.recorderToolbar ::ng-deep .p-button.p-button-icon-only{width:fit-content;padding:.2rem}.recorderToolbar ::ng-deep .mdc-button{min-width:unset;font-size:1.5rem;margin:unset}.recorderToolbar ::ng-deep .mat-mdc-button>.mat-icon{font-size:unset;width:unset;height:unset;padding:.2rem;margin:unset}.recorderToolbar ::ng-deep .p-button-text{background-color:transparent;border:unset;box-shadow:unset;padding:.2rem}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }] }); }
137
+ }
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: VoiceRecordWidgetComponent, decorators: [{
139
+ type: Component,
140
+ args: [{ selector: 'voice-record-widget', template: "<div class=\"recorderContainer\">\r\n <div class=\"recorderToolbar\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <!-- Start Recording -->\r\n <button\r\n *ngIf=\"!isRecording\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"startRecording()\"\r\n type=\"button\"\r\n ><smart-icon [icon]=\"'microphone'\" [color]=\"iconColor\"></smart-icon\r\n ></button>\r\n\r\n <!-- Stop Recording -->\r\n <button\r\n *ngIf=\"isRecording\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"stopRecording()\"\r\n type=\"button\"\r\n ><smart-icon [icon]=\"'stop-circle'\" [color]=\"'red'\"></smart-icon\r\n ></button>\r\n\r\n } @else {\r\n <!-- Start Recording -->\r\n <button\r\n *ngIf=\"!isRecording\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"startRecording()\"\r\n type=\"button\"\r\n >\r\n <mat-icon [ngStyle]=\"{ color: iconColor }\">mic</mat-icon>\r\n </button>\r\n\r\n <!-- Stop Recording -->\r\n <button\r\n *ngIf=\"isRecording\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"stopRecording()\"\r\n type=\"button\"\r\n ><mat-icon [ngStyle]=\"{ color: 'red' }\">stop_circle</mat-icon>\r\n </button>\r\n }\r\n <div class=\"progress\">{{ time }}</div>\r\n </div>\r\n <div class=\"waveform\" #waveform></div>\r\n <div class=\"recorderToolbar\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <!-- Save Recording -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"saveRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n ><smart-icon [icon]=\"'save'\" [color]=\"iconColor\"></smart-icon\r\n ></button>\r\n\r\n <!-- Start Play -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n pButton\r\n pRipple\r\n class=\"p-button-text\"\r\n (click)=\"replayRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n ><smart-icon\r\n [icon]=\"isPlaying ? 'stop-circle' : 'play-circle'\"\r\n [color]=\"isPlaying ? 'red' : iconColor\"\r\n ></smart-icon\r\n ></button>\r\n } @else {\r\n <!-- Save Recording -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"saveRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n >\r\n <mat-icon [ngStyle]=\"{ color: iconColor }\">save</mat-icon>\r\n </button>\r\n\r\n <!-- Start Play -->\r\n <button\r\n *ngIf=\"recordedBlob\"\r\n mat-button\r\n class=\"p-button-text\"\r\n (click)=\"replayRecording()\"\r\n [disabled]=\"isRecording\"\r\n type=\"button\"\r\n ><mat-icon [ngStyle]=\"{ color: isPlaying ? 'warn' : iconColor }\">\r\n {{ isPlaying ? 'stop_circle' : 'play_circle' }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".recorderContainer{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;border-radius:5px;display:flex;flex-direction:row;padding:.2rem}.waveform{flex:1;align-content:center;height:35}.recorderToolbar{display:flex;flex-direction:row;gap:.2rem;padding:0 .5rem;align-items:center}.recorderToolbar ::ng-deep .p-button.p-button-icon-only{width:fit-content;padding:.2rem}.recorderToolbar ::ng-deep .mdc-button{min-width:unset;font-size:1.5rem;margin:unset}.recorderToolbar ::ng-deep .mat-mdc-button>.mat-icon{font-size:unset;width:unset;height:unset;padding:.2rem;margin:unset}.recorderToolbar ::ng-deep .p-button-text{background-color:transparent;border:unset;box-shadow:unset;padding:.2rem}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}\n"] }]
141
+ }], ctorParameters: () => [{ type: i6.ComponentLibrary, decorators: [{
142
+ type: Inject,
143
+ args: [COMPONENT_LIBRARY]
144
+ }, {
145
+ type: Optional
146
+ }] }], propDecorators: { waveformRef: [{
147
+ type: ViewChild,
148
+ args: ['waveform']
149
+ }], color: [{
150
+ type: Input
151
+ }], iconColor: [{
152
+ type: Input
153
+ }], recordingSaved: [{
154
+ type: Output
155
+ }] } });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtcmVjb3JkLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2RpYWxvZ3MvdWktYWN0aW9uLWZpbGUtdXBsb2FkLWRpYWxvZy92b2ljZS1yZWNvcmQtd2lkZ2V0L3ZvaWNlLXJlY29yZC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9kaWFsb2dzL3VpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cvdm9pY2UtcmVjb3JkLXdpZGdldC92b2ljZS1yZWNvcmQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sWUFBWSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7OztBQU8zRixNQUFNLE9BQU8sMEJBQTBCO0lBbUJyQyxZQUFtRCxPQUEwQjtRQWJuRSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFNcEQscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFFcEMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsaUJBQVksR0FBZ0IsSUFBSSxDQUFDO1FBQ2pDLFNBQUksR0FBVyxPQUFPLENBQUM7UUFDdkIsY0FBUyxH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LEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7UUFDdEYsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixHQUFHLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUM3QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOytHQTdKVSwwQkFBMEIsa0JBbUJqQixpQkFBaUI7bUdBbkIxQiwwQkFBMEIsdVFDdEJ2QywyZ0dBMEdBOzs0RkRwRmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHFCQUFxQjs7MEJBdUJsQixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQUcsUUFBUTt5Q0FsQnpCLFdBQVc7c0JBQWpDLFNBQVM7dUJBQUMsVUFBVTtnQkFFWixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgSW5wdXQsXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXQsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgV2F2ZVN1cmZlciBmcm9tICd3YXZlc3VyZmVyLmpzJztcclxuaW1wb3J0IFJlY29yZFBsdWdpbiBmcm9tICd3YXZlc3VyZmVyLmpzL2Rpc3QvcGx1Z2lucy9yZWNvcmQuanMnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ZvaWNlLXJlY29yZC13aWRnZXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92b2ljZS1yZWNvcmQtd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92b2ljZS1yZWNvcmQtd2lkZ2V0LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZvaWNlUmVjb3JkV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ3dhdmVmb3JtJykgd2F2ZWZvcm1SZWYhOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKSBjb2xvcj86IHN0cmluZztcclxuICBASW5wdXQoKSBpY29uQ29sb3I/OiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSByZWNvcmRpbmdTYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QmxvYj4oKTtcclxuXHJcbiAgcHJpdmF0ZSB3YXZlc3VyZmVyITogV2F2ZVN1cmZlcjtcclxuICBwcml2YXRlIHJlY29yZCE6IFJlY29yZFBsdWdpbjtcclxuXHJcbiAgY29tcExpYjogQ29tcG9uZW50TGlicmFyeTtcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuXHJcbiAgaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICByZWNvcmRlZEJsb2I6IEJsb2IgfCBudWxsID0gbnVsbDtcclxuICB0aW1lOiBzdHJpbmcgPSAnMDA6MDAnO1xyXG4gIGlzUGxheWluZyA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgY3NzUHJpbWFyeUNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXByaW1hcnktY29sb3InKVxyXG4gICAgICAudHJpbSgpO1xyXG5cclxuICAgIHRoaXMuY29sb3IgPSB0aGlzLmNvbG9yID8/IChjc3NQcmltYXJ5Q29sb3IgfHwgJ2JsdWUnKTtcclxuICAgIHRoaXMuaWNvbkNvbG9yID0gdGhpcy5pY29uQ29sb3IgPz8gKGNzc1ByaW1hcnlDb2xvciB8fCAnYmx1ZScpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy53YXZlc3VyZmVyID0gV2F2ZVN1cmZlci5jcmVhdGUoe1xyXG4gICAgICBjb250YWluZXI6IHRoaXMud2F2ZWZvcm1SZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgd2F2ZUNvbG9yOiB0aGlzLmNvbG9yLFxyXG4gICAgICBwcm9ncmVzc0NvbG9yOiB0aGlzLmFkZEFscGhhVG9Db2xvcih0aGlzLmNvbG9yISwgMC41KSxcclxuICAgICAgaGVpZ2h0OiAzNSxcclxuICAgICAgYmFyV2lkdGg6IDEwLFxyXG4gICAgICBiYXJHYXA6IDUsXHJcbiAgICAgIGJhclJhZGl1czogNSxcclxuICAgICAgcGx1Z2luczogW1xyXG4gICAgICAgIFJlY29yZFBsdWdpbi5jcmVhdGUoe1xyXG4gICAgICAgICAgcmVuZGVyUmVjb3JkZWRBdWRpbzogdHJ1ZSxcclxuICAgICAgICAgIHNjcm9sbGluZ1dhdmVmb3JtOiB0cnVlLFxyXG4gICAgICAgICAgbWltZVR5cGU6ICdhdWRpby93ZWJtJyxcclxuICAgICAgICB9KSxcclxuICAgICAgXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2F2ZXN1cmZlci5zZXRWb2x1bWUoMSk7XHJcblxyXG4gICAgdGhpcy5yZWNvcmQgPSB0aGlzLndhdmVzdXJmZXIucmVnaXN0ZXJQbHVnaW4oXHJcbiAgICAgIFJlY29yZFBsdWdpbi5jcmVhdGUoe1xyXG4gICAgICAgIHJlbmRlclJlY29yZGVkQXVkaW86IHRydWUsXHJcbiAgICAgICAgc2Nyb2xsaW5nV2F2ZWZvcm06IHRydWUsXHJcbiAgICAgICAgY29udGludW91c1dhdmVmb3JtOiBmYWxzZSxcclxuICAgICAgICBjb250aW51b3VzV2F2ZWZvcm1EdXJhdGlvbjogMTUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMud2F2ZXN1cmZlci5vbignZGJsY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMud2F2ZXN1cmZlci5wbGF5KCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVjb3JkLm9uKCdyZWNvcmQtZW5kJywgKGJsb2I6IEJsb2IpID0+IHtcclxuICAgICAgdGhpcy5yZWNvcmRlZEJsb2IgPSBibG9iO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlY29yZC5vbigncmVjb3JkLXByb2dyZXNzJywgKHRpbWUpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcyh0aW1lKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy53YXZlc3VyZmVyLm9uKCdmaW5pc2gnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN0YXJ0UmVjb3JkaW5nKCkge1xyXG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5jaGVja0hhc1JlY29yZGVkKCk7XHJcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZCAmJiAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICB0aGlzLnJlY29yZC5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBjaGVja0hhc1JlY29yZGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkZWRCbG9iKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcm9ncmVzcyh0aW1lOiBudW1iZXIpIHtcclxuICAgIGxldCBmb3JtYXR0ZWRUaW1lID0gW01hdGguZmxvb3IoKHRpbWUgJSAzNjAwMDAwKSAvIDYwMDAwKSwgTWF0aC5mbG9vcigodGltZSAlIDYwMDAwKSAvIDEwMDApXVxyXG4gICAgICAubWFwKCh2KSA9PiAodiA8IDEwID8gJzAnICsgdiA6IHYpKVxyXG4gICAgICAuam9pbignOicpO1xyXG4gICAgdGhpcy50aW1lID0gZm9ybWF0dGVkVGltZTtcclxuICB9XHJcblxyXG4gIHN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmQgJiYgdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICB0aGlzLnJlY29yZC5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRlZEJsb2IpIHtcclxuICAgICAgY29uc3QgZmlsZU5hbWUgPSAncmVjb3JkaW5nLm1wMyc7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbdGhpcy5yZWNvcmRlZEJsb2JdLCBmaWxlTmFtZSwgeyB0eXBlOiAnYXVkaW8vbXBlZycgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlY29yZGluZ1NhdmVkLmVtaXQoZmlsZSk7XHJcblxyXG4gICAgICB0aGlzLnJlY29yZGVkQmxvYiA9IG51bGw7XHJcbiAgICAgIHRoaXMudGltZSA9ICcwMDowMCc7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMud2F2ZXN1cmZlci5lbXB0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVwbGF5UmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkZWRCbG9iKSB7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gIXRoaXMuaXNQbGF5aW5nO1xyXG4gICAgICB0aGlzLndhdmVzdXJmZXIucGxheVBhdXNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLndhdmVzdXJmZXIpIHtcclxuICAgICAgdGhpcy53YXZlc3VyZmVyLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQWxwaGFUb0NvbG9yKGhleENvbG9yOiBzdHJpbmcsIGFscGhhOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKC9eIyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaS50ZXN0KGhleENvbG9yKSkge1xyXG4gICAgICBoZXhDb2xvciA9IGhleENvbG9yLnJlcGxhY2UoXHJcbiAgICAgICAgL14jKFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pLFxyXG4gICAgICAgIChfLCByLCBnLCBiKSA9PiBgIyR7cn0ke3J9JHtnfSR7Z30ke2J9JHtifWBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoZXhNYXRjaCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXhDb2xvcik7XHJcbiAgICBpZiAoaGV4TWF0Y2gpIHtcclxuICAgICAgY29uc3QgWywgciwgZywgYl0gPSBoZXhNYXRjaDtcclxuICAgICAgcmV0dXJuIGByZ2JhKCR7cGFyc2VJbnQociwgMTYpfSwgJHtwYXJzZUludChnLCAxNil9LCAke3BhcnNlSW50KGIsIDE2KX0sICR7YWxwaGF9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGlmIChjdHgpIHtcclxuICAgICAgY3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xyXG4gICAgICBjb25zdCBwYXJzZWQgPSBjdHguZmlsbFN0eWxlO1xyXG4gICAgICBjb25zdCByZ2JNYXRjaCA9IC9ecmdiXFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKVxcKSQvLmV4ZWMocGFyc2VkKTtcclxuICAgICAgaWYgKHJnYk1hdGNoKSB7XHJcbiAgICAgICAgY29uc3QgWywgciwgZywgYl0gPSByZ2JNYXRjaDtcclxuICAgICAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZXhDb2xvcjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJlY29yZGVyQ29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJlY29yZGVyVG9vbGJhclwiPlxyXG4gICAgQGlmKGNvbXBMaWIgPT09IGNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgPCEtLSBTdGFydCBSZWNvcmRpbmcgLS0+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0lmPVwiIWlzUmVjb3JkaW5nXCJcclxuICAgICAgcEJ1dHRvblxyXG4gICAgICBwUmlwcGxlXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgIChjbGljayk9XCJzdGFydFJlY29yZGluZygpXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgID48c21hcnQtaWNvbiBbaWNvbl09XCInbWljcm9waG9uZSdcIiBbY29sb3JdPVwiaWNvbkNvbG9yXCI+PC9zbWFydC1pY29uXHJcbiAgICA+PC9idXR0b24+XHJcblxyXG4gICAgPCEtLSBTdG9wIFJlY29yZGluZyAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJpc1JlY29yZGluZ1wiXHJcbiAgICAgIHBCdXR0b25cclxuICAgICAgcFJpcHBsZVxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAoY2xpY2spPVwic3RvcFJlY29yZGluZygpXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgID48c21hcnQtaWNvbiBbaWNvbl09XCInc3RvcC1jaXJjbGUnXCIgW2NvbG9yXT1cIidyZWQnXCI+PC9zbWFydC1pY29uXHJcbiAgICA+PC9idXR0b24+XHJcblxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICA8IS0tIFN0YXJ0IFJlY29yZGluZyAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIlxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgIChjbGljayk9XCJzdGFydFJlY29yZGluZygpXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBpY29uQ29sb3IgfVwiPm1pYzwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIFN0b3AgUmVjb3JkaW5nIC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImlzUmVjb3JkaW5nXCJcclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAoY2xpY2spPVwic3RvcFJlY29yZGluZygpXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgID48bWF0LWljb24gW25nU3R5bGVdPVwieyBjb2xvcjogJ3JlZCcgfVwiPnN0b3BfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+e3sgdGltZSB9fTwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ3YXZlZm9ybVwiICN3YXZlZm9ybT48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicmVjb3JkZXJUb29sYmFyXCI+XHJcbiAgICBAaWYoY29tcExpYiA9PT0gY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICA8IS0tIFNhdmUgUmVjb3JkaW5nIC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cInJlY29yZGVkQmxvYlwiXHJcbiAgICAgIHBCdXR0b25cclxuICAgICAgcFJpcHBsZVxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAoY2xpY2spPVwic2F2ZVJlY29yZGluZygpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVjb3JkaW5nXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgID48c21hcnQtaWNvbiBbaWNvbl09XCInc2F2ZSdcIiBbY29sb3JdPVwiaWNvbkNvbG9yXCI+PC9zbWFydC1pY29uXHJcbiAgICA+PC9idXR0b24+XHJcblxyXG4gICAgPCEtLSBTdGFydCBQbGF5ICAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJyZWNvcmRlZEJsb2JcIlxyXG4gICAgICBwQnV0dG9uXHJcbiAgICAgIHBSaXBwbGVcclxuICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgKGNsaWNrKT1cInJlcGxheVJlY29yZGluZygpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVjb3JkaW5nXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgID48c21hcnQtaWNvblxyXG4gICAgICAgIFtpY29uXT1cImlzUGxheWluZyA/ICdzdG9wLWNpcmNsZScgOiAncGxheS1jaXJjbGUnXCJcclxuICAgICAgICBbY29sb3JdPVwiaXNQbGF5aW5nID8gJ3JlZCcgOiBpY29uQ29sb3JcIlxyXG4gICAgICA+PC9zbWFydC1pY29uXHJcbiAgICA+PC9idXR0b24+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDwhLS0gU2F2ZSBSZWNvcmRpbmcgLS0+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0lmPVwicmVjb3JkZWRCbG9iXCJcclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAoY2xpY2spPVwic2F2ZVJlY29yZGluZygpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVjb3JkaW5nXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBpY29uQ29sb3IgfVwiPnNhdmU8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPCEtLSBTdGFydCBQbGF5ICAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJyZWNvcmRlZEJsb2JcIlxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgIChjbGljayk9XCJyZXBsYXlSZWNvcmRpbmcoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlY29yZGluZ1wiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICA+PG1hdC1pY29uIFtuZ1N0eWxlXT1cInsgY29sb3I6IGlzUGxheWluZyA/ICd3YXJuJyA6IGljb25Db2xvciB9XCI+XHJcbiAgICAgICAge3sgaXNQbGF5aW5nID8gJ3N0b3BfY2lyY2xlJyA6ICdwbGF5X2NpcmNsZScgfX1cclxuICAgICAgPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,184 @@
1
+ import { Component, EventEmitter, Inject, Input, Optional, Output, } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import { UiActionDescriptorService } from '../ui-action.descriptor.service';
4
+ import { COMPONENT_LIBRARY, ComponentLibrary } from '../../utility/componentLibrary';
5
+ import { UiActionButtonType } from '../../api/model/uiActionButtonType';
6
+ import { IconPosition } from '../../api/model/iconPosition';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../ui-action.service";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/material/button";
11
+ import * as i4 from "primeng/button";
12
+ import * as i5 from "../../../smart-icon/smart-icon/smart-icon.component";
13
+ import * as i6 from "../../../shared/smart-tooltip.directive";
14
+ import * as i7 from "../../utility/componentLibrary";
15
+ export class UiActionButtonComponent {
16
+ constructor(service, inject, changeDetector, compLib) {
17
+ this.service = service;
18
+ this.inject = inject;
19
+ this.changeDetector = changeDetector;
20
+ this._destroy$ = new Subject();
21
+ this.componentLibrary = ComponentLibrary; // Expose the enum to the template
22
+ this.pressedButtonActive = true;
23
+ this.actionClick = new EventEmitter();
24
+ this.actionDoubleClick = new EventEmitter();
25
+ this.compLib = compLib ?? ComponentLibrary.PRIMENG;
26
+ this.manager = inject.get(UiActionDescriptorService);
27
+ this.subscribeToLanguageChange();
28
+ }
29
+ ngOnInit() {
30
+ // Overrides the basic UiActionDescriptorService with a custom one if there is one
31
+ if (this.uiActionDescriptorService) {
32
+ this.manager = this.uiActionDescriptorService;
33
+ this.subscribeToLanguageChange();
34
+ }
35
+ if (!this.disabled) {
36
+ this.disabled = !!this.uiActionModel.uiAction.disabled;
37
+ }
38
+ this.setUp();
39
+ }
40
+ ngOnChanges(changes) {
41
+ if (changes['uiActionModel']) {
42
+ let uiActionModel = changes['uiActionModel'].currentValue;
43
+ if (uiActionModel) {
44
+ this.uiActionModel = uiActionModel;
45
+ this.setUp();
46
+ }
47
+ }
48
+ }
49
+ ngOnDestroy() {
50
+ this._destroy$.next();
51
+ this._destroy$.complete();
52
+ }
53
+ subscribeToLanguageChange() {
54
+ this.languageChangedSubscription?.unsubscribe();
55
+ this.languageChangedSubscription = this.manager.languageChanged
56
+ .pipe(takeUntil(this._destroy$))
57
+ .subscribe(() => {
58
+ this.setUp();
59
+ });
60
+ }
61
+ async setUp() {
62
+ if (this.uiActionModel) {
63
+ let uiActionModelsWithDescriptions = [];
64
+ let _uiActionModel = this.uiActionModel;
65
+ _uiActionModel.descriptor = await this.manager.getActionDescriptor(_uiActionModel.uiAction);
66
+ uiActionModelsWithDescriptions.push(_uiActionModel);
67
+ this.uiActionModelsWithDescriptions = uiActionModelsWithDescriptions;
68
+ this.changeDetector.markForCheck();
69
+ }
70
+ }
71
+ async onActionClicked(event, uiActionModel) {
72
+ event.stopPropagation();
73
+ this.actionClick.emit(uiActionModel);
74
+ }
75
+ onActionDoubleClicked(event, uiActionModel) {
76
+ event.stopPropagation();
77
+ this.actionDoubleClick.emit(uiActionModel);
78
+ }
79
+ getbtnClass(uiActionModel) {
80
+ if (uiActionModel.descriptor?.color) {
81
+ return 'p-button-' + uiActionModel.descriptor?.color;
82
+ }
83
+ return '';
84
+ }
85
+ getType(uiActionModel) {
86
+ if (!uiActionModel.descriptor?.type) {
87
+ }
88
+ if (this.compLib === ComponentLibrary.PRIMENG) {
89
+ // return '';
90
+ // 'p-button-text': true,
91
+ /* 'p-button-raised': true,
92
+ 'p-button-rounded': true,
93
+ 'p-button-outlined': true,
94
+ */
95
+ switch (uiActionModel.descriptor?.type) {
96
+ case UiActionButtonType.NORMAL:
97
+ return {
98
+ 'p-button-text': true,
99
+ 'p-button-rounded': true,
100
+ };
101
+ case UiActionButtonType.FLAT:
102
+ return { 'p-button-raised': true, 'p-button-rounded': true };
103
+ case UiActionButtonType.RAISED:
104
+ return { 'p-button-raised': true, 'p-button-rounded': true };
105
+ case UiActionButtonType.STROKED:
106
+ return { 'p-button-outlined': true, 'p-button-rounded': true };
107
+ case UiActionButtonType.MINI_FAB:
108
+ return { 'p-button-rounded': true, 'p-button-text': true, 'p-button-raised': true };
109
+ default:
110
+ return {
111
+ 'p-button-text': true,
112
+ 'p-button-raised': true,
113
+ 'p-button-rounded': true,
114
+ 'p-button-outlined': true,
115
+ };
116
+ }
117
+ }
118
+ else {
119
+ switch (uiActionModel.descriptor?.type) {
120
+ case UiActionButtonType.NORMAL:
121
+ return 'mat-mdc-button';
122
+ case UiActionButtonType.FLAT:
123
+ return 'mat-mdc-flat-button';
124
+ case UiActionButtonType.RAISED:
125
+ return 'mat-mdc-raised-button';
126
+ case UiActionButtonType.STROKED:
127
+ return 'mat-mdc-stroked-button';
128
+ case UiActionButtonType.ICON:
129
+ return 'mat-mdc-icon-button';
130
+ case UiActionButtonType.MINI_FAB:
131
+ return 'mat-mdc-mini-fab';
132
+ case UiActionButtonType.FAB:
133
+ return 'mat-mdc-fab';
134
+ default:
135
+ console.log(`Unhandled action button type case: ${uiActionModel.descriptor?.type}`);
136
+ return `mat-button`;
137
+ }
138
+ }
139
+ }
140
+ iconPosition() {
141
+ return IconPosition;
142
+ }
143
+ isOnlyIcon(uiActionModel) {
144
+ return (uiActionModel.descriptor?.type === UiActionButtonType.ICON ||
145
+ uiActionModel.descriptor?.type === UiActionButtonType.MINI_FAB ||
146
+ uiActionModel.descriptor?.type === UiActionButtonType.FAB);
147
+ }
148
+ getTooltipPos(pos) {
149
+ if (pos) {
150
+ return pos.toLowerCase();
151
+ }
152
+ else {
153
+ return 'before';
154
+ }
155
+ }
156
+ getTooltipDelay(delay) {
157
+ return delay ? delay : 1000;
158
+ }
159
+ getTooltipHideDelay(delay) {
160
+ return delay ? delay : 2000;
161
+ }
162
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionButtonComponent, deps: [{ token: i1.UiActionService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionButtonComponent, selector: "ui-action-button", inputs: { uiActionModel: "uiActionModel", uiActionDescriptorService: "uiActionDescriptorService", disabled: "disabled" }, outputs: { actionClick: "actionClick", actionDoubleClick: "actionDoubleClick" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"uiActionButtonsContainer\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"uiActionModel!.descriptor?.tooltip!\"\r\n [ngClass]=\"getType(uiActionModel)\"\r\n class=\"{{ uiActionModel.cssClass }} {{ getbtnClass(uiActionModel) }}\"\r\n (click)=\"onActionClicked($event, uiActionModel)\"\r\n [disabled]=\"disabled\"\r\n (dblclick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n [autofocus]=\"false\"\r\n type=\"button\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(uiActionModel); then iconOnly; else text\"></div>\r\n <ng-template #iconOnly>\r\n <smart-icon\r\n *ngIf=\"uiActionModel.descriptor?.icon\"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n <ng-template #text>\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().PRE\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n {{ uiActionModel.descriptor?.title }}\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().POST\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"uiActionModel!.descriptor?.tooltip!\"\r\n [ngClass]=\"getType(uiActionModel)\"\r\n class=\"{{ uiActionModel.cssClass }}\"\r\n [color]=\"uiActionModel.descriptor?.color\"\r\n (click)=\"onActionClicked($event, uiActionModel)\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n (dblclick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n type=\"button\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(uiActionModel); then iconOnly; else text\"></div>\r\n <ng-template #iconOnly>\r\n <smart-icon\r\n *ngIf=\"uiActionModel.descriptor?.icon\"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n <ng-template #text>\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().PRE\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n {{ uiActionModel.descriptor?.title }}\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().POST\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n </button>\r\n }\r\n</div>\r\n", styles: [":host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "directive", type: i6.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }] }); }
164
+ }
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionButtonComponent, decorators: [{
166
+ type: Component,
167
+ args: [{ selector: 'ui-action-button', template: "<div class=\"uiActionButtonsContainer\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"uiActionModel!.descriptor?.tooltip!\"\r\n [ngClass]=\"getType(uiActionModel)\"\r\n class=\"{{ uiActionModel.cssClass }} {{ getbtnClass(uiActionModel) }}\"\r\n (click)=\"onActionClicked($event, uiActionModel)\"\r\n [disabled]=\"disabled\"\r\n (dblclick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n [autofocus]=\"false\"\r\n type=\"button\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(uiActionModel); then iconOnly; else text\"></div>\r\n <ng-template #iconOnly>\r\n <smart-icon\r\n *ngIf=\"uiActionModel.descriptor?.icon\"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n <ng-template #text>\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().PRE\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n {{ uiActionModel.descriptor?.title }}\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().POST\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"uiActionModel!.descriptor?.tooltip!\"\r\n [ngClass]=\"getType(uiActionModel)\"\r\n class=\"{{ uiActionModel.cssClass }}\"\r\n [color]=\"uiActionModel.descriptor?.color\"\r\n (click)=\"onActionClicked($event, uiActionModel)\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n (dblclick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n type=\"button\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(uiActionModel); then iconOnly; else text\"></div>\r\n <ng-template #iconOnly>\r\n <smart-icon\r\n *ngIf=\"uiActionModel.descriptor?.icon\"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n <ng-template #text>\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().PRE\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n {{ uiActionModel.descriptor?.title }}\r\n <smart-icon\r\n *ngIf=\"\r\n uiActionModel.descriptor?.icon &&\r\n uiActionModel.descriptor?.iconPosition === iconPosition().POST\r\n \"\r\n [icon]=\"uiActionModel.descriptor!.icon!\"\r\n [color]=\"uiActionModel.descriptor?.iconColor ?? uiActionModel.descriptor?.color\"\r\n ></smart-icon>\r\n </ng-template>\r\n </button>\r\n }\r\n</div>\r\n", styles: [":host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}\n"] }]
168
+ }], ctorParameters: () => [{ type: i1.UiActionService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i7.ComponentLibrary, decorators: [{
169
+ type: Inject,
170
+ args: [COMPONENT_LIBRARY]
171
+ }, {
172
+ type: Optional
173
+ }] }], propDecorators: { uiActionModel: [{
174
+ type: Input
175
+ }], uiActionDescriptorService: [{
176
+ type: Input
177
+ }], disabled: [{
178
+ type: Input
179
+ }], actionClick: [{
180
+ type: Output
181
+ }], actionDoubleClick: [{
182
+ type: Output
183
+ }] } });
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBRU4sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7O0FBUTVELE1BQU0sT0FBTyx1QkFBdUI7SUFvQmxDLFlBQ1UsT0FBd0IsRUFDeEIsTUFBZ0IsRUFDakIsY0FBaUMsRUFDRCxPQUEwQjtRQUh6RCxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQ2pCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQXRCbEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxD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QUFRO1lBQzlELGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxLQUFLLGtCQUFrQixDQUFDLEdBQUcsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBd0M7UUFDcEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE9BQU8sR0FBRyxDQUFDLFdBQVcsRUFBcUIsQ0FBQztRQUM5QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWM7UUFDNUIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFjO1FBQ2hDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDOytHQXJMVSx1QkFBdUIsMEdBd0J4QixpQkFBaUI7bUdBeEJoQix1QkFBdUIsd1JDN0JwQyxpMEdBb0ZBOzs0RkR2RGEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjs7MEJBNEJ6QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQUcsUUFBUTt5Q0FoQjdCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgfSBmcm9tICcuLi91aS1hY3Rpb24uZGVzY3JpcHRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdWktYWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL2FwaS9tb2RlbC91aUFjdGlvbkJ1dHRvblR5cGUnO1xyXG5pbXBvcnQgeyBJY29uUG9zaXRpb24gfSBmcm9tICcuLi8uLi9hcGkvbW9kZWwvaWNvblBvc2l0aW9uJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Ub29sdGlwVG9vbHRpcFBvc2l0aW9uRW51bSB9IGZyb20gJy4uLy4uL2FwaS9tb2RlbC91aUFjdGlvblRvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1hY3Rpb24tYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VpLWFjdGlvbi1idXR0b24uY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFjdGlvbkJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29tcG9uZW50TGlicmFyeSA9IENvbXBvbmVudExpYnJhcnk7IC8vIEV4cG9zZSB0aGUgZW51bSB0byB0aGUgdGVtcGxhdGVcclxuICBjb21wTGliOiBDb21wb25lbnRMaWJyYXJ5O1xyXG5cclxuICBwcmVzc2VkQnV0dG9uQWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgdWlBY3Rpb25Nb2RlbCE6IFVpQWN0aW9uTW9kZWw7XHJcbiAgQElucHV0KCkgdWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZT86IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFVpQWN0aW9uTW9kZWw+KCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbk1vZGVsPigpO1xyXG5cclxuICB1aUFjdGlvbk1vZGVsc1dpdGhEZXNjcmlwdGlvbnM/OiBVaUFjdGlvbk1vZGVsW107XHJcblxyXG4gIHByaXZhdGUgbWFuYWdlciE6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgcHJpdmF0ZSBsYW5ndWFnZUNoYW5nZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBVaUFjdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluamVjdDogSW5qZWN0b3IsXHJcbiAgICBwdWJsaWMgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgQE9wdGlvbmFsKCkgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG4gICAgdGhpcy5tYW5hZ2VyID0gaW5qZWN0LmdldChVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvTGFuZ3VhZ2VDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gT3ZlcnJpZGVzIHRoZSBiYXNpYyBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlIHdpdGggYSBjdXN0b20gb25lIGlmIHRoZXJlIGlzIG9uZVxyXG4gICAgaWYgKHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSkge1xyXG4gICAgICB0aGlzLm1hbmFnZXIgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9MYW5ndWFnZUNoYW5nZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVkID0gISF0aGlzLnVpQWN0aW9uTW9kZWwudWlBY3Rpb24uZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFVwKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sndWlBY3Rpb25Nb2RlbCddKSB7XHJcbiAgICAgIGxldCB1aUFjdGlvbk1vZGVsID0gY2hhbmdlc1sndWlBY3Rpb25Nb2RlbCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgaWYgKHVpQWN0aW9uTW9kZWwpIHtcclxuICAgICAgICB0aGlzLnVpQWN0aW9uTW9kZWwgPSB1aUFjdGlvbk1vZGVsO1xyXG4gICAgICAgIHRoaXMuc2V0VXAoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0xhbmd1YWdlQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYW5ndWFnZUNoYW5nZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5sYW5ndWFnZUNoYW5nZWRTdWJzY3JpcHRpb24gPSB0aGlzLm1hbmFnZXIubGFuZ3VhZ2VDaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0VXAoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRVcCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLnVpQWN0aW9uTW9kZWwpIHtcclxuICAgICAgbGV0IHVpQWN0aW9uTW9kZWxzV2l0aERlc2NyaXB0aW9ucyA9IFtdO1xyXG5cclxuICAgICAgbGV0IF91aUFjdGlvbk1vZGVsID0gdGhpcy51aUFjdGlvbk1vZGVsO1xyXG5cclxuICAgICAgX3VpQWN0aW9uTW9kZWwuZGVzY3JpcHRvciA9IGF3YWl0IHRoaXMubWFuYWdlci5nZXRBY3Rpb25EZXNjcmlwdG9yKF91aUFjdGlvbk1vZGVsLnVpQWN0aW9uKTtcclxuICAgICAgdWlBY3Rpb25Nb2RlbHNXaXRoRGVzY3JpcHRpb25zLnB1c2goX3VpQWN0aW9uTW9kZWwpO1xyXG4gICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzV2l0aERlc2NyaXB0aW9ucyA9IHVpQWN0aW9uTW9kZWxzV2l0aERlc2NyaXB0aW9ucztcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQWN0aW9uQ2xpY2tlZChldmVudDogYW55LCB1aUFjdGlvbk1vZGVsOiBVaUFjdGlvbk1vZGVsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh1aUFjdGlvbk1vZGVsKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uRG91YmxlQ2xpY2tlZChldmVudDogYW55LCB1aUFjdGlvbk1vZGVsOiBVaUFjdGlvbk1vZGVsKTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuYWN0aW9uRG91YmxlQ2xpY2suZW1pdCh1aUFjdGlvbk1vZGVsKTtcclxuICB9XHJcblxyXG4gIGdldGJ0bkNsYXNzKHVpQWN0aW9uTW9kZWw6IFVpQWN0aW9uTW9kZWwpOiBzdHJpbmcge1xyXG4gICAgaWYgKHVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uY29sb3IpIHtcclxuICAgICAgcmV0dXJuICdwLWJ1dHRvbi0nICsgdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5jb2xvcjtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgZ2V0VHlwZSh1aUFjdGlvbk1vZGVsOiBVaUFjdGlvbk1vZGVsKTogYW55IHtcclxuICAgIGlmICghdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy50eXBlKSB7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgICAgLy8gcmV0dXJuICcnO1xyXG5cclxuICAgICAgLy8gJ3AtYnV0dG9uLXRleHQnOiB0cnVlLFxyXG4gICAgICAvKiAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAncC1idXR0b24tb3V0bGluZWQnOiB0cnVlLFxyXG4gICovXHJcbiAgICAgIHN3aXRjaCAodWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXRleHQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQ6XHJcbiAgICAgICAgICByZXR1cm4geyAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSwgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuUkFJU0VEOlxyXG4gICAgICAgICAgcmV0dXJuIHsgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlNUUk9LRUQ6XHJcbiAgICAgICAgICByZXR1cm4geyAncC1idXR0b24tb3V0bGluZWQnOiB0cnVlLCAncC1idXR0b24tcm91bmRlZCc6IHRydWUgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5NSU5JX0ZBQjpcclxuICAgICAgICAgIHJldHVybiB7ICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSwgJ3AtYnV0dG9uLXRleHQnOiB0cnVlLCAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSB9O1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1vdXRsaW5lZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzd2l0Y2ggKHVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8udHlwZSkge1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1idXR0b24nO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQ6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtZmxhdC1idXR0b24nO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlJBSVNFRDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1yYWlzZWQtYnV0dG9uJztcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5TVFJPS0VEOlxyXG4gICAgICAgICAgcmV0dXJuICdtYXQtbWRjLXN0cm9rZWQtYnV0dG9uJztcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OOlxyXG4gICAgICAgICAgcmV0dXJuICdtYXQtbWRjLWljb24tYnV0dG9uJztcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5NSU5JX0ZBQjpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1taW5pLWZhYic7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuRkFCOlxyXG4gICAgICAgICAgcmV0dXJuICdtYXQtbWRjLWZhYic7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmhhbmRsZWQgYWN0aW9uIGJ1dHRvbiB0eXBlIGNhc2U6ICR7dWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy50eXBlfWApO1xyXG4gICAgICAgICAgcmV0dXJuIGBtYXQtYnV0dG9uYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWNvblBvc2l0aW9uKCk6IHR5cGVvZiBJY29uUG9zaXRpb24ge1xyXG4gICAgcmV0dXJuIEljb25Qb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIGlzT25seUljb24odWlBY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy50eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTiB8fFxyXG4gICAgICB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/LnR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5NSU5JX0ZBQiB8fFxyXG4gICAgICB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/LnR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5GQUJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUb29sdGlwUG9zKHBvcz86IFVpQWN0aW9uVG9vbHRpcFRvb2x0aXBQb3NpdGlvbkVudW0pOiBUb29sdGlwUG9zaXRpb24ge1xyXG4gICAgaWYgKHBvcykge1xyXG4gICAgICByZXR1cm4gcG9zLnRvTG93ZXJDYXNlKCkgYXMgVG9vbHRpcFBvc2l0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdiZWZvcmUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG9vbHRpcERlbGF5KGRlbGF5PzogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBkZWxheSA/IGRlbGF5IDogMTAwMDtcclxuICB9XHJcblxyXG4gIGdldFRvb2x0aXBIaWRlRGVsYXkoZGVsYXk/OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGRlbGF5ID8gZGVsYXkgOiAyMDAwO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidWlBY3Rpb25CdXR0b25zQ29udGFpbmVyXCI+XHJcbiAgQGlmKGNvbXBMaWIgPT09IGNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gIDxidXR0b25cclxuICAgIHBCdXR0b25cclxuICAgIHBSaXBwbGVcclxuICAgIFtzbWFydFRvb2x0aXBdPVwidWlBY3Rpb25Nb2RlbCEuZGVzY3JpcHRvcj8udG9vbHRpcCFcIlxyXG4gICAgW25nQ2xhc3NdPVwiZ2V0VHlwZSh1aUFjdGlvbk1vZGVsKVwiXHJcbiAgICBjbGFzcz1cInt7IHVpQWN0aW9uTW9kZWwuY3NzQ2xhc3MgfX0ge3sgZ2V0YnRuQ2xhc3ModWlBY3Rpb25Nb2RlbCkgfX1cIlxyXG4gICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIHVpQWN0aW9uTW9kZWwpXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAoZGJsY2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudCwgdWlBY3Rpb25Nb2RlbClcIlxyXG4gICAgW2F1dG9mb2N1c109XCJmYWxzZVwiXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICA+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNPbmx5SWNvbih1aUFjdGlvbk1vZGVsKTsgdGhlbiBpY29uT25seTsgZWxzZSB0ZXh0XCI+PC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI2ljb25Pbmx5PlxyXG4gICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICpuZ0lmPVwidWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5pY29uXCJcclxuICAgICAgICBbaWNvbl09XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3IhLmljb24hXCJcclxuICAgICAgICBbY29sb3JdPVwidWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5pY29uQ29sb3IgPz8gdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5jb2xvclwiXHJcbiAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICN0ZXh0PlxyXG4gICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/Lmljb24gJiZcclxuICAgICAgICAgIHVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBpY29uUG9zaXRpb24oKS5QUkVcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtpY29uXT1cInVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvciEuaWNvbiFcIlxyXG4gICAgICAgIFtjb2xvcl09XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/Lmljb25Db2xvciA/PyB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/LmNvbG9yXCJcclxuICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAge3sgdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy50aXRsZSB9fVxyXG4gICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/Lmljb24gJiZcclxuICAgICAgICAgIHVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBpY29uUG9zaXRpb24oKS5QT1NUXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbaWNvbl09XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3IhLmljb24hXCJcclxuICAgICAgICBbY29sb3JdPVwidWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5pY29uQ29sb3IgPz8gdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5jb2xvclwiXHJcbiAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvYnV0dG9uPlxyXG4gIH0gQGVsc2Uge1xyXG4gIDxidXR0b25cclxuICAgIG1hdC1idXR0b25cclxuICAgIFtzbWFydFRvb2x0aXBdPVwidWlBY3Rpb25Nb2RlbCEuZGVzY3JpcHRvcj8udG9vbHRpcCFcIlxyXG4gICAgW25nQ2xhc3NdPVwiZ2V0VHlwZSh1aUFjdGlvbk1vZGVsKVwiXHJcbiAgICBjbGFzcz1cInt7IHVpQWN0aW9uTW9kZWwuY3NzQ2xhc3MgfX1cIlxyXG4gICAgW2NvbG9yXT1cInVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uY29sb3JcIlxyXG4gICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIHVpQWN0aW9uTW9kZWwpXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXVpQWN0aW9uTW9kZWwudWlBY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgKGRibGNsaWNrKT1cIm9uQWN0aW9uRG91YmxlQ2xpY2tlZCgkZXZlbnQsIHVpQWN0aW9uTW9kZWwpXCJcclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gID5cclxuICAgIDxkaXYgKm5nSWY9XCJpc09ubHlJY29uKHVpQWN0aW9uTW9kZWwpOyB0aGVuIGljb25Pbmx5OyBlbHNlIHRleHRcIj48L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWNvbk9ubHk+XHJcbiAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgKm5nSWY9XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/Lmljb25cIlxyXG4gICAgICAgIFtpY29uXT1cInVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvciEuaWNvbiFcIlxyXG4gICAgICAgIFtjb2xvcl09XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/Lmljb25Db2xvciA/PyB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/LmNvbG9yXCJcclxuICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI3RleHQ+XHJcbiAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uaWNvbiAmJlxyXG4gICAgICAgICAgdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IGljb25Qb3NpdGlvbigpLlBSRVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2ljb25dPVwidWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yIS5pY29uIVwiXHJcbiAgICAgICAgW2NvbG9yXT1cInVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uaWNvbkNvbG9yID8/IHVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uY29sb3JcIlxyXG4gICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICB7eyB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/LnRpdGxlIH19XHJcbiAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvcj8uaWNvbiAmJlxyXG4gICAgICAgICAgdWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IGljb25Qb3NpdGlvbigpLlBPU1RcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtpY29uXT1cInVpQWN0aW9uTW9kZWwuZGVzY3JpcHRvciEuaWNvbiFcIlxyXG4gICAgICAgIFtjb2xvcl09XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/Lmljb25Db2xvciA/PyB1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/LmNvbG9yXCJcclxuICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
@@ -135,7 +135,6 @@ export class UiActionService {
135
135
  await this.fileUploadDialogService.onAction.toPromise();
136
136
  let files = this.fileUploadDialogService.files;
137
137
  if (!files || !files.length) {
138
- console.error('There was no response from InputDialog');
139
138
  return;
140
139
  }
141
140
  uiActionRequest.params = {
@@ -208,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
208
207
  type: Inject,
209
208
  args: ['fileUploadDialogService']
210
209
  }] }, { type: i1.MatSnackBar }] });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFZLG9CQUFvQixFQUFFLGlCQUFpQixFQUFtQixNQUFNLFFBQVEsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQU10RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7OztBQWlCaEgsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDMEMsb0JBQWtELEVBQ2hELHNCQUFrRCxFQUVwRix1QkFBd0QsRUFDeEQsU0FBc0I7UUFKVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQThCO1FBQ2hELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBNEI7UUFFcEYsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFpQztRQUN4RCxjQUFTLEdBQVQsU0FBUyxDQUFhO1FBUHhCLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVE5QyxDQUFDO0lBRUosV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFrQixFQUFFLE9BQWdDO1FBQ2hFLElBQUksZUFBNEMsQ0FBQztRQUVqRCxl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LGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBTUksTUFBTTsyQkFBQyxzQkFBc0I7OzBCQUM3QixNQUFNOzJCQUFDLHdCQUF3Qjs7MEJBQy9CLE1BQU07MkJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbiwgVWlBY3Rpb25GZWVkYmFja1R5cGUsIFVpQWN0aW9uSW5wdXRUeXBlLCBVaUFjdGlvblJlcXVlc3QgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBTdWNjZXNzU25hY2tCYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc3VjY2Vzcy1zbmFjay1iYXIvc3VjY2Vzcy1zbmFjay1iYXIuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB0eXBlIHsgVWlBY3Rpb25Db25maXJtRGlhbG9nU2VydmljZSB9IGZyb20gJy4vZGlhbG9ncy91aS1hY3Rpb24tY29uZmlybS1kaWFsb2cvdWktYWN0aW9uLWNvbmZpcm0tZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgdHlwZSB7IFVpQWN0aW9uSW5wdXREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9kaWFsb2dzL3VpLWFjdGlvbi1pbnB1dC1kaWFsb2cvdWktYWN0aW9uLWlucHV0LWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Nb2RlbCB9IGZyb20gJy4vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHR5cGUgeyBVaUFjdGlvbkZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9kaWFsb2dzL3VpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cvdWktYWN0aW9uLWZpbGUtdXBsb2FkLWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnLi4vLi4vc21hcnQtc3ViamVjdC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEludmFsaWRGaWVsZHNTbmFja0JhckNvbXBvbmVudCB9IGZyb20gJy4uL2ludmFsaWQtZmllbGRzLXNuYWNrLWJhci9pbnZhbGlkLWZpZWxkcy1zbmFjay1iYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU21hcnRGb3JtSW52YWxpZEZpZWxkcyB9IGZyb20gJy4uLy4uL3NtYXJ0LWZvcm0vc21hcnRmb3JtLm1vZGVsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZVVpQWN0aW9uT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogSW4gY2FzZSBvZiB1c2luZyBhIGdyaWQ6IGdyaWQuaWRlbnRpZmllclxyXG4gICAqL1xyXG4gIHdpZGdldElkPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEluIGNhc2Ugb2YgdXNpbmcgYSBncmlkOiBncmlkUm93LmlkXHJcbiAgICovXHJcbiAgbm9kZUlkPzogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlBY3Rpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICB1aUFjdGlvbk1vZGVsITogVWlBY3Rpb25Nb2RlbDtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnY29uZmlybURpYWxvZ1NlcnZpY2UnKSBwcml2YXRlIGNvbmZpcm1EaWFsb2dTZXJ2aWNlOiBVaUFjdGlvbkNvbmZpcm1EaWFsb2dTZXJ2aWNlLFxyXG4gICAgQEluamVjdCgndGV4dEZpZWxkRGlhbG9nU2VydmljZScpIHByaXZhdGUgdGV4dEZpZWxkRGlhbG9nU2VydmljZTogVWlBY3Rpb25JbnB1dERpYWxvZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdmaWxlVXBsb2FkRGlhbG9nU2VydmljZScpXHJcbiAgICBwcml2YXRlIGZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlOiBVaUFjdGlvbkZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc25hY2tCYXI6IE1hdFNuYWNrQmFyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBleGVjdXRlKHVpQWN0aW9uOiBVaUFjdGlvbiwgb3B0aW9ucz86IEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICB1aUFjdGlvblJlcXVlc3QgPSB7XHJcbiAgICAgIGNvZGU6IHVpQWN0aW9uLmNvZGUhLFxyXG4gICAgICBpZGVudGlmaWVyOiB1aUFjdGlvbi5pZGVudGlmaWVyLFxyXG4gICAgICBwYXJhbXM6IHVpQWN0aW9uLnBhcmFtcyA/PyB7fSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHVpQWN0aW9uLnN1Ym1pdCB8fCB1aUFjdGlvbi5tb2RlbCkge1xyXG4gICAgICAvLyBzdWJtaXQ6IHdpdGggdmFsaWRhdGlvbiwgbW9kZWw6IHdpdGhvdXQgdmFsaWRhdGlvbi4gYm90aCBjYW4gYmUgdW5kZWZpbmVkXHJcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gdWlBY3Rpb24uc3VibWl0IHx8ICF1aUFjdGlvbi5tb2RlbDtcclxuXHJcbiAgICAgIGlmICgncmVTdWJzY3JpYmVUb0NoYW5nZScgaW4gdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZSkge1xyXG4gICAgICAgIGlmICghdmFsaWRhdGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFZhbGlkYXRlID0gZmFsc2UsIGJ1dCBVc2VVaUFjdGlvbiBkb2Vzbid0IHN1cHBvcnQgaXRgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5zdWJtaXQubmV4dCgpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLnN1Ym1pdC50b1Byb21pc2UoKTtcclxuICAgICAgICAgIHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2Uuc3VibWl0ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgICAgICAgICB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLnJlU3Vic2NyaWJlVG9DaGFuZ2UubmV4dCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5zdWJtaXQgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgICAgIHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2UucmVTdWJzY3JpYmVUb0NoYW5nZS5uZXh0KCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2Uuc3VibWl0Rm9ybSh2YWxpZGF0ZSk7XHJcbiAgICAgICAgbGV0IGludmFsaWRGaWVsZHMgPSB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLmdldEludmFsaWRGaWVsZHMoKTtcclxuICAgICAgICBpZiAodmFsaWRhdGUgJiYgaW52YWxpZEZpZWxkcy5pbnZhbGlkRmllbGRLZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93SW52YWxpZEZpZWxkc1NuYWNrYmFyKGludmFsaWRGaWVsZHMpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1aUFjdGlvbi5jb25maXJtKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2UuYWN0aW9uID0gdWlBY3Rpb247XHJcbiAgICAgIHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2Uub3BlbkRpYWxvZygpO1xyXG4gICAgICBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2dTZXJ2aWNlLm9uQWN0aW9uLnRvUHJvbWlzZSgpO1xyXG4gICAgICBpZiAoIXRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2Uuc2hvdWxkRG9BY3Rpb24pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbnB1dFR5cGVcclxuICAgIGlmICh1aUFjdGlvbi5pbnB1dFR5cGUgJiYgdWlBY3Rpb24uaW5wdXRUeXBlICE9PSBVaUFjdGlvbklucHV0VHlwZS5OT05FKSB7XHJcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCA9IGF3YWl0IHRoaXMuaGFuZGxlSW5wdXRUeXBlKFxyXG4gICAgICAgIHVpQWN0aW9uLmlucHV0VHlwZSxcclxuICAgICAgICB1aUFjdGlvbixcclxuICAgICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgJ2lucHV0RGlhbG9nJ1xyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXVpQWN0aW9uUmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyNTApKTtcclxuICAgIH1cclxuICAgIC8vIElucHV0MlR5cGVcclxuICAgIGlmICh1aUFjdGlvbi5pbnB1dDJUeXBlICYmIHVpQWN0aW9uLmlucHV0MlR5cGUgIT09IFVpQWN0aW9uSW5wdXRUeXBlLk5PTkUpIHtcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0ID0gYXdhaXQgdGhpcy5oYW5kbGVJbnB1dFR5cGUoXHJcbiAgICAgICAgdWlBY3Rpb24uaW5wdXQyVHlwZSxcclxuICAgICAgICB1aUFjdGlvbixcclxuICAgICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgJ2lucHV0MkRpYWxvZydcclxuICAgICAgKTtcclxuICAgICAgaWYgKCF1aUFjdGlvblJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51aUFjdGlvbk1vZGVsLmV4Y2VwdGlvbikge1xyXG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLmhhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5KFxyXG4gICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICAgIHVpQWN0aW9uUmVxdWVzdFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCFyZXNwb25zZS5zaG91bGRQZXJmb3JtQWN0aW9uIHx8ICFyZXNwb25zZS51aUFjdGlvblJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0ID0gcmVzcG9uc2UudWlBY3Rpb25SZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHRoaXMucGVyZm9ybUFjdGlvbih1aUFjdGlvbiwgdWlBY3Rpb25SZXF1ZXN0LCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlSW5wdXRUeXBlKFxyXG4gICAgaW5wdXRUeXBlOiBVaUFjdGlvbklucHV0VHlwZSxcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgaW5wdXRUeXBlTmFtZTogJ2lucHV0RGlhbG9nJyB8ICdpbnB1dDJEaWFsb2cnXHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblJlcXVlc3QgfCB1bmRlZmluZWQ+IHtcclxuICAgIHN3aXRjaCAoaW5wdXRUeXBlKSB7XHJcbiAgICAgIGNhc2UgVWlBY3Rpb25JbnB1dFR5cGUuTk9ORTpcclxuICAgICAgICByZXR1cm4gdWlBY3Rpb25SZXF1ZXN0O1xyXG4gICAgICBjYXNlIFVpQWN0aW9uSW5wdXRUeXBlLlRFWFRBUkVBOlxyXG4gICAgICBjYXNlIFVpQWN0aW9uSW5wdXRUeXBlLlRFWFRGSUVMRDpcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVJbnB1dFR5cGVUZXh0RmllbGQoaW5wdXRUeXBlTmFtZSwgdWlBY3Rpb24sIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICAgIGNhc2UgVWlBY3Rpb25JbnB1dFR5cGUuVVNFUl9TRUxFQ1Q6XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlSW5wdXRUeXBlVXNlclNlbGVjdChpbnB1dFR5cGVOYW1lLCB1aUFjdGlvbiwgdWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgICAgY2FzZSBVaUFjdGlvbklucHV0VHlwZS5GSUxFOlxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZUlucHV0VHlwZVVwbG9hZChpbnB1dFR5cGVOYW1lLCB1aUFjdGlvbiwgdWlBY3Rpb25SZXF1ZXN0LCBmYWxzZSk7XHJcbiAgICAgIGNhc2UgVWlBY3Rpb25JbnB1dFR5cGUuTVVMVElQTEVfRklMRVM6XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlSW5wdXRUeXBlVXBsb2FkKGlucHV0VHlwZU5hbWUsIHVpQWN0aW9uLCB1aUFjdGlvblJlcXVlc3QsIHRydWUpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB1aUFjdGlvblJlcXVlc3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUlucHV0VHlwZVRleHRGaWVsZChcclxuICAgIGlucHV0VHlwZU5hbWU6ICdpbnB1dERpYWxvZycgfCAnaW5wdXQyRGlhbG9nJyxcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblJlcXVlc3QgfCB1bmRlZmluZWQ+IHtcclxuICAgIGxldCBhZGRpdGlvbmFsUGFyYW1zID0gdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5nZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uKTtcclxuICAgIGxldCBpbnB1dFR5cGU6ICdpbnB1dFR5cGUnIHwgJ2lucHV0MlR5cGUnID1cclxuICAgICAgaW5wdXRUeXBlTmFtZSA9PT0gJ2lucHV0RGlhbG9nJyA/ICdpbnB1dFR5cGUnIDogJ2lucHV0MlR5cGUnO1xyXG5cclxuICAgIGlmICh1aUFjdGlvbltpbnB1dFR5cGVdID09PSBVaUFjdGlvbklucHV0VHlwZS5URVhURklFTEQpIHtcclxuICAgICAgdGhpcy50ZXh0RmllbGREaWFsb2dTZXJ2aWNlLm5vZGVOYW1lID0gYWRkaXRpb25hbFBhcmFtcy5mb3JUZXh0RmllbGQ7XHJcbiAgICB9IGVsc2UgaWYgKHVpQWN0aW9uW2lucHV0VHlwZV0gPT09IFVpQWN0aW9uSW5wdXRUeXBlLlRFWFRBUkVBKSB7XHJcbiAgICAgIHRoaXMudGV4dEZpZWxkRGlhbG9nU2VydmljZS5ub2RlTmFtZSA9IGFkZGl0aW9uYWxQYXJhbXMuZm9yVGV4dEFyZWE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50ZXh0RmllbGREaWFsb2dTZXJ2aWNlLmlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lO1xyXG4gICAgdGhpcy50ZXh0RmllbGREaWFsb2dTZXJ2aWNlLmFjdGlvbiA9IHVpQWN0aW9uO1xyXG5cclxuICAgIHRoaXMudGV4dEZpZWxkRGlhbG9nU2VydmljZS5vcGVuRGlhbG9nKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy50ZXh0RmllbGREaWFsb2dTZXJ2aWNlLm9uQWN0aW9uLnRvUHJvbWlzZSgpO1xyXG4gICAgbGV0IHBhcmFtcyA9IHRoaXMudGV4dEZpZWxkRGlhbG9nU2VydmljZS5wYXJhbXM7XHJcblxyXG4gICAgaWYgKCFwYXJhbXMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlcmUgd2FzIG5vIHJlc3BvbnNlIGZyb20gSW5wdXREaWFsb2cnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtcyA9IHtcclxuICAgICAgLi4udWlBY3Rpb25SZXF1ZXN0LnBhcmFtcyxcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB1aUFjdGlvblJlcXVlc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUlucHV0VHlwZVVwbG9hZChcclxuICAgIGlucHV0VHlwZU5hbWU6ICdpbnB1dERpYWxvZycgfCAnaW5wdXQyRGlhbG9nJyxcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgaXNNdWx0aXBsZTogYm9vbGVhblxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25SZXF1ZXN0IHwgdW5kZWZpbmVkPiB7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlLmlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lO1xyXG4gICAgdGhpcy5maWxlVXBsb2FkRGlhbG9nU2VydmljZS5hY3Rpb24gPSB1aUFjdGlvbjtcclxuICAgIHRoaXMuZmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UuaXNNdWx0aXBsZSA9IGlzTXVsdGlwbGU7XHJcblxyXG4gICAgdGhpcy5maWxlVXBsb2FkRGlhbG9nU2VydmljZS5vcGVuRGlhbG9nKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5maWxlVXBsb2FkRGlhbG9nU2VydmljZS5vbkFjdGlvbi50b1Byb21pc2UoKTtcclxuICAgIGxldCBmaWxlcyA9IHRoaXMuZmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UuZmlsZXM7XHJcblxyXG4gICAgaWYgKCFmaWxlcyB8fCAhZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZXJlIHdhcyBubyByZXNwb25zZSBmcm9tIElucHV0RGlhbG9nJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHVpQWN0aW9uUmVxdWVzdC5wYXJhbXMgPSB7XHJcbiAgICAgIC4uLnVpQWN0aW9uUmVxdWVzdC5wYXJhbXMsXHJcbiAgICAgIF9maWxlczogZmlsZXMsXHJcbiAgICAgIGlzTXVsdGlwbGUsXHJcbiAgICAgIHBhcmFtOlxyXG4gICAgICAgIHVpQWN0aW9uLmlucHV0VHlwZSA9PT0gJ2ZpbGUnIHx8IHVpQWN0aW9uLmlucHV0VHlwZSA9PT0gJ211bHRpcGxlX2ZpbGVzJ1xyXG4gICAgICAgICAgPyAnaW5wdXQnXHJcbiAgICAgICAgICA6ICdpbnB1dDInLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB1aUFjdGlvblJlcXVlc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUlucHV0VHlwZVVzZXJTZWxlY3QoXHJcbiAgICBpbnB1dFR5cGVOYW1lOiAnaW5wdXREaWFsb2cnIHwgJ2lucHV0MkRpYWxvZycsXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25SZXF1ZXN0IHwgdW5kZWZpbmVkPiB7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLmhhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5KFxyXG4gICAgICB1aUFjdGlvbixcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0XHJcbiAgICApO1xyXG5cclxuICAgIGlmICghcmVzcG9uc2Uuc2hvdWxkUGVyZm9ybUFjdGlvbiB8fCAhcmVzcG9uc2UudWlBY3Rpb25SZXF1ZXN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHVpQWN0aW9uUmVxdWVzdCA9IHJlc3BvbnNlLnVpQWN0aW9uUmVxdWVzdDtcclxuICAgIHJldHVybiB1aUFjdGlvblJlcXVlc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1BY3Rpb24oXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcclxuICAgIG9wdGlvbnM/OiBFeGVjdXRlVWlBY3Rpb25PcHRpb25zXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF1aUFjdGlvblJlcXVlc3QucGFyYW1zIHx8XHJcbiAgICAgICh1aUFjdGlvblJlcXVlc3QucGFyYW1zICYmICFPYmplY3Qua2V5cyh1aUFjdGlvblJlcXVlc3QucGFyYW1zKS5sZW5ndGgpXHJcbiAgICApIHtcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtcyA9IHtcclxuICAgICAgICBtb2RlbDogdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5nZXRNb2RlbCgpLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIGlmICh1aUFjdGlvbi5zdWJtaXQgfHwgdWlBY3Rpb24ubW9kZWwpIHtcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbW9kZWwnXSA9IHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2UuZ2V0TW9kZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLnBlcmZvcm1VaUFjdGlvblJlcXVlc3QoXHJcbiAgICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgICAgIG9wdGlvbnM/LndpZGdldElkLFxyXG4gICAgICAgIG9wdGlvbnM/Lm5vZGVJZFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHRoaXMudWlBY3Rpb25Nb2RlbC5kZXNjcmlwdG9yPy5mZWVkYmFja1R5cGUgPT09IFVpQWN0aW9uRmVlZGJhY2tUeXBlLlNOQUNLQkFSKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2F2ZWRTbmFja2Jhcih1aUFjdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93U2F2ZWRTbmFja2Jhcih1aUFjdGlvbjogVWlBY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KFN1Y2Nlc3NTbmFja0JhckNvbXBvbmVudCwge1xyXG4gICAgICBkdXJhdGlvbjogNSAqIDEwMDAsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYmFja2dyb3VuZENvbG9yLWFjY2VudCddLFxyXG4gICAgICBkYXRhOiB1aUFjdGlvbixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2hvd0ludmFsaWRGaWVsZHNTbmFja2JhcihpbnZhbGlkRmllbGRzOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChJbnZhbGlkRmllbGRzU25hY2tCYXJDb21wb25lbnQsIHtcclxuICAgICAgZHVyYXRpb246IDUgKiAxMDAwLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2JhY2tncm91bmRDb2xvci13YXJuJ10sXHJcbiAgICAgIGRhdGE6IGludmFsaWRGaWVsZHMsXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFZLG9CQUFvQixFQUFFLGlCQUFpQixFQUFtQixNQUFNLFFBQVEsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQU10RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7OztBQWlCaEgsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDMEMsb0JBQWtELEVBQ2hELHNCQUFrRCxFQUVwRix1QkFBd0QsRUFDeEQsU0FBc0I7UUFKVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQThCO1FBQ2hELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBNEI7UUFFcEYsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFpQztRQUN4RCxjQUFTLEdBQVQsU0FBUyxDQUFhO1FBUHhCLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVE5QyxDQUFDO0lBRUosV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFrQixFQUFFLE9BQWdDO1FBQ2hFLElBQUksZUFBNEMsQ0FBQztRQUVqRCxl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QUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQzdCLE1BQU07MkJBQUMsd0JBQXdCOzswQkFDL0IsTUFBTTsyQkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcblxyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uLCBVaUFjdGlvbkZlZWRiYWNrVHlwZSwgVWlBY3Rpb25JbnB1dFR5cGUsIFVpQWN0aW9uUmVxdWVzdCB9IGZyb20gJy4uL2FwaSc7XHJcbmltcG9ydCB7IFN1Y2Nlc3NTbmFja0JhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zdWNjZXNzLXNuYWNrLWJhci9zdWNjZXNzLXNuYWNrLWJhci5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBVaUFjdGlvbkNvbmZpcm1EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9kaWFsb2dzL3VpLWFjdGlvbi1jb25maXJtLWRpYWxvZy91aS1hY3Rpb24tY29uZmlybS1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB0eXBlIHsgVWlBY3Rpb25JbnB1dERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2RpYWxvZ3MvdWktYWN0aW9uLWlucHV0LWRpYWxvZy91aS1hY3Rpb24taW5wdXQtZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi91aS1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgdHlwZSB7IFVpQWN0aW9uRmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2RpYWxvZ3MvdWktYWN0aW9uLWZpbGUtdXBsb2FkLWRpYWxvZy91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICcuLi8uLi9zbWFydC1zdWJqZWN0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgSW52YWxpZEZpZWxkc1NuYWNrQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vaW52YWxpZC1maWVsZHMtc25hY2stYmFyL2ludmFsaWQtZmllbGRzLXNuYWNrLWJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1JbnZhbGlkRmllbGRzIH0gZnJvbSAnLi4vLi4vc21hcnQtZm9ybS9zbWFydGZvcm0ubW9kZWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlVWlBY3Rpb25PcHRpb25zIHtcclxuICAvKipcclxuICAgKiBJbiBjYXNlIG9mIHVzaW5nIGEgZ3JpZDogZ3JpZC5pZGVudGlmaWVyXHJcbiAgICovXHJcbiAgd2lkZ2V0SWQ/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogSW4gY2FzZSBvZiB1c2luZyBhIGdyaWQ6IGdyaWRSb3cuaWRcclxuICAgKi9cclxuICBub2RlSWQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFjdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHVpQWN0aW9uTW9kZWwhOiBVaUFjdGlvbk1vZGVsO1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdjb25maXJtRGlhbG9nU2VydmljZScpIHByaXZhdGUgY29uZmlybURpYWxvZ1NlcnZpY2U6IFVpQWN0aW9uQ29uZmlybURpYWxvZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KCd0ZXh0RmllbGREaWFsb2dTZXJ2aWNlJykgcHJpdmF0ZSB0ZXh0RmllbGREaWFsb2dTZXJ2aWNlOiBVaUFjdGlvbklucHV0RGlhbG9nU2VydmljZSxcclxuICAgIEBJbmplY3QoJ2ZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlJylcclxuICAgIHByaXZhdGUgZmlsZVVwbG9hZERpYWxvZ1NlcnZpY2U6IFVpQWN0aW9uRmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zbmFja0JhcjogTWF0U25hY2tCYXJcclxuICApIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGV4ZWN1dGUodWlBY3Rpb246IFVpQWN0aW9uLCBvcHRpb25zPzogRXhlY3V0ZVVpQWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHVpQWN0aW9uUmVxdWVzdCA9IHtcclxuICAgICAgY29kZTogdWlBY3Rpb24uY29kZSEsXHJcbiAgICAgIGlkZW50aWZpZXI6IHVpQWN0aW9uLmlkZW50aWZpZXIsXHJcbiAgICAgIHBhcmFtczogdWlBY3Rpb24ucGFyYW1zID8/IHt9LFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb24uc3VibWl0IHx8IHVpQWN0aW9uLm1vZGVsKSB7XHJcbiAgICAgIC8vIHN1Ym1pdDogd2l0aCB2YWxpZGF0aW9uLCBtb2RlbDogd2l0aG91dCB2YWxpZGF0aW9uLiBib3RoIGNhbiBiZSB1bmRlZmluZWRcclxuICAgICAgY29uc3QgdmFsaWRhdGUgPSB1aUFjdGlvbi5zdWJtaXQgfHwgIXVpQWN0aW9uLm1vZGVsO1xyXG5cclxuICAgICAgaWYgKCdyZVN1YnNjcmliZVRvQ2hhbmdlJyBpbiB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlKSB7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0ZSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVmFsaWRhdGUgPSBmYWxzZSwgYnV0IFVzZVVpQWN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBpdGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLnN1Ym1pdC5uZXh0KCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2Uuc3VibWl0LnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5zdWJtaXQgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgICAgIHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2UucmVTdWJzY3JpYmVUb0NoYW5nZS5uZXh0KCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLnN1Ym1pdCA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gICAgICAgICAgdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5yZVN1YnNjcmliZVRvQ2hhbmdlLm5leHQoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcclxuICAgICAgICBsZXQgaW52YWxpZEZpZWxkcyA9IHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2UuZ2V0SW52YWxpZEZpZWxkcygpO1xyXG4gICAgICAgIGlmICh2YWxpZGF0ZSAmJiBpbnZhbGlkRmllbGRzLmludmFsaWRGaWVsZEtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dJbnZhbGlkRmllbGRzU25hY2tiYXIoaW52YWxpZEZpZWxkcyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVpQWN0aW9uLmNvbmZpcm0pIHtcclxuICAgICAgdGhpcy5jb25maXJtRGlhbG9nU2VydmljZS5hY3Rpb24gPSB1aUFjdGlvbjtcclxuICAgICAgdGhpcy5jb25maXJtRGlhbG9nU2VydmljZS5vcGVuRGlhbG9nKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2Uub25BY3Rpb24udG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmICghdGhpcy5jb25maXJtRGlhbG9nU2VydmljZS5zaG91bGREb0FjdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIElucHV0VHlwZVxyXG4gICAgaWYgKHVpQWN0aW9uLmlucHV0VHlwZSAmJiB1aUFjdGlvbi5pbnB1dFR5cGUgIT09IFVpQWN0aW9uSW5wdXRUeXBlLk5PTkUpIHtcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0ID0gYXdhaXQgdGhpcy5oYW5kbGVJbnB1dFR5cGUoXHJcbiAgICAgICAgdWlBY3Rpb24uaW5wdXRUeXBlLFxyXG4gICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICAnaW5wdXREaWFsb2cnXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghdWlBY3Rpb25SZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDI1MCkpO1xyXG4gICAgfVxyXG4gICAgLy8gSW5wdXQyVHlwZVxyXG4gICAgaWYgKHVpQWN0aW9uLmlucHV0MlR5cGUgJiYgdWlBY3Rpb24uaW5wdXQyVHlwZSAhPT0gVWlBY3Rpb25JbnB1dFR5cGUuTk9ORSkge1xyXG4gICAgICB1aUFjdGlvblJlcXVlc3QgPSBhd2FpdCB0aGlzLmhhbmRsZUlucHV0VHlwZShcclxuICAgICAgICB1aUFjdGlvbi5pbnB1dDJUeXBlLFxyXG4gICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICAnaW5wdXQyRGlhbG9nJ1xyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXVpQWN0aW9uUmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnVpQWN0aW9uTW9kZWwuZXhjZXB0aW9uKSB7XHJcbiAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2UuaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgICAgdWlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIXJlc3BvbnNlLnNob3VsZFBlcmZvcm1BY3Rpb24gfHwgIXJlc3BvbnNlLnVpQWN0aW9uUmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QgPSByZXNwb25zZS51aUFjdGlvblJlcXVlc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtQWN0aW9uKHVpQWN0aW9uLCB1aUFjdGlvblJlcXVlc3QsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVJbnB1dFR5cGUoXHJcbiAgICBpbnB1dFR5cGU6IFVpQWN0aW9uSW5wdXRUeXBlLFxyXG4gICAgdWlBY3Rpb246IFVpQWN0aW9uLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXHJcbiAgICBpbnB1dFR5cGVOYW1lOiAnaW5wdXREaWFsb2cnIHwgJ2lucHV0MkRpYWxvZydcclxuICApOiBQcm9taXNlPFVpQWN0aW9uUmVxdWVzdCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcclxuICAgICAgY2FzZSBVaUFjdGlvbklucHV0VHlwZS5OT05FOlxyXG4gICAgICAgIHJldHVybiB1aUFjdGlvblJlcXVlc3Q7XHJcbiAgICAgIGNhc2UgVWlBY3Rpb25JbnB1dFR5cGUuVEVYVEFSRUE6XHJcbiAgICAgIGNhc2UgVWlBY3Rpb25JbnB1dFR5cGUuVEVYVEZJRUxEOlxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZUlucHV0VHlwZVRleHRGaWVsZChpbnB1dFR5cGVOYW1lLCB1aUFjdGlvbiwgdWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgICAgY2FzZSBVaUFjdGlvbklucHV0VHlwZS5VU0VSX1NFTEVDVDpcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVJbnB1dFR5cGVVc2VyU2VsZWN0KGlucHV0VHlwZU5hbWUsIHVpQWN0aW9uLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgICBjYXNlIFVpQWN0aW9uSW5wdXRUeXBlLkZJTEU6XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlSW5wdXRUeXBlVXBsb2FkKGlucHV0VHlwZU5hbWUsIHVpQWN0aW9uLCB1aUFjdGlvblJlcXVlc3QsIGZhbHNlKTtcclxuICAgICAgY2FzZSBVaUFjdGlvbklucHV0VHlwZS5NVUxUSVBMRV9GSUxFUzpcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVJbnB1dFR5cGVVcGxvYWQoaW5wdXRUeXBlTmFtZSwgdWlBY3Rpb24sIHVpQWN0aW9uUmVxdWVzdCwgdHJ1ZSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHVpQWN0aW9uUmVxdWVzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlSW5wdXRUeXBlVGV4dEZpZWxkKFxyXG4gICAgaW5wdXRUeXBlTmFtZTogJ2lucHV0RGlhbG9nJyB8ICdpbnB1dDJEaWFsb2cnLFxyXG4gICAgdWlBY3Rpb246IFVpQWN0aW9uLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPFVpQWN0aW9uUmVxdWVzdCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgbGV0IGFkZGl0aW9uYWxQYXJhbXMgPSB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLmdldEFkZGl0aW9uYWxQYXJhbXModWlBY3Rpb24pO1xyXG4gICAgbGV0IGlucHV0VHlwZTogJ2lucHV0VHlwZScgfCAnaW5wdXQyVHlwZScgPVxyXG4gICAgICBpbnB1dFR5cGVOYW1lID09PSAnaW5wdXREaWFsb2cnID8gJ2lucHV0VHlwZScgOiAnaW5wdXQyVHlwZSc7XHJcblxyXG4gICAgaWYgKHVpQWN0aW9uW2lucHV0VHlwZV0gPT09IFVpQWN0aW9uSW5wdXRUeXBlLlRFWFRGSUVMRCkge1xyXG4gICAgICB0aGlzLnRleHRGaWVsZERpYWxvZ1NlcnZpY2Uubm9kZU5hbWUgPSBhZGRpdGlvbmFsUGFyYW1zLmZvclRleHRGaWVsZDtcclxuICAgIH0gZWxzZSBpZiAodWlBY3Rpb25baW5wdXRUeXBlXSA9PT0gVWlBY3Rpb25JbnB1dFR5cGUuVEVYVEFSRUEpIHtcclxuICAgICAgdGhpcy50ZXh0RmllbGREaWFsb2dTZXJ2aWNlLm5vZGVOYW1lID0gYWRkaXRpb25hbFBhcmFtcy5mb3JUZXh0QXJlYTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRleHRGaWVsZERpYWxvZ1NlcnZpY2UuaW5wdXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWU7XHJcbiAgICB0aGlzLnRleHRGaWVsZERpYWxvZ1NlcnZpY2UuYWN0aW9uID0gdWlBY3Rpb247XHJcblxyXG4gICAgdGhpcy50ZXh0RmllbGREaWFsb2dTZXJ2aWNlLm9wZW5EaWFsb2coKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnRleHRGaWVsZERpYWxvZ1NlcnZpY2Uub25BY3Rpb24udG9Qcm9taXNlKCk7XHJcbiAgICBsZXQgcGFyYW1zID0gdGhpcy50ZXh0RmllbGREaWFsb2dTZXJ2aWNlLnBhcmFtcztcclxuXHJcbiAgICBpZiAoIXBhcmFtcykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGVyZSB3YXMgbm8gcmVzcG9uc2UgZnJvbSBJbnB1dERpYWxvZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB1aUFjdGlvblJlcXVlc3QucGFyYW1zID0ge1xyXG4gICAgICAuLi51aUFjdGlvblJlcXVlc3QucGFyYW1zLFxyXG4gICAgICAuLi5wYXJhbXMsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHVpQWN0aW9uUmVxdWVzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlSW5wdXRUeXBlVXBsb2FkKFxyXG4gICAgaW5wdXRUeXBlTmFtZTogJ2lucHV0RGlhbG9nJyB8ICdpbnB1dDJEaWFsb2cnLFxyXG4gICAgdWlBY3Rpb246IFVpQWN0aW9uLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXHJcbiAgICBpc011bHRpcGxlOiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblJlcXVlc3QgfCB1bmRlZmluZWQ+IHtcclxuICAgIHRoaXMuZmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UuaW5wdXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWU7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlLmFjdGlvbiA9IHVpQWN0aW9uO1xyXG4gICAgdGhpcy5maWxlVXBsb2FkRGlhbG9nU2VydmljZS5pc011bHRpcGxlID0gaXNNdWx0aXBsZTtcclxuXHJcbiAgICB0aGlzLmZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlLm9wZW5EaWFsb2coKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlLm9uQWN0aW9uLnRvUHJvbWlzZSgpO1xyXG4gICAgbGV0IGZpbGVzID0gdGhpcy5maWxlVXBsb2FkRGlhbG9nU2VydmljZS5maWxlcztcclxuXHJcbiAgICBpZiAoIWZpbGVzIHx8ICFmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtcyA9IHtcclxuICAgICAgLi4udWlBY3Rpb25SZXF1ZXN0LnBhcmFtcyxcclxuICAgICAgX2ZpbGVzOiBmaWxlcyxcclxuICAgICAgaXNNdWx0aXBsZSxcclxuICAgICAgcGFyYW06XHJcbiAgICAgICAgdWlBY3Rpb24uaW5wdXRUeXBlID09PSAnZmlsZScgfHwgdWlBY3Rpb24uaW5wdXRUeXBlID09PSAnbXVsdGlwbGVfZmlsZXMnXHJcbiAgICAgICAgICA/ICdpbnB1dCdcclxuICAgICAgICAgIDogJ2lucHV0MicsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHVpQWN0aW9uUmVxdWVzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlSW5wdXRUeXBlVXNlclNlbGVjdChcclxuICAgIGlucHV0VHlwZU5hbWU6ICdpbnB1dERpYWxvZycgfCAnaW5wdXQyRGlhbG9nJyxcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblJlcXVlc3QgfCB1bmRlZmluZWQ+IHtcclxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2UuaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICAgIHVpQWN0aW9uLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3RcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFyZXNwb25zZS5zaG91bGRQZXJmb3JtQWN0aW9uIHx8ICFyZXNwb25zZS51aUFjdGlvblJlcXVlc3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0ID0gcmVzcG9uc2UudWlBY3Rpb25SZXF1ZXN0O1xyXG4gICAgcmV0dXJuIHVpQWN0aW9uUmVxdWVzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybUFjdGlvbihcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgb3B0aW9ucz86IEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChcclxuICAgICAgIXVpQWN0aW9uUmVxdWVzdC5wYXJhbXMgfHxcclxuICAgICAgKHVpQWN0aW9uUmVxdWVzdC5wYXJhbXMgJiYgIU9iamVjdC5rZXlzKHVpQWN0aW9uUmVxdWVzdC5wYXJhbXMpLmxlbmd0aClcclxuICAgICkge1xyXG4gICAgICB1aUFjdGlvblJlcXVlc3QucGFyYW1zID0ge1xyXG4gICAgICAgIG1vZGVsOiB0aGlzLnVpQWN0aW9uTW9kZWwuc2VydmljZVRvVXNlLmdldE1vZGVsKCksXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2UgaWYgKHVpQWN0aW9uLnN1Ym1pdCB8fCB1aUFjdGlvbi5tb2RlbCkge1xyXG4gICAgICB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydtb2RlbCddID0gdGhpcy51aUFjdGlvbk1vZGVsLnNlcnZpY2VUb1VzZS5nZXRNb2RlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudWlBY3Rpb25Nb2RlbC5zZXJ2aWNlVG9Vc2UucGVyZm9ybVVpQWN0aW9uUmVxdWVzdChcclxuICAgICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb3B0aW9ucz8ud2lkZ2V0SWQsXHJcbiAgICAgICAgb3B0aW9ucz8ubm9kZUlkXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodGhpcy51aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3I/LmZlZWRiYWNrVHlwZSA9PT0gVWlBY3Rpb25GZWVkYmFja1R5cGUuU05BQ0tCQVIpIHtcclxuICAgICAgICB0aGlzLnNob3dTYXZlZFNuYWNrYmFyKHVpQWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dTYXZlZFNuYWNrYmFyKHVpQWN0aW9uOiBVaUFjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5fc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoU3VjY2Vzc1NuYWNrQmFyQ29tcG9uZW50LCB7XHJcbiAgICAgIGR1cmF0aW9uOiA1ICogMTAwMCxcclxuICAgICAgcGFuZWxDbGFzczogWydiYWNrZ3JvdW5kQ29sb3ItYWNjZW50J10sXHJcbiAgICAgIGRhdGE6IHVpQWN0aW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93SW52YWxpZEZpZWxkc1NuYWNrYmFyKGludmFsaWRGaWVsZHM6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KEludmFsaWRGaWVsZHNTbmFja0JhckNvbXBvbmVudCwge1xyXG4gICAgICBkdXJhdGlvbjogNSAqIDEwMDAsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYmFja2dyb3VuZENvbG9yLXdhcm4nXSxcclxuICAgICAgZGF0YTogaW52YWxpZEZpZWxkcyxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=