nuxeo-development-framework 5.8.8 → 5.8.9
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/bundles/nuxeo-development-framework.umd.js +53 -18
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/documents/services/documents.service.js +51 -18
- package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +5 -2
- package/fesm2015/nuxeo-development-framework.js +53 -18
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/dynamic-search/dynamic-search/dynamic-search.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@ import { EventEmitter, Inject, Injectable } from '@angular/core';
|
|
|
2
2
|
import { combineLatest, from, ReplaySubject, Subject } from 'rxjs';
|
|
3
3
|
import { catchError, map, switchMap } from 'rxjs/operators';
|
|
4
4
|
import { DocumentsConstants } from '../constants/documents';
|
|
5
|
+
import { NuxeoOverride as Nuxeo } from '../../../core/services/nuxeo/nuxeo-override';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../../../core/services/nuxeo/nuxeo.service";
|
|
7
8
|
import * as i2 from "../../../core/adapters/adapter.service";
|
|
@@ -170,26 +171,55 @@ export class DocumentsService {
|
|
|
170
171
|
return combineLatest([
|
|
171
172
|
...files.map((file, idx) => {
|
|
172
173
|
const nuxeoBlob = this.nuxeoService.createBlob(file);
|
|
173
|
-
const fileName = file.name;
|
|
174
|
-
const batch = this.nuxeoService.nuxeoClient.batchUpload();
|
|
174
|
+
// const fileName = file.name;
|
|
175
|
+
// const batch = this.nuxeoService.nuxeoClient.batchUpload();
|
|
175
176
|
if (Object.keys(extraHeaders).length != 0) {
|
|
176
177
|
// Custom upload with headers
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
};
|
|
183
|
-
return from(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
178
|
+
let batch = this.nuxeoService.nuxeoClient.batchUpload();
|
|
179
|
+
const blob = new Nuxeo.Blob({
|
|
180
|
+
content: file,
|
|
181
|
+
name: file.name,
|
|
182
|
+
mimeType: 'application/octet-stream'
|
|
183
|
+
});
|
|
184
|
+
return from(batch.upload(blob, {
|
|
185
|
+
chunkSize: (nuxeoBlob.size * 1.5),
|
|
186
|
+
useFormData: false,
|
|
187
|
+
headers: {
|
|
188
|
+
'Content-Type': 'application/octet-stream',
|
|
189
|
+
'Cache-Control': 'no-cache',
|
|
190
|
+
'X-File-Name': encodeURIComponent(nuxeoBlob.name),
|
|
191
|
+
'X-File-Size': nuxeoBlob.size,
|
|
192
|
+
'X-File-Type': nuxeoBlob.mimeType,
|
|
193
|
+
'Content-Length': nuxeoBlob.size,
|
|
194
|
+
'X-Batch-No-Drop': true,
|
|
195
|
+
}
|
|
192
196
|
}));
|
|
197
|
+
// const getBatchId = () => {
|
|
198
|
+
// return this.nuxeoService.nuxeoClient._http({
|
|
199
|
+
// method: 'POST',
|
|
200
|
+
// url: `${this.environment.nuxeo}/api/v1/upload`,
|
|
201
|
+
// }).then((res: any) => res.batchId);
|
|
202
|
+
// };
|
|
203
|
+
// return from(
|
|
204
|
+
// getBatchId().then((batchId) => {
|
|
205
|
+
// const opts = {
|
|
206
|
+
// json: false,
|
|
207
|
+
// method: 'POST',
|
|
208
|
+
// url: `${this.environment.nuxeo}/api/v1/upload/${batchId}/${idx}`,
|
|
209
|
+
// body: nuxeoBlob.content,
|
|
210
|
+
// headers: {
|
|
211
|
+
// ...extraHeaders,
|
|
212
|
+
// 'Cache-Control': 'no-cache',
|
|
213
|
+
// 'X-File-Name': encodeURIComponent(nuxeoBlob.name),
|
|
214
|
+
// 'X-File-Size': nuxeoBlob.size,
|
|
215
|
+
// 'X-File-Type': nuxeoBlob.mimeType,
|
|
216
|
+
// 'Content-Length': nuxeoBlob.size,
|
|
217
|
+
// 'X-Batch-No-Drop': true,
|
|
218
|
+
// },
|
|
219
|
+
// };
|
|
220
|
+
// return this.nuxeoService.nuxeoClient._http(opts);
|
|
221
|
+
// })
|
|
222
|
+
// );
|
|
193
223
|
}
|
|
194
224
|
else {
|
|
195
225
|
return from(this.nuxeoService.nuxeoClient.batchUpload().upload(nuxeoBlob));
|
|
@@ -198,6 +228,9 @@ export class DocumentsService {
|
|
|
198
228
|
]).pipe(map((uploadedFiles) => {
|
|
199
229
|
files.forEach((file, i) => {
|
|
200
230
|
uploadedFiles[i].title = file.name;
|
|
231
|
+
if (uploadedFiles[i]['blobs']) {
|
|
232
|
+
uploadedFiles[i]['blob'] = Object.assign({}, uploadedFiles[i]['blobs'][0]);
|
|
233
|
+
}
|
|
201
234
|
});
|
|
202
235
|
return uploadedFiles;
|
|
203
236
|
}));
|
|
@@ -243,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
243
276
|
type: Inject,
|
|
244
277
|
args: ['environment']
|
|
245
278
|
}] }]; } });
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9zZXJ2aWNlcy9kb2N1bWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFFNUQsY0FBYztBQUlkLE1BQU0sT0FBTyxnQkFBZ0I7SUFNM0IsWUFDVSxZQUEwQixFQUMxQixnQkFBZ0MsRUFDaEMsYUFBK0IsRUFBaUMsV0FBVztRQUYzRSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUFpQyxnQkFBVyxHQUFYLFdBQVcsQ0FBQTtRQVJyRixVQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvQyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQU8vQixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGdCQUFnQjtZQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLFlBQVk7SUFDZCxDQUFD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QyxDQUNILENBQUM7SUFDSixDQUFDO0lBQ0QsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDNUMsT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXO2FBQzFCLFVBQVUsRUFBRTtZQUNiLGdDQUFnQzthQUMvQixLQUFLLGlCQUVGLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSTtZQUM1RCxzQ0FBc0M7WUFDdEMsd0JBQXdCLEVBQUUsVUFBVSxJQUNqQyxNQUFNLEdBRVg7WUFDRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU87U0FDM0QsQ0FDRixDQUNKLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs4R0F2WFUsZ0JBQWdCLDRHQVN3QixhQUFhO2tIQVRyRCxnQkFBZ0IsY0FGZixNQUFNOzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVU2QyxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlndXJhdGlvbi9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWRhcHRlcnMvYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRzQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2RvY3VtZW50cyc7XHJcblxyXG4vKiogQGlnbm9yZSAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRzU2VydmljZSB7XHJcbiAgdmFsdWUgPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcclxuICBwdWJsaWMgZ2V0dXBkYXRlZERvY3VtZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICByZUZldGNoID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBpbmNvbWluZ0NvbnN0YW50O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBudXhlb1NlcnZpY2U6IE51eGVvU2VydmljZSxcclxuICAgIHByaXZhdGUgZG9jdW1lbnRzQWRhcHRlcjogQWRhcHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudFxyXG4gICkge1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICB0aGlzLmluY29taW5nQ29uc3RhbnQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubXlDb25maWd1cmF0aW9uWydjb3JyZXNwb25kYW5jZSddWydpbmNvbWluZyddO1xyXG4gICAgLy8gfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICBpbmZvcm1WYWx1ZSh2YWx1ZSkge1xyXG4gICAgbGV0IGFyciA9IFtdO1xyXG4gICAgYXJyLnB1c2godmFsdWUpO1xyXG4gICAgdGhpcy52YWx1ZS5uZXh0KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0RG9jdW1lbnQodWlkLCBoZWFkZXJzPykge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLnJlcG9zaXRvcnkoKVxyXG4gICAgICAgIC5oZWFkZXJzKHtcclxuICAgICAgICAgIC4uLkRvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuY29tbWl0dGVlLmhlYWRlcnMsXHJcbiAgICAgICAgICAnWC1OWGZldGNoLWRvY3VtZW50JzogJ2xvY2ssZGM6Y3JlYXRvcixjb3JyOmNjLGN0c19jb21tb246ZGVwYXJ0bWVudCxjb3JyOm93bmVyJyxcclxuICAgICAgICAgICdYLU5YZW5yaWNoZXJzLWRvY3VtZW50JzogJ3RhZ3MscGVybWlzc2lvbnMnLFxyXG4gICAgICAgICAgLi4uaGVhZGVyc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZldGNoKHVpZClcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBpIGNvbW1lbnRlZCB0aGlzIHNpbmNlIGkgYW0gYWRhcHRpbmcgaW4gZGF0YSBjb21pbmcgaW5zaWRlIHRoZSBwYWdlIG5vdCBoZXJlXHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuZG9jdW1lbnRzQWRhcHRlci5hZGFwdEluKGRhdGEsIERvY3VtZW50c0NvbnN0YW50cy5maWVsZHMpO1xyXG4gICAgICAgIGRlbGV0ZSBkYXRhLl9udXhlbztcclxuICAgICAgICBkZWxldGUgZGF0YS5fcmVwb3NpdG9yeTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldERvY3VtZW50QXR0YWNobWVudHNXaXRoQWdncmVnYXRpb24ocGFyYW1zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnJlcG9zaXRvcnkoKS5xdWVyeShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYWdlUHJvdmlkZXI6XHJcbiAgICAgICAgICAgIERvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuZG9jdW1lbnRBdHRhY2htZW50c1dpdGhBZ2dyZWdhdGlvblxyXG4gICAgICAgICAgICAgIC5uYW1lLFxyXG4gICAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczpcclxuICAgICAgICAgICAgRG9jdW1lbnRzQ29uc3RhbnRzLnBhZ2VQcm92aWRlci5kb2N1bWVudEF0dGFjaG1lbnRzV2l0aEFnZ3JlZ2F0aW9uXHJcbiAgICAgICAgICAgICAgLmhlYWRlcnMsXHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgZGF0YS5lbnRyaWVzLm1hcCgoaXRlbSkgPT5cclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRzQWRhcHRlci5hZGFwdEluKGl0ZW0sIERvY3VtZW50c0NvbnN0YW50cy5maWVsZHMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIHVwZGF0ZURvY3VtZW50KGRvYywgcGFyYW1zID0ge30pIHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5yZXBvc2l0b3J5KClcclxuICAgICAgICAuaGVhZGVycyh7XHJcbiAgICAgICAgICAuLi5Eb2N1bWVudHNDb25zdGFudHMucGFnZVByb3ZpZGVyLmNvbW1pdHRlZS5oZWFkZXJzLFxyXG4gICAgICAgICAgJ2ZldGNoLWRvY3VtZW50JzogJ2xvY2ssY29tbTpjb21taXR0ZWVJZCxjb21tOm1lZXRpbmdJZCcsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAudXBkYXRlKGRvYywgcGFyYW1zKVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50c0FkYXB0ZXIuYWRhcHRJbihkYXRhLCBEb2N1bWVudHNDb25zdGFudHMuZmllbGRzKTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGNyZWF0ZVZlcnNpb24oZG9jSWQsIHZlcnNpb24gPSAnbWFqb3InLCBjdXN0b21BcGk/LCBjdXN0b21QYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5vcGVyYXRpb24oY3VzdG9tQXBpID8gY3VzdG9tQXBpIDogRG9jdW1lbnRzQ29uc3RhbnRzLm9wZXJhdGlvbnMuY3JlYXRlVmVyc2lvbiwge1xyXG4gICAgICAgICAgdXJsOiBgJHt0aGlzLmVudmlyb25tZW50Lm51eGVvfSR7dGhpcy5lbnZpcm9ubWVudC5jdXN0b21BdXRvbWF0aW9ufWAsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuaW5wdXQoZG9jSWQpXHJcbiAgICAgICAgLnBhcmFtcyhjdXN0b21QYXJhbXMgPyBjdXN0b21QYXJhbXMgOiB7IHZlcnNpb24sIH0pXHJcbiAgICAgICAgLmV4ZWN1dGUoKVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVNZW1vVmVyc2lvbihkb2NJZCwgdmVyc2lvbiA9ICdtYWpvcicpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLm9wZXJhdGlvbihEb2N1bWVudHNDb25zdGFudHMub3BlcmF0aW9ucy5jcmVhdGVNZW1vVmVyc2lvbiwge1xyXG4gICAgICAgICAgdXJsOiBgJHt0aGlzLmVudmlyb25tZW50Lm51eGVvfSR7dGhpcy5lbnZpcm9ubWVudC5jdXN0b21BdXRvbWF0aW9ufWAsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuaW5wdXQoZG9jSWQpXHJcbiAgICAgICAgLnBhcmFtcyh7XHJcbiAgICAgICAgICB2ZXJzaW9uLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmV4ZWN1dGUoKVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRWZXJzaW9ucyhkb2NJZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKERvY3VtZW50c0NvbnN0YW50cy5vcGVyYXRpb25zLmdldFZlcnNpb25zKVxyXG4gICAgICAgIC5pbnB1dChkb2NJZClcclxuICAgICAgICAucGFyYW1zKClcclxuICAgICAgICAuZXhlY3V0ZSh7XHJcbiAgICAgICAgICBoZWFkZXJzOiBEb2N1bWVudHNDb25zdGFudHMucGFnZVByb3ZpZGVyLmNvbW1pdHRlZS5oZWFkZXJzLFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgZGF0YS5lbnRyaWVzLm1hcCgoaXRlbSkgPT5cclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRzQWRhcHRlci5hZGFwdEluKGl0ZW0sIHRoaXMuaW5jb21pbmdDb25zdGFudC5hdHRhY2htZW50cylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBsb2NrRG9jdW1lbnQoZG9jSWQsIG1vZGUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLm9wZXJhdGlvbihEb2N1bWVudHNDb25zdGFudHMub3BlcmF0aW9ucy5sb2NrKVxyXG4gICAgICAgIC5pbnB1dChkb2NJZClcclxuICAgICAgICAucGFyYW1zKHtcclxuICAgICAgICAgIG1vZGU6IG1vZGUsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZXhlY3V0ZSh7XHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIC4uLkRvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuY29tbWl0dGVlLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICdYLU5YZmV0Y2gtZG9jdW1lbnQnOiAnbG9jayxkYzpjcmVhdG9yLGNvcnI6b3duZXIsY3RzX2NvbW1vbjpkZXBhcnRtZW50JyxcclxuICAgICAgICAgICAgJ1gtTlhlbnJpY2hlcnMtZG9jdW1lbnQnOiAndGFncycsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtXHJcbiAgICAgICAgLy9yZW1vdmUgYWRhcHRlIHNpbmNlIGl0IGlzIGNvdXNpbmcgY29uZmxpY3RzIHdoZW4gZW1pdGluZyBvdXQgc2lkZSBhbmQgcmVhZGFwdGluZyBhZ2FpbiBvdXRzaWRlXHJcbiAgICAgICAgLy8gdGhpcy5kb2N1bWVudHNBZGFwdGVyLmFkYXB0SW4oaXRlbSwgRG9jdW1lbnRzQ29uc3RhbnRzLmZpZWxkcylcclxuICAgICAgfVxyXG4gICAgICApLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1bmxvY2tEb2N1bWVudChkb2NJZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKERvY3VtZW50c0NvbnN0YW50cy5vcGVyYXRpb25zLnVubG9jaylcclxuICAgICAgICAuaW5wdXQoZG9jSWQpXHJcbiAgICAgICAgLnBhcmFtcygpXHJcbiAgICAgICAgLmV4ZWN1dGUoe1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAuLi5Eb2N1bWVudHNDb25zdGFudHMucGFnZVByb3ZpZGVyLmNvbW1pdHRlZS5oZWFkZXJzLFxyXG4gICAgICAgICAgICAnWC1OWGZldGNoLWRvY3VtZW50JzogJ2xvY2ssZGM6Y3JlYXRvcicsXHJcbiAgICAgICAgICAgICdYLU5YZW5yaWNoZXJzLWRvY3VtZW50JzogJ3RhZ3MnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAvL3JlbW92ZSBhZGFwdGUgc2luY2UgaXQgaXMgY291c2luZyBjb25mbGljdHMgd2hlbiBlbWl0aW5nIG91dCBzaWRlIGFuZCByZWFkYXB0aW5nIGFnYWluIG91dHNpZGVcclxuICAgICAgICAvLyB0aGlzLmRvY3VtZW50c0FkYXB0ZXIuYWRhcHRJbihpdGVtLCBEb2N1bWVudHNDb25zdGFudHMuZmllbGRzKVxyXG4gICAgICB9XHJcbiAgICAgICksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvY2tNZW1vRG9jdW1lbnQoZG9jSWQpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLm9wZXJhdGlvbihEb2N1bWVudHNDb25zdGFudHMub3BlcmF0aW9ucy5sb2NrTWVtbylcclxuICAgICAgICAuaW5wdXQoZG9jSWQpXHJcbiAgICAgICAgLnBhcmFtcygpXHJcbiAgICAgICAgLmV4ZWN1dGUoe1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAuLi5Eb2N1bWVudHNDb25zdGFudHMucGFnZVByb3ZpZGVyLmNvbW1pdHRlZS5oZWFkZXJzLFxyXG4gICAgICAgICAgICAnWC1OWGZldGNoLWRvY3VtZW50JzogJ2xvY2ssZGM6Y3JlYXRvcicsXHJcbiAgICAgICAgICAgICdYLU5YZW5yaWNoZXJzLWRvY3VtZW50JzogJ3RhZ3MnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoaXRlbSA9PiB7IHJldHVybiBpdGVtIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1bmxvY2tNZW1vRG9jdW1lbnQoZG9jSWQpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLm9wZXJhdGlvbihEb2N1bWVudHNDb25zdGFudHMub3BlcmF0aW9ucy51bmxvY2tNZW1vKVxyXG4gICAgICAgIC5pbnB1dChkb2NJZClcclxuICAgICAgICAucGFyYW1zKClcclxuICAgICAgICAuZXhlY3V0ZSh7XHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIC4uLkRvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuY29tbWl0dGVlLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICdYLU5YZmV0Y2gtZG9jdW1lbnQnOiAnbG9jayxkYzpjcmVhdG9yJyxcclxuICAgICAgICAgICAgJ1gtTlhlbnJpY2hlcnMtZG9jdW1lbnQnOiAndGFncycsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcChpdGVtID0+IHsgcmV0dXJuIGl0ZW0gfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZURvY3VtZW50KHBhdGg6IGFueSkge1xyXG4gICAgcmV0dXJuIGZyb20odGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQucmVwb3NpdG9yeSgpLmRlbGV0ZShwYXRoKSkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZEJhdGNoKGZpbGVzLCBleHRyYUhlYWRlcnMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXHJcbiAgICAgIC4uLmZpbGVzLm1hcCgoZmlsZSxpZHgpID0+IHtcclxuICAgICAgICBjb25zdCBudXhlb0Jsb2IgPSB0aGlzLm51eGVvU2VydmljZS5jcmVhdGVCbG9iKGZpbGUpO1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQuYmF0Y2hVcGxvYWQoKTtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZXh0cmFIZWFkZXJzKS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgLy8gQ3VzdG9tIHVwbG9hZCB3aXRoIGhlYWRlcnNcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgY29uc3QgZ2V0QmF0Y2hJZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50Ll9odHRwKHtcclxuICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99L2FwaS92MS91cGxvYWRgLFxyXG4gICAgICAgICAgICB9KS50aGVuKChyZXM6IGFueSkgPT4gcmVzLmJhdGNoSWQpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIGdldEJhdGNoSWQoKS50aGVuKChiYXRjaElkKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99L2FwaS92MS91cGxvYWQvJHtiYXRjaElkfS8ke2lkeH1gLFxyXG4gICAgICAgICAgICAgICAgYm9keTogbnV4ZW9CbG9iLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmV4dHJhSGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnLFxyXG4gICAgICAgICAgICAgICAgICAnWC1GaWxlLU5hbWUnOiBlbmNvZGVVUklDb21wb25lbnQobnV4ZW9CbG9iLm5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAnWC1GaWxlLVNpemUnOiBudXhlb0Jsb2Iuc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgJ1gtRmlsZS1UeXBlJzogbnV4ZW9CbG9iLm1pbWVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBudXhlb0Jsb2Iuc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgJ1gtQmF0Y2gtTm8tRHJvcCc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50Ll9odHRwKG9wdHMpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LmJhdGNoVXBsb2FkKCkudXBsb2FkKG51eGVvQmxvYilcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXSkucGlwZShcclxuICAgICAgbWFwKCh1cGxvYWRlZEZpbGVzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUsIGkpID0+IHtcclxuICAgICAgICAgIHVwbG9hZGVkRmlsZXNbaV0udGl0bGUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHVwbG9hZGVkRmlsZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRG9jKHVwbG9hZGVkRmlsZSwgcGF0aCwgcGFyYW1zLCBkb2NQYXJhbXMgPSB7fSkge1xyXG4gICAgY29uc3QgZG9jID0ge1xyXG4gICAgICAnZW50aXR5LXR5cGUnOiAnZG9jdW1lbnQnLFxyXG4gICAgICBuYW1lOiB1cGxvYWRlZEZpbGUudGl0bGUsXHJcbiAgICAgIHR5cGU6ICdmaWxlJyxcclxuICAgICAgLi4uZG9jUGFyYW1zLFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgdGl0bGU6IHVwbG9hZGVkRmlsZS50aXRsZSxcclxuICAgICAgICBjb250ZW50OiB1cGxvYWRlZEZpbGUuYmxvYixcclxuICAgICAgICAuLi5wYXJhbXMsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcG8gPSB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC5yZXBvc2l0b3J5KCk7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgcmVwby5jcmVhdGUoYCR7cGF0aH1gLCB7XHJcbiAgICAgICAgLi4uZG9jLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZG9jdW1lbnRzQWRhcHRlci5hZGFwdE91dChcclxuICAgICAgICAgIGRvYy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgRG9jdW1lbnRzQ29uc3RhbnRzLmZpZWxkc1xyXG4gICAgICAgICksXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICB1cGxvYWREb2N1bWVudChmaWxlLCBwYXRoLCBwYXJhbXMsIGRvY1BhcmFtcyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnVwbG9hZEJhdGNoKGZpbGUpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgodXBsb2FkZWRGaWxlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRG9jKHVwbG9hZGVkRmlsZSwgcGF0aCwgcGFyYW1zLCBkb2NQYXJhbXMpLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKGNyZWF0ZWREb2N1bWVudCkgPT4gY3JlYXRlZERvY3VtZW50KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXREb2N1bWVudHMoYW5jZXN0b3JJZCwgcHJvdmlkZXIsIHBhcmFtcyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5yZXBvc2l0b3J5KClcclxuICAgICAgICAvLyAuZW5yaWNoZXIoJ2RvY3VtZW50JywgJ2FjbHMnKVxyXG4gICAgICAgIC5xdWVyeShcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcGFnZVByb3ZpZGVyOiBEb2N1bWVudHNDb25zdGFudHMucGFnZVByb3ZpZGVyW3Byb3ZpZGVyXS5uYW1lLFxyXG4gICAgICAgICAgICAvLyBjdF9hdHRhY2htZW50X2RvY1JlZklkOiBhbmNlc3RvcklkLFxyXG4gICAgICAgICAgICBDdHNDb21tb25fY29ycmVzcG9uZGVuY2U6IGFuY2VzdG9ySWQsXHJcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IERvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXJbcHJvdmlkZXJdLmhlYWRlcnMsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGRhdGEuZW50cmllcy5tYXAoKGl0ZW0pID0+XHJcbiAgICAgICAgICB0aGlzLmRvY3VtZW50c0FkYXB0ZXIuYWRhcHRJbihpdGVtLCB0aGlzLmluY29taW5nQ29uc3RhbnQuYXR0YWNobWVudHMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9zZXJ2aWNlcy9kb2N1bWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7OztBQUVyRixjQUFjO0FBSWQsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixZQUNVLFlBQTBCLEVBQzFCLGdCQUFnQyxFQUNoQyxhQUErQixFQUFpQyxXQUFXO1FBRjNFLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0I7UUFDaEMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQWlDLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBUnJGLFVBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0Qix1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRS9DLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBTy9CLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsZ0JBQWdCO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFD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QUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs4R0E5WVUsZ0JBQWdCLDRHQVN3QixhQUFhO2tIQVRyRCxnQkFBZ0IsY0FGZixNQUFNOzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVU2QyxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlndXJhdGlvbi9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWRhcHRlcnMvYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRzQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2RvY3VtZW50cyc7XHJcbmltcG9ydCB7IE51eGVvT3ZlcnJpZGUgYXMgTnV4ZW8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLW92ZXJyaWRlJztcclxuXHJcbi8qKiBAaWdub3JlICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudHNTZXJ2aWNlIHtcclxuICB2YWx1ZSA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gIHB1YmxpYyBnZXR1cGRhdGVkRG9jdW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHJlRmV0Y2ggPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGluY29taW5nQ29uc3RhbnQ7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG51eGVvU2VydmljZTogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb2N1bWVudHNBZGFwdGVyOiBBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSwgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50XHJcbiAgKSB7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIHRoaXMuaW5jb21pbmdDb25zdGFudCA9XHJcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5teUNvbmZpZ3VyYXRpb25bJ2NvcnJlc3BvbmRhbmNlJ11bJ2luY29taW5nJ107XHJcbiAgICAvLyB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIGluZm9ybVZhbHVlKHZhbHVlKSB7XHJcbiAgICBsZXQgYXJyID0gW107XHJcbiAgICBhcnIucHVzaCh2YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuICBnZXREb2N1bWVudCh1aWQsIGhlYWRlcnM/KSB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAucmVwb3NpdG9yeSgpXHJcbiAgICAgICAgLmhlYWRlcnMoe1xyXG4gICAgICAgICAgLi4uRG9jdW1lbnRzQ29uc3RhbnRzLnBhZ2VQcm92aWRlci5jb21taXR0ZWUuaGVhZGVycyxcclxuICAgICAgICAgICdYLU5YZmV0Y2gtZG9jdW1lbnQnOiAnbG9jayxkYzpjcmVhdG9yLGNvcnI6Y2MsY3RzX2NvbW1vbjpkZXBhcnRtZW50LGNvcnI6b3duZXInLFxyXG4gICAgICAgICAgJ1gtTlhlbnJpY2hlcnMtZG9jdW1lbnQnOiAndGFncyxwZXJtaXNzaW9ucycsXHJcbiAgICAgICAgICAuLi5oZWFkZXJzXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmV0Y2godWlkKVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGkgY29tbWVudGVkIHRoaXMgc2luY2UgaSBhbSBhZGFwdGluZyBpbiBkYXRhIGNvbWluZyBpbnNpZGUgdGhlIHBhZ2Ugbm90IGhlcmVcclxuICAgICAgICAvLyByZXR1cm4gdGhpcy5kb2N1bWVudHNBZGFwdGVyLmFkYXB0SW4oZGF0YSwgRG9jdW1lbnRzQ29uc3RhbnRzLmZpZWxkcyk7XHJcbiAgICAgICAgZGVsZXRlIGRhdGEuX251eGVvO1xyXG4gICAgICAgIGRlbGV0ZSBkYXRhLl9yZXBvc2l0b3J5O1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0RG9jdW1lbnRBdHRhY2htZW50c1dpdGhBZ2dyZWdhdGlvbihwYXJhbXMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQucmVwb3NpdG9yeSgpLnF1ZXJ5KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhZ2VQcm92aWRlcjpcclxuICAgICAgICAgICAgRG9jdW1lbnRzQ29uc3RhbnRzLnBhZ2VQcm92aWRlci5kb2N1bWVudEF0dGFjaG1lbnRzV2l0aEFnZ3JlZ2F0aW9uXHJcbiAgICAgICAgICAgICAgLm5hbWUsXHJcbiAgICAgICAgICAuLi5wYXJhbXMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOlxyXG4gICAgICAgICAgICBEb2N1bWVudHNDb25zdGFudHMucGFnZVByb3ZpZGVyLmRvY3VtZW50QXR0YWNobWVudHNXaXRoQWdncmVnYXRpb25cclxuICAgICAgICAgICAgICAuaGVhZGVycyxcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBkYXRhLmVudHJpZXMubWFwKChpdGVtKSA9PlxyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudHNBZGFwdGVyLmFkYXB0SW4oaXRlbSwgRG9jdW1lbnRzQ29uc3RhbnRzLmZpZWxkcylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgdXBkYXRlRG9jdW1lbnQoZG9jLCBwYXJhbXMgPSB7fSkge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLnJlcG9zaXRvcnkoKVxyXG4gICAgICAgIC5oZWFkZXJzKHtcclxuICAgICAgICAgIC4uLkRvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuY29tbWl0dGVlLmhlYWRlcnMsXHJcbiAgICAgICAgICAnZmV0Y2gtZG9jdW1lbnQnOiAnbG9jayxjb21tOmNvbW1pdHRlZUlkLGNvbW06bWVldGluZ0lkJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC51cGRhdGUoZG9jLCBwYXJhbXMpXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRzQWRhcHRlci5hZGFwdEluKGRhdGEsIERvY3VtZW50c0NvbnN0YW50cy5maWVsZHMpO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgY3JlYXRlVmVyc2lvbihkb2NJZCwgdmVyc2lvbiA9ICdtYWpvcicsIGN1c3RvbUFwaT8sIGN1c3RvbVBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLm9wZXJhdGlvbihjdXN0b21BcGkgPyBjdXN0b21BcGkgOiBEb2N1bWVudHNDb25zdGFudHMub3BlcmF0aW9ucy5jcmVhdGVWZXJzaW9uLCB7XHJcbiAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLmVudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YCxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5pbnB1dChkb2NJZClcclxuICAgICAgICAucGFyYW1zKGN1c3RvbVBhcmFtcyA/IGN1c3RvbVBhcmFtcyA6IHsgdmVyc2lvbiwgfSlcclxuICAgICAgICAuZXhlY3V0ZSgpXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZU1lbW9WZXJzaW9uKGRvY0lkLCB2ZXJzaW9uID0gJ21ham9yJyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKERvY3VtZW50c0NvbnN0YW50cy5vcGVyYXRpb25zLmNyZWF0ZU1lbW9WZXJzaW9uLCB7XHJcbiAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLmVudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YCxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5pbnB1dChkb2NJZClcclxuICAgICAgICAucGFyYW1zKHtcclxuICAgICAgICAgIHZlcnNpb24sXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZXhlY3V0ZSgpXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFZlcnNpb25zKGRvY0lkKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5vcGVyYXRpb24oRG9jdW1lbnRzQ29uc3RhbnRzLm9wZXJhdGlvbnMuZ2V0VmVyc2lvbnMpXHJcbiAgICAgICAgLmlucHV0KGRvY0lkKVxyXG4gICAgICAgIC5wYXJhbXMoKVxyXG4gICAgICAgIC5leGVjdXRlKHtcclxuICAgICAgICAgIGhlYWRlcnM6IERvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuY29tbWl0dGVlLmhlYWRlcnMsXHJcbiAgICAgICAgfSlcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBkYXRhLmVudHJpZXMubWFwKChpdGVtKSA9PlxyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudHNBZGFwdGVyLmFkYXB0SW4oaXRlbSwgdGhpcy5pbmNvbWluZ0NvbnN0YW50LmF0dGFjaG1lbnRzKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGxvY2tEb2N1bWVudChkb2NJZCwgbW9kZSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKERvY3VtZW50c0NvbnN0YW50cy5vcGVyYXRpb25zLmxvY2spXHJcbiAgICAgICAgLmlucHV0KGRvY0lkKVxyXG4gICAgICAgIC5wYXJhbXMoe1xyXG4gICAgICAgICAgbW9kZTogbW9kZSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5leGVjdXRlKHtcclxuICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgLi4uRG9jdW1lbnRzQ29uc3RhbnRzLnBhZ2VQcm92aWRlci5jb21taXR0ZWUuaGVhZGVycyxcclxuICAgICAgICAgICAgJ1gtTlhmZXRjaC1kb2N1bWVudCc6ICdsb2NrLGRjOmNyZWF0b3IsY29ycjpvd25lcixjdHNfY29tbW9uOmRlcGFydG1lbnQnLFxyXG4gICAgICAgICAgICAnWC1OWGVucmljaGVycy1kb2N1bWVudCc6ICd0YWdzJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICAvL3JlbW92ZSBhZGFwdGUgc2luY2UgaXQgaXMgY291c2luZyBjb25mbGljdHMgd2hlbiBlbWl0aW5nIG91dCBzaWRlIGFuZCByZWFkYXB0aW5nIGFnYWluIG91dHNpZGVcclxuICAgICAgICAvLyB0aGlzLmRvY3VtZW50c0FkYXB0ZXIuYWRhcHRJbihpdGVtLCBEb2N1bWVudHNDb25zdGFudHMuZmllbGRzKVxyXG4gICAgICB9XHJcbiAgICAgICksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHVubG9ja0RvY3VtZW50KGRvY0lkKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5vcGVyYXRpb24oRG9jdW1lbnRzQ29uc3RhbnRzLm9wZXJhdGlvbnMudW5sb2NrKVxyXG4gICAgICAgIC5pbnB1dChkb2NJZClcclxuICAgICAgICAucGFyYW1zKClcclxuICAgICAgICAuZXhlY3V0ZSh7XHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIC4uLkRvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuY29tbWl0dGVlLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICdYLU5YZmV0Y2gtZG9jdW1lbnQnOiAnbG9jayxkYzpjcmVhdG9yJyxcclxuICAgICAgICAgICAgJ1gtTlhlbnJpY2hlcnMtZG9jdW1lbnQnOiAndGFncycsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIC8vcmVtb3ZlIGFkYXB0ZSBzaW5jZSBpdCBpcyBjb3VzaW5nIGNvbmZsaWN0cyB3aGVuIGVtaXRpbmcgb3V0IHNpZGUgYW5kIHJlYWRhcHRpbmcgYWdhaW4gb3V0c2lkZVxyXG4gICAgICAgIC8vIHRoaXMuZG9jdW1lbnRzQWRhcHRlci5hZGFwdEluKGl0ZW0sIERvY3VtZW50c0NvbnN0YW50cy5maWVsZHMpXHJcbiAgICAgIH1cclxuICAgICAgKSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9ja01lbW9Eb2N1bWVudChkb2NJZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKERvY3VtZW50c0NvbnN0YW50cy5vcGVyYXRpb25zLmxvY2tNZW1vKVxyXG4gICAgICAgIC5pbnB1dChkb2NJZClcclxuICAgICAgICAucGFyYW1zKClcclxuICAgICAgICAuZXhlY3V0ZSh7XHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIC4uLkRvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXIuY29tbWl0dGVlLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICdYLU5YZmV0Y2gtZG9jdW1lbnQnOiAnbG9jayxkYzpjcmVhdG9yJyxcclxuICAgICAgICAgICAgJ1gtTlhlbnJpY2hlcnMtZG9jdW1lbnQnOiAndGFncycsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcChpdGVtID0+IHsgcmV0dXJuIGl0ZW0gfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHVubG9ja01lbW9Eb2N1bWVudChkb2NJZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKERvY3VtZW50c0NvbnN0YW50cy5vcGVyYXRpb25zLnVubG9ja01lbW8pXHJcbiAgICAgICAgLmlucHV0KGRvY0lkKVxyXG4gICAgICAgIC5wYXJhbXMoKVxyXG4gICAgICAgIC5leGVjdXRlKHtcclxuICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgLi4uRG9jdW1lbnRzQ29uc3RhbnRzLnBhZ2VQcm92aWRlci5jb21taXR0ZWUuaGVhZGVycyxcclxuICAgICAgICAgICAgJ1gtTlhmZXRjaC1kb2N1bWVudCc6ICdsb2NrLGRjOmNyZWF0b3InLFxyXG4gICAgICAgICAgICAnWC1OWGVucmljaGVycy1kb2N1bWVudCc6ICd0YWdzJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKGl0ZW0gPT4geyByZXR1cm4gaXRlbSB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRG9jdW1lbnQocGF0aDogYW55KSB7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC5yZXBvc2l0b3J5KCkuZGVsZXRlKHBhdGgpKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkQmF0Y2goZmlsZXMsIGV4dHJhSGVhZGVycyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgLi4uZmlsZXMubWFwKChmaWxlLCBpZHgpID0+IHtcclxuICAgICAgICBjb25zdCBudXhlb0Jsb2IgPSB0aGlzLm51eGVvU2VydmljZS5jcmVhdGVCbG9iKGZpbGUpO1xyXG4gICAgICAgIC8vIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgIC8vIGNvbnN0IGJhdGNoID0gdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQuYmF0Y2hVcGxvYWQoKTtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZXh0cmFIZWFkZXJzKS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgLy8gQ3VzdG9tIHVwbG9hZCB3aXRoIGhlYWRlcnNcclxuICAgICAgICAgIGxldCBiYXRjaCA9IHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LmJhdGNoVXBsb2FkKCk7XHJcbiAgICAgICAgICBjb25zdCBibG9iID0gbmV3IE51eGVvLkJsb2Ioe1xyXG4gICAgICAgICAgICBjb250ZW50OiBmaWxlLFxyXG4gICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gZnJvbShiYXRjaC51cGxvYWQoYmxvYiwge1xyXG4gICAgICAgICAgICBjaHVua1NpemU6IChudXhlb0Jsb2Iuc2l6ZSAqIDEuNSksXHJcbiAgICAgICAgICAgIHVzZUZvcm1EYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcclxuICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScsXHJcbiAgICAgICAgICAgICAgJ1gtRmlsZS1OYW1lJzogZW5jb2RlVVJJQ29tcG9uZW50KG51eGVvQmxvYi5uYW1lKSxcclxuICAgICAgICAgICAgICAnWC1GaWxlLVNpemUnOiBudXhlb0Jsb2Iuc2l6ZSxcclxuICAgICAgICAgICAgICAnWC1GaWxlLVR5cGUnOiBudXhlb0Jsb2IubWltZVR5cGUsXHJcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogbnV4ZW9CbG9iLnNpemUsXHJcbiAgICAgICAgICAgICAgJ1gtQmF0Y2gtTm8tRHJvcCc6IHRydWUsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIGNvbnN0IGdldEJhdGNoSWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAvLyAgIHJldHVybiB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC5faHR0cCh7XHJcbiAgICAgICAgICAvLyAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAvLyAgICAgdXJsOiBgJHt0aGlzLmVudmlyb25tZW50Lm51eGVvfS9hcGkvdjEvdXBsb2FkYCxcclxuICAgICAgICAgIC8vICAgfSkudGhlbigocmVzOiBhbnkpID0+IHJlcy5iYXRjaElkKTtcclxuICAgICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgICAgLy8gcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAvLyAgIGdldEJhdGNoSWQoKS50aGVuKChiYXRjaElkKSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAgIC8vICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgLy8gICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAvLyAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99L2FwaS92MS91cGxvYWQvJHtiYXRjaElkfS8ke2lkeH1gLFxyXG4gICAgICAgICAgLy8gICAgICAgYm9keTogbnV4ZW9CbG9iLmNvbnRlbnQsXHJcbiAgICAgICAgICAvLyAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIC4uLmV4dHJhSGVhZGVycyxcclxuICAgICAgICAgIC8vICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnLFxyXG4gICAgICAgICAgLy8gICAgICAgICAnWC1GaWxlLU5hbWUnOiBlbmNvZGVVUklDb21wb25lbnQobnV4ZW9CbG9iLm5hbWUpLFxyXG4gICAgICAgICAgLy8gICAgICAgICAnWC1GaWxlLVNpemUnOiBudXhlb0Jsb2Iuc2l6ZSxcclxuICAgICAgICAgIC8vICAgICAgICAgJ1gtRmlsZS1UeXBlJzogbnV4ZW9CbG9iLm1pbWVUeXBlLFxyXG4gICAgICAgICAgLy8gICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBudXhlb0Jsb2Iuc2l6ZSxcclxuICAgICAgICAgIC8vICAgICAgICAgJ1gtQmF0Y2gtTm8tRHJvcCc6IHRydWUsXHJcbiAgICAgICAgICAvLyAgICAgICB9LFxyXG4gICAgICAgICAgLy8gICAgIH07XHJcbiAgICAgICAgICAvLyAgICAgcmV0dXJuIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50Ll9odHRwKG9wdHMpO1xyXG4gICAgICAgICAgLy8gICB9KVxyXG4gICAgICAgICAgLy8gKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LmJhdGNoVXBsb2FkKCkudXBsb2FkKG51eGVvQmxvYilcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXSkucGlwZShcclxuICAgICAgbWFwKCh1cGxvYWRlZEZpbGVzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUsIGkpID0+IHtcclxuICAgICAgICAgIHVwbG9hZGVkRmlsZXNbaV0udGl0bGUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICBpZih1cGxvYWRlZEZpbGVzW2ldWydibG9icyddKXtcclxuICAgICAgICAgICAgdXBsb2FkZWRGaWxlc1tpXVsnYmxvYiddID0geyAuLi51cGxvYWRlZEZpbGVzW2ldWydibG9icyddWzBdIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdXBsb2FkZWRGaWxlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVEb2ModXBsb2FkZWRGaWxlLCBwYXRoLCBwYXJhbXMsIGRvY1BhcmFtcyA9IHt9KSB7XHJcbiAgICBjb25zdCBkb2MgPSB7XHJcbiAgICAgICdlbnRpdHktdHlwZSc6ICdkb2N1bWVudCcsXHJcbiAgICAgIG5hbWU6IHVwbG9hZGVkRmlsZS50aXRsZSxcclxuICAgICAgdHlwZTogJ2ZpbGUnLFxyXG4gICAgICAuLi5kb2NQYXJhbXMsXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICB0aXRsZTogdXBsb2FkZWRGaWxlLnRpdGxlLFxyXG4gICAgICAgIGNvbnRlbnQ6IHVwbG9hZGVkRmlsZS5ibG9iLFxyXG4gICAgICAgIC4uLnBhcmFtcyxcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVwbyA9IHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnJlcG9zaXRvcnkoKTtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICByZXBvLmNyZWF0ZShgJHtwYXRofWAsIHtcclxuICAgICAgICAuLi5kb2MsXHJcbiAgICAgICAgcHJvcGVydGllczogdGhpcy5kb2N1bWVudHNBZGFwdGVyLmFkYXB0T3V0KFxyXG4gICAgICAgICAgZG9jLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBEb2N1bWVudHNDb25zdGFudHMuZmllbGRzXHJcbiAgICAgICAgKSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIHVwbG9hZERvY3VtZW50KGZpbGUsIHBhdGgsIHBhcmFtcywgZG9jUGFyYW1zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXBsb2FkQmF0Y2goZmlsZSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKCh1cGxvYWRlZEZpbGUpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVEb2ModXBsb2FkZWRGaWxlLCBwYXRoLCBwYXJhbXMsIGRvY1BhcmFtcykucGlwZShcclxuICAgICAgICAgIG1hcCgoY3JlYXRlZERvY3VtZW50KSA9PiBjcmVhdGVkRG9jdW1lbnQpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldERvY3VtZW50cyhhbmNlc3RvcklkLCBwcm92aWRlciwgcGFyYW1zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50XHJcbiAgICAgICAgLnJlcG9zaXRvcnkoKVxyXG4gICAgICAgIC8vIC5lbnJpY2hlcignZG9jdW1lbnQnLCAnYWNscycpXHJcbiAgICAgICAgLnF1ZXJ5KFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBwYWdlUHJvdmlkZXI6IERvY3VtZW50c0NvbnN0YW50cy5wYWdlUHJvdmlkZXJbcHJvdmlkZXJdLm5hbWUsXHJcbiAgICAgICAgICAgIC8vIGN0X2F0dGFjaG1lbnRfZG9jUmVmSWQ6IGFuY2VzdG9ySWQsXHJcbiAgICAgICAgICAgIEN0c0NvbW1vbl9jb3JyZXNwb25kZW5jZTogYW5jZXN0b3JJZCxcclxuICAgICAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaGVhZGVyczogRG9jdW1lbnRzQ29uc3RhbnRzLnBhZ2VQcm92aWRlcltwcm92aWRlcl0uaGVhZGVycyxcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgZGF0YS5lbnRyaWVzLm1hcCgoaXRlbSkgPT5cclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRzQWRhcHRlci5hZGFwdEluKGl0ZW0sIHRoaXMuaW5jb21pbmdDb25zdGFudC5hdHRhY2htZW50cylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|