fx-form-builder-wrapper 0.0.98 → 0.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/uploader-checkbox/uploader-checkbox.component.mjs +79 -11
- package/fesm2022/fx-form-builder-wrapper.mjs +78 -10
- package/fesm2022/fx-form-builder-wrapper.mjs.map +1 -1
- package/lib/components/uploader-checkbox/uploader-checkbox.component.d.ts +6 -1
- package/package.json +1 -1
|
@@ -106,18 +106,79 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
106
106
|
// }
|
|
107
107
|
// }
|
|
108
108
|
// }
|
|
109
|
+
// ngOnInit(): void {
|
|
110
|
+
// // Extract uploader keys and their corresponding URL arrays and store them in uploadedFilesMap
|
|
111
|
+
// this.fxBuilderWrapperService.variables$
|
|
112
|
+
// .pipe(takeUntil(this.destroy$))
|
|
113
|
+
// .subscribe((variables: any) => {
|
|
114
|
+
// if (!variables) return;
|
|
115
|
+
// const uploadedFilesMap: { [key: string]: string[] } = {};
|
|
116
|
+
// // Extract uploader keys and their corresponding URL arrays
|
|
117
|
+
// for (const [key, value] of Object.entries(variables)) {
|
|
118
|
+
// if (key.includes('uploader-checkbox') && Array.isArray(value)) {
|
|
119
|
+
// uploadedFilesMap[key] = value;
|
|
120
|
+
// }
|
|
121
|
+
// }
|
|
122
|
+
// this.uploadedFilesMap = uploadedFilesMap; // Store the map for later use
|
|
123
|
+
// });
|
|
124
|
+
// }
|
|
125
|
+
// ngAfterViewInit(): void {
|
|
126
|
+
// console.log("fxcomp", this.fxComponent);
|
|
127
|
+
// const key = this.fxComponent?.fxData?.name;
|
|
128
|
+
// if (key && this.uploadedFilesMap?.[key]) {
|
|
129
|
+
// const urls = this.uploadedFilesMap[key];
|
|
130
|
+
// const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];
|
|
131
|
+
// urls.forEach((originalUrl: any) => {
|
|
132
|
+
// if (originalUrl) {
|
|
133
|
+
// const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(
|
|
134
|
+
// map((blob: Blob) => ({
|
|
135
|
+
// result: URL.createObjectURL(blob),
|
|
136
|
+
// originalUrl: originalUrl?.originalUrl
|
|
137
|
+
// }))
|
|
138
|
+
// );
|
|
139
|
+
// imageFetches.push(image$);
|
|
140
|
+
// }
|
|
141
|
+
// });
|
|
142
|
+
// if (imageFetches.length > 0) {
|
|
143
|
+
// forkJoin(imageFetches).subscribe({
|
|
144
|
+
// next: (imageData) => {
|
|
145
|
+
// const formatted = imageData.map(item => ({
|
|
146
|
+
// id: uuidv4(),
|
|
147
|
+
// file: null,
|
|
148
|
+
// originalUrl: item.originalUrl,
|
|
149
|
+
// result: item.result
|
|
150
|
+
// }));
|
|
151
|
+
// this.uploadedFiles = [...this.uploadedFiles, ...formatted];
|
|
152
|
+
// this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
153
|
+
// this.uploadFileControl.setValue(this.formattedData);
|
|
154
|
+
// },
|
|
155
|
+
// error: (err) => {
|
|
156
|
+
// console.error(`Failed to fetch images for ${key}:`, err);
|
|
157
|
+
// }
|
|
158
|
+
// });
|
|
159
|
+
// }
|
|
160
|
+
// } else {
|
|
161
|
+
// console.error('No files found for the provided key:', key);
|
|
162
|
+
// }
|
|
163
|
+
// this.getContextBaseId();
|
|
164
|
+
// }
|
|
109
165
|
ngOnInit() {
|
|
110
|
-
// Extract uploader keys and their corresponding
|
|
166
|
+
// Extract uploader keys and their corresponding file objects and store them in uploadedFilesMap
|
|
111
167
|
this.fxBuilderWrapperService.variables$
|
|
112
168
|
.pipe(takeUntil(this.destroy$))
|
|
113
169
|
.subscribe((variables) => {
|
|
114
170
|
if (!variables)
|
|
115
171
|
return;
|
|
172
|
+
// Initialize the map to store the structure of uploaded files and other data
|
|
116
173
|
const uploadedFilesMap = {};
|
|
117
|
-
//
|
|
174
|
+
// Iterate over the variables to extract uploader keys and their corresponding uploaded files data
|
|
118
175
|
for (const [key, value] of Object.entries(variables)) {
|
|
119
|
-
if
|
|
120
|
-
|
|
176
|
+
// Check if the key starts with 'uploader-checkbox' and if value is an object containing 'uploadedFiles'
|
|
177
|
+
if (key.startsWith('uploader-checkbox') && value.uploadedFiles) {
|
|
178
|
+
uploadedFilesMap[key] = {
|
|
179
|
+
uploadedFiles: value.uploadedFiles,
|
|
180
|
+
checkboxEnabled: value.checkboxEnabled || false
|
|
181
|
+
};
|
|
121
182
|
}
|
|
122
183
|
}
|
|
123
184
|
this.uploadedFilesMap = uploadedFilesMap; // Store the map for later use
|
|
@@ -127,17 +188,21 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
127
188
|
console.log("fxcomp", this.fxComponent);
|
|
128
189
|
const key = this.fxComponent?.fxData?.name;
|
|
129
190
|
if (key && this.uploadedFilesMap?.[key]) {
|
|
130
|
-
const
|
|
191
|
+
const uploadedFiles = this.uploadedFilesMap[key]?.uploadedFiles;
|
|
192
|
+
this.checkboxEnabled = this.uploadedFilesMap[key]?.checkboxEnabled; // Get the uploadedFiles array
|
|
131
193
|
const imageFetches = [];
|
|
132
|
-
|
|
194
|
+
// Iterate over the uploaded files and fetch the images
|
|
195
|
+
uploadedFiles.forEach((file) => {
|
|
196
|
+
const originalUrl = file?.originalUrl;
|
|
133
197
|
if (originalUrl) {
|
|
134
|
-
const image$ = this.http.get(originalUrl
|
|
135
|
-
result: URL.createObjectURL(blob),
|
|
136
|
-
originalUrl:
|
|
198
|
+
const image$ = this.http.get(originalUrl, { responseType: 'blob' }).pipe(map((blob) => ({
|
|
199
|
+
result: URL.createObjectURL(blob), // Blob URL for preview
|
|
200
|
+
originalUrl: file?.originalUrl // Preserve the original URL
|
|
137
201
|
})));
|
|
138
202
|
imageFetches.push(image$);
|
|
139
203
|
}
|
|
140
204
|
});
|
|
205
|
+
// Fetch all images concurrently using forkJoin
|
|
141
206
|
if (imageFetches.length > 0) {
|
|
142
207
|
forkJoin(imageFetches).subscribe({
|
|
143
208
|
next: (imageData) => {
|
|
@@ -149,6 +214,7 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
149
214
|
}));
|
|
150
215
|
this.uploadedFiles = [...this.uploadedFiles, ...formatted];
|
|
151
216
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
217
|
+
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
152
218
|
this.uploadFileControl.setValue(this.formattedData);
|
|
153
219
|
},
|
|
154
220
|
error: (err) => {
|
|
@@ -178,6 +244,7 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
178
244
|
};
|
|
179
245
|
this.uploadedFiles.push(newFile);
|
|
180
246
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
247
|
+
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
181
248
|
this.uploadFileControl.setValue(this.formattedData);
|
|
182
249
|
};
|
|
183
250
|
reader.readAsDataURL(file);
|
|
@@ -213,7 +280,8 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
213
280
|
this.formattedData = {
|
|
214
281
|
...this.formattedData,
|
|
215
282
|
uploadedFiles: this.uploadedFiles,
|
|
216
|
-
deletedFiles: this.deletedFiles
|
|
283
|
+
deletedFiles: this.deletedFiles,
|
|
284
|
+
checkboxEnabled: this.checkboxEnabled
|
|
217
285
|
};
|
|
218
286
|
// Set the value of the uploadFileControl
|
|
219
287
|
this.uploadFileControl.setValue(this.formattedData);
|
|
@@ -247,4 +315,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
247
315
|
type: ViewChild,
|
|
248
316
|
args: ['fxComponent']
|
|
249
317
|
}] } });
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXItY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy91cGxvYWRlci1jaGVja2JveC91cGxvYWRlci1jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3VwbG9hZGVyLWNoZWNrYm94L3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFvQyxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFFLGVBQWUsRUFBZ0Isa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEosT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTbkMsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGVBQWU7SUFjdkM7SUFBK0I7SUFibkQsdURBQXVEO0lBQzdCLFdBQVcsQ0FBZTtJQUM3QyxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLGFBQWEsR0FBZSxFQUFFLENBQUM7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QyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFDLENBQUM7WUFDdkYsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQztZQUNsRixJQUFJLGVBQWUsQ0FBQyxFQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7U0FDN0osQ0FBQztJQUNKLENBQUM7SUFFUyxXQUFXO1FBQ25CLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO3dHQTdRUyx5QkFBeUI7NEZBQXpCLHlCQUF5QixnTkNoQnRDLHV3TUFpRWlCLGlnQkRyREwsWUFBWSxnUUFBRSxXQUFXLDRFQUFFLFdBQVcsK2dCQUFFLG1CQUFtQjs7NEZBSTFELHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUM7NEhBTTNDLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGeEJhc2VDb21wb25lbnQsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFNlbGVjdFNldHRpbmcsIEZ4VmFsaWRhdGlvbiwgRnhWYWxpZGF0b3JTZXJ2aWNlLCBGeENvbXBvbmVudCB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2Z4LWJ1aWxkZXItd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBPYnNlcnZhYmxlLCBtYXAsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NH0gZnJvbSAndXVpZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VwbG9hZGVyLWNoZWNrYm94JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZ4Q29tcG9uZW50LCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdXBsb2FkZXItY2hlY2tib3guY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVwbG9hZGVyQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBGeEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgLCBBZnRlclZpZXdJbml0e1xyXG4gICAvLyBwdWJsaWMgdXBsb2FkRmlsZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgIEBWaWV3Q2hpbGQoJ2Z4Q29tcG9uZW50JykgZnhDb21wb25lbnQhOiBGeENvbXBvbmVudDtcclxuICAgcHVibGljIHVwbG9hZEZpbGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgIHB1YmxpYyB1cGxvYWRlZEZpbGVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgIHB1YmxpYyBmb3JtYXR0ZWREYXRhOiBhbnkgPSB7XHJcbiAgICAgdXBsb2FkZWRGaWxlczogW10sXHJcbiAgICAgZGVsZXRlZEZpbGVzOiBbXSxcclxuICAgICBjaGVja2JveEVuYWJsZWQ6IGZhbHNlXHJcbiAgIH07XHJcbiAgIHVwbG9hZGVkRmlsZXNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xyXG4gICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Qm9vbGVhbj4oKTtcclxuICAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gICBwdWJsaWMgY2hlY2tib3hFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixwcml2YXRlIGZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlOiBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSkge1xyXG4gICAgIHN1cGVyKGNkcilcclxuICAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgIHRoaXMuX3JlZ2lzdGVyKHRoaXMudXBsb2FkRmlsZUNvbnRyb2wpO1xyXG4gICAgICAgY29uc29sZS5sb2coXCJjb250ZXh0aWRcIix0aGlzLmdldENvbnRleHRCYXNlSWQoKSk7XHJcbiAgICAgfSlcclxuICAgfVxyXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAvLyAgY29uc29sZS5sb2coXCJmeGNvbXBcIix0aGlzLmZ4Q29tcG9uZW50KTtcclxuICAvLyAgdGhpcy5nZXRDb250ZXh0QmFzZUlkKCk7XHJcbiAgLy8gfVxyXG4gXHJcbiBcclxuIFxyXG4gXHJcbiBcclxuICAgdXBsb2FkZWRJbWFnZXM6IHsgW2tleTogc3RyaW5nXTogeyByZXN1bHQ6IHN0cmluZywgZmlsZTogRmlsZSB8IG51bGwgfVtdIH0gPSB7fTtcclxuICAgZGVsZXRlZEZpbGVzOiBhbnlbXSA9IFtdO1xyXG4gIFxyXG4gXHJcbiAgLy8gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vICAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gIC8vICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC8vICAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuICAgXHJcbiAgLy8gICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXNNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xyXG4gICBcclxuICAvLyAgICAgICAgLy8gRXh0cmFjdCB1cGxvYWRlciBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIFVSTCBhcnJheXNcclxuICAvLyAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gIC8vICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3VwbG9hZGVyLWNoZWNrYm94JykgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAvLyAgICAgICAgICAgIHVwbG9hZGVkRmlsZXNNYXBba2V5XSA9IHZhbHVlO1xyXG4gIC8vICAgICAgICAgIH1cclxuICAvLyAgICAgICAgfVxyXG4gICBcclxuICAvLyAgICAgICAgZm9yIChjb25zdCBbdXBsb2FkZXJLZXksIHVybHNdIG9mIE9iamVjdC5lbnRyaWVzKHVwbG9hZGVkRmlsZXNNYXApKSB7XHJcbiAgLy8gICAgICAgICAgY29uc3QgaW1hZ2VGZXRjaGVzOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmc7IG9yaWdpbmFsVXJsOiBhbnkgfT5bXSA9IFtdO1xyXG4gICBcclxuICAvLyAgICAgICAgICB1cmxzLmZvckVhY2goKG9yaWdpbmFsVXJsOmFueSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgaWYgKG9yaWdpbmFsVXJsKSB7XHJcbiAgLy8gICAgICAgICAgICAgIGNvbnN0IGltYWdlJCA9IHRoaXMuaHR0cC5nZXQob3JpZ2luYWxVcmw/Lm9yaWdpbmFsVXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgICAgICAgICAgbWFwKChibG9iOiBCbG9iKSA9PiAoe1xyXG4gIC8vICAgICAgICAgICAgICAgICAgcmVzdWx0OiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLCAvLyBmb3IgcHJldmlld1xyXG4gIC8vICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybCAgICAgICAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbFxyXG4gIC8vICAgICAgICAgICAgICAgIH0pKVxyXG4gIC8vICAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gIC8vICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgIH0pO1xyXG4gICBcclxuICAvLyAgICAgICAgICBpZiAoaW1hZ2VGZXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgICAgICAgIGZvcmtKb2luKGltYWdlRmV0Y2hlcykuc3Vic2NyaWJlKHtcclxuICAvLyAgICAgICAgICAgICAgbmV4dDogKGltYWdlRGF0YSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGltYWdlRGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4gIC8vICAgICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gIC8vICAgICAgICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAvLyAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBpdGVtLm9yaWdpbmFsVXJsLFxyXG4gIC8vICAgICAgICAgICAgICAgICAgcmVzdWx0OiBpdGVtLnJlc3VsdFxyXG4gIC8vICAgICAgICAgICAgICAgIH0pKTtcclxuICAgXHJcbiAgLy8gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gWy4uLnRoaXMudXBsb2FkZWRGaWxlcywgLi4uZm9ybWF0dGVkXTtcclxuICAvLyAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAvLyAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgLy8gICAgICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGltYWdlcyBmb3IgJHt1cGxvYWRlcktleX06YCwgZXJyKTtcclxuICAvLyAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgfSk7XHJcbiAgLy8gICAgICAgICAgfVxyXG4gIC8vICAgICAgICB9XHJcbiAgLy8gICAgICB9KTtcclxuICAvLyAgfVxyXG4gICBcclxuXHJcbiAgIFxyXG4gXHJcbiAgIC8vIHB1YmxpYyBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAgLy8gICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAvLyAgIGlmIChpbnB1dC5maWxlcykge1xyXG4gICAvLyAgICAgZm9yKGxldCBpID0gMDsgaSA8IGlucHV0Py5maWxlcz8ubGVuZ3RoOyBpKyspIHtcclxuICAgLy8gICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzW2ldO1xyXG4gICAvLyAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAvLyAgICAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XHJcbiAgIC8vICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goe1xyXG4gICAvLyAgICAgICAgICAgZmlsZTogZmlsZSxcclxuICAgLy8gICAgICAgICAgIHJlc3VsdDogZS50YXJnZXQ/LnJlc3VsdCxcclxuICAgLy8gICAgICAgICAgIG5hbWU6IGZpbGU/Lm5hbWUsXHJcbiAgIC8vICAgICAgICAgICBpZDogdXVpZHY0KClcclxuICAgLy8gICAgICAgICB9KVxyXG4gICAvLyAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy51cGxvYWRlZEZpbGVzKTtcclxuICAgLy8gICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnVwbG9hZEZpbGVDb250cm9sKTtcclxuICAgLy8gICAgICAgfVxyXG4gICAvLyAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgLy8gICAgIH1cclxuICAgLy8gICB9XHJcbiAgIC8vIH1cclxuXHJcbiAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gRXh0cmFjdCB1cGxvYWRlciBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIFVSTCBhcnJheXMgYW5kIHN0b3JlIHRoZW0gaW4gdXBsb2FkZWRGaWxlc01hcFxyXG4gICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG4gIFxyXG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXNNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xyXG4gIFxyXG4gICAgICAgIC8vIEV4dHJhY3QgdXBsb2FkZXIga2V5cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBVUkwgYXJyYXlzXHJcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygndXBsb2FkZXItY2hlY2tib3gnKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB1cGxvYWRlZEZpbGVzTWFwW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzTWFwID0gdXBsb2FkZWRGaWxlc01hcDsgLy8gU3RvcmUgdGhlIG1hcCBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJmeGNvbXBcIiwgdGhpcy5meENvbXBvbmVudCk7XHJcblxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5uYW1lO1xyXG5cclxuICAgIGlmIChrZXkgJiYgdGhpcy51cGxvYWRlZEZpbGVzTWFwPy5ba2V5XSkge1xyXG4gICAgICBjb25zdCB1cmxzID0gdGhpcy51cGxvYWRlZEZpbGVzTWFwW2tleV07XHJcbiAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogYW55IH0+W10gPSBbXTtcclxuXHJcbiAgICAgIHVybHMuZm9yRWFjaCgob3JpZ2luYWxVcmw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFVybCkge1xyXG4gICAgICAgICAgY29uc3QgaW1hZ2UkID0gdGhpcy5odHRwLmdldChvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChibG9iOiBCbG9iKSA9PiAoe1xyXG4gICAgICAgICAgICAgIHJlc3VsdDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSxcclxuICAgICAgICAgICAgICBvcmlnaW5hbFVybDogb3JpZ2luYWxVcmw/Lm9yaWdpbmFsVXJsXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGltYWdlRmV0Y2hlcy5wdXNoKGltYWdlJCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvcmtKb2luKGltYWdlRmV0Y2hlcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChpbWFnZURhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gaW1hZ2VEYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGl0ZW0ub3JpZ2luYWxVcmwsXHJcbiAgICAgICAgICAgICAgcmVzdWx0OiBpdGVtLnJlc3VsdFxyXG4gICAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbLi4udGhpcy51cGxvYWRlZEZpbGVzLCAuLi5mb3JtYXR0ZWRdO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBpbWFnZXMgZm9yICR7a2V5fTpgLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyBmaWxlcyBmb3VuZCBmb3IgdGhlIHByb3ZpZGVkIGtleTonLCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0Q29udGV4dEJhc2VJZCgpO1xyXG4gIH1cclxuXHJcbiBcclxuICAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICBpZiAoaW5wdXQuZmlsZXMpIHtcclxuICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzW2ldO1xyXG4gICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gXHJcbiAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcclxuICAgICAgICAgICBjb25zdCBuZXdGaWxlID0ge1xyXG4gICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBudWxsLFxyXG4gICAgICAgICAgICAgcmVzdWx0OiBlLnRhcmdldD8ucmVzdWx0LFxyXG4gICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lXHJcbiAgICAgICAgICAgfTtcclxuIFxyXG4gICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKG5ld0ZpbGUpO1xyXG4gICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4gICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgICAgfTtcclxuIFxyXG4gICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgIH1cclxuIFxyXG4gXHJcbiAgIC8vIHB1YmxpYyBkZWxldGVGaWxlKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgLy8gICB0aGlzLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZT8uaWQgIT09IGlkKTtcclxuICAgLy8gfVxyXG4gXHJcbiAgIC8vIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAvLyAgIGNvbnN0IFtkZWxldGVkRmlsZV0gPSB0aGlzLnVwbG9hZGVkRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgXHJcbiAgIC8vICAgaWYgKGRlbGV0ZWRGaWxlKSB7XHJcbiAgIC8vICAgICB0aGlzLmRlbGV0ZWRGaWxlcy5wdXNoKGRlbGV0ZWRGaWxlKTtcclxuICAgLy8gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgLy8gICAgICAgLi4udGhpcy5mb3JtYXR0ZWREYXRhLFxyXG4gICAvLyAgICAgICB1cGxvYWRlZEZpbGVzOiBbLi4udGhpcy51cGxvYWRlZEZpbGVzXSxcclxuICAgLy8gICAgICAgZGVsZXRlZEZpbGVzOiBbLi4udGhpcy5kZWxldGVkRmlsZXNdXHJcbiAgIC8vICAgICB9O1xyXG4gICAvLyAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gICAvLyAgIH1cclxuICAgLy8gfVxyXG4gXHJcbiAgIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgIGNvbnN0IGRlbGV0ZWRGaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzPy5baW5kZXhdO1xyXG4gICAgIGlmICghZGVsZXRlZEZpbGUpIHJldHVybjtcclxuICAgXHJcbiAgICAgLy8gRW5zdXJlIGZvcm1hdHRlZERhdGEgZXhpc3RzIGFuZCBpbml0aWFsaXplIGlmIHVuZGVmaW5lZFxyXG4gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHRoaXMuZm9ybWF0dGVkRGF0YSB8fCB7IHVwbG9hZGVkRmlsZXM6IFtdLCBkZWxldGVkRmlsZXM6IFtdIH07XHJcbiAgIFxyXG4gICAgIC8vIEFkZCB0aGUgZGVsZXRlZCBmaWxlIHRvIHRoZSBkZWxldGVkRmlsZXMgYXJyYXlcclxuICAgICB0aGlzLmRlbGV0ZWRGaWxlcyA9IFsuLi50aGlzLmRlbGV0ZWRGaWxlcywgZGVsZXRlZEZpbGVdO1xyXG4gICBcclxuICAgICAvLyBSZW1vdmUgdGhlIGZpbGUgZnJvbSB1cGxvYWRlZEZpbGVzIHVzaW5nIGZpbHRlciBmb3IgaW1tdXRhYmlsaXR5XHJcbiAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICBcclxuICAgICAvLyBVcGRhdGUgZm9ybWF0dGVkRGF0YVxyXG4gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgICAgIC4uLnRoaXMuZm9ybWF0dGVkRGF0YSxcclxuICAgICAgIHVwbG9hZGVkRmlsZXM6IHRoaXMudXBsb2FkZWRGaWxlcyxcclxuICAgICAgIGRlbGV0ZWRGaWxlczogdGhpcy5kZWxldGVkRmlsZXNcclxuICAgICB9O1xyXG4gICBcclxuICAgICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSB1cGxvYWRGaWxlQ29udHJvbFxyXG4gICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgfVxyXG4gICBcclxuICAgb25DaGVja2JveENoYW5nZSgpe1xyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRhID0ge1xyXG4gICAgICAuLi50aGlzLmZvcm1hdHRlZERhdGEsXHJcbiAgICAgIHVwbG9hZGVkRmlsZXM6IHRoaXMudXBsb2FkZWRGaWxlcyxcclxuICAgICAgZGVsZXRlZEZpbGVzOiB0aGlzLmRlbGV0ZWRGaWxlcyxcclxuICAgICAgY2hlY2tib3hFbmFibGVkOnRoaXMuY2hlY2tib3hFbmFibGVkXHJcbiAgICB9O1xyXG4gICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gICB9XHJcbiAgIFxyXG4gXHJcbiAgIHByb3RlY3RlZCBzZXR0aW5ncygpOiBGeFNldHRpbmdbXSB7XHJcbiAgICAgcmV0dXJuIFtcclxuICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICd1cGxvYWQtdGV4dCcsICR0aXRsZTogJ1VwbG9hZCBUZXh0JywgdmFsdWU6ICdVcGxvYWQgRmlsZSd9KSxcclxuICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjaGVja2JveC1sYWJlbCcsICR0aXRsZTogJ0NoZWNrYm94IExhYmVsJywgdmFsdWU6ICcnfSksXHJcbiAgICAgICBuZXcgRnhTZWxlY3RTZXR0aW5nKHtrZXk6ICdtdWx0aXBsZS11cGxvYWQnLCAkdGl0bGU6ICdNdWx0aXBsZSBVcGxvYWQnLCB2YWx1ZTogZmFsc2V9LCBbe29wdGlvbjogJ0VuYWJsZScsIHZhbHVlOiB0cnVlfSwge29wdGlvbjogJ0Rpc2FibGUnLCB2YWx1ZTogZmFsc2V9XSlcclxuICAgICBdO1xyXG4gICB9XHJcbiBcclxuICAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgICByZXR1cm4gW0Z4VmFsaWRhdG9yU2VydmljZS5yZXF1aXJlZF07XHJcbiAgIH1cclxuXHJcbn1cclxuIiwiPGZ4LWNvbXBvbmVudCBbZnhEYXRhXT1cImZ4RGF0YVwiICNmeENvbXBvbmVudD5cclxuICAgIDxsYWJlbCBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIFsobmdNb2RlbCldID0gXCJjaGVja2JveEVuYWJsZWRcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAge3sgc2V0dGluZygnY2hlY2tib3gtbGFiZWwnKSB9fVxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cImN1c3RvbS11cGxvYWQgZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIHBiLTAgcm91bmRlZC1zbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyOVwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyOSAyOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICBkPVwiTTE0LjAwMSAzLjAwMTk1QzExLjUzMjIgMy4wMDE5NSA5LjE2NzIyIDMuODY5NTYgNy4yMzY0MSA1LjM4NDE0TDcuMjM1OTggNC41OTY5NUM3LjIzNTk4IDQuNTI0NzMgNy4yMjE3NSA0LjQ1MzIxIDcuMTk0MTEgNC4zODY0OEM3LjE2NjQ3IDQuMzE5NzUgNy4xMjU5NiA0LjI1OTEyIDcuMDc0ODkgNC4yMDgwNEM3LjAyMzgxIDQuMTU2OTcgNi45NjMxOCA0LjExNjQ2IDYuODk2NDUgNC4wODg4MkM2LjgyOTcyIDQuMDYxMTggNi43NTgyIDQuMDQ2OTUgNi42ODU5OCA0LjA0Njk1QzYuNjEzNzUgNC4wNDY5NSA2LjU0MjIzIDQuMDYxMTggNi40NzU1IDQuMDg4ODJDNi40MDg3NyA0LjExNjQ2IDYuMzQ4MTQgNC4xNTY5NyA2LjI5NzA3IDQuMjA4MDRDNi4yNDU5OSA0LjI1OTEyIDYuMjA1NDggNC4zMTk3NSA2LjE3Nzg0IDQuMzg2NDhDNi4xNTAyIDQuNDUzMjEgNi4xMzU5OCA0LjUyNDczIDYuMTM1OTggNC41OTY5NUw2LjEzNjQyIDYuNjg2NTJDNi4xMzY0MyA2LjgzMjM5IDYuMTk0MzggNi45NzIyOCA2LjI5NzUyIDcuMDc1NDJDNi40MDA2NyA3LjE3ODU2IDYuNTQwNTUgNy4yMzY1MSA2LjY4NjQyIDcuMjM2NTJIOC43NzU5OEM4Ljg0ODIgNy4yMzY1MiA4LjkxOTcyIDcuMjIyMyA4Ljk4NjQ1IDcuMTk0NjZDOS4wNTMxOCA3LjE2NzAyIDkuMTEzODEgNy4xMjY1MSA5LjE2NDg5IDcuMDc1NDNDOS4yMTU5NiA3LjAyNDM2IDkuMjU2NDcgNi45NjM3MyA5LjI4NDExIDYuODk3QzkuMzExNzUgNi44MzAyNyA5LjMyNTk4IDYuNzU4NzUgOS4zMjU5OCA2LjY4NjUyQzkuMzI1OTggNi42MTQzIDkuMzExNzUgNi41NDI3OCA5LjI4NDExIDYuNDc2MDVDOS4yNTY0NyA2LjQwOTMyIDkuMjE1OTYgNi4zNDg2OSA5LjE2NDg5IDYuMjk3NjFDOS4xMTM4MSA2LjI0NjU0IDkuMDUzMTggNi4yMDYwMyA4Ljk4NjQ1IDYuMTc4MzlDOC45MTk3MiA2LjE1MDc1IDguODQ4MiA2LjEzNjUyIDguNzc1OTggNi4xMzY1Mkg4LjA1ODRDOS43NzAyIDQuODQzODcgMTEuODM5OSA0LjEwMTk1IDE0LjAwMSA0LjEwMTk1QzE5LjQ3NTEgNC4xMDE5NSAyMy45MDEgOC41Mjc4MiAyMy45MDEgMTQuMDAyQzIzLjkwMSAxOS40NzYxIDE5LjQ3NTEgMjMuOTAyIDE0LjAwMSAyMy45MDJDOC41MjY4NCAyMy45MDIgNC4xMDA5OCAxOS40NzYxIDQuMTAwOTggMTQuMDAyQzQuMTAwOTggMTIuNjM4MSA0LjM4MjYzIDExLjI4ODggNC45Mjg1NSAxMC4wMzg5QzQuOTg2OTEgOS45MDUzMiA0Ljk4OTgyIDkuNzUzOTkgNC45MzY2NSA5LjYxODIyQzQuODgzNDcgOS40ODI0NiA0Ljc3ODU1IDkuMzczMzYgNC42NDQ5NiA5LjMxNDkyQzQuNTc4NzcgOS4yODU5NiA0LjUwNzUzIDkuMjcwMzIgNC40MzUzIDkuMjY4OUM0LjM2MzA2IDkuMjY3NDcgNC4yOTEyNiA5LjI4MDMgNC4yMjM5OCA5LjMwNjYzQzQuMTU2NzEgOS4zMzI5NyA0LjA5NTI4IDkuMzcyMyA0LjA0MzIxIDkuNDIyMzhDMy45OTExNCA5LjQ3MjQ3IDMuOTQ5NDQgOS41MzIzMiAzLjkyMDUxIDkuNTk4NTJDMy4zMTM5MyAxMC45ODcyIDMuMDAwOTggMTIuNDg2NiAzLjAwMDk4IDE0LjAwMkMzLjAwMDk4IDIwLjA3MDYgNy45MzIzNiAyNS4wMDIgMTQuMDAxIDI1LjAwMkMyMC4wNjk2IDI1LjAwMiAyNS4wMDEgMjAuMDcwNiAyNS4wMDEgMTQuMDAyQzI1LjAwMSA3LjkzMzM0IDIwLjA2OTYgMy4wMDE5NSAxNC4wMDEgMy4wMDE5NVpcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCIjRjNBMDQxXCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgIGQ9XCJNMTMuOTk4OCA2LjEzOTY1QzkuNjYxNiA2LjEzOTY1IDYuMTMzNzkgOS42Njc0NiA2LjEzMzc5IDE0LjAwNDZDNi4xMzM3OSAxOC4zNDE4IDkuNjYxNiAyMS44Njk2IDEzLjk5ODggMjEuODY5NkMxOC4zMzYgMjEuODY5NiAyMS44NjM4IDE4LjM0MTggMjEuODYzOCAxNC4wMDQ2QzIxLjg2MzggOS42Njc0NiAxOC4zMzYgNi4xMzk2NSAxMy45OTg4IDYuMTM5NjVaTTEzLjk5ODggOC4yMjk2NUMxNC4xNDQ3IDguMjI5NjUgMTQuMjg0NiA4LjI4NzU5IDE0LjM4NzcgOC4zOTA3NEMxNC40OTA4IDguNDkzODggMTQuNTQ4OCA4LjYzMzc4IDE0LjU0ODggOC43Nzk2NVYxMy43NzY5TDE3LjUyMjcgMTYuNzUwOEMxNy42MjU4IDE2Ljg1MzkgMTcuNjgzNyAxNi45OTM4IDE3LjY4MzcgMTcuMTM5NkMxNy42ODM3IDE3LjI4NTUgMTcuNjI1OCAxNy40MjU0IDE3LjUyMjcgMTcuNTI4NUMxNy40MTk1IDE3LjYzMTYgMTcuMjc5NiAxNy42ODk2IDE3LjEzMzggMTcuNjg5NkMxNi45ODc5IDE3LjY4OTYgMTYuODQ4MSAxNy42MzE2IDE2Ljc0NDkgMTcuNTI4NUwxMy42MDk5IDE0LjM5MzVDMTMuNTA2OCAxNC4yOTA0IDEzLjQ0ODggMTQuMTUwNSAxMy40NDg4IDE0LjAwNDZWOC43Nzk2NUMxMy40NDg4IDguNjMzNzggMTMuNTA2NyA4LjQ5Mzg4IDEzLjYwOTkgOC4zOTA3NEMxMy43MTMgOC4yODc1OSAxMy44NTI5IDguMjI5NjUgMTMuOTk4OCA4LjIyOTY1WlwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI4LjU2XCIgaGVpZ2h0PVwiMjhcIiByeD1cIjEuNTE0NzlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk0xNS4wNjggMjIuNzM5MVYxNy42NzA4SDE4LjQ5NjhMMTQuMjEwOCAxMi42MDI1TDkuOTI0OCAxNy42NzA4SDEzLjM1MzZWMjIuNzM5MUg5LjA2NzU5VjIyLjY5NjlDOC45MjM1OCAyMi43MDUzIDguNzg2NDMgMjIuNzM5MSA4LjYzODk5IDIyLjczOTFDNi45MzM5MSAyMi43MzkxIDUuMjk4NjYgMjIuMDcxNyA0LjA5Mjk4IDIwLjg4MzVDMi44ODczIDE5LjY5NTQgMi4yMDk5NiAxOC4wODQgMi4yMDk5NiAxNi40MDM3QzIuMjA5OTYgMTMuMTUzMiA0LjcwNDQzIDEwLjUwNDIgNy45MDUyMyAxMC4xNDFDOC4xODU4NSA4LjY5NTMgOC45Njg5MiA3LjM5MTE4IDEwLjExOTcgNi40NTI5MkMxMS4yNzA2IDUuNTE0NjUgMTIuNzE3MiA1LjAwMDg5IDE0LjIxMDggNUMxNS43MDQ3IDUuMDAwODIgMTcuMTUxNSA1LjUxNDUyIDE4LjMwMjYgNi40NTI3N0MxOS40NTM3IDcuMzkxMDEgMjAuMjM3MSA4LjY5NTE2IDIwLjUxODEgMTAuMTQxQzIzLjcxODkgMTAuNTA0MiAyNi4yMSAxMy4xNTMyIDI2LjIxIDE2LjQwMzdDMjYuMjEgMTguMDg0IDI1LjUzMjYgMTkuNjk1NCAyNC4zMjY5IDIwLjg4MzVDMjMuMTIxMyAyMi4wNzE3IDIxLjQ4NiAyMi43MzkxIDE5Ljc4MDkgMjIuNzM5MUMxOS42MzY5IDIyLjczOTEgMTkuNDk4MSAyMi43MDUzIDE5LjM1MjMgMjIuNjk2OVYyMi43MzkxSDE1LjA2OFpcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgY2xhc3M9XCJ0ZXh0LWJhc2UgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgIHt7IHNldHRpbmcoJ3VwbG9hZC10ZXh0JykgfX1cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgI2ZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIFttdWx0aXBsZV09XCJzZXR0aW5nKCdtdWx0aXBsZS11cGxvYWQnKVwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIGhpZGRlbiAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWxpc3QgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgZmxleC13cmFwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVwbG9hZGVkRmlsZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiB1cGxvYWRlZEZpbGVzOyBsZXQgaSA9IGluZGV4XCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUoaSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZV9pY29uIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82ODM3XzI5NjgzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHJ4PVwiOVwiIGZpbGw9XCIjRjNBMDQxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8bWFzayBpZD1cIm1hc2swXzY4MzdfMjk2ODNcIiBzdHlsZT1cIm1hc2stdHlwZTphbHBoYVwiIG1hc2tVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwiI0Q5RDlEOVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxnIG1hc2s9XCJ1cmwoI21hc2swXzY4MzdfMjk2ODMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMjA0NSA4Ljk5ODE1TDUuODE4MDIgNi42MTE2N0w2LjYxMzUxIDUuODE2MTdMOSA4LjIwMjY2TDExLjM4NjUgNS44MTYxN0wxMi4xODIgNi42MTE2N0w5Ljc5NTUgOC45OTgxNUwxMi4xODIgMTEuMzg0NkwxMS4zODY1IDEyLjE4MDFMOSA5Ljc5MzY1TDYuNjEzNTEgMTIuMTgwMUw1LjgxODAyIDExLjM4NDZMOC4yMDQ1IDguOTk4MTVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNjgzN18yOTY4M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgcng9XCI5XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZmlsZS10aHVtYm5haWxcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDRweFwiIFtzcmNdPVwiZmlsZT8ucmVzdWx0XCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgIDxwPnt7ZmlsZT8ubmFtZX19PC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9meC1jb21wb25lbnQ+Il19
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXItY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy91cGxvYWRlci1jaGVja2JveC91cGxvYWRlci1jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3VwbG9hZGVyLWNoZWNrYm94L3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFvQyxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFFLGVBQWUsRUFBZ0Isa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEosT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFvQm5DLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxlQUFlO0lBY3ZDO0lBQStCO0lBYm5ELHVEQUF1RDtJQUM3QixXQUFXLENBQWU7SUFDN0MsaUJBQWlCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxhQUFhLEdBQWUsRUFBRSxDQUFD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ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGeEJhc2VDb21wb25lbnQsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFNlbGVjdFNldHRpbmcsIEZ4VmFsaWRhdGlvbiwgRnhWYWxpZGF0b3JTZXJ2aWNlLCBGeENvbXBvbmVudCB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2Z4LWJ1aWxkZXItd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBPYnNlcnZhYmxlLCBtYXAsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NH0gZnJvbSAndXVpZCc7XHJcblxyXG5pbnRlcmZhY2UgVXBsb2FkZWRGaWxlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGZpbGU6IGFueTtcclxuICByZXN1bHQ6IHN0cmluZztcclxuICBvcmlnaW5hbFVybDogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBVcGxvYWRlckRhdGEge1xyXG4gIHVwbG9hZGVkRmlsZXM6IFVwbG9hZGVkRmlsZVtdO1xyXG4gIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1cGxvYWRlci1jaGVja2JveCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGeENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWRlci1jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRlckNoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0ICwgQWZ0ZXJWaWV3SW5pdHtcclxuICAgLy8gcHVibGljIHVwbG9hZEZpbGVDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gICBAVmlld0NoaWxkKCdmeENvbXBvbmVudCcpIGZ4Q29tcG9uZW50ITogRnhDb21wb25lbnQ7XHJcbiAgIHB1YmxpYyB1cGxvYWRGaWxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICBwdWJsaWMgdXBsb2FkZWRGaWxlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICBwdWJsaWMgZm9ybWF0dGVkRGF0YTogYW55ID0ge1xyXG4gICAgIHVwbG9hZGVkRmlsZXM6IFtdLFxyXG4gICAgIGRlbGV0ZWRGaWxlczogW10sXHJcbiAgICAgY2hlY2tib3hFbmFibGVkOiBmYWxzZVxyXG4gICB9O1xyXG4gICB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHsgdXBsb2FkZWRGaWxlczogYW55W10sIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbiB9IH0gPSB7fTtcclxuICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuICAgcHVibGljIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHtcclxuICAgICBzdXBlcihjZHIpXHJcbiAgICAgdGhpcy5vbkluaXQuc3Vic2NyaWJlKChmeERhdGEpPT57XHJcbiAgICAgICB0aGlzLl9yZWdpc3Rlcih0aGlzLnVwbG9hZEZpbGVDb250cm9sKTtcclxuICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dGlkXCIsdGhpcy5nZXRDb250ZXh0QmFzZUlkKCkpO1xyXG4gICAgIH0pXHJcbiAgIH1cclxuICAvLyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgLy8gIGNvbnNvbGUubG9nKFwiZnhjb21wXCIsdGhpcy5meENvbXBvbmVudCk7XHJcbiAgLy8gIHRoaXMuZ2V0Q29udGV4dEJhc2VJZCgpO1xyXG4gIC8vIH1cclxuIFxyXG4gXHJcbiBcclxuIFxyXG4gXHJcbiAgIHVwbG9hZGVkSW1hZ2VzOiB7IFtrZXk6IHN0cmluZ106IHsgcmVzdWx0OiBzdHJpbmcsIGZpbGU6IEZpbGUgfCBudWxsIH1bXSB9ID0ge307XHJcbiAgIGRlbGV0ZWRGaWxlczogYW55W10gPSBbXTtcclxuICBcclxuIFxyXG4gIC8vICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAvLyAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAvLyAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAvLyAgICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgIFxyXG4gIC8vICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICAgXHJcbiAgLy8gICAgICAgIC8vIEV4dHJhY3QgdXBsb2FkZXIga2V5cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBVUkwgYXJyYXlzXHJcbiAgLy8gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICAvLyAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd1cGxvYWRlci1jaGVja2JveCcpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgLy8gICAgICAgICAgICB1cGxvYWRlZEZpbGVzTWFwW2tleV0gPSB2YWx1ZTtcclxuICAvLyAgICAgICAgICB9XHJcbiAgLy8gICAgICAgIH1cclxuICAgXHJcbiAgLy8gICAgICAgIGZvciAoY29uc3QgW3VwbG9hZGVyS2V5LCB1cmxzXSBvZiBPYmplY3QuZW50cmllcyh1cGxvYWRlZEZpbGVzTWFwKSkge1xyXG4gIC8vICAgICAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogYW55IH0+W10gPSBbXTtcclxuICAgXHJcbiAgLy8gICAgICAgICAgdXJscy5mb3JFYWNoKChvcmlnaW5hbFVybDphbnkpID0+IHtcclxuICAvLyAgICAgICAgICAgIGlmIChvcmlnaW5hbFVybCkge1xyXG4gIC8vICAgICAgICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5waXBlKFxyXG4gIC8vICAgICAgICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuICAvLyAgICAgICAgICAgICAgICAgIHJlc3VsdDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgLy8gZm9yIHByZXZpZXdcclxuICAvLyAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwgICAgICAgICAgLy8gcHJlc2VydmUgb3JpZ2luYWxcclxuICAvLyAgICAgICAgICAgICAgICB9KSlcclxuICAvLyAgICAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgICAgaW1hZ2VGZXRjaGVzLnB1c2goaW1hZ2UkKTtcclxuICAvLyAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICB9KTtcclxuICAgXHJcbiAgLy8gICAgICAgICAgaWYgKGltYWdlRmV0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgICAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgICAgICAgIG5leHQ6IChpbWFnZURhdGEpID0+IHtcclxuICAvLyAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBpbWFnZURhdGEubWFwKGl0ZW0gPT4gKHtcclxuICAvLyAgICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAvLyAgICAgICAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgLy8gICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybDogaXRlbS5vcmlnaW5hbFVybCxcclxuICAvLyAgICAgICAgICAgICAgICAgIHJlc3VsdDogaXRlbS5yZXN1bHRcclxuICAvLyAgICAgICAgICAgICAgICB9KSk7XHJcbiAgIFxyXG4gIC8vICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgLy8gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgLy8gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gIC8vICAgICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBpbWFnZXMgZm9yICR7dXBsb2FkZXJLZXl9OmAsIGVycik7XHJcbiAgLy8gICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICAgIH1cclxuICAvLyAgICAgICAgfVxyXG4gIC8vICAgICAgfSk7XHJcbiAgLy8gIH1cclxuICAgXHJcblxyXG4gICBcclxuIFxyXG4gICAvLyBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgIC8vICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgLy8gICBpZiAoaW5wdXQuZmlsZXMpIHtcclxuICAgLy8gICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpbnB1dD8uZmlsZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgIC8vICAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1tpXTtcclxuICAgLy8gICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgLy8gICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gICAvLyAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKHtcclxuICAgLy8gICAgICAgICAgIGZpbGU6IGZpbGUsXHJcbiAgIC8vICAgICAgICAgICByZXN1bHQ6IGUudGFyZ2V0Py5yZXN1bHQsXHJcbiAgIC8vICAgICAgICAgICBuYW1lOiBmaWxlPy5uYW1lLFxyXG4gICAvLyAgICAgICAgICAgaWQ6IHV1aWR2NCgpXHJcbiAgIC8vICAgICAgICAgfSlcclxuICAgLy8gICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgIC8vICAgICAgICAgY29uc29sZS5sb2codGhpcy51cGxvYWRGaWxlQ29udHJvbCk7XHJcbiAgIC8vICAgICAgIH1cclxuICAgLy8gICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgIC8vICAgICB9XHJcbiAgIC8vICAgfVxyXG4gICAvLyB9XHJcblxyXG4gIC8vICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIC8vIEV4dHJhY3QgdXBsb2FkZXIga2V5cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBVUkwgYXJyYXlzIGFuZCBzdG9yZSB0aGVtIGluIHVwbG9hZGVkRmlsZXNNYXBcclxuICAvLyAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gIC8vICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgLy8gICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuICBcclxuICAvLyAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICBcclxuICAvLyAgICAgICAvLyBFeHRyYWN0IHVwbG9hZGVyIGtleXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgVVJMIGFycmF5c1xyXG4gIC8vICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICAvLyAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3VwbG9hZGVyLWNoZWNrYm94JykgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAvLyAgICAgICAgICAgdXBsb2FkZWRGaWxlc01hcFtrZXldID0gdmFsdWU7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIFxyXG4gIC8vICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc01hcCA9IHVwbG9hZGVkRmlsZXNNYXA7IC8vIFN0b3JlIHRoZSBtYXAgZm9yIGxhdGVyIHVzZVxyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKFwiZnhjb21wXCIsIHRoaXMuZnhDb21wb25lbnQpO1xyXG5cclxuICAvLyAgIGNvbnN0IGtleSA9IHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8ubmFtZTtcclxuXHJcbiAgLy8gICBpZiAoa2V5ICYmIHRoaXMudXBsb2FkZWRGaWxlc01hcD8uW2tleV0pIHtcclxuICAvLyAgICAgY29uc3QgdXJscyA9IHRoaXMudXBsb2FkZWRGaWxlc01hcFtrZXldO1xyXG4gIC8vICAgICBjb25zdCBpbWFnZUZldGNoZXM6IE9ic2VydmFibGU8eyByZXN1bHQ6IHN0cmluZzsgb3JpZ2luYWxVcmw6IGFueSB9PltdID0gW107XHJcblxyXG4gIC8vICAgICB1cmxzLmZvckVhY2goKG9yaWdpbmFsVXJsOiBhbnkpID0+IHtcclxuICAvLyAgICAgICBpZiAob3JpZ2luYWxVcmwpIHtcclxuICAvLyAgICAgICAgIGNvbnN0IGltYWdlJCA9IHRoaXMuaHR0cC5nZXQob3JpZ2luYWxVcmw/Lm9yaWdpbmFsVXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuICAvLyAgICAgICAgICAgICByZXN1bHQ6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksXHJcbiAgLy8gICAgICAgICAgICAgb3JpZ2luYWxVcmw6IG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybFxyXG4gIC8vICAgICAgICAgICB9KSlcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcblxyXG4gIC8vICAgICBpZiAoaW1hZ2VGZXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgICBuZXh0OiAoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGltYWdlRGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4gIC8vICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAvLyAgICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gIC8vICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBpdGVtLm9yaWdpbmFsVXJsLFxyXG4gIC8vICAgICAgICAgICAgIHJlc3VsdDogaXRlbS5yZXN1bHRcclxuICAvLyAgICAgICAgICAgfSkpO1xyXG5cclxuICAvLyAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gWy4uLnRoaXMudXBsb2FkZWRGaWxlcywgLi4uZm9ybWF0dGVkXTtcclxuICAvLyAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgLy8gICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAvLyAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gIC8vICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke2tleX06YCwgZXJyKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgY29uc29sZS5lcnJvcignTm8gZmlsZXMgZm91bmQgZm9yIHRoZSBwcm92aWRlZCBrZXk6Jywga2V5KTtcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICB0aGlzLmdldENvbnRleHRCYXNlSWQoKTtcclxuICAvLyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gRXh0cmFjdCB1cGxvYWRlciBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGZpbGUgb2JqZWN0cyBhbmQgc3RvcmUgdGhlbSBpbiB1cGxvYWRlZEZpbGVzTWFwXHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgXHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWFwIHRvIHN0b3JlIHRoZSBzdHJ1Y3R1cmUgb2YgdXBsb2FkZWQgZmlsZXMgYW5kIG90aGVyIGRhdGFcclxuICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHsgdXBsb2FkZWRGaWxlczogYW55W10sIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbiB9IH0gPSB7fTtcclxuICBcclxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHZhcmlhYmxlcyB0byBleHRyYWN0IHVwbG9hZGVyIGtleXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdXBsb2FkZWQgZmlsZXMgZGF0YVxyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgc3RhcnRzIHdpdGggJ3VwbG9hZGVyLWNoZWNrYm94JyBhbmQgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgJ3VwbG9hZGVkRmlsZXMnXHJcbiAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ3VwbG9hZGVyLWNoZWNrYm94JykgJiYgKHZhbHVlIGFzIFVwbG9hZGVyRGF0YSkudXBsb2FkZWRGaWxlcykge1xyXG4gICAgICAgICAgICB1cGxvYWRlZEZpbGVzTWFwW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgdXBsb2FkZWRGaWxlczogKHZhbHVlIGFzIFVwbG9hZGVyRGF0YSkudXBsb2FkZWRGaWxlcyxcclxuICAgICAgICAgICAgICBjaGVja2JveEVuYWJsZWQ6ICh2YWx1ZSBhcyBVcGxvYWRlckRhdGEpLmNoZWNrYm94RW5hYmxlZCB8fCBmYWxzZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNNYXAgPSB1cGxvYWRlZEZpbGVzTWFwOyAvLyBTdG9yZSB0aGUgbWFwIGZvciBsYXRlciB1c2VcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiZnhjb21wXCIsIHRoaXMuZnhDb21wb25lbnQpO1xyXG4gIFxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5uYW1lO1xyXG4gIFxyXG4gICAgaWYgKGtleSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNNYXA/LltrZXldKSB7XHJcbiAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXNNYXBba2V5XT8udXBsb2FkZWRGaWxlczsgXHJcbiAgICAgIHRoaXMuY2hlY2tib3hFbmFibGVkID0gdGhpcy51cGxvYWRlZEZpbGVzTWFwW2tleV0/LmNoZWNrYm94RW5hYmxlZDsgLy8gR2V0IHRoZSB1cGxvYWRlZEZpbGVzIGFycmF5XHJcbiAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogYW55IH0+W10gPSBbXTtcclxuICBcclxuICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB1cGxvYWRlZCBmaWxlcyBhbmQgZmV0Y2ggdGhlIGltYWdlc1xyXG4gICAgICB1cGxvYWRlZEZpbGVzLmZvckVhY2goKGZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gZmlsZT8ub3JpZ2luYWxVcmw7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuICAgICAgICAgICAgICByZXN1bHQ6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksICAvLyBCbG9iIFVSTCBmb3IgcHJldmlld1xyXG4gICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBmaWxlPy5vcmlnaW5hbFVybCAgICAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIFVSTFxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgXHJcbiAgICAgIC8vIEZldGNoIGFsbCBpbWFnZXMgY29uY3VycmVudGx5IHVzaW5nIGZvcmtKb2luXHJcbiAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvcmtKb2luKGltYWdlRmV0Y2hlcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChpbWFnZURhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gaW1hZ2VEYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGl0ZW0ub3JpZ2luYWxVcmwsXHJcbiAgICAgICAgICAgICAgcmVzdWx0OiBpdGVtLnJlc3VsdFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgXHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEuY2hlY2tib3hFbmFibGVkID0gdGhpcy5jaGVja2JveEVuYWJsZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke2tleX06YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gZmlsZXMgZm91bmQgZm9yIHRoZSBwcm92aWRlZCBrZXk6Jywga2V5KTtcclxuICAgIH1cclxuICBcclxuICAgIHRoaXMuZ2V0Q29udGV4dEJhc2VJZCgpO1xyXG4gIH1cclxuICBcclxuIFxyXG4gICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgIGlmIChpbnB1dC5maWxlcykge1xyXG4gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbaV07XHJcbiAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiBcclxuICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSB7XHJcbiAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgICAgICAgb3JpZ2luYWxVcmw6IG51bGwsXHJcbiAgICAgICAgICAgICByZXN1bHQ6IGUudGFyZ2V0Py5yZXN1bHQsXHJcbiAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWVcclxuICAgICAgICAgICB9O1xyXG4gXHJcbiAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2gobmV3RmlsZSk7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLmNoZWNrYm94RW5hYmxlZCA9IHRoaXMuY2hlY2tib3hFbmFibGVkO1xyXG4gICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgICAgfTtcclxuIFxyXG4gICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgIH1cclxuIFxyXG4gXHJcbiAgIC8vIHB1YmxpYyBkZWxldGVGaWxlKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgLy8gICB0aGlzLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZT8uaWQgIT09IGlkKTtcclxuICAgLy8gfVxyXG4gXHJcbiAgIC8vIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAvLyAgIGNvbnN0IFtkZWxldGVkRmlsZV0gPSB0aGlzLnVwbG9hZGVkRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgXHJcbiAgIC8vICAgaWYgKGRlbGV0ZWRGaWxlKSB7XHJcbiAgIC8vICAgICB0aGlzLmRlbGV0ZWRGaWxlcy5wdXNoKGRlbGV0ZWRGaWxlKTtcclxuICAgLy8gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgLy8gICAgICAgLi4udGhpcy5mb3JtYXR0ZWREYXRhLFxyXG4gICAvLyAgICAgICB1cGxvYWRlZEZpbGVzOiBbLi4udGhpcy51cGxvYWRlZEZpbGVzXSxcclxuICAgLy8gICAgICAgZGVsZXRlZEZpbGVzOiBbLi4udGhpcy5kZWxldGVkRmlsZXNdXHJcbiAgIC8vICAgICB9O1xyXG4gICAvLyAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gICAvLyAgIH1cclxuICAgLy8gfVxyXG4gXHJcbiAgIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgIGNvbnN0IGRlbGV0ZWRGaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzPy5baW5kZXhdO1xyXG4gICAgIGlmICghZGVsZXRlZEZpbGUpIHJldHVybjtcclxuICAgXHJcbiAgICAgLy8gRW5zdXJlIGZvcm1hdHRlZERhdGEgZXhpc3RzIGFuZCBpbml0aWFsaXplIGlmIHVuZGVmaW5lZFxyXG4gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHRoaXMuZm9ybWF0dGVkRGF0YSB8fCB7IHVwbG9hZGVkRmlsZXM6IFtdLCBkZWxldGVkRmlsZXM6IFtdIH07XHJcbiAgIFxyXG4gICAgIC8vIEFkZCB0aGUgZGVsZXRlZCBmaWxlIHRvIHRoZSBkZWxldGVkRmlsZXMgYXJyYXlcclxuICAgICB0aGlzLmRlbGV0ZWRGaWxlcyA9IFsuLi50aGlzLmRlbGV0ZWRGaWxlcywgZGVsZXRlZEZpbGVdO1xyXG4gICBcclxuICAgICAvLyBSZW1vdmUgdGhlIGZpbGUgZnJvbSB1cGxvYWRlZEZpbGVzIHVzaW5nIGZpbHRlciBmb3IgaW1tdXRhYmlsaXR5XHJcbiAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICBcclxuICAgICAvLyBVcGRhdGUgZm9ybWF0dGVkRGF0YVxyXG4gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgICAgIC4uLnRoaXMuZm9ybWF0dGVkRGF0YSxcclxuICAgICAgIHVwbG9hZGVkRmlsZXM6IHRoaXMudXBsb2FkZWRGaWxlcyxcclxuICAgICAgIGRlbGV0ZWRGaWxlczogdGhpcy5kZWxldGVkRmlsZXMsXHJcbiAgICAgICBjaGVja2JveEVuYWJsZWQgOnRoaXMuY2hlY2tib3hFbmFibGVkXHJcbiAgICAgfTtcclxuICAgXHJcbiAgICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgdXBsb2FkRmlsZUNvbnRyb2xcclxuICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgIH1cclxuICAgXHJcbiAgIG9uQ2hlY2tib3hDaGFuZ2UoKXtcclxuICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgICAgLi4udGhpcy5mb3JtYXR0ZWREYXRhLFxyXG4gICAgICB1cGxvYWRlZEZpbGVzOiB0aGlzLnVwbG9hZGVkRmlsZXMsXHJcbiAgICAgIGRlbGV0ZWRGaWxlczogdGhpcy5kZWxldGVkRmlsZXMsXHJcbiAgICAgIGNoZWNrYm94RW5hYmxlZDp0aGlzLmNoZWNrYm94RW5hYmxlZFxyXG4gICAgfTtcclxuICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgfVxyXG4gICBcclxuIFxyXG4gICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgIHJldHVybiBbXHJcbiAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAndXBsb2FkLXRleHQnLCAkdGl0bGU6ICdVcGxvYWQgVGV4dCcsIHZhbHVlOiAnVXBsb2FkIEZpbGUnfSksXHJcbiAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY2hlY2tib3gtbGFiZWwnLCAkdGl0bGU6ICdDaGVja2JveCBMYWJlbCcsIHZhbHVlOiAnJ30pLFxyXG4gICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7a2V5OiAnbXVsdGlwbGUtdXBsb2FkJywgJHRpdGxlOiAnTXVsdGlwbGUgVXBsb2FkJywgdmFsdWU6IGZhbHNlfSwgW3tvcHRpb246ICdFbmFibGUnLCB2YWx1ZTogdHJ1ZX0sIHtvcHRpb246ICdEaXNhYmxlJywgdmFsdWU6IGZhbHNlfV0pXHJcbiAgICAgXTtcclxuICAgfVxyXG4gXHJcbiAgIHByb3RlY3RlZCB2YWxpZGF0aW9ucygpOiBGeFZhbGlkYXRpb25bXSB7XHJcbiAgICAgcmV0dXJuIFtGeFZhbGlkYXRvclNlcnZpY2UucmVxdWlyZWRdO1xyXG4gICB9XHJcblxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIiAjZnhDb21wb25lbnQ+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXSA9IFwiY2hlY2tib3hFbmFibGVkXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2NoZWNrYm94LWxhYmVsJykgfX1cclxuICAgICAgPC9sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdXBsb2FkIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yIHAtMiBwYi0wIHJvdW5kZWQtc21cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjlcIiBoZWlnaHQ9XCIyOFwiIHZpZXdCb3g9XCIwIDAgMjkgMjhcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgZD1cIk0xNC4wMDEgMy4wMDE5NUMxMS41MzIyIDMuMDAxOTUgOS4xNjcyMiAzLjg2OTU2IDcuMjM2NDEgNS4zODQxNEw3LjIzNTk4IDQuNTk2OTVDNy4yMzU5OCA0LjUyNDczIDcuMjIxNzUgNC40NTMyMSA3LjE5NDExIDQuMzg2NDhDNy4xNjY0NyA0LjMxOTc1IDcuMTI1OTYgNC4yNTkxMiA3LjA3NDg5IDQuMjA4MDRDNy4wMjM4MSA0LjE1Njk3IDYuOTYzMTggNC4xMTY0NiA2Ljg5NjQ1IDQuMDg4ODJDNi44Mjk3MiA0LjA2MTE4IDYuNzU4MiA0LjA0Njk1IDYuNjg1OTggNC4wNDY5NUM2LjYxMzc1IDQuMDQ2OTUgNi41NDIyMyA0LjA2MTE4IDYuNDc1NSA0LjA4ODgyQzYuNDA4NzcgNC4xMTY0NiA2LjM0ODE0IDQuMTU2OTcgNi4yOTcwNyA0LjIwODA0QzYuMjQ1OTkgNC4yNTkxMiA2LjIwNTQ4IDQuMzE5NzUgNi4xNzc4NCA0LjM4NjQ4QzYuMTUwMiA0LjQ1MzIxIDYuMTM1OTggNC41MjQ3MyA2LjEzNTk4IDQuNTk2OTVMNi4xMzY0MiA2LjY4NjUyQzYuMTM2NDMgNi44MzIzOSA2LjE5NDM4IDYuOTcyMjggNi4yOTc1MiA3LjA3NTQyQzYuNDAwNjcgNy4xNzg1NiA2LjU0MDU1IDcuMjM2NTEgNi42ODY0MiA3LjIzNjUySDguNzc1OThDOC44NDgyIDcuMjM2NTIgOC45MTk3MiA3LjIyMjMgOC45ODY0NSA3LjE5NDY2QzkuMDUzMTggNy4xNjcwMiA5LjExMzgxIDcuMTI2NTEgOS4xNjQ4OSA3LjA3NTQzQzkuMjE1OTYgNy4wMjQzNiA5LjI1NjQ3IDYuOTYzNzMgOS4yODQxMSA2Ljg5N0M5LjMxMTc1IDYuODMwMjcgOS4zMjU5OCA2Ljc1ODc1IDkuMzI1OTggNi42ODY1MkM5LjMyNTk4IDYuNjE0MyA5LjMxMTc1IDYuNTQyNzggOS4yODQxMSA2LjQ3NjA1QzkuMjU2NDcgNi40MDkzMiA5LjIxNTk2IDYuMzQ4NjkgOS4xNjQ4OSA2LjI5NzYxQzkuMTEzODEgNi4yNDY1NCA5LjA1MzE4IDYuMjA2MDMgOC45ODY0NSA2LjE3ODM5QzguOTE5NzIgNi4xNTA3NSA4Ljg0ODIgNi4xMzY1MiA4Ljc3NTk4IDYuMTM2NTJIOC4wNTg0QzkuNzcwMiA0Ljg0Mzg3IDExLjgzOTkgNC4xMDE5NSAxNC4wMDEgNC4xMDE5NUMxOS40NzUxIDQuMTAxOTUgMjMuOTAxIDguNTI3ODIgMjMuOTAxIDE0LjAwMkMyMy45MDEgMTkuNDc2MSAxOS40NzUxIDIzLjkwMiAxNC4wMDEgMjMuOTAyQzguNTI2ODQgMjMuOTAyIDQuMTAwOTggMTkuNDc2MSA0LjEwMDk4IDE0LjAwMkM0LjEwMDk4IDEyLjYzODEgNC4zODI2MyAxMS4yODg4IDQuOTI4NTUgMTAuMDM4OUM0Ljk4NjkxIDkuOTA1MzIgNC45ODk4MiA5Ljc1Mzk5IDQuOTM2NjUgOS42MTgyMkM0Ljg4MzQ3IDkuNDgyNDYgNC43Nzg1NSA5LjM3MzM2IDQuNjQ0OTYgOS4zMTQ5MkM0LjU3ODc3IDkuMjg1OTYgNC41MDc1MyA5LjI3MDMyIDQuNDM1MyA5LjI2ODlDNC4zNjMwNiA5LjI2NzQ3IDQuMjkxMjYgOS4yODAzIDQuMjIzOTggOS4zMDY2M0M0LjE1NjcxIDkuMzMyOTcgNC4wOTUyOCA5LjM3MjMgNC4wNDMyMSA5LjQyMjM4QzMuOTkxMTQgOS40NzI0NyAzLjk0OTQ0IDkuNTMyMzIgMy45MjA1MSA5LjU5ODUyQzMuMzEzOTMgMTAuOTg3MiAzLjAwMDk4IDEyLjQ4NjYgMy4wMDA5OCAxNC4wMDJDMy4wMDA5OCAyMC4wNzA2IDcuOTMyMzYgMjUuMDAyIDE0LjAwMSAyNS4wMDJDMjAuMDY5NiAyNS4wMDIgMjUuMDAxIDIwLjA3MDYgMjUuMDAxIDE0LjAwMkMyNS4wMDEgNy45MzMzNCAyMC4wNjk2IDMuMDAxOTUgMTQuMDAxIDMuMDAxOTVaXCJcclxuICAgICAgICAgICAgICBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICBkPVwiTTEzLjk5ODggNi4xMzk2NUM5LjY2MTYgNi4xMzk2NSA2LjEzMzc5IDkuNjY3NDYgNi4xMzM3OSAxNC4wMDQ2QzYuMTMzNzkgMTguMzQxOCA5LjY2MTYgMjEuODY5NiAxMy45OTg4IDIxLjg2OTZDMTguMzM2IDIxLjg2OTYgMjEuODYzOCAxOC4zNDE4IDIxLjg2MzggMTQuMDA0NkMyMS44NjM4IDkuNjY3NDYgMTguMzM2IDYuMTM5NjUgMTMuOTk4OCA2LjEzOTY1Wk0xMy45OTg4IDguMjI5NjVDMTQuMTQ0NyA4LjIyOTY1IDE0LjI4NDYgOC4yODc1OSAxNC4zODc3IDguMzkwNzRDMTQuNDkwOCA4LjQ5Mzg4IDE0LjU0ODggOC42MzM3OCAxNC41NDg4IDguNzc5NjVWMTMuNzc2OUwxNy41MjI3IDE2Ljc1MDhDMTcuNjI1OCAxNi44NTM5IDE3LjY4MzcgMTYuOTkzOCAxNy42ODM3IDE3LjEzOTZDMTcuNjgzNyAxNy4yODU1IDE3LjYyNTggMTcuNDI1NCAxNy41MjI3IDE3LjUyODVDMTcuNDE5NSAxNy42MzE2IDE3LjI3OTYgMTcuNjg5NiAxNy4xMzM4IDE3LjY4OTZDMTYuOTg3OSAxNy42ODk2IDE2Ljg0ODEgMTcuNjMxNiAxNi43NDQ5IDE3LjUyODVMMTMuNjA5OSAxNC4zOTM1QzEzLjUwNjggMTQuMjkwNCAxMy40NDg4IDE0LjE1MDUgMTMuNDQ4OCAxNC4wMDQ2VjguNzc5NjVDMTMuNDQ4OCA4LjYzMzc4IDEzLjUwNjcgOC40OTM4OCAxMy42MDk5IDguMzkwNzRDMTMuNzEzIDguMjg3NTkgMTMuODUyOSA4LjIyOTY1IDEzLjk5ODggOC4yMjk2NVpcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCIjRjNBMDQxXCIgLz5cclxuICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyOC41NlwiIGhlaWdodD1cIjI4XCIgcng9XCIxLjUxNDc5XCIgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMTUuMDY4IDIyLjczOTFWMTcuNjcwOEgxOC40OTY4TDE0LjIxMDggMTIuNjAyNUw5LjkyNDggMTcuNjcwOEgxMy4zNTM2VjIyLjczOTFIOS4wNjc1OVYyMi42OTY5QzguOTIzNTggMjIuNzA1MyA4Ljc4NjQzIDIyLjczOTEgOC42Mzg5OSAyMi43MzkxQzYuOTMzOTEgMjIuNzM5MSA1LjI5ODY2IDIyLjA3MTcgNC4wOTI5OCAyMC44ODM1QzIuODg3MyAxOS42OTU0IDIuMjA5OTYgMTguMDg0IDIuMjA5OTYgMTYuNDAzN0MyLjIwOTk2IDEzLjE1MzIgNC43MDQ0MyAxMC41MDQyIDcuOTA1MjMgMTAuMTQxQzguMTg1ODUgOC42OTUzIDguOTY4OTIgNy4zOTExOCAxMC4xMTk3IDYuNDUyOTJDMTEuMjcwNiA1LjUxNDY1IDEyLjcxNzIgNS4wMDA4OSAxNC4yMTA4IDVDMTUuNzA0NyA1LjAwMDgyIDE3LjE1MTUgNS41MTQ1MiAxOC4zMDI2IDYuNDUyNzdDMTkuNDUzNyA3LjM5MTAxIDIwLjIzNzEgOC42OTUxNiAyMC41MTgxIDEwLjE0MUMyMy43MTg5IDEwLjUwNDIgMjYuMjEgMTMuMTUzMiAyNi4yMSAxNi40MDM3QzI2LjIxIDE4LjA4NCAyNS41MzI2IDE5LjY5NTQgMjQuMzI2OSAyMC44ODM1QzIzLjEyMTMgMjIuMDcxNyAyMS40ODYgMjIuNzM5MSAxOS43ODA5IDIyLjczOTFDMTkuNjM2OSAyMi43MzkxIDE5LjQ5ODEgMjIuNzA1MyAxOS4zNTIzIDIyLjY5NjlWMjIuNzM5MUgxNS4wNjhaXCJcclxuICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiIGNsYXNzPVwidGV4dC1iYXNlIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICB7eyBzZXR0aW5nKCd1cGxvYWQtdGV4dCcpIH19XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBbbXVsdGlwbGVdPVwic2V0dGluZygnbXVsdGlwbGUtdXBsb2FkJylcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiBoaWRkZW4gLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1saXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC00IGZsZXgtd3JhcFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1cGxvYWRlZEZpbGVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2FkZWRGaWxlczsgbGV0IGkgPSBpbmRleFwiIChjbGljayk9XCJkZWxldGVGaWxlKGkpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VfaWNvbiBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjgzN18yOTY4MylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hc2sgaWQ9XCJtYXNrMF82ODM3XzI5NjgzXCIgc3R5bGU9XCJtYXNrLXR5cGU6YWxwaGFcIiBtYXNrVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cIiNEOUQ5RDlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWFzaz5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBtYXNrPVwidXJsKCNtYXNrMF82ODM3XzI5NjgzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjIwNDUgOC45OTgxNUw1LjgxODAyIDYuNjExNjdMNi42MTM1MSA1LjgxNjE3TDkgOC4yMDI2NkwxMS4zODY1IDUuODE2MTdMMTIuMTgyIDYuNjExNjdMOS43OTU1IDguOTk4MTVMMTIuMTgyIDExLjM4NDZMMTEuMzg2NSAxMi4xODAxTDkgOS43OTM2NUw2LjYxMzUxIDEyLjE4MDFMNS44MTgwMiAxMS4zODQ2TDguMjA0NSA4Ljk5ODE1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzY4MzdfMjk2ODNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHJ4PVwiOVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImZpbGUtdGh1bWJuYWlsXCIgc3R5bGU9XCJib3JkZXItcmFkaXVzOiA0cHhcIiBbc3JjXT1cImZpbGU/LnJlc3VsdFwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICA8cD57e2ZpbGU/Lm5hbWV9fTwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZngtY29tcG9uZW50PiJdfQ==
|
|
@@ -1082,18 +1082,79 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1082
1082
|
// }
|
|
1083
1083
|
// }
|
|
1084
1084
|
// }
|
|
1085
|
+
// ngOnInit(): void {
|
|
1086
|
+
// // Extract uploader keys and their corresponding URL arrays and store them in uploadedFilesMap
|
|
1087
|
+
// this.fxBuilderWrapperService.variables$
|
|
1088
|
+
// .pipe(takeUntil(this.destroy$))
|
|
1089
|
+
// .subscribe((variables: any) => {
|
|
1090
|
+
// if (!variables) return;
|
|
1091
|
+
// const uploadedFilesMap: { [key: string]: string[] } = {};
|
|
1092
|
+
// // Extract uploader keys and their corresponding URL arrays
|
|
1093
|
+
// for (const [key, value] of Object.entries(variables)) {
|
|
1094
|
+
// if (key.includes('uploader-checkbox') && Array.isArray(value)) {
|
|
1095
|
+
// uploadedFilesMap[key] = value;
|
|
1096
|
+
// }
|
|
1097
|
+
// }
|
|
1098
|
+
// this.uploadedFilesMap = uploadedFilesMap; // Store the map for later use
|
|
1099
|
+
// });
|
|
1100
|
+
// }
|
|
1101
|
+
// ngAfterViewInit(): void {
|
|
1102
|
+
// console.log("fxcomp", this.fxComponent);
|
|
1103
|
+
// const key = this.fxComponent?.fxData?.name;
|
|
1104
|
+
// if (key && this.uploadedFilesMap?.[key]) {
|
|
1105
|
+
// const urls = this.uploadedFilesMap[key];
|
|
1106
|
+
// const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];
|
|
1107
|
+
// urls.forEach((originalUrl: any) => {
|
|
1108
|
+
// if (originalUrl) {
|
|
1109
|
+
// const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(
|
|
1110
|
+
// map((blob: Blob) => ({
|
|
1111
|
+
// result: URL.createObjectURL(blob),
|
|
1112
|
+
// originalUrl: originalUrl?.originalUrl
|
|
1113
|
+
// }))
|
|
1114
|
+
// );
|
|
1115
|
+
// imageFetches.push(image$);
|
|
1116
|
+
// }
|
|
1117
|
+
// });
|
|
1118
|
+
// if (imageFetches.length > 0) {
|
|
1119
|
+
// forkJoin(imageFetches).subscribe({
|
|
1120
|
+
// next: (imageData) => {
|
|
1121
|
+
// const formatted = imageData.map(item => ({
|
|
1122
|
+
// id: uuidv4(),
|
|
1123
|
+
// file: null,
|
|
1124
|
+
// originalUrl: item.originalUrl,
|
|
1125
|
+
// result: item.result
|
|
1126
|
+
// }));
|
|
1127
|
+
// this.uploadedFiles = [...this.uploadedFiles, ...formatted];
|
|
1128
|
+
// this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
1129
|
+
// this.uploadFileControl.setValue(this.formattedData);
|
|
1130
|
+
// },
|
|
1131
|
+
// error: (err) => {
|
|
1132
|
+
// console.error(`Failed to fetch images for ${key}:`, err);
|
|
1133
|
+
// }
|
|
1134
|
+
// });
|
|
1135
|
+
// }
|
|
1136
|
+
// } else {
|
|
1137
|
+
// console.error('No files found for the provided key:', key);
|
|
1138
|
+
// }
|
|
1139
|
+
// this.getContextBaseId();
|
|
1140
|
+
// }
|
|
1085
1141
|
ngOnInit() {
|
|
1086
|
-
// Extract uploader keys and their corresponding
|
|
1142
|
+
// Extract uploader keys and their corresponding file objects and store them in uploadedFilesMap
|
|
1087
1143
|
this.fxBuilderWrapperService.variables$
|
|
1088
1144
|
.pipe(takeUntil(this.destroy$))
|
|
1089
1145
|
.subscribe((variables) => {
|
|
1090
1146
|
if (!variables)
|
|
1091
1147
|
return;
|
|
1148
|
+
// Initialize the map to store the structure of uploaded files and other data
|
|
1092
1149
|
const uploadedFilesMap = {};
|
|
1093
|
-
//
|
|
1150
|
+
// Iterate over the variables to extract uploader keys and their corresponding uploaded files data
|
|
1094
1151
|
for (const [key, value] of Object.entries(variables)) {
|
|
1095
|
-
if
|
|
1096
|
-
|
|
1152
|
+
// Check if the key starts with 'uploader-checkbox' and if value is an object containing 'uploadedFiles'
|
|
1153
|
+
if (key.startsWith('uploader-checkbox') && value.uploadedFiles) {
|
|
1154
|
+
uploadedFilesMap[key] = {
|
|
1155
|
+
uploadedFiles: value.uploadedFiles,
|
|
1156
|
+
checkboxEnabled: value.checkboxEnabled || false
|
|
1157
|
+
};
|
|
1097
1158
|
}
|
|
1098
1159
|
}
|
|
1099
1160
|
this.uploadedFilesMap = uploadedFilesMap; // Store the map for later use
|
|
@@ -1103,17 +1164,21 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1103
1164
|
console.log("fxcomp", this.fxComponent);
|
|
1104
1165
|
const key = this.fxComponent?.fxData?.name;
|
|
1105
1166
|
if (key && this.uploadedFilesMap?.[key]) {
|
|
1106
|
-
const
|
|
1167
|
+
const uploadedFiles = this.uploadedFilesMap[key]?.uploadedFiles;
|
|
1168
|
+
this.checkboxEnabled = this.uploadedFilesMap[key]?.checkboxEnabled; // Get the uploadedFiles array
|
|
1107
1169
|
const imageFetches = [];
|
|
1108
|
-
|
|
1170
|
+
// Iterate over the uploaded files and fetch the images
|
|
1171
|
+
uploadedFiles.forEach((file) => {
|
|
1172
|
+
const originalUrl = file?.originalUrl;
|
|
1109
1173
|
if (originalUrl) {
|
|
1110
|
-
const image$ = this.http.get(originalUrl
|
|
1111
|
-
result: URL.createObjectURL(blob),
|
|
1112
|
-
originalUrl:
|
|
1174
|
+
const image$ = this.http.get(originalUrl, { responseType: 'blob' }).pipe(map((blob) => ({
|
|
1175
|
+
result: URL.createObjectURL(blob), // Blob URL for preview
|
|
1176
|
+
originalUrl: file?.originalUrl // Preserve the original URL
|
|
1113
1177
|
})));
|
|
1114
1178
|
imageFetches.push(image$);
|
|
1115
1179
|
}
|
|
1116
1180
|
});
|
|
1181
|
+
// Fetch all images concurrently using forkJoin
|
|
1117
1182
|
if (imageFetches.length > 0) {
|
|
1118
1183
|
forkJoin(imageFetches).subscribe({
|
|
1119
1184
|
next: (imageData) => {
|
|
@@ -1125,6 +1190,7 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1125
1190
|
}));
|
|
1126
1191
|
this.uploadedFiles = [...this.uploadedFiles, ...formatted];
|
|
1127
1192
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
1193
|
+
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
1128
1194
|
this.uploadFileControl.setValue(this.formattedData);
|
|
1129
1195
|
},
|
|
1130
1196
|
error: (err) => {
|
|
@@ -1154,6 +1220,7 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1154
1220
|
};
|
|
1155
1221
|
this.uploadedFiles.push(newFile);
|
|
1156
1222
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
1223
|
+
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
1157
1224
|
this.uploadFileControl.setValue(this.formattedData);
|
|
1158
1225
|
};
|
|
1159
1226
|
reader.readAsDataURL(file);
|
|
@@ -1189,7 +1256,8 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1189
1256
|
this.formattedData = {
|
|
1190
1257
|
...this.formattedData,
|
|
1191
1258
|
uploadedFiles: this.uploadedFiles,
|
|
1192
|
-
deletedFiles: this.deletedFiles
|
|
1259
|
+
deletedFiles: this.deletedFiles,
|
|
1260
|
+
checkboxEnabled: this.checkboxEnabled
|
|
1193
1261
|
};
|
|
1194
1262
|
// Set the value of the uploadFileControl
|
|
1195
1263
|
this.uploadFileControl.setValue(this.formattedData);
|