@sunbird-cb/cbp-ai 0.1.83 → 0.1.84
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/add-designation/add-designation.component.mjs +10 -3
- package/esm2022/lib/components/approval-requests/approval-requests.component.mjs +3 -2
- package/esm2022/lib/components/designation-approval-request-form/designation-approval-request-form.component.mjs +3 -3
- package/esm2022/lib/components/edit-cbp-plan/edit-cbp-plan.component.mjs +53 -43
- package/esm2022/lib/components/publish-request-form/publish-approve-request-form.component.mjs +23 -5
- package/esm2022/lib/components/review-request/review-request.component.mjs +5 -3
- package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +2 -1
- package/esm2022/lib/components/suggest-more-courses/suggest-more-courses.component.mjs +2 -2
- package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +3 -2
- package/fesm2022/sunbird-cb-cbp-ai.mjs +96 -56
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/add-designation/add-designation.component.d.ts.map +1 -1
- package/lib/components/approval-requests/approval-requests.component.d.ts.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/publish-request-form/publish-approve-request-form.component.d.ts +4 -2
- package/lib/components/publish-request-form/publish-approve-request-form.component.d.ts.map +1 -1
- package/lib/components/review-request/review-request.component.d.ts +1 -1
- package/lib/components/review-request/review-request.component.d.ts.map +1 -1
- package/lib/components/role-mapping-list/role-mapping-list.component.d.ts.map +1 -1
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts +1 -0
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.84.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.83.tgz +0 -0
|
@@ -522,13 +522,13 @@ export class AddDesignationComponent {
|
|
|
522
522
|
// SEARCH MODE
|
|
523
523
|
// =========================
|
|
524
524
|
if (this.desigantionFilterEnable) {
|
|
525
|
-
this.isLoadingMoreDesignations = true;
|
|
525
|
+
// this.isLoadingMoreDesignations = true;
|
|
526
526
|
this.searchDesignationLoadCount += 50;
|
|
527
527
|
setTimeout(() => {
|
|
528
528
|
this.masterData.designation =
|
|
529
529
|
this.masterData.designationFiltered.slice(0, this.searchDesignationLoadCount);
|
|
530
|
+
// this.isLoadingMoreDesignations = false;
|
|
530
531
|
this.checkCurrentDesignationPresent();
|
|
531
|
-
this.isLoadingMoreDesignations = false;
|
|
532
532
|
}, 300);
|
|
533
533
|
return;
|
|
534
534
|
}
|
|
@@ -551,6 +551,9 @@ export class AddDesignationComponent {
|
|
|
551
551
|
}
|
|
552
552
|
// server pagination
|
|
553
553
|
const loadedLegacy = (this.masterData?.designationBackup || []).length;
|
|
554
|
+
console.log('loadedLegacy--', loadedLegacy);
|
|
555
|
+
console.log('this.noMoreLegacyDesignations--', this.noMoreLegacyDesignations);
|
|
556
|
+
console.log('this.defaultSearchDesignationCount', this.defaultSearchDesignationCount);
|
|
554
557
|
if (!this.noMoreLegacyDesignations &&
|
|
555
558
|
this.defaultSearchDesignationCount &&
|
|
556
559
|
loadedLegacy < this.defaultSearchDesignationCount) {
|
|
@@ -560,8 +563,12 @@ export class AddDesignationComponent {
|
|
|
560
563
|
this.designationDefaultLoadCount;
|
|
561
564
|
this.designationListLoadCount +=
|
|
562
565
|
this.designationDefaultLoadCount;
|
|
566
|
+
console.log('this.designationOffset--', this.designationOffset);
|
|
563
567
|
this.getDesignation(undefined, this.designationOffset);
|
|
564
568
|
}
|
|
569
|
+
else {
|
|
570
|
+
this.isLoadingMoreDesignations = false;
|
|
571
|
+
}
|
|
565
572
|
}
|
|
566
573
|
get searchDesignationControl() {
|
|
567
574
|
return this.designationForm.get('searchDesignation');
|
|
@@ -638,4 +645,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
638
645
|
type: ViewChild,
|
|
639
646
|
args: ['designation', { read: ElementRef }]
|
|
640
647
|
}] } });
|
|
641
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWRlc2lnbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1kZXNpZ25hdGlvbi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWRlc2lnbmF0aW9uL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBT3BDLE1BQU0sT0FBTyx1QkFBdUI7SUFpQ2xDLFlBQW1CLFNBQWdELEVBQ2pDLElBQVMsRUFDakMsRUFBZSxFQUNmLEtBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFFBQXFCO1FBTFosY0FBUyxHQUFULFNBQVMsQ0FBdUM7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIs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Ryx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzswQkFzQzVCLE1BQU07MkJBQUMsZUFBZTs0SkFuQnVCLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWRlc2lnbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZERlc2lnbmF0aW9uQ29tcG9uZW50IHtcbiAgZGVzaWduYXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIG1heEZpbGVTaXplTUIgPSAyNTtcbiAgYWxsb3dlZFR5cGVzID0gW1xuICAgICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAndGV4dC9wbGFpbidcbiAgXTtcbiAgdXBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB1cGxvYWRlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2Rlc2lnbmF0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRlc2lnbmF0aW9uUmVmPzogRWxlbWVudFJlZlxuICBkZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25PZmZzZXQgPSAwXG4gIG9kY3NEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTBcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gNTBcbiAgbm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJydcbiAgZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gIHNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICBtYXN0ZXJEYXRhOiBhbnkgPSB7fVxuICBzZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwXG4gIG1hdGNoZWREZXNpZ25hdGlvbklkcyA9IFtdXG4gIHJlYWRvbmx5IE1BWF9ERVNJR05BVElPTlMgPSAxMDtcbiAgbWF4RGVzaWduYXRpb25Db3VudCA9IDEwO1xuICBwcml2YXRlIGRlc2lnbmF0aW9uU2Nyb2xsSGFuZGxlciA9IHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkRGVzaWduYXRpb25Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgZGVzaWduYXRpb25CYWNrdXA6IFtdLFxuICAgICAgZGVzaWduYXRpb25GaWx0ZXJlZDogW10sIC8vIGZpbHRlcmVkIHNlYXJjaCByZXN1bHRzXG4gICAgfTtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMubWF0Y2hlZF9yb2xlX21hcHBpbmdzJywgdGhpcy5kYXRhPy5tYXRjaGVkX3JvbGVfbWFwcGluZ3MpXG4gICAgdGhpcy5tYXRjaGVkRGVzaWduYXRpb25JZHMgPSB0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncz8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/Lmlnb3RfZGVzaWduYXRpb25faWQpIHx8IFtdXG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuXG4gICAgLy8gY29uc3Qgc2VhcmNoQ29udHJvbCA9IHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcblxuICAgIC8vIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgLy8gICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgIC8vICAgICAucGlwZShcbiAgICAvLyAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAvLyAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgLy8gICAgIClcbiAgICAvLyAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgIC8vICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgLy8gICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHQ7XG5cbiAgICAvLyAgICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgIC8vICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgIC8vICAgICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgIC8vICAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgLy8gICAgICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMCk7XG5cbiAgICAvLyAgICAgICB9IGVsc2Uge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgLy8gICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgIC8vICAgICAgICAgICAgIDAsXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICAvLyAgICAgICAgICAgKTtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgIC8vICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG5cbiAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKCk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkZXNpZ25hdGlvbnM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERlc2lnbmF0aW9uQmxvY2soKTtcbiAgfVxuXG4gIGdldCBkZXNpZ25hdGlvbkFycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgYWRkRGVzaWduYXRpb25CbG9jaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA+PSB0aGlzLm1heERlc2lnbmF0aW9uQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cCA9IHRoaXMuY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk7XG5cbiAgICBncm91cC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH0pO1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy52YWx1ZUNoYW5nZXNcbiAgICAucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG5cbiAgICAgIGNvbnN0IHR4dCA9IHZhbHVlPy50cmltKCkgfHwgJyc7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0O1xuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuXG4gICAgICBpZiAodHh0KSB7XG5cbiAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LnB1c2goZ3JvdXApO1xuICB9XG5cbiAgc2F2ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcblxuICAgIGdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgIGlmIChncm91cC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBpc0VkaXQ6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBlZGl0RGVzaWduYXRpb25CbG9jayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LmF0KGluZGV4KS5nZXQoJ2lzRWRpdCcpPy5zZXRWYWx1ZSh0cnVlKTtcbiAgfVxuXG4gIGRlbGV0ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hZGREZXNpZ25hdGlvbkJsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgaW5zdHJ1Y3Rpb246IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB1cGxvYWREb2M6IFtudWxsLCBbXV0sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlzRWRpdDogW3RydWVdXG4gICAgfSk7XG4gIH1cblxuICBvbkZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG5cbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIHNpemVcbiAgICBjb25zdCBtYXhCeXRlcyA9IHRoaXMubWF4RmlsZVNpemVNQiAqIDEwMjQgKiAxMDI0O1xuICAgIGlmIChmaWxlLnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBGaWxlIGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICR7dGhpcy5tYXhGaWxlU2l6ZU1CfU1CYDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnNldEVycm9ycyh7IG1heFNpemU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsZSB0eXBlXG4gICAgaWYgKCF0aGlzLmFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYEludmFsaWQgZmlsZSB0eXBlLiBBbGxvd2VkOiBQREYsIFdvcmQsIEV4Y2VsLCBUWFRgO1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8uc2V0RXJyb3JzKHsgZmlsZVR5cGU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSBmaWxlO1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLnBhdGNoVmFsdWUoeyB1cGxvYWREb2M6IGZpbGUgfSk7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgY2FuY2VsRm9ybSgpIHtcbiAgICAgdGhpcy5yZXNldFBvcHVwKCk7XG4gIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICAvLyBzYXZlRGVzaWduYXRpb24oKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAvLyAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkZXNpZ25hdGlvbk5hbWUnLCB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uTmFtZScpPy52YWx1ZSk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdyb2xlRGV0YWlscycsIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgncm9sZURldGFpbHMnKT8udmFsdWUpO1xuICAvLyAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZSkge1xuICAvLyAgICAgZm9ybURhdGEuYXBwZW5kKCd1cGxvYWREb2MnLCB0aGlzLnVwbG9hZGVkRmlsZSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuY2JwUGxhbkZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9uRm9ybScsIHRoaXMuZGVzaWduYXRpb25Gb3JtKVxuICAvLyAgIGxldCByZXE6IGFueSA9IHtcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX2lkXCI6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX25hbWVcIjogdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lLFxuICAvLyAgICAgLy8gXCJkZXBhcnRtZW50X2lkXCI6IFwiXCIsXG4gIC8vICAgICBcImRlc2lnbmF0aW9uX25hbWVcIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuZGVzaWduYXRpb25fbmFtZSxcbiAgLy8gICAgIFwiaW5zdHJ1Y3Rpb25cIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuaW5zdHJ1Y3Rpb24sXG4gIC8vICAgfVxuICAvLyAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lKSB7XG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfaWQnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHNcbiAgLy8gICAgIHJlcVsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5JyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWVcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zb2xlLmxvZygncmVxJywgcmVxKVxuICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5hZGREZXNpZ25hdGlvbihyZXEpLnN1YnNjcmliZSh7XG4gIC8vICAgICBuZXh0OiAoX3JlcykgPT4ge1xuICAvLyAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAvLyAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0Rlc2lnbmF0aW9uIEFkZGVkIFN1Y2Nlc3NmdWxseScsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAvLyAgICAgfSxcbiAgLy8gICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgLy8gICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIGRlc2lnbmF0aW9uOicsIGVycm9yKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KVxuICAvLyB9XG5cblxuXG5zYXZlRGVzaWduYXRpb24oKTogdm9pZCB7XG5cbiAgaWYgKCF0aGlzLmNhbkdlbmVyYXRlQ0JQKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzYXZlIGFsbCBkZXNpZ25hdGlvbiBzZWN0aW9ucyBiZWZvcmUgZ2VuZXJhdGluZyBDQlAuJyxcbiAgICAgICdYJyxcbiAgICAgIHsgZHVyYXRpb246IDMwMDAgfVxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVzaWduYXRpb25Sb3dzID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzXG4gICAgLm1hcChjb250cm9sID0+ICh7XG4gICAgICBkZXNpZ25hdGlvbl9uYW1lOiBjb250cm9sLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZSxcbiAgICAgIGluc3RydWN0aW9uOiBjb250cm9sLmdldCgnaW5zdHJ1Y3Rpb24nKT8udmFsdWVcbiAgICB9KSlcbiAgICAuZmlsdGVyKHJvdyA9PiByb3cuZGVzaWduYXRpb25fbmFtZSk7XG5cbiAgaWYgKCFkZXNpZ25hdGlvblJvd3MubGVuZ3RoKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLicsXG4gICAgICAnWCcsXG4gICAgICB7IGR1cmF0aW9uOiAzMDAwIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3QgYmFzZU9iajogYW55ID0ge1xuICAgIHN0YXRlX2NlbnRlcl9pZDpcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcblxuICAgIHN0YXRlX2NlbnRlcl9uYW1lOlxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lXG4gIH07XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgY29uc3QgYXBpQ2FsbHMgPSBkZXNpZ25hdGlvblJvd3MubWFwKHJvdyA9PiB7XG5cbiAgICBjb25zdCByZXEgPSB7XG4gICAgICAuLi5iYXNlT2JqLFxuICAgICAgZGVzaWduYXRpb25fbmFtZTogcm93LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICBpbnN0cnVjdGlvbjogcm93Lmluc3RydWN0aW9uXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnNoYXJlZFNlcnZpY2UuYWRkRGVzaWduYXRpb24ocmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbjogJHtyb3cuZGVzaWduYXRpb25fbmFtZX1gLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICBkZXNpZ25hdGlvbjogcm93LmRlc2lnbmF0aW9uX25hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGZvcmtKb2luKGFwaUNhbGxzKS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHRzOiBhbnlbXSkgPT4ge1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIocmVzID0+IHJlcz8uZXJyb3IpO1xuXG4gICAgICBpZiAoZmFpbGVkLmxlbmd0aCkge1xuXG4gICAgICAgIGNvbnN0IGZhaWxlZE5hbWVzID0gZmFpbGVkXG4gICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uZGVzaWduYXRpb24pXG4gICAgICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgIGBGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uczogJHtmYWlsZWROYW1lc31gLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgJ0FsbCBkZXNpZ25hdGlvbnMgYWRkZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgJ1gnLFxuICAgICAgICB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJyk7XG4gICAgfSxcblxuICAgIGVycm9yOiAoKSA9PiB7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICdTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAnWCcsXG4gICAgICAgIHtcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMucmVzZXRQb3B1cCgpO1xuICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZGVidWcgaG9va3NcbiAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgY29uc3QgcmVxT2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSA/IG9mZnNldCA6IHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICBsZXQgcmVxTGltaXQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHJlcUxpbWl0ID4gMCA/IE1hdGguZmxvb3IocmVxT2Zmc2V0IC8gcmVxTGltaXQpIDogMFxuICAgIC8vIGlmIHdlJ3JlIHJlcXVlc3RpbmcgZnJvbSBmaXJzdCBwYWdlLCBjbGVhciB0aGUgbm8tbW9yZS1kYXRhIGd1YXJkXG4gICAgaWYgKHBhZ2VJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgcmVxTGltaXQgPSA1MFxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgZmlsdGVyQ3JpdGVyaWFNYXA6IHtcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW10sXG4gICAgICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgfVxuICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHNlYXJjaFRleHRcbiAgICAgIC8vIHdoZW4gc2VhcmNoaW5nLCBzdGFydCBmcm9tIGZpcnN0IHBhZ2VcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VOdW1iZXIgPSAwXG4gICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgcmVxdWVzdEJvZHkucGFnZVNpemUgPSBwYWdlSW5kZXggPT09IDAgPyA1MCA6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAvLyByZXNldCBndWFyZCB3aGVuIHBlcmZvcm1pbmcgYSBmcmVzaCBzZWFyY2hcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpbmRpY2F0ZSBsb2FkaW5nIHN0YXRlIHNvIHNjcm9sbCBoYW5kbGVycyBkb24ndCB0cmlnZ2VyIHBhcmFsbGVsIGNhbGxzXG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuXG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gICAgICAgICAgaWYgKGNvbnRlbnQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZWRJZHMgPSBuZXcgU2V0KHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzKTtcblxuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnRcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIW1hdGNoZWRJZHMuaGFzKGl0ZW0/LmlkKSlcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0/LmlkLFxuICAgICAgICAgICAgICBuYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjb25zdCB0b3RhbCA9IF8uZ2V0KFxuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQudG90YWxjb3VudCcsXG4gICAgICAgICAgICBfLmdldChcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICAncmVzdWx0LnJlc3VsdC5kYXRhLnRvdGFsQ291bnQnLFxuICAgICAgICAgICAgICBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gdG90YWw7XG5cbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gU0VBUkNIIE1PREVcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkID0gbWFwcGVkO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAvLyBOT1JNQUwgTU9ERVxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgICAgICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IHJlcU9mZnNldCA9PT0gMCkge1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWQ7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9XG4gICAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBfLnVuaXFCeShcbiAgICAgICAgICAgICAgY29tYmluZWQsXG4gICAgICAgICAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIHByZXNlcnZlXG4gICAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID1cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuXG4gICAgICAgICAgaWYgKGRlc2lnbmF0aW9uQ29udHJvbCkge1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID1cbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnZhbHVlIHx8IFtdO1xuXG4gICAgICAgICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc29tZShcbiAgICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWUgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBubyBtb3JlIGRhdGFcbiAgICAgICAgICBpZiAoIW1hcHBlZCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBkZXNpZ25hdGlvbiBkZXRhaWxzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbiAgLy8gRklYIDI6IEFsc28gaW5qZWN0IHNlbGVjdGVkIGl0ZW1zIGludG8gZGVzaWduYXRpb25CYWNrdXBcbiAgY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuXG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID1cbiAgICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5jb250cm9sc1xuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUpXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgc2VsZWN0ZWQgZW50cmllc1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZERlc2lnbmF0aW9ucy5tYXAoKG5hbWU6IHN0cmluZykgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgfSkpO1xuXG4gICAgLy8gUmVtb3ZlIHNlbGVjdGVkIGl0ZW1zIGZyb20gY3VycmVudCBsaXN0c1xuICAgIGNvbnN0IHJlbWFpbmluZ1Zpc2libGUgPSAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAhc2VsZWN0ZWREZXNpZ25hdGlvbnMuc29tZShcbiAgICAgICAgICBzZWxlY3RlZCA9PiBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgcmVtYWluaW5nQmFja3VwID0gKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgIXNlbGVjdGVkRGVzaWduYXRpb25zLnNvbWUoXG4gICAgICAgICAgc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8vIFB1dCBzZWxlY3RlZCBpdGVtcyBvbiB0b3BcbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBfLnVuaXFCeShcbiAgICAgIFsuLi5zZWxlY3RlZEl0ZW1zLCAuLi5yZW1haW5pbmdWaXNpYmxlXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gXy51bmlxQnkoXG4gICAgICBbLi4uc2VsZWN0ZWRJdGVtcywgLi4ucmVtYWluaW5nQmFja3VwXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG4gIG9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpO1xuXG4gIGNvbnN0IGN1cnJlbnREZXNpZ25hdGlvbiA9XG4gICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy5zZXRWYWx1ZShcbiAgICAgICcnLFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJylcbiAgICAgICAgPy5zZXRWYWx1ZShjdXJyZW50RGVzaWduYXRpb24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgfSwgMTAwKTtcbiAgfVxuXG4gIC8vIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gIC8vICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAvLyAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAvLyAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gIC8vICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgLy8gICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gIC8vICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gIC8vICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgLy8gICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gIC8vICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIC8vICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gIC8vICAgfVxuICAvLyB9XG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG5cbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCkgcmV0dXJuO1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8g4pyFIE9ubHkgcmVzZXQgcGFnaW5hdGlvbiBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDinIUgUmVzdG9yZSBmcm9tIGJhY2t1cCB3aXRob3V0IHJlc2V0dGluZyBvZmZzZXRcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgMCwgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICk7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH1cblxuICAgIC8vIGZvY3VzIHNlYXJjaCBpbnB1dFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICBjb25zdCBzZWFyY2hJbnB1dCA9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWFyY2gtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgIH0sIDIwMCk7XG5cbiAgICAvLyBhdHRhY2ggc2Nyb2xsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5tYXQtc2VsZWN0LXBhbmVsLnNlYXJjaC1wYW5lbCdcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoIXBhbmVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgJ3Njcm9sbCcsXG4gIHRoaXMuZGVzaWduYXRpb25TY3JvbGxIYW5kbGVyXG4pO1xuXG5wYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAnc2Nyb2xsJyxcbiAgdGhpcy5kZXNpZ25hdGlvblNjcm9sbEhhbmRsZXIsXG4gIHsgcGFzc2l2ZTogdHJ1ZSB9XG4pO1xuXG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50Py50YXJnZXQ7XG5cbiAgICBjb25zdCByZWFjaGVkQm90dG9tID1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gNTtcblxuICAgIGlmICghcmVhY2hlZEJvdHRvbSB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gU0VBUkNIIE1PREVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgaWYgKHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUpIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCArPSA1MDtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuXG4gICAgICB9LCAzMDApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE5PUk1BTCBNT0RFXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgLy8gbG9jYWwgcGFnaW5hdGlvblxuICAgIGlmIChcbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCA+XG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uPy5sZW5ndGhcbiAgICApIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuXG4gICAgICB9LCAzMDApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2VydmVyIHBhZ2luYXRpb25cbiAgICBjb25zdCBsb2FkZWRMZWdhY3kgPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLmxlbmd0aDtcblxuICAgIGlmIChcbiAgICAgICF0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyAmJlxuICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgbG9hZGVkTGVnYWN5IDwgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgICkge1xuXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID1cbiAgICAgICAgKHRoaXMuZGVzaWduYXRpb25PZmZzZXQgfHwgMCkgK1xuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odW5kZWZpbmVkLCB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgY2xlYXJEZXNpZ25hdGlvblNlYXJjaChpbmRleDpudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgY29uc3QgY29udHJvbCA9IHRoaXMuZGVzaWduYXRpb25BcnJheVxuICAgIC5hdChpbmRleClcbiAgICAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpO1xuXG4gIGNvbnRyb2w/LnNldFZhbHVlKCcnKTtcblxuICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICk7XG5cbiAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgfVxuXG4gIGdldCBjYW5HZW5lcmF0ZUNCUCgpOiBib29sZWFuIHtcblxuICAgIGlmICh0aGlzLmRlc2lnbmF0aW9uQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25BcnJheS5jb250cm9scy5ldmVyeShcbiAgICAgIGNvbnRyb2wgPT5cbiAgICAgICAgIWNvbnRyb2wuZ2V0KCdpc0VkaXQnKT8udmFsdWUgJiZcbiAgICAgICAgY29udHJvbC52YWxpZFxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERlc2lnbmF0aW9ucyhjdXJyZW50SW5kZXg6IG51bWJlcik6IGFueVtdIHtcblxuICAgIC8vIEdldCBhbGwgc2VsZWN0ZWQgZGVzaWduYXRpb25zIGV4Y2VwdCBjdXJyZW50IHJvd1xuICAgIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb25zID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzXG4gICAgICAubWFwKChjb250cm9sLCBpbmRleCkgPT5cbiAgICAgICAgaW5kZXggIT09IGN1cnJlbnRJbmRleFxuICAgICAgICAgID8gY29udHJvbC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSk7XG5cbiAgICByZXR1cm4gKHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24gfHwgW10pLmZpbHRlcihcbiAgICAgIChkZXNpZ25hdGlvbjogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID1cbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoY3VycmVudEluZGV4KVxuICAgICAgICAgICAgLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZTtcblxuICAgICAgICAvLyBLZWVwIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgdmlzaWJsZVxuICAgICAgICBpZiAoZGVzaWduYXRpb24ubmFtZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIXNlbGVjdGVkRGVzaWduYXRpb25zLmluY2x1ZGVzKGRlc2lnbmF0aW9uLm5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UG9wdXAoKTogdm9pZCB7XG5cbiAgdGhpcy5kZXNpZ25hdGlvbkZvcm0ucmVzZXQoKTtcblxuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuY2xlYXIoKTtcblxuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkucHVzaChcbiAgICB0aGlzLmNyZWF0ZURlc2lnbmF0aW9uRm9ybSgpXG4gICk7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gW107XG4gIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCA9IFtdO1xuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IFtdO1xuXG4gIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJyc7XG4gIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG4gIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTA7XG5cbiAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMudXBsb2FkZWRGaWxlID0gbnVsbDtcbiAgdGhpcy51cGxvYWRFcnJvciA9IG51bGw7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgZGVzaWduYXRpb246IFtdLFxuICAgIGRlc2lnbmF0aW9uQmFja3VwOiBbXSxcbiAgICBkZXNpZ25hdGlvbkZpbHRlcmVkOiBbXVxuICB9O1xuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuY2xlYXIoKTtcblxuICB0aGlzLmFkZERlc2lnbmF0aW9uQmxvY2soKTtcbiAgdGhpcy5nZXREZXNpZ25hdGlvblNhZmUoKTtcblxufVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJkZXNpZ25hdGlvbkZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+QWRkIE5ldyBEZXNpZ25hdGlvbjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiYWRkRGVzaWduYXRpb25CbG9jaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXNpZ25hdGlvbkFycmF5Py5sZW5ndGggPj0gTUFYX0RFU0lHTkFUSU9OU1wiPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4O1wiPis8L3NwYW4+IEFkZCBNb3JlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlciBzZXBlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmVydGljYWwtbWlkZGxlXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSAxMCBkZXNpZ25hdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGZvciBDQlAgZ2VuZXJhdGlvbiBhdCBvbmUgdGltZS5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb25BcnJheT8ubGVuZ3RoIH19L3t7IE1BWF9ERVNJR05BVElPTlMgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXJcIj4gXG4gICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJkZXNpZ25hdGlvbnNcIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uR3JvdXAgb2YgZGVzaWduYXRpb25BcnJheS5jb250cm9sczsgbGV0IGk9aW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZXNpZ25hdGlvbi13cmFwcGVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBFRElUIE1PREUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXNpZ25hdGlvbkdyb3VwLnZhbHVlLmlzRWRpdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0xIGRlc2lnbmF0aW9uLWJsb2NrXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduYXRpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVzaWduYXRpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVzaWduYXRpb24gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RGVzaWduYXRpb24gTmFtZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyIG10LTRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtYXJnaW4tdG9wLXMgdy1mdWxsIHJlcXVpcmVkLXNlbGVjdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGVzaWduYXRpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlZCk9XCJvbkRlc2lnbmF0aW9uRHJvcGRvd25DbG9zZWQoaSlcIiBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaERlc2lnbmF0aW9uQ29udHJvbD8udmFsdWVcIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEZXNpZ25hdGlvblNlYXJjaChpLCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBnZXRGaWx0ZXJlZERlc2lnbmF0aW9ucyhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGVzaWduYXRpb24/Lm5hbWVcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24/Lm5hbWUgfX1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnNcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWQgTW9yZS4uLlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMCB8fCBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIE5vdCBGb3VuZC5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5zdHJ1Y3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Um9sZSAmIFJlc3BvbnNpYmlsaXRpZXMgLyBBZGRpdGlvbmFsIERldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJpbnN0cnVjdGlvblwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBJbnN0cnVjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduYXRpb24tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gIGNsYXNzPVwic2F2ZS1mbGF0LWJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFZJRVcgTU9ERSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkZXNpZ25hdGlvbkdyb3VwLnZhbHVlLmlzRWRpdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJzYXZlZC1kZXNpZ25hdGlvbi1jYXJkXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1jb250ZW50LWRlc2NcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkLWRlc2lnbmF0aW9uLW5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweCA7Zm9udC13ZWlnaHQ6IDYwMDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpKzF9fS4ge3sgZGVzaWduYXRpb25Hcm91cC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUgfX0gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkLWluc3RydWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb25Hcm91cC5nZXQoJ2luc3RydWN0aW9uJyk/LnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImVkaXREZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbEZvcm0oKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCIhY2FuR2VuZXJhdGVDQlBcIiBbbmdDbGFzc109XCIhY2FuR2VuZXJhdGVDQlAgPyAnYnRuLWRpc2FibGUnOididG4tYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJHZW5lcmF0ZSBDQlBcIiAoY2xpY2spPVwic2F2ZURlc2lnbmF0aW9uKClcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgPC9kaXY+Il19
|
|
648
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWRlc2lnbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1kZXNpZ25hdGlvbi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWRlc2lnbmF0aW9uL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBT3BDLE1BQU0sT0FBTyx1QkFBdUI7SUFpQ2xDLFlBQW1CLFNBQWdELEVBQ2pDLElBQVMsRUFDakMsRUFBZSxFQUNmLEtBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFFBQXFCO1FBTFosY0FBUyxHQUFULFNBQVMsQ0FBdUM7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIs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LGlCQUFpQixFQUFFLEVBQUU7WUFDckIsbUJBQW1CLEVBQUUsRUFBRTtTQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBRTVCLENBQUM7K0dBdjZCWSx1QkFBdUIsOENBa0N4QixlQUFlO21HQWxDZCx1QkFBdUIscUpBZUEsVUFBVSw2QkM1QjlDLDA4UkE0TlU7OzRGRC9NRyx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzswQkFzQzVCLE1BQU07MkJBQUMsZUFBZTs0SkFuQnVCLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWRlc2lnbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZERlc2lnbmF0aW9uQ29tcG9uZW50IHtcbiAgZGVzaWduYXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIG1heEZpbGVTaXplTUIgPSAyNTtcbiAgYWxsb3dlZFR5cGVzID0gW1xuICAgICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAndGV4dC9wbGFpbidcbiAgXTtcbiAgdXBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB1cGxvYWRlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2Rlc2lnbmF0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRlc2lnbmF0aW9uUmVmPzogRWxlbWVudFJlZlxuICBkZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25PZmZzZXQgPSAwXG4gIG9kY3NEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTBcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gNTBcbiAgbm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJydcbiAgZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gIHNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICBtYXN0ZXJEYXRhOiBhbnkgPSB7fVxuICBzZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwXG4gIG1hdGNoZWREZXNpZ25hdGlvbklkcyA9IFtdXG4gIHJlYWRvbmx5IE1BWF9ERVNJR05BVElPTlMgPSAxMDtcbiAgbWF4RGVzaWduYXRpb25Db3VudCA9IDEwO1xuICBwcml2YXRlIGRlc2lnbmF0aW9uU2Nyb2xsSGFuZGxlciA9IHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkRGVzaWduYXRpb25Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgZGVzaWduYXRpb25CYWNrdXA6IFtdLFxuICAgICAgZGVzaWduYXRpb25GaWx0ZXJlZDogW10sIC8vIGZpbHRlcmVkIHNlYXJjaCByZXN1bHRzXG4gICAgfTtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMubWF0Y2hlZF9yb2xlX21hcHBpbmdzJywgdGhpcy5kYXRhPy5tYXRjaGVkX3JvbGVfbWFwcGluZ3MpXG4gICAgdGhpcy5tYXRjaGVkRGVzaWduYXRpb25JZHMgPSB0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncz8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/Lmlnb3RfZGVzaWduYXRpb25faWQpIHx8IFtdXG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuXG4gICAgLy8gY29uc3Qgc2VhcmNoQ29udHJvbCA9IHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcblxuICAgIC8vIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgLy8gICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgIC8vICAgICAucGlwZShcbiAgICAvLyAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAvLyAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgLy8gICAgIClcbiAgICAvLyAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgIC8vICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgLy8gICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHQ7XG5cbiAgICAvLyAgICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgIC8vICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgIC8vICAgICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgIC8vICAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgLy8gICAgICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMCk7XG5cbiAgICAvLyAgICAgICB9IGVsc2Uge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgLy8gICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgIC8vICAgICAgICAgICAgIDAsXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICAvLyAgICAgICAgICAgKTtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgIC8vICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG5cbiAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKCk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkZXNpZ25hdGlvbnM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERlc2lnbmF0aW9uQmxvY2soKTtcbiAgfVxuXG4gIGdldCBkZXNpZ25hdGlvbkFycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgYWRkRGVzaWduYXRpb25CbG9jaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA+PSB0aGlzLm1heERlc2lnbmF0aW9uQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cCA9IHRoaXMuY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk7XG5cbiAgICBncm91cC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH0pO1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy52YWx1ZUNoYW5nZXNcbiAgICAucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG5cbiAgICAgIGNvbnN0IHR4dCA9IHZhbHVlPy50cmltKCkgfHwgJyc7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0O1xuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuXG4gICAgICBpZiAodHh0KSB7XG5cbiAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LnB1c2goZ3JvdXApO1xuICB9XG5cbiAgc2F2ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcblxuICAgIGdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgIGlmIChncm91cC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBpc0VkaXQ6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBlZGl0RGVzaWduYXRpb25CbG9jayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LmF0KGluZGV4KS5nZXQoJ2lzRWRpdCcpPy5zZXRWYWx1ZSh0cnVlKTtcbiAgfVxuXG4gIGRlbGV0ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hZGREZXNpZ25hdGlvbkJsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgaW5zdHJ1Y3Rpb246IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB1cGxvYWREb2M6IFtudWxsLCBbXV0sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlzRWRpdDogW3RydWVdXG4gICAgfSk7XG4gIH1cblxuICBvbkZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG5cbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIHNpemVcbiAgICBjb25zdCBtYXhCeXRlcyA9IHRoaXMubWF4RmlsZVNpemVNQiAqIDEwMjQgKiAxMDI0O1xuICAgIGlmIChmaWxlLnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBGaWxlIGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICR7dGhpcy5tYXhGaWxlU2l6ZU1CfU1CYDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnNldEVycm9ycyh7IG1heFNpemU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsZSB0eXBlXG4gICAgaWYgKCF0aGlzLmFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYEludmFsaWQgZmlsZSB0eXBlLiBBbGxvd2VkOiBQREYsIFdvcmQsIEV4Y2VsLCBUWFRgO1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8uc2V0RXJyb3JzKHsgZmlsZVR5cGU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSBmaWxlO1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLnBhdGNoVmFsdWUoeyB1cGxvYWREb2M6IGZpbGUgfSk7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgY2FuY2VsRm9ybSgpIHtcbiAgICAgdGhpcy5yZXNldFBvcHVwKCk7XG4gIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICAvLyBzYXZlRGVzaWduYXRpb24oKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAvLyAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkZXNpZ25hdGlvbk5hbWUnLCB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uTmFtZScpPy52YWx1ZSk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdyb2xlRGV0YWlscycsIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgncm9sZURldGFpbHMnKT8udmFsdWUpO1xuICAvLyAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZSkge1xuICAvLyAgICAgZm9ybURhdGEuYXBwZW5kKCd1cGxvYWREb2MnLCB0aGlzLnVwbG9hZGVkRmlsZSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuY2JwUGxhbkZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9uRm9ybScsIHRoaXMuZGVzaWduYXRpb25Gb3JtKVxuICAvLyAgIGxldCByZXE6IGFueSA9IHtcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX2lkXCI6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX25hbWVcIjogdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lLFxuICAvLyAgICAgLy8gXCJkZXBhcnRtZW50X2lkXCI6IFwiXCIsXG4gIC8vICAgICBcImRlc2lnbmF0aW9uX25hbWVcIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuZGVzaWduYXRpb25fbmFtZSxcbiAgLy8gICAgIFwiaW5zdHJ1Y3Rpb25cIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuaW5zdHJ1Y3Rpb24sXG4gIC8vICAgfVxuICAvLyAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lKSB7XG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfaWQnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHNcbiAgLy8gICAgIHJlcVsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5JyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWVcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zb2xlLmxvZygncmVxJywgcmVxKVxuICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5hZGREZXNpZ25hdGlvbihyZXEpLnN1YnNjcmliZSh7XG4gIC8vICAgICBuZXh0OiAoX3JlcykgPT4ge1xuICAvLyAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAvLyAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0Rlc2lnbmF0aW9uIEFkZGVkIFN1Y2Nlc3NmdWxseScsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAvLyAgICAgfSxcbiAgLy8gICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgLy8gICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIGRlc2lnbmF0aW9uOicsIGVycm9yKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KVxuICAvLyB9XG5cblxuXG5zYXZlRGVzaWduYXRpb24oKTogdm9pZCB7XG5cbiAgaWYgKCF0aGlzLmNhbkdlbmVyYXRlQ0JQKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzYXZlIGFsbCBkZXNpZ25hdGlvbiBzZWN0aW9ucyBiZWZvcmUgZ2VuZXJhdGluZyBDQlAuJyxcbiAgICAgICdYJyxcbiAgICAgIHsgZHVyYXRpb246IDMwMDAgfVxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVzaWduYXRpb25Sb3dzID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzXG4gICAgLm1hcChjb250cm9sID0+ICh7XG4gICAgICBkZXNpZ25hdGlvbl9uYW1lOiBjb250cm9sLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZSxcbiAgICAgIGluc3RydWN0aW9uOiBjb250cm9sLmdldCgnaW5zdHJ1Y3Rpb24nKT8udmFsdWVcbiAgICB9KSlcbiAgICAuZmlsdGVyKHJvdyA9PiByb3cuZGVzaWduYXRpb25fbmFtZSk7XG5cbiAgaWYgKCFkZXNpZ25hdGlvblJvd3MubGVuZ3RoKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLicsXG4gICAgICAnWCcsXG4gICAgICB7IGR1cmF0aW9uOiAzMDAwIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3QgYmFzZU9iajogYW55ID0ge1xuICAgIHN0YXRlX2NlbnRlcl9pZDpcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcblxuICAgIHN0YXRlX2NlbnRlcl9uYW1lOlxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lXG4gIH07XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgY29uc3QgYXBpQ2FsbHMgPSBkZXNpZ25hdGlvblJvd3MubWFwKHJvdyA9PiB7XG5cbiAgICBjb25zdCByZXEgPSB7XG4gICAgICAuLi5iYXNlT2JqLFxuICAgICAgZGVzaWduYXRpb25fbmFtZTogcm93LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICBpbnN0cnVjdGlvbjogcm93Lmluc3RydWN0aW9uXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnNoYXJlZFNlcnZpY2UuYWRkRGVzaWduYXRpb24ocmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbjogJHtyb3cuZGVzaWduYXRpb25fbmFtZX1gLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICBkZXNpZ25hdGlvbjogcm93LmRlc2lnbmF0aW9uX25hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGZvcmtKb2luKGFwaUNhbGxzKS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHRzOiBhbnlbXSkgPT4ge1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIocmVzID0+IHJlcz8uZXJyb3IpO1xuXG4gICAgICBpZiAoZmFpbGVkLmxlbmd0aCkge1xuXG4gICAgICAgIGNvbnN0IGZhaWxlZE5hbWVzID0gZmFpbGVkXG4gICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uZGVzaWduYXRpb24pXG4gICAgICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgIGBGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uczogJHtmYWlsZWROYW1lc31gLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgJ0FsbCBkZXNpZ25hdGlvbnMgYWRkZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgJ1gnLFxuICAgICAgICB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJyk7XG4gICAgfSxcblxuICAgIGVycm9yOiAoKSA9PiB7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICdTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAnWCcsXG4gICAgICAgIHtcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMucmVzZXRQb3B1cCgpO1xuICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZGVidWcgaG9va3NcbiAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgY29uc3QgcmVxT2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSA/IG9mZnNldCA6IHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICBsZXQgcmVxTGltaXQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHJlcUxpbWl0ID4gMCA/IE1hdGguZmxvb3IocmVxT2Zmc2V0IC8gcmVxTGltaXQpIDogMFxuICAgIC8vIGlmIHdlJ3JlIHJlcXVlc3RpbmcgZnJvbSBmaXJzdCBwYWdlLCBjbGVhciB0aGUgbm8tbW9yZS1kYXRhIGd1YXJkXG4gICAgaWYgKHBhZ2VJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgcmVxTGltaXQgPSA1MFxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgZmlsdGVyQ3JpdGVyaWFNYXA6IHtcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW10sXG4gICAgICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgfVxuICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHNlYXJjaFRleHRcbiAgICAgIC8vIHdoZW4gc2VhcmNoaW5nLCBzdGFydCBmcm9tIGZpcnN0IHBhZ2VcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VOdW1iZXIgPSAwXG4gICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgcmVxdWVzdEJvZHkucGFnZVNpemUgPSBwYWdlSW5kZXggPT09IDAgPyA1MCA6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAvLyByZXNldCBndWFyZCB3aGVuIHBlcmZvcm1pbmcgYSBmcmVzaCBzZWFyY2hcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpbmRpY2F0ZSBsb2FkaW5nIHN0YXRlIHNvIHNjcm9sbCBoYW5kbGVycyBkb24ndCB0cmlnZ2VyIHBhcmFsbGVsIGNhbGxzXG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuXG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gICAgICAgICAgaWYgKGNvbnRlbnQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZWRJZHMgPSBuZXcgU2V0KHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzKTtcblxuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnRcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIW1hdGNoZWRJZHMuaGFzKGl0ZW0/LmlkKSlcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0/LmlkLFxuICAgICAgICAgICAgICBuYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjb25zdCB0b3RhbCA9IF8uZ2V0KFxuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQudG90YWxjb3VudCcsXG4gICAgICAgICAgICBfLmdldChcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICAncmVzdWx0LnJlc3VsdC5kYXRhLnRvdGFsQ291bnQnLFxuICAgICAgICAgICAgICBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gdG90YWw7XG5cbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gU0VBUkNIIE1PREVcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkID0gbWFwcGVkO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAvLyBOT1JNQUwgTU9ERVxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgICAgICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IHJlcU9mZnNldCA9PT0gMCkge1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWQ7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9XG4gICAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBfLnVuaXFCeShcbiAgICAgICAgICAgICAgY29tYmluZWQsXG4gICAgICAgICAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIHByZXNlcnZlXG4gICAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID1cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuXG4gICAgICAgICAgaWYgKGRlc2lnbmF0aW9uQ29udHJvbCkge1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID1cbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnZhbHVlIHx8IFtdO1xuXG4gICAgICAgICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc29tZShcbiAgICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWUgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBubyBtb3JlIGRhdGFcbiAgICAgICAgICBpZiAoIW1hcHBlZCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBkZXNpZ25hdGlvbiBkZXRhaWxzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbiAgLy8gRklYIDI6IEFsc28gaW5qZWN0IHNlbGVjdGVkIGl0ZW1zIGludG8gZGVzaWduYXRpb25CYWNrdXBcbiAgY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuXG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID1cbiAgICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5jb250cm9sc1xuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUpXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgc2VsZWN0ZWQgZW50cmllc1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZERlc2lnbmF0aW9ucy5tYXAoKG5hbWU6IHN0cmluZykgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgfSkpO1xuXG4gICAgLy8gUmVtb3ZlIHNlbGVjdGVkIGl0ZW1zIGZyb20gY3VycmVudCBsaXN0c1xuICAgIGNvbnN0IHJlbWFpbmluZ1Zpc2libGUgPSAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAhc2VsZWN0ZWREZXNpZ25hdGlvbnMuc29tZShcbiAgICAgICAgICBzZWxlY3RlZCA9PiBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgcmVtYWluaW5nQmFja3VwID0gKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgIXNlbGVjdGVkRGVzaWduYXRpb25zLnNvbWUoXG4gICAgICAgICAgc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8vIFB1dCBzZWxlY3RlZCBpdGVtcyBvbiB0b3BcbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBfLnVuaXFCeShcbiAgICAgIFsuLi5zZWxlY3RlZEl0ZW1zLCAuLi5yZW1haW5pbmdWaXNpYmxlXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gXy51bmlxQnkoXG4gICAgICBbLi4uc2VsZWN0ZWRJdGVtcywgLi4ucmVtYWluaW5nQmFja3VwXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG4gIG9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpO1xuXG4gIGNvbnN0IGN1cnJlbnREZXNpZ25hdGlvbiA9XG4gICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy5zZXRWYWx1ZShcbiAgICAgICcnLFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJylcbiAgICAgICAgPy5zZXRWYWx1ZShjdXJyZW50RGVzaWduYXRpb24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgfSwgMTAwKTtcbiAgfVxuXG4gIC8vIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gIC8vICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAvLyAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAvLyAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gIC8vICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgLy8gICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gIC8vICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gIC8vICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgLy8gICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gIC8vICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIC8vICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gIC8vICAgfVxuICAvLyB9XG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG5cbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCkgcmV0dXJuO1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8g4pyFIE9ubHkgcmVzZXQgcGFnaW5hdGlvbiBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDinIUgUmVzdG9yZSBmcm9tIGJhY2t1cCB3aXRob3V0IHJlc2V0dGluZyBvZmZzZXRcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgMCwgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICk7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH1cblxuICAgIC8vIGZvY3VzIHNlYXJjaCBpbnB1dFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICBjb25zdCBzZWFyY2hJbnB1dCA9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWFyY2gtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgIH0sIDIwMCk7XG5cbiAgICAvLyBhdHRhY2ggc2Nyb2xsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5tYXQtc2VsZWN0LXBhbmVsLnNlYXJjaC1wYW5lbCdcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoIXBhbmVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgJ3Njcm9sbCcsXG4gIHRoaXMuZGVzaWduYXRpb25TY3JvbGxIYW5kbGVyXG4pO1xuXG5wYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAnc2Nyb2xsJyxcbiAgdGhpcy5kZXNpZ25hdGlvblNjcm9sbEhhbmRsZXIsXG4gIHsgcGFzc2l2ZTogdHJ1ZSB9XG4pO1xuXG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50Py50YXJnZXQ7XG5cbiAgICBjb25zdCByZWFjaGVkQm90dG9tID1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gNTtcblxuICAgIGlmICghcmVhY2hlZEJvdHRvbSB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gU0VBUkNIIE1PREVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgaWYgKHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUpIHtcblxuICAgICAgLy8gdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCArPSA1MDtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICBcblxuICAgICAgfSwgMzAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBOT1JNQUwgTU9ERVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8vIGxvY2FsIHBhZ2luYXRpb25cbiAgICBpZiAoXG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwPy5sZW5ndGggPlxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbj8ubGVuZ3RoXG4gICAgKSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcblxuICAgICAgfSwgMzAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNlcnZlciBwYWdpbmF0aW9uXG4gICAgY29uc3QgbG9hZGVkTGVnYWN5ID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5sZW5ndGg7XG4gICAgY29uc29sZS5sb2coJ2xvYWRlZExlZ2FjeS0tJyxsb2FkZWRMZWdhY3kpXG4gICAgY29uc29sZS5sb2coJ3RoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zLS0nLHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50Jyx0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50KVxuICAgIGlmIChcbiAgICAgICF0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyAmJlxuICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgbG9hZGVkTGVnYWN5IDwgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgICkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9XG4gICAgICAgICh0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0IHx8IDApICtcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0LS0nLCB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0KVxuXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2woKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBjbGVhckRlc2lnbmF0aW9uU2VhcmNoKGluZGV4Om51bWJlciwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICBjb25zdCBjb250cm9sID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5XG4gICAgLmF0KGluZGV4KVxuICAgIC5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG5cbiAgY29udHJvbD8uc2V0VmFsdWUoJycpO1xuXG4gIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgMCxcbiAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgKTtcblxuICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICB9XG5cbiAgZ2V0IGNhbkdlbmVyYXRlQ0JQKCk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHRoaXMuZGVzaWduYXRpb25BcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzLmV2ZXJ5KFxuICAgICAgY29udHJvbCA9PlxuICAgICAgICAhY29udHJvbC5nZXQoJ2lzRWRpdCcpPy52YWx1ZSAmJlxuICAgICAgICBjb250cm9sLnZhbGlkXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkRGVzaWduYXRpb25zKGN1cnJlbnRJbmRleDogbnVtYmVyKTogYW55W10ge1xuXG4gICAgLy8gR2V0IGFsbCBzZWxlY3RlZCBkZXNpZ25hdGlvbnMgZXhjZXB0IGN1cnJlbnQgcm93XG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnMgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuY29udHJvbHNcbiAgICAgIC5tYXAoKGNvbnRyb2wsIGluZGV4KSA9PlxuICAgICAgICBpbmRleCAhPT0gY3VycmVudEluZGV4XG4gICAgICAgICAgPyBjb250cm9sLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKTtcblxuICAgIHJldHVybiAodGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbiB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGRlc2lnbmF0aW9uOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPVxuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5hdChjdXJyZW50SW5kZXgpXG4gICAgICAgICAgICAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlO1xuXG4gICAgICAgIC8vIEtlZXAgY3VycmVudCBzZWxlY3RlZCB2YWx1ZSB2aXNpYmxlXG4gICAgICAgIGlmIChkZXNpZ25hdGlvbi5uYW1lID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhc2VsZWN0ZWREZXNpZ25hdGlvbnMuaW5jbHVkZXMoZGVzaWduYXRpb24ubmFtZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQb3B1cCgpOiB2b2lkIHtcblxuICB0aGlzLmRlc2lnbmF0aW9uRm9ybS5yZXNldCgpO1xuXG4gIHRoaXMuZGVzaWduYXRpb25BcnJheS5jbGVhcigpO1xuXG4gIHRoaXMuZGVzaWduYXRpb25BcnJheS5wdXNoKFxuICAgIHRoaXMuY3JlYXRlRGVzaWduYXRpb25Gb3JtKClcbiAgKTtcblxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBbXTtcbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gW107XG4gIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkID0gW107XG5cbiAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJztcbiAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcbiAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MDtcblxuICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgdGhpcy51cGxvYWRlZEZpbGUgPSBudWxsO1xuICB0aGlzLnVwbG9hZEVycm9yID0gbnVsbDtcblxuICAgIHRoaXMubWFzdGVyRGF0YSA9IHtcbiAgICBkZXNpZ25hdGlvbjogW10sXG4gICAgZGVzaWduYXRpb25CYWNrdXA6IFtdLFxuICAgIGRlc2lnbmF0aW9uRmlsdGVyZWQ6IFtdXG4gIH07XG4gIHRoaXMuZGVzaWduYXRpb25BcnJheS5jbGVhcigpO1xuXG4gIHRoaXMuYWRkRGVzaWduYXRpb25CbG9jaygpO1xuICB0aGlzLmdldERlc2lnbmF0aW9uU2FmZSgpO1xuXG59XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3LWNicC1wbGFuXCI+XG4gICAgPGRpdiBbZm9ybUdyb3VwXT1cImRlc2lnbmF0aW9uRm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5BZGQgTmV3IERlc2lnbmF0aW9uPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJhZGREZXNpZ25hdGlvbkJsb2NrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRlc2lnbmF0aW9uQXJyYXk/Lmxlbmd0aCA+PSBNQVhfREVTSUdOQVRJT05TXCI+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDMycHg7XCI+Kzwvc3Bhbj4gQWRkIE1vcmVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyIHNlcGVyYXRvclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ2ZXJ0aWNhbC1taWRkbGVcIj5pbmZvPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIDEwIGRlc2lnbmF0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgZm9yIENCUCBnZW5lcmF0aW9uIGF0IG9uZSB0aW1lLlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25zXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBkZXNpZ25hdGlvbkFycmF5Py5sZW5ndGggfX0ve3sgTUFYX0RFU0lHTkFUSU9OUyB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiPiBcbiAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImRlc2lnbmF0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGVzaWduYXRpb25Hcm91cCBvZiBkZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzOyBsZXQgaT1pbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRlc2lnbmF0aW9uLXdyYXBwZXJcIj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEVESVQgTU9ERSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRlc2lnbmF0aW9uR3JvdXAudmFsdWUuaXNFZGl0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm10LTEgZGVzaWduYXRpb24tYmxvY2tcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25hdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNpZ25hdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzaWduYXRpb24ge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEZXNpZ25hdGlvbiBEcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5EZXNpZ25hdGlvbiBOYW1lPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXIgbXQtNFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cIm1hcmdpbi10b3AtcyB3LWZ1bGwgcmVxdWlyZWQtc2VsZWN0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkZXNpZ25hdGlvblwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VkKT1cIm9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZChpKVwiIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktc2VhcmNoLWNvbnRhaW5lclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBkZXNpZ25hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJVwiIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaERlc2lnbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb25Db250cm9sPy52YWx1ZVwiIGNsYXNzPVwiY2xlYXItaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRlc2lnbmF0aW9uU2VhcmNoKGksJGV2ZW50KVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uIG9mIGdldEZpbHRlcmVkRGVzaWduYXRpb25zKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkZXNpZ25hdGlvbj8ubmFtZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkZXNpZ25hdGlvbj8ubmFtZSB9fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9uc1wiIGNsYXNzPVwibG9hZGluZy1pbmRpY2F0b3JcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZCBNb3JlLi4uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKG1hc3RlckRhdGE/LmRlc2lnbmF0aW9uKT8ubGVuZ3RoID09PSAwIHx8IG5vTW9yZUxlZ2FjeURlc2lnbmF0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzaWduYXRpb24gTm90IEZvdW5kLlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbnN0cnVjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Sb2xlICYgUmVzcG9uc2liaWxpdGllcyAvIEFkZGl0aW9uYWwgRGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIGZvcm1Db250cm9sTmFtZT1cImluc3RydWN0aW9uXCIgcm93cz1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWRkIEluc3RydWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAtLT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25hdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURlc2lnbmF0aW9uQmxvY2soaSlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgY2xhc3M9XCJzYXZlLWZsYXQtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZURlc2lnbmF0aW9uQmxvY2soaSlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVklFVyBNT0RFIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRlc2lnbmF0aW9uR3JvdXAudmFsdWUuaXNFZGl0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInNhdmVkLWRlc2lnbmF0aW9uLWNhcmRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1jb250ZW50XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkLWNvbnRlbnQtZGVzY1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtZGVzaWduYXRpb24tbmFtZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4IDtmb250LXdlaWdodDogNjAwO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2krMX19LiB7eyBkZXNpZ25hdGlvbkdyb3VwLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZSB9fSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtaW5zdHJ1Y3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkZXNpZ25hdGlvbkdyb3VwLmdldCgnaW5zdHJ1Y3Rpb24nKT8udmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1hY3Rpb25zXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnRuXCIgbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZWRpdERlc2lnbmF0aW9uQmxvY2soaSlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJ3YXJuXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURlc2lnbmF0aW9uQmxvY2soaSlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRm9ybSgpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cIiFjYW5HZW5lcmF0ZUNCUFwiIFtuZ0NsYXNzXT1cIiFjYW5HZW5lcmF0ZUNCUCA/ICdidG4tZGlzYWJsZSc6J2J0bi1hY3RpdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkdlbmVyYXRlIENCUFwiIChjbGljayk9XCJzYXZlRGVzaWduYXRpb24oKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj4iXX0=
|