@sunbird-cb/cbp-ai 0.1.70 → 0.1.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/approval-requests/approval-requests.component.mjs +3 -3
- package/esm2022/lib/components/edit-cbp-plan/edit-cbp-plan.component.mjs +16 -16
- package/esm2022/lib/components/generate-course-recommendation/generate-course-recommendation.component.mjs +2 -2
- package/esm2022/lib/components/review-request/review-request.component.mjs +3 -3
- package/esm2022/lib/components/suggest-more-courses/suggest-more-courses.component.mjs +61 -23
- package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +30 -3
- package/fesm2022/sunbird-cb-cbp-ai.mjs +108 -44
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts +1 -0
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts.map +1 -1
- package/lib/components/suggest-more-courses/suggest-more-courses.component.d.ts.map +1 -1
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts +2 -0
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -61,6 +61,7 @@ export class EditCbpPlanComponent {
|
|
|
61
61
|
this.masterData = {};
|
|
62
62
|
this.onDesignationSelectScrollBound = this.onDesignationSelectScroll.bind(this);
|
|
63
63
|
this.searchDesignationLoadCount = 50;
|
|
64
|
+
this.matchedDesignationIds = [];
|
|
64
65
|
if (this.sharedService.fromMdoPortal) {
|
|
65
66
|
this.planData = data?.element;
|
|
66
67
|
this.requestRowData = data?.requestData;
|
|
@@ -88,6 +89,7 @@ export class EditCbpPlanComponent {
|
|
|
88
89
|
// })
|
|
89
90
|
}
|
|
90
91
|
ngOnInit() {
|
|
92
|
+
this.matchedDesignationIds = this.data?.matched_role_mappings?.map((item) => item?.igot_designation_id) || [];
|
|
91
93
|
this.loadCompetenciesData();
|
|
92
94
|
this.initializeForm();
|
|
93
95
|
const searchControl = this.cbpForm.get('searchDesignation');
|
|
@@ -226,7 +228,7 @@ export class EditCbpPlanComponent {
|
|
|
226
228
|
req["igot_designation_id"] = selectedDesignation?.igot_designation_id || '';
|
|
227
229
|
}
|
|
228
230
|
if (this.sharedService.fromMdoPortal) {
|
|
229
|
-
req['request_id'] = this.requestRowData?.
|
|
231
|
+
req['request_id'] = this.requestRowData?.id;
|
|
230
232
|
req['item_id'] = this.planData?.id;
|
|
231
233
|
}
|
|
232
234
|
let role_mapping_id = this.planData.id;
|
|
@@ -535,11 +537,13 @@ export class EditCbpPlanComponent {
|
|
|
535
537
|
.subscribe({
|
|
536
538
|
next: (res) => {
|
|
537
539
|
const content = _.get(res, 'result.result.data', []);
|
|
538
|
-
const
|
|
540
|
+
const matchedIds = new Set(this.matchedDesignationIds);
|
|
541
|
+
const mapped = content
|
|
542
|
+
.filter((item) => !matchedIds.has(item?.id))
|
|
543
|
+
.map((item) => ({
|
|
544
|
+
id: item?.id,
|
|
539
545
|
name: item?.designation || '',
|
|
540
546
|
status: item?.status || 'Active',
|
|
541
|
-
igot_designation_name: item?.designation || '',
|
|
542
|
-
igot_designation_id: item?.id || ''
|
|
543
547
|
}));
|
|
544
548
|
const total = _.get(res, 'result.result.totalcount', _.get(res, 'result.result.data.totalCount', _.get(res, 'result.result.totalCount', 0)));
|
|
545
549
|
this.defaultSearchDesignationCount = total;
|
|
@@ -569,18 +573,14 @@ export class EditCbpPlanComponent {
|
|
|
569
573
|
const designationControl = this.cbpForm.get('designation_name');
|
|
570
574
|
if (designationControl) {
|
|
571
575
|
const currentValues = designationControl.value || [];
|
|
572
|
-
console.log('currentValues--', currentValues);
|
|
573
|
-
const validValues = this.masterData.designationBackup.some((item) => item?.name === currentValues);
|
|
574
|
-
console.log(this.planData);
|
|
575
|
-
if (!validValues) {
|
|
576
|
-
this.cbpForm.get('designation_name')?.setValue(this.planData?.designation_name || '');
|
|
577
|
-
console.log('this.cbpForm', this.cbpForm);
|
|
578
|
-
}
|
|
579
576
|
console.log('currentValues', currentValues);
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
577
|
+
const validValues = currentValues;
|
|
578
|
+
this.masterData.designationBackup.some((item) => item?.name === currentValues);
|
|
579
|
+
console.log(validValues);
|
|
580
|
+
console.log(this.masterData.designationBackup);
|
|
581
|
+
// if (validValues.length !== currentValues.length) {
|
|
582
|
+
designationControl.setValue(validValues);
|
|
583
|
+
// }
|
|
584
584
|
}
|
|
585
585
|
// no more data
|
|
586
586
|
if (!mapped || mapped.length === 0) {
|
|
@@ -819,4 +819,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
819
819
|
type: ViewChild,
|
|
820
820
|
args: ['designation', { read: ElementRef }]
|
|
821
821
|
}] } });
|
|
822
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFROUIsTUFBTSxPQUFPLG9CQUFvQjtJQThDL0IsWUFDUyxTQUE2QyxFQUNwQixJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUNyQixJQUFnQixFQUNqQixLQUFxQjtRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxD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QUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQzdDLENBQUMsRUFDRCxJQUFJLENBQUMsMkJBQTJCLENBQ2pDLENBQUM7UUFFSixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFFVCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUNsQyx1QkFBdUIsQ0FDVCxDQUFDO1FBRWpCLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLG1CQUFtQixDQUN2QixRQUFRLEVBQ1IsSUFBSSxDQUFDLDhCQUE4QixDQUNwQyxDQUFDO1NBQ0g7SUFDSCxDQUFDOytHQTNnQ1Usb0JBQW9CLDhDQWdEckIsZUFBZTttR0FoRGQsb0JBQW9CLG9QQXFDRyxVQUFVLDZCQ25EOUMsaThpQkE4U007OzRGRGhTTyxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsbUJBQW1COzswQkFvRDFCLE1BQU07MkJBQUMsZUFBZTtrTkFaRyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ3NCLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJ1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1lZGl0LWNicC1wbGFuJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRWRpdENicFBsYW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgc2VsZWN0ZWRWYWx1ZSA9ICcnXG4gIHNlYXJjaFRleHQgPSAnJ1xuICBwbGFuRGF0YTogYW55XG4gIGNvbXBldGVuY2llc0NvdW50ID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH1cbiAgY2JwRm9ybTogRm9ybUdyb3VwO1xuICBsb2FkaW5nID0gZmFsc2VcblxuICAvLyBFbmhhbmNlZCBjb21wZXRlbmN5IHNlbGVjdGlvbiBwcm9wZXJ0aWVzXG4gIGNvbXBldGVuY2llc0RhdGE6IGFueVtdID0gW107XG4gIGF2YWlsYWJsZVRoZW1lczogYW55W10gPSBbXTtcbiAgYXZhaWxhYmxlU3ViVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZFRoZW1lczogYW55W10gPSBbXTtcbiAgZmlsdGVyZWRTdWJUaGVtZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgc2VsZWN0ZWRUaGVtZSA9ICcnO1xuICBzZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gIG1hbnVhbFRoZW1lID0gJyc7XG4gIG1hbnVhbFN1YlRoZW1lID0gJyc7XG4gIHRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICBzdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcbiAgZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gZmFsc2VcbiAgZWRpdENvbXBldGVuY3lJbmRleCA9IC0xXG4gIG9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyOiBhbnkgPSBbXVxuICBkZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25PZmZzZXQgPSAwXG4gIG9kY3NEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTBcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gNTBcbiAgbm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJydcbiAgZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gIHNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICBAVmlld0NoaWxkKCdkaWFsb2dDb250ZW50JykgZGlhbG9nQ29udGVudCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Rlc2lnbmF0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRlc2lnbmF0aW9uUmVmPzogRWxlbWVudFJlZlxuICBtYXN0ZXJEYXRhOiBhbnkgPSB7fVxuICBwb3J0YWxEYXRhOiBhbnlcbiAgYWN0aXZlUm93RWxlbWVudDogYW55XG4gIHJlcXVlc3REYXRhOiBhbnlcbiAgcmVxdWVzdFJvd0RhdGE6IGFueVxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsQm91bmQgPVxuICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpO1xuICBzZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFZGl0Q2JwUGxhbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGE/LmVsZW1lbnRcbiAgICAgIHRoaXMucmVxdWVzdFJvd0RhdGEgPSBkYXRhPy5yZXF1ZXN0RGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihkYXRhPy5mcm9tTGlicmFyeSkge1xuICAgICAgICB0aGlzLnBsYW5EYXRhID0gZGF0YT8uZWxlbWVudFxuICAgICAgfSBlbHNlIHsgIFxuICAgICAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBkYXRhOicsIGRhdGEpO1xuICAgIC8vIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoY29tcGV0ZW5jaWVzOmFueSk9PntcbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ3RvdGFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50Wyd0b3RhbCddICsgMSBcbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnQmVoYXZpb3JhbCcpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddICsxXG4gICAgLy8gICB9XG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0Z1bmN0aW9uYWwnKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSArMVxuICAgIC8vICAgfVxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2RvbWFpbiddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZG9tYWluJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRDb21wZXRlbmNpZXNEYXRhKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIGNvbnN0IHNlYXJjaENvbnRyb2wgPSB0aGlzLmNicEZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpO1xuXG4gICAgaWYgKHNlYXJjaENvbnRyb2wpIHtcbiAgICAgIHNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgY29uc3QgdHh0ID0gcmVzPy50b1N0cmluZygpPy50cmltKCkgPz8gJyc7XG5cbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHR4dDtcblxuICAgICAgICAgIC8vIFJFU0VUIFNFQVJDSCBQQUdJTkFUSU9OXG4gICAgICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuXG4gICAgICAgICAgaWYgKHR4dD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBBUEkgU0VBUkNIIE9OTFlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtanNkZm0nKVxuICAgICAgICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApO1xuXG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID1cbiAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uU2FmZSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuXG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcblxuICAgIGNvbnNvbGUubG9nKCdyZXF1ZXN0SWQnLCByZXF1ZXN0SWQpXG4gIH1cblxuICBsb2FkQ29tcGV0ZW5jaWVzRGF0YSgpIHtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q29tcGV0ZW5jeUpzb24oKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNEYXRhID0gZGF0YTtcbiAgICAgICAgY29uc29sZS5sb2coJ0NvbXBldGVuY2llcyBkYXRhIGxvYWRlZDonLCB0aGlzLmNvbXBldGVuY2llc0RhdGEpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjb21wZXRlbmNpZXMgZGF0YTonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5Q291bnRzKCkge1xuICAgIGNvbnN0IGNvbXBzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50ID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH07XG4gICAgY29tcHMuZm9yRWFjaChjID0+IHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQudG90YWwrKztcbiAgICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2JlaGF2aW9yYWwnKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LmJlaGF2aW9yYWwrKztcbiAgICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2Z1bmN0aW9uYWwnKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LmZ1bmN0aW9uYWwrKztcbiAgICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2RvbWFpbicpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuZG9tYWluKys7XG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplRm9ybSgpIHtcbiAgICB0aGlzLmNicEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRlc2lnbmF0aW9uX25hbWU6IFt0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHdpbmdfZGl2aXNpb25fc2VjdGlvbjogW3RoaXMucGxhbkRhdGE/LndpbmdfZGl2aXNpb25fc2VjdGlvbiB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByb2xlX3Jlc3BvbnNpYmlsaXRpZXNfdGV4dDogW3RoaXMucGxhbkRhdGE/LnJvbGVfcmVzcG9uc2liaWxpdGllcz8uam9pbignXFxuJykgfHwgJyddLFxuICAgICAgYWN0aXZpdGllc190ZXh0OiBbdGhpcy5wbGFuRGF0YT8uYWN0aXZpdGllcz8uam9pbignXFxuJykgfHwgJyddLFxuICAgICAgY29tcGV0ZW5jeVNlYXJjaFRleHQ6IFsnJ10sXG4gICAgICBjb21wZXRlbmN5VHlwZTogWycnXSxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogWycnXSxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogWycnXSxcbiAgICAgIG1hbnVhbFRoZW1lSW5wdXQ6IFsnJ10sXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBbJyddLFxuICAgICAgdGhlbWVTZWFyY2g6IFsnJ10sXG4gICAgICBzdWJUaGVtZVNlYXJjaDogWycnXSxcbiAgICAgIGNvbXBldGVuY2llczogdGhpcy5mYi5hcnJheSh0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXMgfHwgW10pLCAvLyBvcHRpb25hbCBjdXN0b21pemF0aW9uLFxuICAgICAgc2VhcmNoRGVzaWduYXRpb246IFsnJ10sXG4gICAgICBpZ290X2Rlc2lnbmF0aW9uX2lkOiBbdGhpcy5wbGFuRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZCB8fCAnJ11cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddKSB7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uU2FmZSgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXNpZ25hdGlvblNhZmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSB0cnVlXG4gICAgdGhpcy5nZXREZXNpZ25hdGlvbigpXG4gIH1cblxuXG4gIGdldCByb2xlUmVzcG9uc2liaWxpdGllcygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdyb2xlX3Jlc3BvbnNpYmlsaXRpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBzZWFyY2hEYXRhKCkge1xuXG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcblxuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGU6IHN0cmluZyk6IGFueVtdIHtcbiAgICByZXR1cm4gKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUgfHwgW10pLmZpbHRlcihjID0+IGMudHlwZSA9PT0gdHlwZSk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgc2F2ZVJvbGVNYXBwaW5nKCkge1xuICAgIGlmICh0aGlzLmNicEZvcm0uaW52YWxpZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmNicEZvcm0udmFsdWU7XG4gICAgY29uc29sZS5sb2coJ1N1Ym1pdHRlZCBEYXRhOicsIGZvcm1EYXRhKTtcbiAgICBsZXQgY2JwUGxhbkRhdGE6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo7XG4gICAgY29uc29sZS5sb2coJ2NicFBsYW5EYXRhJywgY2JwUGxhbkRhdGEpXG4gICAgY29uc3Qgcm9sZVJlc3BvbnNpYmlsaXRpZXNBcnJheSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5yb2xlX3Jlc3BvbnNpYmlsaXRpZXNfdGV4dFxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKVxuICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUpO1xuICAgIGNvbnN0IGFjdGl2aXRpZXMgPSB0aGlzLmNicEZvcm0udmFsdWUuYWN0aXZpdGllc190ZXh0XG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIGxldCByZXEgPVxuICAgIHtcbiAgICAgIFwic2VjdG9yX25hbWVcIjogY2JwUGxhbkRhdGE/LnNlY3RvcnM/LmpvaW4oXCIsXCIpLFxuICAgICAgXCJpbnN0cnVjdGlvblwiOiBjYnBQbGFuRGF0YT8uaW5zdHJ1Y3Rpb24gPyBjYnBQbGFuRGF0YS5pbnN0cnVjdGlvbiA6ICcnLFxuICAgICAgXCJ3aW5nX2RpdmlzaW9uX3NlY3Rpb25cIjogZm9ybURhdGE/LndpbmdfZGl2aXNpb25fc2VjdGlvbixcbiAgICAgIFwicm9sZV9yZXNwb25zaWJpbGl0aWVzXCI6IHJvbGVSZXNwb25zaWJpbGl0aWVzQXJyYXksXG4gICAgICBcImFjdGl2aXRpZXNcIjogYWN0aXZpdGllcyxcbiAgICAgIFwiY29tcGV0ZW5jaWVzXCI6IGZvcm1EYXRhLmNvbXBldGVuY2llc1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnbWFzdGVyRGF0YT8uZGVzaWduYXRpb24nLCB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uKVxuXG4gICAgaWYgKGZvcm1EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkKSB7XG4gICAgICByZXFbXCJpZ290X2Rlc2lnbmF0aW9uX2lkXCJdID0gZm9ybURhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJycsXG4gICAgICAgIHJlcVtcImRlc2lnbmF0aW9uX25hbWVcIl0gPSBmb3JtRGF0YT8uZGVzaWduYXRpb25fbmFtZSA/IGZvcm1EYXRhLmRlc2lnbmF0aW9uX25hbWUgOiAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnbWFzdGVyRGF0YT8uZGVzaWduYXRpb24nLCB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uKVxuXG4gICAgICByZXFbXCJkZXNpZ25hdGlvbl9uYW1lXCJdID0gZm9ybURhdGE/LmRlc2lnbmF0aW9uX25hbWUgPyBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lIDogJydcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uPy5maW5kKFxuICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgIGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1EYXRhPy5kZXNpZ25hdGlvbl9uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICByZXFbXCJpZ290X2Rlc2lnbmF0aW9uX2lkXCJdID0gc2VsZWN0ZWREZXNpZ25hdGlvbj8uaWdvdF9kZXNpZ25hdGlvbl9pZCB8fCAnJztcblxuICAgIH1cblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgcmVxWydyZXF1ZXN0X2lkJ10gPSB0aGlzLnJlcXVlc3RSb3dEYXRhPy5kZW1hbmRfaWRcbiAgICAgIHJlcVsnaXRlbV9pZCddID0gdGhpcy5wbGFuRGF0YT8uaWRcbiAgICB9XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JvbGUgTWFwcGluZyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxGb3JtKCkge1xuICAgIC8vIE1hcmsgYWxsIGNvbnRyb2xzIGFzIHByaXN0aW5lIGFuZCB1bnRvdWNoZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmFsdWVzXG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgIC8vIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUgPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jaWVzQXJyYXknLHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgLy8gQWxzbywgaWYgeW91IHdhbnQgdG8gbWFyayBhbGwgY2hpbGQgY29udHJvbHMgKEZvcm1Db250cm9scyAvIEZvcm1BcnJheXMgLyBGb3JtR3JvdXBzKSBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkXG4gICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQodGhpcy5jYnBGb3JtKTtcbiAgICAvLyBpZih0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPiAtMSkge1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3R5cGUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddXG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXVxuICAgIC8vIH1cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSkge1xuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChjb250cm9sKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjb21wZXRlbmNpZXNBcnJheSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdjb21wZXRlbmNpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICAvLyBSZXNldCBmb3JtIGNvbnRyb2xzXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVRoZW1lOiAnJyxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiAnJyxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6ICcnLFxuICAgICAgdGhlbWVTZWFyY2g6ICcnLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6ICcnXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgICAgLy8gTG9hZCB0aGVtZXMgZnJvbSBKU09OIGZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsXG4gICAgICBjb25zdCBjb21wZXRlbmN5Q2F0ZWdvcnkgPSB0aGlzLmNvbXBldGVuY2llc0RhdGEuZmluZChjYXQgPT5cbiAgICAgICAgY2F0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdHlwZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICh0eXBlID09PSAnQmVoYXZpb3JhbCcgJiYgY2F0Lm5hbWUgPT09ICdCZWhhdmlvdXJhbCcpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29tcGV0ZW5jeUNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gY29tcGV0ZW5jeUNhdGVnb3J5LmNvbXBldGVuY3lfdGhlbWUgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVUaGVtZXNdO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgRG9tYWluLCBubyB0aGVtZXMgYXJlIGxvYWRlZCAtIHVzZXIgd2lsbCBlbnRlciBtYW51YWxseVxuICB9XG5cbiAgb25UaGVtZUNoYW5nZSh0aGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9IHRoZW1lTmFtZTtcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgdGhlbWUgYW5kIGxvYWQgaXRzIHN1Yi10aGVtZXNcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1lT2JqID0gdGhpcy5hdmFpbGFibGVUaGVtZXMuZmluZCh0aGVtZSA9PiB0aGVtZS5uYW1lID09PSB0aGVtZU5hbWUpO1xuICAgIGlmIChzZWxlY3RlZFRoZW1lT2JqKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IHNlbGVjdGVkVGhlbWVPYmouY29tcGV0ZW5jeV9zdWJfdGhlbWUgfHwgW107XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9XG4gIH1cblxuICBvblN1YlRoZW1lQ2hhbmdlKHN1YlRoZW1lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lO1xuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgQmVoYXZpb3JhbC9GdW5jdGlvbmFsLCB1c2UgZHJvcGRvd24gc2VsZWN0aW9uc1xuICAgICAgdGhlbWUgPSB0aGlzLnNlbGVjdGVkVGhlbWU7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuc2VsZWN0ZWRTdWJUaGVtZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZS5zb21lKGMgPT5cbiAgICAgICAgYy50aGVtZSA9PT0gdGhlbWUgJiYgYy5zdWJfdGhlbWUgPT09IHN1YlRoZW1lICYmIGMudHlwZSA9PT0gdHlwZVxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG5cbiAgcmVzZXRDb21wZXRlbmN5Rm9ybSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gW107XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnJyxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbHRlcih0aGVtZSA9PlxuICAgICAgICB0aGVtZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTdWJUaGVtZXMoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgIGlmICghc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVTdWJUaGVtZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMuZmlsdGVyKHN1YlRoZW1lID0+XG4gICAgICAgIHN1YlRoZW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjYW5BZGRDb21wZXRlbmN5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJykge1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgY29uc3Qgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgcmV0dXJuICEhKHRoZW1lICYmIHN1YlRoZW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICEhKHRoaXMuc2VsZWN0ZWRUaGVtZSAmJiB0aGlzLnNlbGVjdGVkU3ViVGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbXBldGVuY3koY29tcCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wudmFsdWUudGhlbWUgPT09IGNvbXAudGhlbWUgJiYgY29udHJvbC52YWx1ZS50eXBlID09PSBjb21wLnR5cGVcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZWRpdENvbXBldGVuY3koY29tcCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gdHJ1ZVxuICAgIHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA9IC0xXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVR5cGU6ICdEb21haW4nLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogY29tcD8udGhlbWUsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBjb21wPy5zdWJfdGhlbWVcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuZmluZEluZGV4KGMgPT5cbiAgICAgIGMudGhlbWUgPT09IGNvbXA/LnRoZW1lICYmXG4gICAgICBjLnN1Yl90aGVtZSA9PT0gY29tcD8uc3ViX3RoZW1lICYmXG4gICAgICBjLnR5cGUgPT09IFwiRG9tYWluXCJcbiAgICApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSBpbmRleFxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfSwgNTAwKVxuICB9XG5cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gZmFsc2VcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpXG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5KCkge1xuICAgIGxldCB0eXBlID0gdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlO1xuICAgIGxldCB0aGVtZSA9ICcnO1xuICAgIGxldCBzdWJUaGVtZSA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgICAvLyBGb3IgRG9tYWluLCB1c2UgbWFudWFsIGlucHV0XG4gICAgICB0aGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxTdWJUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlKSlcbiAgICB9XG4gICAgY29uc29sZS5sb2coJyB0aGlzLmNvbXBldGVuY2llc0FycmF5JywgdGhpcy5jb21wZXRlbmNpZXNBcnJheSlcbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4LS0nLCB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXgpXG4gICAgICBpZiAodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0eXBlXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoZW1lXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ10gPSBzdWJUaGVtZVxuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWV4aXN0cykge1xuICAgICAgLy8gICBjb25zdCBuZXdDb21wID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAvLyAgICAgdHlwZTogW3R5cGVdLFxuICAgICAgLy8gICAgIHRoZW1lOiBbdGhlbWVdLFxuICAgICAgLy8gICAgIHN1Yl90aGVtZTogW3N1YlRoZW1lXVxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5wdXNoKG5ld0NvbXApO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBDbGVhciBpbnB1dCBmaWVsZHMgYWZ0ZXIgYWRkaW5nXG4gICAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyJywgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycilcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7IGNvbXBldGVuY2llczogWy4uLmN1cnJlbnRWYWx1ZXNdIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSk7XG4gIH1cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cblxuICAgIC8vIGNsZWFyIGFueSBwcmV2aW91cyBkZWJ1ZyBob29rc1xuICAgIGlmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hUZXh0Py5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICBjb25zdCByZXFPZmZzZXQgPSAodHlwZW9mIG9mZnNldCA9PT0gJ251bWJlcicpID8gb2Zmc2V0IDogdGhpcy5kZXNpZ25hdGlvbk9mZnNldFxuICAgIGxldCByZXFMaW1pdCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgY29uc3QgcGFnZUluZGV4ID0gcmVxTGltaXQgPiAwID8gTWF0aC5mbG9vcihyZXFPZmZzZXQgLyByZXFMaW1pdCkgOiAwXG4gICAgLy8gaWYgd2UncmUgcmVxdWVzdGluZyBmcm9tIGZpcnN0IHBhZ2UsIGNsZWFyIHRoZSBuby1tb3JlLWRhdGEgZ3VhcmRcbiAgICBpZiAocGFnZUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICByZXFMaW1pdCA9IDUwXG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgICB9LFxuICAgICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAgIHBhZ2VOdW1iZXI6IHBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiByZXFMaW1pdCxcbiAgICB9XG4gICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuICAgICAgcmVxdWVzdEJvZHlbJ3NlYXJjaFN0cmluZyddID0gc2VhcmNoVGV4dFxuICAgICAgLy8gd2hlbiBzZWFyY2hpbmcsIHN0YXJ0IGZyb20gZmlyc3QgcGFnZVxuICAgICAgcmVxdWVzdEJvZHkucGFnZU51bWJlciA9IDBcbiAgICAgIC8vIGFsbG93IGxhcmdlciBwYWdlIGZvciBzZWFyY2ggaWYgbmVlZGVkXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlU2l6ZSA9IHBhZ2VJbmRleCA9PT0gMCA/IDUwIDogdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgIC8vIHJlc2V0IGd1YXJkIHdoZW4gcGVyZm9ybWluZyBhIGZyZXNoIHNlYXJjaFxuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgIH1cblxuICAgIC8vIGluZGljYXRlIGxvYWRpbmcgc3RhdGUgc28gc2Nyb2xsIGhhbmRsZXJzIGRvbid0IHRyaWdnZXIgcGFyYWxsZWwgY2FsbHNcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VhcmNoUHVibGljRGVzaWduYXRpb24ocmVxdWVzdEJvZHkpLnBpcGUoZmluYWxpemUoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2VcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gICAgICAgICAgY29uc3QgbWFwcGVkID0gY29udGVudC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0/LmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gICAgICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX25hbWU6IGl0ZW0/LmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogaXRlbT8uaWQgfHwgJydcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjb25zdCB0b3RhbCA9IF8uZ2V0KFxuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQudG90YWxjb3VudCcsXG4gICAgICAgICAgICBfLmdldChcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICAncmVzdWx0LnJlc3VsdC5kYXRhLnRvdGFsQ291bnQnLFxuICAgICAgICAgICAgICBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gdG90YWw7XG5cbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gU0VBUkNIIE1PREVcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkID0gbWFwcGVkO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAvLyBOT1JNQUwgTU9ERVxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgICAgICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IHJlcU9mZnNldCA9PT0gMCkge1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWQ7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9XG4gICAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBfLnVuaXFCeShcbiAgICAgICAgICAgICAgY29tYmluZWQsXG4gICAgICAgICAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIHByZXNlcnZlXG4gICAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID1cbiAgICAgICAgICAgIHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKTtcblxuICAgICAgICAgIGlmIChkZXNpZ25hdGlvbkNvbnRyb2wpIHtcblxuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlcyA9XG4gICAgICAgICAgICAgIGRlc2lnbmF0aW9uQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjdXJyZW50VmFsdWVzLS0nLCBjdXJyZW50VmFsdWVzKVxuICAgICAgICAgICAgY29uc3QgdmFsaWRWYWx1ZXMgPVxuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc29tZShcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtPy5uYW1lID09PSBjdXJyZW50VmFsdWVzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMucGxhbkRhdGEpXG4gICAgICAgICAgICBpZiAoIXZhbGlkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8uc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSB8fCAnJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5jYnBGb3JtJywgdGhpcy5jYnBGb3JtKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudFZhbHVlcycsIGN1cnJlbnRWYWx1ZXMpXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRWYWx1ZXMnLCB2YWxpZFZhbHVlcylcblxuICAgICAgICAgICAgLy8gaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBubyBtb3JlIGRhdGFcbiAgICAgICAgICBpZiAoIW1hcHBlZCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBkZXNpZ25hdGlvbiBkZXRhaWxzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cblxuXG5cbiAgfVxuXG4gIGVuc3VyZVNlbGVjdGVkRGVzaWduYXRpb25FeGlzdHMoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lO1xuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXT8uc29tZShcbiAgICAgIChkOiBhbnkpID0+IGQubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWQudG9Mb3dlckNhc2UoKVxuICAgICk7XG5cbiAgICBpZiAoIWV4aXN0cykge1xuICAgICAgY29uc3QgY3VzdG9tT2JqID0ge1xuICAgICAgICBuYW1lOiBzZWxlY3RlZCxcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJyxcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9uYW1lOiB0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX2lkOiB0aGlzLnBsYW5EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8IFwiREVTRy0wMDIzMTRcIixcbiAgICAgIH07XG5cbiAgICAgIC8vIOKchSBBZGQgYXQgVE9QIHNvIGl0J3MgdmlzaWJsZSBpbW1lZGlhdGVseVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gW1xuICAgICAgICBjdXN0b21PYmosXG4gICAgICAgIC4uLih0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pXG4gICAgICBdO1xuXG4gICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uJ10gPSBbXG4gICAgICAgIGN1c3RvbU9iaixcbiAgICAgICAgLi4uKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb24nXSB8fCBbXSlcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb246IHN0cmluZyA9XG4gICAgICAodGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG5cbiAgICBpZiAoIXNlbGVjdGVkRGVzaWduYXRpb24pIHJldHVybjtcbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXApIHJldHVybjtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICh2OiBzdHJpbmcpID0+ICh2IHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGJhY2t1cCA9IFsuLi50aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXBdO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IGJhY2t1cC5maW5kSW5kZXgoXG4gICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICBub3JtYWxpemUoaXRlbT8ubmFtZSkgPT09IG5vcm1hbGl6ZShzZWxlY3RlZERlc2lnbmF0aW9uKVxuICAgICk7XG5cbiAgICBsZXQgc2VsZWN0ZWRPYmo6IGFueTtcblxuICAgIC8vIElmIGV4aXN0cyDihpIgcmVtb3ZlIGl0IGFuZCByZXVzZVxuICAgIGlmIChleGlzdGluZ0luZGV4ID4gLTEpIHtcbiAgICAgIHNlbGVjdGVkT2JqID0gYmFja3VwLnNwbGljZShleGlzdGluZ0luZGV4LCAxKVswXTtcbiAgICB9XG4gICAgLy8gSWYgbm90IGV4aXN0cyDihpIgY3JlYXRlIG5ld1xuICAgIGVsc2Uge1xuICAgICAgc2VsZWN0ZWRPYmogPSB7XG4gICAgICAgIG5hbWU6IHNlbGVjdGVkRGVzaWduYXRpb24sXG4gICAgICAgIHN0YXR1czogJ0FjdGl2ZScsXG4gICAgICAgIGlkOiAnY3VzdG9tLScgKyBEYXRlLm5vdygpICsgJy0nICsgTWF0aC5yYW5kb20oKSxcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9uYW1lOiBzZWxlY3RlZERlc2lnbmF0aW9uLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX2lkOiAnY3VzdG9tLScgKyBEYXRlLm5vdygpICsgJy0nICsgTWF0aC5yYW5kb20oKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8g8J+UpSBNb3ZlIHRvIHRvcFxuICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCA9IFtcbiAgICAgIHNlbGVjdGVkT2JqLFxuICAgICAgLi4uYmFja3VwXG4gICAgXTtcblxuICAgIC8vIEFsc28gdXBkYXRlIHZpc2libGUgbGlzdCAoc2FtZSBvcmRlciBsb2dpYylcbiAgICBjb25zdCB2aXNpYmxlID0gWy4uLih0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gfHwgW10pXTtcblxuICAgIGNvbnN0IHZpc2libGVJbmRleCA9IHZpc2libGUuZmluZEluZGV4KFxuICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgbm9ybWFsaXplKGl0ZW0/Lm5hbWUpID09PSBub3JtYWxpemUoc2VsZWN0ZWREZXNpZ25hdGlvbilcbiAgICApO1xuXG4gICAgaWYgKHZpc2libGVJbmRleCA+IC0xKSB7XG4gICAgICB2aXNpYmxlLnNwbGljZSh2aXNpYmxlSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IFtcbiAgICAgIHNlbGVjdGVkT2JqLFxuICAgICAgLi4udmlzaWJsZVxuICAgIF07XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBvbkRlc2lnbmF0aW9uRHJvcGRvd25DbG9zZWQoKTogdm9pZCB7XG4gICAgLy8gS2VlcCB0aGUgZGVzaWduYXRpb24gdmFsdWUgYnV0IGNsZWFyIHRoZSBzZWFyY2ggaW5wdXRcbiAgICBjb25zdCBjdXJyZW50RGVzaWduYXRpb24gPSB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJykhLnZhbHVlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSkge1xuICAgICAgICB0aGlzLmNicEZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIS5zZXRWYWx1ZSgnJylcbiAgICAgIH1cbiAgICAgIC8vIEVuc3VyZSB0aGUgZGVzaWduYXRpb24gdmFsdWUgcmVtYWlucyBzZWxlY3RlZFxuICAgICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgICBjb25zdCBkZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk7XG4gICAgICAgIGlmIChkZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgICAgICBkZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoY3VycmVudERlc2lnbmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTAwKVxuICB9XG5cbiAgZGVzaWduYXRpb25TZWFyY2goZXZ0OiBhbnkpIHtcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZ0Py50YXJnZXQ/LnZhbHVlXG4gICAgY29uc3QgdHh0ID0gKHNlYXJjaFRleHQgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykgcmV0dXJuXG5cbiAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHR4dFxuICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWVcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odHh0LCAwKVxuICAgIH0gZWxzZSBpZiAodGhpcy5tYXN0ZXJEYXRhICYmIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXApIHtcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoMCwgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQpXG4gICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KClcbiAgICB9XG4gIH1cblxuICBzZXR1cFNjcm9sbExpc3RlbmVyKG9wZW5lZDogYm9vbGVhbik6IHZvaWQge1xuXG4gICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQpIHJldHVybjtcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSB0cnVlO1xuICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgIC8vIOKchSBPbmx5IHJlc2V0IHBhZ2luYXRpb24gaWYgd2UgaGF2ZSBubyBkYXRhIHlldFxuICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID0gMDtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odW5kZWZpbmVkLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g4pyFIFJlc3RvcmUgZnJvbSBiYWNrdXAgd2l0aG91dCByZXNldHRpbmcgb2Zmc2V0XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoXG4gICAgICAgIDAsIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICApO1xuICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICB9XG5cbiAgICAvLyBmb2N1cyBzZWFyY2ggaW5wdXRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPVxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VhcmNoLWlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgICAgaWYgKHNlYXJjaElucHV0KSB7XG4gICAgICAgIHNlYXJjaElucHV0LmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICB9LCAyMDApO1xuXG4gICAgLy8gYXR0YWNoIHNjcm9sbFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcubWF0LXNlbGVjdC1wYW5lbC5zZWFyY2gtcGFuZWwnXG4gICAgICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgICAgaWYgKCFwYW5lbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJFTU9WRSBPTEQgTElTVEVORVJcbiAgICAgIHBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdzY3JvbGwnLFxuICAgICAgICB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwgYXMgYW55XG4gICAgICApO1xuXG4gICAgICBwYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsLmJpbmQodGhpcyksXG4gICAgICAgIHsgcGFzc2l2ZTogdHJ1ZSB9XG4gICAgICApO1xuXG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcblxuICAgIGNvbnN0IGF0Qm90dG9tID1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gZWxlbWVudC5zY3JvbGxUb3AgPD1cbiAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgMTA7XG5cbiAgICBpZiAoIWF0Qm90dG9tIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZCA9XG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwPy5sZW5ndGggfHwgMDtcblxuICAgIGNvbnN0IHZpc2libGUgPVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbj8ubGVuZ3RoIHx8IDA7XG5cbiAgICBjb25zb2xlLmxvZyh7XG4gICAgICBsb2FkZWQsXG4gICAgICB2aXNpYmxlLFxuICAgICAgdG90YWw6IHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnRcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFNURVAgMVxuICAgICAqIFNIT1cgTU9SRSBGUk9NIExPQ0FMIENBQ0hFXG4gICAgICovXG4gICAgaWYgKHZpc2libGUgPCBsb2FkZWQpIHtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIC8vIElNUE9SVEFOVFxuICAgICAgLy8gY3JlYXRlIE5FVyBBUlJBWSByZWZlcmVuY2VcbiAgICAgIHRoaXMubWFzdGVyRGF0YSA9IHtcbiAgICAgICAgLi4udGhpcy5tYXN0ZXJEYXRhLFxuICAgICAgICBkZXNpZ25hdGlvbjogW1xuICAgICAgICAgIC4uLnRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgLy8gRk9SQ0UgVUkgVVBEQVRFXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gcmVzdG9yZSBzY3JvbGwgcG9zaXRpb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wIC0gMjA7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNURVAgMlxuICAgICAqIEZFVENIIE5FWFQgUEFHRVxuICAgICAqL1xuICAgIGlmIChcbiAgICAgIGxvYWRlZCA8IHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAgICF0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9uc1xuICAgICkge1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCB8fCB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBjbGVhckRlc2lnbmF0aW9uU2VhcmNoKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKCcnKTtcblxuICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICAgICk7XG5cbiAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cbiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLm1hdC1tZGMtc2VsZWN0LXBhbmVsJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAocGFuZWwpIHtcbiAgICAgIHBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdzY3JvbGwnLFxuICAgICAgICB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGxCb3VuZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiICNkaWFsb2dDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPkVkaXQgUm9sZSBNYXBwaW5nPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJjYnBGb3JtXCI+XG5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCIgW3ZhbHVlXT1cInBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA4cHggMTJweDsgd2lkdGg6IDEwMCU7Zm9udC1zaXplOiAxNHB4O2ZvbnQtZmFtaWx5OiAnTGF0byc7XCI+XG5cblxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cIm10LTQgbWFyZ2luLXRvcC1zIHctZnVsbCByZXF1aXJlZC1zZWxlY3RcIiAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA4cHggMTJweDsgd2lkdGg6IDEwMCU7Zm9udC1zaXplOiAxNHB4O2ZvbnQtZmFtaWx5OiAnTGF0byc7XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgI2Rlc2lnbmF0aW9uIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGRlc2lnbmF0aW9uXCIgKGNsb3NlZCk9XCJvbkRlc2lnbmF0aW9uRHJvcGRvd25DbG9zZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlYXJjaC1wYW5lbFwiIChvcGVuZWRDaGFuZ2UpPVwic2V0dXBTY3JvbGxMaXN0ZW5lcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0aWNreSBzZWFyY2ggaW5wdXQgY29udGFpbmVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktc2VhcmNoLWNvbnRhaW5lclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBkZXNpZ25hdGlvblwiIHN0eWxlPVwid2lkdGg6MTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoRGVzaWduYXRpb25cIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGtleXVwKT1cImRlc2lnbmF0aW9uU2VhcmNoKCRldmVudClcIiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2w/LnZhbHVlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xlYXItaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRGVzaWduYXRpb25TZWFyY2goJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZGVzaWduYXRpb24/Lm5hbWVcIiAqbmdGb3I9XCJsZXQgZGVzaWduYXRpb24gb2YgbWFzdGVyRGF0YT8uZGVzaWduYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXNpZ25hdGlvbj8ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZyBpbmRpY2F0b3IgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnNcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWQgTW9yZS4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKG1hc3RlckRhdGE/LmRlc2lnbmF0aW9uKT8ubGVuZ3RoID09PSAwXCIgZGlzYWJsZWQgY2xhc3M9XCJuby1kYXRhLW9wdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIE5vdCBGb3VuZC5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRlc2lnbmF0aW9uRm9ybT8uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnRvdWNoZWQgJiYgZGVzaWduYXRpb25Gb3JtPy5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8uaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+IC0tPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY29udGFpbmVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci10b3RhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8udG90YWx9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1iZWhhdmlvcmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LmJlaGF2aW9yYWx9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1mdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LmZ1bmN0aW9uYWx9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1kb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRG9tYWluIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5kb21haW59fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5XaW5nL0RpdmlzaW9uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIndpbmdfZGl2aXNpb25fc2VjdGlvblwiIFt2YWx1ZV09XCJwbGFuRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOjEwMCU7Zm9udC1zaXplOiAxNHB4O2ZvbnQtZmFtaWx5OiAnTGF0byc7XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+Um9sZXMgJiBSZXNwb25zaWJpbGl0aWVzPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJyb2xlX3Jlc3BvbnNpYmlsaXRpZXNfdGV4dFwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUm9sZXMgJiBSZXNwb25zaWJpbGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwbGFuRGF0YT8ucm9sZV9yZXNwb25zaWJpbGl0aWVzPy5qb2luKCdcXG4nKVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+QWN0aXZpdGllczwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZpdGllc190ZXh0XCIgcm93cz1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBY3Rpdml0aWVzXCIgW3ZhbHVlXT1cInBsYW5EYXRhPy5hY3Rpdml0aWVzPy5qb2luKCdcXG4nKVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jeTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW5oYW5jZWQtY29tcGV0ZW5jeS1zZWN0aW9uIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGVwIDE6IFNlbGVjdCBDb21wZXRlbmN5IFR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN0ZXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ZXAtbGFiZWxcIj4xLiBTZWxlY3QgQ29yZSBDb21wZXRlbmN5IFR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lUeXBlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQ29tcGV0ZW5jeSBUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25Db21wZXRlbmN5VHlwZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJlaGF2aW9yYWxcIj5CZWhhdmlvcmFsPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJGdW5jdGlvbmFsXCI+RnVuY3Rpb25hbDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRG9tYWluXCI+RG9tYWluPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMjogVGhlbWUgU2VsZWN0aW9uIChCZWhhdmlvcmFsL0Z1bmN0aW9uYWwgZnJvbSBKU09OLCBEb21haW4gbWFudWFsKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RlcC1sYWJlbFwiPjIuIFNlbGVjdC9FbnRlciBUaGVtZTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIEJlaGF2aW9yYWwgYW5kIEZ1bmN0aW9uYWw6IFNlYXJjaGFibGUgRHJvcGRvd24gZnJvbSBKU09OIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdCZWhhdmlvcmFsJyB8fCBzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVRoZW1lXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYW5kIHNlbGVjdCB0aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVGhlbWVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggaW5wdXQgaW5zaWRlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJzZWFyY2gtb3B0aW9uXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzZWFyY2gtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIHRoZW1lcy4uLlwiIGZvcm1Db250cm9sTmFtZT1cInRoZW1lU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJUaGVtZXMoJGV2ZW50LnRhcmdldD8udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRoZW1lIG9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdGhlbWUgb2YgZmlsdGVyZWRUaGVtZXNcIiBbdmFsdWVdPVwidGhlbWUubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhlbWUubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmaWx0ZXJlZFRoZW1lcy5sZW5ndGggPT09IDAgJiYgdGhlbWVTZWFyY2hUZXh0XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gdGhlbWVzIGZvdW5kIG1hdGNoaW5nIFwie3t0aGVtZVNlYXJjaFRleHR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIERvbWFpbjogTWFudWFsIGlucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hbnVhbC1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdEb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibWFudWFsVGhlbWVJbnB1dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgVGhlbWUgbWFudWFsbHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hbnVhbC1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGVwIDM6IFN1Yi10aGVtZSBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN0ZXBcIiAqbmdJZj1cInNlbGVjdGVkVGhlbWUgfHwgKHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RlcC1sYWJlbFwiPjMuIFNlbGVjdC9FbnRlciBTdWItdGhlbWU8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsOiBTZWFyY2hhYmxlIERyb3Bkb3duIGJhc2VkIG9uIHNlbGVjdGVkIHRoZW1lIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdCZWhhdmlvcmFsJyB8fCBzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lTdWJUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IHN1Yi10aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU3ViVGhlbWVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggaW5wdXQgaW5zaWRlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJzZWFyY2gtb3B0aW9uXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzZWFyY2gtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN1Yi10aGVtZXMuLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3ViVGhlbWVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlclN1YlRoZW1lcygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdWItdGhlbWUgb3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdWJUaGVtZSBvZiBmaWx0ZXJlZFN1YlRoZW1lc1wiIFt2YWx1ZV09XCJzdWJUaGVtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c3ViVGhlbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiZmlsdGVyZWRTdWJUaGVtZXMubGVuZ3RoID09PSAwICYmIHN1YlRoZW1lU2VhcmNoVGV4dFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHN1Yi10aGVtZXMgZm91bmQgbWF0Y2hpbmcgXCJ7e3N1YlRoZW1lU2VhcmNoVGV4dH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgRG9tYWluOiBNYW51YWwgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFudWFsLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJtYW51YWxTdWJUaGVtZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBTdWItdGhlbWUgbWFudWFsbHlcIiBjbGFzcz1cIm1hbnVhbC1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWJ1dHRvbi1zZWN0aW9uXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnXCIgY2xhc3M9XCJhZGQtY29tcGV0ZW5jeS1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkQ29tcGV0ZW5jeSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjYW5BZGRDb21wZXRlbmN5KCkgPyAnYnRuLWFjdGl2ZScgOiAnYnRuLWRpc2FibGUnXCIgKGNsaWNrKT1cImFkZENvbXBldGVuY3koKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBDb21wZXRlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnXCIgY2xhc3M9XCJhZGQtY29tcGV0ZW5jeS1idG4gYnRuLWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUNvbXBldGVuY3koKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBDb21wZXRlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnXCIgY2xhc3M9XCJhZGQtY29tcGV0ZW5jeS1idG4gYnRuLWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4O1wiIChjbGljayk9XCJjYW5jZWxVcGRhdGUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbCA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvcmFsJyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3JhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGJlaGF2aW91cmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldENvbXBldGVuY2llc0J5VHlwZSgnQmVoYXZpb3JhbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHQtYmVoYXZpb3JhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nIG10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWdyaWQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktaXRlbSBmdW5jdGlvbmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHQtZnVuY3Rpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nIG10LTJcIj5Eb21haW4gQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWdyaWQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktaXRlbSBkb21haW4tcGlsbFwiICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldENvbXBldGVuY2llc0J5VHlwZSgnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1kb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tcC50aGVtZSB9fSAtIHt7IGNvbXAuc3ViX3RoZW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZWRpdFwiIChjbGljayk9XCJlZGl0Q29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlQ29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWZvb3RlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbEZvcm0oKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIlNhdmVcIiAoY2xpY2spPVwic2F2ZVJvbGVNYXBwaW5nKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PiJdfQ==
|
|
822
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFROUIsTUFBTSxPQUFPLG9CQUFvQjtJQStDL0IsWUFDUyxTQUE2QyxFQUNwQixJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUNyQixJQUFnQixFQUNqQixLQUFxQjtRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxD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O1FBRXJDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztZQUN6QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUM3QyxDQUFDLEVBQ0QsSUFBSSxDQUFDLDJCQUEyQixDQUNqQyxDQUFDO1FBRUosSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztRQUNqRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBRVQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDbEMsdUJBQXVCLENBQ1QsQ0FBQztRQUVqQixJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsUUFBUSxFQUNSLElBQUksQ0FBQyw4QkFBOEIsQ0FDcEMsQ0FBQztTQUNIO0lBQ0gsQ0FBQzsrR0F0Z0NVLG9CQUFvQiw4Q0FpRHJCLGVBQWU7bUdBakRkLG9CQUFvQixvUEFxQ0csVUFBVSw2QkNuRDlDLGk4aUJBOFNNOzs0RkRoU08sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBcUQxQixNQUFNOzJCQUFDLGVBQWU7a05BYkcsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNzQixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZWRpdC1jYnAtcGxhbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRDYnBQbGFuQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHNlbGVjdGVkVmFsdWUgPSAnJ1xuICBzZWFyY2hUZXh0ID0gJydcbiAgcGxhbkRhdGE6IGFueVxuICBjb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9XG4gIGNicEZvcm06IEZvcm1Hcm91cDtcbiAgbG9hZGluZyA9IGZhbHNlXG5cbiAgLy8gRW5oYW5jZWQgY29tcGV0ZW5jeSBzZWxlY3Rpb24gcHJvcGVydGllc1xuICBjb21wZXRlbmNpZXNEYXRhOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVUaGVtZXM6IGFueVtdID0gW107XG4gIGF2YWlsYWJsZVN1YlRoZW1lczogYW55W10gPSBbXTtcbiAgZmlsdGVyZWRUaGVtZXM6IGFueVtdID0gW107XG4gIGZpbHRlcmVkU3ViVGhlbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZENvbXBldGVuY3lUeXBlID0gJyc7XG4gIHNlbGVjdGVkVGhlbWUgPSAnJztcbiAgc2VsZWN0ZWRTdWJUaGVtZSA9ICcnO1xuICBtYW51YWxUaGVtZSA9ICcnO1xuICBtYW51YWxTdWJUaGVtZSA9ICcnO1xuICB0aGVtZVNlYXJjaFRleHQgPSAnJztcbiAgc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gIGVkaXREb21haW5Db21wZXRlbmN5RmxhZyA9IGZhbHNlXG4gIGVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICBvcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycjogYW55ID0gW11cbiAgZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZVxuICBpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gIGRlc2lnbmF0aW9uT2Zmc2V0ID0gMFxuICBvZGNzRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IDUwXG4gIGRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudCA9IDUwXG4gIG5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gIGRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnXG4gIGRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICBzY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2VcbiAgQFZpZXdDaGlsZCgnZGlhbG9nQ29udGVudCcpIGRpYWxvZ0NvbnRlbnQhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkZXNpZ25hdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkZXNpZ25hdGlvblJlZj86IEVsZW1lbnRSZWZcbiAgbWFzdGVyRGF0YTogYW55ID0ge31cbiAgcG9ydGFsRGF0YTogYW55XG4gIGFjdGl2ZVJvd0VsZW1lbnQ6IGFueVxuICByZXF1ZXN0RGF0YTogYW55XG4gIHJlcXVlc3RSb3dEYXRhOiBhbnlcbiAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbEJvdW5kID1cbiAgICB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwuYmluZCh0aGlzKTtcbiAgc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MFxuICBtYXRjaGVkRGVzaWduYXRpb25JZHMgPSBbXVxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RWRpdENicFBsYW5Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhPy5lbGVtZW50XG4gICAgICB0aGlzLnJlcXVlc3RSb3dEYXRhID0gZGF0YT8ucmVxdWVzdERhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZGF0YT8uZnJvbUxpYnJhcnkpIHtcbiAgICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGE/LmVsZW1lbnRcbiAgICAgIH0gZWxzZSB7ICBcbiAgICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgZGF0YTonLCBkYXRhKTtcbiAgICAvLyB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5tYXAoKGNvbXBldGVuY2llczphbnkpPT57XG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0NvdW50Wyd0b3RhbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsndG90YWwnXSArIDEgXG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0JlaGF2aW9yYWwnKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2JlaGF2aW9yYWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2JlaGF2aW9yYWwnXSArMVxuICAgIC8vICAgfVxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgIC8vICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50WydmdW5jdGlvbmFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50WydmdW5jdGlvbmFsJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnRG9tYWluJykge1xuICAgIC8vICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50Wydkb21haW4nXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2RvbWFpbiddICsxXG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tYXRjaGVkRGVzaWduYXRpb25JZHMgPSB0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncz8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/Lmlnb3RfZGVzaWduYXRpb25faWQpIHx8IFtdXG4gICAgdGhpcy5sb2FkQ29tcGV0ZW5jaWVzRGF0YSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICBjb25zdCBzZWFyY2hDb250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcblxuICAgIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHQ7XG5cbiAgICAgICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgICAgICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbWpzZGZtJylcbiAgICAgICAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odHh0LCAwKTtcblxuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuc2xpY2UoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9XG4gICAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgaWYgKFxuICAgICAgIXRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fFxuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvblNhZmUoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKClcblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXF1ZXN0X2lkJyk7XG5cbiAgICBjb25zb2xlLmxvZygncmVxdWVzdElkJywgcmVxdWVzdElkKVxuICB9XG5cbiAgbG9hZENvbXBldGVuY2llc0RhdGEoKSB7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENvbXBldGVuY3lKc29uKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzRGF0YSA9IGRhdGE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDb21wZXRlbmNpZXMgZGF0YSBsb2FkZWQ6JywgdGhpcy5jb21wZXRlbmNpZXNEYXRhKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY29tcGV0ZW5jaWVzIGRhdGE6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpIHtcbiAgICBjb25zdCBjb21wcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9O1xuICAgIGNvbXBzLmZvckVhY2goYyA9PiB7XG4gICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50LnRvdGFsKys7XG4gICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdiZWhhdmlvcmFsJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5iZWhhdmlvcmFsKys7XG4gICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdmdW5jdGlvbmFsJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5mdW5jdGlvbmFsKys7XG4gICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdkb21haW4nKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LmRvbWFpbisrO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgdGhpcy5jYnBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkZXNpZ25hdGlvbl9uYW1lOiBbdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB3aW5nX2RpdmlzaW9uX3NlY3Rpb246IFt0aGlzLnBsYW5EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb24gfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHQ6IFt0aGlzLnBsYW5EYXRhPy5yb2xlX3Jlc3BvbnNpYmlsaXRpZXM/LmpvaW4oJ1xcbicpIHx8ICcnXSxcbiAgICAgIGFjdGl2aXRpZXNfdGV4dDogW3RoaXMucGxhbkRhdGE/LmFjdGl2aXRpZXM/LmpvaW4oJ1xcbicpIHx8ICcnXSxcbiAgICAgIGNvbXBldGVuY3lTZWFyY2hUZXh0OiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVR5cGU6IFsnJ10sXG4gICAgICBjb21wZXRlbmN5VGhlbWU6IFsnJ10sXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6IFsnJ10sXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiBbJyddLFxuICAgICAgbWFudWFsU3ViVGhlbWVJbnB1dDogWycnXSxcbiAgICAgIHRoZW1lU2VhcmNoOiBbJyddLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6IFsnJ10sXG4gICAgICBjb21wZXRlbmNpZXM6IHRoaXMuZmIuYXJyYXkodGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzIHx8IFtdKSwgLy8gb3B0aW9uYWwgY3VzdG9taXphdGlvbixcbiAgICAgIHNlYXJjaERlc2lnbmF0aW9uOiBbJyddLFxuICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogW3RoaXMucGxhbkRhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJyddXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSkge1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvblNhZmUoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVzaWduYXRpb25TYWZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgfHwgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gdHJ1ZVxuICAgIHRoaXMuZ2V0RGVzaWduYXRpb24oKVxuICB9XG5cblxuICBnZXQgcm9sZVJlc3BvbnNpYmlsaXRpZXMoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jYnBGb3JtLmdldCgncm9sZV9yZXNwb25zaWJpbGl0aWVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgc2VhcmNoRGF0YSgpIHtcblxuICB9XG5cbiAgYXBwbHlGaWx0ZXIoKSB7XG5cbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuICh0aGlzLmNicEZvcm0/LmdldCgnY29tcGV0ZW5jaWVzJyk/LnZhbHVlIHx8IFtdKS5maWx0ZXIoYyA9PiBjLnR5cGUgPT09IHR5cGUpO1xuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIHNhdmVSb2xlTWFwcGluZygpIHtcbiAgICBpZiAodGhpcy5jYnBGb3JtLmludmFsaWQpIHJldHVybjtcblxuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5jYnBGb3JtLnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdTdWJtaXR0ZWQgRGF0YTonLCBmb3JtRGF0YSk7XG4gICAgbGV0IGNicFBsYW5EYXRhOiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqO1xuICAgIGNvbnNvbGUubG9nKCdjYnBQbGFuRGF0YScsIGNicFBsYW5EYXRhKVxuICAgIGNvbnN0IHJvbGVSZXNwb25zaWJpbGl0aWVzQXJyYXkgPSB0aGlzLmNicEZvcm0udmFsdWUucm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lKTtcbiAgICBjb25zdCBhY3Rpdml0aWVzID0gdGhpcy5jYnBGb3JtLnZhbHVlLmFjdGl2aXRpZXNfdGV4dFxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKVxuICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICBsZXQgcmVxID1cbiAgICB7XG4gICAgICBcInNlY3Rvcl9uYW1lXCI6IGNicFBsYW5EYXRhPy5zZWN0b3JzPy5qb2luKFwiLFwiKSxcbiAgICAgIFwiaW5zdHJ1Y3Rpb25cIjogY2JwUGxhbkRhdGE/Lmluc3RydWN0aW9uID8gY2JwUGxhbkRhdGEuaW5zdHJ1Y3Rpb24gOiAnJyxcbiAgICAgIFwid2luZ19kaXZpc2lvbl9zZWN0aW9uXCI6IGZvcm1EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb24sXG4gICAgICBcInJvbGVfcmVzcG9uc2liaWxpdGllc1wiOiByb2xlUmVzcG9uc2liaWxpdGllc0FycmF5LFxuICAgICAgXCJhY3Rpdml0aWVzXCI6IGFjdGl2aXRpZXMsXG4gICAgICBcImNvbXBldGVuY2llc1wiOiBmb3JtRGF0YS5jb21wZXRlbmNpZXNcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ21hc3RlckRhdGE/LmRlc2lnbmF0aW9uJywgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbilcblxuICAgIGlmIChmb3JtRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZCkge1xuICAgICAgcmVxW1wiaWdvdF9kZXNpZ25hdGlvbl9pZFwiXSA9IGZvcm1EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnLFxuICAgICAgICByZXFbXCJkZXNpZ25hdGlvbl9uYW1lXCJdID0gZm9ybURhdGE/LmRlc2lnbmF0aW9uX25hbWUgPyBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lIDogJydcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ21hc3RlckRhdGE/LmRlc2lnbmF0aW9uJywgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbilcblxuICAgICAgcmVxW1wiZGVzaWduYXRpb25fbmFtZVwiXSA9IGZvcm1EYXRhPy5kZXNpZ25hdGlvbl9uYW1lID8gZm9ybURhdGEuZGVzaWduYXRpb25fbmFtZSA6ICcnXG4gICAgICBjb25zdCBzZWxlY3RlZERlc2lnbmF0aW9uID0gdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbj8uZmluZChcbiAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBmb3JtRGF0YT8uZGVzaWduYXRpb25fbmFtZT8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgcmVxW1wiaWdvdF9kZXNpZ25hdGlvbl9pZFwiXSA9IHNlbGVjdGVkRGVzaWduYXRpb24/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJyc7XG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIHJlcVsncmVxdWVzdF9pZCddID0gdGhpcy5yZXF1ZXN0Um93RGF0YT8uaWRcbiAgICAgIHJlcVsnaXRlbV9pZCddID0gdGhpcy5wbGFuRGF0YT8uaWRcbiAgICB9XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JvbGUgTWFwcGluZyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxGb3JtKCkge1xuICAgIC8vIE1hcmsgYWxsIGNvbnRyb2xzIGFzIHByaXN0aW5lIGFuZCB1bnRvdWNoZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmFsdWVzXG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgIC8vIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUgPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jaWVzQXJyYXknLHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgLy8gQWxzbywgaWYgeW91IHdhbnQgdG8gbWFyayBhbGwgY2hpbGQgY29udHJvbHMgKEZvcm1Db250cm9scyAvIEZvcm1BcnJheXMgLyBGb3JtR3JvdXBzKSBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkXG4gICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQodGhpcy5jYnBGb3JtKTtcbiAgICAvLyBpZih0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPiAtMSkge1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3R5cGUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddXG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXVxuICAgIC8vIH1cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSkge1xuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChjb250cm9sKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjb21wZXRlbmNpZXNBcnJheSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdjb21wZXRlbmNpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICAvLyBSZXNldCBmb3JtIGNvbnRyb2xzXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVRoZW1lOiAnJyxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiAnJyxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6ICcnLFxuICAgICAgdGhlbWVTZWFyY2g6ICcnLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6ICcnXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgICAgLy8gTG9hZCB0aGVtZXMgZnJvbSBKU09OIGZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsXG4gICAgICBjb25zdCBjb21wZXRlbmN5Q2F0ZWdvcnkgPSB0aGlzLmNvbXBldGVuY2llc0RhdGEuZmluZChjYXQgPT5cbiAgICAgICAgY2F0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdHlwZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICh0eXBlID09PSAnQmVoYXZpb3JhbCcgJiYgY2F0Lm5hbWUgPT09ICdCZWhhdmlvdXJhbCcpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29tcGV0ZW5jeUNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gY29tcGV0ZW5jeUNhdGVnb3J5LmNvbXBldGVuY3lfdGhlbWUgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVUaGVtZXNdO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgRG9tYWluLCBubyB0aGVtZXMgYXJlIGxvYWRlZCAtIHVzZXIgd2lsbCBlbnRlciBtYW51YWxseVxuICB9XG5cbiAgb25UaGVtZUNoYW5nZSh0aGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9IHRoZW1lTmFtZTtcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgdGhlbWUgYW5kIGxvYWQgaXRzIHN1Yi10aGVtZXNcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1lT2JqID0gdGhpcy5hdmFpbGFibGVUaGVtZXMuZmluZCh0aGVtZSA9PiB0aGVtZS5uYW1lID09PSB0aGVtZU5hbWUpO1xuICAgIGlmIChzZWxlY3RlZFRoZW1lT2JqKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IHNlbGVjdGVkVGhlbWVPYmouY29tcGV0ZW5jeV9zdWJfdGhlbWUgfHwgW107XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9XG4gIH1cblxuICBvblN1YlRoZW1lQ2hhbmdlKHN1YlRoZW1lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lO1xuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgQmVoYXZpb3JhbC9GdW5jdGlvbmFsLCB1c2UgZHJvcGRvd24gc2VsZWN0aW9uc1xuICAgICAgdGhlbWUgPSB0aGlzLnNlbGVjdGVkVGhlbWU7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuc2VsZWN0ZWRTdWJUaGVtZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZS5zb21lKGMgPT5cbiAgICAgICAgYy50aGVtZSA9PT0gdGhlbWUgJiYgYy5zdWJfdGhlbWUgPT09IHN1YlRoZW1lICYmIGMudHlwZSA9PT0gdHlwZVxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG5cbiAgcmVzZXRDb21wZXRlbmN5Rm9ybSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gW107XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnJyxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbHRlcih0aGVtZSA9PlxuICAgICAgICB0aGVtZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTdWJUaGVtZXMoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgIGlmICghc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVTdWJUaGVtZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMuZmlsdGVyKHN1YlRoZW1lID0+XG4gICAgICAgIHN1YlRoZW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjYW5BZGRDb21wZXRlbmN5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJykge1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgY29uc3Qgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgcmV0dXJuICEhKHRoZW1lICYmIHN1YlRoZW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICEhKHRoaXMuc2VsZWN0ZWRUaGVtZSAmJiB0aGlzLnNlbGVjdGVkU3ViVGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbXBldGVuY3koY29tcCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wudmFsdWUudGhlbWUgPT09IGNvbXAudGhlbWUgJiYgY29udHJvbC52YWx1ZS50eXBlID09PSBjb21wLnR5cGVcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZWRpdENvbXBldGVuY3koY29tcCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gdHJ1ZVxuICAgIHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA9IC0xXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVR5cGU6ICdEb21haW4nLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogY29tcD8udGhlbWUsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBjb21wPy5zdWJfdGhlbWVcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuZmluZEluZGV4KGMgPT5cbiAgICAgIGMudGhlbWUgPT09IGNvbXA/LnRoZW1lICYmXG4gICAgICBjLnN1Yl90aGVtZSA9PT0gY29tcD8uc3ViX3RoZW1lICYmXG4gICAgICBjLnR5cGUgPT09IFwiRG9tYWluXCJcbiAgICApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSBpbmRleFxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfSwgNTAwKVxuICB9XG5cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gZmFsc2VcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpXG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5KCkge1xuICAgIGxldCB0eXBlID0gdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlO1xuICAgIGxldCB0aGVtZSA9ICcnO1xuICAgIGxldCBzdWJUaGVtZSA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgICAvLyBGb3IgRG9tYWluLCB1c2UgbWFudWFsIGlucHV0XG4gICAgICB0aGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxTdWJUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlKSlcbiAgICB9XG4gICAgY29uc29sZS5sb2coJyB0aGlzLmNvbXBldGVuY2llc0FycmF5JywgdGhpcy5jb21wZXRlbmNpZXNBcnJheSlcbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4LS0nLCB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXgpXG4gICAgICBpZiAodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0eXBlXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoZW1lXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ10gPSBzdWJUaGVtZVxuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWV4aXN0cykge1xuICAgICAgLy8gICBjb25zdCBuZXdDb21wID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAvLyAgICAgdHlwZTogW3R5cGVdLFxuICAgICAgLy8gICAgIHRoZW1lOiBbdGhlbWVdLFxuICAgICAgLy8gICAgIHN1Yl90aGVtZTogW3N1YlRoZW1lXVxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5wdXNoKG5ld0NvbXApO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBDbGVhciBpbnB1dCBmaWVsZHMgYWZ0ZXIgYWRkaW5nXG4gICAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyJywgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycilcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7IGNvbXBldGVuY2llczogWy4uLmN1cnJlbnRWYWx1ZXNdIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSk7XG4gIH1cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG4gXG4gICAgIC8vIGNsZWFyIGFueSBwcmV2aW91cyBkZWJ1ZyBob29rc1xuICAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgLy8gbm9vcFxuICAgICB9XG4gXG4gICAgIGNvbnN0IHJlcU9mZnNldCA9ICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJykgPyBvZmZzZXQgOiB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0XG4gICAgIGxldCByZXFMaW1pdCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgIGNvbnN0IHBhZ2VJbmRleCA9IHJlcUxpbWl0ID4gMCA/IE1hdGguZmxvb3IocmVxT2Zmc2V0IC8gcmVxTGltaXQpIDogMFxuICAgICAvLyBpZiB3ZSdyZSByZXF1ZXN0aW5nIGZyb20gZmlyc3QgcGFnZSwgY2xlYXIgdGhlIG5vLW1vcmUtZGF0YSBndWFyZFxuICAgICBpZiAocGFnZUluZGV4ID09PSAwKSB7XG4gICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgIHJlcUxpbWl0ID0gNTBcbiAgICAgfVxuICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgICAgfSxcbiAgICAgICByZXF1ZXN0ZWRGaWVsZHM6IFtdLFxuICAgICAgIHBhZ2VOdW1iZXI6IHBhZ2VJbmRleCxcbiAgICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgIH1cbiAgICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuICAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHNlYXJjaFRleHRcbiAgICAgICAvLyB3aGVuIHNlYXJjaGluZywgc3RhcnQgZnJvbSBmaXJzdCBwYWdlXG4gICAgICAgcmVxdWVzdEJvZHkucGFnZU51bWJlciA9IDBcbiAgICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgIHJlcXVlc3RCb2R5LnBhZ2VTaXplID0gcGFnZUluZGV4ID09PSAwID8gNTAgOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgIC8vIHJlc2V0IGd1YXJkIHdoZW4gcGVyZm9ybWluZyBhIGZyZXNoIHNlYXJjaFxuICAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICAgfVxuIFxuICAgICAvLyBpbmRpY2F0ZSBsb2FkaW5nIHN0YXRlIHNvIHNjcm9sbCBoYW5kbGVycyBkb24ndCB0cmlnZ2VyIHBhcmFsbGVsIGNhbGxzXG4gICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcbiBcbiAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gICAgIH0pKVxuICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gXG4gICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuIFxuICAgY29uc3QgbWF0Y2hlZElkcyA9IG5ldyBTZXQodGhpcy5tYXRjaGVkRGVzaWduYXRpb25JZHMpO1xuIFxuICAgY29uc3QgbWFwcGVkID0gY29udGVudFxuICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiAhbWF0Y2hlZElkcy5oYXMoaXRlbT8uaWQpKVxuICAgLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICBpZDogaXRlbT8uaWQsXG4gICAgIG5hbWU6IGl0ZW0/LmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICBzdGF0dXM6IGl0ZW0/LnN0YXR1cyB8fCAnQWN0aXZlJyxcbiAgIH0pKTtcbiBcbiAgIGNvbnN0IHRvdGFsID0gXy5nZXQoXG4gICAgIHJlcyxcbiAgICAgJ3Jlc3VsdC5yZXN1bHQudG90YWxjb3VudCcsXG4gICAgIF8uZ2V0KFxuICAgICAgIHJlcyxcbiAgICAgICAncmVzdWx0LnJlc3VsdC5kYXRhLnRvdGFsQ291bnQnLFxuICAgICAgIF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQudG90YWxDb3VudCcsIDApXG4gICAgIClcbiAgICk7XG4gXG4gICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gdG90YWw7XG4gXG4gICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAvLyBTRUFSQ0ggTU9ERVxuICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuIFxuICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IG1hcHBlZDtcbiBcbiAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgIDAsXG4gICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgICAgKTtcbiBcbiAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiBcbiAgICAgcmV0dXJuO1xuICAgfVxuIFxuICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgLy8gTk9STUFMIE1PREVcbiAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IHJlcU9mZnNldCA9PT0gMCkge1xuIFxuICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWQ7XG4gXG4gICB9IGVsc2Uge1xuIFxuICAgICBjb25zdCBjb21iaW5lZCA9XG4gICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkuY29uY2F0KG1hcHBlZCk7XG4gXG4gICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IF8udW5pcUJ5KFxuICAgICAgIGNvbWJpbmVkLFxuICAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgKTtcbiAgIH1cbiBcbiAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgIDAsXG4gICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgKTtcbiBcbiAgIC8vIHNlbGVjdGVkIHZhbHVlIHByZXNlcnZlXG4gICBjb25zdCBkZXNpZ25hdGlvbkNvbnRyb2wgPVxuICAgICB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk7XG4gXG4gICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG4gXG4gICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPVxuICAgICAgIGRlc2lnbmF0aW9uQ29udHJvbC52YWx1ZSB8fCBbXTtcblxuICAgICAgY29uc29sZS5sb2coJ2N1cnJlbnRWYWx1ZXMnLCBjdXJyZW50VmFsdWVzKVxuICAgIFxuICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXNcbiAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zb21lKFxuICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtPy5uYW1lID09PSBjdXJyZW50VmFsdWVzXG4gICAgICAgICApXG4gICAgIFxuICAgICBjb25zb2xlLmxvZyh2YWxpZFZhbHVlcylcbiAgICAgY29uc29sZS5sb2coIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cClcbiBcbiAgICAvLyAgaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICBkZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUodmFsaWRWYWx1ZXMpO1xuICAgIC8vICB9XG4gICB9XG4gXG4gICAvLyBubyBtb3JlIGRhdGFcbiAgIGlmICghbWFwcGVkIHx8IG1hcHBlZC5sZW5ndGggPT09IDApIHtcbiAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgfVxuIFxuICAgaWYgKFxuICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ICYmXG4gICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmxlbmd0aCA+PVxuICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICApIHtcbiAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgfVxuIFxuICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiB9LFxuICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgLy8gU3RvcCBmdXJ0aGVyIGF1dG9tYXRpYyBjYWxscyBvbiByZXBlYXRlZCBlcnJvcnMgdG8gYXZvaWQgdGlnaHQgbG9vcHNcbiAgICAgICAgICAgLy8gbG9hZGluZyBmbGFnIGNsZWFyZWQgaW4gZmluYWxpemUoKVxuICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAgLy8gdGhpcy5tYXRTbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZmV0Y2ggZGVzaWduYXRpb24gZGV0YWlscywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICAgfVxuICAgICAgIH0pXG4gICB9XG5cbiAgZW5zdXJlU2VsZWN0ZWREZXNpZ25hdGlvbkV4aXN0cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWU7XG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddPy5zb21lKFxuICAgICAgKGQ6IGFueSkgPT4gZC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICBjb25zdCBjdXN0b21PYmogPSB7XG4gICAgICAgIG5hbWU6IHNlbGVjdGVkLFxuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX25hbWU6IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IHRoaXMucGxhbkRhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgXCJERVNHLTAwMjMxNFwiLFxuICAgICAgfTtcblxuICAgICAgLy8g4pyFIEFkZCBhdCBUT1Agc28gaXQncyB2aXNpYmxlIGltbWVkaWF0ZWx5XG4gICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBbXG4gICAgICAgIGN1c3RvbU9iaixcbiAgICAgICAgLi4uKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSlcbiAgICAgIF07XG5cbiAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb24nXSA9IFtcbiAgICAgICAgY3VzdG9tT2JqLFxuICAgICAgICAuLi4odGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbiddIHx8IFtdKVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBjaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbjogc3RyaW5nID1cbiAgICAgICh0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcblxuICAgIGlmICghc2VsZWN0ZWREZXNpZ25hdGlvbikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHY6IHN0cmluZykgPT4gKHYgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgYmFja3VwID0gWy4uLnRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cF07XG5cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gYmFja3VwLmZpbmRJbmRleChcbiAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgIG5vcm1hbGl6ZShpdGVtPy5uYW1lKSA9PT0gbm9ybWFsaXplKHNlbGVjdGVkRGVzaWduYXRpb24pXG4gICAgKTtcblxuICAgIGxldCBzZWxlY3RlZE9iajogYW55O1xuXG4gICAgLy8gSWYgZXhpc3RzIOKGkiByZW1vdmUgaXQgYW5kIHJldXNlXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggPiAtMSkge1xuICAgICAgc2VsZWN0ZWRPYmogPSBiYWNrdXAuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEpWzBdO1xuICAgIH1cbiAgICAvLyBJZiBub3QgZXhpc3RzIOKGkiBjcmVhdGUgbmV3XG4gICAgZWxzZSB7XG4gICAgICBzZWxlY3RlZE9iaiA9IHtcbiAgICAgICAgbmFtZTogc2VsZWN0ZWREZXNpZ25hdGlvbixcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJyxcbiAgICAgICAgaWQ6ICdjdXN0b20tJyArIERhdGUubm93KCkgKyAnLScgKyBNYXRoLnJhbmRvbSgpLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX25hbWU6IHNlbGVjdGVkRGVzaWduYXRpb24sXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6ICdjdXN0b20tJyArIERhdGUubm93KCkgKyAnLScgKyBNYXRoLnJhbmRvbSgpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyDwn5SlIE1vdmUgdG8gdG9wXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gW1xuICAgICAgc2VsZWN0ZWRPYmosXG4gICAgICAuLi5iYWNrdXBcbiAgICBdO1xuXG4gICAgLy8gQWxzbyB1cGRhdGUgdmlzaWJsZSBsaXN0IChzYW1lIG9yZGVyIGxvZ2ljKVxuICAgIGNvbnN0IHZpc2libGUgPSBbLi4uKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiB8fCBbXSldO1xuXG4gICAgY29uc3QgdmlzaWJsZUluZGV4ID0gdmlzaWJsZS5maW5kSW5kZXgoXG4gICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICBub3JtYWxpemUoaXRlbT8ubmFtZSkgPT09IG5vcm1hbGl6ZShzZWxlY3RlZERlc2lnbmF0aW9uKVxuICAgICk7XG5cbiAgICBpZiAodmlzaWJsZUluZGV4ID4gLTEpIHtcbiAgICAgIHZpc2libGUuc3BsaWNlKHZpc2libGVJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gW1xuICAgICAgc2VsZWN0ZWRPYmosXG4gICAgICAuLi52aXNpYmxlXG4gICAgXTtcblxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIG9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpOiB2b2lkIHtcbiAgICAvLyBLZWVwIHRoZSBkZXNpZ25hdGlvbiB2YWx1ZSBidXQgY2xlYXIgdGhlIHNlYXJjaCBpbnB1dFxuICAgIGNvbnN0IGN1cnJlbnREZXNpZ25hdGlvbiA9IHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKSEudmFsdWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNicEZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpKSB7XG4gICAgICAgIHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykhLnNldFZhbHVlKCcnKVxuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIHRoZSBkZXNpZ25hdGlvbiB2YWx1ZSByZW1haW5zIHNlbGVjdGVkXG4gICAgICBpZiAoY3VycmVudERlc2lnbmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKTtcbiAgICAgICAgaWYgKGRlc2lnbmF0aW9uQ29udHJvbCkge1xuICAgICAgICAgIGRlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZShjdXJyZW50RGVzaWduYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAxMDApXG4gIH1cblxuICBkZXNpZ25hdGlvblNlYXJjaChldnQ6IGFueSkge1xuICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldnQ/LnRhcmdldD8udmFsdWVcbiAgICBjb25zdCB0eHQgPSAoc2VhcmNoVGV4dCB8fCAnJykudG9TdHJpbmcoKS50cmltKClcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSByZXR1cm5cblxuICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0XG4gICAgaWYgKHR4dD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZVxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZVxuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApXG4gICAgfSBlbHNlIGlmICh0aGlzLm1hc3RlckRhdGEgJiYgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cCkge1xuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKVxuICAgIH1cbiAgfVxuXG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG5cbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCkgcmV0dXJuO1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8g4pyFIE9ubHkgcmVzZXQgcGFnaW5hdGlvbiBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDinIUgUmVzdG9yZSBmcm9tIGJhY2t1cCB3aXRob3V0IHJlc2V0dGluZyBvZmZzZXRcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgMCwgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICk7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH1cblxuICAgIC8vIGZvY3VzIHNlYXJjaCBpbnB1dFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICBjb25zdCBzZWFyY2hJbnB1dCA9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWFyY2gtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgIH0sIDIwMCk7XG5cbiAgICAvLyBhdHRhY2ggc2Nyb2xsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5tYXQtc2VsZWN0LXBhbmVsLnNlYXJjaC1wYW5lbCdcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoIXBhbmVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUkVNT1ZFIE9MRCBMSVNURU5FUlxuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbCBhcyBhbnlcbiAgICAgICk7XG5cbiAgICAgIHBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdzY3JvbGwnLFxuICAgICAgICB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwuYmluZCh0aGlzKSxcbiAgICAgICAgeyBwYXNzaXZlOiB0cnVlIH1cbiAgICAgICk7XG5cbiAgICB9LCAzMDApO1xuICB9XG5cbiAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgY29uc3QgYXRCb3R0b20gPVxuICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LnNjcm9sbFRvcCA8PVxuICAgICAgZWxlbWVudC5jbGllbnRIZWlnaHQgKyAxMDtcblxuICAgIGlmICghYXRCb3R0b20gfHwgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGVkID1cbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCB8fCAwO1xuXG4gICAgY29uc3QgdmlzaWJsZSA9XG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uPy5sZW5ndGggfHwgMDtcblxuICAgIGNvbnNvbGUubG9nKHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHZpc2libGUsXG4gICAgICB0b3RhbDogdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU1RFUCAxXG4gICAgICogU0hPVyBNT1JFIEZST00gTE9DQUwgQ0FDSEVcbiAgICAgKi9cbiAgICBpZiAodmlzaWJsZSA8IGxvYWRlZCkge1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCArPVxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgLy8gSU1QT1JUQU5UXG4gICAgICAvLyBjcmVhdGUgTkVXIEFSUkFZIHJlZmVyZW5jZVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgICAuLi50aGlzLm1hc3RlckRhdGEsXG4gICAgICAgIGRlc2lnbmF0aW9uOiBbXG4gICAgICAgICAgLi4udGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICB9O1xuXG4gICAgICAvLyBGT1JDRSBVSSBVUERBVEVcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyByZXN0b3JlIHNjcm9sbCBwb3NpdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgLSAyMDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU1RFUCAyXG4gICAgICogRkVUQ0ggTkVYVCBQQUdFXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgbG9hZGVkIDwgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgIXRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zXG4gICAgKSB7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24oXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGNsZWFyRGVzaWduYXRpb25TZWFyY2goZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpO1xuXG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAwLFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICAgKTtcblxuICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcubWF0LW1kYy1zZWxlY3QtcGFuZWwnXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChwYW5lbCkge1xuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbEJvdW5kXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3LWNicC1wbGFuXCIgI2RpYWxvZ0NvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+RWRpdCBSb2xlIE1hcHBpbmc8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXJcIiBbZm9ybUdyb3VwXT1cImNicEZvcm1cIj5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uX25hbWVcIiBbdmFsdWVdPVwicGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cblxuXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibXQtNCBtYXJnaW4tdG9wLXMgdy1mdWxsIHJlcXVpcmVkLXNlbGVjdFwiICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjZGVzaWduYXRpb24gZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGVzaWduYXRpb25cIiAoY2xvc2VkKT1cIm9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCIgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3RpY2t5IHNlYXJjaCBpbnB1dCBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1zZWFyY2gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGRlc2lnbmF0aW9uXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoa2V5dXApPVwiZGVzaWduYXRpb25TZWFyY2goJGV2ZW50KVwiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaERlc2lnbmF0aW9uQ29udHJvbD8udmFsdWVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbGVhci1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyBsaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJkZXNpZ25hdGlvbj8ubmFtZVwiICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uPy5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9uc1wiIGNsYXNzPVwibG9hZGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZCBNb3JlLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIobWFzdGVyRGF0YT8uZGVzaWduYXRpb24pPy5sZW5ndGggPT09IDBcIiBkaXNhYmxlZCBjbGFzcz1cIm5vLWRhdGEtb3B0aW9uXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzaWduYXRpb24gTm90IEZvdW5kLlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGVzaWduYXRpb25Gb3JtPy5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udG91Y2hlZCAmJiBkZXNpZ25hdGlvbkZvcm0/LmdldCgnZGVzaWduYXRpb25fbmFtZScpPy5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgZGVzaWduYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj4gLS0+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jb250YWluZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py50b3RhbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3JhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uYmVoYXZpb3JhbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWZ1bmN0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uZnVuY3Rpb25hbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBEb21haW4gQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LmRvbWFpbn19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPldpbmcvRGl2aXNpb248L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwid2luZ19kaXZpc2lvbl9zZWN0aW9uXCIgW3ZhbHVlXT1cInBsYW5EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA4cHggMTJweDsgd2lkdGg6MTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5Sb2xlcyAmIFJlc3BvbnNpYmlsaXRpZXM8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIGZvcm1Db250cm9sTmFtZT1cInJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0XCIgcm93cz1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSb2xlcyAmIFJlc3BvbnNpYmlsaXRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBsYW5EYXRhPy5yb2xlX3Jlc3BvbnNpYmlsaXRpZXM/LmpvaW4oJ1xcbicpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5BY3Rpdml0aWVzPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJhY3Rpdml0aWVzX3RleHRcIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFjdGl2aXRpZXNcIiBbdmFsdWVdPVwicGxhbkRhdGE/LmFjdGl2aXRpZXM/LmpvaW4oJ1xcbicpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmN5PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbmhhbmNlZC1jb21wZXRlbmN5LXNlY3Rpb24gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMTogU2VsZWN0IENvbXBldGVuY3kgVHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RlcC1sYWJlbFwiPjEuIFNlbGVjdCBDb3JlIENvbXBldGVuY3kgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVR5cGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDb21wZXRlbmN5IFR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQmVoYXZpb3JhbFwiPkJlaGF2aW9yYWw8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkZ1bmN0aW9uYWxcIj5GdW5jdGlvbmFsPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJEb21haW5cIj5Eb21haW48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAyOiBUaGVtZSBTZWxlY3Rpb24gKEJlaGF2aW9yYWwvRnVuY3Rpb25hbCBmcm9tIEpTT04sIERvbWFpbiBtYW51YWwpIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+Mi4gU2VsZWN0L0VudGVyIFRoZW1lPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbDogU2VhcmNoYWJsZSBEcm9wZG93biBmcm9tIEpTT04gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdGdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VGhlbWVcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IHRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25UaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdGhlbWVzLi4uXCIgZm9ybUNvbnRyb2xOYW1lPVwidGhlbWVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlclRoZW1lcygkZXZlbnQudGFyZ2V0Py52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGhlbWUgb3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0aGVtZSBvZiBmaWx0ZXJlZFRoZW1lc1wiIFt2YWx1ZV09XCJ0aGVtZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGVtZS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cImZpbHRlcmVkVGhlbWVzLmxlbmd0aCA9PT0gMCAmJiB0aGVtZVNlYXJjaFRleHRcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyB0aGVtZXMgZm91bmQgbWF0Y2hpbmcgXCJ7e3RoZW1lU2VhcmNoVGV4dH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgRG9tYWluOiBNYW51YWwgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFudWFsLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJtYW51YWxUaGVtZUlucHV0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBUaGVtZSBtYW51YWxseVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFudWFsLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMzogU3ViLXRoZW1lIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiICpuZ0lmPVwic2VsZWN0ZWRUaGVtZSB8fCAoc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+My4gU2VsZWN0L0VudGVyIFN1Yi10aGVtZTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIEJlaGF2aW9yYWwgYW5kIEZ1bmN0aW9uYWw6IFNlYXJjaGFibGUgRHJvcGRvd24gYmFzZWQgb24gc2VsZWN0ZWQgdGhlbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdGdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVN1YlRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFuZCBzZWxlY3Qgc3ViLXRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TdWJUaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3ViLXRoZW1lcy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdWJUaGVtZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyU3ViVGhlbWVzKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN1Yi10aGVtZSBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN1YlRoZW1lIG9mIGZpbHRlcmVkU3ViVGhlbWVzXCIgW3ZhbHVlXT1cInN1YlRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdWJUaGVtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmaWx0ZXJlZFN1YlRoZW1lcy5sZW5ndGggPT09IDAgJiYgc3ViVGhlbWVTZWFyY2hUZXh0XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gc3ViLXRoZW1lcyBmb3VuZCBtYXRjaGluZyBcInt7c3ViVGhlbWVTZWFyY2hUZXh0fX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBEb21haW46IE1hbnVhbCBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYW51YWwtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbnVhbFN1YlRoZW1lSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFN1Yi10aGVtZSBtYW51YWxseVwiIGNsYXNzPVwibWFudWFsLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtYnV0dG9uLXNlY3Rpb25cIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5BZGRDb21wZXRlbmN5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNhbkFkZENvbXBldGVuY3koKSA/ICdidG4tYWN0aXZlJyA6ICdidG4tZGlzYWJsZSdcIiAoY2xpY2spPVwiYWRkQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCIgKGNsaWNrKT1cImNhbmNlbFVwZGF0ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW9yYWwnKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvcmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gYmVoYXZpb3VyYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvcmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1iZWhhdmlvcmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGZ1bmN0aW9uYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1mdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGRvbWFpbi1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0XCIgKGNsaWNrKT1cImVkaXRDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRm9ybSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiU2F2ZVwiIChjbGljayk9XCJzYXZlUm9sZU1hcHBpbmcoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
|