@tsi-developpement/tsi-shared-ui 1.4.4 → 1.4.5

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.
@@ -254,7 +254,7 @@ export class TsiGenericGridComponent {
254
254
  this.changeHeaderFiltersMode = "menu";
255
255
  this._searchOnInit = true;
256
256
  this.selectedColumns = [];
257
- this.importantColumns = ['consult', 'edit', 'delete', 'upload', 'download', 'info', 'notes', 'duplicate'];
257
+ this.importantColumns = ['consult', 'edit', 'delete', 'upload', 'download', 'info', 'notes', 'duplicate', 'form'];
258
258
  this.isFirstLoadOfPage = true;
259
259
  this.titleCache = new Map();
260
260
  }
@@ -1704,4 +1704,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1704
1704
  }], statusFilterChanged: [{
1705
1705
  type: Output
1706
1706
  }] } });
1707
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRixPQUFPLEVBQWlCLFNBQVMsRUFBdUIsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZUFBZSxFQUF1RCxNQUFNLGFBQWEsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkwsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbEUsT0FBTyxFQUFpRCxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFReEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJ6RixNQUFNLE9BQU8sdUJBQXVCO0lBYWxDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBUztRQUV4QixJQUFJLFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQ3pDLElBQUksSUFBSSxHQUF3QjtZQUM5QixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztZQUN0QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07U0FDekIsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBUztRQUMzQixJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFBO1FBQzVCLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRTtRQUM5QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RSxDQUFDO0lBb0VELElBQW9CLE9BQU8sQ0FBQyxLQUFvQztRQUM5RCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFHRCxJQUFvQixzQkFBc0IsQ0FBQyxLQUFjO1FBQ3ZELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUE7SUFDdEMsQ0FBQztJQUVELElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFBO0lBQ3JDLENBQUM7SUFxQkQsSUFBYSxZQUFZLENBQUMsS0FBcUM7UUFDN0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU87WUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUV4QixrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQVVELElBQWEsYUFBYSxDQUFDLEtBQThCO1FBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUM7UUFDekQsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQTtRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBR0QsSUFBYSxZQUFZLENBQUMsS0FBYztRQUN0QyxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUE7SUFDM0IsQ0FBQztJQU1ELElBQWEsZ0JBQWdCLENBQUMsS0FBYztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ2hGLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQzVFLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBSUQsSUFBYSxZQUFZLENBQUMsS0FBYztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBR0QsSUFBYSxjQUFjLENBQUMsS0FBYztRQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBU0QsSUFDSSxTQUFTLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sS0FBSyxHQUE4QjtZQUN2QyxPQUFPLEVBQUUsS0FBSztZQUNkLGFBQWEsRUFBRSxjQUFjO1NBQzlCLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQU1ELElBQVcsU0FBUyxLQUFjLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUEyQzNELFlBQ1UsbUJBQXVDLEVBQ3hDLGVBQStCLEVBQzlCLDZCQUEyRCxFQUMzRCxRQUFrQixFQUNsQixlQUF1QyxFQUN2QyxRQUFzQixFQUN0QixtQkFBd0MsRUFDeEMsY0FBNkIsRUFDN0IsY0FBNkIsRUFDN0Isa0JBQXNDLEVBQ3RDLDRCQUF5RCxFQUN6RCxTQUE4QixFQUMvQixNQUE0QixFQUMzQixJQUF1QjtRQWJ2Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3hDLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUM5QixrQ0FBNkIsR0FBN0IsNkJBQTZCLENBQThCO1FBQzNELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLGFBQVEsR0FBUixRQUFRLENBQWM7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBNkI7UUFDekQsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUExU3ZCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTNDLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLFNBQUksR0FBWSxLQUFLLENBQUM7UUFvQ3RCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULGlCQUFZLEdBQUcsWUFBWSxDQUFDO1FBRTVCLGNBQVMsR0FBK0IsRUFBRSxDQUFDO1FBQzNDLGNBQVMsR0FBWSxLQUFLLENBQUE7UUFDMUIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixvQkFBZSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDekIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFJbkIsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUNoRCx1QkFBa0IsR0FBNEIsRUFBRSxDQUFDO1FBQ2pELFVBQUssR0FBMkIsRUFBRSxDQUFDO1FBQzNDLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFDM0Isc0JBQWlCLEdBQWdCLEVBQUUsQ0FBQztRQUVwQyw4QkFBeUIsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7UUFxQnRDLFNBQUksR0FBZTtZQUNsQyxLQUFLLEVBQUUsRUFBRTtZQUNULFVBQVUsRUFBRSxDQUFDO1lBQ2IsU0FBUyxFQUFFLEVBQUU7WUFDYixVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7UUFDRix5QkFBeUI7UUFDekIsaUJBQWlCO1FBQ2pCLDRCQUE0QjtRQUM1QixnQ0FBZ0M7UUFDaEMsTUFBTTtRQUNOLElBQUk7UUFDSixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLElBQUk7UUFDSyxRQUFHLEdBQVcsS0FBSyxDQUFDO1FBQzdCOztXQUVHO1FBQ0ssaUJBQVksR0FBc0IsRUFBRSxDQUFDO1FBQzdDLHFCQUFnQixHQUF1QixFQUFFLENBQUM7UUFDbEMsYUFBUSxHQUFzQixFQUFFLENBQUM7UUFXakMsNEJBQXVCLEdBQVksS0FBSyxDQUFBO1FBU3ZDLG9CQUFlLEdBQXNCLEVBQUUsQ0FBQztRQVF4QyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU5QixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFakMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUNqQyx5QkFBb0IsR0FBWSxJQUFJLENBQUM7UUFDckMsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUNwQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBZ0J4QyxhQUFRLEdBQXVCLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFLckQsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDL0IsbUJBQWMsR0FBNEIsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBZWhFLGtCQUFhLEdBQWUsRUFBRSxDQUFDO1FBYS9CLHFCQUFnQixHQUFZLElBQUksQ0FBQTtRQUNoQyxxQkFBZ0IsR0FBWSxJQUFJLENBQUE7UUFDaEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDL0Isc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBY25DLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBSy9CLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBT2xDLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUV2QyxtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUM3QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBcUJwQyxZQUFZO1FBRVosaUJBQWlCO1FBQ1AsWUFBTyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNELGNBQVMsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM3RCxTQUFJLEdBQXFFLElBQUksWUFBWSxFQUFzRCxDQUFDO1FBQ2hKLHdCQUFtQixHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUM3Riw4QkFBeUIsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM3RSx3QkFBbUIsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUMvRSw2QkFBd0IsR0FBcUMsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDcEcsdUJBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDaEUsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFFdkU7O1dBRUc7UUFFSCxZQUFZO1FBQ1osOENBQThDO1FBQzlDLHlCQUF5QjtRQUN6QixnQ0FBZ0M7UUFDaEMsTUFBTTtRQUNOLElBQUk7UUFHTSxlQUFVLEdBQUcsY0FBYyxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBRXhDLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLHNCQUFpQixHQUFHLFdBQVcsQ0FBQztRQUNoQyw0QkFBdUIsR0FBVyxNQUFNLENBQUM7UUFHekMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFOUIsb0JBQWUsR0FBaUIsRUFBRSxDQUFDO1FBQ25DLHFCQUFnQixHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JHLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUUxQixlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7SUFtQjlDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxpQ0FBaUMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsYUFBYSxDQUFDLENBQUE7UUFDM0YsSUFBSSxpQ0FBaUMsSUFBSSxTQUFTLElBQUksaUNBQWlDLElBQUksSUFBSTtlQUMxRixpQ0FBaUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUNBQWlDLENBQUE7WUFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTtZQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQTtZQUN2QyxDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztnQkFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUM7SUFFSCxDQUFDO0lBRUQsUUFBUTtRQUVOLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlELElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBUSxDQUFDLENBQUMsQ0FBQTtRQUU5RixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDbEQsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDN0MsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBRWhDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFM0QscURBQXFEO1lBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBS0QsZUFBZSxDQUFDLEtBQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxXQUFtQjtRQUNqRCxPQUFPLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsS0FBSyxXQUFXLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsc0NBQXNDO1FBRXBDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztpQkFDeEYsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLFFBQWdDLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLFFBQVEsQ0FBQztnQkFDakQsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEQsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBRWQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWMsQ0FBQztRQUN0QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWUsQ0FBQztRQUV4RCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQztpQkFDdEUsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLFFBQWdDLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Z0JBQ2pDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7YUFDRixDQUFDLENBQUM7UUFDUCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsR0FBdUIsRUFBRSxVQUFrQixFQUFFO1FBQ3hELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTdELE1BQU0sTUFBTSxHQUNWLEdBQUc7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDekMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQXVCO1FBQzFDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFFekIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFeEQsT0FBTyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxVQUFzQjtRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQjtZQUFFLE9BQU87UUFFMUMsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3BDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxnQkFBZ0IsQ0FDaEQsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixVQUFVLENBQUMsZ0JBQWdCLGNBQWMsQ0FBQyxDQUFDO1lBQzFFLE9BQU87UUFDVCxDQUFDO1FBRUQsWUFBWSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDO1FBRWpGLE1BQU0sY0FBYyxHQUNsQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEUsWUFBWSxDQUFDLEtBQUssR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEUsWUFBWTtZQUNaLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDaEUsQ0FBQztRQUVGLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBR0QsUUFBUTtRQUNOLElBQUksS0FBSyxHQUFlLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2IsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFTSxZQUFZLENBQUMsYUFBcUI7UUFDdkMsSUFBSSxLQUFLLEdBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNqRCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUVaLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUMvQyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBRTNDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFFcEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNwQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdEQsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO1lBQ0QsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixHQUFHLElBQUksQ0FBQyxlQUFlO2lCQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztpQkFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQU0sR0FBRyxDQUFDLENBQUMsS0FBTSxDQUFDO1lBQ3RDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztTQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLFdBQXFCO1FBQ3ZDLElBQUksZ0JBQWdCLEdBQVUsRUFBRSxDQUFDO1FBRWpDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRO1FBQ3RCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRztvQkFBRSxPQUFPLEdBQUcsQ0FBQzs7b0JBQ25ELFNBQVM7WUFDaEIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxhQUFxQjtRQUN4QyxJQUFJLEtBQUssR0FBZSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2pELElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBRVosSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQy9DLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFFM0MsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUVwQyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDcEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsVUFBa0I7UUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQWUsRUFBRSxFQUFFO1lBQ3hDLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ25DLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUE7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLGVBQWUsRUFBRSxPQUFPO2dCQUN4QixPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLGVBQWUsRUFBRSxPQUFPO2dCQUN4QixPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFrQjtRQUU1QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUN6RCxlQUFlLEdBQUcsRUFBRSxHQUFHLGVBQWUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BFLENBQUM7aUJBQ0ksQ0FBQztnQkFDSixlQUFlLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4RSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLE9BQU87b0JBQ0wsS0FBSyxFQUFFLEdBQUcsZUFBZSxJQUFJO29CQUM3QixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsZUFBZSxFQUFFLE9BQU87b0JBQ3hCLE9BQU8sRUFBRSxtQkFBbUI7b0JBQzVCLFdBQVcsRUFBRSxtQkFBbUI7aUJBQ2pDLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTztvQkFDTCxJQUFJLEVBQUUsR0FBRyxlQUFlLElBQUk7b0JBQzVCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixlQUFlLEVBQUUsT0FBTztvQkFDeEIsT0FBTyxFQUFFLG1CQUFtQjtvQkFDNUIsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7WUFDckIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUE7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztZQUNsRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxpQkFBcUM7UUFDNUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFTO1FBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBUztRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQXlCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO1lBQzlCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sV0FBVyxHQUFhLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ3RELE1BQU0sWUFBWSxHQUFhLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVuRSxNQUFNLHNCQUFzQixHQUFpQixFQUFFLENBQUM7Z0JBQ2hELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ25DLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFeEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7b0JBQzdGLElBQUksbUJBQW1CLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFFL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7d0JBQzlELHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQkFDekUsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFDO2dCQUU5QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNqRyxJQUFJLFdBQVcsQ0FBQyxhQUFhLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3RFLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBaUMsRUFBRSxFQUFFOzRCQUN0RSxJQUFJLFFBQVEsR0FBYTtnQ0FDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dDQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7NkJBQ2xCLENBQUE7NEJBQ0QsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOzRCQUM3QixLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7NEJBQzdCLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN0QyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN4QixJQUFJLE9BQU8sR0FBb0MsRUFBRSxDQUFDO3dCQUNsRCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFOzRCQUMxRSxNQUFNLG1CQUFtQixHQUFHLGNBQWtDLENBQUM7NEJBRS9ELElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0NBRW5DLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUMsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxrQ0FBa0M7d0JBQ2xDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO3dCQUN4Qiw0SUFBNEk7d0JBQzVJLGdFQUFnRTt3QkFDaEUsa0RBQWtEO3dCQUNsRCw2REFBNkQ7d0JBQzdELE1BQU07d0JBRU4sd0NBQXdDO3dCQUN4QyxvQkFBb0I7d0JBQ3BCLFVBQVU7d0JBQ1YseUJBQXlCO3dCQUN6QixrSUFBa0k7d0JBRWxJLHNEQUFzRDt3QkFFdEQsaUNBQWlDO3dCQUNqQyxRQUFRO3dCQUVSLHdCQUF3Qjt3QkFDeEIseUNBQXlDO3dCQUN6Qyw0QkFBNEI7d0JBQzVCLHFDQUFxQzt3QkFDckMsOEJBQThCO3dCQUM5QixpREFBaUQ7d0JBQ2pELDhEQUE4RDt3QkFDOUQsV0FBVzt3QkFDWCxnREFBZ0Q7d0JBQ2hELGlDQUFpQzt3QkFFakMsNkNBQTZDO3dCQUM3QyxVQUFVO3dCQUNWLFFBQVE7d0JBQ1IsUUFBUTt3QkFDUixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztZQUlILENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFlLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUdELGFBQWEsQ0FBQyxJQUFTLEVBQUUsS0FBYTtRQUVwQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDMUcsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQTJCO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxtQ0FBbUM7UUFDakMsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWTtZQUN6QyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRWpHLElBQUksbUJBQW1CLElBQUksU0FBUyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4RSxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxJQUFJLFFBQVEsR0FBYSxFQUFFLENBQUE7UUFDM0IsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEksQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0NBQWdDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0UsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWTtZQUN6QyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUV2RyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUEwQjtRQUM3QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQVcsSUFBSTtRQUVwQiw4Q0FBOEM7UUFDOUMsMEJBQTBCO1FBRTFCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsbUNBQW1DLEVBQUUsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUV6Qyx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFaEMsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3BDLE9BQU87WUFFUCxJQUFJLFVBQVUsR0FBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUzRSxnQkFBZ0I7WUFDaEIsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFN0UseUJBQXlCO1lBQ3pCLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFckQsb0NBQW9DO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUM5RCxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2RSxVQUFVLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFekIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztZQUVELHNCQUFzQjtZQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFFeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBRS9FLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO2FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLFNBQVMsR0FBVSxFQUFFLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxJQUFJLEdBQWUsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0QsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztxQkFDSSxDQUFDO29CQUNKLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxDQUFDO2lCQUNJLENBQUM7Z0JBQ0osU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUMxQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDeEMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEMsQ0FBQztJQUVILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFnQztRQUNoRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3JDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxJQUFJLENBQzNDLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQztZQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLHlCQUF5QjtJQUN6QiwrREFBK0Q7SUFFL0QseUJBQXlCO0lBQ3pCLHFEQUFxRDtJQUNyRCx3Q0FBd0M7SUFDeEMseUNBQXlDO0lBQ3pDLHVDQUF1QztJQUN2Qyx5Q0FBeUM7SUFDekMsd0RBQXdEO0lBQ3hELCtDQUErQztJQUMvQyxjQUFjO0lBQ2QsWUFBWTtJQUNaLGdEQUFnRDtJQUNoRCx3REFBd0Q7SUFDeEQsK0NBQStDO0lBQy9DLGNBQWM7SUFDZCxZQUFZO0lBQ1osK0NBQStDO0lBQy9DLHdEQUF3RDtJQUN4RCwrQ0FBK0M7SUFDL0MsY0FBYztJQUNkLFlBQVk7SUFDWiw4Q0FBOEM7SUFDOUMsd0RBQXdEO0lBQ3hELCtDQUErQztJQUMvQyxjQUFjO0lBQ2QsWUFBWTtJQUNaLDRDQUE0QztJQUM1Qyx3REFBd0Q7SUFDeEQsK0NBQStDO0lBQy9DLGNBQWM7SUFDZCxZQUFZO0lBQ1osWUFBWTtJQUNaLDhDQUE4QztJQUM5QyxnRUFBZ0U7SUFDaEUsc0NBQXNDO0lBQ3RDLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIsWUFBWTtJQUNaLHlEQUF5RDtJQUN6RCxrREFBa0Q7SUFDbEQseURBQXlEO0lBQ3pELCtCQUErQjtJQUMvQix5REFBeUQ7SUFDekQsbUJBQW1CO0lBQ25CLHVDQUF1QztJQUN2QyxZQUFZO0lBQ1osWUFBWTtJQUlaLCtDQUErQztJQUMvQywyREFBMkQ7SUFFM0QsNEVBQTRFO0lBQzVFLGVBQWU7SUFDZix5REFBeUQ7SUFDekQsdURBQXVEO0lBQ3ZELFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUVKLHNDQUFzQztJQUN0QywyREFBMkQ7SUFDM0QsZ0ZBQWdGO0lBQ2hGLGlGQUFpRjtJQUNqRix3Q0FBd0M7SUFDeEMsSUFBSTtJQUlKLGNBQWMsQ0FBQyxVQUFzQjtRQUNuQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUE7WUFDckMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7UUFDL0IsQ0FBQztRQUVELHVCQUF1QjtRQUN2Qiw2REFBNkQ7UUFDN0QsdUJBQXVCO1FBQ3ZCLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QsMEVBQTBFO1FBRTFFLHNFQUFzRTtRQUN0RSx1REFBdUQ7UUFDdkQsOENBQThDO1FBQzlDLGlEQUFpRDtRQUNqRCw0REFBNEQ7UUFDNUQsc0dBQXNHO1FBQ3RHLDBDQUEwQztRQUMxQyx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLGtGQUFrRjtRQUNsRixVQUFVO1FBQ1YsVUFBVTtRQUVWLHVEQUF1RDtRQUN2RCxxREFBcUQ7UUFHckQseUJBQXlCO1FBRXpCLGdEQUFnRDtRQUNoRCwySEFBMkg7UUFDM0gsdUVBQXVFO1FBQ3ZFLG1GQUFtRjtRQUVuRiw2QkFBNkI7UUFDN0Isd0NBQXdDO1FBQ3hDLDBEQUEwRDtRQUMxRCxrQkFBa0I7UUFDbEIscUNBQXFDO1FBQ3JDLG9CQUFvQjtRQUNwQixjQUFjO1FBQ2QsZ0NBQWdDO1FBQ2hDLHFDQUFxQztRQUNyQyw4SUFBOEk7UUFFOUksa0VBQWtFO1FBRWxFLDZDQUE2QztRQUM3QyxvQkFBb0I7UUFFcEIsb0NBQW9DO1FBQ3BDLHFEQUFxRDtRQUNyRCx3Q0FBd0M7UUFDeEMsaURBQWlEO1FBQ2pELDBDQUEwQztRQUMxQyw2REFBNkQ7UUFDN0QsMEVBQTBFO1FBQzFFLHVCQUF1QjtRQUN2Qiw0REFBNEQ7UUFDNUQsNkNBQTZDO1FBRTdDLHlEQUF5RDtRQUN6RCxzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLDJCQUEyQjtRQUMzQixZQUFZO1FBRVosVUFBVTtRQUVWLGFBQWE7UUFDYiw0REFBNEQ7UUFDNUQsTUFBTTtRQUNOLElBQUk7SUFDTixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLGFBQWEsQ0FBQyxDQUFBO0lBQ3hELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFnQjtRQUNoQyxPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQXFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUNsQyxDQUFDO2lCQUFNLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUNELGdCQUFnQjtRQUNkLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCx5QkFBeUI7SUFDakIsZUFBZSxDQUFDLEtBQTZCO1FBQ25ELElBQUksT0FBTyxHQUF1QixFQUFFLENBQUM7UUFDckMsSUFBSSxLQUFLLElBQUksSUFBSTs7Z0JBRWYsS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksUUFBUSxHQUF1QixHQUFHLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3pELElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLENBQUM7b0JBQzNELFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQzFFLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLElBQUksSUFBSTs7d0JBRWYsS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNyQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM5QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzs0QkFDMUIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztnQ0FDMUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0NBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQzt3Q0FDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO29DQUNqRSxDQUFDO29DQUNELE9BQU8sQ0FBQyxJQUFJLENBQUM7d0NBQ1gsUUFBUSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3Q0FDbkQsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLO3dDQUN2QixZQUFZLEVBQUUsR0FBRyxDQUFDLEtBQUs7d0NBQ3ZCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTt3Q0FDbEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQzt3Q0FDeEMsUUFBUSxFQUFFLFFBQVE7d0NBQ2xCLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTt3Q0FDOUIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO3dDQUMxQixhQUFhLEVBQUUsR0FBRyxDQUFDLFVBQVU7cUNBQ2hDLENBQUMsQ0FBQztnQ0FDTCxDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO2dDQUNuQixJQUFJLE1BQU0sQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7b0NBQ2pDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztnQ0FDckUsQ0FBQztnQ0FDRCxPQUFPLENBQUMsSUFBSSxDQUFDO29DQUNYLFFBQVEsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0NBQ3JELFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSztvQ0FDekIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxLQUFLO29DQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07b0NBQ2xCLElBQUksRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0NBQ3hDLFFBQVEsRUFBRSxRQUFRO29DQUNsQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7b0NBQzlCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtvQ0FDMUIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxVQUFVO2lDQUNoQyxDQUFDLENBQUM7NEJBQ0wsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxhQUFpQztRQUM3RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDM0MsQ0FBQztpQkFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDOUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsT0FBaUI7UUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbEIsMEJBQTBCO2dCQUMxQixJQUFJLElBQUksR0FBb0I7b0JBQzFCLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSztvQkFDdkIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07aUJBQzNDLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3JCLENBQUM7UUFDSCxDQUFDO2FBQ0ksQ0FBQztZQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQztJQUVPLDZCQUE2QixDQUFDLFNBQXFCO1FBQ3pELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUMsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMxQywwQkFBMEI7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDM0IsaUNBQWlDO2dCQUNqQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNyQixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDYiwwQkFBMEI7d0JBQzFCLElBQUksSUFBSSxHQUFvQjs0QkFDMUIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLOzRCQUNsQixLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTt5QkFDdEMsQ0FBQTt3QkFFRCw4QkFBOEI7d0JBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7YUFDSSxDQUFDO1lBQ0osTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsR0FBUTtRQUNsQyxJQUFJLEdBQUcsSUFBSSxJQUFJO2VBQ1YsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLCtCQUErQjtRQUNyQyxJQUNFLElBQUksQ0FBQyxvQkFBb0I7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9ELElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsQ0FBQztZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLDBCQUEwQjtxQkFDakUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXZDLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGNBQWMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUM7WUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXRCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1lBRXZDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBZSxFQUFFLEVBQUU7Z0JBQzVDLGtEQUFrRDtnQkFDbEQsSUFBSSxFQUFFLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxFQUFFLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUNoRyxJQUFJLGdCQUFnQixHQUFxQjt3QkFDdkMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRO3dCQUNuQixXQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUs7d0JBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsS0FBSzt3QkFDdEIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVO3dCQUNyQixJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUk7d0JBQ2IsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhO3dCQUMvQixRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVE7d0JBQ3JCLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVTt3QkFDekIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZO3FCQUNoQyxDQUFDO29CQUNGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztxQkFDSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxLQUFLLHFCQUFxQixDQUFDLENBQUE7Z0JBQ2xGLENBQUM7Z0JBQ0QsR0FBRztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUFzQjtRQUMvQyxJQUFJLEtBQUssR0FBa0I7WUFDekIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO1lBQ3RDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQzdCLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsSUFBSSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUMxRSxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxVQUFVLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQVcsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLElBQUksR0FBb0I7b0JBQzFCLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSztvQkFDakIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07aUJBQ3JDLENBQUE7Z0JBRUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFakUsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQzlCLENBQUM7Z0JBQ0gsQ0FBQztxQkFDSSxDQUFDO29CQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxrQkFBc0M7UUFDeEQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxRQUFRLEdBQWM7b0JBQ3hCLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxTQUFTO29CQUNuQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsU0FBUztpQkFDcEMsQ0FBQTtnQkFDRCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQzthQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakQsSUFBSSxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7YUFDSSxDQUFDO1lBQ0osTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRU8sNEJBQTRCO1FBRWxDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7UUFDN0IsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFakYsNkJBQTZCO1FBQzdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyw2QkFBNkI7aUJBQzFELDJCQUEyQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRXBFLDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsNkJBQTZCO2lCQUMzRCwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFaEUsQ0FBQztJQUVPLHlCQUF5QixDQUFDLE9BQTJCO1FBQzNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN4QixDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FDMUcsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxZQUEyQjtRQUN4RCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsWUFBWSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUE7UUFDOUcsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQWMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDM0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDMUQsSUFBSSxFQUFFLENBQUMsS0FBMEIsRUFBRSxFQUFFO29CQUNuQyxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUVWLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDN0UsS0FBSyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7d0JBQzdCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDM0MsQ0FBQztvQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBd0IsRUFBRSxFQUFFO29CQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFBO1lBQzlCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxLQUFVO1FBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxZQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQWEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDL0QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxZQUFZO29CQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ3pELEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVztpQkFDMUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQVEsYUFBYSxDQUFDLENBQUE7Z0JBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBRUQsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBa0IsQ0FBQyxDQUFBO1lBQ2xILHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUN6RSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNsRCxNQUFNLE9BQU8sR0FBOEIsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFFLHFCQUFxQixDQUFDLENBQUE7WUFDakcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUQsTUFBTSxXQUFXLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsUUFBZ0I7UUFDM0MsSUFBSSxVQUFVLEdBQUcsaUZBQWlGLENBQUM7UUFDbkcsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxFQUFFLFVBQVU7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxHQUFHLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUE0QjtRQUNoRCxRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUM7WUFDOUMsS0FBSyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLGVBQWUsQ0FBQztZQUM1RCxLQUFLLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUM7WUFDbEUsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQztZQUM1QyxLQUFLLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDO1lBQ2xELEtBQUssa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUM7WUFDckQsS0FBSyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQztZQUNwRCxPQUFPLENBQUMsQ0FBQyxPQUFPLGtCQUFrQixDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsYUFBb0IsRUFBRSxxQkFBK0I7UUFDNUUsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3hDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxhQUFhLENBQUMsQ0FBQTtRQUN4RCxDQUFDO2FBQ0ksQ0FBQyxDQUFDLGtDQUFrQztZQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsb0JBQW9CLENBQUM7WUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ2YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUMzRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7Z0JBRXBDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN2QyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNuQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztnQkFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztnQkFFckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUNyRSxDQUFDO2dCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDbkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsVUFBd0I7UUFDMUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO1FBQ2xGLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksc0JBQXNCLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksWUFBWSxDQUFDO1lBQzNFLE9BQU8sc0JBQXNCLENBQUM7UUFDaEMsQ0FBQzs7WUFBTSxPQUFPLFlBQVksQ0FBQTtJQUM1QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7SUFDNUUsQ0FBQztJQUNELFlBQVk7SUFFSixxQkFBcUI7UUFDM0IsTUFBTSx5QkFBeUIsR0FBVyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxlQUFlLElBQUksb0JBQW9CLENBQUMsZUFBZSxDQUFDO1FBRXBKLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUU7WUFDeEMsZ0JBQWdCO1lBQ2hCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxTQUFTLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRTFHLHNCQUFzQjtZQUN0QixRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDL0IsR0FBRyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxLQUFLLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO29CQUM3QixNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyxZQUFZLENBQUMsZUFBZSxDQUFDO2dCQUNsQyxLQUFLLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQy9CLEtBQUssWUFBWSxDQUFDLHdCQUF3QixDQUFDO2dCQUMzQyxLQUFLLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQztnQkFDekMsS0FBSyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDbEMsR0FBRyxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7b0JBQ2hDLE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxLQUFLLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO29CQUNoQyxNQUFNO2dCQUNSLENBQUM7Z0JBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixHQUFHLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztvQkFDN0IsTUFBTTtnQkFDUixDQUFDO1lBRUgsQ0FBQztZQUVELG1CQUFtQjtZQUNuQixJQUFJLEdBQUcsQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ3ZELEdBQUcsQ0FBQyxZQUFZLEdBQUcseUJBQXlCLENBQUM7Z0JBRTdDLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDOUMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBRXJCLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBUztRQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQVU7UUFDOUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDaEYsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDNUUsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN0QixLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBZ0IsRUFBRSxJQUFTO1FBQ3pDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1FBRVosTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQVE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQixJQUFJLEVBQUU7WUFDOUMsS0FBSyxFQUFFLEdBQUc7WUFDVixVQUFVLEVBQUUsRUFBRTtZQUNkLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtZQUN6QixRQUFRLEVBQUUsa0JBQWtCLENBQUMsS0FBSztZQUNsQyxVQUFVLEVBQUUsUUFBUTtTQUNyQixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7SUFDcEUsQ0FBQztJQUVELDJCQUEyQixDQUFDLEdBQVE7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7WUFDdEIsS0FBSyxFQUFFLGNBQWM7WUFDckIsS0FBSyxFQUFFLEdBQUc7WUFDVixVQUFVLEVBQUUsRUFBRTtZQUNkLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtZQUN6QixRQUFRLEVBQUUsa0JBQWtCLENBQUMsS0FBSztZQUNsQyxVQUFVLEVBQUUsUUFBUTtTQUNyQixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7SUFDcEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFnQjtRQUN6QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR0QsTUFBTSxDQUFDLEtBQWdCLEVBQUUsSUFBUztRQUNoQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUV0RSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUV4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVLENBQUMsSUFBVSxFQUFFLGFBQWtCLEVBQUUsSUFBUztRQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUE0QixFQUFFLEVBQUU7WUFDL0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFxQixDQUFDO1lBQ3BELElBQUksQ0FBQyxXQUFXO2dCQUFFLE9BQU87WUFFekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTVELE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDcEMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5QixhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN6QixhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1QyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUMvQixhQUFhLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztZQUN0QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDN0MsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFBO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDbkQsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxRQUEyQixFQUFFLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDL0QsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsTUFBbUI7UUFDckMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRTtnQkFDckIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRTthQUN0QixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFnQjtRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ3JCLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUU7WUFDckIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRTtTQUN0QixDQUFDO0lBQ0osQ0FBQzsrR0FweURVLHVCQUF1QjttR0FBdkIsdUJBQXVCLCtoRUNuRHBDLG9vbENBZ3JCTSxpeFZEN29CUTtZQUNWLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQ3BCLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO29CQUNoQixNQUFNLEVBQUUsR0FBRztvQkFDWCxPQUFPLEVBQUUsQ0FBQztvQkFDVixTQUFTLEVBQUUsZUFBZTtpQkFDM0IsQ0FBQyxDQUFDO2dCQUNILEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO29CQUNqQixNQUFNLEVBQUUsS0FBSztvQkFDYixPQUFPLEVBQUUsQ0FBQztvQkFDVixTQUFTLEVBQUUsbUJBQW1CO2lCQUMvQixDQUFDLENBQUM7Z0JBQ0gsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQzthQUM1RSxDQUFDO1NBQ0g7OzRGQUVVLHVCQUF1QjtrQkFwQm5DLFNBQVM7K0JBQ0Usa0JBQWtCLGNBR2hCO3dCQUNWLE9BQU8sQ0FBQyxZQUFZLEVBQUU7NEJBQ3BCLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dDQUNoQixNQUFNLEVBQUUsR0FBRztnQ0FDWCxPQUFPLEVBQUUsQ0FBQztnQ0FDVixTQUFTLEVBQUUsZUFBZTs2QkFDM0IsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO2dDQUNqQixNQUFNLEVBQUUsS0FBSztnQ0FDYixPQUFPLEVBQUUsQ0FBQztnQ0FDVixTQUFTLEVBQUUsbUJBQW1COzZCQUMvQixDQUFDLENBQUM7NEJBQ0gsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQzt5QkFDNUUsQ0FBQztxQkFDSDtrZ0JBSVEsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQXNDb0MsRUFBRTtzQkFBNUMsU0FBUzt1QkFBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNBLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBb0N2QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ1csSUFBSTtzQkFBcEIsS0FBSztnQkFrQkcsR0FBRztzQkFBWCxLQUFLO2dCQU9jLE9BQU87c0JBQTFCLEtBQUs7Z0JBV2Msc0JBQXNCO3NCQUF6QyxLQUFLO2dCQVFHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBY0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR08sYUFBYTtzQkFBekIsS0FBSztnQkFhRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBWUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFXRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBS08sY0FBYztzQkFBMUIsS0FBSztnQkFJRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUlGLFNBQVM7c0JBRFosS0FBSztnQkFhRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQU9JLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWV0YWRhdGEsIFByaW1lTkdDb25maWcsIFNvcnRNZXRhLCBUYWJsZVN0YXRlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUYWJsZSwgVGFibGVIZWFkZXJDaGVja2JveCwgVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZVNlbGVjdEFsbENoYW5nZUV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFbnRpdHlJbmZvIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvJztcclxuaW1wb3J0IHsgRGlzcGxheVR5cGVDb2xvcnMsIERpc3BsYXlUeXBlcywgRmlsdGVyT3BlcmF0b3JUeXBlLCBHcmlkU2VsZWN0aW9uTW9kZSwgR3JpZFNvcnRNb2RlLCBJbnB1dFR5cGVzLCBNb2RhbFNpemVFbnVtLCBOdW1lcmljRGlzcGxheVR5cGVzLCBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IERlZmF1bHRTb2NpZXRlRGV2aXNlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL3RzaS1jb25zdHMnO1xyXG5pbXBvcnQgeyBJRmlsdGVyZWRSZXF1ZXN0LCBJU29ydEJ5UHJvcHJldHksIElQYWdlZFJlcXVlc3QsIElHcmlkQ29uZmlndXJhdGlvbiwgSVBhZ2UsIEdyaWRDb2x1bW4sIEJ1dHRvbkNsaWNrUmVzdWx0LCBJU29ydE1ldGEsIElQYWdlZFJlc3BvbnNlLCBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNlYXJjaEZpZWxkLCBQcmVzZW50YXRpb25TZXR0aW5nLCBFdmVudFNjaGVtYSwgRmljaGllciB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9hcHAubGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBydGxNb2RlS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9sb2NhbHMuY29uc3QnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYXNlL2NydWQtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dlbmVyYXRvci9odG1sLXRlbXBsYXRlLWdlbmVyYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYXlvdXRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGF5b3V0L2xheW91dC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzL2FwcC1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL2Vycm9yLXJlc3BvbnNlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlckhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL2ZpbHRlci1oZWxwZXInO1xyXG5pbXBvcnQgeyBwcmltZW5nTG9jYWxlQXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9wcmltZW5nLXRyYW5zbGF0ZS1jb25maWcnO1xyXG5pbXBvcnQgeyBFeHBvcnRFeGNlbEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL2V4cG9ydC1leGNlbC5oZWxwZXInO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgb3BlblRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9tb2RhbC1vcGVuLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgU3RhdHVzQ29sb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RhdHVzL3N0YXR1cy1jb2xvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXR1c01ldGFkYXRhUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3RhdHVzL2NvbG9yLXN0YXR1cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RzaS1HZW5lcmljLUdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignc2xpZGVJbk91dCcsIFtcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoe1xyXG4gICAgICAgIGhlaWdodDogJyonLFxyXG4gICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKSdcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZSgnb3V0Jywgc3R5bGUoe1xyXG4gICAgICAgIGhlaWdodDogJzBweCcsXHJcbiAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMHB4KSdcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdpbiA8PT4gb3V0JywgYW5pbWF0ZSgnNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknKSlcclxuICAgIF0pXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSBjdWRDb21wb25lbnQ6IGFueTtcclxuICBASW5wdXQoKSBtb2RhbFNpemU6IGFueTtcclxuICBASW5wdXQoKSBlbnRpdHlJbmZvOiBFbnRpdHlJbmZvIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGZpbHRlck1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgaXNBcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBhc3luYyBleWVDbGlja2VkKHRleHQ6IGFueSkge1xyXG5cclxuICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkV4dHJhTGFyZ2U7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YTogdGV4dCxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsPzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRydW5jYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIgPSA1MCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiBsaW1pdCA/IHZhbHVlLnN1YnN0cigwLCBsaW1pdCkgKyAnLi4uJyA6IHZhbHVlO1xyXG4gIH1cclxuICAvLyNyZWdpb24gbG9jYWwgdmFyc1xyXG4gIEBWaWV3Q2hpbGQoXCJkdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGR0OiBUYWJsZSB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKFwidGFibGVIZWFkZXJDaGVja2JveFwiKSB0YWJsZUhlYWRlckNoZWNrYm94OiBUYWJsZUhlYWRlckNoZWNrYm94IHwgdW5kZWZpbmVkXHJcbiAgZmlyc3Q6IG51bWJlciA9IDA7XHJcbiAgcm93cyA9IDE7XHJcbiAgZGlzcGxheVR5cGVzID0gRGlzcGxheVR5cGVzO1xyXG4gIGtleXdvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBzdW1tYXJpZXM6IERpY3Rpb25hcnk8c3RyaW5nLCBudW1iZXI+ID0ge307XHJcbiAgaXNSdGxNb2RlOiBib29sZWFuID0gZmFsc2VcclxuICBpc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgbWVzc2FnZVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgcHJpdmF0ZSBkcmFnRW50ZXJDb3VudCA9IDA7XHJcbiAgLy8gcHJpdmF0ZSBfc2VhcmNoQm94RmlsdGVyczogQXJyYXk8RmlsdGVyQnlQcm9wcmV0eT4gPSBbXTtcclxuICAvLyBwcml2YXRlIF9ncmlkSGVhZGVyRmlsdGVyczogQXJyYXk8RmlsdGVyQnlQcm9wcmV0eT4gPSBbXTtcclxuICBwcml2YXRlIF9zZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9zZWFyY2hCb3hGaWx0ZXJzOiBBcnJheTxJRmlsdGVyZWRSZXF1ZXN0PiA9IFtdO1xyXG4gIHByaXZhdGUgX2dyaWRIZWFkZXJGaWx0ZXJzOiBBcnJheTxJRmlsdGVyZWRSZXF1ZXN0PiA9IFtdO1xyXG4gIHByaXZhdGUgX3NvcnQ6IEFycmF5PElTb3J0QnlQcm9wcmV0eT4gPSBbXTtcclxuICBzb3J0TWV0YXM6IFNvcnRNZXRhW10gPSBbXTtcclxuICBzZWxlY3RlZEZ1bGxJdGVtcz86IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3Rpb246IGFueTtcclxuICBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICAvL2pzb25TdHJpbmdMYXlvdXQ6IHN0cmluZyA9ICd7XCJmaXJzdFwiOjAsXCJyb3dzXCI6MTAsXCJtdWx0aVNvcnRNZXRhXCI6W10sXCJjb2x1bW5XaWR0aHNcIjpcIlwiLFwidGFibGVXaWR0aFwiOlwiMTE4OHB4XCIsXCJjb2x1bW5PcmRlclwiOltcIlwiXX0nO1xyXG4gIGxhdGVzdEZpbHRlcnM/OiBJRmlsdGVyZWRSZXF1ZXN0W107XHJcblxyXG4gIC8vIHByaXZhdGUgX3BhZ2UgOiBJUGFnZTxhbnk+ID0ge1xyXG4gIC8vICAgaXRlbXM6IFtdLFxyXG4gIC8vICAgdG90YWxDb3VudDogMCxcclxuICAvLyAgIHN1bW1hcmllczogW10sXHJcbiAgLy8gICB0b3RhbFBhZ2VzOiAwLFxyXG4gIC8vICAgcGFnZU51bWJlcjogMSxcclxuICAvLyAgIHBhZ2VTaXplOiAxMCxcclxuICAvLyAgIGxvYWRpbmc6IGZhbHNlXHJcbiAgLy8gfTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGZvcm1OYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBhZ2VkUmVxdWVzdD86IElQYWdlZFJlcXVlc3Q7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbj86IElHcmlkQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSAvKnNldCovIHBhZ2U6IElQYWdlPGFueT4gPSB7XHJcbiAgICBpdGVtczogW10sXHJcbiAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gICAgbG9hZGluZzogZmFsc2VcclxuICB9O1xyXG4gIC8vIChuZXdQYWdlOiBJUGFnZTxhbnk+KXtcclxuICAvLyAgIGlmKG5ld1BhZ2Upe1xyXG4gIC8vICAgICB0aGlzLl9wYWdlID0gbmV3UGFnZTtcclxuICAvLyAgICAgdGhpcy5fZXh0cmFjdFN1bW1hcmllcygpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICAvLyBnZXQgcGFnZSgpe1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX3BhZ2U7XHJcbiAgLy8gfVxyXG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3VpZCc7XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBwcml2YXRlIF90ZW1wQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuICB0ZW1wU2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4gPSBbXTtcclxuICBwcml2YXRlIF9jb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgY29sdW1ucyh2YWx1ZTogQXJyYXk8R3JpZENvbHVtbj4gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnNQcm9jZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxHcmlkQ29sdW1uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBncmlkRGF0YT86IEFycmF5PGFueT47XHJcblxyXG4gIEBJbnB1dCgpIGlzVGFibGVMb2FkaW5nPzogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgcGFyZW50OiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBzaG93QWN0aW9uQ29sdW1uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0hlYWRlckZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93RmlsdGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0dyaWREYXRhUGFnZWRJbkFwaTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBTaG93RmlsdGVyQ29sdW1uczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNydWRTZXJ2aWNlPzogQ3J1ZEJhc2VTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueT47XHJcbiAgQElucHV0KCkgc2V0IHNlYXJjaEZpZWxkcyh2YWx1ZTogQXJyYXk8U2VhcmNoRmllbGQ+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgLy9yZXNldFxyXG4gICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBbXTtcclxuXHJcbiAgICAgIC8vaW5pdCB1c2luZyB2YWx1ZVxyXG4gICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBGaWx0ZXJIZWxwZXIuaW5pdFNlYXJjaEZpZWxkcyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuaW5pdFNlYXJjaE9uSW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2VhcmNoRmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaEZpZWxkcztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBHcmlkU29ydE1vZGUgfCBhbnkgPSBHcmlkU29ydE1vZGUuTXVsdGlwbGU7XHJcbiAgQElucHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZT86IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgcHJlc2VudGF0aW9uU2V0dGluZ3M/OiBQcmVzZW50YXRpb25TZXR0aW5nXHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdEtleU9ubHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlIHwgYW55ID0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbk1vZGUodmFsdWU6IEdyaWRTZWxlY3Rpb25Nb2RlIHwgYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGE/LmlzQWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5jb25maWc/LmRhdGE/LnNlbGVjdGlvbk1vZGUpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IHRoaXMuY29uZmlnPy5kYXRhPy5zZWxlY3Rpb25Nb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGlvbk1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBzZXQgc2VhcmNoT25Jbml0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWVcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNlYXJjaE9uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdFNlYXJjaE9uSW5pdCgpXHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoT25Jbml0XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzaG93R2xvYmFsU2VhcmNoOiBib29sZWFuID0gdHJ1ZVxyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEZpZWxkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcm90ZWN0ZWQgX3Nob3dDYWxlbmRlclZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXQgc2hvd0NhbGVuZGVyVmlldyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0NhbGVuZGVyVmlldyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX3Nob3dDYWxlbmRlclZpZXcgPT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBzdGFydCA9IHRoaXMuc2VhcmNoRmllbGRzPy5maW5kKHggPT4geC5maWVsZCA9PT0gdGhpcy5jYWxlbmRlclNjaGVtYT8uc3RhcnQpXHJcbiAgICAgIGxldCBlbmQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LmVuZClcclxuICAgICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICAgIHN0YXJ0LmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgZW5kLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgY2FsZW5kZXJTY2hlbWE6IEV2ZW50U2NoZW1hIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Nob3dDYXJkVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBzaG93Q2FyZFZpZXcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dDYXJkVmlldyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9zaG93S2FuYmFuVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCBzaG93S2FuYmFuVmlldyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0thbmJhblZpZXcgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGJ1c2luZXNzQ2xhc3M/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG5cclxuICBASW5wdXQoKSBjaGVja2VkQnlGaWVsZDogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdEFsbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2VsZWN0QWxsID0gdmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc3ludGhldGljRXZlbnQgPSBuZXcgRXZlbnQoJ3NlbGVjdEFsbENoYW5nZScpO1xyXG4gICAgY29uc3QgZXZlbnQ6IFRhYmxlU2VsZWN0QWxsQ2hhbmdlRXZlbnQgPSB7XHJcbiAgICAgIGNoZWNrZWQ6IHZhbHVlLFxyXG4gICAgICBvcmlnaW5hbEV2ZW50OiBzeW50aGV0aWNFdmVudCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vblNlbGVjdEFsbENoYW5nZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSB0YXJnZXRCdXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBkZXNjcmltaW5hdG9yVmFsdWU/OiBzdHJpbmdcclxuXHJcbiAgcHVibGljIGdldCBzZWxlY3RBbGwoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zZWxlY3RBbGw7IH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIGVkaXRSb3c6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZVJvdzogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgbG9hZDogRXZlbnRFbWl0dGVyPHsgcmVxdWVzdDogSVBhZ2VkUmVxdWVzdCwgaXNGb3JDYWxlbmRhcjogYm9vbGVhbiB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0LCBpc0ZvckNhbGVuZGFyOiBib29sZWFuIH0+KCk7XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNvbHVtbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+KCk7XHJcbiAgQE91dHB1dCgpIHNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4oKTtcclxuICBAT3V0cHV0KCkgY2FsZW5kYXJFdmVudENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzdGF0dXNGaWx0ZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICovXHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIC8vIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAvLyAgIGlmKGNoYW5nZXNbJ3BhZ2UnXSl7XHJcbiAgLy8gICAgIHRoaXMuX2V4dHJhY3RTdW1tYXJpZXMoKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG5cclxuICBwcm90ZWN0ZWQgZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyXCI7XHJcbiAgcHJvdGVjdGVkIGZpbHRlclRvb2x0aXAgPSBcInNob3dfZmlsdGVyXCI7XHJcblxyXG4gIGZpbHRlck1vZGVJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICBmaWx0ZXJNb2RlVG9vbHRpcCA9IFwibWVudV9tb2RlXCI7XHJcbiAgY2hhbmdlSGVhZGVyRmlsdGVyc01vZGU6IHN0cmluZyA9IFwibWVudVwiO1xyXG5cclxuICBpdGVtcz86IGFueVtdO1xyXG4gIF9zZWFyY2hPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzZWxlY3RlZENvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGltcG9ydGFudENvbHVtbnMgPSBbJ2NvbnN1bHQnLCAnZWRpdCcsICdkZWxldGUnLCAndXBsb2FkJywgJ2Rvd25sb2FkJywgJ2luZm8nLCAnbm90ZXMnLCAnZHVwbGljYXRlJ107XHJcbiAgaXNGaXJzdExvYWRPZlBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIHRpdGxlQ2FjaGUgPSBuZXcgTWFwPGFueSwgc3RyaW5nW10+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc3RhdHVzQ29sb3JTZXJ2aWNlOiBTdGF0dXNDb2xvclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX2ZpY2hpZXJTZXJ2aWNlOiBGaWNoaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2h0bWxUZW1wbGF0ZUdlbmVyYXRvclNlcnZpY2U6IEh0bWxUZW1wbGF0ZUdlbmVyYXRvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGl6ZTogTG9jYWxpemVQaXBlLFxyXG4gICAgcHJpdmF0ZSBsYXlvdXRIZWxwZXJTZXJ2aWNlOiBMYXlvdXRIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3ByaW1lbmdDb25maWc6IFByaW1lTkdDb25maWcsXHJcbiAgICBwcml2YXRlIGFwcFNldHRpbmdzU2VydmljZTogQXBwU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcclxuICAgIHB1YmxpYyBjb25maWc/OiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBfcmVmPzogRHluYW1pY0RpYWxvZ1JlZixcclxuXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsdGVyTW9kZVRvb2x0aXBGcm9tTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5mb3JtTmFtZX0tZmlsdGVyTW9kZWApXHJcbiAgICBpZiAoZmlsdGVyTW9kZVRvb2x0aXBGcm9tTG9jYWxTdG9yYWdlICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgIT0gbnVsbFxyXG4gICAgICAmJiBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgIT0gXCJcIikge1xyXG4gICAgICB0aGlzLmZpbHRlck1vZGVUb29sdGlwID0gZmlsdGVyTW9kZVRvb2x0aXBGcm9tTG9jYWxTdG9yYWdlXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSB0cnVlXHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyLXNsYXNoXCI7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9IFwiaGlkZV9maWx0ZXJcIjtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPT09IFwibWVudV9tb2RlXCIpIHtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVJY29uID0gXCJwaSBwaS1jaGVja1wiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBcInJvd19tb2RlXCI7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwibWVudVwiXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwicm93XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktZWxsaXBzaXMtdlwiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBcIm1lbnVfbW9kZVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyXCI7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9IFwic2hvd19maWx0ZXJcIjtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBsZXQgbGFuZ3VlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0ocnRsTW9kZUtleXMucnRsTW9kZUVuYWJsZWQpO1xyXG5cclxuICAgIGlmIChsYW5ndWUgJiYgSlNPTi5wYXJzZShsYW5ndWUpKSB7XHJcbiAgICAgIHRoaXMuaXNBciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc0FyID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLnRyYW5zbGF0ZWRIZWFkZXIgPSB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShjb2x1bW4uaGVhZGVyISEpKVxyXG5cclxuICAgIHRoaXMuX3RlbXBDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cclxuICAgIHRoaXMudGVtcFNlYXJjaEZpZWxkcyA9IHRoaXMuX3NlYXJjaEZpZWxkcyA/PyBbXTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+XHJcbiAgICAgICF0aGlzLmltcG9ydGFudENvbHVtbnMuaW5jbHVkZXMoY29sdW1uLmZpZWxkKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucyB8fCB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1uc1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29sdW1uLm9yZGVyID0gaW5kZXg7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmlzUnRsTW9kZUVuYWJsZWQoKVxyXG4gICAgdGhpcy5fcnRsTW9kZVN1YnNjcmliZSgpXHJcbiAgICB0aGlzLnByb2Nlc3NTdGlja3lDb2x1bW5zKClcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoY2hhbmdlc1snZW50aXR5SW5mbyddPy5jdXJyZW50VmFsdWUgJiYgdGhpcy5lbnRpdHlJbmZvKSB7XHJcblxyXG4gICAgICAvLyAgICBpZiAoY2hhbmdlc1snZW50aXR5SW5mbyddICYmIHRoaXMuZW50aXR5SW5mbykge1xyXG4gICAgICB0aGlzLmFwcGx5RW50aXR5SW5mbyh0aGlzLmVudGl0eUluZm8pO1xyXG4gICAgICB0aGlzLmxvYWRTdGF0dXNDb2xvcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1sndGFyZ2V0QnVzaW5lc3NDbGFzcyddICYmIHRoaXMudGFyZ2V0QnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLmxvYWRTdGF0dXNDb2xvcnNEZXRhaWxzQnlCdXNpbmVzc0NsYXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0dXNNZXRhZGF0YT86IFN0YXR1c01ldGFkYXRhUmVzcG9uc2U7XHJcbiAgc3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5PzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuXHJcbiAgZ2V0U3RhdHVzT3B0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1c01ldGFkYXRhPy5vcHRpb25zLmZpbmQobyA9PiBvLnN0YXR1c1ZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXNPcHRpb25Gb3JTdGF0dXNIaXN0b3J5KHN0YXR1c1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeT8ub3B0aW9ucy5maW5kKG8gPT4gby50cmFuc2xhdGVkTGFiZWwgPT09IHN0YXR1c1ZhbHVlKTtcclxuICB9XHJcblxyXG4gIGxvYWRTdGF0dXNDb2xvcnNEZXRhaWxzQnlCdXNpbmVzc0NsYXNzKCkge1xyXG5cclxuICAgIGlmICh0aGlzLnRhcmdldEJ1c2luZXNzQ2xhc3MgIT0gdW5kZWZpbmVkICYmIHRoaXMudGFyZ2V0QnVzaW5lc3NDbGFzcyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3N0YXR1c0NvbG9yU2VydmljZS5nZXRTdGF0dXNDb2xvckRldGFpbHNCeUJ1c2luZXNzQ2xhc3NOYW1lKHRoaXMudGFyZ2V0QnVzaW5lc3NDbGFzcylcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogU3RhdHVzTWV0YWRhdGFSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHN0YXR1cyBjb2xvcnMnLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFN0YXR1c0NvbG9ycygpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3MhO1xyXG4gICAgY29uc3Qgc3RhdHVzRW51bU5hbWUgPSB0aGlzLmVudGl0eUluZm8/LnN0YXR1c0VudW1OYW1lITtcclxuXHJcbiAgICBpZiAoIWNsYXNzTmFtZSB8fCAhc3RhdHVzRW51bU5hbWUpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdNaXNzaW5nIGNsYXNzTmFtZSBvciBzdGF0dXNFbnVtTmFtZSBmb3IgZW50aXR5SW5mby4nKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLl9zdGF0dXNDb2xvclNlcnZpY2UuZ2V0U3RhdHVzQ29sb3JEZXRhaWxzKGNsYXNzTmFtZSwgc3RhdHVzRW51bU5hbWUpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IFN0YXR1c01ldGFkYXRhUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNNZXRhZGF0YSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHN0YXR1cyBjb2xvcnMnLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgc3RhdHVzIGNvbG9yczonLCBlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGlnaHRlbkNvbG9yKGhleDogc3RyaW5nIHwgdW5kZWZpbmVkLCBwZXJjZW50OiBudW1iZXIgPSA3MCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhleCkgcmV0dXJuICcnO1xyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14jLywgJycpO1xyXG5cclxuICAgIGxldCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgbGV0IGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICBsZXQgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuXHJcbiAgICByID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHIgKyAoMjU1IC0gcikgKiBwZXJjZW50IC8gMTAwKSk7XHJcbiAgICBnID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKGcgKyAoMjU1IC0gZykgKiBwZXJjZW50IC8gMTAwKSk7XHJcbiAgICBiID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKGIgKyAoMjU1IC0gYikgKiBwZXJjZW50IC8gMTAwKSk7XHJcblxyXG4gICAgY29uc3QgbmV3SGV4ID1cclxuICAgICAgJyMnICtcclxuICAgICAgW3IsIGcsIGJdXHJcbiAgICAgICAgLm1hcCh4ID0+IHgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpXHJcbiAgICAgICAgLmpvaW4oJycpO1xyXG5cclxuICAgIHJldHVybiBuZXdIZXg7XHJcbiAgfVxyXG5cclxuICBnZXRSZWFkYWJsZVRleHRDb2xvcihoZXg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhleCkgcmV0dXJuICdibGFjayc7XHJcblxyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14jLywgJycpO1xyXG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIGNvbnN0IGJyaWdodG5lc3MgPSAociAqIDI5OSArIGcgKiA1ODcgKyBiICogMTE0KSAvIDEwMDA7XHJcblxyXG4gICAgcmV0dXJuIGJyaWdodG5lc3MgPiAyMzAgPyAnYmxhY2snIDogYCMke2hleH1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUVudGl0eUluZm8oZW50aXR5SW5mbzogRW50aXR5SW5mbykge1xyXG4gICAgaWYgKCFlbnRpdHlJbmZvPy5zdGF0dXNDb2x1bW5OYW1lKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc3RhdHVzQ29sdW1uTmFtZSA9IGVudGl0eUluZm8uc3RhdHVzQ29sdW1uTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIGNvbnN0IHN0YXR1c0NvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKFxyXG4gICAgICBjID0+IGMuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gc3RhdHVzQ29sdW1uTmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIXN0YXR1c0NvbHVtbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oYFN0YXR1cyBjb2x1bW4gXCIke2VudGl0eUluZm8uc3RhdHVzQ29sdW1uTmFtZX1cIiBub3QgZm91bmQuYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0dXNDb2x1bW4uaXNTdGF0dXNDb2x1bW4gPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGJ1dHRvbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5pc0J1dHRvbik7XHJcbiAgICBjb25zdCBvdGhlckNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuaXNCdXR0b24gJiYgYyAhPT0gc3RhdHVzQ29sdW1uKTtcclxuXHJcbiAgICBjb25zdCBtYXhCdXR0b25PcmRlciA9XHJcbiAgICAgIGJ1dHRvbkNvbHVtbnMucmVkdWNlKChtLCBjKSA9PiBNYXRoLm1heChtLCBjLm9yZGVyID8/IDApLCAwKSB8fCAwO1xyXG5cclxuICAgIHN0YXR1c0NvbHVtbi5vcmRlciA9IG1heEJ1dHRvbk9yZGVyICsgMTtcclxuXHJcbiAgICBjb25zdCByZW9yZGVyZWQgPSBbXHJcbiAgICAgIC4uLmJ1dHRvbkNvbHVtbnMuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKSksXHJcbiAgICAgIHN0YXR1c0NvbHVtbixcclxuICAgICAgLi4ub3RoZXJDb2x1bW5zLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMCkpLFxyXG4gICAgXTtcclxuXHJcbiAgICByZW9yZGVyZWQuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4gKGNvbC5vcmRlciA9IGluZGV4KSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbLi4ucmVvcmRlcmVkXTtcclxuICB9XHJcblxyXG5cclxuICBnZXRTdGF0ZSgpIHtcclxuICAgIGxldCBzdGF0ZTogVGFibGVTdGF0ZSA9IHt9O1xyXG5cclxuICAgIGlmICghdGhpcy5kdCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kdC5yZXNpemFibGVDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuZHQuc2F2ZUNvbHVtbldpZHRocyhzdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kdC5zYXZlQ29sdW1uT3JkZXIoc3RhdGUpO1xyXG5cclxuICAgIHJldHVybiBzdGF0ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmVTdGF0ZShjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGxldCBzdGF0ZTogVGFibGVTdGF0ZSA9IEpTT04ucGFyc2UoY29uZmlndXJhdGlvbilcclxuICAgIGlmICh0aGlzLmR0KSB7XHJcblxyXG4gICAgICB0aGlzLmR0LmNvbHVtbldpZHRoc1N0YXRlID0gc3RhdGUuY29sdW1uV2lkdGhzO1xyXG4gICAgICB0aGlzLmR0LnRhYmxlV2lkdGhTdGF0ZSA9IHN0YXRlLnRhYmxlV2lkdGg7XHJcblxyXG4gICAgICBsZXQgY29sdW1uT3JkZXIgPSBzdGF0ZS5jb2x1bW5PcmRlcjtcclxuXHJcbiAgICAgIGlmIChjb2x1bW5PcmRlcikge1xyXG4gICAgICAgIGxldCByZW9yZGVyZWRDb2x1bW5zID0gdGhpcy5nZXRSZW9yZGVyZWRDb2x1bW5zKGNvbHVtbk9yZGVyKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHJlb3JkZXJlZENvbHVtbnM7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gcmVvcmRlcmVkQ29sdW1ucztcclxuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZENvbHVtbnNDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnNvcnRDb2x1bW5zKClcclxuICB9XHJcblxyXG4gIHNvcnRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleEEgPSB0aGlzLmltcG9ydGFudENvbHVtbnMuaW5kZXhPZihhLmZpZWxkKTtcclxuICAgICAgY29uc3QgaW5kZXhCID0gdGhpcy5pbXBvcnRhbnRDb2x1bW5zLmluZGV4T2YoYi5maWVsZCk7XHJcblxyXG4gICAgICBpZiAoaW5kZXhBID09PSAtMSAmJiBpbmRleEIgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGluZGV4QSA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW5kZXhCID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLm9yZGVyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIhIC0gYi5vcmRlciEpLFxyXG4gICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5vcmRlciA9PT0gdW5kZWZpbmVkKSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRSZW9yZGVyZWRDb2x1bW5zKGNvbHVtbk9yZGVyOiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIGxldCByZW9yZGVyZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGNvbHVtbk9yZGVyLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgIGxldCBjb2wgPSB0aGlzLmZpbmRDb2x1bW5CeUtleShrZXkpO1xyXG4gICAgICBpZiAoY29sKSB7XHJcbiAgICAgICAgcmVvcmRlcmVkQ29sdW1ucy5wdXNoKGNvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZW9yZGVyZWRDb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgZmluZENvbHVtbkJ5S2V5KGtleTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fdGVtcENvbHVtbnMpIHtcclxuICAgICAgZm9yIChsZXQgY29sIG9mIHRoaXMuX3RlbXBDb2x1bW5zKSB7XHJcbiAgICAgICAgaWYgKGNvbC5oZWFkZXIgPT09IGtleSB8fCBjb2wuZmllbGQgPT09IGtleSkgcmV0dXJuIGNvbDtcclxuICAgICAgICBlbHNlIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWxlY3RlZENvbHVtbnMoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBsZXQgc3RhdGU6IFRhYmxlU3RhdGUgPSBKU09OLnBhcnNlKGNvbmZpZ3VyYXRpb24pXHJcbiAgICBpZiAodGhpcy5kdCkge1xyXG5cclxuICAgICAgdGhpcy5kdC5jb2x1bW5XaWR0aHNTdGF0ZSA9IHN0YXRlLmNvbHVtbldpZHRocztcclxuICAgICAgdGhpcy5kdC50YWJsZVdpZHRoU3RhdGUgPSBzdGF0ZS50YWJsZVdpZHRoO1xyXG5cclxuICAgICAgbGV0IGNvbHVtbk9yZGVyID0gc3RhdGUuY29sdW1uT3JkZXI7XHJcblxyXG4gICAgICBpZiAoY29sdW1uT3JkZXIpIHtcclxuICAgICAgICBsZXQgcmVvcmRlcmVkQ29sdW1ucyA9IHRoaXMuZ2V0UmVvcmRlcmVkQ29sdW1ucyhjb2x1bW5PcmRlcik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSByZW9yZGVyZWRDb2x1bW5zO1xyXG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSB0aGlzLl90ZW1wQ29sdW1ucztcclxuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbm90SW5TcGVjaWZpZWRDb2x1bW4oY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuaW1wb3J0YW50Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NTdGlja3lDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5fY29sdW1ucy5mb3JFYWNoKChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgaWYgKGNvbC5pc0Zyb3plbikge1xyXG4gICAgICAgIGNvbC5uZ1N0eWxlID0gdGhpcy5nZXRUaGVTdHlsZShjb2wpXHJcbiAgICAgICAgY29sLmhlYWRlckNvbHVtblN0eWxlID0geyAuLi5jb2wubmdTdHlsZSwgekluZGV4OiAxMDAwIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldENoZWNrYm94U3R5bGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc1J0bE1vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICByaWdodDogYDBweGAsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcclxuICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgXCJtaW4td2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbGVmdDogYDBweGAsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcclxuICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgXCJtaW4td2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRoZVN0eWxlKGNvbHVtbjogR3JpZENvbHVtbik6IGFueSB7XHJcblxyXG4gICAgaWYgKCFjb2x1bW4uaXNGcm96ZW4pIHtcclxuICAgICAgcmV0dXJuIHt9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi5pc0Zyb3plbiA9PSB0cnVlKSB7XHJcbiAgICAgIGxldCBlbGVtZW50UG9zaXRpb24gPSAwO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09IHRoaXMubXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZSkge1xyXG4gICAgICAgIGVsZW1lbnRQb3NpdGlvbiA9IDMwICsgZWxlbWVudFBvc2l0aW9uICsgKGNvbHVtbi5vcmRlciA/PyAwKSAqIDYwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVsZW1lbnRQb3NpdGlvbiA9IGVsZW1lbnRQb3NpdGlvbiArICgoY29sdW1uLm9yZGVyID8/IDApICogMS44NSkgKiAyMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1J0bE1vZGUpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcmlnaHQ6IGAke2VsZW1lbnRQb3NpdGlvbn1weGAsXHJcbiAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXHJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgICBcIm1pbi13aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGxlZnQ6IGAke2VsZW1lbnRQb3NpdGlvbn1weGAsXHJcbiAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXHJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgICBcIndpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgICBcIm1pbi13aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNSdGxNb2RlRW5hYmxlZCgpIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRTZXJ2aWNlLmlzUnRsTW9kZUVuYWJsZWQoKSkge1xyXG4gICAgICB0aGlzLmlzUnRsTW9kZSA9IHRydWVcclxuICAgICAgdGhpcy51cGRhdGVQcmltZU5HVGFibGVGaWx0ZXJzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUHJpbWVOR1RhYmxlRmlsdGVycygpIHtcclxuICAgIHRoaXMuX3ByaW1lbmdDb25maWcuc2V0VHJhbnNsYXRpb24ocHJpbWVuZ0xvY2FsZUFyKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcnRsTW9kZVN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuX2xheW91dFNlcnZpY2UuZW5hYmxlUnRsTW9kZVN1YmplY3QkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzUnRsTW9kZSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZXMoc2VhcmNoRmllbGRWYWx1ZXM6IEFycmF5PFNlYXJjaEZpZWxkPikge1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQuZW1pdChzZWFyY2hGaWVsZFZhbHVlcylcclxuICB9XHJcblxyXG4gIGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09ICh0aGlzLnBhZ2UudG90YWxDb3VudCAtIHRoaXMucGFnZS5wYWdlU2l6ZSkgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IDAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZWRpdChpdGVtOiBhbnkpIHtcclxuICAgIHRoaXMuZWRpdFJvdy5lbWl0KGl0ZW1bdGhpcy5rZXldKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZShpdGVtOiBhbnkpIHtcclxuICAgIHRoaXMuZGVsZXRlUm93LmVtaXQoaXRlbVt0aGlzLmtleV0pO1xyXG4gIH1cclxuXHJcbiAgbGF6eUxvYWQoZXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMucGFnZWRSZXF1ZXN0ID09IG51bGwgJiYgdGhpcy5wYWdlZFJlcXVlc3QgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0ge307XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdC5za2lwQ291bnQgPSBldmVudC5maXJzdCA9PSAxID8gMCA6IGV2ZW50LmZpcnN0O1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QubWF4UmVzdWx0Q291bnQgPSBldmVudC5yb3dzO1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUgJiYgdGhpcy5pc0ZpcnN0TG9hZE9mUGFnZSkge1xyXG4gICAgICB0aGlzLmlzRmlyc3RMb2FkT2ZQYWdlID0gZmFsc2VcclxuICAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmZvcm1OYW1lKTtcclxuICAgICAgaWYgKHN0b3JlZFZhbHVlKSB7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnBhcnNlKHN0b3JlZFZhbHVlKTtcclxuICAgICAgICBjb25zdCBjb2x1bW5PcmRlcjogc3RyaW5nW10gPSBzZXNzaW9uRGF0YS5jb2x1bW5PcmRlcjtcclxuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aHM6IHN0cmluZ1tdID0gc2Vzc2lvbkRhdGEuY29sdW1uV2lkdGhzLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTZWxlY3RlZENvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gICAgICAgIGNvbHVtbk9yZGVyLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aHNbaW5kZXhdO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ29sdW1uSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5maWVsZCA9PT0gZmllbGQpO1xyXG4gICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1uSW5kZXggIT09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1tleGlzdGluZ0NvbHVtbkluZGV4XS53aWR0aCA9IGNvbHVtbldpZHRoO1xyXG4gICAgICAgICAgICB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zLnB1c2godGhpcy5zZWxlY3RlZENvbHVtbnNbZXhpc3RpbmdDb2x1bW5JbmRleF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHVwZGF0ZWRTZWxlY3RlZENvbHVtbnM7XHJcblxyXG4gICAgICAgIGlmICgoc2Vzc2lvbkRhdGEubXVsdGlTb3J0TWV0YSAmJiBzZXNzaW9uRGF0YS5tdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHx8IChzZXNzaW9uRGF0YS5maWx0ZXJzKSkge1xyXG4gICAgICAgICAgaWYgKHNlc3Npb25EYXRhLm11bHRpU29ydE1ldGEgJiYgc2Vzc2lvbkRhdGEubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25EYXRhLm11bHRpU29ydE1ldGEuZm9yRWFjaCgobWV0YTogeyBmaWVsZDogYW55OyBvcmRlcjogYW55OyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHNvcnRNZXRhOiBTb3J0TWV0YSA9IHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBtZXRhLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3JkZXI6IG1ldGEub3JkZXJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZXZlbnQuc29ydEZpZWxkID0gbWV0YS5maWVsZDtcclxuICAgICAgICAgICAgICBldmVudC5zb3J0T3JkZXIgPSBtZXRhLm9yZGVyO1xyXG4gICAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGE/LnB1c2goc29ydE1ldGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzZXNzaW9uRGF0YS5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YSB9ID0ge307XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNlc3Npb25EYXRhLmZpbHRlcnMpLmZvckVhY2goKFtmaWVsZE5hbWUsIGZpbHRlck1ldGFkYXRhXSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlck1ldGFkYXRhVmFsdWUgPSBmaWx0ZXJNZXRhZGF0YSBhcyBbRmlsdGVyTWV0YWRhdGFdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyTWV0YWRhdGFWYWx1ZVswXSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZmlsdGVyc1tmaWVsZE5hbWVdID0gZmlsdGVyTWV0YWRhdGFWYWx1ZVswXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gQXNzaWduIHRoZSBmaWx0ZXJzIHRvIHRoZSBldmVudFxyXG4gICAgICAgICAgICBldmVudC5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICAgICAgLy8gZXZlbnQuZmlsdGVycyA9IE9iamVjdC5lbnRyaWVzKHNlc3Npb25EYXRhLmZpbHRlcnMpLnJlZHVjZSgoZmlsdGVyczogeyBbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGEgfSwgW2ZpZWxkTmFtZSwgZmlsdGVyTWV0YWRhdGEgXSApID0+IHtcclxuICAgICAgICAgICAgLy8gICB2YXIgZmlsdGVyTWV0YWRhdGFWYWx1ZSA9IGZpbHRlck1ldGFkYXRhIGFzIEZpbHRlck1ldGFkYXRhO1xyXG4gICAgICAgICAgICAvLyAgIGlmIChmaWx0ZXJNZXRhZGF0YVZhbHVlLnZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAvLyAgICAgZmlsdGVyc1tmaWVsZE5hbWVdID0gZmlsdGVyTWV0YWRhdGEgYXMgRmlsdGVyTWV0YWRhdGE7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnYWxsIGZpbHRlcnMnLCBmaWx0ZXJzKVxyXG4gICAgICAgICAgICAvLyAgIHJldHVybiBmaWx0ZXJzO1xyXG4gICAgICAgICAgICAvLyB9LCB7fSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2VhcmNoRmllbGRzID1bXTtcclxuICAgICAgICAgICAgLy8gY29uc3QgZmlsdGVyc0FycmF5OiBbc3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfCBudWxsOyBtYXRjaE1vZGU6IHN0cmluZyxvcGVyYXRvciA6IHN0cmluZyB9W11dW10gPSBPYmplY3QuZW50cmllcyhkYXRhLmZpbHRlcnMpO1xyXG5cclxuICAgICAgICAgICAgLy8gZmlsdGVyc0FycmF5LmZvckVhY2goKFtmaWVsZE5hbWUsIGZpZWxkVmFsdWVdKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyAgIGZpZWxkVmFsdWUuZm9yRWFjaChmaWx0ZXIgPT5cclxuICAgICAgICAgICAgLy8gICAgIHtcclxuXHJcbiAgICAgICAgICAgIC8vICAgICBpZihmaWx0ZXIudmFsdWUpe1xyXG4gICAgICAgICAgICAvLyAgICAgICBsZXQgc2VhcmNoRmllbGQgOiBTZWFyY2hGaWVsZCA9e1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIGZpZWxkIDpmaWVsZE5hbWUsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgbGFiZWxWYWx1ZSA6IGZpbHRlci52YWx1ZSxcclxuICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZTpmaWx0ZXIudmFsdWUsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgdHlwZSA6IHRoaXMuaW5mZXJJbnB1dFR5cGUoZmllbGROYW1lKSxcclxuICAgICAgICAgICAgLy8gICAgICAgICBvcGVyYXRvciA6IHRoaXMuZ2V0T3BlcmF0b3JOdW1iZXIoZmlsdGVyLm1hdGNoTW9kZSlcclxuICAgICAgICAgICAgLy8gICAgICAgfTtcclxuICAgICAgICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJ3NlYXJjaEZpZWxkJyxzZWFyY2hGaWVsZCk7XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmICh0aGlzLnNlYXJjaEZpZWxkcykge1xyXG5cclxuICAgICAgICAgICAgLy8gICAgICAgdGhpcy5zZWFyY2hGaWVsZHMucHVzaChzZWFyY2hGaWVsZCk7XHJcbiAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTm8gc2Vzc2lvbiBkYXRhIGZvdW5kIGluIGxvY2FsU3RvcmFnZVwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPSB0aGlzLl9leHRyYWN0RmlsdGVycyhldmVudC5maWx0ZXJzKTtcclxuICAgIHRoaXMuX2V4dHJhY3RTb3J0Q3JpdGVyaWFzKGV2ZW50KTtcclxuICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBmaWVsZHMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICh0aGlzLmNvbHVtbnMgIT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICBmaWVsZHMucHVzaChjb2wuZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgYnV0dG9uQ2xpY2tlZChpdGVtOiBhbnksIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RLZXlPbmx5KSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHsgZmllbGQ6IGZpZWxkLCBrZXk6IGl0ZW1bdGhpcy5rZXldLCBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHkgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Db2x1bW5DbGlja2VkLmVtaXQoeyBmaWVsZDogZmllbGQsIGtleTogaXRlbSwgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5d29yZFZhbHVlQ2hhbmdlZChrZXl3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMua2V5d29yZCA9IGtleXdvcmRcclxuICB9XHJcblxyXG4gIGlzQWxsUmVxdWlyZWRTZWFyY2hGaWVsZHNIYXZlVmFsdWVzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGludmFsaWRTZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkc1xyXG4gICAgICA/LmZpbHRlcih4ID0+IHgucmVxdWlyZWQgPT0gdHJ1ZSAmJiAoeC52YWx1ZSA9PSB1bmRlZmluZWQgfHwgeC52YWx1ZSA9PSAnJyB8fCB4LnZhbHVlID09IG51bGwpKVxyXG5cclxuICAgIGlmIChpbnZhbGlkU2VhcmNoRmllbGRzID09IHVuZGVmaW5lZCB8fCBpbnZhbGlkU2VhcmNoRmllbGRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdXHJcbiAgICBpbnZhbGlkU2VhcmNoRmllbGRzLmZvckVhY2goc2VhcmNoRmllbGQgPT4ge1xyXG4gICAgICBtZXNzYWdlcy5wdXNoKGA8Yj4ke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKHNlYXJjaEZpZWxkLmxhYmVsVmFsdWUpfTwvYj4gJHt0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShcInNoYXJlZF9zZWFyY2hfZmllbGRfcmVxdWlyZWRcIil9YCk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlc0Zyb21BcnJheVN0cmluZyhtZXNzYWdlcyk7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGluaXRTZWFyY2hPbkluaXQoKSB7XHJcbiAgICBsZXQgaW52YWxpZFNlYXJjaEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICAgID8uZmlsdGVyKHggPT4geC5yZXF1aXJlZCA9PSB0cnVlICYmICh4LnZhbHVlID09IHVuZGVmaW5lZCB8fCB4LnZhbHVlID09ICcnIHx8IHgudmFsdWUgPT0gbnVsbCkpID8/IFtdXHJcblxyXG4gICAgaWYgKHRoaXMuX3NlYXJjaE9uSW5pdCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hPbkluaXQgPSBpbnZhbGlkU2VhcmNoRmllbGRzLmxlbmd0aCA9PSAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21ib0JveExhYmVsQ2hhbmdlZChldmVudD86IEFycmF5PFNlYXJjaEZpZWxkPikge1xyXG4gICAgdGhpcy5fZXh0cmFjdFNlYXJjaEJveEZpbHRlcnMoKTtcclxuICAgIHRoaXMuX2dlbmVyYXRlRmlsdGVyc0h0bWxUZW1wbGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoKGV2dDogYW55ID0gbnVsbCk6IHZvaWQge1xyXG4gICAgXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInNlYXJjaD4+PlwiLCB0aGlzLnNlYXJjaEZpZWxkcylcclxuICAgIC8vIHNldCBnbG9iYWwgZmlsdGVyIHZhbHVlXHJcblxyXG4gICAgdGhpcy5fZXh0cmFjdE9ubHlWaXNpYmxlU2VhcmNoRmllbGRzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnZWRSZXF1ZXN0ICYmIHRoaXMuaXNBbGxSZXF1aXJlZFNlYXJjaEZpZWxkc0hhdmVWYWx1ZXMoKSkge1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5zdW1tYXJpZXMgPSB0aGlzLl9leHRyYWN0SGF2ZVN1bW1hcnlQcm9wZXJ0aWVzKCk7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0LnNvcnRpbmcgPSB0aGlzLl9zb3J0O1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5rZXl3b3JkID0gdGhpcy5rZXl3b3JkO1xyXG5cclxuICAgICAgLy9hZGQgc2VhcmNoIGJveCBmaWx0ZXJzXHJcbiAgICAgIHRoaXMuX2V4dHJhY3RTZWFyY2hCb3hGaWx0ZXJzKCk7XHJcblxyXG4gICAgICAvL2dlbmVyYXRlIGZpbHRlcnMgaHRtbCB0ZW1wbGF0ZVxyXG4gICAgICB0aGlzLl9nZW5lcmF0ZUZpbHRlcnNIdG1sVGVtcGxhdGUoKTtcclxuICAgICAgLy9jbG9uZVxyXG5cclxuICAgICAgbGV0IG5ld1JlcXVlc3Q6IElQYWdlZFJlcXVlc3QgPSB0aGlzLl9jbG9uZVBhZ2VkUmVxdWVzdCh0aGlzLnBhZ2VkUmVxdWVzdCk7XHJcblxyXG4gICAgICAvL2NvbmNhdCBmaWx0ZXJzXHJcbiAgICAgIG5ld1JlcXVlc3QuZmlsdGVycyA9IFsuLi50aGlzLl9ncmlkSGVhZGVyRmlsdGVycywgLi4udGhpcy5fc2VhcmNoQm94RmlsdGVyc107XHJcblxyXG4gICAgICAvL2V4Y2x1ZGUgdXNlbGVzcyBmaWx0ZXJzXHJcbiAgICAgIG5ld1JlcXVlc3QgPSB0aGlzLl9leGNsdWRlVXNlbGVzc0ZpbHRlcnMobmV3UmVxdWVzdCk7XHJcblxyXG4gICAgICAvLyB0ZXN0IGlmIGZpbHRlcnMgdmFsdWUgaGFzIGNoYW5nZWRcclxuICAgICAgaWYgKCh0aGlzLmxhdGVzdEZpbHRlcnMgPyBKU09OLnN0cmluZ2lmeSh0aGlzLmxhdGVzdEZpbHRlcnMpIDogbnVsbClcclxuICAgICAgICAhPT0gKG5ld1JlcXVlc3QuZmlsdGVycyA/IEpTT04uc3RyaW5naWZ5KG5ld1JlcXVlc3QuZmlsdGVycykgOiBudWxsKSkge1xyXG4gICAgICAgIG5ld1JlcXVlc3Quc2tpcENvdW50ID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgICAgIHRoaXMuZHQuZmlyc3QgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2F2ZSBsYXRlc3QgZmlsdGVyc1xyXG4gICAgICB0aGlzLmxhdGVzdEZpbHRlcnMgPSBuZXdSZXF1ZXN0LmZpbHRlcnM7XHJcblxyXG4gICAgICB0aGlzLmxvYWQuZW1pdCh7IHJlcXVlc3Q6IG5ld1JlcXVlc3QsIGlzRm9yQ2FsZW5kYXI6IHRoaXMuX3Nob3dDYWxlbmRlclZpZXcgfSk7XHJcblxyXG4gICAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGVDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rmlyc3RFbGVtZW50SW5kZXgoKTogbnVtYmVyIHtcclxuICAgIGlmICghdGhpcy5kdCkgcmV0dXJuIDA7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnZS5pdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZHQuZmlyc3QgPT09IDAgPyAxIDogKHRoaXMuZHQ/LmZpcnN0ID8/IDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3VtbWFyeShmaWVsZDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCBzdW1tYXJ5Um93ID0gdGhpcy5wYWdlLnN1bW1hcmllc1xyXG4gICAgICAuZmluZChzID0+IHMucHJvcHJldHkudG9VcHBlckNhc2UoKSA9PSBmaWVsZC50b1VwcGVyQ2FzZSgpKTtcclxuICAgIGlmIChzdW1tYXJ5Um93KSB7XHJcbiAgICAgIHJldHVybiBzdW1tYXJ5Um93LnN1bW1hcnk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpIHtcclxuICAgIGxldCBzZWxlY3Rpb246IGFueVtdID0gW107XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEtleU9ubHkpIHtcclxuICAgICAgICAgIGxldCBrZXlzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5mb3JFYWNoKCh2OiBhbnkpID0+IHsga2V5cy5wdXNoKHZbdGhpcy5rZXldKSB9KTtcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IGtleXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGlvbiA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT0gR3JpZFNlbGVjdGlvbk1vZGUuU2luZ2xlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdEtleU9ubHkpIHtcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbiA/IFt0aGlzLnNlbGVjdGlvblt0aGlzLmtleV1dIDogW107XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24gPyBbdGhpcy5zZWxlY3Rpb25dIDogW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChzZWxlY3Rpb24pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhPy5pc0FkdmFuY2VkU2VhcmNoICYmIHNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHNlbGVjdGlvbilcclxuICAgICAgdGhpcy5fcmVmPy5jbG9zZShzZWxlY3Rpb25bMF0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IFRhYmxlU2VsZWN0QWxsQ2hhbmdlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0QWxsID0gZXZlbnQuY2hlY2tlZDtcclxuICAgICAgaWYgKHRoaXMuX3NlbGVjdEFsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWRCeUZpZWxkICYmIHRoaXMuY2hlY2tlZEJ5RmllbGQudHJpbSgpICE9PSAnJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLnBhZ2UuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW1bdGhpcy5jaGVja2VkQnlGaWVsZF0gPT09IHRydWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5wYWdlLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gb25TZWxlY3RlZENvbHVtbnNDaGFuZ2UoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5mb3JtTmFtZSkge1xyXG4gIC8vICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZm9ybU5hbWUpO1xyXG5cclxuICAvLyAgICAgaWYgKHN0b3JlZFZhbHVlKSB7XHJcbiAgLy8gICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnBhcnNlKHN0b3JlZFZhbHVlKTtcclxuICAvLyAgICAgICBsZXQgY29sdW1uT3JkZXI6IHN0cmluZ1tdID0gW107XHJcbiAgLy8gICAgICAgbGV0IGNvbHVtbldpZHRoczogc3RyaW5nW10gPSBbXTtcclxuICAvLyAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAvLyAgICAgICAgIGlmIChpdGVtLmZpZWxkID09PSAndXBsb2FkJykge1xyXG4gIC8vICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaChpdGVtKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgZWxzZSBpZiAoaXRlbS5maWVsZCA9PT0gJ2Rvd25sb2FkJykge1xyXG4gIC8vICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaChpdGVtKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgZWxzZSBpZiAoaXRlbS5maWVsZCA9PT0gJ2NvbnN1bHQnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBlbHNlIGlmIChpdGVtLmZpZWxkID09PSAnZGVsZXRlJykge1xyXG4gIC8vICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaChpdGVtKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgZWxzZSBpZiAoaXRlbS5maWVsZCA9PT0gJ2VkaXQnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gIC8vICAgICAgICAgaWYgKGEub3JkZXIgIT09IHVuZGVmaW5lZCAmJiBiLm9yZGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAvLyAgICAgICAgICAgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgcmV0dXJuIDA7XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaChzZWxlY3RlZENvbHVtbiA9PiB7XHJcbiAgLy8gICAgICAgICBjb2x1bW5PcmRlci5wdXNoKHNlbGVjdGVkQ29sdW1uLmZpZWxkKTtcclxuICAvLyAgICAgICAgIGNvbnN0IHNlbGVjdGVkV2lkdGggPSBzZWxlY3RlZENvbHVtbi5taW5XaWR0aDtcclxuICAvLyAgICAgICAgIGlmIChzZWxlY3RlZFdpZHRoKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbHVtbldpZHRocy5wdXNoKHNlbGVjdGVkV2lkdGgudG9TdHJpbmcoKSk7XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAvL2NvbHVtbldpZHRocy5wdXNoKCc5MCcpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gIC8vICAgICAgIHNlc3Npb25EYXRhLmNvbHVtbk9yZGVyID0gY29sdW1uT3JkZXI7XHJcbiAgLy8gICAgICAgc2Vzc2lvbkRhdGEuY29sdW1uV2lkdGhzID0gY29sdW1uV2lkdGhzLmpvaW4oJywnKTtcclxuXHJcbiAgLy8gICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmZvcm1OYW1lLCBKU09OLnN0cmluZ2lmeShzZXNzaW9uRGF0YSkpO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIC8vY29uc3QgcmVzdWx0ID0gdGhpcy5nZW5lcmF0ZVRhYmxlQ29uZmlnSlNPTigpO1xyXG4gIC8vICAgICAgIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5mb3JtTmFtZSwgcmVzdWx0KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2VuZXJhdGVUYWJsZUNvbmZpZ0pTT04oKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IHRhYmxlQ29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLmpzb25TdHJpbmdMYXlvdXQpO1xyXG4gIC8vICAgdGFibGVDb25maWcuY29sdW1uT3JkZXIgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZCk7XHJcbiAgLy8gICAvL3RhYmxlQ29uZmlnLmNvbHVtbldpZHRocyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLm1hcCgoKSA9PiAnOTAnKS5qb2luKCcsJyk7XHJcbiAgLy8gICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGFibGVDb25maWcpO1xyXG4gIC8vIH1cclxuXHJcblxyXG5cclxuICBvblN0YXRlUmVzdG9yZSh0YWJsZVN0YXRlOiBUYWJsZVN0YXRlKSB7XHJcbiAgICBpZiAodGFibGVTdGF0ZS5zZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0YWJsZVN0YXRlLnNlbGVjdGlvblxyXG4gICAgICB0aGlzLm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAvLyAgIGNvbnN0IHN0b3JlZFZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5mb3JtTmFtZSk7XHJcbiAgICAvLyAgIGlmIChzdG9yZWRWYWx1ZSkge1xyXG4gICAgLy8gICAgIGNvbnN0IHNlc3Npb25EYXRhID0gSlNPTi5wYXJzZShzdG9yZWRWYWx1ZSk7XHJcbiAgICAvLyAgICAgY29uc3QgY29sdW1uT3JkZXI6IHN0cmluZ1tdID0gc2Vzc2lvbkRhdGEuY29sdW1uT3JkZXI7XHJcbiAgICAvLyAgICAgY29uc3QgY29sdW1uV2lkdGhzOiBzdHJpbmdbXSA9IHNlc3Npb25EYXRhLmNvbHVtbldpZHRocy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIC8vICAgICAvLyBVcGRhdGUgc2VsZWN0ZWRDb2x1bW5zIGJhc2VkIG9uIGNvbHVtbk9yZGVyIGFuZCBjb2x1bW5XaWR0aHNcclxuICAgIC8vICAgICBjb25zdCB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICAgIC8vICAgICBjb2x1bW5PcmRlci5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcclxuICAgIC8vICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gY29sdW1uV2lkdGhzW2luZGV4XTtcclxuICAgIC8vICAgICAgIC8vIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29sdW1uIGluIHNlbGVjdGVkQ29sdW1uc1xyXG4gICAgLy8gICAgICAgY29uc3QgZXhpc3RpbmdDb2x1bW5JbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmZpZWxkID09PSBmaWVsZCk7XHJcbiAgICAvLyAgICAgICBpZiAoZXhpc3RpbmdDb2x1bW5JbmRleCAhPT0gLTEpIHtcclxuICAgIC8vICAgICAgICAgLy8gSWYgdGhlIGNvbHVtbiBleGlzdHMgaW4gc2VsZWN0ZWRDb2x1bW5zLCB1cGRhdGUgaXRzIHdpZHRoXHJcbiAgICAvLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2V4aXN0aW5nQ29sdW1uSW5kZXhdLndpZHRoID0gY29sdW1uV2lkdGg7XHJcbiAgICAvLyAgICAgICAgIHVwZGF0ZWRTZWxlY3RlZENvbHVtbnMucHVzaCh0aGlzLnNlbGVjdGVkQ29sdW1uc1tleGlzdGluZ0NvbHVtbkluZGV4XSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfSk7XHJcblxyXG4gICAgLy8gICAgIC8vIFVwZGF0ZSBzZWxlY3RlZENvbHVtbnMgd2l0aCB0aGUgcmVzdG9yZWQgZGF0YVxyXG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdXBkYXRlZFNlbGVjdGVkQ29sdW1ucztcclxuXHJcblxyXG4gICAgLy8gICAgICAgaWYoc3RvcmVkVmFsdWUpe1xyXG5cclxuICAgIC8vICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xyXG4gICAgLy8gICAgICAgICBpZiAoKGRhdGEubXVsdGlTb3J0TWV0YSAmJiBkYXRhLm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkgfHwgKGRhdGEuZmlsdGVycyAmJiBkYXRhLm11bHRpU29ydE1ldGEuZmlsdGVycyA+IDApKSB7XHJcbiAgICAvLyAgICAgICAgICAgaWYgKGRhdGEubXVsdGlTb3J0TWV0YSAmJiBkYXRhLm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICAgICAgZGF0YS5tdWx0aVNvcnRNZXRhLmZvckVhY2goKG1ldGE6IHsgZmllbGQ6IGFueTsgb3JkZXI6IGFueTsgfSkgPT4geyBcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBzb3J0ID0ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhLmZpZWxkLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgIG9yZGVyOiBtZXRhLm9yZGVyID09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBbc29ydF07XHJcbiAgICAvLyAgICAgICAgICAgICB9KTsgIFxyXG4gICAgLy8gICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICBpZiAoZGF0YS5maWx0ZXJzKSB7XHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnNlYXJjaEZpZWxkcyA9W107XHJcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzQXJyYXk6IFtzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB8IG51bGw7IG1hdGNoTW9kZTogc3RyaW5nLG9wZXJhdG9yIDogc3RyaW5nIH1bXV1bXSA9IE9iamVjdC5lbnRyaWVzKGRhdGEuZmlsdGVycyk7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgZmlsdGVyc0FycmF5LmZvckVhY2goKFtmaWVsZE5hbWUsIGZpZWxkVmFsdWVdKSA9PiB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICBmaWVsZFZhbHVlLmZvckVhY2goZmlsdGVyID0+XHJcbiAgICAvLyAgICAgICAgICAgICAgICAge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICBpZihmaWx0ZXIudmFsdWUpe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHNlYXJjaEZpZWxkIDogU2VhcmNoRmllbGQgPXtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgZmllbGQgOmZpZWxkTmFtZSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA6IGZpbHRlci52YWx1ZSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ZmlsdGVyLnZhbHVlLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlIDogdGhpcy5pbmZlcklucHV0VHlwZShmaWVsZE5hbWUpLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA6IHRoaXMuZ2V0T3BlcmF0b3JOdW1iZXIoZmlsdGVyLm1hdGNoTW9kZSlcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc2VhcmNoRmllbGQnLHNlYXJjaEZpZWxkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEZpZWxkcykge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRmllbGRzLnB1c2goc2VhcmNoRmllbGQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgIH1cclxuXHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJObyBzZXNzaW9uIGRhdGEgZm91bmQgaW4gbG9jYWxTdG9yYWdlXCIpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyRmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZHQ/LmNsZWFyKCk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYClcclxuICB9XHJcblxyXG4gIGdldE9wZXJhdG9yTnVtYmVyKG9wZXJhdG9yOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZVtvcGVyYXRvci50b1VwcGVyQ2FzZSgpIGFzIGtleW9mIHR5cGVvZiBGaWx0ZXJPcGVyYXRvclR5cGVdID8/IC0xO1xyXG4gIH1cclxuICBpbmZlcklucHV0VHlwZSh2YWx1ZTogYW55KTogSW5wdXRUeXBlcyB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gSW5wdXRUeXBlcy5JTlRFR0VSO1xyXG4gICAgICB9IGVsc2UgaWYgKC9eXFxkK1xcLlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBJbnB1dFR5cGVzLkRFQ0lNQUxfSU5QVVQ7XHJcbiAgICAgIH0gZWxzZSBpZiAoL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIElucHV0VHlwZXMuREFURTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gSW5wdXRUeXBlcy5URVhUX0JPWDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIElucHV0VHlwZXMuVEVYVF9CT1g7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGxvYWRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlWydnZXQnXSgndGFibGUtc3RhdGUnKTtcclxuICB9XHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX2V4dHJhY3RGaWx0ZXJzKGV2ZW50OiBGaWx0ZXJNZXRhZGF0YVtdIHwgYW55KTogSUZpbHRlcmVkUmVxdWVzdFtdIHtcclxuICAgIGxldCBmaWx0ZXJzOiBJRmlsdGVyZWRSZXF1ZXN0W10gPSBbXTtcclxuICAgIGlmIChldmVudCAhPSBudWxsXHJcbiAgICAgICYmXHJcbiAgICAgIGV2ZW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbmN5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjb2wuY3VycmVuY3lPdGhlckNvZGU7XHJcbiAgICAgICAgaWYgKGNvbC50eXBlID09IHRoaXMuZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWSkge1xyXG4gICAgICAgICAgY3VycmVuY3kgPSB0aGlzLmFwcFNldHRpbmdzU2VydmljZS5hcHBTZXR0aW5ncy5kZXZpc2VTb2NpZXRlLmNvZGVEZXZpc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldmVudCAhPSBudWxsXHJcbiAgICAgICAgICAmJlxyXG4gICAgICAgICAgZXZlbnQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyID0gZXZlbnRbY29sLmZpZWxkXTtcclxuICAgICAgICAgIGlmICh0aGlzLl9ub3ROdWxsT3JVbmRlZmluZWQoZmlsdGVyKSkge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX25vdE51bGxPclVuZGVmaW5lZChpdGVtLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oaXRlbS52YWx1ZSwgJ3l5eXktTU0tZGQnKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBGaWx0ZXJIZWxwZXIuVG9PcGVyYXRvclR5cGUoaXRlbS5tYXRjaE1vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLCBmaWx0ZXJWYWx1ZTogaXRlbS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICwgcHJvcHJldHlOYW1lOiBjb2wuZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAsIGhlYWRlcjogY29sLmhlYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICwgdHlwZTogRmlsdGVySGVscGVyLlRvSW5wdXRUeXBlKGNvbC50eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgICwgY3VycmVuY3k6IGN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICAgICAgLCBudW1PZkRlY2ltYWw6IGNvbC5udW1PZkRlY2ltYWxcclxuICAgICAgICAgICAgICAgICAgICAsIGlzRnJhY3Rpb246IGNvbC5pc0ZyYWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgLCBjb21ib2JveExhYmVsOiBjb2wuY29tYm9MYWJlbFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIudmFsdWUsICd5eXl5LU1NLWRkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogRmlsdGVySGVscGVyLlRvT3BlcmF0b3JUeXBlKGZpbHRlci5tYXRjaE1vZGUpXHJcbiAgICAgICAgICAgICAgICAgICwgZmlsdGVyVmFsdWU6IGZpbHRlci52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAsIHByb3ByZXR5TmFtZTogY29sLmZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICwgaGVhZGVyOiBjb2wuaGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICwgdHlwZTogRmlsdGVySGVscGVyLlRvSW5wdXRUeXBlKGNvbC50eXBlKVxyXG4gICAgICAgICAgICAgICAgICAsIGN1cnJlbmN5OiBjdXJyZW5jeVxyXG4gICAgICAgICAgICAgICAgICAsIG51bU9mRGVjaW1hbDogY29sLm51bU9mRGVjaW1hbFxyXG4gICAgICAgICAgICAgICAgICAsIGlzRnJhY3Rpb246IGNvbC5pc0ZyYWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICwgY29tYm9ib3hMYWJlbDogY29sLmNvbWJvTGFiZWxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsdGVycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RTb3J0Q3JpdGVyaWFzKGxhenlMb2FkRXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCk6IHZvaWQge1xyXG4gICAgbGV0IHNvcnRNZXRhID0gdGhpcy5fdG9Tb3J0TWV0YShsYXp5TG9hZEV2ZW50KTtcclxuICAgIGlmIChzb3J0TWV0YSkge1xyXG4gICAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gR3JpZFNvcnRNb2RlLlNpbmdsZSkge1xyXG4gICAgICAgIHRoaXMuX2V4dHJhY3RTaW5nbGVTb3J0Q3JpdGVyaWEoc29ydE1ldGEpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5zb3J0TW9kZSA9PT0gR3JpZFNvcnRNb2RlLk11bHRpcGxlKSB7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFjdE11bHRpcGxlU29ydENyaXRlcmlhcyhzb3J0TWV0YSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFNpbmdsZVNvcnRDcml0ZXJpYShzb3JNZXRhOiBTb3J0TWV0YSkge1xyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5TaW5nbGUpIHtcclxuICAgICAgaWYgKHNvck1ldGEuZmllbGQpIHtcclxuICAgICAgICAvLyBjcmVhdGUgbmV3IHNvcnQgZWxlbWVudFxyXG4gICAgICAgIGxldCBzb3J0OiBJU29ydEJ5UHJvcHJldHkgPSB7XHJcbiAgICAgICAgICBwcm9wZXJ0eTogc29yTWV0YS5maWVsZCxcclxuICAgICAgICAgIG9yZGVyOiBzb3JNZXRhLm9yZGVyID09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zb3J0ID0gW3NvcnRdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgcHJvY2VzcyBcXCdTaW5nbGVTb3J0XFwnIHdoZW4gW3NvcnRNb2RlXSBpcyBcXCdtdWx0aXBsZVxcJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdE11bHRpcGxlU29ydENyaXRlcmlhcyhzb3J0TWV0YXM6IFNvcnRNZXRhW10pIHtcclxuICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuTXVsdGlwbGUpIHtcclxuICAgICAgaWYgKHNvcnRNZXRhcyAmJiBBcnJheS5pc0FycmF5KHNvcnRNZXRhcykpIHtcclxuICAgICAgICAvLyBjcmVhdGUgbmV3IHNvcnQgZWxlbWVudFxyXG4gICAgICAgIHRoaXMuX3NvcnQgPSBbXTtcclxuICAgICAgICB0aGlzLnNvcnRNZXRhcyA9IHNvcnRNZXRhcztcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdtZXRhICcsIHNvcnRNZXRhcylcclxuICAgICAgICBzb3J0TWV0YXMuZm9yRWFjaChzbSA9PiB7XHJcbiAgICAgICAgICBpZiAoc20uZmllbGQpIHtcclxuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBzb3J0IGVsZW1lbnRcclxuICAgICAgICAgICAgbGV0IHNvcnQ6IElTb3J0QnlQcm9wcmV0eSA9IHtcclxuICAgICAgICAgICAgICBwcm9wZXJ0eTogc20uZmllbGQsXHJcbiAgICAgICAgICAgICAgb3JkZXI6IHNtLm9yZGVyID09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL2FkZCB0aGUgbmV3IGVsZW1lbnQgdG8gX3NvcnRcclxuICAgICAgICAgICAgdGhpcy5fc29ydC5wdXNoKHNvcnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHByb2Nlc3MgXFwnTXVsdGlwbGVTb3J0XFwnIHdoZW4gW3NvcnRNb2RlXSBpcyBcXCdzaW5nbGVcXCcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25vdE51bGxPclVuZGVmaW5lZChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG9iaiAhPSBudWxsXHJcbiAgICAgICYmIG9iaiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0T25seVZpc2libGVTZWFyY2hGaWVsZHMoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uU2V0dGluZ3MgJiZcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25TZXR0aW5ncy5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRoaXMudGVtcFNlYXJjaEZpZWxkc1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRmllbGRzID0gdGhpcy50ZW1wU2VhcmNoRmllbGRzLmZpbHRlcihzZiA9PiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5wcmVzZW50YXRpb25TZXR0aW5ncz8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHNcclxuICAgICAgICAgIC5maW5kKHAgPT4gcC5ibG9ja05hbWUgPT09IHNmLmZpZWxkKTtcclxuXHJcbiAgICAgICAgcmV0dXJuICFjb25maWcgfHwgY29uZmlnLmlzQmxvY2tWaXNpYmxlID09PSB0cnVlIHx8IGNvbmZpZy5pc0Jsb2NrVmlzaWJsZSA9PT0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RTZWFyY2hCb3hGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VhcmNoQm94RmlsdGVycyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoRmllbGRzKSB7XHJcblxyXG4gICAgICB0aGlzLl9leHRyYWN0T25seVZpc2libGVTZWFyY2hGaWVsZHMoKTtcclxuXHJcbiAgICAgIHRoaXMuc2VhcmNoRmllbGRzLmZvckVhY2goKHNmOiBTZWFyY2hGaWVsZCkgPT4ge1xyXG4gICAgICAgIC8vaWYgKHNmLnZhbHVlICE9IHVuZGVmaW5lZCAmJiBzZi52YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHNmLm9wZXJhdG9yICE9IG51bGwgJiYgc2Yub3BlcmF0b3IgIT0gdW5kZWZpbmVkICYmIHNmLnZhbHVlICE9IHVuZGVmaW5lZCAmJiBzZi52YWx1ZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckJ5UHJvcGVydHk6IElGaWx0ZXJlZFJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBzZi5vcGVyYXRvclxyXG4gICAgICAgICAgICAsIGZpbHRlclZhbHVlOiBzZi52YWx1ZVxyXG4gICAgICAgICAgICAsIHByb3ByZXR5TmFtZTogc2YuZmllbGRcclxuICAgICAgICAgICAgLCBoZWFkZXI6IHNmLmxhYmVsVmFsdWVcclxuICAgICAgICAgICAgLCB0eXBlOiBzZi50eXBlXHJcbiAgICAgICAgICAgICwgY29tYm9ib3hMYWJlbDogc2YuY29tYm9ib3hMYWJlbFxyXG4gICAgICAgICAgICAsIGN1cnJlbmN5OiBzZi5jdXJyZW5jeVxyXG4gICAgICAgICAgICAsIGlzRnJhY3Rpb246IHNmLmlzRnJhY3Rpb25cclxuICAgICAgICAgICAgLCBudW1PZkRlY2ltYWw6IHNmLm51bU9mRGVjaW1hbFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX3NlYXJjaEJveEZpbHRlcnMucHVzaChmaWx0ZXJCeVByb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2Yub3BlcmF0b3IgPT0gdW5kZWZpbmVkIHx8IHNmLm9wZXJhdG9yID09IG51bGwpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdGhlIHNlYXJjaCBmaWVsZCB3aXRoIFtmaWVsZCA6ICR7c2YuZmllbGR9XSBoYXZlIG5vIG9wZXJhdG9yc2ApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb25lUGFnZWRSZXF1ZXN0KHJlcXVlc3Q6IElQYWdlZFJlcXVlc3QpOiBJUGFnZWRSZXF1ZXN0IHtcclxuICAgIGxldCBjbG9uZTogSVBhZ2VkUmVxdWVzdCA9IHtcclxuICAgICAgbWF4UmVzdWx0Q291bnQ6IHJlcXVlc3QubWF4UmVzdWx0Q291bnQsXHJcbiAgICAgIHNraXBDb3VudDogcmVxdWVzdC5za2lwQ291bnQsXHJcbiAgICAgIHNvcnRpbmc6IHJlcXVlc3Quc29ydGluZyxcclxuICAgICAga2V5d29yZDogcmVxdWVzdC5rZXl3b3JkLFxyXG4gICAgICBmaWx0ZXJzOiByZXF1ZXN0LmZpbHRlcnMsXHJcbiAgICAgIGdldEFsbERhdGE6IHJlcXVlc3QuZ2V0QWxsRGF0YSxcclxuICAgICAgc3VtbWFyaWVzOiByZXF1ZXN0LnN1bW1hcmllc1xyXG4gICAgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RIYXZlU3VtbWFyeVByb3BlcnRpZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICBsZXQgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgbGV0IGhhdmVTdW1tYXJ5Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmhhdmVTdW1tYXJ5ID09PSB0cnVlKTtcclxuICAgIGlmIChoYXZlU3VtbWFyeUNvbHVtbnMgJiYgaGF2ZVN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcHJvcGVydGllcyA9IGhhdmVTdW1tYXJ5Q29sdW1ucy5tYXAoYyA9PiBjLmZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcGVydGllcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RTdW1tYXJpZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wYWdlLnN1bW1hcmllcykge1xyXG4gICAgICB0aGlzLnBhZ2Uuc3VtbWFyaWVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgdGhpcy5zdW1tYXJpZXNbcy5wcm9wcmV0eV0gPSBzLnN1bW1hcnk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdE11bHRpU29ydE1ldGFJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NvcnQgPSBbXTtcclxuICAgIGlmICh0aGlzLnNvcnRNZXRhcykge1xyXG4gICAgICB0aGlzLnNvcnRNZXRhcy5mb3JFYWNoKChzOiBTb3J0TWV0YSkgPT4ge1xyXG4gICAgICAgIGxldCBzb3J0OiBJU29ydEJ5UHJvcHJldHkgPSB7XHJcbiAgICAgICAgICBwcm9wZXJ0eTogcy5maWVsZCxcclxuICAgICAgICAgIG9yZGVyOiBzLm9yZGVyID09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNvcnRJdGVtID0gdGhpcy5fc29ydC5maW5kKHMgPT4gcy5wcm9wZXJ0eSA9PSBzb3J0LnByb3BlcnR5KTtcclxuXHJcbiAgICAgICAgaWYgKHNvcnRJdGVtKSB7XHJcbiAgICAgICAgICBpZiAoc29ydEl0ZW0ub3JkZXIgIT0gc29ydC5vcmRlcikge1xyXG4gICAgICAgICAgICBzb3J0SXRlbS5vcmRlciA9IHNvcnQub3JkZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fc29ydC5wdXNoKHNvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b1NvcnRNZXRhKHRhYmxlTGF6eUxvYWRFdmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogYW55IHtcclxuICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuU2luZ2xlKSB7XHJcbiAgICAgIGlmICh0YWJsZUxhenlMb2FkRXZlbnQuc29ydEZpZWxkICYmIHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0T3JkZXIpIHtcclxuICAgICAgICBsZXQgc29ydE1ldGE6IElTb3J0TWV0YSA9IHtcclxuICAgICAgICAgIGZpZWxkOiB0YWJsZUxhenlMb2FkRXZlbnQuc29ydEZpZWxkLFxyXG4gICAgICAgICAgb3JkZXI6IHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0T3JkZXJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNvcnRNZXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuTXVsdGlwbGUpIHtcclxuICAgICAgaWYgKHRhYmxlTGF6eUxvYWRFdmVudC5tdWx0aVNvcnRNZXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlTGF6eUxvYWRFdmVudC5tdWx0aVNvcnRNZXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBbc29ydE1vZGVdIGhhdmUgYmVlbiBzZXQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dlbmVyYXRlRmlsdGVyc0h0bWxUZW1wbGF0ZSgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUgPSBcIlwiXHJcbiAgICAvL2V4Y2x1ZGUgdXNlbGVzcyBHcmlkIGZpbHRlciBcclxuICAgIHRoaXMuX2dyaWRIZWFkZXJGaWx0ZXJzID0gdGhpcy5fZXhjbHVkZVVzZWxlc3NHcmlkRmlsdGVyKHRoaXMuX2dyaWRIZWFkZXJGaWx0ZXJzKVxyXG5cclxuICAgIC8vYWRkIHNlYXJjaCBCb3ggZmlsdGVycyBodG1sXHJcbiAgICBpZiAodGhpcy5fc2VhcmNoQm94RmlsdGVycykge1xyXG4gICAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUgPSB0aGlzLl9odG1sVGVtcGxhdGVHZW5lcmF0b3JTZXJ2aWNlXHJcbiAgICAgICAgLmdlbmVyYXRlR3JpZEZpbHRlcnNUZW1wbGF0ZSh0aGlzLl9zZWFyY2hCb3hGaWx0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMuX2dyaWRIZWFkZXJGaWx0ZXJzID09PiBcIiwgdGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMpXHJcblxyXG4gICAgLy9hZGQgZ3JpZCBoZWFkZXIgZmlsdGVycyBodG1sXHJcbiAgICBpZiAodGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlICs9IHRoaXMuX2h0bWxUZW1wbGF0ZUdlbmVyYXRvclNlcnZpY2VcclxuICAgICAgICAuZ2VuZXJhdGVHcmlkRmlsdGVyc1RlbXBsYXRlKHRoaXMuX2dyaWRIZWFkZXJGaWx0ZXJzLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leGNsdWRlVXNlbGVzc0dyaWRGaWx0ZXIoZmlsdGVyczogSUZpbHRlcmVkUmVxdWVzdFtdKSB7XHJcbiAgICByZXR1cm4gZmlsdGVycy5maWx0ZXIoeCA9PlxyXG4gICAgICB4LmZpbHRlclZhbHVlICE9PSBudWxsICYmIHguZmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB4LmZpbHRlclZhbHVlICE9PSBcIlwiICYmIHgub3BlcmF0b3IgIT09IHVuZGVmaW5lZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4Y2x1ZGVVc2VsZXNzRmlsdGVycyhwYWdlZFJlcXVlc3Q6IElQYWdlZFJlcXVlc3QpOiBJUGFnZWRSZXF1ZXN0IHtcclxuICAgIGlmIChwYWdlZFJlcXVlc3QgJiYgcGFnZWRSZXF1ZXN0LmZpbHRlcnMpIHtcclxuICAgICAgcGFnZWRSZXF1ZXN0LmZpbHRlcnMgPSBwYWdlZFJlcXVlc3QuZmlsdGVycy5maWx0ZXIoZiA9PiBmLmZpbHRlclZhbHVlICE9IHVuZGVmaW5lZCAmJiBmLmZpbHRlclZhbHVlICE9IG51bGwpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFnZWRSZXF1ZXN0O1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdCEhLmdldEFsbERhdGEgPSB0cnVlXHJcbiAgICBpZiAodGhpcy5jcnVkU2VydmljZSAhPSBudWxsICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gdW5kZWZpbmVkICYmIHRoaXMuaXNHcmlkRGF0YVBhZ2VkSW5BcGkpIHtcclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5nZXRBbGxQYWdlZCh0aGlzLnBhZ2VkUmVxdWVzdCEhKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogSVBhZ2VkUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRJdGVtcyA9IEV4cG9ydEV4Y2VsSGVscGVyLnByZXByb2Nlc3NEYXRlRm9yRXhjZWwodmFsdWUuaXRlbXMpO1xyXG4gICAgICAgICAgICB2YWx1ZS5pdGVtcyA9IGZvcm1hdHRlZEl0ZW1zO1xyXG4gICAgICAgICAgICB0aGlzLmV4cG9ydERhdGFGcm9tQXBpVG9FeGNlbFNoZWV0KHZhbHVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wYWdlLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMucGFnZS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IHRoaXMucGFnZS5pdGVtcy5maWx0ZXIoKGNvbDogYW55KSA9PiAhY29sLmlzQnV0dG9uKTtcclxuICAgICAgZmlsdGVyZWREYXRhID0gRXhwb3J0RXhjZWxIZWxwZXIucHJlcHJvY2Vzc0RhdGVGb3JFeGNlbChmaWx0ZXJlZERhdGEpO1xyXG4gICAgICB0aGlzLnBhZ2UuaXRlbXMgPSBmaWx0ZXJlZERhdGFcclxuICAgICAgdGhpcy5leHBvcnREYXRhRnJvbUFwaVRvRXhjZWxTaGVldCh0aGlzLnBhZ2UpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnREYXRhRnJvbUFwaVRvRXhjZWxTaGVldCh2YWx1ZTogYW55KSB7XHJcbiAgICBpbXBvcnQoXCJ4bHN4XCIpLnRoZW4oeGxzeCA9PiB7XHJcbiAgICAgIGNvbnN0IHdvcmtib29rID0geGxzeC51dGlscy5ib29rX25ldygpO1xyXG4gICAgICBpZiAodGhpcy5wYWdlZFJlcXVlc3QhLmZpbHRlcnM/Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgY29uc3QgbWFwcGVkRmlsdGVycyA9IHRoaXMucGFnZWRSZXF1ZXN0IS5maWx0ZXJzPy5tYXAoZmlsdGVyID0+ICh7XHJcbiAgICAgICAgICBwcm9wZXJ0eTogZmlsdGVyLnByb3ByZXR5TmFtZSxcclxuICAgICAgICAgIG9wZXJhdG9yTmFtZTogdGhpcy5nZXRGaWx0ZXJPcGVyYXRvck5hbWUoZmlsdGVyLm9wZXJhdG9yKSxcclxuICAgICAgICAgIHZhbHVlOiBmaWx0ZXIuZmlsdGVyVmFsdWVcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHhsc3gudXRpbHMuanNvbl90b19zaGVldCg8YW55W10+bWFwcGVkRmlsdGVycylcclxuICAgICAgICB4bHN4LnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdvcmtib29rLCBmaWx0ZXJzLCAnRmlsdGVycycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWRDb2x1bW5zRmllbGRzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKHggPT4gIXguaXNCdXR0b24pLm1hcChjb2x1bW4gPT4gY29sdW1uLnRyYW5zbGF0ZWRIZWFkZXIhISlcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zRmllbGRzID0gc2VsZWN0ZWRDb2x1bW5zRmllbGRzLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09ICcnKVxyXG4gICAgICBjb25zdCB3b3Jrc2hlZXREYXRhID0gdmFsdWUuaXRlbXMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCByb3dEYXRhOiB7IFtoZWFkZXI6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgIHJvd0RhdGFbY29sLnRyYW5zbGF0ZWRIZWFkZXIhIV0gPSBpdGVtW2NvbC5maWVsZF07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJvd0RhdGE7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZFdvcmtzaGVldERhdGEgPSB0aGlzLnJlbW92ZU5vbkV4aXN0aW5nQ29sdW1ucyh3b3Jrc2hlZXREYXRhLCBzZWxlY3RlZENvbHVtbnNGaWVsZHMpXHJcbiAgICAgIGNvbnN0IHdvcmtzaGVldCA9IHhsc3gudXRpbHMuanNvbl90b19zaGVldChmaWx0ZXJlZFdvcmtzaGVldERhdGEpO1xyXG4gICAgICB4bHN4LnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdvcmtib29rLCB3b3Jrc2hlZXQsICdEYXRhJyk7XHJcbiAgICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSB4bHN4LndyaXRlKHdvcmtib29rLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XHJcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCBcImV4Y2VsXCIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBFWENFTF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xyXG4gICAgbGV0IEVYQ0VMX0VYVEVOU0lPTiA9ICcueGxzeCc7XHJcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgdHlwZTogRVhDRUxfVFlQRVxyXG4gICAgfSk7XHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgJ19leHBvcnRfJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgRVhDRUxfRVhURU5TSU9OKTtcclxuICB9XHJcblxyXG4gIGdldEZpbHRlck9wZXJhdG9yTmFtZShvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3JUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuRVFVQUw6IHJldHVybiAnRVFVQUwnO1xyXG4gICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZS5MRVNTT1JFUVVBTDogcmV0dXJuICdMRVNTIE9SIEVRVUFMJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuR1JFQVRFUk9SRVFVQUw6IHJldHVybiAnR1JFQVRFUiBPUiBFUVVBTCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlLkxFU1M6IHJldHVybiAnTEVTUyc7XHJcbiAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlLkdSRUFURVI6IHJldHVybiAnR1JFQVRFUic7XHJcbiAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlLk5PVEVRVUFMOiByZXR1cm4gJ05PVCBFUVVBTCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlLkNPTlRBSU5TOiByZXR1cm4gJ0NPTlRBSU5TJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdVTktOT1dOX09QRVJBVE9SJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU5vbkV4aXN0aW5nQ29sdW1ucyh3b3Jrc2hlZXREYXRhOiBhbnlbXSwgc2VsZWN0ZWRDb2x1bW5zRmllbGRzOiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiB3b3Jrc2hlZXREYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICBjb25zdCBuZXdSb3c6IGFueSA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiBzZWxlY3RlZENvbHVtbnNGaWVsZHMpIHtcclxuICAgICAgICBpZiAocm93Lmhhc093blByb3BlcnR5KGNvbCkpIHtcclxuICAgICAgICAgIG5ld1Jvd1tjb2xdID0gcm93W2NvbF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdSb3c7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUhlYWRlckZpbHRlcnMoKSB7XHJcbiAgICBpZiAodGhpcy5zaG93SGVhZGVyRmlsdGVycyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyXCI7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9IFwic2hvd19maWx0ZXJcIjtcclxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5mb3JtTmFtZX0tZmlsdGVyTW9kZWApXHJcbiAgICB9XHJcbiAgICBlbHNlIHsgLy90aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSBmYWxzZVxyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXItc2xhc2hcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJoaWRlX2ZpbHRlclwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSGVhZGVyRmlsdGVyc01vZGUoKSB7XHJcbiAgICBpZiAodGhpcy5kdCkge1xyXG4gICAgICB0aGlzLmR0LmNsZWFyKClcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5mb3JtTmFtZX0tZmlsdGVyTW9kZWAsIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXApXHJcbiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGVUb29sdGlwID09PSBcIm1lbnVfbW9kZVwiKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwibWVudVwiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZUljb24gPSBcInBpIHBpLWNoZWNrXCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcCA9IFwicm93X21vZGVcIjtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuZHQuZmlsdGVyc1tjb2wuZmllbGRdID0gW3sgdmFsdWU6IG51bGwsIG1hdGNoTW9kZTogdW5kZWZpbmVkIH1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmR0Ll9maWx0ZXIoKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlSGVhZGVyRmlsdGVyc01vZGUgPSBcInJvd1wiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZUljb24gPSBcInBpIHBpLWVsbGlwc2lzLXZcIjtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVUb29sdGlwID0gXCJtZW51X21vZGVcIjtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuZHQuZmlsdGVyc1tjb2wuZmllbGRdID0geyB2YWx1ZTogbnVsbCwgbWF0Y2hNb2RlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kdC5fZmlsdGVyKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SGVhZGVyQ2xhc3NDb2xvcihjb2x1bW5UeXBlOiBEaXNwbGF5VHlwZXMpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvbG9yZnVsID0gdGhpcy5sYXlvdXRIZWxwZXJTZXJ2aWNlLmxheW91dENvbmZpZ3VyYXRpb24uaXNDb2xvcmZ1bE1vZGVFbmFibGVkO1xyXG4gICAgaWYgKGNvbG9yZnVsID09PSB0cnVlKSB7XHJcbiAgICAgIGxldCBjb2xvckZvckludGVnZXJEaXNwbGF5ID0gRGlzcGxheVR5cGVDb2xvcnNbY29sdW1uVHlwZV0gfHwgJ3doaXRlLWdyaWQnO1xyXG4gICAgICByZXR1cm4gY29sb3JGb3JJbnRlZ2VyRGlzcGxheTtcclxuICAgIH0gZWxzZSByZXR1cm4gJ3doaXRlLWdyaWQnXHJcbiAgfVxyXG5cclxuICBnZXQgY29sb3JmdWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRIZWxwZXJTZXJ2aWNlLmxheW91dENvbmZpZ3VyYXRpb24uaXNDb2xvcmZ1bE1vZGVFbmFibGVkO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsQ29sdW1uc1Byb2Nlc3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZXZpc2VTb2NpZXRlTnVtT2ZEZWNpbWFsOiBudW1iZXIgPSB0aGlzLmFwcFNldHRpbmdzU2VydmljZS5hcHBTZXR0aW5ncy5kZXZpc2VTb2NpZXRlLm5vbWJyZURlY2ltYWxlcyA/PyBEZWZhdWx0U29jaWV0ZURldmlzZS5ub21icmVEZWNpbWFsZXM7XHJcblxyXG4gICAgdGhpcy5fY29sdW1ucy5mb3JFYWNoKChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgLy8gc2V0IGlzTnVtZXJpY1xyXG4gICAgICBjb2wuaXNOdW1lcmljID0gY29sLnR5cGUgIT0gdW5kZWZpbmVkICYmIGNvbC50eXBlICE9IG51bGwgJiYgKE51bWVyaWNEaXNwbGF5VHlwZXMuaW5kZXhPZihjb2wudHlwZSkgPj0gMCk7XHJcblxyXG4gICAgICAvLyBzZXQgZmlsdGVySW5wdXRUeXBlXHJcbiAgICAgIHN3aXRjaCAoY29sLnR5cGUpIHtcclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5EQVRFX0RJU1BMQVk6IHtcclxuICAgICAgICAgIGNvbC5maWx0ZXJJbnB1dFR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRBVEVUSU1FX0RJU1BMQVk6IHtcclxuICAgICAgICAgIGNvbC5maWx0ZXJJbnB1dFR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZOlxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLlJBVEVfRElTUExBWTpcclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVk6XHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfRElTUExBWTpcclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVk6IHtcclxuICAgICAgICAgIGNvbC5maWx0ZXJJbnB1dFR5cGUgPSAnbnVtZXJpYyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVk6IHtcclxuICAgICAgICAgIGNvbC5maWx0ZXJJbnB1dFR5cGUgPSAnYm9vbGVhbic7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIGNvbC5maWx0ZXJJbnB1dFR5cGUgPSAndGV4dCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZXQgbnVtT2ZEZWNpbWFsXHJcbiAgICAgIGlmIChjb2wubnVtT2ZEZWNpbWFsKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAoIWNvbC50eXBlKSB7XHJcbiAgICAgICAgY29sLm51bU9mRGVjaW1hbCA9IDA7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWNvbC5pc051bWVyaWMpIHtcclxuICAgICAgICBjb2wubnVtT2ZEZWNpbWFsID0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gRGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWSkge1xyXG4gICAgICAgIGNvbC5udW1PZkRlY2ltYWwgPSBkZXZpc2VTb2NpZXRlTnVtT2ZEZWNpbWFsO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gRGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWSkge1xyXG4gICAgICAgIGNvbC5udW1PZkRlY2ltYWwgPSAwO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKGl0ZW06IGFueSkge1xyXG4gICAgaWYgKGl0ZW0ubW9kZSA9PT0gXCJTRUFSQ0hcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FsZW5kYXJFdmVudENsaWNrLmVtaXQoaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVEYXRlUmFuZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHN0YXJ0ID0gdGhpcy5zZWFyY2hGaWVsZHM/LmZpbmQoeCA9PiB4LmZpZWxkID09PSB0aGlzLmNhbGVuZGVyU2NoZW1hPy5zdGFydClcclxuICAgIGxldCBlbmQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LmVuZClcclxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcclxuICAgICAgc3RhcnQudmFsdWUgPSBldmVudC5zdGFydDtcclxuICAgICAgZW5kLnZhbHVlID0gZXZlbnQuZW5kO1xyXG4gICAgICBzdGFydC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIGVuZC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxsU2VhcmNoSGFuZGxlcihldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5wYWdlZFJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3QubWF4UmVzdWx0Q291bnQgPSBldmVudC5tYXhSZXN1bHRDb3VudDtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3Quc2tpcENvdW50ID0gZXZlbnQuc2tpcENvdW50O1xyXG4gICAgICB0aGlzLnNlYXJjaCgpO1xyXG4gICAgICB0aGlzLnBhZ2UkLm5leHQoeyAuLi50aGlzLnBhZ2UgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJUaXRsZXModGl0bGVzOiBzdHJpbmdbXSwgaXRlbTogYW55KTogc3RyaW5nW10ge1xyXG4gICAgaWYgKCF0aXRsZXMgfHwgIWl0ZW0pXHJcbiAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBrZXkgPSBpdGVtLnVpZDtcclxuICAgIGlmICh0aGlzLnRpdGxlQ2FjaGUuaGFzKGtleSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGl0bGVDYWNoZS5nZXQoa2V5KSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXMgPSB0aXRsZXMubWFwKHQgPT4gaXRlbVt0XSkuZmlsdGVyKHYgPT4gISF2KTtcclxuICAgIHRoaXMudGl0bGVDYWNoZS5zZXQoa2V5LCByZXMpO1xyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIG9uU3RhdHVzRmlsdGVyQ2hhbmdlZChldnQ6IGFueSkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBldnQ7XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzPy5maWx0ZXIoc2YgPT4gc2YuZmllbGQgIT09IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzQ29sdW1uTmFtZSk7XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkcz8ucHVzaCh7XHJcbiAgICAgIGZpZWxkOiB0aGlzLmVudGl0eUluZm8/LnN0YXR1c0NvbHVtbk5hbWUgPz8gXCJcIixcclxuICAgICAgdmFsdWU6IGV2dCxcclxuICAgICAgbGFiZWxWYWx1ZTogJycsXHJcbiAgICAgIHR5cGU6IElucHV0VHlwZXMuQ09NQk9CT1gsXHJcbiAgICAgIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvclR5cGUuRVFVQUwsXHJcbiAgICAgIHN0eWxlQ2xhc3M6IFwiaGlkZGVuXCJcclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coXCJzZWFyY2ggZmllbGRzID0+XCIsIHRoaXMuc2VhcmNoRmllbGRzKVxyXG4gICAgdGhpcy50ZW1wU2VhcmNoRmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHMgPz8gdGhpcy50ZW1wU2VhcmNoRmllbGRzXHJcbiAgfVxyXG5cclxuICBvbldvcmtmbG93RXRhdEZpbHRlckNoYW5nZWQoZXZ0OiBhbnkpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gZXZ0O1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmlsdGVyKHNmID0+IHNmLmZpZWxkICE9PSBcIldvcmtmbG93RXRhdFwiKTtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzPy5wdXNoKHtcclxuICAgICAgZmllbGQ6IFwiV29ya2Zsb3dFdGF0XCIsXHJcbiAgICAgIHZhbHVlOiBldnQsXHJcbiAgICAgIGxhYmVsVmFsdWU6ICcnLFxyXG4gICAgICB0eXBlOiBJbnB1dFR5cGVzLkNPTUJPQk9YLFxyXG4gICAgICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3JUeXBlLkVRVUFMLFxyXG4gICAgICBzdHlsZUNsYXNzOiBcImhpZGRlblwiXHJcbiAgICB9KTtcclxuICAgIGNvbnNvbGUubG9nKFwic2VhcmNoIGZpZWxkcyA9PlwiLCB0aGlzLnNlYXJjaEZpZWxkcylcclxuICAgIHRoaXMudGVtcFNlYXJjaEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzID8/IHRoaXMudGVtcFNlYXJjaEZpZWxkc1xyXG4gIH1cclxuXHJcbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNldE1lc3NhZ2VQb3NpdGlvbihldmVudCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQsIGl0ZW06IGFueSkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcclxuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG5cclxuICAgICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZSwgZmlsZUV4dGVuc2lvbiwgaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwbG9hZEZpbGUoZmlsZTogRmlsZSwgZmlsZUV4dGVuc2lvbjogYW55LCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IFByb2dyZXNzRXZlbnQ8RmlsZVJlYWRlcj4pID0+IHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBlLnRhcmdldD8ucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xyXG4gICAgICBpZiAoIWFycmF5QnVmZmVyKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gdGhpcy5hcnJheUJ1ZmZlclRvQmFzZTY0KGFycmF5QnVmZmVyKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpY2hpZXJUb1NlbmQgPSBuZXcgRmljaGllcigpO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmRhdGVGaWNoaWVyID0gbmV3IERhdGUoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5ub20gPSBmaWxlLm5hbWU7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQub2JqZXQgPSAnJztcclxuICAgICAgZmljaGllclRvU2VuZC5ub21GaWNoaWVyQ29tcGxldCA9IGZpbGUubmFtZTtcclxuICAgICAgZmljaGllclRvU2VuZC5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmNvbnRlbnUgPSBiYXNlNjRDb250ZW50O1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLnRhYmxlTGllZSA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgZmljaGllclRvU2VuZC5wa2V5ID0gaXRlbS51aWQ/LnRvU3RyaW5nKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvblxyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZS5jcmVhdGUoZmljaGllclRvU2VuZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWNjZXNzKFwiZmljaGllcl9qb2ludFwiKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG4gIH1cclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ0VudGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmRyYWdFbnRlckNvdW50Kys7XHJcblxyXG4gICAgdGhpcy5pc0RyYWdPdmVyID0gdHJ1ZTtcclxuICAgIHRoaXMuc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0RyYWdPdmVyKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IGV2ZW50LmNsaWVudFggKyA1MCxcclxuICAgICAgICB5OiBldmVudC5jbGllbnRZICsgMzBcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmRyYWdFbnRlckNvdW50LS07XHJcblxyXG4gICAgaWYgKHRoaXMuZHJhZ0VudGVyQ291bnQgPD0gMCkge1xyXG4gICAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5kcmFnRW50ZXJDb3VudCA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1lc3NhZ2VQb3NpdGlvbihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2VQb3NpdGlvbiA9IHtcclxuICAgICAgeDogZXZlbnQuY2xpZW50WCArIDUwLFxyXG4gICAgICB5OiBldmVudC5jbGllbnRZICsgMzAsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuXHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiBbQHNsaWRlSW5PdXRdPVwic2hvd1NlYXJjaEZpZWxkID8gJ2luJyA6ICdvdXQnXCIgKm5nSWY9XCJzaG93R2xvYmFsU2VhcmNoXCI+XHJcbiAgICA8IS0tIFNlYXJjaEJveC8vIElmIGV4aXN0IC0tPlxyXG4gICAgPHRzaS1zZWFyY2gtYm94IFxyXG4gICAgICBbaXNSdGxNb2RlXT1cImlzUnRsTW9kZVwiIFxyXG4gICAgICBbKHNlYXJjaEZpZWxkcyldPVwic2VhcmNoRmllbGRzXCIgXHJcbiAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICBbZW50aXR5SW5mb109XCJlbnRpdHlJbmZvXCJcclxuICAgICAgW3N0YXR1c01ldGFkYXRhXT1cInN0YXR1c01ldGFkYXRhXCJcclxuICAgICAgW2Rlc2NyaW1pbmF0b3JWYWx1ZV09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICAoc2VhcmNoRmllbGRzQ2hhbmdlKT1cInNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlcygkZXZlbnQpXCIgXHJcbiAgICAgIChrZXl3b3JkVmFsdWVDaGFuZ2VkKT1cImtleXdvcmRWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNBcHBsaWVkKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAgICAgKHN0YXR1c0ZpbHRlckNoYW5nZWQpPVwib25TdGF0dXNGaWx0ZXJDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAod29ya2Zsb3dFdGF0RmlsdGVyQ2hhbmdlZCk9XCJvbldvcmtmbG93RXRhdEZpbHRlckNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgIChjb21ib0JveExhYmVsQ2hhbmdlZCk9XCJjb21ib0JveExhYmVsQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICA8L3RzaS1zZWFyY2gtYm94PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiX3Nob3dDYWxlbmRlclZpZXcgPT09IGZhbHNlICYmIF9zaG93Q2FyZFZpZXcgPT09IGZhbHNlICYmIF9zaG93S2FuYmFuVmlldyA9PT0gZmFsc2VcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgXHJcbiAgICA8cC10YWJsZSAjZHQgW2xhenldPVwiaXNHcmlkRGF0YVBhZ2VkSW5BcGlcIiBbbGF6eUxvYWRPbkluaXRdPVwic2VhcmNoT25Jbml0XCIgKG9uTGF6eUxvYWQpPVwibGF6eUxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIGRhdGFLZXk9XCJ7eyBrZXkgfX1cIiBbdG90YWxSZWNvcmRzXT1cInBhZ2UudG90YWxDb3VudFwiIFtsb2FkaW5nXT1cInBhZ2UubG9hZGluZ1wiIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIiBjb2x1bW5SZXNpemVNb2RlPVwiZXhwYW5kXCIgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCIgW3ZhbHVlXT1cInBhZ2UuaXRlbXNcIlxyXG4gICAgICBbcGFnaW5hdG9yXT1cInRydWVcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCIgc2Nyb2xsSGVpZ2h0PVwiNjAwcHhcIiBbKHJvd3MpXT1cInBhZ2UucGFnZVNpemVcIlxyXG4gICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImZpZWxkcygpXCIgW3RhYmxlU3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzUwcmVtJyB9XCJcclxuICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cInt7ICdTaG93aW5nJyB8IGxvY2FsaXplIH19IHt7Z2V0Rmlyc3RFbGVtZW50SW5kZXgoKX19IHt7XHJcbiAgICAgICAgJ3RvJyB8IGxvY2FsaXplXHJcbiAgICAgIH19IHtsYXN0fSB7eyAnb2YnIHwgbG9jYWxpemUgfX0gXHJcbiAgICAgIHt0b3RhbFJlY29yZHN9IHt7ICdlbnRyaWVzJyB8IGxvY2FsaXplIH19XCIgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMSwgMTAsIDI1LCA1MF1cIiBbc29ydE1vZGVdPVwic29ydE1vZGVcIlxyXG4gICAgICBbbXVsdGlTb3J0TWV0YV09XCJzb3J0TWV0YXNcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtZ3JpZGxpbmVzXCIgW3NlbGVjdEFsbF09XCJzZWxlY3RBbGxcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGlvblwiIChvblJvd1Vuc2VsZWN0KT1cIm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKVwiXHJcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiIChvblJvd1NlbGVjdCk9XCJvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKClcIj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPlxyXG4gICAgICAgICAgICB7eyBoZWFkZXIgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0ZpbHRlckJ1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImdyaWRfdG9nZ2xlX2hlYWRlcl9maWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1CdXR0b24gW2ljb25dPVwiZmlsdGVySWNvblwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFt0b29sdGlwVGV4dF09XCJmaWx0ZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgaG92ZXI6c2hhZG93LTYgcC1idXR0b24tcHJpbWFyeSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUhlYWRlckZpbHRlcnMoKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hlYWRlckZpbHRlcnNcIiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJncmlkX3RvZ2dsZV9oZWFkZXJfZmlsdGVyX21vZGVcIj5cclxuICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBbaWNvbl09XCJmaWx0ZXJNb2RlSWNvblwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiZmlsdGVyTW9kZVRvb2x0aXBcIiBbc3R5bGVDbGFzc109XCInbWwtMSBwLWJ1dHRvbi1wcmltYXJ5IHAtYnV0dG9uLWljb24tb25seSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUhlYWRlckZpbHRlcnNNb2RlKClcIj48L1RzaS1CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJncmlkX2NsZWFyX2ZpbHRlcl9idXR0b25cIj5cclxuICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBbdG9vbHRpcFRleHRdPVwiJ2ljb24tY2xlYXItZmlsdGVyJ1wiXHJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwibWwtMSBwLWVsZW1lbnQgaG92ZXI6c2hhZG93LTYgcC1idXR0b24tcHJpbWFyeSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJGaWx0ZXJzKClcIiBbaWNvblNyY109XCInYXNzZXRzL2xheW91dC9pbWFnZXMvaWNvbi9pY29uLWNsZWFyLWZpbHRlci5zdmcnXCI+XHJcbiAgICAgICAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RXhwb3J0QnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiZ3JpZF9leHBvcnRfYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInAtYnV0dG9uLWljb24gcGkgcGktZmlsZS1leGNlbFwiIChvbkNsaWNrKT1cImV4cG9ydEV4Y2VsKClcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1zdWNjZXNzIGhvdmVyOnNoYWRvdy02IG1sLTIgcC0xIHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiB0b29sdGlwVGV4dD1cIlhMU1wiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBjbGFzcz1cIm1sLTFcIiBbb3B0aW9uc109XCJjb2x1bW5zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbHVtbnNcIiBvcHRpb25MYWJlbD1cInRyYW5zbGF0ZWRIZWFkZXJcIlxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXNMYWJlbD1cInswfSB7eyAnY29sdW1uc19zZWxlY3RlZCcgfCBsb2NhbGl6ZSB9fVwiIFtzdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAnMTgwcHgnIH1cIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2Nob29zZV9jb2x1bW5zJyB8IGxvY2FsaXplIH19XCIgKG9uQ2hhbmdlKT1cIm9uU2VsZWN0ZWRDb2x1bW5zQ2hhbmdlKClcIj5cclxuICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSA8ZGl2PiAtLT5cclxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cInNob3dHbG9iYWxTZWFyY2hcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS1zZWFyY2hcIiAoY2xpY2spPVwic2VhcmNoKClcIj48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gZ2V0Q2hlY2tib3hTdHlsZSgpIDoge31cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnei1pbmRleC1jaGVja2JveCdcIiAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogLjNyZW0gIWltcG9ydGFudDsgd2lkdGg6IDNyZW07XCI+XHJcbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAjdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8IS0tIDx0aCBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPiAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIFtzdHlsZV09XCJjb2wuc3R5bGVcIiBwVG9vbHRpcD1cInt7IGNvbC50b29sVGlwVGV4dCB8IGxvY2FsaXplIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cIighY29sLmlzQnV0dG9uKSA/IGNvbC5maWVsZCA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIFtwUmVzaXphYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLmlzQnV0dG9uIHx8IGNvbC50eXBlID09PSBkaXNwbGF5VHlwZXMuSU1BR0VfRElTUExBWVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJjb2wuaXNCdXR0b25cIiBbcFJlb3JkZXJhYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLmlzQnV0dG9uXCIgcFJlb3JkZXJhYmxlQ29sdW1uXHJcbiAgICAgICAgICAgICAgcFJlc2l6YWJsZUNvbHVtbiBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wuaGVhZGVyQ29sdW1uU3R5bGUgOiB7fVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNvbHVtbl09XCJjb2wuaXNCdXR0b25cIiBcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICAgICAgICBnZXRIZWFkZXJDbGFzc0NvbG9yKGNvbC50eXBlKSxcclxuICAgICAgICAgICAgICAgIHBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnLFxyXG4gICAgICAgICAgICAgICAgKGNvbC5pc0J1dHRvbiApID8gJ3ctMXJlbScgOiAnJyxcclxuICAgICAgICAgICAgICAgIChjb2wuaXNCdXR0b24gfHwgY29sLnR5cGUgPT09IGRpc3BsYXlUeXBlcy5JTUFHRV9ESVNQTEFZKSA/ICdub24tcmVzaXphYmxlLWNvbHVtbicgOiAnJ1xyXG4gICAgICAgICAgICAgICAgXVwiXHJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gY29sLmhlYWRlckNvbHVtblN0eWxlIDoge31cIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInAtMCBtLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNvbCBwLTAgbS0wXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3ctMXJlbSc6IGNvbC5pc0J1dHRvbn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RJblNwZWNpZmllZENvbHVtbihjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjb2wtZml4ZWQgcC0wIG0tMFwiIHN0eWxlPVwid2lkdGg6IDFyZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIGNsYXNzPVwidy0xcmVtIG0tMCBwLTBcIiAqbmdJZj1cIm5vdEluU3BlY2lmaWVkQ29sdW1uKGNvbC5maWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZD1cInt7IGNvbC5maWVsZCB9fVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8dHIgKm5nSWY9XCJzaG93SGVhZGVyRmlsdGVyc1wiPlxyXG4gICAgICAgICAgPCEtLSA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPiAtLT5cclxuICAgICAgICAgIDx0aCBbbmdDbGFzc109XCJwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnJ1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbVwiPjwvdGg+XHJcbiAgICAgICAgICA8dGggc3R5bGU9XCJvdmVyZmxvdzogaW5oZXJpdFwiIHNjb3BlPVwiY29sXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBbdHlwZV09XCJjb2wuZmlsdGVySW5wdXRUeXBlXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFtkaXNwbGF5XT1cImNoYW5nZUhlYWRlckZpbHRlcnNNb2RlXCJcclxuICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29sLm51bU9mRGVjaW1hbFwiIFttYXhGcmFjdGlvbkRpZ2l0c109XCJjb2wubnVtT2ZEZWNpbWFsXCIgW3Nob3dCdXR0b25zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBbbWF0Y2hNb2RlXT1cImZpbHRlck1hdGNoTW9kZS5FUVVBTFNcIj5cclxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuXHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XHJcblxyXG4gICAgICAgIDwhLS0gQ0FTRSA6IG11bHRpcGxlIHNlbGVjdGlvbiAtLT5cclxuICAgICAgICA8dHIgW25nU3R5bGVdPVwiaXRlbS5jb2xvciAmJiBpdGVtLmNvbG9yICE9PSAnJyA/IHsnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0uY29sb3J9IDoge31cIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlID09IG11bHRpcGxlR3JpZFNlbGVjdGlvbk1vZGU7XHJcbiAgICAgICAgICAgIGVsc2Ugbm90TXVsdGlwbGVTZWxlY3Rpb25Nb2RlQmxvY2tcIiAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCIgKGRyb3ApPVwib25Ecm9wKCRldmVudCxpdGVtKVwiIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8dGQgW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gZ2V0Q2hlY2tib3hTdHlsZSgpIDoge31cIiBzdHlsZT1cInBhZGRpbmc6IC4zcmVtICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8IS0tIDx0ZCBjbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0KGl0ZW0pXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCIgKGNsaWNrKT1cImRlbGV0ZShpdGVtKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD4gLS0+XHJcbiAgICAgICAgICA8dGQgW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gY29sLm5nU3R5bGUgOiB7fVwiIFtuZ0NsYXNzXT1cInBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IG1pbi1jb250ZW50OyBtYXJnaW4tbGVmdDogLS41cmVtO1wiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0IC0tPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgIGVsc2UgY3VycmVuY3lPdGhlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktT3RoZXItSW5wdXQgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY3VycmVuY3lPdGhlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX09USEVSX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGF0ZVBpY2tlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheSBbY3VycmVuY3ldPVwiY29sLmN1cnJlbmN5Q29kZVwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRBVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkYXRlVGltZVBpY2tlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1EYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGVUaW1lUGlja2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5EQVRFVElNRV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBjaGVja0JveE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1EYXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIiBbc2hvd1RpbWVdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktQ2hlY2tCb3ggLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tCb3hPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGRlY2ltYWxPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUNoZWNrYm94LURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrYm94LURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1EZWNpbWFsLUlucHV0IC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlY2ltYWxPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaW50ZWdlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1EaXNwbGF5IFtmb3JtYXREZWNpbWFsXT1cImNvbC5mb3JtYXREZWNpbWFsXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW50ZWdlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSByYXRlT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUludGVnZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLVJhdGUtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF0ZU91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLlJBVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkaXNwbGF5TmVzdGVkUHJvcE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5IFtpc0ZyYWN0aW9uXT1cImNvbC5pc0ZyYWN0aW9uXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVJhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gZGlzcGxheS1uZXN0ZWQtcHJvcCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5TmVzdGVkUHJvcE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLk5FU1RFRF9QUk9QX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGlzcGxheVN0YXR1c0NvbG9yQmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1EaXNwbGF5LU5lc3RlZC1Qcm9wIFtzb3VyY2VVcmxdPVwiY29sLmRpc3BsYXlOZXN0ZWRQcm9wZXJ0eVNvdXJjZVVybFwiIFtpZF09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzcGxheVZhbHVlXT1cImNvbC5kaXNwbGF5TmVzdGVkUHJvcGVydHlsYWJlbEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1EaXNwbGF5LU5lc3RlZC1Qcm9wPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5U3RhdHVzQ29sb3JCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzU3RhdHVzQ29sb3I7IGVsc2UgZGlzcGxheVN0YXR1c1ZhbHVlQ29sdW1uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSByb3VuZGVkIHRleHQtd2hpdGUgdGV4dC1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtW2NvbC5maWVsZF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNWYWx1ZUNvbHVtbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2x1bW5WYWx1ZTsgZWxzZSBkaXNwbGF5U3RhdHVzQ29sdW1uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPHAtdGFnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0YXR1c0NvbG9yKGl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLXRhZz4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ICYmIGdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3RvcnkoaXRlbVtjb2wuZmllbGRdKSBhcyBvcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwib3B0LmNvbG9ySGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIm9wdC5jb2xvckhleCA/ICd3aGl0ZScgOiAnYmxhY2snXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtYmxhY2sgYmctd2hpdGUnOiAhb3B0LmNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtd2hpdGUnOiBvcHQuY29sb3JIZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeSAmJiAhZ2V0U3RhdHVzT3B0aW9uRm9yU3RhdHVzSGlzdG9yeShpdGVtW2NvbC5maWVsZF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBkaXNwbGF5LXN0YXR1cy1jb2x1bW4gLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c0NvbHVtbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2x1bW47IGVsc2UgZGlzcGxheUJ1dHRvbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxwLXRhZyBcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdGF0dXNDb2xvcihpdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvcC10YWc+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YSAmJiBnZXRTdGF0dXNPcHRpb24oaXRlbVtjb2wuZmllbGRdKSBhcyBvcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJsaWdodGVuQ29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRSZWFkYWJsZVRleHRDb2xvcihvcHQuY29sb3JIZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctdG9wXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctYm90dG9tXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhICYmICFnZXRTdGF0dXNPcHRpb24oaXRlbVtjb2wuZmllbGRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBkaXNwbGF5LW5lc3RlZC1wcm9wIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlCdXR0b25CbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzQnV0dG9uOyBlbHNlIGRpc3BsYXlUZXh0RXllQmxvY2tcIiA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPFRzaS1CdXR0b24gIFtzdHlsZUNsYXNzXT1cImNvbC5zdHlsZUNsYXNzXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInt7IGNvbC5idXR0b25JY29uIH19XCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgW3Rvb2x0aXBUZXh0XT1cImNvbC50b29sVGlwVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiY29sLmJ1dHRvbkxhYmVsID8gY29sLmJ1dHRvbkxhYmVsIDogaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZChpdGVtLCBjb2wuZmllbGQpXCIgPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBkaXNwbGF5LXRleHQtZXllIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlUZXh0RXllQmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuVEVYVF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGRlZmF1bHRUZXh0T3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktVGV4dC1Cb3ggLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHRPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0RyYWdPdmVyXCIgW25nU3R5bGVdPVwieyBsZWZ0OiBtZXNzYWdlUG9zaXRpb24ueCArICdweCcsIHRvcDogbWVzc2FnZVBvc2l0aW9uLnkgKyAncHgnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJhZy1tZXNzYWdlIGN1cnNvci1mb2xsb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBcIkpvaW50dXJlXCIgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICA8IS0tIENBU0UgOiBzaW5nbGUgb3Igbm9uZSBzZWxlY3Rpb24gLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RNdWx0aXBsZVNlbGVjdGlvbk1vZGVCbG9jaz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDx0ciBbbmdTdHlsZV09XCJpdGVtLmNvbG9yICYmIGl0ZW0uY29sb3IgIT09ICcnID8geydiYWNrZ3JvdW5kLWNvbG9yJzogaXRlbS5jb2xvcn0gOiB7fVwiXHJcbiAgICAgICAgICAgICAgW3BTZWxlY3RhYmxlUm93XT1cIml0ZW1cIiBbcFNlbGVjdGFibGVSb3dJbmRleF09XCJpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gPHRkIGNsYXNzPVwicC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGVuY2lsXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXQoaXRlbSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlKGl0ZW0pXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPiAtLT5cclxuICAgICAgICAgICAgICA8dGQgW25nU3R5bGVdPVwicGFnZS5pdGVtcy5sZW5ndGggPiAwID8gY29sLm5nU3R5bGUgOiB7fVwiIHN0eWxlPVwiaGVpZ2h0OiBtaW4tY29udGVudDtcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgJ25vLXotaW5kZXgnOiBwYWdlLmxvYWRpbmcsXHJcbiAgICAgICAgICAgICAgICAgICd3LTFyZW0nOiBjb2wuaXNCdXR0b25cclxuICAgICAgICAgICAgICAgIH1cIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gW25nQ2xhc3NdPVwicGFnZS5sb2FkaW5nID8gJ25vLXotaW5kZXgnIDogJydcIiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjdXJyZW5jeU90aGVyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW5jeU90aGVyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBkYXRlUGlja2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgW2N1cnJlbmN5XT1cImNvbC5jdXJyZW5jeUNvZGVcIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1EYXRlLVBpY2tlciAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBkYXRlVGltZVBpY2tlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1EYXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1EYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1EYXRlLVBpY2tlciAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVRpbWVQaWNrZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRBVEVUSU1FX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNoZWNrQm94T3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURhdGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiIFtzaG93VGltZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUNoZWNrQm94IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja0JveE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGVjaW1hbE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1DaGVja2JveC1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tib3gtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlY2ltYWxPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW50ZWdlck91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLURpc3BsYXkgW2Zvcm1hdERlY2ltYWxdPVwiY29sLmZvcm1hdERlY2ltYWxcIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1EZWNpbWFsLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1JbnRlZ2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlZ2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJhdGVPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlci1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktUmF0ZS1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF0ZU91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBkaXNwbGF5TmVzdGVkUHJvcE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1SYXRlLURpc3BsYXkgW2lzRnJhY3Rpb25dPVwiY29sLmlzRnJhY3Rpb25cIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLVJhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gZGlzcGxheS1uZXN0ZWQtcHJvcCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheU5lc3RlZFByb3BPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLk5FU1RFRF9QUk9QX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRpc3BsYXlTdGF0dXNDb2xvckJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1EaXNwbGF5LU5lc3RlZC1Qcm9wIFtzb3VyY2VVcmxdPVwiY29sLmRpc3BsYXlOZXN0ZWRQcm9wZXJ0eVNvdXJjZVVybFwiIFtpZF09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlWYWx1ZV09XCJjb2wuZGlzcGxheU5lc3RlZFByb3BlcnR5bGFiZWxGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURpc3BsYXktTmVzdGVkLVByb3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNDb2xvckJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzU3RhdHVzQ29sb3I7IGVsc2UgZGlzcGxheVN0YXR1c1ZhbHVlQ29sdW1uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgcm91bmRlZCB0ZXh0LXdoaXRlIHRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbVtjb2wuZmllbGRdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5U3RhdHVzVmFsdWVDb2x1bW5CbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzU3RhdHVzQ29sdW1uVmFsdWU7IGVsc2UgZGlzcGxheVN0YXR1c0NvbHVtbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxwLXRhZyBcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdGF0dXNDb2xvcihpdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvcC10YWc+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeSAmJiBnZXRTdGF0dXNPcHRpb25Gb3JTdGF0dXNIaXN0b3J5KGl0ZW1bY29sLmZpZWxkXSkgYXMgb3B0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIm9wdC5jb2xvckhleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJvcHQuY29sb3JIZXggPyAnd2hpdGUnIDogJ2JsYWNrJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LWJsYWNrIGJnLXdoaXRlJzogIW9wdC5jb2xvckhleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LXdoaXRlJzogb3B0LmNvbG9ySGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0LnRyYW5zbGF0ZWRMYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3RvcnkgJiYgIWdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3RvcnkoaXRlbVtjb2wuZmllbGRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5LXN0YXR1cy1wcm9wIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5U3RhdHVzQ29sdW1uQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2x1bW47IGVsc2UgZGlzcGxheUJ1dHRvbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tPHAtdGFnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdGF0dXNDb2xvcihpdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3AtdGFnPi0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YSAmJiBnZXRTdGF0dXNPcHRpb24oaXRlbVtjb2wuZmllbGRdKSBhcyBvcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzLWJhZGdlIGZvbnQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRSZWFkYWJsZVRleHRDb2xvcihvcHQuY29sb3JIZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy10b3BdPVwiJzAuMXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbV09XCInMC4xcmVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhICYmICAhZ2V0U3RhdHVzT3B0aW9uKGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzLWJhZGdlIGZvbnQtYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5LW5lc3RlZC1wcm9wIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5QnV0dG9uQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNCdXR0b247IGVsc2UgZGlzcGxheUltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wubmdTdHlsZSA6IHt9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPFRzaS1CdXR0b24gW3N0eWxlQ2xhc3NdPVwiY29sLnN0eWxlQ2xhc3NcIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInt7IGNvbC5idXR0b25JY29uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgW3Rvb2x0aXBUZXh0XT1cImNvbC50b29sVGlwVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkKGl0ZW0sIGNvbC5maWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjb2wuYnV0dG9uTGFiZWwgPyBjb2wuYnV0dG9uTGFiZWwgOiBpdGVtW2NvbC5maWVsZF1cIj48L1RzaS1CdXR0b24+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gZGlzcGxheS1pbWFnZSAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheUltYWdlPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklNQUdFX0RJU1BMQVk7IGVsc2UgZGlzcGxheVRleHRFeWVCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTNyZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0c2ktaW1hZ2UtZGlzcGxheSBbaGVhZGVyVGl0bGVzXT1cImdldEhlYWRlclRpdGxlcyhjb2wuaGVhZGVyVGl0bGVzLCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1JvdW5kZWRdPVwiY29sLmlzUm91bmRlZFwiIFtzcmNdPVwiaXRlbVtjb2wuZmllbGRdXCIgW2FsdF09XCJjb2wuaGVhZGVyIHx8ICdpbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInMTAwJSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHNpLWltYWdlLWRpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXktdGV4dC1leWUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlUZXh0RXllQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5URVhUX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRlZmF1bHRUZXh0T3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcGkgcGktZXllXCIgKGNsaWNrKT1cImV5ZUNsaWNrZWQoaXRlbVtjb2wuZmllbGRdKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHRydW5jYXRlU3RyaW5nKGl0ZW1bY29sLmZpZWxkXSwgNTApIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktVGV4dC1Cb3ggLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZXh0T3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09IG11bHRpcGxlR3JpZFNlbGVjdGlvbk1vZGVcIj48L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicHItMFwiICpuZ0Zvcj1cImxldCBjb2wgb2Ygc2VsZWN0ZWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuc2hvd1N1bW1hcnlcIj5cclxuICAgICAgICAgICAgICA8IS0tIENVUlJFTkNZX1NPQ0lFVEVfRElTUExBWSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBJTlRFR0VSX0RJU1BMQVkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlci1EaXNwbGF5IFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUkFURV9ESVNQTEFZIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVJhdGUtRGlzcGxheSBbaXNGcmFjdGlvbl09XCJjb2wuaXNGcmFjdGlvbiA/PyBmYWxzZVwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gREVDSU1BTF9ESVNQTEFZIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSBbZm9ybWF0RGVjaW1hbF09XCJjb2wuZm9ybWF0RGVjaW1hbFwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgW251bU9mRGVjaW1hbF09XCJjb2wubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1EZWNpbWFsLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfRElTUExBWVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5IFtjdXJyZW5jeV09XCJjb2wuY3VycmVuY3lPdGhlckNvZGVcIiBbaW5wdXREYXRhXT1cImdldFN1bW1hcnkoY29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIFxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic3VtbWFyeVwiPlxyXG4gICAgICAgIHt7IHBhZ2UudG90YWxDb3VudCB9fSB7eyBcInJlY29yZHNfbGFiZWxcIiB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2xvcmZ1bFwiPlxyXG4gICAgICAgICAgPHNwYW4+VmlldyBHcmlkPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+fCBTZWFyY2hPbkluaXQgOiB7eyBzZWFyY2hPbkluaXQgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj58IFBhZ2luYXRpb24gSW4gQXBpIDoge3sgaXNHcmlkRGF0YVBhZ2VkSW5BcGkgfX08L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRhYmxlPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIl9zaG93Q2FsZW5kZXJWaWV3ID09PSB0cnVlXCIgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgIDx0c2ktY2FsZW5kZXIgW3NjaGVtYV09XCJjYWxlbmRlclNjaGVtYVwiIFtldmVudHNEYXRhXT1cInBhZ2UuaXRlbXNcIiBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIlxyXG4gICAgICAoZGF0ZVJhbmdlQ2hhbmdlKT1cImhhbmRsZURhdGVSYW5nZUNoYW5nZSgkZXZlbnQpXCIgKGV2ZW50Q2xpY2spPVwiaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKCRldmVudClcIj48L3RzaS1jYWxlbmRlcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIl9zaG93Q2FyZFZpZXcgPT09IHRydWVcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPFRzaS1jYXJkLWxpc3QgW2NhcmRCdXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIiBbaWRdPVwiaWRcIiAoYnV0dG9uQ2xpY2tlZCk9XCJidXR0b25Db2x1bW5DbGlja2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIFtwYWdlJF09XCJwYWdlJFwiIFtwYWdlXT1cInBhZ2VcIiAoY2FsbFNlYXJjaCk9XCJjYWxsU2VhcmNoSGFuZGxlcigkZXZlbnQpXCI+XHJcbiAgICA8L1RzaS1jYXJkLWxpc3Q+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJfc2hvd0thbmJhblZpZXcgPT09IHRydWVcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPFRzaS1rYW5iYW4gW2NhcmRCdXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIiBbaWRdPVwiaWRcIiAoYnV0dG9uQ2xpY2tlZCk9XCJidXR0b25Db2x1bW5DbGlja2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIFtwYWdlJF09XCJwYWdlJFwiIFtwYWdlXT1cInBhZ2VcIiAoY2FsbFNlYXJjaCk9XCJjYWxsU2VhcmNoSGFuZGxlcigkZXZlbnQpXCIgW2NydWRTZXJ2aWNlXT1cImNydWRTZXJ2aWNlXCI+XHJcbiAgICA8L1RzaS1rYW5iYW4+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
1707
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRixPQUFPLEVBQWlCLFNBQVMsRUFBdUIsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZUFBZSxFQUF1RCxNQUFNLGFBQWEsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkwsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbEUsT0FBTyxFQUFpRCxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxLQUFL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Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDTyxZQUFZO3NCQUF4QixLQUFLO2dCQWNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBYUcsYUFBYTtzQkFBckIsS0FBSztnQkFDTyxZQUFZO3NCQUF4QixLQUFLO2dCQVlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBV0csY0FBYztzQkFBdEIsS0FBSztnQkFHTyxZQUFZO3NCQUF4QixLQUFLO2dCQUtPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBYUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFPSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlck1ldGFkYXRhLCBQcmltZU5HQ29uZmlnLCBTb3J0TWV0YSwgVGFibGVTdGF0ZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGFibGUsIFRhYmxlSGVhZGVyQ2hlY2tib3gsIFRhYmxlTGF6eUxvYWRFdmVudCwgVGFibGVTZWxlY3RBbGxDaGFuZ2VFdmVudCB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRW50aXR5SW5mbyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbnRpdHktaW5mby9lbnRpdHktaW5mbyc7XHJcbmltcG9ydCB7IERpc3BsYXlUeXBlQ29sb3JzLCBEaXNwbGF5VHlwZXMsIEZpbHRlck9wZXJhdG9yVHlwZSwgR3JpZFNlbGVjdGlvbk1vZGUsIEdyaWRTb3J0TW9kZSwgSW5wdXRUeXBlcywgTW9kYWxTaXplRW51bSwgTnVtZXJpY0Rpc3BsYXlUeXBlcywgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBEZWZhdWx0U29jaWV0ZURldmlzZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy90c2ktY29uc3RzJztcclxuaW1wb3J0IHsgSUZpbHRlcmVkUmVxdWVzdCwgSVNvcnRCeVByb3ByZXR5LCBJUGFnZWRSZXF1ZXN0LCBJR3JpZENvbmZpZ3VyYXRpb24sIElQYWdlLCBHcmlkQ29sdW1uLCBCdXR0b25DbGlja1Jlc3VsdCwgSVNvcnRNZXRhLCBJUGFnZWRSZXNwb25zZSwgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTZWFyY2hGaWVsZCwgUHJlc2VudGF0aW9uU2V0dGluZywgRXZlbnRTY2hlbWEsIEZpY2hpZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb24vYXBwLmxheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgcnRsTW9kZUtleXMgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMvbG9jYWxzLmNvbnN0JztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgQ3J1ZEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYmFzZS9jcnVkLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0bWxUZW1wbGF0ZUdlbmVyYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9nZW5lcmF0b3IvaHRtbC10ZW1wbGF0ZS1nZW5lcmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xheW91dC9sYXlvdXQtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy9hcHAtc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9lcnJvci1yZXNwb25zZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXJIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9maWx0ZXItaGVscGVyJztcclxuaW1wb3J0IHsgcHJpbWVuZ0xvY2FsZUFyIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWhlbHBlcnMvcHJpbWVuZy10cmFuc2xhdGUtY29uZmlnJztcclxuaW1wb3J0IHsgRXhwb3J0RXhjZWxIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9leHBvcnQtZXhjZWwuaGVscGVyJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IG9wZW5Uc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvbW9kYWwtb3Blbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IFN0YXR1c0NvbG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0YXR1cy9zdGF0dXMtY29sb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpY2hpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmljaGllci9maWNoaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3N0YXR1cy9jb2xvci1zdGF0dXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUc2ktR2VuZXJpYy1HcmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3NsaWRlSW5PdXQnLCBbXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHtcclxuICAgICAgICBoZWlnaHQ6ICcqJyxcclxuICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJ291dCcsIHN0eWxlKHtcclxuICAgICAgICBoZWlnaHQ6ICcwcHgnLFxyXG4gICAgICAgIG9wYWNpdHk6IDAsXHJcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjBweCknXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignaW4gPD0+IG91dCcsIGFuaW1hdGUoJzYwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpJykpXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgY3VkQ29tcG9uZW50OiBhbnk7XHJcbiAgQElucHV0KCkgbW9kYWxTaXplOiBhbnk7XHJcbiAgQElucHV0KCkgZW50aXR5SW5mbzogRW50aXR5SW5mbyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBmaWx0ZXJNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGU7XHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uO1xyXG4gIGlzQXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgYXN5bmMgZXllQ2xpY2tlZCh0ZXh0OiBhbnkpIHtcclxuXHJcbiAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6IHRleHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHRcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3BlblRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgY29uZik7XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKHZhbD86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cnVuY2F0ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gNTApOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gbGltaXQgPyB2YWx1ZS5zdWJzdHIoMCwgbGltaXQpICsgJy4uLicgOiB2YWx1ZTtcclxuICB9XHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBAVmlld0NoaWxkKFwiZHRcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBkdDogVGFibGUgfCB1bmRlZmluZWQ7XHJcbiAgQFZpZXdDaGlsZChcInRhYmxlSGVhZGVyQ2hlY2tib3hcIikgdGFibGVIZWFkZXJDaGVja2JveDogVGFibGVIZWFkZXJDaGVja2JveCB8IHVuZGVmaW5lZFxyXG4gIGZpcnN0OiBudW1iZXIgPSAwO1xyXG4gIHJvd3MgPSAxO1xyXG4gIGRpc3BsYXlUeXBlcyA9IERpc3BsYXlUeXBlcztcclxuICBrZXl3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgc3VtbWFyaWVzOiBEaWN0aW9uYXJ5PHN0cmluZywgbnVtYmVyPiA9IHt9O1xyXG4gIGlzUnRsTW9kZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gIG1lc3NhZ2VQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG4gIHByaXZhdGUgZHJhZ0VudGVyQ291bnQgPSAwO1xyXG4gIC8vIHByaXZhdGUgX3NlYXJjaEJveEZpbHRlcnM6IEFycmF5PEZpbHRlckJ5UHJvcHJldHk+ID0gW107XHJcbiAgLy8gcHJpdmF0ZSBfZ3JpZEhlYWRlckZpbHRlcnM6IEFycmF5PEZpbHRlckJ5UHJvcHJldHk+ID0gW107XHJcbiAgcHJpdmF0ZSBfc2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfc2VhcmNoQm94RmlsdGVyczogQXJyYXk8SUZpbHRlcmVkUmVxdWVzdD4gPSBbXTtcclxuICBwcml2YXRlIF9ncmlkSGVhZGVyRmlsdGVyczogQXJyYXk8SUZpbHRlcmVkUmVxdWVzdD4gPSBbXTtcclxuICBwcml2YXRlIF9zb3J0OiBBcnJheTxJU29ydEJ5UHJvcHJldHk+ID0gW107XHJcbiAgc29ydE1ldGFzOiBTb3J0TWV0YVtdID0gW107XHJcbiAgc2VsZWN0ZWRGdWxsSXRlbXM/OiBBcnJheTxhbnk+ID0gW107XHJcbiAgc2VsZWN0aW9uOiBhbnk7XHJcbiAgbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZSA9IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlO1xyXG4gIHByaXZhdGUgX2RpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XHJcbiAgLy9qc29uU3RyaW5nTGF5b3V0OiBzdHJpbmcgPSAne1wiZmlyc3RcIjowLFwicm93c1wiOjEwLFwibXVsdGlTb3J0TWV0YVwiOltdLFwiY29sdW1uV2lkdGhzXCI6XCJcIixcInRhYmxlV2lkdGhcIjpcIjExODhweFwiLFwiY29sdW1uT3JkZXJcIjpbXCJcIl19JztcclxuICBsYXRlc3RGaWx0ZXJzPzogSUZpbHRlcmVkUmVxdWVzdFtdO1xyXG5cclxuICAvLyBwcml2YXRlIF9wYWdlIDogSVBhZ2U8YW55PiA9IHtcclxuICAvLyAgIGl0ZW1zOiBbXSxcclxuICAvLyAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgLy8gICBzdW1tYXJpZXM6IFtdLFxyXG4gIC8vICAgdG90YWxQYWdlczogMCxcclxuICAvLyAgIHBhZ2VOdW1iZXI6IDEsXHJcbiAgLy8gICBwYWdlU2l6ZTogMTAsXHJcbiAgLy8gICBsb2FkaW5nOiBmYWxzZVxyXG4gIC8vIH07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBmb3JtTmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuICBASW5wdXQoKSBwYWdlZFJlcXVlc3Q/OiBJUGFnZWRSZXF1ZXN0O1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb24/OiBJR3JpZENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgLypzZXQqLyBwYWdlOiBJUGFnZTxhbnk+ID0ge1xyXG4gICAgaXRlbXM6IFtdLFxyXG4gICAgdG90YWxDb3VudDogMCxcclxuICAgIHN1bW1hcmllczogW10sXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgcGFnZU51bWJlcjogMSxcclxuICAgIHBhZ2VTaXplOiAxMCxcclxuICAgIGxvYWRpbmc6IGZhbHNlXHJcbiAgfTtcclxuICAvLyAobmV3UGFnZTogSVBhZ2U8YW55Pil7XHJcbiAgLy8gICBpZihuZXdQYWdlKXtcclxuICAvLyAgICAgdGhpcy5fcGFnZSA9IG5ld1BhZ2U7XHJcbiAgLy8gICAgIHRoaXMuX2V4dHJhY3RTdW1tYXJpZXMoKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcbiAgLy8gZ2V0IHBhZ2UoKXtcclxuICAvLyAgIHJldHVybiB0aGlzLl9wYWdlO1xyXG4gIC8vIH1cclxuICBASW5wdXQoKSBrZXk6IHN0cmluZyA9ICd1aWQnO1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdGVtcENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgdGVtcFNlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+ID0gW107XHJcbiAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGNvbHVtbnModmFsdWU6IEFycmF5PEdyaWRDb2x1bW4+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmluaXRpYWxDb2x1bW5zUHJvY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8R3JpZENvbHVtbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQgPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc1NlYXJjaEJ1dHRvbkRpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWRcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlcmVkQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgZ3JpZERhdGE/OiBBcnJheTxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBpc1RhYmxlTG9hZGluZz86IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIHBhcmVudDogYW55O1xyXG5cclxuICBASW5wdXQoKSBzaG93U2VhcmNoQm94OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0FjdGlvbkNvbHVtbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dIZWFkZXJGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0ZpbHRlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaXNHcmlkRGF0YVBhZ2VkSW5BcGk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhlYWRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgU2hvd0ZpbHRlckNvbHVtbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dJbXBvcnRFeHBvcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjcnVkU2VydmljZT86IENydWRCYXNlU2VydmljZTxhbnksIGFueSwgYW55LCBhbnk+O1xyXG4gIEBJbnB1dCgpIHNldCBzZWFyY2hGaWVsZHModmFsdWU6IEFycmF5PFNlYXJjaEZpZWxkPiB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIC8vcmVzZXRcclxuICAgICAgdGhpcy5fc2VhcmNoRmllbGRzID0gW107XHJcblxyXG4gICAgICAvL2luaXQgdXNpbmcgdmFsdWVcclxuICAgICAgdGhpcy5fc2VhcmNoRmllbGRzID0gRmlsdGVySGVscGVyLmluaXRTZWFyY2hGaWVsZHModmFsdWUpO1xyXG4gICAgICB0aGlzLmluaXRTZWFyY2hPbkluaXQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNlYXJjaEZpZWxkcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hGaWVsZHM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzb3J0TW9kZTogR3JpZFNvcnRNb2RlIHwgYW55ID0gR3JpZFNvcnRNb2RlLk11bHRpcGxlO1xyXG4gIEBJbnB1dCgpIGZpbHRlcnNIdG1sVGVtcGxhdGU/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHByZXNlbnRhdGlvblNldHRpbmdzPzogUHJlc2VudGF0aW9uU2V0dGluZ1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RLZXlPbmx5OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlOiBHcmlkU2VsZWN0aW9uTW9kZSB8IGFueSA9IEdyaWRTZWxlY3Rpb25Nb2RlLk5vbmU7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlOiBHcmlkU2VsZWN0aW9uTW9kZSB8IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhPy5pc0FkdmFuY2VkU2VhcmNoICYmIHRoaXMuY29uZmlnPy5kYXRhPy5zZWxlY3Rpb25Nb2RlKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB0aGlzLmNvbmZpZz8uZGF0YT8uc2VsZWN0aW9uTW9kZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gdmFsdWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3Rpb25Nb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgQElucHV0KCkgc2V0IHNlYXJjaE9uSW5pdCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaE9uSW5pdCA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaE9uSW5pdCA9IHZhbHVlXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzZWFyY2hPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRTZWFyY2hPbkluaXQoKVxyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaE9uSW5pdFxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2hvd0dsb2JhbFNlYXJjaDogYm9vbGVhbiA9IHRydWVcclxuICBASW5wdXQoKSBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZVxyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hGaWVsZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJvdGVjdGVkIF9zaG93Q2FsZW5kZXJWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2V0IHNob3dDYWxlbmRlclZpZXcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dDYWxlbmRlclZpZXcgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9zaG93Q2FsZW5kZXJWaWV3ID09PSBmYWxzZSkge1xyXG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LnN0YXJ0KVxyXG4gICAgICBsZXQgZW5kID0gdGhpcy5zZWFyY2hGaWVsZHM/LmZpbmQoeCA9PiB4LmZpZWxkID09PSB0aGlzLmNhbGVuZGVyU2NoZW1hPy5lbmQpXHJcbiAgICAgIGlmIChzdGFydCAmJiBlbmQpIHtcclxuICAgICAgICBzdGFydC5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGVuZC5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGNhbGVuZGVyU2NoZW1hOiBFdmVudFNjaGVtYSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIF9zaG93Q2FyZFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXQgc2hvd0NhcmRWaWV3KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93Q2FyZFZpZXcgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfc2hvd0thbmJhblZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXQgc2hvd0thbmJhblZpZXcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dLYW5iYW5WaWV3ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBwYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuXHJcbiAgQElucHV0KCkgY2hlY2tlZEJ5RmllbGQ6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX3NlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RBbGwodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3NlbGVjdEFsbCA9IHZhbHVlO1xyXG5cclxuICAgIGNvbnN0IHN5bnRoZXRpY0V2ZW50ID0gbmV3IEV2ZW50KCdzZWxlY3RBbGxDaGFuZ2UnKTtcclxuICAgIGNvbnN0IGV2ZW50OiBUYWJsZVNlbGVjdEFsbENoYW5nZUV2ZW50ID0ge1xyXG4gICAgICBjaGVja2VkOiB2YWx1ZSxcclxuICAgICAgb3JpZ2luYWxFdmVudDogc3ludGhldGljRXZlbnQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgdGFyZ2V0QnVzaW5lc3NDbGFzcz86IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nXHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0QWxsKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fc2VsZWN0QWxsOyB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBlZGl0Um93OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVSb3c6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGxvYWQ6IEV2ZW50RW1pdHRlcjx7IHJlcXVlc3Q6IElQYWdlZFJlcXVlc3QsIGlzRm9yQ2FsZW5kYXI6IGJvb2xlYW4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVxdWVzdDogSVBhZ2VkUmVxdWVzdCwgaXNGb3JDYWxlbmRhcjogYm9vbGVhbiB9PigpO1xyXG4gIEBPdXRwdXQoKSBidXR0b25Db2x1bW5DbGlja2VkOiBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4oKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+KCk7XHJcbiAgQE91dHB1dCgpIGNhbGVuZGFyRXZlbnRDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc3RhdHVzRmlsdGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqL1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuICAvLyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgLy8gICBpZihjaGFuZ2VzWydwYWdlJ10pe1xyXG4gIC8vICAgICB0aGlzLl9leHRyYWN0U3VtbWFyaWVzKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgcHJvdGVjdGVkIGZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlclwiO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJUb29sdGlwID0gXCJzaG93X2ZpbHRlclwiO1xyXG5cclxuICBmaWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktZmlsdGVyXCI7XHJcbiAgZmlsdGVyTW9kZVRvb2x0aXAgPSBcIm1lbnVfbW9kZVwiO1xyXG4gIGNoYW5nZUhlYWRlckZpbHRlcnNNb2RlOiBzdHJpbmcgPSBcIm1lbnVcIjtcclxuXHJcbiAgaXRlbXM/OiBhbnlbXTtcclxuICBfc2VhcmNoT25Jbml0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgc2VsZWN0ZWRDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICBpbXBvcnRhbnRDb2x1bW5zID0gWydjb25zdWx0JywgJ2VkaXQnLCAnZGVsZXRlJywgJ3VwbG9hZCcsICdkb3dubG9hZCcsICdpbmZvJywgJ25vdGVzJywgJ2R1cGxpY2F0ZScsJ2Zvcm0nXTtcclxuICBpc0ZpcnN0TG9hZE9mUGFnZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgdGl0bGVDYWNoZSA9IG5ldyBNYXA8YW55LCBzdHJpbmdbXT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zdGF0dXNDb2xvclNlcnZpY2U6IFN0YXR1c0NvbG9yU2VydmljZSxcclxuICAgIHB1YmxpYyBfZmljaGllclNlcnZpY2U6IEZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZTogSHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcml2YXRlIGxheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJpbWVuZ0NvbmZpZzogUHJpbWVOR0NvbmZpZyxcclxuICAgIHByaXZhdGUgYXBwU2V0dGluZ3NTZXJ2aWNlOiBBcHBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIF9yZWY/OiBEeW5hbWljRGlhbG9nUmVmLFxyXG5cclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGxldCBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYClcclxuICAgIGlmIChmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2UgIT0gdW5kZWZpbmVkICYmIGZpbHRlck1vZGVUb29sdGlwRnJvbUxvY2FsU3RvcmFnZSAhPSBudWxsXHJcbiAgICAgICYmIGZpbHRlck1vZGVUb29sdGlwRnJvbUxvY2FsU3RvcmFnZSAhPSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBmaWx0ZXJNb2RlVG9vbHRpcEZyb21Mb2NhbFN0b3JhZ2VcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IHRydWVcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXItc2xhc2hcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJoaWRlX2ZpbHRlclwiO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJNb2RlVG9vbHRpcCA9PT0gXCJtZW51X21vZGVcIikge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZUljb24gPSBcInBpIHBpLWNoZWNrXCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcCA9IFwicm93X21vZGVcIjtcclxuICAgICAgICB0aGlzLmNoYW5nZUhlYWRlckZpbHRlcnNNb2RlID0gXCJtZW51XCJcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNoYW5nZUhlYWRlckZpbHRlcnNNb2RlID0gXCJyb3dcIjtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVJY29uID0gXCJwaSBwaS1lbGxpcHNpcy12XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcCA9IFwibWVudV9tb2RlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gZmFsc2VcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJzaG93X2ZpbHRlclwiO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGxldCBsYW5ndWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShydGxNb2RlS2V5cy5ydGxNb2RlRW5hYmxlZCk7XHJcblxyXG4gICAgaWYgKGxhbmd1ZSAmJiBKU09OLnBhcnNlKGxhbmd1ZSkpIHtcclxuICAgICAgdGhpcy5pc0FyID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4udHJhbnNsYXRlZEhlYWRlciA9IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGNvbHVtbi5oZWFkZXIhISkpXHJcblxyXG4gICAgdGhpcy5fdGVtcENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgdGhpcy50ZW1wU2VhcmNoRmllbGRzID0gdGhpcy5fc2VhcmNoRmllbGRzID8/IFtdO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT5cclxuICAgICAgIXRoaXMuaW1wb3J0YW50Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uZmllbGQpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2x1bW5zIHx8IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb2x1bW4ub3JkZXIgPSBpbmRleDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaXNSdGxNb2RlRW5hYmxlZCgpXHJcbiAgICB0aGlzLl9ydGxNb2RlU3Vic2NyaWJlKClcclxuICAgIHRoaXMucHJvY2Vzc1N0aWNreUNvbHVtbnMoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydlbnRpdHlJbmZvJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmVudGl0eUluZm8pIHtcclxuXHJcbiAgICAgIC8vICAgIGlmIChjaGFuZ2VzWydlbnRpdHlJbmZvJ10gJiYgdGhpcy5lbnRpdHlJbmZvKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlFbnRpdHlJbmZvKHRoaXMuZW50aXR5SW5mbyk7XHJcbiAgICAgIHRoaXMubG9hZFN0YXR1c0NvbG9ycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd0YXJnZXRCdXNpbmVzc0NsYXNzJ10gJiYgdGhpcy50YXJnZXRCdXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMubG9hZFN0YXR1c0NvbG9yc0RldGFpbHNCeUJ1c2luZXNzQ2xhc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXR1c01ldGFkYXRhPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuICBzdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3Rvcnk/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBnZXRTdGF0dXNPcHRpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzTWV0YWRhdGE/Lm9wdGlvbnMuZmluZChvID0+IG8uc3RhdHVzVmFsdWUgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3Rvcnkoc3RhdHVzVmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5Py5vcHRpb25zLmZpbmQobyA9PiBvLnRyYW5zbGF0ZWRMYWJlbCA9PT0gc3RhdHVzVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFN0YXR1c0NvbG9yc0RldGFpbHNCeUJ1c2luZXNzQ2xhc3MoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMudGFyZ2V0QnVzaW5lc3NDbGFzcyAhPSB1bmRlZmluZWQgJiYgdGhpcy50YXJnZXRCdXNpbmVzc0NsYXNzICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5fc3RhdHVzQ29sb3JTZXJ2aWNlLmdldFN0YXR1c0NvbG9yRGV0YWlsc0J5QnVzaW5lc3NDbGFzc05hbWUodGhpcy50YXJnZXRCdXNpbmVzc0NsYXNzKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgc3RhdHVzIGNvbG9ycycsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkU3RhdHVzQ29sb3JzKCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuYnVzaW5lc3NDbGFzcyE7XHJcbiAgICBjb25zdCBzdGF0dXNFbnVtTmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzRW51bU5hbWUhO1xyXG5cclxuICAgIGlmICghY2xhc3NOYW1lIHx8ICFzdGF0dXNFbnVtTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgY2xhc3NOYW1lIG9yIHN0YXR1c0VudW1OYW1lIGZvciBlbnRpdHlJbmZvLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuX3N0YXR1c0NvbG9yU2VydmljZS5nZXRTdGF0dXNDb2xvckRldGFpbHMoY2xhc3NOYW1lLCBzdGF0dXNFbnVtTmFtZSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogU3RhdHVzTWV0YWRhdGFSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c01ldGFkYXRhID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgc3RhdHVzIGNvbG9ycycsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdGF0dXMgY29sb3JzOicsIGVycik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsIHBlcmNlbnQ6IG51bWJlciA9IDcwKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJyc7XHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcblxyXG4gICAgbGV0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBsZXQgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGxldCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIHIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IociArICgyNTUgLSByKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGcgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoZyArICgyNTUgLSBnKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoYiArICgyNTUgLSBiKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuXHJcbiAgICBjb25zdCBuZXdIZXggPVxyXG4gICAgICAnIycgK1xyXG4gICAgICBbciwgZywgYl1cclxuICAgICAgICAubWFwKHggPT4geC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSlcclxuICAgICAgICAuam9pbignJyk7XHJcblxyXG4gICAgcmV0dXJuIG5ld0hleDtcclxuICB9XHJcblxyXG4gIGdldFJlYWRhYmxlVGV4dENvbG9yKGhleDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJ2JsYWNrJztcclxuXHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcclxuXHJcbiAgICByZXR1cm4gYnJpZ2h0bmVzcyA+IDIzMCA/ICdibGFjaycgOiBgIyR7aGV4fWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RW50aXR5SW5mbyhlbnRpdHlJbmZvOiBFbnRpdHlJbmZvKSB7XHJcbiAgICBpZiAoIWVudGl0eUluZm8/LnN0YXR1c0NvbHVtbk5hbWUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzdGF0dXNDb2x1bW5OYW1lID0gZW50aXR5SW5mby5zdGF0dXNDb2x1bW5OYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgY29uc3Qgc3RhdHVzQ29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoXHJcbiAgICAgIGMgPT4gYy5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBzdGF0dXNDb2x1bW5OYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghc3RhdHVzQ29sdW1uKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgU3RhdHVzIGNvbHVtbiBcIiR7ZW50aXR5SW5mby5zdGF0dXNDb2x1bW5OYW1lfVwiIG5vdCBmb3VuZC5gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXR1c0NvbHVtbi5pc1N0YXR1c0NvbHVtbiA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgYnV0dG9uQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmlzQnV0dG9uKTtcclxuICAgIGNvbnN0IG90aGVyQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5pc0J1dHRvbiAmJiBjICE9PSBzdGF0dXNDb2x1bW4pO1xyXG5cclxuICAgIGNvbnN0IG1heEJ1dHRvbk9yZGVyID1cclxuICAgICAgYnV0dG9uQ29sdW1ucy5yZWR1Y2UoKG0sIGMpID0+IE1hdGgubWF4KG0sIGMub3JkZXIgPz8gMCksIDApIHx8IDA7XHJcblxyXG4gICAgc3RhdHVzQ29sdW1uLm9yZGVyID0gbWF4QnV0dG9uT3JkZXIgKyAxO1xyXG5cclxuICAgIGNvbnN0IHJlb3JkZXJlZCA9IFtcclxuICAgICAgLi4uYnV0dG9uQ29sdW1ucy5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApKSxcclxuICAgICAgc3RhdHVzQ29sdW1uLFxyXG4gICAgICAuLi5vdGhlckNvbHVtbnMuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKSksXHJcbiAgICBdO1xyXG5cclxuICAgIHJlb3JkZXJlZC5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiAoY29sLm9yZGVyID0gaW5kZXgpKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFsuLi5yZW9yZGVyZWRdO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFN0YXRlKCkge1xyXG4gICAgbGV0IHN0YXRlOiBUYWJsZVN0YXRlID0ge307XHJcblxyXG4gICAgaWYgKCF0aGlzLmR0KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmR0LnJlc2l6YWJsZUNvbHVtbnMpIHtcclxuICAgICAgdGhpcy5kdC5zYXZlQ29sdW1uV2lkdGhzKHN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmR0LnNhdmVDb2x1bW5PcmRlcihzdGF0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXRlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdG9yZVN0YXRlKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgbGV0IHN0YXRlOiBUYWJsZVN0YXRlID0gSlNPTi5wYXJzZShjb25maWd1cmF0aW9uKVxyXG4gICAgaWYgKHRoaXMuZHQpIHtcclxuXHJcbiAgICAgIHRoaXMuZHQuY29sdW1uV2lkdGhzU3RhdGUgPSBzdGF0ZS5jb2x1bW5XaWR0aHM7XHJcbiAgICAgIHRoaXMuZHQudGFibGVXaWR0aFN0YXRlID0gc3RhdGUudGFibGVXaWR0aDtcclxuXHJcbiAgICAgIGxldCBjb2x1bW5PcmRlciA9IHN0YXRlLmNvbHVtbk9yZGVyO1xyXG5cclxuICAgICAgaWYgKGNvbHVtbk9yZGVyKSB7XHJcbiAgICAgICAgbGV0IHJlb3JkZXJlZENvbHVtbnMgPSB0aGlzLmdldFJlb3JkZXJlZENvbHVtbnMoY29sdW1uT3JkZXIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcmVvcmRlcmVkQ29sdW1ucztcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSByZW9yZGVyZWRDb2x1bW5zO1xyXG4gICAgICAgIHRoaXMuc29ydENvbHVtbnMoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkQ29sdW1uc0NoYW5nZSgpIHtcclxuICAgIHRoaXMuc29ydENvbHVtbnMoKVxyXG4gIH1cclxuXHJcbiAgc29ydENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4QSA9IHRoaXMuaW1wb3J0YW50Q29sdW1ucy5pbmRleE9mKGEuZmllbGQpO1xyXG4gICAgICBjb25zdCBpbmRleEIgPSB0aGlzLmltcG9ydGFudENvbHVtbnMuaW5kZXhPZihiLmZpZWxkKTtcclxuXHJcbiAgICAgIGlmIChpbmRleEEgPT09IC0xICYmIGluZGV4QiA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW5kZXhBID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbmRleEIgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBpbmRleEEgLSBpbmRleEI7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wub3JkZXIgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5vcmRlciEgLSBiLm9yZGVyISksXHJcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLm9yZGVyID09PSB1bmRlZmluZWQpLFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGdldFJlb3JkZXJlZENvbHVtbnMoY29sdW1uT3JkZXI6IHN0cmluZ1tdKTogYW55W10ge1xyXG4gICAgbGV0IHJlb3JkZXJlZENvbHVtbnM6IGFueVtdID0gW107XHJcblxyXG4gICAgY29sdW1uT3JkZXIubWFwKChrZXkpID0+IHtcclxuICAgICAgbGV0IGNvbCA9IHRoaXMuZmluZENvbHVtbkJ5S2V5KGtleSk7XHJcbiAgICAgIGlmIChjb2wpIHtcclxuICAgICAgICByZW9yZGVyZWRDb2x1bW5zLnB1c2goY29sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlb3JkZXJlZENvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBmaW5kQ29sdW1uQnlLZXkoa2V5OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLl90ZW1wQ29sdW1ucykge1xyXG4gICAgICBmb3IgKGxldCBjb2wgb2YgdGhpcy5fdGVtcENvbHVtbnMpIHtcclxuICAgICAgICBpZiAoY29sLmhlYWRlciA9PT0ga2V5IHx8IGNvbC5maWVsZCA9PT0ga2V5KSByZXR1cm4gY29sO1xyXG4gICAgICAgIGVsc2UgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXNldFNlbGVjdGVkQ29sdW1ucyhjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGxldCBzdGF0ZTogVGFibGVTdGF0ZSA9IEpTT04ucGFyc2UoY29uZmlndXJhdGlvbilcclxuICAgIGlmICh0aGlzLmR0KSB7XHJcblxyXG4gICAgICB0aGlzLmR0LmNvbHVtbldpZHRoc1N0YXRlID0gc3RhdGUuY29sdW1uV2lkdGhzO1xyXG4gICAgICB0aGlzLmR0LnRhYmxlV2lkdGhTdGF0ZSA9IHN0YXRlLnRhYmxlV2lkdGg7XHJcblxyXG4gICAgICBsZXQgY29sdW1uT3JkZXIgPSBzdGF0ZS5jb2x1bW5PcmRlcjtcclxuXHJcbiAgICAgIGlmIChjb2x1bW5PcmRlcikge1xyXG4gICAgICAgIGxldCByZW9yZGVyZWRDb2x1bW5zID0gdGhpcy5nZXRSZW9yZGVyZWRDb2x1bW5zKGNvbHVtbk9yZGVyKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHJlb3JkZXJlZENvbHVtbnM7XHJcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuX3RlbXBDb2x1bW5zO1xyXG4gICAgICAgIHRoaXMuc29ydENvbHVtbnMoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBub3RJblNwZWNpZmllZENvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5pbXBvcnRhbnRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1N0aWNreUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoY29sLmlzRnJvemVuKSB7XHJcbiAgICAgICAgY29sLm5nU3R5bGUgPSB0aGlzLmdldFRoZVN0eWxlKGNvbClcclxuICAgICAgICBjb2wuaGVhZGVyQ29sdW1uU3R5bGUgPSB7IC4uLmNvbC5uZ1N0eWxlLCB6SW5kZXg6IDEwMDAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tib3hTdHlsZSgpIHtcclxuICAgIGlmICh0aGlzLmlzUnRsTW9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHJpZ2h0OiBgMHB4YCxcclxuICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxyXG4gICAgICAgIFwid2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgICBcIm1pbi13aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBsZWZ0OiBgMHB4YCxcclxuICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxyXG4gICAgICAgIFwid2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgICBcIm1pbi13aWR0aFwiOiAnMi41cmVtICFpbXBvcnRhbnQnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VGhlU3R5bGUoY29sdW1uOiBHcmlkQ29sdW1uKTogYW55IHtcclxuXHJcbiAgICBpZiAoIWNvbHVtbi5pc0Zyb3plbikge1xyXG4gICAgICByZXR1cm4ge31cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmlzRnJvemVuID09IHRydWUpIHtcclxuICAgICAgbGV0IGVsZW1lbnRQb3NpdGlvbiA9IDA7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT0gdGhpcy5tdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlKSB7XHJcbiAgICAgICAgZWxlbWVudFBvc2l0aW9uID0gMzAgKyBlbGVtZW50UG9zaXRpb24gKyAoY29sdW1uLm9yZGVyID8/IDApICogNjA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZWxlbWVudFBvc2l0aW9uID0gZWxlbWVudFBvc2l0aW9uICsgKChjb2x1bW4ub3JkZXIgPz8gMCkgKiAxLjg1KSAqIDIwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzUnRsTW9kZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByaWdodDogYCR7ZWxlbWVudFBvc2l0aW9ufXB4YCxcclxuICAgICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcclxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcclxuICAgICAgICAgIFwid2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgICAgIFwibWluLXdpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbGVmdDogYCR7ZWxlbWVudFBvc2l0aW9ufXB4YCxcclxuICAgICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcclxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcclxuICAgICAgICAgIFwid2lkdGhcIjogJzIuNXJlbSAhaW1wb3J0YW50JyxcclxuICAgICAgICAgIFwibWluLXdpZHRoXCI6ICcyLjVyZW0gIWltcG9ydGFudCcsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1J0bE1vZGVFbmFibGVkKCkge1xyXG4gICAgaWYgKHRoaXMuX2xheW91dFNlcnZpY2UuaXNSdGxNb2RlRW5hYmxlZCgpKSB7XHJcbiAgICAgIHRoaXMuaXNSdGxNb2RlID0gdHJ1ZVxyXG4gICAgICB0aGlzLnVwZGF0ZVByaW1lTkdUYWJsZUZpbHRlcnMoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQcmltZU5HVGFibGVGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5fcHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbihwcmltZW5nTG9jYWxlQXIpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9ydGxNb2RlU3Vic2NyaWJlKCkge1xyXG4gICAgdGhpcy5fbGF5b3V0U2VydmljZS5lbmFibGVSdGxNb2RlU3ViamVjdCQuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuaXNSdGxNb2RlID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlcyhzZWFyY2hGaWVsZFZhbHVlczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZC5lbWl0KHNlYXJjaEZpZWxkVmFsdWVzKVxyXG4gIH1cclxuXHJcbiAgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2UgPyB0aGlzLnBhZ2UucGFnZU51bWJlciA9PT0gKHRoaXMucGFnZS50b3RhbENvdW50IC0gdGhpcy5wYWdlLnBhZ2VTaXplKSA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBpc0ZpcnN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2UgPyB0aGlzLnBhZ2UucGFnZU51bWJlciA9PT0gMCA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBlZGl0KGl0ZW06IGFueSkge1xyXG4gICAgdGhpcy5lZGl0Um93LmVtaXQoaXRlbVt0aGlzLmtleV0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKGl0ZW06IGFueSkge1xyXG4gICAgdGhpcy5kZWxldGVSb3cuZW1pdChpdGVtW3RoaXMua2V5XSk7XHJcbiAgfVxyXG5cclxuICBsYXp5TG9hZChldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5wYWdlZFJlcXVlc3QgPT0gbnVsbCAmJiB0aGlzLnBhZ2VkUmVxdWVzdCA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7fTtcclxuICAgIH1cclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0LnNraXBDb3VudCA9IGV2ZW50LmZpcnN0ID09IDEgPyAwIDogZXZlbnQuZmlyc3Q7XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdC5tYXhSZXN1bHRDb3VudCA9IGV2ZW50LnJvd3M7XHJcbiAgICBpZiAodGhpcy5mb3JtTmFtZSAmJiB0aGlzLmlzRmlyc3RMb2FkT2ZQYWdlKSB7XHJcbiAgICAgIHRoaXMuaXNGaXJzdExvYWRPZlBhZ2UgPSBmYWxzZVxyXG4gICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZm9ybU5hbWUpO1xyXG4gICAgICBpZiAoc3RvcmVkVmFsdWUpIHtcclxuICAgICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbk9yZGVyOiBzdHJpbmdbXSA9IHNlc3Npb25EYXRhLmNvbHVtbk9yZGVyO1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoczogc3RyaW5nW10gPSBzZXNzaW9uRGF0YS5jb2x1bW5XaWR0aHMuc3BsaXQoJywnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFNlbGVjdGVkQ29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgICAgICAgY29sdW1uT3JkZXIuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvbHVtbldpZHRoc1tpbmRleF07XHJcblxyXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdDb2x1bW5JbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmZpZWxkID09PSBmaWVsZCk7XHJcbiAgICAgICAgICBpZiAoZXhpc3RpbmdDb2x1bW5JbmRleCAhPT0gLTEpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2V4aXN0aW5nQ29sdW1uSW5kZXhdLndpZHRoID0gY29sdW1uV2lkdGg7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRTZWxlY3RlZENvbHVtbnMucHVzaCh0aGlzLnNlbGVjdGVkQ29sdW1uc1tleGlzdGluZ0NvbHVtbkluZGV4XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdXBkYXRlZFNlbGVjdGVkQ29sdW1ucztcclxuXHJcbiAgICAgICAgaWYgKChzZXNzaW9uRGF0YS5tdWx0aVNvcnRNZXRhICYmIHNlc3Npb25EYXRhLm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkgfHwgKHNlc3Npb25EYXRhLmZpbHRlcnMpKSB7XHJcbiAgICAgICAgICBpZiAoc2Vzc2lvbkRhdGEubXVsdGlTb3J0TWV0YSAmJiBzZXNzaW9uRGF0YS5tdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2Vzc2lvbkRhdGEubXVsdGlTb3J0TWV0YS5mb3JFYWNoKChtZXRhOiB7IGZpZWxkOiBhbnk7IG9yZGVyOiBhbnk7IH0pID0+IHtcclxuICAgICAgICAgICAgICBsZXQgc29ydE1ldGE6IFNvcnRNZXRhID0ge1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IG1ldGEuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBvcmRlcjogbWV0YS5vcmRlclxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBldmVudC5zb3J0RmllbGQgPSBtZXRhLmZpZWxkO1xyXG4gICAgICAgICAgICAgIGV2ZW50LnNvcnRPcmRlciA9IG1ldGEub3JkZXI7XHJcbiAgICAgICAgICAgICAgZXZlbnQubXVsdGlTb3J0TWV0YT8ucHVzaChzb3J0TWV0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHNlc3Npb25EYXRhLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgbGV0IGZpbHRlcnM6IHsgW3M6IHN0cmluZ106IEZpbHRlck1ldGFkYXRhIH0gPSB7fTtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc2Vzc2lvbkRhdGEuZmlsdGVycykuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmlsdGVyTWV0YWRhdGFdKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTWV0YWRhdGFWYWx1ZSA9IGZpbHRlck1ldGFkYXRhIGFzIFtGaWx0ZXJNZXRhZGF0YV07XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJNZXRhZGF0YVZhbHVlWzBdICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzW2ZpZWxkTmFtZV0gPSBmaWx0ZXJNZXRhZGF0YVZhbHVlWzBdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBBc3NpZ24gdGhlIGZpbHRlcnMgdG8gdGhlIGV2ZW50XHJcbiAgICAgICAgICAgIGV2ZW50LmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgICAgICAvLyBldmVudC5maWx0ZXJzID0gT2JqZWN0LmVudHJpZXMoc2Vzc2lvbkRhdGEuZmlsdGVycykucmVkdWNlKChmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YSB9LCBbZmllbGROYW1lLCBmaWx0ZXJNZXRhZGF0YSBdICkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgIHZhciBmaWx0ZXJNZXRhZGF0YVZhbHVlID0gZmlsdGVyTWV0YWRhdGEgYXMgRmlsdGVyTWV0YWRhdGE7XHJcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbHRlck1ldGFkYXRhVmFsdWUudmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBmaWx0ZXJzW2ZpZWxkTmFtZV0gPSBmaWx0ZXJNZXRhZGF0YSBhcyBGaWx0ZXJNZXRhZGF0YTtcclxuICAgICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdhbGwgZmlsdGVycycsIGZpbHRlcnMpXHJcbiAgICAgICAgICAgIC8vICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgICAgICAgICAgIC8vIH0sIHt9KTtcclxuICAgICAgICAgICAgLy8gdGhpcy5zZWFyY2hGaWVsZHMgPVtdO1xyXG4gICAgICAgICAgICAvLyBjb25zdCBmaWx0ZXJzQXJyYXk6IFtzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB8IG51bGw7IG1hdGNoTW9kZTogc3RyaW5nLG9wZXJhdG9yIDogc3RyaW5nIH1bXV1bXSA9IE9iamVjdC5lbnRyaWVzKGRhdGEuZmlsdGVycyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmaWx0ZXJzQXJyYXkuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmllbGRWYWx1ZV0pID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vICAgZmllbGRWYWx1ZS5mb3JFYWNoKGZpbHRlciA9PlxyXG4gICAgICAgICAgICAvLyAgICAge1xyXG5cclxuICAgICAgICAgICAgLy8gICAgIGlmKGZpbHRlci52YWx1ZSl7XHJcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBzZWFyY2hGaWVsZCA6IFNlYXJjaEZpZWxkID17XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgZmllbGQgOmZpZWxkTmFtZSxcclxuICAgICAgICAgICAgLy8gICAgICAgICBsYWJlbFZhbHVlIDogZmlsdGVyLnZhbHVlLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIHZhbHVlOmZpbHRlci52YWx1ZSxcclxuICAgICAgICAgICAgLy8gICAgICAgICB0eXBlIDogdGhpcy5pbmZlcklucHV0VHlwZShmaWVsZE5hbWUpLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIG9wZXJhdG9yIDogdGhpcy5nZXRPcGVyYXRvck51bWJlcihmaWx0ZXIubWF0Y2hNb2RlKVxyXG4gICAgICAgICAgICAvLyAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnc2VhcmNoRmllbGQnLHNlYXJjaEZpZWxkKTtcclxuICAgICAgICAgICAgLy8gICAgICAgaWYgKHRoaXMuc2VhcmNoRmllbGRzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyAgICAgICB0aGlzLnNlYXJjaEZpZWxkcy5wdXNoKHNlYXJjaEZpZWxkKTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJObyBzZXNzaW9uIGRhdGEgZm91bmQgaW4gbG9jYWxTdG9yYWdlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ncmlkSGVhZGVyRmlsdGVycyA9IHRoaXMuX2V4dHJhY3RGaWx0ZXJzKGV2ZW50LmZpbHRlcnMpO1xyXG4gICAgdGhpcy5fZXh0cmFjdFNvcnRDcml0ZXJpYXMoZXZlbnQpO1xyXG4gICAgdGhpcy5zZWFyY2goKTtcclxuICB9XHJcblxyXG4gIGZpZWxkcygpOiBzdHJpbmdbXSB7XHJcbiAgICBsZXQgZmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY29sdW1ucyAhPSBudWxsICYmIHRoaXMuY29sdW1ucyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgIGZpZWxkcy5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkcztcclxuICB9XHJcblxyXG5cclxuICBidXR0b25DbGlja2VkKGl0ZW06IGFueSwgZmllbGQ6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdEtleU9ubHkpIHtcclxuICAgICAgdGhpcy5idXR0b25Db2x1bW5DbGlja2VkLmVtaXQoeyBmaWVsZDogZmllbGQsIGtleTogaXRlbVt0aGlzLmtleV0sIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7IGZpZWxkOiBmaWVsZCwga2V5OiBpdGVtLCBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBrZXl3b3JkVmFsdWVDaGFuZ2VkKGtleXdvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5rZXl3b3JkID0ga2V5d29yZFxyXG4gIH1cclxuXHJcbiAgaXNBbGxSZXF1aXJlZFNlYXJjaEZpZWxkc0hhdmVWYWx1ZXMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaW52YWxpZFNlYXJjaEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICAgID8uZmlsdGVyKHggPT4geC5yZXF1aXJlZCA9PSB0cnVlICYmICh4LnZhbHVlID09IHVuZGVmaW5lZCB8fCB4LnZhbHVlID09ICcnIHx8IHgudmFsdWUgPT0gbnVsbCkpXHJcblxyXG4gICAgaWYgKGludmFsaWRTZWFyY2hGaWVsZHMgPT0gdW5kZWZpbmVkIHx8IGludmFsaWRTZWFyY2hGaWVsZHMubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWVzc2FnZXM6IHN0cmluZ1tdID0gW11cclxuICAgIGludmFsaWRTZWFyY2hGaWVsZHMuZm9yRWFjaChzZWFyY2hGaWVsZCA9PiB7XHJcbiAgICAgIG1lc3NhZ2VzLnB1c2goYDxiPiR7dGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oc2VhcmNoRmllbGQubGFiZWxWYWx1ZSl9PC9iPiAke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKFwic2hhcmVkX3NlYXJjaF9maWVsZF9yZXF1aXJlZFwiKX1gKTtcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2VzRnJvbUFycmF5U3RyaW5nKG1lc3NhZ2VzKTtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgaW5pdFNlYXJjaE9uSW5pdCgpIHtcclxuICAgIGxldCBpbnZhbGlkU2VhcmNoRmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHNcclxuICAgICAgPy5maWx0ZXIoeCA9PiB4LnJlcXVpcmVkID09IHRydWUgJiYgKHgudmFsdWUgPT0gdW5kZWZpbmVkIHx8IHgudmFsdWUgPT0gJycgfHwgeC52YWx1ZSA9PSBudWxsKSkgPz8gW11cclxuXHJcbiAgICBpZiAodGhpcy5fc2VhcmNoT25Jbml0KSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaE9uSW5pdCA9IGludmFsaWRTZWFyY2hGaWVsZHMubGVuZ3RoID09IDBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbWJvQm94TGFiZWxDaGFuZ2VkKGV2ZW50PzogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XHJcbiAgICB0aGlzLl9leHRyYWN0U2VhcmNoQm94RmlsdGVycygpO1xyXG4gICAgdGhpcy5fZ2VuZXJhdGVGaWx0ZXJzSHRtbFRlbXBsYXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2goZXZ0OiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgICBcclxuICAgIC8vIGNvbnNvbGUubG9nKFwic2VhcmNoPj4+XCIsIHRoaXMuc2VhcmNoRmllbGRzKVxyXG4gICAgLy8gc2V0IGdsb2JhbCBmaWx0ZXIgdmFsdWVcclxuXHJcbiAgICB0aGlzLl9leHRyYWN0T25seVZpc2libGVTZWFyY2hGaWVsZHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdlZFJlcXVlc3QgJiYgdGhpcy5pc0FsbFJlcXVpcmVkU2VhcmNoRmllbGRzSGF2ZVZhbHVlcygpKSB7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0LnN1bW1hcmllcyA9IHRoaXMuX2V4dHJhY3RIYXZlU3VtbWFyeVByb3BlcnRpZXMoKTtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3Quc29ydGluZyA9IHRoaXMuX3NvcnQ7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0LmtleXdvcmQgPSB0aGlzLmtleXdvcmQ7XHJcblxyXG4gICAgICAvL2FkZCBzZWFyY2ggYm94IGZpbHRlcnNcclxuICAgICAgdGhpcy5fZXh0cmFjdFNlYXJjaEJveEZpbHRlcnMoKTtcclxuXHJcbiAgICAgIC8vZ2VuZXJhdGUgZmlsdGVycyBodG1sIHRlbXBsYXRlXHJcbiAgICAgIHRoaXMuX2dlbmVyYXRlRmlsdGVyc0h0bWxUZW1wbGF0ZSgpO1xyXG4gICAgICAvL2Nsb25lXHJcblxyXG4gICAgICBsZXQgbmV3UmVxdWVzdDogSVBhZ2VkUmVxdWVzdCA9IHRoaXMuX2Nsb25lUGFnZWRSZXF1ZXN0KHRoaXMucGFnZWRSZXF1ZXN0KTtcclxuXHJcbiAgICAgIC8vY29uY2F0IGZpbHRlcnNcclxuICAgICAgbmV3UmVxdWVzdC5maWx0ZXJzID0gWy4uLnRoaXMuX2dyaWRIZWFkZXJGaWx0ZXJzLCAuLi50aGlzLl9zZWFyY2hCb3hGaWx0ZXJzXTtcclxuXHJcbiAgICAgIC8vZXhjbHVkZSB1c2VsZXNzIGZpbHRlcnNcclxuICAgICAgbmV3UmVxdWVzdCA9IHRoaXMuX2V4Y2x1ZGVVc2VsZXNzRmlsdGVycyhuZXdSZXF1ZXN0KTtcclxuXHJcbiAgICAgIC8vIHRlc3QgaWYgZmlsdGVycyB2YWx1ZSBoYXMgY2hhbmdlZFxyXG4gICAgICBpZiAoKHRoaXMubGF0ZXN0RmlsdGVycyA/IEpTT04uc3RyaW5naWZ5KHRoaXMubGF0ZXN0RmlsdGVycykgOiBudWxsKVxyXG4gICAgICAgICE9PSAobmV3UmVxdWVzdC5maWx0ZXJzID8gSlNPTi5zdHJpbmdpZnkobmV3UmVxdWVzdC5maWx0ZXJzKSA6IG51bGwpKSB7XHJcbiAgICAgICAgbmV3UmVxdWVzdC5za2lwQ291bnQgPSAwO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kdCkge1xyXG4gICAgICAgICAgdGhpcy5kdC5maXJzdCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzYXZlIGxhdGVzdCBmaWx0ZXJzXHJcbiAgICAgIHRoaXMubGF0ZXN0RmlsdGVycyA9IG5ld1JlcXVlc3QuZmlsdGVycztcclxuXHJcbiAgICAgIHRoaXMubG9hZC5lbWl0KHsgcmVxdWVzdDogbmV3UmVxdWVzdCwgaXNGb3JDYWxlbmRhcjogdGhpcy5fc2hvd0NhbGVuZGVyVmlldyB9KTtcclxuXHJcbiAgICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGaXJzdEVsZW1lbnRJbmRleCgpOiBudW1iZXIge1xyXG4gICAgaWYgKCF0aGlzLmR0KSByZXR1cm4gMDtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdlLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5kdC5maXJzdCA9PT0gMCA/IDEgOiAodGhpcy5kdD8uZmlyc3QgPz8gMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdW1tYXJ5KGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHN1bW1hcnlSb3cgPSB0aGlzLnBhZ2Uuc3VtbWFyaWVzXHJcbiAgICAgIC5maW5kKHMgPT4gcy5wcm9wcmV0eS50b1VwcGVyQ2FzZSgpID09IGZpZWxkLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgaWYgKHN1bW1hcnlSb3cpIHtcclxuICAgICAgcmV0dXJuIHN1bW1hcnlSb3cuc3VtbWFyeTtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKCkge1xyXG4gICAgbGV0IHNlbGVjdGlvbjogYW55W10gPSBbXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICAgICAgbGV0IGtleXM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmZvckVhY2goKHY6IGFueSkgPT4geyBrZXlzLnB1c2godlt0aGlzLmtleV0pIH0pO1xyXG4gICAgICAgICAgc2VsZWN0aW9uID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0aW9uID0gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PSBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uID8gW3RoaXMuc2VsZWN0aW9uW3RoaXMua2V5XV0gOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbiA/IFt0aGlzLnNlbGVjdGlvbl0gOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPSBHcmlkU2VsZWN0aW9uTW9kZS5Ob25lKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHNlbGVjdGlvbilcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGE/LmlzQWR2YW5jZWRTZWFyY2ggJiYgc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0aW9uKVxyXG4gICAgICB0aGlzLl9yZWY/LmNsb3NlKHNlbGVjdGlvblswXSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbENoYW5nZShldmVudDogVGFibGVTZWxlY3RBbGxDaGFuZ2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PSBHcmlkU2VsZWN0aW9uTW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RBbGwgPSBldmVudC5jaGVja2VkO1xyXG4gICAgICBpZiAodGhpcy5fc2VsZWN0QWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tlZEJ5RmllbGQgJiYgdGhpcy5jaGVja2VkQnlGaWVsZC50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMucGFnZS5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gaXRlbVt0aGlzLmNoZWNrZWRCeUZpZWxkXSA9PT0gdHJ1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLnBhZ2UuaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vblNlbGVjdGVkSXRlbXNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBvblNlbGVjdGVkQ29sdW1uc0NoYW5nZSgpIHtcclxuICAvLyAgIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgLy8gICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5mb3JtTmFtZSk7XHJcblxyXG4gIC8vICAgICBpZiAoc3RvcmVkVmFsdWUpIHtcclxuICAvLyAgICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xyXG4gIC8vICAgICAgIGxldCBjb2x1bW5PcmRlcjogc3RyaW5nW10gPSBbXTtcclxuICAvLyAgICAgICBsZXQgY29sdW1uV2lkdGhzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIC8vICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gIC8vICAgICAgICAgaWYgKGl0ZW0uZmllbGQgPT09ICd1cGxvYWQnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBlbHNlIGlmIChpdGVtLmZpZWxkID09PSAnZG93bmxvYWQnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBlbHNlIGlmIChpdGVtLmZpZWxkID09PSAnY29uc3VsdCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goaXRlbSk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIGVsc2UgaWYgKGl0ZW0uZmllbGQgPT09ICdkZWxldGUnKSB7XHJcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGl0ZW0pO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICBlbHNlIGlmIChpdGVtLmZpZWxkID09PSAnZWRpdCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goaXRlbSk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoYS5vcmRlciAhPT0gdW5kZWZpbmVkICYmIGIub3JkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gIC8vICAgICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICByZXR1cm4gMDtcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKHNlbGVjdGVkQ29sdW1uID0+IHtcclxuICAvLyAgICAgICAgIGNvbHVtbk9yZGVyLnB1c2goc2VsZWN0ZWRDb2x1bW4uZmllbGQpO1xyXG4gIC8vICAgICAgICAgY29uc3Qgc2VsZWN0ZWRXaWR0aCA9IHNlbGVjdGVkQ29sdW1uLm1pbldpZHRoO1xyXG4gIC8vICAgICAgICAgaWYgKHNlbGVjdGVkV2lkdGgpIHtcclxuICAvLyAgICAgICAgICAgY29sdW1uV2lkdGhzLnB1c2goc2VsZWN0ZWRXaWR0aC50b1N0cmluZygpKTtcclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIC8vY29sdW1uV2lkdGhzLnB1c2goJzkwJyk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgLy8gICAgICAgc2Vzc2lvbkRhdGEuY29sdW1uT3JkZXIgPSBjb2x1bW5PcmRlcjtcclxuICAvLyAgICAgICBzZXNzaW9uRGF0YS5jb2x1bW5XaWR0aHMgPSBjb2x1bW5XaWR0aHMuam9pbignLCcpO1xyXG5cclxuICAvLyAgICAgICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZm9ybU5hbWUsIEpTT04uc3RyaW5naWZ5KHNlc3Npb25EYXRhKSk7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgLy9jb25zdCByZXN1bHQgPSB0aGlzLmdlbmVyYXRlVGFibGVDb25maWdKU09OKCk7XHJcbiAgLy8gICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmZvcm1OYW1lLCByZXN1bHQpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZW5lcmF0ZVRhYmxlQ29uZmlnSlNPTigpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3QgdGFibGVDb25maWcgPSBKU09OLnBhcnNlKHRoaXMuanNvblN0cmluZ0xheW91dCk7XHJcbiAgLy8gICB0YWJsZUNvbmZpZy5jb2x1bW5PcmRlciA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkKTtcclxuICAvLyAgIC8vdGFibGVDb25maWcuY29sdW1uV2lkdGhzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKCgpID0+ICc5MCcpLmpvaW4oJywnKTtcclxuICAvLyAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0YWJsZUNvbmZpZyk7XHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG4gIG9uU3RhdGVSZXN0b3JlKHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpIHtcclxuICAgIGlmICh0YWJsZVN0YXRlLnNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbiA9IHRhYmxlU3RhdGUuc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMub25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgIC8vICAgY29uc3Qgc3RvcmVkVmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmZvcm1OYW1lKTtcclxuICAgIC8vICAgaWYgKHN0b3JlZFZhbHVlKSB7XHJcbiAgICAvLyAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnBhcnNlKHN0b3JlZFZhbHVlKTtcclxuICAgIC8vICAgICBjb25zdCBjb2x1bW5PcmRlcjogc3RyaW5nW10gPSBzZXNzaW9uRGF0YS5jb2x1bW5PcmRlcjtcclxuICAgIC8vICAgICBjb25zdCBjb2x1bW5XaWR0aHM6IHN0cmluZ1tdID0gc2Vzc2lvbkRhdGEuY29sdW1uV2lkdGhzLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgLy8gICAgIC8vIFVwZGF0ZSBzZWxlY3RlZENvbHVtbnMgYmFzZWQgb24gY29sdW1uT3JkZXIgYW5kIGNvbHVtbldpZHRoc1xyXG4gICAgLy8gICAgIGNvbnN0IHVwZGF0ZWRTZWxlY3RlZENvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gICAgLy8gICAgIGNvbHVtbk9yZGVyLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG4gICAgLy8gICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aHNbaW5kZXhdO1xyXG4gICAgLy8gICAgICAgLy8gRmluZCB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW4gaW4gc2VsZWN0ZWRDb2x1bW5zXHJcbiAgICAvLyAgICAgICBjb25zdCBleGlzdGluZ0NvbHVtbkluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGZpZWxkKTtcclxuICAgIC8vICAgICAgIGlmIChleGlzdGluZ0NvbHVtbkluZGV4ICE9PSAtMSkge1xyXG4gICAgLy8gICAgICAgICAvLyBJZiB0aGUgY29sdW1uIGV4aXN0cyBpbiBzZWxlY3RlZENvbHVtbnMsIHVwZGF0ZSBpdHMgd2lkdGhcclxuICAgIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNbZXhpc3RpbmdDb2x1bW5JbmRleF0ud2lkdGggPSBjb2x1bW5XaWR0aDtcclxuICAgIC8vICAgICAgICAgdXBkYXRlZFNlbGVjdGVkQ29sdW1ucy5wdXNoKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2V4aXN0aW5nQ29sdW1uSW5kZXhdKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgLy8gVXBkYXRlIHNlbGVjdGVkQ29sdW1ucyB3aXRoIHRoZSByZXN0b3JlZCBkYXRhXHJcbiAgICAvLyAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB1cGRhdGVkU2VsZWN0ZWRDb2x1bW5zO1xyXG5cclxuXHJcbiAgICAvLyAgICAgICBpZihzdG9yZWRWYWx1ZSl7XHJcblxyXG4gICAgLy8gICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzdG9yZWRWYWx1ZSk7XHJcbiAgICAvLyAgICAgICAgIGlmICgoZGF0YS5tdWx0aVNvcnRNZXRhICYmIGRhdGEubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB8fCAoZGF0YS5maWx0ZXJzICYmIGRhdGEubXVsdGlTb3J0TWV0YS5maWx0ZXJzID4gMCkpIHtcclxuICAgIC8vICAgICAgICAgICBpZiAoZGF0YS5tdWx0aVNvcnRNZXRhICYmIGRhdGEubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBkYXRhLm11bHRpU29ydE1ldGEuZm9yRWFjaCgobWV0YTogeyBmaWVsZDogYW55OyBvcmRlcjogYW55OyB9KSA9PiB7IFxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IHNvcnQgPSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGEuZmllbGQsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgb3JkZXI6IG1ldGEub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IFtzb3J0XTtcclxuICAgIC8vICAgICAgICAgICAgIH0pOyAgXHJcbiAgICAvLyAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIGlmIChkYXRhLmZpbHRlcnMpIHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuc2VhcmNoRmllbGRzID1bXTtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnNBcnJheTogW3N0cmluZywgeyB2YWx1ZTogc3RyaW5nIHwgbnVsbDsgbWF0Y2hNb2RlOiBzdHJpbmcsb3BlcmF0b3IgOiBzdHJpbmcgfVtdXVtdID0gT2JqZWN0LmVudHJpZXMoZGF0YS5maWx0ZXJzKTtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICBmaWx0ZXJzQXJyYXkuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmllbGRWYWx1ZV0pID0+IHtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgIGZpZWxkVmFsdWUuZm9yRWFjaChmaWx0ZXIgPT5cclxuICAgIC8vICAgICAgICAgICAgICAgICB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmKGZpbHRlci52YWx1ZSl7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoRmllbGQgOiBTZWFyY2hGaWVsZCA9e1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBmaWVsZCA6ZmllbGROYW1lLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlIDogZmlsdGVyLnZhbHVlLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB2YWx1ZTpmaWx0ZXIudmFsdWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiB0aGlzLmluZmVySW5wdXRUeXBlKGZpZWxkTmFtZSksXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIDogdGhpcy5nZXRPcGVyYXRvck51bWJlcihmaWx0ZXIubWF0Y2hNb2RlKVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWFyY2hGaWVsZCcsc2VhcmNoRmllbGQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRmllbGRzKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGaWVsZHMucHVzaChzZWFyY2hGaWVsZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICB0aGlzLnNlYXJjaCgpO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgfVxyXG5cclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIk5vIHNlc3Npb24gZGF0YSBmb3VuZCBpbiBsb2NhbFN0b3JhZ2VcIik7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uQ2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kdD8uY2xlYXIoKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMuZm9ybU5hbWV9LWZpbHRlck1vZGVgKVxyXG4gIH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JOdW1iZXIob3BlcmF0b3I6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlW29wZXJhdG9yLnRvVXBwZXJDYXNlKCkgYXMga2V5b2YgdHlwZW9mIEZpbHRlck9wZXJhdG9yVHlwZV0gPz8gLTE7XHJcbiAgfVxyXG4gIGluZmVySW5wdXRUeXBlKHZhbHVlOiBhbnkpOiBJbnB1dFR5cGVzIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBJbnB1dFR5cGVzLklOVEVHRVI7XHJcbiAgICAgIH0gZWxzZSBpZiAoL15cXGQrXFwuXFxkKyQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIElucHV0VHlwZXMuREVDSU1BTF9JTlBVVDtcclxuICAgICAgfSBlbHNlIGlmICgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gSW5wdXRUeXBlcy5EQVRFO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBJbnB1dFR5cGVzLlRFWFRfQk9YO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gSW5wdXRUeXBlcy5URVhUX0JPWDtcclxuICAgIH1cclxuICB9XHJcbiAgbG9hZEluaXRpYWxTdGF0ZSgpIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2VbJ2dldCddKCd0YWJsZS1zdGF0ZScpO1xyXG4gIH1cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdEZpbHRlcnMoZXZlbnQ6IEZpbHRlck1ldGFkYXRhW10gfCBhbnkpOiBJRmlsdGVyZWRSZXF1ZXN0W10ge1xyXG4gICAgbGV0IGZpbHRlcnM6IElGaWx0ZXJlZFJlcXVlc3RbXSA9IFtdO1xyXG4gICAgaWYgKGV2ZW50ICE9IG51bGxcclxuICAgICAgJiZcclxuICAgICAgZXZlbnQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICBsZXQgY3VycmVuY3k6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNvbC5jdXJyZW5jeU90aGVyQ29kZTtcclxuICAgICAgICBpZiAoY29sLnR5cGUgPT0gdGhpcy5kaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZKSB7XHJcbiAgICAgICAgICBjdXJyZW5jeSA9IHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLmFwcFNldHRpbmdzLmRldmlzZVNvY2lldGUuY29kZURldmlzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50ICE9IG51bGxcclxuICAgICAgICAgICYmXHJcbiAgICAgICAgICBldmVudCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXIgPSBldmVudFtjb2wuZmllbGRdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX25vdE51bGxPclVuZGVmaW5lZChmaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbm90TnVsbE9yVW5kZWZpbmVkKGl0ZW0udmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShpdGVtLnZhbHVlLCAneXl5eS1NTS1kZCcpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IEZpbHRlckhlbHBlci5Ub09wZXJhdG9yVHlwZShpdGVtLm1hdGNoTW9kZSlcclxuICAgICAgICAgICAgICAgICAgICAsIGZpbHRlclZhbHVlOiBpdGVtLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgLCBwcm9wcmV0eU5hbWU6IGNvbC5maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICwgaGVhZGVyOiBjb2wuaGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgLCB0eXBlOiBGaWx0ZXJIZWxwZXIuVG9JbnB1dFR5cGUoY29sLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLCBjdXJyZW5jeTogY3VycmVuY3lcclxuICAgICAgICAgICAgICAgICAgICAsIG51bU9mRGVjaW1hbDogY29sLm51bU9mRGVjaW1hbFxyXG4gICAgICAgICAgICAgICAgICAgICwgaXNGcmFjdGlvbjogY29sLmlzRnJhY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAsIGNvbWJvYm94TGFiZWw6IGNvbC5jb21ib0xhYmVsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci52YWx1ZSwgJ3l5eXktTU0tZGQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBGaWx0ZXJIZWxwZXIuVG9PcGVyYXRvclR5cGUoZmlsdGVyLm1hdGNoTW9kZSlcclxuICAgICAgICAgICAgICAgICAgLCBmaWx0ZXJWYWx1ZTogZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICwgcHJvcHJldHlOYW1lOiBjb2wuZmllbGRcclxuICAgICAgICAgICAgICAgICAgLCBoZWFkZXI6IGNvbC5oZWFkZXJcclxuICAgICAgICAgICAgICAgICAgLCB0eXBlOiBGaWx0ZXJIZWxwZXIuVG9JbnB1dFR5cGUoY29sLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICwgY3VycmVuY3k6IGN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICAgICwgbnVtT2ZEZWNpbWFsOiBjb2wubnVtT2ZEZWNpbWFsXHJcbiAgICAgICAgICAgICAgICAgICwgaXNGcmFjdGlvbjogY29sLmlzRnJhY3Rpb25cclxuICAgICAgICAgICAgICAgICAgLCBjb21ib2JveExhYmVsOiBjb2wuY29tYm9MYWJlbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFNvcnRDcml0ZXJpYXMobGF6eUxvYWRFdmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgc29ydE1ldGEgPSB0aGlzLl90b1NvcnRNZXRhKGxhenlMb2FkRXZlbnQpO1xyXG4gICAgaWYgKHNvcnRNZXRhKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuU2luZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFjdFNpbmdsZVNvcnRDcml0ZXJpYShzb3J0TWV0YSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNvcnRNb2RlID09PSBHcmlkU29ydE1vZGUuTXVsdGlwbGUpIHtcclxuICAgICAgICB0aGlzLl9leHRyYWN0TXVsdGlwbGVTb3J0Q3JpdGVyaWFzKHNvcnRNZXRhKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0U2luZ2xlU29ydENyaXRlcmlhKHNvck1ldGE6IFNvcnRNZXRhKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gR3JpZFNvcnRNb2RlLlNpbmdsZSkge1xyXG4gICAgICBpZiAoc29yTWV0YS5maWVsZCkge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgc29ydCBlbGVtZW50XHJcbiAgICAgICAgbGV0IHNvcnQ6IElTb3J0QnlQcm9wcmV0eSA9IHtcclxuICAgICAgICAgIHByb3BlcnR5OiBzb3JNZXRhLmZpZWxkLFxyXG4gICAgICAgICAgb3JkZXI6IHNvck1ldGEub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NvcnQgPSBbc29ydF1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBwcm9jZXNzIFxcJ1NpbmdsZVNvcnRcXCcgd2hlbiBbc29ydE1vZGVdIGlzIFxcJ211bHRpcGxlXFwnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0TXVsdGlwbGVTb3J0Q3JpdGVyaWFzKHNvcnRNZXRhczogU29ydE1ldGFbXSkge1xyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICBpZiAoc29ydE1ldGFzICYmIEFycmF5LmlzQXJyYXkoc29ydE1ldGFzKSkge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgc29ydCBlbGVtZW50XHJcbiAgICAgICAgdGhpcy5fc29ydCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc29ydE1ldGFzID0gc29ydE1ldGFzO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ21ldGEgJywgc29ydE1ldGFzKVxyXG4gICAgICAgIHNvcnRNZXRhcy5mb3JFYWNoKHNtID0+IHtcclxuICAgICAgICAgIGlmIChzbS5maWVsZCkge1xyXG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IHNvcnQgZWxlbWVudFxyXG4gICAgICAgICAgICBsZXQgc29ydDogSVNvcnRCeVByb3ByZXR5ID0ge1xyXG4gICAgICAgICAgICAgIHByb3BlcnR5OiBzbS5maWVsZCxcclxuICAgICAgICAgICAgICBvcmRlcjogc20ub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vYWRkIHRoZSBuZXcgZWxlbWVudCB0byBfc29ydFxyXG4gICAgICAgICAgICB0aGlzLl9zb3J0LnB1c2goc29ydCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgcHJvY2VzcyBcXCdNdWx0aXBsZVNvcnRcXCcgd2hlbiBbc29ydE1vZGVdIGlzIFxcJ3NpbmdsZVxcJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbm90TnVsbE9yVW5kZWZpbmVkKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqICE9IG51bGxcclxuICAgICAgJiYgb2JqICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4dHJhY3RPbmx5VmlzaWJsZVNlYXJjaEZpZWxkcygpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25TZXR0aW5ncyAmJlxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblNldHRpbmdzLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy50ZW1wU2VhcmNoRmllbGRzXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPSB0aGlzLnRlbXBTZWFyY2hGaWVsZHMuZmlsdGVyKHNmID0+IHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnByZXNlbnRhdGlvblNldHRpbmdzPy5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsc1xyXG4gICAgICAgICAgLmZpbmQocCA9PiBwLmJsb2NrTmFtZSA9PT0gc2YuZmllbGQpO1xyXG5cclxuICAgICAgICByZXR1cm4gIWNvbmZpZyB8fCBjb25maWcuaXNCbG9ja1Zpc2libGUgPT09IHRydWUgfHwgY29uZmlnLmlzQmxvY2tWaXNpYmxlID09PSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFNlYXJjaEJveEZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZWFyY2hCb3hGaWx0ZXJzID0gW107XHJcbiAgICBpZiAodGhpcy5zZWFyY2hGaWVsZHMpIHtcclxuXHJcbiAgICAgIHRoaXMuX2V4dHJhY3RPbmx5VmlzaWJsZVNlYXJjaEZpZWxkcygpO1xyXG5cclxuICAgICAgdGhpcy5zZWFyY2hGaWVsZHMuZm9yRWFjaCgoc2Y6IFNlYXJjaEZpZWxkKSA9PiB7XHJcbiAgICAgICAgLy9pZiAoc2YudmFsdWUgIT0gdW5kZWZpbmVkICYmIHNmLnZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoc2Yub3BlcmF0b3IgIT0gbnVsbCAmJiBzZi5vcGVyYXRvciAhPSB1bmRlZmluZWQgJiYgc2YudmFsdWUgIT0gdW5kZWZpbmVkICYmIHNmLnZhbHVlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyQnlQcm9wZXJ0eTogSUZpbHRlcmVkUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgb3BlcmF0b3I6IHNmLm9wZXJhdG9yXHJcbiAgICAgICAgICAgICwgZmlsdGVyVmFsdWU6IHNmLnZhbHVlXHJcbiAgICAgICAgICAgICwgcHJvcHJldHlOYW1lOiBzZi5maWVsZFxyXG4gICAgICAgICAgICAsIGhlYWRlcjogc2YubGFiZWxWYWx1ZVxyXG4gICAgICAgICAgICAsIHR5cGU6IHNmLnR5cGVcclxuICAgICAgICAgICAgLCBjb21ib2JveExhYmVsOiBzZi5jb21ib2JveExhYmVsXHJcbiAgICAgICAgICAgICwgY3VycmVuY3k6IHNmLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICwgaXNGcmFjdGlvbjogc2YuaXNGcmFjdGlvblxyXG4gICAgICAgICAgICAsIG51bU9mRGVjaW1hbDogc2YubnVtT2ZEZWNpbWFsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoQm94RmlsdGVycy5wdXNoKGZpbHRlckJ5UHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzZi5vcGVyYXRvciA9PSB1bmRlZmluZWQgfHwgc2Yub3BlcmF0b3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aGUgc2VhcmNoIGZpZWxkIHdpdGggW2ZpZWxkIDogJHtzZi5maWVsZH1dIGhhdmUgbm8gb3BlcmF0b3JzYClcclxuICAgICAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvbmVQYWdlZFJlcXVlc3QocmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgbGV0IGNsb25lOiBJUGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogcmVxdWVzdC5tYXhSZXN1bHRDb3VudCxcclxuICAgICAgc2tpcENvdW50OiByZXF1ZXN0LnNraXBDb3VudCxcclxuICAgICAgc29ydGluZzogcmVxdWVzdC5zb3J0aW5nLFxyXG4gICAgICBrZXl3b3JkOiByZXF1ZXN0LmtleXdvcmQsXHJcbiAgICAgIGZpbHRlcnM6IHJlcXVlc3QuZmlsdGVycyxcclxuICAgICAgZ2V0QWxsRGF0YTogcmVxdWVzdC5nZXRBbGxEYXRhLFxyXG4gICAgICBzdW1tYXJpZXM6IHJlcXVlc3Quc3VtbWFyaWVzXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdEhhdmVTdW1tYXJ5UHJvcGVydGllcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgIGxldCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBsZXQgaGF2ZVN1bW1hcnlDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMuaGF2ZVN1bW1hcnkgPT09IHRydWUpO1xyXG4gICAgaWYgKGhhdmVTdW1tYXJ5Q29sdW1ucyAmJiBoYXZlU3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwcm9wZXJ0aWVzID0gaGF2ZVN1bW1hcnlDb2x1bW5zLm1hcChjID0+IGMuZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdFN1bW1hcmllcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBhZ2Uuc3VtbWFyaWVzKSB7XHJcbiAgICAgIHRoaXMucGFnZS5zdW1tYXJpZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICB0aGlzLnN1bW1hcmllc1tzLnByb3ByZXR5XSA9IHMuc3VtbWFyeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHRyYWN0TXVsdGlTb3J0TWV0YUl0ZW1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc29ydCA9IFtdO1xyXG4gICAgaWYgKHRoaXMuc29ydE1ldGFzKSB7XHJcbiAgICAgIHRoaXMuc29ydE1ldGFzLmZvckVhY2goKHM6IFNvcnRNZXRhKSA9PiB7XHJcbiAgICAgICAgbGV0IHNvcnQ6IElTb3J0QnlQcm9wcmV0eSA9IHtcclxuICAgICAgICAgIHByb3BlcnR5OiBzLmZpZWxkLFxyXG4gICAgICAgICAgb3JkZXI6IHMub3JkZXIgPT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc29ydEl0ZW0gPSB0aGlzLl9zb3J0LmZpbmQocyA9PiBzLnByb3BlcnR5ID09IHNvcnQucHJvcGVydHkpO1xyXG5cclxuICAgICAgICBpZiAoc29ydEl0ZW0pIHtcclxuICAgICAgICAgIGlmIChzb3J0SXRlbS5vcmRlciAhPSBzb3J0Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgIHNvcnRJdGVtLm9yZGVyID0gc29ydC5vcmRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zb3J0LnB1c2goc29ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RvU29ydE1ldGEodGFibGVMYXp5TG9hZEV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5TaW5nbGUpIHtcclxuICAgICAgaWYgKHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0RmllbGQgJiYgdGFibGVMYXp5TG9hZEV2ZW50LnNvcnRPcmRlcikge1xyXG4gICAgICAgIGxldCBzb3J0TWV0YTogSVNvcnRNZXRhID0ge1xyXG4gICAgICAgICAgZmllbGQ6IHRhYmxlTGF6eUxvYWRFdmVudC5zb3J0RmllbGQsXHJcbiAgICAgICAgICBvcmRlcjogdGFibGVMYXp5TG9hZEV2ZW50LnNvcnRPcmRlclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc29ydE1ldGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc29ydE1vZGUgPT09IEdyaWRTb3J0TW9kZS5NdWx0aXBsZSkge1xyXG4gICAgICBpZiAodGFibGVMYXp5TG9hZEV2ZW50Lm11bHRpU29ydE1ldGEpIHtcclxuICAgICAgICByZXR1cm4gdGFibGVMYXp5TG9hZEV2ZW50Lm11bHRpU29ydE1ldGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFtzb3J0TW9kZV0gaGF2ZSBiZWVuIHNldCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVGaWx0ZXJzSHRtbFRlbXBsYXRlKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSA9IFwiXCJcclxuICAgIC8vZXhjbHVkZSB1c2VsZXNzIEdyaWQgZmlsdGVyIFxyXG4gICAgdGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPSB0aGlzLl9leGNsdWRlVXNlbGVzc0dyaWRGaWx0ZXIodGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMpXHJcblxyXG4gICAgLy9hZGQgc2VhcmNoIEJveCBmaWx0ZXJzIGh0bWxcclxuICAgIGlmICh0aGlzLl9zZWFyY2hCb3hGaWx0ZXJzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSA9IHRoaXMuX2h0bWxUZW1wbGF0ZUdlbmVyYXRvclNlcnZpY2VcclxuICAgICAgICAuZ2VuZXJhdGVHcmlkRmlsdGVyc1RlbXBsYXRlKHRoaXMuX3NlYXJjaEJveEZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMgPT0+IFwiLCB0aGlzLl9ncmlkSGVhZGVyRmlsdGVycylcclxuXHJcbiAgICAvL2FkZCBncmlkIGhlYWRlciBmaWx0ZXJzIGh0bWxcclxuICAgIGlmICh0aGlzLl9ncmlkSGVhZGVyRmlsdGVycykge1xyXG4gICAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUgKz0gdGhpcy5faHRtbFRlbXBsYXRlR2VuZXJhdG9yU2VydmljZVxyXG4gICAgICAgIC5nZW5lcmF0ZUdyaWRGaWx0ZXJzVGVtcGxhdGUodGhpcy5fZ3JpZEhlYWRlckZpbHRlcnMsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGVDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4Y2x1ZGVVc2VsZXNzR3JpZEZpbHRlcihmaWx0ZXJzOiBJRmlsdGVyZWRSZXF1ZXN0W10pIHtcclxuICAgIHJldHVybiBmaWx0ZXJzLmZpbHRlcih4ID0+XHJcbiAgICAgIHguZmlsdGVyVmFsdWUgIT09IG51bGwgJiYgeC5maWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHguZmlsdGVyVmFsdWUgIT09IFwiXCIgJiYgeC5vcGVyYXRvciAhPT0gdW5kZWZpbmVkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhjbHVkZVVzZWxlc3NGaWx0ZXJzKHBhZ2VkUmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgaWYgKHBhZ2VkUmVxdWVzdCAmJiBwYWdlZFJlcXVlc3QuZmlsdGVycykge1xyXG4gICAgICBwYWdlZFJlcXVlc3QuZmlsdGVycyA9IHBhZ2VkUmVxdWVzdC5maWx0ZXJzLmZpbHRlcihmID0+IGYuZmlsdGVyVmFsdWUgIT0gdW5kZWZpbmVkICYmIGYuZmlsdGVyVmFsdWUgIT0gbnVsbClcclxuICAgIH1cclxuICAgIHJldHVybiBwYWdlZFJlcXVlc3Q7XHJcbiAgfVxyXG5cclxuICBleHBvcnRFeGNlbCgpIHtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ISEuZ2V0QWxsRGF0YSA9IHRydWVcclxuICAgIGlmICh0aGlzLmNydWRTZXJ2aWNlICE9IG51bGwgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5pc0dyaWREYXRhUGFnZWRJbkFwaSkge1xyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEFsbFBhZ2VkKHRoaXMucGFnZWRSZXF1ZXN0ISEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBJUGFnZWRSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEl0ZW1zID0gRXhwb3J0RXhjZWxIZWxwZXIucHJlcHJvY2Vzc0RhdGVGb3JFeGNlbCh2YWx1ZS5pdGVtcyk7XHJcbiAgICAgICAgICAgIHZhbHVlLml0ZW1zID0gZm9ybWF0dGVkSXRlbXM7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YUZyb21BcGlUb0V4Y2VsU2hlZXQodmFsdWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZmlsdGVyZWREYXRhID0gdGhpcy5wYWdlLml0ZW1zLmZpbHRlcigoY29sOiBhbnkpID0+ICFjb2wuaXNCdXR0b24pO1xyXG4gICAgICBmaWx0ZXJlZERhdGEgPSBFeHBvcnRFeGNlbEhlbHBlci5wcmVwcm9jZXNzRGF0ZUZvckV4Y2VsKGZpbHRlcmVkRGF0YSk7XHJcbiAgICAgIHRoaXMucGFnZS5pdGVtcyA9IGZpbHRlcmVkRGF0YVxyXG4gICAgICB0aGlzLmV4cG9ydERhdGFGcm9tQXBpVG9FeGNlbFNoZWV0KHRoaXMucGFnZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydERhdGFGcm9tQXBpVG9FeGNlbFNoZWV0KHZhbHVlOiBhbnkpIHtcclxuICAgIGltcG9ydChcInhsc3hcIikudGhlbih4bHN4ID0+IHtcclxuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB4bHN4LnV0aWxzLmJvb2tfbmV3KCk7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCEuZmlsdGVycz8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICBjb25zdCBtYXBwZWRGaWx0ZXJzID0gdGhpcy5wYWdlZFJlcXVlc3QhLmZpbHRlcnM/Lm1hcChmaWx0ZXIgPT4gKHtcclxuICAgICAgICAgIHByb3BlcnR5OiBmaWx0ZXIucHJvcHJldHlOYW1lLFxyXG4gICAgICAgICAgb3BlcmF0b3JOYW1lOiB0aGlzLmdldEZpbHRlck9wZXJhdG9yTmFtZShmaWx0ZXIub3BlcmF0b3IpLFxyXG4gICAgICAgICAgdmFsdWU6IGZpbHRlci5maWx0ZXJWYWx1ZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0geGxzeC51dGlscy5qc29uX3RvX3NoZWV0KDxhbnlbXT5tYXBwZWRGaWx0ZXJzKVxyXG4gICAgICAgIHhsc3gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIGZpbHRlcnMsICdGaWx0ZXJzJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBzZWxlY3RlZENvbHVtbnNGaWVsZHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoeCA9PiAheC5pc0J1dHRvbikubWFwKGNvbHVtbiA9PiBjb2x1bW4udHJhbnNsYXRlZEhlYWRlciEhKVxyXG4gICAgICBzZWxlY3RlZENvbHVtbnNGaWVsZHMgPSBzZWxlY3RlZENvbHVtbnNGaWVsZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gJycpXHJcbiAgICAgIGNvbnN0IHdvcmtzaGVldERhdGEgPSB2YWx1ZS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvd0RhdGE6IHsgW2hlYWRlcjogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgcm93RGF0YVtjb2wudHJhbnNsYXRlZEhlYWRlciEhXSA9IGl0ZW1bY29sLmZpZWxkXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcm93RGF0YTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkV29ya3NoZWV0RGF0YSA9IHRoaXMucmVtb3ZlTm9uRXhpc3RpbmdDb2x1bW5zKHdvcmtzaGVldERhdGEsIHNlbGVjdGVkQ29sdW1uc0ZpZWxkcylcclxuICAgICAgY29uc3Qgd29ya3NoZWV0ID0geGxzeC51dGlscy5qc29uX3RvX3NoZWV0KGZpbHRlcmVkV29ya3NoZWV0RGF0YSk7XHJcbiAgICAgIHhsc3gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIHdvcmtzaGVldCwgJ0RhdGEnKTtcclxuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHsgYm9va1R5cGU6ICd4bHN4JywgdHlwZTogJ2FycmF5JyB9KTtcclxuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIFwiZXhjZWxcIik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XHJcbiAgICBsZXQgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcclxuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICB0eXBlOiBFWENFTF9UWVBFXHJcbiAgICB9KTtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyAnX2V4cG9ydF8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBFWENFTF9FWFRFTlNJT04pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyT3BlcmF0b3JOYW1lKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvclR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZS5FUVVBTDogcmV0dXJuICdFUVVBTCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlLkxFU1NPUkVRVUFMOiByZXR1cm4gJ0xFU1MgT1IgRVFVQUwnO1xyXG4gICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZS5HUkVBVEVST1JFUVVBTDogcmV0dXJuICdHUkVBVEVSIE9SIEVRVUFMJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuTEVTUzogcmV0dXJuICdMRVNTJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuR1JFQVRFUjogcmV0dXJuICdHUkVBVEVSJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuTk9URVFVQUw6IHJldHVybiAnTk9UIEVRVUFMJztcclxuICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGUuQ09OVEFJTlM6IHJldHVybiAnQ09OVEFJTlMnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ1VOS05PV05fT1BFUkFUT1InO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTm9uRXhpc3RpbmdDb2x1bW5zKHdvcmtzaGVldERhdGE6IGFueVtdLCBzZWxlY3RlZENvbHVtbnNGaWVsZHM6IHN0cmluZ1tdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHdvcmtzaGVldERhdGEubWFwKHJvdyA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1JvdzogYW55ID0ge307XHJcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHNlbGVjdGVkQ29sdW1uc0ZpZWxkcykge1xyXG4gICAgICAgIGlmIChyb3cuaGFzT3duUHJvcGVydHkoY29sKSkge1xyXG4gICAgICAgICAgbmV3Um93W2NvbF0gPSByb3dbY29sXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld1JvdztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSGVhZGVyRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXJcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJzaG93X2ZpbHRlclwiO1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYClcclxuICAgIH1cclxuICAgIGVsc2UgeyAvL3RoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IGZhbHNlXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlci1zbGFzaFwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcImhpZGVfZmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVIZWFkZXJGaWx0ZXJzTW9kZSgpIHtcclxuICAgIGlmICh0aGlzLmR0KSB7XHJcbiAgICAgIHRoaXMuZHQuY2xlYXIoKVxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLmZvcm1OYW1lfS1maWx0ZXJNb2RlYCwgdGhpcy5maWx0ZXJNb2RlVG9vbHRpcClcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPT09IFwibWVudV9tb2RlXCIpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZUhlYWRlckZpbHRlcnNNb2RlID0gXCJtZW51XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktY2hlY2tcIjtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGVUb29sdGlwID0gXCJyb3dfbW9kZVwiO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5kdC5maWx0ZXJzW2NvbC5maWVsZF0gPSBbeyB2YWx1ZTogbnVsbCwgbWF0Y2hNb2RlOiB1bmRlZmluZWQgfV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHQuX2ZpbHRlcigpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJGaWx0ZXJzTW9kZSA9IFwicm93XCI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RlSWNvbiA9IFwicGkgcGktZWxsaXBzaXMtdlwiO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kZVRvb2x0aXAgPSBcIm1lbnVfbW9kZVwiO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5kdC5maWx0ZXJzW2NvbC5maWVsZF0gPSB7IHZhbHVlOiBudWxsLCBtYXRjaE1vZGU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmR0Ll9maWx0ZXIoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJDbGFzc0NvbG9yKGNvbHVtblR5cGU6IERpc3BsYXlUeXBlcyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29sb3JmdWwgPSB0aGlzLmxheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc0NvbG9yZnVsTW9kZUVuYWJsZWQ7XHJcbiAgICBpZiAoY29sb3JmdWwgPT09IHRydWUpIHtcclxuICAgICAgbGV0IGNvbG9yRm9ySW50ZWdlckRpc3BsYXkgPSBEaXNwbGF5VHlwZUNvbG9yc1tjb2x1bW5UeXBlXSB8fCAnd2hpdGUtZ3JpZCc7XHJcbiAgICAgIHJldHVybiBjb2xvckZvckludGVnZXJEaXNwbGF5O1xyXG4gICAgfSBlbHNlIHJldHVybiAnd2hpdGUtZ3JpZCdcclxuICB9XHJcblxyXG4gIGdldCBjb2xvcmZ1bCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc0NvbG9yZnVsTW9kZUVuYWJsZWQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGluaXRpYWxDb2x1bW5zUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRldmlzZVNvY2lldGVOdW1PZkRlY2ltYWw6IG51bWJlciA9IHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLmFwcFNldHRpbmdzLmRldmlzZVNvY2lldGUubm9tYnJlRGVjaW1hbGVzID8/IERlZmF1bHRTb2NpZXRlRGV2aXNlLm5vbWJyZURlY2ltYWxlcztcclxuXHJcbiAgICB0aGlzLl9jb2x1bW5zLmZvckVhY2goKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAvLyBzZXQgaXNOdW1lcmljXHJcbiAgICAgIGNvbC5pc051bWVyaWMgPSBjb2wudHlwZSAhPSB1bmRlZmluZWQgJiYgY29sLnR5cGUgIT0gbnVsbCAmJiAoTnVtZXJpY0Rpc3BsYXlUeXBlcy5pbmRleE9mKGNvbC50eXBlKSA+PSAwKTtcclxuXHJcbiAgICAgIC8vIHNldCBmaWx0ZXJJbnB1dFR5cGVcclxuICAgICAgc3dpdGNoIChjb2wudHlwZSkge1xyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRBVEVfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuREFURVRJTUVfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk6XHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZOlxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTpcclxuICAgICAgICBjYXNlIERpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZOlxyXG4gICAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdudW1lcmljJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWToge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgY29sLmZpbHRlcklucHV0VHlwZSA9ICd0ZXh0JztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNldCBudW1PZkRlY2ltYWxcclxuICAgICAgaWYgKGNvbC5udW1PZkRlY2ltYWwpIHJldHVybjtcclxuXHJcbiAgICAgIGlmICghY29sLnR5cGUpIHtcclxuICAgICAgICBjb2wubnVtT2ZEZWNpbWFsID0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY29sLmlzTnVtZXJpYykge1xyXG4gICAgICAgIGNvbC5udW1PZkRlY2ltYWwgPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC50eXBlID09PSBEaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZKSB7XHJcbiAgICAgICAgY29sLm51bU9mRGVjaW1hbCA9IGRldmlzZVNvY2lldGVOdW1PZkRlY2ltYWw7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC50eXBlID09PSBEaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZKSB7XHJcbiAgICAgICAgY29sLm51bU9mRGVjaW1hbCA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soaXRlbTogYW55KSB7XHJcbiAgICBpZiAoaXRlbS5tb2RlID09PSBcIlNFQVJDSFwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5jYWxlbmRhckV2ZW50Q2xpY2suZW1pdChpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZURhdGVSYW5nZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBsZXQgc3RhcnQgPSB0aGlzLnNlYXJjaEZpZWxkcz8uZmluZCh4ID0+IHguZmllbGQgPT09IHRoaXMuY2FsZW5kZXJTY2hlbWE/LnN0YXJ0KVxyXG4gICAgbGV0IGVuZCA9IHRoaXMuc2VhcmNoRmllbGRzPy5maW5kKHggPT4geC5maWVsZCA9PT0gdGhpcy5jYWxlbmRlclNjaGVtYT8uZW5kKVxyXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xyXG4gICAgICBzdGFydC52YWx1ZSA9IGV2ZW50LnN0YXJ0O1xyXG4gICAgICBlbmQudmFsdWUgPSBldmVudC5lbmQ7XHJcbiAgICAgIHN0YXJ0LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgZW5kLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGxTZWFyY2hIYW5kbGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnBhZ2VkUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5tYXhSZXN1bHRDb3VudCA9IGV2ZW50Lm1heFJlc3VsdENvdW50O1xyXG4gICAgICB0aGlzLnBhZ2VkUmVxdWVzdC5za2lwQ291bnQgPSBldmVudC5za2lwQ291bnQ7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICAgIHRoaXMucGFnZSQubmV4dCh7IC4uLnRoaXMucGFnZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEhlYWRlclRpdGxlcyh0aXRsZXM6IHN0cmluZ1tdLCBpdGVtOiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIXRpdGxlcyB8fCAhaXRlbSlcclxuICAgICAgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IGl0ZW0udWlkO1xyXG4gICAgaWYgKHRoaXMudGl0bGVDYWNoZS5oYXMoa2V5KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy50aXRsZUNhY2hlLmdldChrZXkpIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcyA9IHRpdGxlcy5tYXAodCA9PiBpdGVtW3RdKS5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgdGhpcy50aXRsZUNhY2hlLnNldChrZXksIHJlcyk7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgb25TdGF0dXNGaWx0ZXJDaGFuZ2VkKGV2dDogYW55KSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGV2dDtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHM/LmZpbHRlcihzZiA9PiBzZi5maWVsZCAhPT0gdGhpcy5lbnRpdHlJbmZvPy5zdGF0dXNDb2x1bW5OYW1lKTtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzPy5wdXNoKHtcclxuICAgICAgZmllbGQ6IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzQ29sdW1uTmFtZSA/PyBcIlwiLFxyXG4gICAgICB2YWx1ZTogZXZ0LFxyXG4gICAgICBsYWJlbFZhbHVlOiAnJyxcclxuICAgICAgdHlwZTogSW5wdXRUeXBlcy5DT01CT0JPWCxcclxuICAgICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yVHlwZS5FUVVBTCxcclxuICAgICAgc3R5bGVDbGFzczogXCJoaWRkZW5cIlxyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhcInNlYXJjaCBmaWVsZHMgPT5cIiwgdGhpcy5zZWFyY2hGaWVsZHMpXHJcbiAgICB0aGlzLnRlbXBTZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkcyA/PyB0aGlzLnRlbXBTZWFyY2hGaWVsZHNcclxuICB9XHJcblxyXG4gIG9uV29ya2Zsb3dFdGF0RmlsdGVyQ2hhbmdlZChldnQ6IGFueSkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBldnQ7XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzPy5maWx0ZXIoc2YgPT4gc2YuZmllbGQgIT09IFwiV29ya2Zsb3dFdGF0XCIpO1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHM/LnB1c2goe1xyXG4gICAgICBmaWVsZDogXCJXb3JrZmxvd0V0YXRcIixcclxuICAgICAgdmFsdWU6IGV2dCxcclxuICAgICAgbGFiZWxWYWx1ZTogJycsXHJcbiAgICAgIHR5cGU6IElucHV0VHlwZXMuQ09NQk9CT1gsXHJcbiAgICAgIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvclR5cGUuRVFVQUwsXHJcbiAgICAgIHN0eWxlQ2xhc3M6IFwiaGlkZGVuXCJcclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coXCJzZWFyY2ggZmllbGRzID0+XCIsIHRoaXMuc2VhcmNoRmllbGRzKVxyXG4gICAgdGhpcy50ZW1wU2VhcmNoRmllbGRzID0gdGhpcy5zZWFyY2hGaWVsZHMgPz8gdGhpcy50ZW1wU2VhcmNoRmllbGRzXHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50KTtcclxuICB9XHJcblxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XHJcblxyXG4gICAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZShmaWxlLCBmaWxlRXh0ZW5zaW9uLCBpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBsb2FkRmlsZShmaWxlOiBGaWxlLCBmaWxlRXh0ZW5zaW9uOiBhbnksIGl0ZW06IGFueSkge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoZTogUHJvZ3Jlc3NFdmVudDxGaWxlUmVhZGVyPikgPT4ge1xyXG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgQXJyYXlCdWZmZXI7XHJcbiAgICAgIGlmICghYXJyYXlCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgY29uc3QgZmljaGllclRvU2VuZCA9IG5ldyBGaWNoaWVyKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZGF0ZUZpY2hpZXIgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm5vbSA9IGZpbGUubmFtZTtcclxuICAgICAgZmljaGllclRvU2VuZC5vYmpldCA9ICcnO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm5vbUZpY2hpZXJDb21wbGV0ID0gZmlsZS5uYW1lO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuY29udGVudSA9IGJhc2U2NENvbnRlbnQ7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQudGFibGVMaWVlID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLnBrZXkgPSBpdGVtLnVpZD8udG9TdHJpbmcoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5leHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uXHJcbiAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlLmNyZWF0ZShmaWNoaWVyVG9TZW5kKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoXCJmaWNoaWVyX2pvaW50XCIpO1xyXG4gICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG4gIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnRvYShiaW5hcnkpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuZHJhZ0VudGVyQ291bnQrKztcclxuXHJcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRHJhZ092ZXIpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlUG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCArIDUwLFxyXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgKyAzMFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuZHJhZ0VudGVyQ291bnQtLTtcclxuXHJcbiAgICBpZiAodGhpcy5kcmFnRW50ZXJDb3VudCA8PSAwKSB7XHJcbiAgICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmRyYWdFbnRlckNvdW50ID0gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMubWVzc2FnZVBvc2l0aW9uID0ge1xyXG4gICAgICB4OiBldmVudC5jbGllbnRYICsgNTAsXHJcbiAgICAgIHk6IGV2ZW50LmNsaWVudFkgKyAzMCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtAc2xpZGVJbk91dF09XCJzaG93U2VhcmNoRmllbGQgPyAnaW4nIDogJ291dCdcIiAqbmdJZj1cInNob3dHbG9iYWxTZWFyY2hcIj5cclxuICAgIDwhLS0gU2VhcmNoQm94Ly8gSWYgZXhpc3QgLS0+XHJcbiAgICA8dHNpLXNlYXJjaC1ib3ggXHJcbiAgICAgIFtpc1J0bE1vZGVdPVwiaXNSdGxNb2RlXCIgXHJcbiAgICAgIFsoc2VhcmNoRmllbGRzKV09XCJzZWFyY2hGaWVsZHNcIiBcclxuICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgIFtlbnRpdHlJbmZvXT1cImVudGl0eUluZm9cIlxyXG4gICAgICBbc3RhdHVzTWV0YWRhdGFdPVwic3RhdHVzTWV0YWRhdGFcIlxyXG4gICAgICBbZGVzY3JpbWluYXRvclZhbHVlXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNDaGFuZ2UpPVwic2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VzKCRldmVudClcIiBcclxuICAgICAgKGtleXdvcmRWYWx1ZUNoYW5nZWQpPVwia2V5d29yZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgKHNlYXJjaEZpZWxkc0FwcGxpZWQpPVwic2VhcmNoKCRldmVudClcIlxyXG4gICAgICAoc3RhdHVzRmlsdGVyQ2hhbmdlZCk9XCJvblN0YXR1c0ZpbHRlckNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICh3b3JrZmxvd0V0YXRGaWx0ZXJDaGFuZ2VkKT1cIm9uV29ya2Zsb3dFdGF0RmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgKGNvbWJvQm94TGFiZWxDaGFuZ2VkKT1cImNvbWJvQm94TGFiZWxDaGFuZ2VkKCRldmVudClcIj5cclxuICAgIDwvdHNpLXNlYXJjaC1ib3g+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJfc2hvd0NhbGVuZGVyVmlldyA9PT0gZmFsc2UgJiYgX3Nob3dDYXJkVmlldyA9PT0gZmFsc2UgJiYgX3Nob3dLYW5iYW5WaWV3ID09PSBmYWxzZVwiIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICBcclxuICAgIDxwLXRhYmxlICNkdCBbbGF6eV09XCJpc0dyaWREYXRhUGFnZWRJbkFwaVwiIFtsYXp5TG9hZE9uSW5pdF09XCJzZWFyY2hPbkluaXRcIiAob25MYXp5TG9hZCk9XCJsYXp5TG9hZCgkZXZlbnQpXCJcclxuICAgICAgZGF0YUtleT1cInt7IGtleSB9fVwiIFt0b3RhbFJlY29yZHNdPVwicGFnZS50b3RhbENvdW50XCIgW2xvYWRpbmddPVwicGFnZS5sb2FkaW5nXCIgW3Jlb3JkZXJhYmxlQ29sdW1uc109XCJ0cnVlXCJcclxuICAgICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiIGNvbHVtblJlc2l6ZU1vZGU9XCJleHBhbmRcIiBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIiBbdmFsdWVdPVwicGFnZS5pdGVtc1wiXHJcbiAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiIFtzY3JvbGxhYmxlXT1cInRydWVcIiBzY3JvbGxIZWlnaHQ9XCI2MDBweFwiIFsocm93cyldPVwicGFnZS5wYWdlU2l6ZVwiXHJcbiAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZmllbGRzKClcIiBbdGFibGVTdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAnNTByZW0nIH1cIlxyXG4gICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie3sgJ1Nob3dpbmcnIHwgbG9jYWxpemUgfX0ge3tnZXRGaXJzdEVsZW1lbnRJbmRleCgpfX0ge3tcclxuICAgICAgICAndG8nIHwgbG9jYWxpemVcclxuICAgICAgfX0ge2xhc3R9IHt7ICdvZicgfCBsb2NhbGl6ZSB9fSBcclxuICAgICAge3RvdGFsUmVjb3Jkc30ge3sgJ2VudHJpZXMnIHwgbG9jYWxpemUgfX1cIiBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxLCAxMCwgMjUsIDUwXVwiIFtzb3J0TW9kZV09XCJzb3J0TW9kZVwiXHJcbiAgICAgIFttdWx0aVNvcnRNZXRhXT1cInNvcnRNZXRhc1wiIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1ncmlkbGluZXNcIiBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXHJcbiAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIiBbKHNlbGVjdGlvbildPVwic2VsZWN0aW9uXCIgKG9uUm93VW5zZWxlY3QpPVwib25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpXCJcclxuICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgKG9uUm93U2VsZWN0KT1cIm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKVwiPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yXCI+XHJcbiAgICAgICAgICAgIHt7IGhlYWRlciB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0xIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmlsdGVyQnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiZ3JpZF90b2dnbGVfaGVhZGVyX2ZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBbaWNvbl09XCJmaWx0ZXJJY29uXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgW3Rvb2x0aXBUZXh0XT1cImZpbHRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBob3ZlcjpzaGFkb3ctNiBwLWJ1dHRvbi1wcmltYXJ5IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSGVhZGVyRmlsdGVycygpXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93SGVhZGVyRmlsdGVyc1wiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImdyaWRfdG9nZ2xlX2hlYWRlcl9maWx0ZXJfbW9kZVwiPlxyXG4gICAgICAgICAgICAgIDxUc2ktQnV0dG9uIFtpY29uXT1cImZpbHRlck1vZGVJY29uXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCJmaWx0ZXJNb2RlVG9vbHRpcFwiIFtzdHlsZUNsYXNzXT1cIidtbC0xIHAtYnV0dG9uLXByaW1hcnkgcC1idXR0b24taWNvbi1vbmx5J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSGVhZGVyRmlsdGVyc01vZGUoKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImdyaWRfY2xlYXJfZmlsdGVyX2J1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxUc2ktQnV0dG9uIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFt0b29sdGlwVGV4dF09XCInaWNvbi1jbGVhci1maWx0ZXInXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtbC0xIHAtZWxlbWVudCBob3ZlcjpzaGFkb3ctNiBwLWJ1dHRvbi1wcmltYXJ5IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGVhckZpbHRlcnMoKVwiIFtpY29uU3JjXT1cIidhc3NldHMvbGF5b3V0L2ltYWdlcy9pY29uL2ljb24tY2xlYXItZmlsdGVyLnN2ZydcIj5cclxuICAgICAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJncmlkX2V4cG9ydF9idXR0b25cIj5cclxuICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBpY29uPVwicC1idXR0b24taWNvbiBwaSBwaS1maWxlLWV4Y2VsXCIgKG9uQ2xpY2spPVwiZXhwb3J0RXhjZWwoKVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgbWwtMiBwLTEgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIHRvb2x0aXBUZXh0PVwiWExTXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IGNsYXNzPVwibWwtMVwiIFtvcHRpb25zXT1cImNvbHVtbnNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29sdW1uc1wiIG9wdGlvbkxhYmVsPVwidHJhbnNsYXRlZEhlYWRlclwiXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtc0xhYmVsPVwiezB9IHt7ICdjb2x1bW5zX3NlbGVjdGVkJyB8IGxvY2FsaXplIH19XCIgW3N0eWxlXT1cInsgJ21pbi13aWR0aCc6ICcxODBweCcgfVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnY2hvb3NlX2NvbHVtbnMnIHwgbG9jYWxpemUgfX1cIiAob25DaGFuZ2UpPVwib25TZWxlY3RlZENvbHVtbnNDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxkaXY+IC0tPlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uICpuZ0lmPVwic2hvd0dsb2JhbFNlYXJjaFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGUgaWNvbj1cInBpIHBpLXNlYXJjaFwiIChjbGljayk9XCJzZWFyY2goKVwiPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0aCBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBnZXRDaGVja2JveFN0eWxlKCkgOiB7fVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICd6LWluZGV4LWNoZWNrYm94J1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAuM3JlbSAhaW1wb3J0YW50OyB3aWR0aDogM3JlbTtcIj5cclxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94ICN0YWJsZUhlYWRlckNoZWNrYm94PjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwhLS0gPHRoIHNjb3BlPVwiY29sXCIgc3R5bGU9XCJ3aWR0aDozcmVtXCI+PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGg+IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgW3N0eWxlXT1cImNvbC5zdHlsZVwiIHBUb29sdGlwPVwie3sgY29sLnRvb2xUaXBUZXh0IHwgbG9jYWxpemUgfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiKCFjb2wuaXNCdXR0b24pID8gY29sLmZpZWxkIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgW3BSZXNpemFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuaXNCdXR0b24gfHwgY29sLnR5cGUgPT09IGRpc3BsYXlUeXBlcy5JTUFHRV9ESVNQTEFZXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cImNvbC5pc0J1dHRvblwiIFtwUmVvcmRlcmFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuaXNCdXR0b25cIiBwUmVvcmRlcmFibGVDb2x1bW5cclxuICAgICAgICAgICAgICBwUmVzaXphYmxlQ29sdW1uIFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGNvbC5oZWFkZXJDb2x1bW5TdHlsZSA6IHt9XCJcclxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY29sdW1uXT1cImNvbC5pc0J1dHRvblwiIFxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltcclxuICAgICAgICAgICAgICAgIGdldEhlYWRlckNsYXNzQ29sb3IoY29sLnR5cGUpLFxyXG4gICAgICAgICAgICAgICAgcGFnZS5sb2FkaW5nID8gJ25vLXotaW5kZXgnIDogJycsXHJcbiAgICAgICAgICAgICAgICAoY29sLmlzQnV0dG9uICkgPyAndy0xcmVtJyA6ICcnLFxyXG4gICAgICAgICAgICAgICAgKGNvbC5pc0J1dHRvbiB8fCBjb2wudHlwZSA9PT0gZGlzcGxheVR5cGVzLklNQUdFX0RJU1BMQVkpID8gJ25vbi1yZXNpemFibGUtY29sdW1uJyA6ICcnXHJcbiAgICAgICAgICAgICAgICBdXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wuaGVhZGVyQ29sdW1uU3R5bGUgOiB7fVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicC0wIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY29sIHAtMCBtLTBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndy0xcmVtJzogY29sLmlzQnV0dG9ufVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdEluU3BlY2lmaWVkQ29sdW1uKGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNvbC1maXhlZCBwLTAgbS0wXCIgc3R5bGU9XCJ3aWR0aDogMXJlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gY2xhc3M9XCJ3LTFyZW0gbS0wIHAtMFwiICpuZ0lmPVwibm90SW5TcGVjaWZpZWRDb2x1bW4oY29sLmZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkPVwie3sgY29sLmZpZWxkIH19XCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgIDx0ciAqbmdJZj1cInNob3dIZWFkZXJGaWx0ZXJzXCI+XHJcbiAgICAgICAgICA8IS0tIDx0aCBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGg+IC0tPlxyXG4gICAgICAgICAgPHRoIFtuZ0NsYXNzXT1cInBhZ2UubG9hZGluZyA/ICduby16LWluZGV4JyA6ICcnXCIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09IG11bHRpcGxlR3JpZFNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA0cmVtXCI+PC90aD5cclxuICAgICAgICAgIDx0aCBzdHlsZT1cIm92ZXJmbG93OiBpbmhlcml0XCIgc2NvcGU9XCJjb2xcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIFt0eXBlXT1cImNvbC5maWx0ZXJJbnB1dFR5cGVcIiBbZmllbGRdPVwiY29sLmZpZWxkXCIgW2Rpc3BsYXldPVwiY2hhbmdlSGVhZGVyRmlsdGVyc01vZGVcIlxyXG4gICAgICAgICAgICAgIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb2wubnVtT2ZEZWNpbWFsXCIgW21heEZyYWN0aW9uRGlnaXRzXT1cImNvbC5udW1PZkRlY2ltYWxcIiBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFttYXRjaE1vZGVdPVwiZmlsdGVyTWF0Y2hNb2RlLkVRVUFMU1wiPlxyXG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0gbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LWluZGV4PVwicm93SW5kZXhcIj5cclxuXHJcbiAgICAgICAgPCEtLSBDQVNFIDogbXVsdGlwbGUgc2VsZWN0aW9uIC0tPlxyXG4gICAgICAgIDx0ciBbbmdTdHlsZV09XCJpdGVtLmNvbG9yICYmIGl0ZW0uY29sb3IgIT09ICcnID8geydiYWNrZ3JvdW5kLWNvbG9yJzogaXRlbS5jb2xvcn0gOiB7fVwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZTtcclxuICAgICAgICAgICAgZWxzZSBub3RNdWx0aXBsZVNlbGVjdGlvbk1vZGVCbG9ja1wiIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIiAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50LGl0ZW0pXCIgKGRyYWdlbnRlcik9XCJvbkRyYWdFbnRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIj5cclxuICAgICAgICAgIDx0ZCBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBnZXRDaGVja2JveFN0eWxlKCkgOiB7fVwiIHN0eWxlPVwicGFkZGluZzogLjNyZW0gIWltcG9ydGFudDtcIj5cclxuICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwhLS0gPHRkIGNsYXNzPVwicC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGVuY2lsXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXQoaXRlbSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlKGl0ZW0pXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPiAtLT5cclxuICAgICAgICAgIDx0ZCBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wubmdTdHlsZSA6IHt9XCIgW25nQ2xhc3NdPVwicGFnZS5sb2FkaW5nID8gJ25vLXotaW5kZXgnIDogJydcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImhlaWdodDogbWluLWNvbnRlbnQ7IG1hcmdpbi1sZWZ0OiAtLjVyZW07XCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgLS0+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBjdXJyZW5jeU90aGVyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW5jeU90aGVyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkYXRlUGlja2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5IFtjdXJyZW5jeV09XCJjb2wuY3VycmVuY3lDb2RlXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1EYXRlLVBpY2tlciAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGRhdGVUaW1lUGlja2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1EYXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1EYXRlLVBpY2tlciAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVRpbWVQaWNrZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRBVEVUSU1FX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNoZWNrQm94T3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURhdGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiIFtzaG93VGltZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1DaGVja0JveCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja0JveE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGVjaW1hbE91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tib3gtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tib3gtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVjaW1hbE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpbnRlZ2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLURpc3BsYXkgW2Zvcm1hdERlY2ltYWxdPVwiY29sLmZvcm1hdERlY2ltYWxcIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgIFtudW1PZkRlY2ltYWxdPVwiY29sLm51bU9mRGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktSW50ZWdlciAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlZ2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIHJhdGVPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUludGVnZXItRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUc2ktUmF0ZS1JbnB1dCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXRlT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGRpc3BsYXlOZXN0ZWRQcm9wT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1SYXRlLURpc3BsYXkgW2lzRnJhY3Rpb25dPVwiY29sLmlzRnJhY3Rpb25cIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktUmF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBkaXNwbGF5LW5lc3RlZC1wcm9wIC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlOZXN0ZWRQcm9wT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuTkVTVEVEX1BST1BfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBkaXNwbGF5U3RhdHVzQ29sb3JCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLURpc3BsYXktTmVzdGVkLVByb3AgW3NvdXJjZVVybF09XCJjb2wuZGlzcGxheU5lc3RlZFByb3BlcnR5U291cmNlVXJsXCIgW2lkXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNwbGF5VmFsdWVdPVwiY29sLmRpc3BsYXlOZXN0ZWRQcm9wZXJ0eWxhYmVsRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLURpc3BsYXktTmVzdGVkLVByb3A+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNDb2xvckJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2xvcjsgZWxzZSBkaXNwbGF5U3RhdHVzVmFsdWVDb2x1bW5CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIHJvdW5kZWQgdGV4dC13aGl0ZSB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1bY29sLmZpZWxkXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c1ZhbHVlQ29sdW1uQmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc1N0YXR1c0NvbHVtblZhbHVlOyBlbHNlIGRpc3BsYXlTdGF0dXNDb2x1bW5CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS08cC10YWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3RhdHVzQ29sb3IoaXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3AtdGFnPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNNZXRhZGF0YUZvclN0YXR1c0hpc3RvcnkgJiYgZ2V0U3RhdHVzT3B0aW9uRm9yU3RhdHVzSGlzdG9yeShpdGVtW2NvbC5maWVsZF0pIGFzIG9wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJvcHQuY29sb3JIZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LmNvbG9ySGV4ID8gJ3doaXRlJyA6ICdibGFjaydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC1ibGFjayBiZy13aGl0ZSc6ICFvcHQuY29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC13aGl0ZSc6IG9wdC5jb2xvckhleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC50cmFuc2xhdGVkTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ICYmICFnZXRTdGF0dXNPcHRpb25Gb3JTdGF0dXNIaXN0b3J5KGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGRpc3BsYXktc3RhdHVzLWNvbHVtbiAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5U3RhdHVzQ29sdW1uQmxvY2s+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc1N0YXR1c0NvbHVtbjsgZWxzZSBkaXNwbGF5QnV0dG9uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPHAtdGFnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0YXR1c0NvbG9yKGl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLXRhZz4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhICYmIGdldFN0YXR1c09wdGlvbihpdGVtW2NvbC5maWVsZF0pIGFzIG9wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImxpZ2h0ZW5Db2xvcihvcHQuY29sb3JIZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy10b3BdPVwiJzAuMXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy1ib3R0b21dPVwiJzAuMXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC50cmFuc2xhdGVkTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGEgJiYgIWdldFN0YXR1c09wdGlvbihpdGVtW2NvbC5maWVsZF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGQgc3RhdHVzLWJhZGdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGRpc3BsYXktbmVzdGVkLXByb3AgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheUJ1dHRvbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNCdXR0b247IGVsc2UgZGlzcGxheVRleHRFeWVCbG9ja1wiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiAgW3N0eWxlQ2xhc3NdPVwiY29sLnN0eWxlQ2xhc3NcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgY29sLmJ1dHRvbkljb24gfX1cIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBbdG9vbHRpcFRleHRdPVwiY29sLnRvb2xUaXBUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjb2wuYnV0dG9uTGFiZWwgPyBjb2wuYnV0dG9uTGFiZWwgOiBpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkKGl0ZW0sIGNvbC5maWVsZClcIiA+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGRpc3BsYXktdGV4dC1leWUgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVRleHRFeWVCbG9jaz5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5URVhUX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgZGVmYXVsdFRleHRPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGV4dE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImlzRHJhZ092ZXJcIiBbbmdTdHlsZV09XCJ7IGxlZnQ6IG1lc3NhZ2VQb3NpdGlvbi54ICsgJ3B4JywgdG9wOiBtZXNzYWdlUG9zaXRpb24ueSArICdweCcgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnLW1lc3NhZ2UgY3Vyc29yLWZvbGxvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IFwiSm9pbnR1cmVcIiB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIDwhLS0gQ0FTRSA6IHNpbmdsZSBvciBub25lIHNlbGVjdGlvbiAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdE11bHRpcGxlU2VsZWN0aW9uTW9kZUJsb2NrPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHRyIFtuZ1N0eWxlXT1cIml0ZW0uY29sb3IgJiYgaXRlbS5jb2xvciAhPT0gJycgPyB7J2JhY2tncm91bmQtY29sb3InOiBpdGVtLmNvbG9yfSA6IHt9XCJcclxuICAgICAgICAgICAgICBbcFNlbGVjdGFibGVSb3ddPVwiaXRlbVwiIFtwU2VsZWN0YWJsZVJvd0luZGV4XT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPCEtLSA8dGQgY2xhc3M9XCJwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdChpdGVtKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiIChjbGljayk9XCJkZWxldGUoaXRlbSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+IC0tPlxyXG4gICAgICAgICAgICAgIDx0ZCBbbmdTdHlsZV09XCJwYWdlLml0ZW1zLmxlbmd0aCA+IDAgPyBjb2wubmdTdHlsZSA6IHt9XCIgc3R5bGU9XCJoZWlnaHQ6IG1pbi1jb250ZW50O1wiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAnbm8tei1pbmRleCc6IHBhZ2UubG9hZGluZyxcclxuICAgICAgICAgICAgICAgICAgJ3ctMXJlbSc6IGNvbC5pc0J1dHRvblxyXG4gICAgICAgICAgICAgICAgfVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBbbmdDbGFzc109XCJwYWdlLmxvYWRpbmcgPyAnbm8tei1pbmRleCcgOiAnJ1wiIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dCAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGN1cnJlbmN5T3RoZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktT3RoZXItSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2N1cnJlbmN5T3RoZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX09USEVSX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGVQaWNrZXJPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheSBbY3VycmVuY3ldPVwiY29sLmN1cnJlbmN5Q29kZVwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5EQVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGVUaW1lUGlja2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURhdGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlVGltZVBpY2tlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREFURVRJTUVfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgY2hlY2tCb3hPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCIgW3Nob3dUaW1lXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1EYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktQ2hlY2tCb3ggLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrQm94T3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBkZWNpbWFsT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrYm94LURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1DaGVja2JveC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktRGVjaW1hbC1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVjaW1hbE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBpbnRlZ2VyT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSBbZm9ybWF0RGVjaW1hbF09XCJjb2wuZm9ybWF0RGVjaW1hbFwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtudW1PZkRlY2ltYWxdPVwiY29sLm51bU9mRGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ludGVnZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmF0ZU91dHB1dEJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1SYXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXRlT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRpc3BsYXlOZXN0ZWRQcm9wT3V0cHV0QmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLVJhdGUtRGlzcGxheSBbaXNGcmFjdGlvbl09XCJjb2wuaXNGcmFjdGlvblwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktUmF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5LW5lc3RlZC1wcm9wIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5TmVzdGVkUHJvcE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuTkVTVEVEX1BST1BfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGlzcGxheVN0YXR1c0NvbG9yQmxvY2tcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURpc3BsYXktTmVzdGVkLVByb3AgW3NvdXJjZVVybF09XCJjb2wuZGlzcGxheU5lc3RlZFByb3BlcnR5U291cmNlVXJsXCIgW2lkXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVZhbHVlXT1cImNvbC5kaXNwbGF5TmVzdGVkUHJvcGVydHlsYWJlbEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGlzcGxheS1OZXN0ZWQtUHJvcD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVN0YXR1c0NvbG9yQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2xvcjsgZWxzZSBkaXNwbGF5U3RhdHVzVmFsdWVDb2x1bW5CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSByb3VuZGVkIHRleHQtd2hpdGUgdGV4dC1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtW2NvbC5maWVsZF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNWYWx1ZUNvbHVtbkJsb2NrPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNTdGF0dXNDb2x1bW5WYWx1ZTsgZWxzZSBkaXNwbGF5U3RhdHVzQ29sdW1uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZnJvemVuLWNvbHVtbi1ydGwtbW9kZSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPHAtdGFnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0YXR1c0NvbG9yKGl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLXRhZz4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGFGb3JTdGF0dXNIaXN0b3J5ICYmIGdldFN0YXR1c09wdGlvbkZvclN0YXR1c0hpc3RvcnkoaXRlbVtjb2wuZmllbGRdKSBhcyBvcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSBmb250LWJvbGQgc3RhdHVzLWJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwib3B0LmNvbG9ySGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIm9wdC5jb2xvckhleCA/ICd3aGl0ZScgOiAnYmxhY2snXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtYmxhY2sgYmctd2hpdGUnOiAhb3B0LmNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtd2hpdGUnOiBvcHQuY29sb3JIZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHQudHJhbnNsYXRlZExhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhRm9yU3RhdHVzSGlzdG9yeSAmJiAhZ2V0U3RhdHVzT3B0aW9uRm9yU3RhdHVzSGlzdG9yeShpdGVtW2NvbC5maWVsZF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXktc3RhdHVzLXByb3AgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlTdGF0dXNDb2x1bW5CbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc1N0YXR1c0NvbHVtbjsgZWxzZSBkaXNwbGF5QnV0dG9uQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGZyb3plbi1jb2x1bW4tcnRsLW1vZGUganVzdGlmeS1jb250ZW50LWNlbnRlciBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS08cC10YWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0YXR1c0NvbG9yKGl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcC10YWc+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1c01ldGFkYXRhICYmIGdldFN0YXR1c09wdGlvbihpdGVtW2NvbC5maWVsZF0pIGFzIG9wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMtYmFkZ2UgZm9udC1ib2xkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJsaWdodGVuQ29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLXRvcF09XCInMC4xcmVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctYm90dG9tXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC50cmFuc2xhdGVkTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzTWV0YWRhdGEgJiYgICFnZXRTdGF0dXNPcHRpb24oaXRlbVtjb2wuZmllbGRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMtYmFkZ2UgZm9udC1ib2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXktbmVzdGVkLXByb3AgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlCdXR0b25CbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc0J1dHRvbjsgZWxzZSBkaXNwbGF5SW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInBhZ2UuaXRlbXMubGVuZ3RoID4gMCA/IGNvbC5uZ1N0eWxlIDoge31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicGFnZS5sb2FkaW5nID8gJ25vLXotaW5kZXgnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmcm96ZW4tY29sdW1uLXJ0bC1tb2RlIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8VHNpLUJ1dHRvbiBbc3R5bGVDbGFzc109XCJjb2wuc3R5bGVDbGFzc1wiIHR5cGU9XCJidXR0b25cIiBpY29uPVwie3sgY29sLmJ1dHRvbkljb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBbdG9vbHRpcFRleHRdPVwiY29sLnRvb2xUaXBUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoaXRlbSwgY29sLmZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImNvbC5idXR0b25MYWJlbCA/IGNvbC5idXR0b25MYWJlbCA6IGl0ZW1bY29sLmZpZWxkXVwiPjwvVHNpLUJ1dHRvbj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5LWltYWdlIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5SW1hZ2U+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuSU1BR0VfRElTUExBWTsgZWxzZSBkaXNwbGF5VGV4dEV5ZUJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtM3JlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRzaS1pbWFnZS1kaXNwbGF5IFtoZWFkZXJUaXRsZXNdPVwiZ2V0SGVhZGVyVGl0bGVzKGNvbC5oZWFkZXJUaXRsZXMsIGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzUm91bmRlZF09XCJjb2wuaXNSb3VuZGVkXCIgW3NyY109XCJpdGVtW2NvbC5maWVsZF1cIiBbYWx0XT1cImNvbC5oZWFkZXIgfHwgJ2ltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIicxMDAlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90c2ktaW1hZ2UtZGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gZGlzcGxheS10ZXh0LWV5ZSAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVRleHRFeWVCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLlRFWFRfRElTUExBWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGVmYXVsdFRleHRPdXRwdXRCbG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwaSBwaS1leWVcIiAoY2xpY2spPVwiZXllQ2xpY2tlZChpdGVtW2NvbC5maWVsZF0pXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgdHJ1bmNhdGVTdHJpbmcoaXRlbVtjb2wuZmllbGRdLCA1MCkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHRPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZVwiPjwvdGQ+XHJcbiAgICAgICAgICA8dGQgY2xhc3M9XCJwci0wXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBzZWxlY3RlZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5zaG93U3VtbWFyeVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheSBbaW5wdXREYXRhXT1cImdldFN1bW1hcnkoY29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIElOVEVHRVJfRElTUExBWSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUludGVnZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBSQVRFX0RJU1BMQVkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5IFtpc0ZyYWN0aW9uXT1cImNvbC5pc0ZyYWN0aW9uID8/IGZhbHNlXCIgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVJhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBERUNJTUFMX0RJU1BMQVkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1EaXNwbGF5IFtmb3JtYXREZWNpbWFsXT1cImNvbC5mb3JtYXREZWNpbWFsXCIgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbC5maWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtRGlzcGxheT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgW2N1cnJlbmN5XT1cImNvbC5jdXJyZW5jeU90aGVyQ29kZVwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzdW1tYXJ5XCI+XHJcbiAgICAgICAge3sgcGFnZS50b3RhbENvdW50IH19IHt7IFwicmVjb3Jkc19sYWJlbFwiIHwgbG9jYWxpemUgfX1cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbG9yZnVsXCI+XHJcbiAgICAgICAgICA8c3Bhbj5WaWV3IEdyaWQ8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj58IFNlYXJjaE9uSW5pdCA6IHt7IHNlYXJjaE9uSW5pdCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPnwgUGFnaW5hdGlvbiBJbiBBcGkgOiB7eyBpc0dyaWREYXRhUGFnZWRJbkFwaSB9fTwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdGFibGU+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiX3Nob3dDYWxlbmRlclZpZXcgPT09IHRydWVcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPHRzaS1jYWxlbmRlciBbc2NoZW1hXT1cImNhbGVuZGVyU2NoZW1hXCIgW2V2ZW50c0RhdGFdPVwicGFnZS5pdGVtc1wiIFtjcnVkU2VydmljZV09XCJjcnVkU2VydmljZVwiXHJcbiAgICAgIChkYXRlUmFuZ2VDaGFuZ2UpPVwiaGFuZGxlRGF0ZVJhbmdlQ2hhbmdlKCRldmVudClcIiAoZXZlbnRDbGljayk9XCJoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soJGV2ZW50KVwiPjwvdHNpLWNhbGVuZGVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiX3Nob3dDYXJkVmlldyA9PT0gdHJ1ZVwiIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICA8VHNpLWNhcmQtbGlzdCBbY2FyZEJ1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiIFtpZF09XCJpZFwiIChidXR0b25DbGlja2VkKT1cImJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgW3BhZ2UkXT1cInBhZ2UkXCIgW3BhZ2VdPVwicGFnZVwiIChjYWxsU2VhcmNoKT1cImNhbGxTZWFyY2hIYW5kbGVyKCRldmVudClcIj5cclxuICAgIDwvVHNpLWNhcmQtbGlzdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIl9zaG93S2FuYmFuVmlldyA9PT0gdHJ1ZVwiIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICA8VHNpLWthbmJhbiBbY2FyZEJ1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiIFtpZF09XCJpZFwiIChidXR0b25DbGlja2VkKT1cImJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgW3BhZ2UkXT1cInBhZ2UkXCIgW3BhZ2VdPVwicGFnZVwiIChjYWxsU2VhcmNoKT1cImNhbGxTZWFyY2hIYW5kbGVyKCRldmVudClcIiBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIj5cclxuICAgIDwvVHNpLWthbmJhbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19