@hmcts/ccd-case-ui-toolkit 7.1.5-query-management → 7.1.6-query-management
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/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.mjs +14 -13
- package/esm2022/lib/shared/components/palette/case-file-view/test-data/categories-and-documents-test-data.mjs +12 -12
- package/esm2022/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.mjs +60 -14
- package/esm2022/lib/shared/components/palette/query-management/components/query-details/query-details.component.mjs +73 -72
- package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-date-input/query-write-date-input.component.mjs +4 -4
- package/esm2022/lib/shared/components/palette/query-management/read-query-management-field.component.mjs +52 -25
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +230 -158
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts +4 -1
- package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -284,14 +284,52 @@ export class QueryCheckYourAnswersComponent {
|
|
|
284
284
|
const caseMessage = this.queryCreateContext === QueryCreateContext.NEW_QUERY
|
|
285
285
|
? QueryManagementUtils.getNewQueryData(this.formGroup, currentUserDetails)
|
|
286
286
|
: QueryManagementUtils.getRespondOrFollowupQueryData(this.formGroup, this.queryItem, currentUserDetails);
|
|
287
|
+
const messageId = this.route.snapshot.params.dataid; // Get the message ID from route params (if present)
|
|
288
|
+
const isNewQuery = this.queryCreateContext === QueryCreateContext.NEW_QUERY; // Check if this is a new query
|
|
287
289
|
// Check if the field ID has been set dynamically
|
|
288
290
|
if (!this.fieldId) {
|
|
289
291
|
console.error('Error: Field ID for CaseQueriesCollection not found. Cannot proceed with data generation.');
|
|
290
292
|
this.router.navigate(['/', 'service-down']);
|
|
291
293
|
}
|
|
292
|
-
//
|
|
293
|
-
const newQueryData = {
|
|
294
|
-
|
|
294
|
+
// Initialize new query data structure
|
|
295
|
+
const newQueryData = {};
|
|
296
|
+
if (this.caseQueriesCollections?.length) {
|
|
297
|
+
let matchedCollection;
|
|
298
|
+
// If it's not a new query, try to find the existing collection with the message ID
|
|
299
|
+
if (!isNewQuery && messageId) {
|
|
300
|
+
matchedCollection = this.caseQueriesCollections.find((collection) => collection.caseMessages.some((message) => message.value.id === messageId));
|
|
301
|
+
}
|
|
302
|
+
if (matchedCollection) {
|
|
303
|
+
// Append the new case message to the matched collection's caseMessages
|
|
304
|
+
matchedCollection.caseMessages.push({
|
|
305
|
+
id: null,
|
|
306
|
+
value: caseMessage
|
|
307
|
+
});
|
|
308
|
+
// Add the matched collection to newQueryData
|
|
309
|
+
newQueryData[this.fieldId] = {
|
|
310
|
+
...matchedCollection, // Keep existing data intact
|
|
311
|
+
caseMessages: [...matchedCollection.caseMessages] // Append the updated messages array
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
// If no collection matches, or it's a new query
|
|
316
|
+
newQueryData[this.fieldId] = {
|
|
317
|
+
partyName: '', // Not returned by CCD
|
|
318
|
+
roleOnCase: '', // Not returned by CCD
|
|
319
|
+
caseMessages: [
|
|
320
|
+
{
|
|
321
|
+
id: null,
|
|
322
|
+
value: caseMessage
|
|
323
|
+
}
|
|
324
|
+
]
|
|
325
|
+
};
|
|
326
|
+
// If caseQueriesCollections is not empty, append its data
|
|
327
|
+
newQueryData[this.fieldId].caseMessages.push(...this.caseQueriesCollections.flatMap((collection) => collection.caseMessages));
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
// If there are no existing collections, create a new one (e.g., for new queries)
|
|
332
|
+
newQueryData[this.fieldId] = {
|
|
295
333
|
partyName: '', // Not returned by CCD
|
|
296
334
|
roleOnCase: '', // Not returned by CCD
|
|
297
335
|
caseMessages: [
|
|
@@ -300,11 +338,7 @@ export class QueryCheckYourAnswersComponent {
|
|
|
300
338
|
value: caseMessage
|
|
301
339
|
}
|
|
302
340
|
]
|
|
303
|
-
}
|
|
304
|
-
};
|
|
305
|
-
// If caseQueriesCollections is not empty, append its data
|
|
306
|
-
if (this.caseQueriesCollections?.length) {
|
|
307
|
-
newQueryData[this.fieldId].caseMessages.push(...this.caseQueriesCollections.flatMap((collection) => collection.caseMessages));
|
|
341
|
+
};
|
|
308
342
|
}
|
|
309
343
|
return newQueryData;
|
|
310
344
|
}
|
|
@@ -322,11 +356,23 @@ export class QueryCheckYourAnswersComponent {
|
|
|
322
356
|
}
|
|
323
357
|
}
|
|
324
358
|
extractCaseQueryId(data) {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
this.
|
|
359
|
+
const { id, value } = data;
|
|
360
|
+
const messageId = this.route.snapshot.params.dataid;
|
|
361
|
+
// Check if the field_type matches CaseQueriesCollection and type is Complex
|
|
362
|
+
if (data.field_type.id === this.CASE_QUERIES_COLLECTION_ID && data.field_type.type === this.FIELD_TYPE_COMPLEX) {
|
|
363
|
+
if (this.queryCreateContext !== QueryCreateContext.RESPOND) {
|
|
364
|
+
// Set the field ID dynamically based on the extracted data
|
|
365
|
+
this.fieldId = id; // Store the ID for use in generating newQueryData
|
|
366
|
+
}
|
|
367
|
+
// If messageId is present, find the corresponding case message
|
|
368
|
+
if (messageId && value?.caseMessages) {
|
|
369
|
+
// Check for a message that has the specified messageId
|
|
370
|
+
const matchedMessage = value.caseMessages.find((message) => message.value.id === messageId);
|
|
371
|
+
// If a matching message is found, set the fieldId to the corresponding id
|
|
372
|
+
if (matchedMessage) {
|
|
373
|
+
this.fieldId = id; // This assumes you still want to use the same id
|
|
374
|
+
}
|
|
375
|
+
}
|
|
330
376
|
}
|
|
331
377
|
}
|
|
332
378
|
static ɵfac = function QueryCheckYourAnswersComponent_Factory(t) { return new (t || QueryCheckYourAnswersComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.CasesService), i0.ɵɵdirectiveInject(i2.CaseNotifier), i0.ɵɵdirectiveInject(i2.WorkAllocationService), i0.ɵɵdirectiveInject(i3.SessionStorageService), i0.ɵɵdirectiveInject(i2.EventTriggerService)); };
|
|
@@ -429,4 +475,4 @@ export class QueryCheckYourAnswersComponent {
|
|
|
429
475
|
type: Output
|
|
430
476
|
}] }); })();
|
|
431
477
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryCheckYourAnswersComponent, { className: "QueryCheckYourAnswersComponent", filePath: "lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.ts", lineNumber: 23 }); })();
|
|
432
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBS2pCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxSCxPQUFPLEVBQWtELGtCQUFrQixFQUFFLGFBQWEsRUFB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Q0Y7WUFERSxxR0FDRjtZQUdJLGVBQ0Y7WUFERSxpRUFDRjtZQUtELGVBQTZEO1lBQTdELHNGQUE2RDtZQXdDNUQsZUFDRjtZQURFLDZLQUNGO1lBR0ssZUFBNkM7WUFBN0MsNkRBQTZDO1lBTzlDLGVBQ0Y7WUFERSxpRUFDRjtZQVVGLGVBQ0Y7WUFERSxtRUFDRjtZQUVFLGVBQ0Y7WUFERSxpRUFDRjtZQUl3QixlQUErQztZQUEvQyxpRUFBK0M7OztpRkRySGhFLDhCQUE4QjtjQUwxQyxTQUFTOzJCQUNFLDhCQUE4QjtvT0FXeEIsU0FBUztrQkFBeEIsS0FBSztZQUNVLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSxrQkFBa0I7a0JBQWpDLEtBQUs7WUFDVSxTQUFTO2tCQUF4QixLQUFLO1lBQ1csV0FBVztrQkFBM0IsTUFBTTtZQUNVLGNBQWM7a0JBQTlCLE1BQU07O2tGQVpJLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDYXNlRXZlbnRUcmlnZ2VyLFxuICBDYXNlVmlldyxcbiAgQ2FzZVZpZXdUcmlnZ2VyLFxuICBFcnJvck1lc3NhZ2UsXG4gIFRhc2tTZWFyY2hQYXJhbWV0ZXJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NoYXJlZC9kb21haW4nO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXZlbnRDb21wbGV0aW9uUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2FzZS1lZGl0b3IvZG9tYWluL2V2ZW50LWNvbXBsZXRpb24tcGFyYW1zLm1vZGVsJztcbmltcG9ydCB7IENhc2VOb3RpZmllciwgQ2FzZXNTZXJ2aWNlLCBFdmVudFRyaWdnZXJTZXJ2aWNlLCBXb3JrQWxsb2NhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDYXNlUXVlcmllc0NvbGxlY3Rpb24sIFFtQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uLCBRdWVyeUNyZWF0ZUNvbnRleHQsIFF1ZXJ5TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgUXVlcnlNYW5hZ2VtZW50VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1tYW5hZ2VtZW50LnV0aWxzJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlDaGVja1lvdXJBbnN3ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IFJBSVNFX0FfUVVFUllfRVZFTlRfVFJJR0dFUl9JRCA9ICdxdWVyeU1hbmFnZW1lbnRSYWlzZVF1ZXJ5JztcbiAgcHJpdmF0ZSByZWFkb25seSBSRVNQT05EX1RPX1FVRVJZX0VWRU5UX1RSSUdHRVJfSUQgPSAncXVlcnlNYW5hZ2VtZW50UmVzcG9uZFF1ZXJ5JztcblxuICBwcml2YXRlIHJlYWRvbmx5IENBU0VfUVVFUklFU19DT0xMRUNUSU9OX0lEID0gJ0Nhc2VRdWVyaWVzQ29sbGVjdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSBGSUVMRF9UWVBFX0NPTVBMRVggPSAnQ29tcGxleCc7XG5cbiAgQElucHV0KCkgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBwdWJsaWMgcXVlcnlJdGVtOiBRdWVyeUxpc3RJdGVtO1xuICBASW5wdXQoKSBwdWJsaWMgcXVlcnlDcmVhdGVDb250ZXh0OiBRdWVyeUNyZWF0ZUNvbnRleHQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBldmVudERhdGE6IENhc2VFdmVudFRyaWdnZXIgfCBudWxsID0gbnVsbDtcbiAgQE91dHB1dCgpIHB1YmxpYyBiYWNrQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBxdWVyeVN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIGNhc2VWaWV3VHJpZ2dlcjogQ2FzZVZpZXdUcmlnZ2VyO1xuICBwcml2YXRlIGNhc2VEZXRhaWxzOiBDYXNlVmlldztcbiAgcHJpdmF0ZSBxdWVyeUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgY3JlYXRlRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzZWFyY2hUYXNrc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtID0gUXVlcnlDcmVhdGVDb250ZXh0O1xuICBwdWJsaWMgZXZlbnRDb21wbGV0aW9uUGFyYW1zOiBFdmVudENvbXBsZXRpb25QYXJhbXM7XG4gIHB1YmxpYyBjYXNlUXVlcmllc0NvbGxlY3Rpb25zOiBDYXNlUXVlcmllc0NvbGxlY3Rpb25bXTtcbiAgcHVibGljIGZpZWxkSWQ6IHN0cmluZztcblxuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZXNTZXJ2aWNlOiBDYXNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdvcmtBbGxvY2F0aW9uU2VydmljZTogV29ya0FsbG9jYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudFRyaWdnZXJTZXJ2aWNlOiBFdmVudFRyaWdnZXJTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucWlkO1xuICAgIHRoaXMuY2FzZU5vdGlmaWVyLmNhc2VWaWV3LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjYXNlRGV0YWlscykgPT4ge1xuICAgICAgdGhpcy5jYXNlRGV0YWlscyA9IGNhc2VEZXRhaWxzO1xuXG4gICAgICAvLyBGaW5kIHRoZSBhcHByb3ByaWF0ZSBldmVudCB0cmlnZ2VyIGJhc2VkIG9uIHRoZSBxdWVyeUNyZWF0ZUNvbnRleHRcbiAgICAgIHRoaXMuY2FzZVZpZXdUcmlnZ2VyID0gdGhpcy5jYXNlRGV0YWlscy50cmlnZ2Vycy5maW5kKCh0cmlnZ2VyKSA9PlxuICAgICAgICB0aGlzLnF1ZXJ5Q3JlYXRlQ29udGV4dCAhPT0gUXVlcnlDcmVhdGVDb250ZXh0LlJFU1BPTkRcbiAgICAgICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgbm90ICdSRVNQT05EJywgZmluZCB0aGUgdHJpZ2dlciB3aXRoIHRoZSBJRCBmb3IgcmFpc2luZyBhIHF1ZXJ5XG4gICAgICAgICAgPyB0cmlnZ2VyLmlkID09PSB0aGlzLlJBSVNFX0FfUVVFUllfRVZFTlRfVFJJR0dFUl9JRFxuICAgICAgICAvLyBJZiB0aGUgY29udGV4dCBpcyAnUkVTUE9ORCcsIGZpbmQgdGhlIHRyaWdnZXIgd2l0aCB0aGUgSUQgZm9yIHJlc3BvbmRpbmcgdG8gYSBxdWVyeVxuICAgICAgICAgIDogdHJpZ2dlci5pZCA9PT0gdGhpcy5SRVNQT05EX1RPX1FVRVJZX0VWRU5UX1RSSUdHRVJfSURcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNldENhc2VRdWVyaWVzQ29sbGVjdGlvbkRhdGEoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUV2ZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc2VhcmNoVGFza3NTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ29CYWNrKCk6IHZvaWQge1xuICAgIHRoaXMuYmFja0NsaWNrZWQuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgZmllbGRJZCBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGlmICghdGhpcy5maWVsZElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogRmllbGQgSUQgaXMgbWlzc2luZy4gQ2Fubm90IHByb2NlZWQgd2l0aCBzdWJtaXNzaW9uLicpO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdFcnJvcicsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdTb21ldGhpbmcgdW5leHBlY3RlZCBoYXBwZW5lZC4gcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLFxuICAgICAgICAgIGZpZWxkSWQ6ICdmaWVsZC1pZCdcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZW5lcmF0ZUNhc2VRdWVyaWVzQ29sbGVjdGlvbkRhdGEoKTtcbiAgICB0aGlzLmNyZWF0ZUV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5jYXNlc1NlcnZpY2UuY3JlYXRlRXZlbnQodGhpcy5jYXNlRGV0YWlscywge1xuICAgICAgZGF0YSxcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIGlkOiB0aGlzLmNhc2VWaWV3VHJpZ2dlcj8uaWQsXG4gICAgICAgIHN1bW1hcnk6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5jYXNlVmlld1RyaWdnZXI/LmRlc2NyaXB0aW9uXG4gICAgICB9LFxuICAgICAgZXZlbnRfdG9rZW46IHRoaXMuZXZlbnREYXRhPy5ldmVudF90b2tlbixcbiAgICAgIGlnbm9yZV93YXJuaW5nOiBmYWxzZVxuICAgIH0pLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGFuZCBjb21wbGV0ZSB0YXNrXG4gICAgICAgIHRoaXMuc2VhcmNoQW5kQ29tcGxldGVUYXNrKCk7XG4gICAgICAgIC8vIEVtaXQgcXVlcnkgc3VibWl0dGVkIGV2ZW50XG4gICAgICAgIHRoaXMucXVlcnlTdWJtaXR0ZWQuZW1pdCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICAvLyBFcnJvclxuICAgICAgKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJywgJ3NlcnZpY2UtZG93biddKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoQW5kQ29tcGxldGVUYXNrKCk6IHZvaWQge1xuICAgIC8vIFNlYXJjaCBUYXNrXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1ldGVyID0geyBjY2RJZDogdGhpcy5jYXNlRGV0YWlscy5jYXNlX2lkIH0gYXMgVGFza1NlYXJjaFBhcmFtZXRlcjtcbiAgICB0aGlzLnNlYXJjaFRhc2tzU3Vic2NyaXB0aW9uID0gdGhpcy53b3JrQWxsb2NhdGlvblNlcnZpY2Uuc2VhcmNoVGFza3Moc2VhcmNoUGFyYW1ldGVyKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBGaWx0ZXIgdGFzayBieSBxdWVyeSBpZFxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkVGFzayA9IHJlc3BvbnNlLnRhc2tzPy5maW5kKCh0YXNrKSA9PlxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0YXNrLmFkZGl0aW9uYWxfcHJvcGVydGllcykuc29tZSgodmFsdWUpID0+IHZhbHVlID09PSB0aGlzLnF1ZXJ5SWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyBUcmlnZ2VyIGV2ZW50IGNvbXBsZXRpb25cbiAgICAgICAgICB0aGlzLmV2ZW50Q29tcGxldGlvblBhcmFtcyA9IHtcbiAgICAgICAgICAgIGNhc2VJZDogdGhpcy5jYXNlRGV0YWlscy5jYXNlX2lkLFxuICAgICAgICAgICAgZXZlbnRJZDogdGhpcy5SRVNQT05EX1RPX1FVRVJZX0VWRU5UX1RSSUdHRVJfSUQsXG4gICAgICAgICAgICB0YXNrOiBmaWx0ZXJlZFRhc2tcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBzZWFyY2hUYXNrc1N1YnNjcmlwdGlvbjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGFwcHJvcHJpYXRlbHlcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVDYXNlUXVlcmllc0NvbGxlY3Rpb25EYXRhKCk6IFFtQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uIHtcbiAgICBjb25zdCBjdXJyZW50VXNlckRldGFpbHMgPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJykpO1xuXG4gICAgY29uc3QgY2FzZU1lc3NhZ2UgPSB0aGlzLnF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gUXVlcnlDcmVhdGVDb250ZXh0Lk5FV19RVUVSWVxuICAgICAgPyBRdWVyeU1hbmFnZW1lbnRVdGlscy5nZXROZXdRdWVyeURhdGEodGhpcy5mb3JtR3JvdXAsIGN1cnJlbnRVc2VyRGV0YWlscylcbiAgICAgIDogUXVlcnlNYW5hZ2VtZW50VXRpbHMuZ2V0UmVzcG9uZE9yRm9sbG93dXBRdWVyeURhdGEodGhpcy5mb3JtR3JvdXAsIHRoaXMucXVlcnlJdGVtLCBjdXJyZW50VXNlckRldGFpbHMpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZpZWxkIElEIGhhcyBiZWVuIHNldCBkeW5hbWljYWxseVxuICAgIGlmICghdGhpcy5maWVsZElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogRmllbGQgSUQgZm9yIENhc2VRdWVyaWVzQ29sbGVjdGlvbiBub3QgZm91bmQuIENhbm5vdCBwcm9jZWVkIHdpdGggZGF0YSBnZW5lcmF0aW9uLicpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJywgJ3NlcnZpY2UtZG93biddKTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgcXVlcnkgd2l0aCBkeW5hbWljIHByb3BlcnR5IG5hbWVcbiAgICBjb25zdCBuZXdRdWVyeURhdGE6IFFtQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uID0ge1xuICAgICAgW3RoaXMuZmllbGRJZF06IHtcbiAgICAgICAgcGFydHlOYW1lOiAnJywgLy8gTm90IHJldHVybmVkIGJ5IENDRFxuICAgICAgICByb2xlT25DYXNlOiAnJywgLy8gTm90IHJldHVybmVkIGJ5IENDRFxuICAgICAgICBjYXNlTWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIHZhbHVlOiBjYXNlTWVzc2FnZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBJZiBjYXNlUXVlcmllc0NvbGxlY3Rpb25zIGlzIG5vdCBlbXB0eSwgYXBwZW5kIGl0cyBkYXRhXG4gICAgaWYgKHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICBuZXdRdWVyeURhdGFbdGhpcy5maWVsZElkXS5jYXNlTWVzc2FnZXMucHVzaChcbiAgICAgICAgLi4udGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zLmZsYXRNYXAoKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uY2FzZU1lc3NhZ2VzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1F1ZXJ5RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDYXNlUXVlcmllc0NvbGxlY3Rpb25EYXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50RGF0YT8uY2FzZV9maWVsZHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zID0gdGhpcy5ldmVudERhdGEuY2FzZV9maWVsZHMucmVkdWNlKChhY2MsIGNhc2VGaWVsZCkgPT4ge1xuICAgICAgICAvLyBFeHRyYWN0IHRoZSBJRCBiYXNlZCBvbiBjb25kaXRpb25zLCB1cGRhdGluZyB0aGlzLmZpZWxkSWQgZHluYW1pY2FsbHlcblxuICAgICAgICB0aGlzLmV4dHJhY3RDYXNlUXVlcnlJZChjYXNlRmllbGQpO1xuICAgICAgICBjb25zdCBleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQgPSBRdWVyeU1hbmFnZW1lbnRVdGlscy5leHRyYWN0Q2FzZVF1ZXJpZXNGcm9tQ2FzZUZpZWxkKGNhc2VGaWVsZCk7XG4gICAgICAgIGlmIChleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQgJiYgdHlwZW9mIGV4dHJhY3RlZENhc2VRdWVyaWVzRnJvbUNhc2VGaWVsZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhY2MucHVzaChleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0Q2FzZVF1ZXJ5SWQoZGF0YSk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIGZpZWxkX3R5cGUuaWQgaXMgJ0Nhc2VRdWVyaWVzQ29sbGVjdGlvbicgYW5kIGZpZWxkX3R5cGUudHlwZSBpcyAnQ29tcGxleCdcbiAgICBpZiAoXG4gICAgICBkYXRhLmZpZWxkX3R5cGUuaWQgPT09IHRoaXMuQ0FTRV9RVUVSSUVTX0NPTExFQ1RJT05fSUQgJiZcbiAgICAgIGRhdGEuZmllbGRfdHlwZS50eXBlID09PSB0aGlzLkZJRUxEX1RZUEVfQ09NUExFWFxuICAgICkge1xuICAgICAgLy8gU2V0IHRoZSBmaWVsZCBJRCBkeW5hbWljYWxseSBiYXNlZCBvbiB0aGUgZXh0cmFjdGVkIGRhdGFcbiAgICAgIHRoaXMuZmllbGRJZCA9IGRhdGEuaWQ7IC8vIFN0b3JlIHRoZSBJRCBmb3IgdXNlIGluIGdlbmVyYXRpbmcgbmV3UXVlcnlEYXRhXG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkcy1mcm9tLWRlc2t0b3BcIj5cbiAgICA8IS0tIEVycm9yIG1lc3NhZ2Ugc3VtbWFyeSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT1cImVycm9yLXN1bW1hcnktdGl0bGVcIiByb2xlPVwiYWxlcnRcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGRhdGEtbW9kdWxlPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiPlxuICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZVwiIGlkPVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiPlxuICAgICAgIHt7ICdUaGVyZSBpcyBhIHByb2JsZW0nIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgIDwvaDI+XG4gICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgIDxhIFtpZF09XCInZXJyb3ItJyArIGVycm9yTWVzc2FnZS5maWVsZElkXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3sgZXJyb3JNZXNzYWdlLmRlc2NyaXB0aW9uIHwgcnB4VHJhbnNsYXRlIH19PC9hPlxuICAgICAgICAgPC9saT5cbiAgICAgICA8L3VsPlxuICAgICA8L2Rpdj5cbiAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUllcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jYXB0aW9uLWxcIj57eyAnUmFpc2UgYSBxdWVyeScgfCBycHhUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5SRVNQT05EOyBlbHNlIGRlZmF1bHRDaGVja1lvdXJBbnN3ZXJzVGl0bGVcIj5cbiAgICAgICAge3sgJ1JldmlldyBxdWVyeSByZXNwb25zZSBkZXRhaWxzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENoZWNrWW91ckFuc3dlcnNUaXRsZT5cbiAgICAgICAge3sgJ1JldmlldyBxdWVyeSBkZXRhaWxzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNFwiPlxuICAgICAgPGNjZC1xdWVyeS1jYXNlLWRldGFpbHMtaGVhZGVyPjwvY2NkLXF1ZXJ5LWNhc2UtZGV0YWlscy1oZWFkZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGwgKm5nSWY9XCJxdWVyeUNyZWF0ZUNvbnRleHQgIT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uRk9MTE9XVVBcIiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdCBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyAnU3VibWl0dGVkIHF1ZXJ5JyA6ICdRdWVyeSBzdWJqZWN0JyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlXCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyBxdWVyeUl0ZW0uc3ViamVjdCA6IGZvcm1Hcm91cC5nZXQoJ3N1YmplY3QnKT8udmFsdWUgfX1cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgICpuZ0lmPVwicXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWVwiIFxuICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuXG4gICAgPGRsIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uUkVTUE9ORCA/ICdSZXNwb25zZSBkZXRhaWwnIDogJ1F1ZXJ5IGRldGFpbCcgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IGZvcm1Hcm91cC5nZXQoJ2JvZHknKT8udmFsdWUgfX1cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuXG4gICAgPGRsICpuZ0lmPVwicXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWVwiIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyAnSXMgdGhlIHF1ZXJ5IGhlYXJpbmcgcmVsYXRlZD8nIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgIDwvZHQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUdyb3VwLmdldCgnaXNIZWFyaW5nUmVsYXRlZCcpPy52YWx1ZSA9PT0gdHJ1ZTsgZWxzZSBpc0hlYXJpbmdSZWxhdGVkRmFsc2VcIj5cbiAgICAgICAgICAgIHt7ICdJcyB0aGUgcXVlcnkgaGVhcmluZyByZWxhdGVkPycgfCBycHhUcmFuc2xhdGU6IG51bGwgOiAnWWVzJyB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNIZWFyaW5nUmVsYXRlZEZhbHNlPlxuICAgICAgICAgICAge3sgJ0lzIHRoZSBxdWVyeSBoZWFyaW5nIHJlbGF0ZWQ/JyB8IHJweFRyYW5zbGF0ZTogbnVsbCA6ICdObycgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmdldCgnaXNIZWFyaW5nUmVsYXRlZCcpPy52YWx1ZVwiIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uTkVXX1FVRVJZXG4gICAgICAgICAgICA/ICdXaGF0IGlzIHRoZSBkYXRlIG9mIHRoZSBoZWFyaW5nPydcbiAgICAgICAgICAgIDogJ1doYXQgaXMgdGhlIGRhdGUgb2YgdGhlIGhlYXJpbmcgeW91ciBxdWVyeSBpcyByZWxhdGVkIHRvPycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IGZvcm1Hcm91cC5nZXQoJ2hlYXJpbmdEYXRlJyk/LnZhbHVlIHwgZGF0ZTogJ2RkIE1NTSB5eXl5JyB9fVxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG5cbiAgICA8ZGwgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3QgZ292dWstIS1tYXJnaW4tYm90dG9tLTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3Jvd1wiPlxuICAgICAgICA8ZHQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2tleVwiPlxuICAgICAgICAgIHt7IHF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUlkgPyAnVXBsb2FkIGEgZmlsZSB0byB0aGUgcXVlcnknIDogJ0RvY3VtZW50IGF0dGFjaGVkJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlIGdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWUtLWRvY3VtZW50QXR0YWNoZWRcIj5cbiAgICAgICAgICA8Y2NkLXF1ZXJ5LWF0dGFjaG1lbnRzLXJlYWRcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5mb3JtR3JvdXAuZ2V0KCdhdHRhY2htZW50cycpLnZhbHVlXCJcbiAgICAgICAgICAgIFthdHRhY2htZW50c109XCJ0aGlzLmZvcm1Hcm91cC5nZXQoJ2F0dGFjaG1lbnRzJykudmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2NjZC1xdWVyeS1hdHRhY2htZW50cy1yZWFkPlxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG5cbiAgICA8YnI+XG5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0zXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAge3sgJ1ByZXZpb3VzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZ292dWstYnV0dG9uXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIiAoY2xpY2spPVwic3VibWl0KClcIj5cbiAgICAgICAge3sgJ1N1Ym1pdCcgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Y2NkLXF1ZXJ5LWV2ZW50LWNvbXBsZXRpb24gW2V2ZW50Q29tcGxldGlvblBhcmFtc109XCJldmVudENvbXBsZXRpb25QYXJhbXNcIj4gICAgXG4gIDwvY2NkLXF1ZXJ5LWV2ZW50LWNvbXBsZXRpb24+XG48L2Rpdj5cbiJdfQ==
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBS2pCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxSCxPQUFPLEVBQWtELGtCQUFrQixFQUFFLGFBQWEsRUFB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O2tCQUFqQyxLQUFLO1lBQ1UsU0FBUztrQkFBeEIsS0FBSztZQUNXLFdBQVc7a0JBQTNCLE1BQU07WUFDVSxjQUFjO2tCQUE5QixNQUFNOztrRkFaSSw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ2FzZUV2ZW50VHJpZ2dlcixcbiAgQ2FzZVZpZXcsXG4gIENhc2VWaWV3VHJpZ2dlcixcbiAgRXJyb3JNZXNzYWdlLFxuICBUYXNrU2VhcmNoUGFyYW1ldGVyXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zaGFyZWQvZG9tYWluJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV2ZW50Q29tcGxldGlvblBhcmFtcyB9IGZyb20gJy4uLy4uLy4uLy4uL2Nhc2UtZWRpdG9yL2RvbWFpbi9ldmVudC1jb21wbGV0aW9uLXBhcmFtcy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlTm90aWZpZXIsIENhc2VzU2VydmljZSwgRXZlbnRUcmlnZ2VyU2VydmljZSwgV29ya0FsbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMnO1xuaW1wb3J0IHsgQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uLCBRbUNhc2VRdWVyaWVzQ29sbGVjdGlvbiwgUXVlcnlDcmVhdGVDb250ZXh0LCBRdWVyeUxpc3RJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IFF1ZXJ5TWFuYWdlbWVudFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktbWFuYWdlbWVudC51dGlscyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtcXVlcnktY2hlY2steW91ci1hbnN3ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWNoZWNrLXlvdXItYW5zd2Vycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWNoZWNrLXlvdXItYW5zd2Vycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5Q2hlY2tZb3VyQW5zd2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBSQUlTRV9BX1FVRVJZX0VWRU5UX1RSSUdHRVJfSUQgPSAncXVlcnlNYW5hZ2VtZW50UmFpc2VRdWVyeSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgUkVTUE9ORF9UT19RVUVSWV9FVkVOVF9UUklHR0VSX0lEID0gJ3F1ZXJ5TWFuYWdlbWVudFJlc3BvbmRRdWVyeSc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDQVNFX1FVRVJJRVNfQ09MTEVDVElPTl9JRCA9ICdDYXNlUXVlcmllc0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgRklFTERfVFlQRV9DT01QTEVYID0gJ0NvbXBsZXgnO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgcHVibGljIHF1ZXJ5SXRlbTogUXVlcnlMaXN0SXRlbTtcbiAgQElucHV0KCkgcHVibGljIHF1ZXJ5Q3JlYXRlQ29udGV4dDogUXVlcnlDcmVhdGVDb250ZXh0O1xuICBASW5wdXQoKSBwdWJsaWMgZXZlbnREYXRhOiBDYXNlRXZlbnRUcmlnZ2VyIHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBwdWJsaWMgYmFja0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcXVlcnlTdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBjYXNlVmlld1RyaWdnZXI6IENhc2VWaWV3VHJpZ2dlcjtcbiAgcHJpdmF0ZSBjYXNlRGV0YWlsczogQ2FzZVZpZXc7XG4gIHByaXZhdGUgcXVlcnlJZDogc3RyaW5nO1xuICBwcml2YXRlIGNyZWF0ZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2VhcmNoVGFza3NTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwdWJsaWMgcXVlcnlDcmVhdGVDb250ZXh0RW51bSA9IFF1ZXJ5Q3JlYXRlQ29udGV4dDtcbiAgcHVibGljIGV2ZW50Q29tcGxldGlvblBhcmFtczogRXZlbnRDb21wbGV0aW9uUGFyYW1zO1xuICBwdWJsaWMgY2FzZVF1ZXJpZXNDb2xsZWN0aW9uczogQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uW107XG4gIHB1YmxpYyBmaWVsZElkOiBzdHJpbmc7XG5cbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VzU2VydmljZTogQ2FzZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZU5vdGlmaWVyOiBDYXNlTm90aWZpZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrQWxsb2NhdGlvblNlcnZpY2U6IFdvcmtBbGxvY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRUcmlnZ2VyU2VydmljZTogRXZlbnRUcmlnZ2VyU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnFpZDtcbiAgICB0aGlzLmNhc2VOb3RpZmllci5jYXNlVmlldy5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoY2FzZURldGFpbHMpID0+IHtcbiAgICAgIHRoaXMuY2FzZURldGFpbHMgPSBjYXNlRGV0YWlscztcblxuICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgdHJpZ2dlciBiYXNlZCBvbiB0aGUgcXVlcnlDcmVhdGVDb250ZXh0XG4gICAgICB0aGlzLmNhc2VWaWV3VHJpZ2dlciA9IHRoaXMuY2FzZURldGFpbHMudHJpZ2dlcnMuZmluZCgodHJpZ2dlcikgPT5cbiAgICAgICAgdGhpcy5xdWVyeUNyZWF0ZUNvbnRleHQgIT09IFF1ZXJ5Q3JlYXRlQ29udGV4dC5SRVNQT05EXG4gICAgICAgIC8vIElmIHRoZSBjb250ZXh0IGlzIG5vdCAnUkVTUE9ORCcsIGZpbmQgdGhlIHRyaWdnZXIgd2l0aCB0aGUgSUQgZm9yIHJhaXNpbmcgYSBxdWVyeVxuICAgICAgICAgID8gdHJpZ2dlci5pZCA9PT0gdGhpcy5SQUlTRV9BX1FVRVJZX0VWRU5UX1RSSUdHRVJfSURcbiAgICAgICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgJ1JFU1BPTkQnLCBmaW5kIHRoZSB0cmlnZ2VyIHdpdGggdGhlIElEIGZvciByZXNwb25kaW5nIHRvIGEgcXVlcnlcbiAgICAgICAgICA6IHRyaWdnZXIuaWQgPT09IHRoaXMuUkVTUE9ORF9UT19RVUVSWV9FVkVOVF9UUklHR0VSX0lEXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZXRDYXNlUXVlcmllc0NvbGxlY3Rpb25EYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVFdmVudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNlYXJjaFRhc2tzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLmJhY2tDbGlja2VkLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0KCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIGZpZWxkSWQgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICBpZiAoIXRoaXMuZmllbGRJZCkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6IEZpZWxkIElEIGlzIG1pc3NpbmcuIENhbm5vdCBwcm9jZWVkIHdpdGggc3VibWlzc2lvbi4nKTtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU29tZXRoaW5nIHVuZXhwZWN0ZWQgaGFwcGVuZWQuIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgICAgICAgICBmaWVsZElkOiAnZmllbGQtaWQnXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2VuZXJhdGVDYXNlUXVlcmllc0NvbGxlY3Rpb25EYXRhKCk7XG4gICAgdGhpcy5jcmVhdGVFdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuY2FzZXNTZXJ2aWNlLmNyZWF0ZUV2ZW50KHRoaXMuY2FzZURldGFpbHMsIHtcbiAgICAgIGRhdGEsXG4gICAgICBldmVudDoge1xuICAgICAgICBpZDogdGhpcy5jYXNlVmlld1RyaWdnZXI/LmlkLFxuICAgICAgICBzdW1tYXJ5OiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuY2FzZVZpZXdUcmlnZ2VyPy5kZXNjcmlwdGlvblxuICAgICAgfSxcbiAgICAgIGV2ZW50X3Rva2VuOiB0aGlzLmV2ZW50RGF0YT8uZXZlbnRfdG9rZW4sXG4gICAgICBpZ25vcmVfd2FybmluZzogZmFsc2VcbiAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBhbmQgY29tcGxldGUgdGFza1xuICAgICAgICB0aGlzLnNlYXJjaEFuZENvbXBsZXRlVGFzaygpO1xuICAgICAgICAvLyBFbWl0IHF1ZXJ5IHN1Ym1pdHRlZCBldmVudFxuICAgICAgICB0aGlzLnF1ZXJ5U3VibWl0dGVkLmVtaXQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgLy8gRXJyb3JcbiAgICAgICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLycsICdzZXJ2aWNlLWRvd24nXSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaEFuZENvbXBsZXRlVGFzaygpOiB2b2lkIHtcbiAgICAvLyBTZWFyY2ggVGFza1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtZXRlciA9IHsgY2NkSWQ6IHRoaXMuY2FzZURldGFpbHMuY2FzZV9pZCB9IGFzIFRhc2tTZWFyY2hQYXJhbWV0ZXI7XG4gICAgdGhpcy5zZWFyY2hUYXNrc1N1YnNjcmlwdGlvbiA9IHRoaXMud29ya0FsbG9jYXRpb25TZXJ2aWNlLnNlYXJjaFRhc2tzKHNlYXJjaFBhcmFtZXRlcilcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gRmlsdGVyIHRhc2sgYnkgcXVlcnkgaWRcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFRhc2sgPSByZXNwb25zZS50YXNrcz8uZmluZCgodGFzaykgPT5cbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGFzay5hZGRpdGlvbmFsX3Byb3BlcnRpZXMpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdGhpcy5xdWVyeUlkKVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gVHJpZ2dlciBldmVudCBjb21wbGV0aW9uXG4gICAgICAgICAgdGhpcy5ldmVudENvbXBsZXRpb25QYXJhbXMgPSB7XG4gICAgICAgICAgICBjYXNlSWQ6IHRoaXMuY2FzZURldGFpbHMuY2FzZV9pZCxcbiAgICAgICAgICAgIGV2ZW50SWQ6IHRoaXMuUkVTUE9ORF9UT19RVUVSWV9FVkVOVF9UUklHR0VSX0lELFxuICAgICAgICAgICAgdGFzazogZmlsdGVyZWRUYXNrXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gc2VhcmNoVGFza3NTdWJzY3JpcHRpb246JywgZXJyb3IpO1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvciBhcHByb3ByaWF0ZWx5XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uRGF0YSgpOiBRbUNhc2VRdWVyaWVzQ29sbGVjdGlvbiB7XG4gICAgY29uc3QgY3VycmVudFVzZXJEZXRhaWxzID0gSlNPTi5wYXJzZSh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpKTtcblxuICAgIGNvbnN0IGNhc2VNZXNzYWdlID0gdGhpcy5xdWVyeUNyZWF0ZUNvbnRleHQgPT09IFF1ZXJ5Q3JlYXRlQ29udGV4dC5ORVdfUVVFUllcbiAgICAgID8gUXVlcnlNYW5hZ2VtZW50VXRpbHMuZ2V0TmV3UXVlcnlEYXRhKHRoaXMuZm9ybUdyb3VwLCBjdXJyZW50VXNlckRldGFpbHMpXG4gICAgICA6IFF1ZXJ5TWFuYWdlbWVudFV0aWxzLmdldFJlc3BvbmRPckZvbGxvd3VwUXVlcnlEYXRhKHRoaXMuZm9ybUdyb3VwLCB0aGlzLnF1ZXJ5SXRlbSwgY3VycmVudFVzZXJEZXRhaWxzKTtcblxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRhdGFpZDsgLy8gR2V0IHRoZSBtZXNzYWdlIElEIGZyb20gcm91dGUgcGFyYW1zIChpZiBwcmVzZW50KVxuICAgIGNvbnN0IGlzTmV3UXVlcnkgPSB0aGlzLnF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gUXVlcnlDcmVhdGVDb250ZXh0Lk5FV19RVUVSWTsgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBxdWVyeVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZpZWxkIElEIGhhcyBiZWVuIHNldCBkeW5hbWljYWxseVxuICAgIGlmICghdGhpcy5maWVsZElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogRmllbGQgSUQgZm9yIENhc2VRdWVyaWVzQ29sbGVjdGlvbiBub3QgZm91bmQuIENhbm5vdCBwcm9jZWVkIHdpdGggZGF0YSBnZW5lcmF0aW9uLicpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJywgJ3NlcnZpY2UtZG93biddKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIG5ldyBxdWVyeSBkYXRhIHN0cnVjdHVyZVxuICAgIGNvbnN0IG5ld1F1ZXJ5RGF0YTogUW1DYXNlUXVlcmllc0NvbGxlY3Rpb24gPSB7fTtcblxuICAgIGlmICh0aGlzLmNhc2VRdWVyaWVzQ29sbGVjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgbGV0IG1hdGNoZWRDb2xsZWN0aW9uO1xuXG4gICAgICAvLyBJZiBpdCdzIG5vdCBhIG5ldyBxdWVyeSwgdHJ5IHRvIGZpbmQgdGhlIGV4aXN0aW5nIGNvbGxlY3Rpb24gd2l0aCB0aGUgbWVzc2FnZSBJRFxuICAgICAgaWYgKCFpc05ld1F1ZXJ5ICYmIG1lc3NhZ2VJZCkge1xuICAgICAgICBtYXRjaGVkQ29sbGVjdGlvbiA9IHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucy5maW5kKChjb2xsZWN0aW9uKSA9PlxuICAgICAgICAgIGNvbGxlY3Rpb24uY2FzZU1lc3NhZ2VzLnNvbWUoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudmFsdWUuaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoZWRDb2xsZWN0aW9uKSB7XG4gICAgICAgIC8vIEFwcGVuZCB0aGUgbmV3IGNhc2UgbWVzc2FnZSB0byB0aGUgbWF0Y2hlZCBjb2xsZWN0aW9uJ3MgY2FzZU1lc3NhZ2VzXG4gICAgICAgIG1hdGNoZWRDb2xsZWN0aW9uLmNhc2VNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogY2FzZU1lc3NhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHRoZSBtYXRjaGVkIGNvbGxlY3Rpb24gdG8gbmV3UXVlcnlEYXRhXG4gICAgICAgIG5ld1F1ZXJ5RGF0YVt0aGlzLmZpZWxkSWRdID0ge1xuICAgICAgICAgIC4uLm1hdGNoZWRDb2xsZWN0aW9uLCAvLyBLZWVwIGV4aXN0aW5nIGRhdGEgaW50YWN0XG4gICAgICAgICAgY2FzZU1lc3NhZ2VzOiBbLi4ubWF0Y2hlZENvbGxlY3Rpb24uY2FzZU1lc3NhZ2VzXSAvLyBBcHBlbmQgdGhlIHVwZGF0ZWQgbWVzc2FnZXMgYXJyYXlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIG5vIGNvbGxlY3Rpb24gbWF0Y2hlcywgb3IgaXQncyBhIG5ldyBxdWVyeVxuICAgICAgICBuZXdRdWVyeURhdGFbdGhpcy5maWVsZElkXSA9IHtcbiAgICAgICAgICBwYXJ0eU5hbWU6ICcnLCAvLyBOb3QgcmV0dXJuZWQgYnkgQ0NEXG4gICAgICAgICAgcm9sZU9uQ2FzZTogJycsIC8vIE5vdCByZXR1cm5lZCBieSBDQ0RcbiAgICAgICAgICBjYXNlTWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICAgIHZhbHVlOiBjYXNlTWVzc2FnZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiBjYXNlUXVlcmllc0NvbGxlY3Rpb25zIGlzIG5vdCBlbXB0eSwgYXBwZW5kIGl0cyBkYXRhXG4gICAgICAgIG5ld1F1ZXJ5RGF0YVt0aGlzLmZpZWxkSWRdLmNhc2VNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucy5mbGF0TWFwKChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLmNhc2VNZXNzYWdlcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4aXN0aW5nIGNvbGxlY3Rpb25zLCBjcmVhdGUgYSBuZXcgb25lIChlLmcuLCBmb3IgbmV3IHF1ZXJpZXMpXG4gICAgICBuZXdRdWVyeURhdGFbdGhpcy5maWVsZElkXSA9IHtcbiAgICAgICAgcGFydHlOYW1lOiAnJywgLy8gTm90IHJldHVybmVkIGJ5IENDRFxuICAgICAgICByb2xlT25DYXNlOiAnJywgLy8gTm90IHJldHVybmVkIGJ5IENDRFxuICAgICAgICBjYXNlTWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIHZhbHVlOiBjYXNlTWVzc2FnZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1F1ZXJ5RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDYXNlUXVlcmllc0NvbGxlY3Rpb25EYXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50RGF0YT8uY2FzZV9maWVsZHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zID0gdGhpcy5ldmVudERhdGEuY2FzZV9maWVsZHMucmVkdWNlKChhY2MsIGNhc2VGaWVsZCkgPT4ge1xuICAgICAgICAvLyBFeHRyYWN0IHRoZSBJRCBiYXNlZCBvbiBjb25kaXRpb25zLCB1cGRhdGluZyB0aGlzLmZpZWxkSWQgZHluYW1pY2FsbHlcblxuICAgICAgICB0aGlzLmV4dHJhY3RDYXNlUXVlcnlJZChjYXNlRmllbGQpO1xuICAgICAgICBjb25zdCBleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQgPSBRdWVyeU1hbmFnZW1lbnRVdGlscy5leHRyYWN0Q2FzZVF1ZXJpZXNGcm9tQ2FzZUZpZWxkKGNhc2VGaWVsZCk7XG4gICAgICAgIGlmIChleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQgJiYgdHlwZW9mIGV4dHJhY3RlZENhc2VRdWVyaWVzRnJvbUNhc2VGaWVsZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhY2MucHVzaChleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0Q2FzZVF1ZXJ5SWQoZGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IHsgaWQsIHZhbHVlIH0gPSBkYXRhO1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRhdGFpZDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBmaWVsZF90eXBlIG1hdGNoZXMgQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uIGFuZCB0eXBlIGlzIENvbXBsZXhcbiAgICBpZiAoZGF0YS5maWVsZF90eXBlLmlkID09PSB0aGlzLkNBU0VfUVVFUklFU19DT0xMRUNUSU9OX0lEICYmIGRhdGEuZmllbGRfdHlwZS50eXBlID09PSB0aGlzLkZJRUxEX1RZUEVfQ09NUExFWCkge1xuICAgICAgaWYgKHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ICE9PSBRdWVyeUNyZWF0ZUNvbnRleHQuUkVTUE9ORCkge1xuICAgICAgICAvLyBTZXQgdGhlIGZpZWxkIElEIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZSBleHRyYWN0ZWQgZGF0YVxuICAgICAgICB0aGlzLmZpZWxkSWQgPSBpZDsgLy8gU3RvcmUgdGhlIElEIGZvciB1c2UgaW4gZ2VuZXJhdGluZyBuZXdRdWVyeURhdGFcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbWVzc2FnZUlkIGlzIHByZXNlbnQsIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBtZXNzYWdlXG4gICAgICBpZiAobWVzc2FnZUlkICYmIHZhbHVlPy5jYXNlTWVzc2FnZXMpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGEgbWVzc2FnZSB0aGF0IGhhcyB0aGUgc3BlY2lmaWVkIG1lc3NhZ2VJZFxuICAgICAgICBjb25zdCBtYXRjaGVkTWVzc2FnZSA9IHZhbHVlLmNhc2VNZXNzYWdlcy5maW5kKFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlLnZhbHVlLmlkID09PSBtZXNzYWdlSWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJZiBhIG1hdGNoaW5nIG1lc3NhZ2UgaXMgZm91bmQsIHNldCB0aGUgZmllbGRJZCB0byB0aGUgY29ycmVzcG9uZGluZyBpZFxuICAgICAgICBpZiAobWF0Y2hlZE1lc3NhZ2UpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkSWQgPSBpZDsgLy8gVGhpcyBhc3N1bWVzIHlvdSBzdGlsbCB3YW50IHRvIHVzZSB0aGUgc2FtZSBpZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkcy1mcm9tLWRlc2t0b3BcIj5cbiAgICA8IS0tIEVycm9yIG1lc3NhZ2Ugc3VtbWFyeSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT1cImVycm9yLXN1bW1hcnktdGl0bGVcIiByb2xlPVwiYWxlcnRcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGRhdGEtbW9kdWxlPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiPlxuICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZVwiIGlkPVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiPlxuICAgICAgIHt7ICdUaGVyZSBpcyBhIHByb2JsZW0nIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgIDwvaDI+XG4gICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgIDxhIFtpZF09XCInZXJyb3ItJyArIGVycm9yTWVzc2FnZS5maWVsZElkXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3sgZXJyb3JNZXNzYWdlLmRlc2NyaXB0aW9uIHwgcnB4VHJhbnNsYXRlIH19PC9hPlxuICAgICAgICAgPC9saT5cbiAgICAgICA8L3VsPlxuICAgICA8L2Rpdj5cbiAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUllcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jYXB0aW9uLWxcIj57eyAnUmFpc2UgYSBxdWVyeScgfCBycHhUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5SRVNQT05EOyBlbHNlIGRlZmF1bHRDaGVja1lvdXJBbnN3ZXJzVGl0bGVcIj5cbiAgICAgICAge3sgJ1JldmlldyBxdWVyeSByZXNwb25zZSBkZXRhaWxzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENoZWNrWW91ckFuc3dlcnNUaXRsZT5cbiAgICAgICAge3sgJ1JldmlldyBxdWVyeSBkZXRhaWxzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNFwiPlxuICAgICAgPGNjZC1xdWVyeS1jYXNlLWRldGFpbHMtaGVhZGVyPjwvY2NkLXF1ZXJ5LWNhc2UtZGV0YWlscy1oZWFkZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGwgKm5nSWY9XCJxdWVyeUNyZWF0ZUNvbnRleHQgIT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uRk9MTE9XVVBcIiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdCBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyAnU3VibWl0dGVkIHF1ZXJ5JyA6ICdRdWVyeSBzdWJqZWN0JyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlXCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyBxdWVyeUl0ZW0uc3ViamVjdCA6IGZvcm1Hcm91cC5nZXQoJ3N1YmplY3QnKT8udmFsdWUgfX1cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgICpuZ0lmPVwicXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWVwiIFxuICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuXG4gICAgPGRsIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uUkVTUE9ORCA/ICdSZXNwb25zZSBkZXRhaWwnIDogJ1F1ZXJ5IGRldGFpbCcgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IGZvcm1Hcm91cC5nZXQoJ2JvZHknKT8udmFsdWUgfX1cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuXG4gICAgPGRsICpuZ0lmPVwicXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWVwiIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyAnSXMgdGhlIHF1ZXJ5IGhlYXJpbmcgcmVsYXRlZD8nIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgIDwvZHQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUdyb3VwLmdldCgnaXNIZWFyaW5nUmVsYXRlZCcpPy52YWx1ZSA9PT0gdHJ1ZTsgZWxzZSBpc0hlYXJpbmdSZWxhdGVkRmFsc2VcIj5cbiAgICAgICAgICAgIHt7ICdJcyB0aGUgcXVlcnkgaGVhcmluZyByZWxhdGVkPycgfCBycHhUcmFuc2xhdGU6IG51bGwgOiAnWWVzJyB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNIZWFyaW5nUmVsYXRlZEZhbHNlPlxuICAgICAgICAgICAge3sgJ0lzIHRoZSBxdWVyeSBoZWFyaW5nIHJlbGF0ZWQ/JyB8IHJweFRyYW5zbGF0ZTogbnVsbCA6ICdObycgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmdldCgnaXNIZWFyaW5nUmVsYXRlZCcpPy52YWx1ZVwiIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uTkVXX1FVRVJZXG4gICAgICAgICAgICA/ICdXaGF0IGlzIHRoZSBkYXRlIG9mIHRoZSBoZWFyaW5nPydcbiAgICAgICAgICAgIDogJ1doYXQgaXMgdGhlIGRhdGUgb2YgdGhlIGhlYXJpbmcgeW91ciBxdWVyeSBpcyByZWxhdGVkIHRvPycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IGZvcm1Hcm91cC5nZXQoJ2hlYXJpbmdEYXRlJyk/LnZhbHVlIHwgZGF0ZTogJ2RkIE1NTSB5eXl5JyB9fVxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG5cbiAgICA8ZGwgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3QgZ292dWstIS1tYXJnaW4tYm90dG9tLTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3Jvd1wiPlxuICAgICAgICA8ZHQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2tleVwiPlxuICAgICAgICAgIHt7IHF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUlkgPyAnVXBsb2FkIGEgZmlsZSB0byB0aGUgcXVlcnknIDogJ0RvY3VtZW50IGF0dGFjaGVkJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlIGdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWUtLWRvY3VtZW50QXR0YWNoZWRcIj5cbiAgICAgICAgICA8Y2NkLXF1ZXJ5LWF0dGFjaG1lbnRzLXJlYWRcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5mb3JtR3JvdXAuZ2V0KCdhdHRhY2htZW50cycpLnZhbHVlXCJcbiAgICAgICAgICAgIFthdHRhY2htZW50c109XCJ0aGlzLmZvcm1Hcm91cC5nZXQoJ2F0dGFjaG1lbnRzJykudmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2NjZC1xdWVyeS1hdHRhY2htZW50cy1yZWFkPlxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG5cbiAgICA8YnI+XG5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0zXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAge3sgJ1ByZXZpb3VzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZ292dWstYnV0dG9uXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIiAoY2xpY2spPVwic3VibWl0KClcIj5cbiAgICAgICAge3sgJ1N1Ym1pdCcgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Y2NkLXF1ZXJ5LWV2ZW50LWNvbXBsZXRpb24gW2V2ZW50Q29tcGxldGlvblBhcmFtc109XCJldmVudENvbXBsZXRpb25QYXJhbXNcIj4gICAgXG4gIDwvY2NkLXF1ZXJ5LWV2ZW50LWNvbXBsZXRpb24+XG48L2Rpdj5cbiJdfQ==
|