@cqa-lib/cqa-ui 1.1.228 → 1.1.229

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.
@@ -898,8 +898,8 @@ export class LoopStepComponent extends BaseStepComponent {
898
898
  const finalStatus = isSuccess ? 'success' : 'failed';
899
899
  // First entry: value/description
900
900
  const valueDescription = subStep.text || subStep.description || (isSuccess
901
- ? `AI auto-heal successful. New locator: ${value}`
902
- : `AI auto-heal failed for element: ${value}`);
901
+ ? `AI auto-heal completed successfully`
902
+ : `AI auto-heal failed`);
903
903
  this.processedSubSteps.push({
904
904
  ...subStep,
905
905
  description: valueDescription,
@@ -970,8 +970,8 @@ export class LoopStepComponent extends BaseStepComponent {
970
970
  const finalStatus = isSuccess ? 'success' : 'failed';
971
971
  // First entry: value/description
972
972
  const valueDescription = (isSuccess
973
- ? `AI auto-heal successful. New locator: ${value}`
974
- : `AI auto-heal failed for element: ${value}`);
973
+ ? `AI auto-heal completed successfully`
974
+ : `AI auto-heal failed`);
975
975
  this.processedSubStepsForRunResult.push({
976
976
  ...subStep,
977
977
  description: valueDescription,
@@ -999,8 +999,20 @@ export class LoopStepComponent extends BaseStepComponent {
999
999
  }
1000
1000
  }
1001
1001
  else {
1002
- // All other logs pass through as-is
1003
- this.processedSubStepsForRunResult.push(subStep);
1002
+ const status = (subStep?.status ?? '').toString().toLowerCase();
1003
+ const isFailed = status === 'failed' || status === 'failure';
1004
+ const isLocatorStep = uiType === 'WAIT_FOR_LOCATOR' || uiType === 'FIND_LOCATOR' || uiType === 'LOCATOR_FOUND';
1005
+ if (isLocatorStep && isFailed) {
1006
+ const baseDesc = subStep?.description ?? subStep?.text ?? subStep?.title ?? '';
1007
+ const notFoundSuffix = ' - Element not found';
1008
+ this.processedSubStepsForRunResult.push({
1009
+ ...subStep,
1010
+ description: (baseDesc ? baseDesc + notFoundSuffix : notFoundSuffix.trim())
1011
+ });
1012
+ }
1013
+ else {
1014
+ this.processedSubStepsForRunResult.push(subStep);
1015
+ }
1004
1016
  }
1005
1017
  }
1006
1018
  }
@@ -1165,4 +1177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
1165
1177
  }], onIterationChange: [{
1166
1178
  type: Output
1167
1179
  }] } });
1168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9sb29wLXN0ZXAvbG9vcC1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9sb29wLXN0ZXAvbG9vcC1zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXVELFNBQVMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFM0osT0FBTyxFQUE0Tiw2QkFBNkIsRUFBc0IsOEJBQThCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2VixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUTNELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxpQkFBaUI7SUFMeEQ7O1FBa0JXLHFCQUFnQixHQUFzQixNQUFNLENBQUM7UUFJN0MsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUd4QixZQUFPLEdBQWEsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQWEsS0FBSyxDQUFDO1FBRy9CLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDL0MsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDcEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFDNUQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDL0QsdUJBQWtCLEdBQXdCLDZCQUE2QixDQUFDO1FBQ3hFLHdCQUFtQixHQUF5Qiw4QkFBOEIsQ0FBQztRQXFDM0Usc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQU14Qyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsNEJBQXVCLEdBQUcsRUFBRSxDQUFD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QXpCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUkwQixrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNHLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBUXRCLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTG9vcFN0ZXBDb25maWcsIExvb3BJdGVyYXRpb24sIEV4ZWN1dGlvblN0ZXBDb25maWcsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgRmFpbHVyZURldGFpbHMsIFN1YlN0ZXAsIFNlbGZIZWFsQW5hbHlzaXNEYXRhLCBTZWxmSGVhbEFjdGlvbiwgU3RlcEdyb3VwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIFNlbGZIZWFsQWN0aW9uRXZlbnQsIEFkZFN0ZXBNZW51T3B0aW9uLCBERUZBVUxUX0FERF9TVEVQX01FTlVfT1BUSU9OUywgU3RlcE1vcmVNZW51T3B0aW9uLCBERUZBVUxUX1NURVBfTU9SRV9NRU5VX09QVElPTlMgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCwgdXBsb2FkQmFzZWxpbmVFdmVudCB9IGZyb20gJy4uL3Zpc3VhbC1jb21wYXJpc29uL3Zpc3VhbC1jb21wYXJpc29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1sb29wLXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9vcC1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIExvb3BTdGVwQ29tcG9uZW50IGV4dGVuZHMgQmFzZVN0ZXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBEb0NoZWNrIHtcbiAgLy8gSW5kaXZpZHVhbCBpbnB1dHNcbiAgQElucHV0KCkgaWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlc3RTdGVwUmVzdWx0SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBOdW1iZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGF0dXMhOiBTdGVwU3RhdHVzO1xuICBASW5wdXQoKSBkdXJhdGlvbiE6IG51bWJlcjtcbiAgQElucHV0KCkgdGltaW5nQnJlYWtkb3duPzogVGltaW5nQnJlYWtkb3duO1xuICBASW5wdXQoKSBleHBhbmRlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxvb3BUeXBlPzogJ2ZvcicgfCAnd2hpbGUnO1xuICBASW5wdXQoKSBpdGVyYXRpb25zITogTG9vcEl0ZXJhdGlvbltdO1xuICBASW5wdXQoKSBzZWxlY3RlZEl0ZXJhdGlvbklkPzogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0SXRlcmF0aW9uPzogJ2ZpcnN0JyB8ICdsYXN0JyA9ICdsYXN0JztcbiAgQElucHV0KCkgbmVzdGVkU3RlcHM/OiBFeGVjdXRpb25TdGVwQ29uZmlnW107XG4gIEBJbnB1dCgpIHNob3dWaWV3QWxsSXRlcmF0aW9ucz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhhc0NoaWxkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNMaXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN0ZXBEZWxldGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNEZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVidWdQb2ludFNldD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZ2V0RGVidWdQb2ludFNldEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgb25EZWJ1Z1BvaW50Q2hhbmdlSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnLCB2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgQE91dHB1dCgpIGRlYnVnUG9pbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBlZGl0U3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXBPcHRpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEFkZFN0ZXBNZW51T3B0aW9uPigpO1xuICBAT3V0cHV0KCkgc3RlcE1vcmVPcHRpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBNb3JlTWVudU9wdGlvbj4oKTtcbiAgQElucHV0KCkgYWRkU3RlcE1lbnVPcHRpb25zOiBBZGRTdGVwTWVudU9wdGlvbltdID0gREVGQVVMVF9BRERfU1RFUF9NRU5VX09QVElPTlM7XG4gIEBJbnB1dCgpIHN0ZXBNb3JlTWVudU9wdGlvbnM6IFN0ZXBNb3JlTWVudU9wdGlvbltdID0gREVGQVVMVF9TVEVQX01PUkVfTUVOVV9PUFRJT05TO1xuXG4gIC8vIEhhbmRsZXIgZnVuY3Rpb24gdG8gcGFzcyBkb3duIHRvIG5lc3RlZCBjaGlsZCBzdGVwIGdyb3VwcyBmb3IgcmVjdXJzaXZlIGV4cGFuc2lvblxuICBASW5wdXQoKSBvbkV4cGFuZEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHBhc3NlZCB0byBuZXN0ZWQgc3RlcC1yZW5kZXJlciBzbyBFZGl0IG9uIG5lc3RlZCBzdGVwcyBpcyBmb3J3YXJkZWQgd2l0aCB0aGUgc3RlcCBjb25maWcuICovXG4gIEBJbnB1dCgpIG9uRWRpdFN0ZXBIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQWRkU3RlcE9wdGlvblNlbGVjdEhhbmRsZXI/OiAob3B0aW9uOiBBZGRTdGVwTWVudU9wdGlvbiwgc3RlcD86IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyPzogKG9wdGlvbjogU3RlcE1vcmVNZW51T3B0aW9uLCBzdGVwPzogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHVzZWQgdG8gZ2V0IGFkZC1zdGVwIG1lbnUgb3B0aW9ucyBwZXIgbmVzdGVkIHN0ZXA7IG90aGVyd2lzZSBhZGRTdGVwTWVudU9wdGlvbnMgaXMgdXNlZCBmb3IgYWxsLiAqL1xuICBASW5wdXQoKSBnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWQ/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gQWRkU3RlcE1lbnVPcHRpb25bXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHVzZWQgdG8gZ2V0IHN0ZXAtbW9yZSBtZW51IG9wdGlvbnMgcGVyIG5lc3RlZCBzdGVwOyBvdGhlcndpc2Ugc3RlcE1vcmVNZW51T3B0aW9ucyBpcyB1c2VkIGZvciBhbGwuICovXG4gIEBJbnB1dCgpIGdldFN0ZXBNb3JlTWVudU9wdGlvbnNGb3JOZXN0ZWQ/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gU3RlcE1vcmVNZW51T3B0aW9uW107XG5cbiAgLy8gSGFuZGxlciBmdW5jdGlvbnMgZm9yIGNvbmRpdGlvbiBzdGVwc1xuICBASW5wdXQoKSBnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gQ29uZGl0aW9uQnJhbmNoW107XG4gIEBJbnB1dCgpIG9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IGFueSwgYnJhbmNoOiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGlzU3RlcExvYWRpbmdIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RlcEV4cGFuZGVkSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyPzogKGR1cmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcbiAgQElucHV0KCkgZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueTtcbiAgQElucHV0KCkgZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQW5hbHl6ZUhhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblZpZXdGdWxsTG9nc0hhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblNlbGZIZWFsQWN0aW9uSGFuZGxlcj86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBASW5wdXQoKSBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyPzogKCkgPT4geyBpc0xvYWRpbmdBY2NlcHQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9OyBpc0xvYWRpbmdNb2RpZnlBY2NlcHQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IH07XG4gIEBJbnB1dCgpIGdldExvb3BJdGVyYXRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgZ2V0QXBpQXNzZXJ0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIGZvcm1hdEFjdGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblN0ZXBDbGlja0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZywgZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6ICdyZXF1ZXN0Qm9keScgfCAncmVzcG9uc2VCb2R5JyB8ICdyZXF1ZXN0SGVhZGVycycgfCAncmVzcG9uc2VIZWFkZXJzJyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkRvd25sb2FkSGFuZGxlcj86IChldmVudDogeyBmaWxlTmFtZTogc3RyaW5nOyBmaWxlUGF0aD86IHN0cmluZzsgZmlsZVR5cGU6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uRmlsZVBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IGZpbGVQYXRoOiBzdHJpbmc7IHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblRleHRDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHRleHQ6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGp1bXBUb1RpbWVzdGFtcEhhbmRsZXI/OiAodGltZXN0YW1wOiBudW1iZXIsIHRlc3RTdGVwSWQ/OiBudW1iZXIgfCBzdHJpbmcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGRvd25sb2FkaW5nU3RlcElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgc3RlcD86IGFueTtcblxuICBASW5wdXQoKSBmYWlsdXJlRGV0YWlscz86IEZhaWx1cmVEZXRhaWxzO1xuICBASW5wdXQoKSByZWFzb25pbmc/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29uZmlkZW5jZT86IHN0cmluZztcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBpc01ha2luZ0N1cnJlbnRCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIGl0ZXJhdGlvbkRhdGE/OiBhbnk7XG4gIEBPdXRwdXQoKSBtYWtlQ3VycmVudEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjxtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8dXBsb2FkQmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFuYWx5emUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RnVsbExvZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxmSGVhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZkhlYWxBY3Rpb25FdmVudD4oKTtcblxuICBzaG93RmFpbGVkU3RlcERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdhZGRTdGVwTWVudVRyaWdnZXInKSBhZGRTdGVwTWVudVRyaWdnZXI/OiBNYXRNZW51VHJpZ2dlcjtcbiAgQFZpZXdDaGlsZCgnc3RlcE1vcmVNZW51VHJpZ2dlcicpIHN0ZXBNb3JlTWVudVRyaWdnZXI/OiBNYXRNZW51VHJpZ2dlcjtcblxuICAvKiogU2hvdyBkZWJ1ZyBpY29uIHdoZW4gZGVidWcgbW9kZSBpcyBvbiAoc2hvd24gb24gcGFyZW50IGFuZCBhbGwgY2hpbGQgc3RlcHMpLiAqL1xuICBnZXQgc2hvd0RlYnVnSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlYnVnID09PSB0cnVlO1xuICB9XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGZvciB3aGVuIHRoZSBsb29wIHN0ZXAgZXhwYW5kc1xuICBAT3V0cHV0KCkgb25FeHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGZvciB3aGVuIFwiVmlldyBhbGwgaXRlcmF0aW9uc1wiIGlzIGNsaWNrZWRcbiAgQE91dHB1dCgpIG9uVmlld0FsbEl0ZXJhdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGZvciB3aGVuIGl0ZXJhdGlvbiBzZWxlY3Rpb24gY2hhbmdlc1xuICBAT3V0cHV0KCkgb25JdGVyYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvLyBDb25maWcgcHJvcGVydHkgZm9yIGJhc2UgY2xhc3MgLSBidWlsdCBmcm9tIGluZGl2aWR1YWwgaW5wdXRzIGluIG5nT25Jbml0XG4gIG92ZXJyaWRlIGNvbmZpZyE6IExvb3BTdGVwQ29uZmlnO1xuXG4gIHNlbGVjdGVkSXRlcmF0aW9uOiBMb29wSXRlcmF0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdXNlclNlbGVjdGVkSXRlcmF0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB1c2VyJ3MgbWFudWFsIHNlbGVjdGlvblxuICBwcml2YXRlIHByZXZpb3VzU3RhdHVzPzogU3RlcFN0YXR1cztcbiAgcHJpdmF0ZSB1c2VyTWFudWFsbHlDbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gVHJhY2sgd2hpY2ggc3RlcHMgYXJlIHN0aWxsIGxvYWRpbmcgdG8gc2hvdyBza2VsZXRvblxuICBsb2FkaW5nU3RlcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIC8vIFByb2Nlc3NlZCBzdWItc3RlcHMgZm9yIGxpdmUgbW9kZSBXQUlUX0ZPUl9MT0NBVE9SIGNvdW50ZG93biBncm91cGluZ1xuICBwcm9jZXNzZWRTdWJTdGVwczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0UHJvY2Vzc2VkSW5kZXg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgd2FpdExvY2F0b3JHcm91cEVudHJ5OiBhbnkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb3VudGRvd25JbnRlcnZhbElkOiBhbnkgPSBudWxsO1xuXG4gIC8vIEFJX0FVVE9fSEVBTCBncm91cGluZzogc2hvdyBsb2FkaW5nIHVudGlsIEFJX0FVVE9fSEVBTF9TVUNDRVNTIG9yIEFJX0FVVE9fSEVBTF9GQUlMRURcbiAgcHJpdmF0ZSBhaUF1dG9IZWFsR3JvdXBFbnRyeTogYW55IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gUHJvY2Vzc2VkIHN1Yi1zdGVwcyBmb3IgcnVuIHJlc3VsdCBzY3JlZW4gKGZpbHRlciBhbmQgc3BsaXQgQUlfQVVUT19IRUFMX1NVQ0NFU1MvRkFJTEVEKVxuICBwcm9jZXNzZWRTdWJTdGVwc0ZvclJ1blJlc3VsdDogYW55W10gPSBbXTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCBjb25maWcgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIC8vIFVzZSBuZXN0ZWRTdGVwcyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBlbXB0eSBhcnJheVxuICAgIGNvbnN0IHN0ZXBzVG9Vc2UgPSB0aGlzLm5lc3RlZFN0ZXBzIHx8IFtdO1xuXG4gICAgLy8gVXNlIGFjdGlvbiBhcyBmYWxsYmFjayBmb3IgdGl0bGUgaWYgdGl0bGUgaXMgZW1wdHlcbiAgICAvLyBDaGVjayBib3RoIGluc3RhbmNlIHByb3BlcnR5IGFuZCBjb25maWcgZm9yIGFjdGlvblxuICAgIGNvbnN0IGFjdGlvblZhbHVlID0gKHRoaXMgYXMgYW55KS5hY3Rpb24gfHwgJyc7XG4gICAgY29uc3Qgc3RlcFRpdGxlID0gKHRoaXMudGl0bGUgJiYgdGhpcy50aXRsZS50cmltKCkpID8gdGhpcy50aXRsZSA6IGFjdGlvblZhbHVlO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRlc3RTdGVwSWQ6IHRoaXMuc3RlcD8udGVzdFN0ZXBJZCB8fCB1bmRlZmluZWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogc3RlcFRpdGxlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgbG9vcFR5cGU6IHRoaXMubG9vcFR5cGUsXG4gICAgICBpdGVyYXRpb25zOiB0aGlzLml0ZXJhdGlvbnMsXG4gICAgICBzZWxlY3RlZEl0ZXJhdGlvbklkOiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQsXG4gICAgICBkZWZhdWx0SXRlcmF0aW9uOiB0aGlzLmRlZmF1bHRJdGVyYXRpb24sXG4gICAgICBuZXN0ZWRTdGVwczogc3RlcHNUb1VzZSxcbiAgICAgIHN0ZXBEZWxldGVkOiB0aGlzLnN0ZXBEZWxldGVkLFxuICAgICAgc2hvd1ZpZXdBbGxJdGVyYXRpb25zOiB0aGlzLnNob3dWaWV3QWxsSXRlcmF0aW9ucyxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIExvb3BTdGVwQ29uZmlnO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIEluaXRpYWxpemUgbGl2ZSBzdWItc3RlcCBwcm9jZXNzaW5nIGZvciBXQUlUX0ZPUl9MT0NBVE9SIGdyb3VwaW5nXG4gICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcyAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcyAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFByb2Nlc3MgZm9yIHJ1biByZXN1bHQgc2NyZWVuOiBmaWx0ZXIgYW5kIHNwbGl0IEFJX0FVVE9fSEVBTF9TVUNDRVNTL0ZBSUxFRFxuICAgICAgdGhpcy5wcm9jZXNzU3ViU3RlcHNGb3JSdW5SZXN1bHQoKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvbiAtIHByaW9yaXRpemUgc2VsZWN0ZWRJdGVyYXRpb25JZCBpbnB1dCwgdGhlbiBkZWZhdWx0XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCAmJiB0aGlzLml0ZXJhdGlvbnMgJiYgdGhpcy5pdGVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVyYXRpb25zLmZpbmQoaXRlciA9PiBpdGVyLmlkID09PSB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBmb3VuZDtcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCA9IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVyYXRpb25zICYmIHRoaXMuaXRlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTtcbiAgICAgIC8vIElmIGRlZmF1bHRJdGVyYXRpb24gaXMgJ2xhc3QnLCBhbHNvIHNldCB1c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCB0byB0aGUgbGFzdCBpdGVyYXRpb25cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRJdGVyYXRpb24gPT09ICdsYXN0JyAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMudXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgPSB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLmlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbG9hZGluZyBzdGF0ZSBpZiBhbHJlYWR5IGV4cGFuZGVkXG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLm5lc3RlZFN0ZXBzICYmIHRoaXMubmVzdGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICAgIHRoaXMubmVzdGVkU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgICAgIGlmIChzdGVwSWQpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGVwcy5hZGQoU3RyaW5nKHN0ZXBJZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHNlbGVjdGlvbiB3aGVuIHNlbGVjdGVkSXRlcmF0aW9uSWQgaW5wdXQgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10gJiYgdGhpcy5pdGVyYXRpb25zICYmIHRoaXMuaXRlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXS5wcmV2aW91c1ZhbHVlO1xuXG4gICAgICAvLyBBbHdheXMgdXBkYXRlIHdoZW4gc2VsZWN0ZWRJdGVyYXRpb25JZCBpbnB1dCBjaGFuZ2VzIGZyb20gcGFyZW50XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaXRlcmF0aW9ucy5maW5kKGl0ZXIgPT4gaXRlci5pZCA9PT0gY3VycmVudFZhbHVlKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHByb2Nlc3Npbmcgd2hlbiBzd2l0Y2hpbmcgdG8gYSBkaWZmZXJlbnQgaXRlcmF0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLmlkICE9PSBmb3VuZC5pZCkge1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBmb3VuZDtcbiAgICAgICAgICAgIC8vIFN5bmMgdXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgd2l0aCB0aGUgaW5wdXQgdmFsdWVcbiAgICAgICAgICAgIHRoaXMudXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGNoYW5nZXNcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGl2ZVN1YlN0ZXBzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3ViU3RlcHNGb3JSdW5SZXN1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm90IGZvdW5kLCBzZWxlY3QgZGVmYXVsdFxuICAgICAgICAgICAgdGhpcy5zZWxlY3REZWZhdWx0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIG5vIHZhbHVlIHByb3ZpZGVkLCBzZWxlY3QgZGVmYXVsdFxuICAgICAgICAgIHRoaXMuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVwZGF0ZSBzZWxlY3Rpb24gd2hlbiBpdGVyYXRpb25zIGFycmF5IGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlc1snaXRlcmF0aW9ucyddICYmIHRoaXMuaXRlcmF0aW9ucyAmJiB0aGlzLml0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBhIHVzZXIgc2VsZWN0aW9uLCB0cnkgdG8gcHJlc2VydmUgaXRcbiAgICAgIGlmICh0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVyYXRpb25zLmZpbmQoaXRlciA9PiBpdGVyLmlkID09PSB0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgLy8gUmVzZXQgcHJvY2Vzc2luZyB3aGVuIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBpdGVyYXRpb25cbiAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLmlkICE9PSBmb3VuZC5pZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBmb3VuZDtcbiAgICAgICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGNoYW5nZXNcbiAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NMaXZlU3ViU3RlcHMoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFVzZXIgc2VsZWN0aW9uIG5vIGxvbmdlciB2YWxpZCwgdXNlIHNlbGVjdGVkSXRlcmF0aW9uSWQgb3IgZGVmYXVsdFxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQnlJZCA9IHRoaXMuaXRlcmF0aW9ucy5maW5kKGl0ZXIgPT4gaXRlci5pZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgICAgICAgIGlmIChmb3VuZEJ5SWQpIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgcHJvY2Vzc2luZyB3aGVuIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBpdGVyYXRpb25cbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZm91bmRCeUlkLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiA9IGZvdW5kQnlJZDtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWJTdGVwc0ZvclJ1blJlc3VsdCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REZWZhdWx0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkSXRlcmF0aW9uIHx8ICF0aGlzLml0ZXJhdGlvbnMuc29tZShpdGVyID0+IGl0ZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24/LmlkKSkge1xuICAgICAgICAvLyBObyB1c2VyIHNlbGVjdGlvbiwgdXNlIHNlbGVjdGVkSXRlcmF0aW9uSWQgb3IgZGVmYXVsdFxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLml0ZXJhdGlvbnMuZmluZChpdGVyID0+IGl0ZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAvLyBSZXNldCBwcm9jZXNzaW5nIHdoZW4gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGl0ZXJhdGlvblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZm91bmQuaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uID0gZm91bmQ7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3REZWZhdWx0SXRlcmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVXBkYXRlIHRpdGxlIGlmIGl0IGNoYW5nZXMgLSBhbHNvIGNoZWNrIGZvciBhY3Rpb24gaW4gY29uZmlnIG9yIGluc3RhbmNlXG4gICAgaWYgKGNoYW5nZXNbJ3RpdGxlJ10pIHtcbiAgICAgIGNvbnN0IGFjdGlvblZhbHVlID0gKHRoaXMgYXMgYW55KS5hY3Rpb24gfHwgKHRoaXMuY29uZmlnIGFzIGFueSk/LmFjdGlvbiB8fCAnJztcbiAgICAgIGNvbnN0IHN0ZXBUaXRsZSA9ICh0aGlzLnRpdGxlICYmIHRoaXMudGl0bGUudHJpbSgpKSA/IHRoaXMudGl0bGUgOiBhY3Rpb25WYWx1ZTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZy50aXRsZSA9IHN0ZXBUaXRsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snc3RlcERlbGV0ZWQnXSAmJiB0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWcuc3RlcERlbGV0ZWQgPSBjaGFuZ2VzWydzdGVwRGVsZXRlZCddLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdleHBhbmRlZCBjaGFuZ2VkIGluIGxvb3Atc3RlcCcsIHRoaXMuaWQsIGNoYW5nZXNbJ2V4cGFuZGVkJ10pO1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZy5leHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNvbmZpZyB3aGVuIGlucHV0cyBjaGFuZ2VcbiAgICBpZiAoY2hhbmdlc1snaXRlcmF0aW9ucyddIHx8IGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXSB8fCBjaGFuZ2VzWyduZXN0ZWRTdGVwcyddKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcuaXRlcmF0aW9ucyA9IHRoaXMuaXRlcmF0aW9ucztcbiAgICAgICAgdGhpcy5jb25maWcuc2VsZWN0ZWRJdGVyYXRpb25JZCA9IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgdGhpcy5jb25maWcubmVzdGVkU3RlcHMgPSB0aGlzLm5lc3RlZFN0ZXBzIHx8IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC8vIEluaXRpYWxpemUgbG9hZGluZyBzdGF0ZSB3aGVuIG5lc3RlZCBzdGVwcyBhcmUgYWRkZWQgYW5kIHN0ZXAgaXMgZXhwYW5kZWRcbiAgICAvLyBpZiAoY2hhbmdlc1snbmVzdGVkU3RlcHMnXSAmJiB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgLy8gICB0aGlzLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIC8vICAgICBpZiAoc3RlcElkKSB7XG4gICAgLy8gICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGlmIGFscmVhZHkgZXhwYW5kZWQgd2hlbiBjb21wb25lbnQgaW5pdGlhbGl6ZXNcbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICB0aGlzLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICBpZiAoc3RlcElkKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWxzbyBoYW5kbGUgd2hlbiBuZXN0ZWRTdGVwcyBpcyBwYXNzZWQgdmlhIGNoaWxkcmVuIHByb3BlcnR5IChmb3Igc3RlcC1yZW5kZXJlciBjb21wYXRpYmlsaXR5KVxuICAgIGlmIChjaGFuZ2VzWyduZXN0ZWRTdGVwcyddICYmIHRoaXMubmVzdGVkU3RlcHMpIHtcbiAgICAgIC8vIEVuc3VyZSBjb25maWcgaXMgdXBkYXRlZCB3aXRoIG5lc3RlZFN0ZXBzXG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcubmVzdGVkU3RlcHMgPSB0aGlzLm5lc3RlZFN0ZXBzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5lc3RlZFN0ZXBzIGlzIG5vdCBwcm92aWRlZCBidXQgY2hpbGRyZW4gaXMgKGZyb20gc3RlcC1yZW5kZXJlciksIHVzZSBjaGlsZHJlblxuICAgIGlmICghdGhpcy5uZXN0ZWRTdGVwcyAmJiAodGhpcy5jb25maWcgYXMgYW55KS5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KCh0aGlzLmNvbmZpZyBhcyBhbnkpLmNoaWxkcmVuKSkge1xuICAgICAgdGhpcy5uZXN0ZWRTdGVwcyA9ICh0aGlzLmNvbmZpZyBhcyBhbnkpLmNoaWxkcmVuO1xuICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzID0gdGhpcy5uZXN0ZWRTdGVwcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0xpdmUpIHtcbiAgICAgIC8vIFVwZGF0ZSBzdWJTdGVwcyBhcnJheSB3aGVuIG5ldyBvbmVzIGFyZSBhZGRlZFxuICAgICAgaWYgKGNoYW5nZXNbJ25lc3RlZFN0ZXBzJ10pIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdWJTdGVwc0NvdW50ID0gY2hhbmdlc1snbmVzdGVkU3RlcHMnXS5wcmV2aW91c1ZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICAgICAgY29uc3QgY3VycmVudFN1YlN0ZXBzQ291bnQgPSAodGhpcy5uZXN0ZWRTdGVwcyB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgIC8vIFN1Yi1zdGVwcyBhcmUgYXBwZW5kZWQgZXh0ZXJuYWxseSwgc28gd2UganVzdCB1cGRhdGUgdGhlIGNvbmZpZ1xuICAgICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5uZXN0ZWRTdGVwcyA9IHRoaXMubmVzdGVkU3RlcHMgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEF1dG8tZXhwYW5kIGlmIHN0ZXAgaXMgcnVubmluZyBhbmQgbmV3IHN1YlN0ZXBzIGFyZSBhZGRlZCAobG9ncyBjb21pbmcgaW4pXG4gICAgICAgIGlmICghY2hhbmdlc1snbmVzdGVkU3RlcHMnXS5maXJzdENoYW5nZSAmJiBcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSAncnVubmluZycgJiYgXG4gICAgICAgICAgICBjdXJyZW50U3ViU3RlcHNDb3VudCA+IHByZXZpb3VzU3ViU3RlcHNDb3VudCAmJlxuICAgICAgICAgICAgdGhpcy5oYXNTdWJTdGVwcyAmJiBcbiAgICAgICAgICAgICF0aGlzLmlzRXhwYW5kZWQgJiYgXG4gICAgICAgICAgICAhdGhpcy51c2VyTWFudWFsbHlDbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmF1dG9FeHBhbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgc3RhdHVzIGNoYW5nZXMgLSBhdXRvLWV4cGFuZCB3aGVuIHN0ZXAgc3RhcnRzIGV4ZWN1dGluZ1xuICAgICAgaWYgKGNoYW5nZXNbJ3N0YXR1cyddICYmICFjaGFuZ2VzWydzdGF0dXMnXS5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBjaGFuZ2VzWydzdGF0dXMnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IG9sZFN0YXR1cyA9IGNoYW5nZXNbJ3N0YXR1cyddLnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgLy8gQXV0by1leHBhbmQgd2hlbiBzdGF0dXMgY2hhbmdlcyB0byAncnVubmluZycgYW5kIGhhcyBzdWJTdGVwcyAob3Igd2lsbCBoYXZlIHNvb24pXG4gICAgICAgIGlmIChuZXdTdGF0dXMgPT09ICdydW5uaW5nJyAmJiBvbGRTdGF0dXMgIT09ICdydW5uaW5nJyAmJiAhdGhpcy51c2VyTWFudWFsbHlDbG9zZWQpIHtcbiAgICAgICAgICAvLyBFeHBhbmQgaW1tZWRpYXRlbHkgaWYgYWxyZWFkeSBoYXMgc3ViU3RlcHMsIG9yIHdhaXQgZm9yIHRoZW1cbiAgICAgICAgICBpZiAodGhpcy5oYXNTdWJTdGVwcykge1xuICAgICAgICAgICAgdGhpcy5hdXRvRXhwYW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c1N0YXR1cyA9IG5ld1N0YXR1cztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9FeHBhbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5oYXNTdWJTdGVwcykge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudXNlck1hbnVhbGx5Q2xvc2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhhc1N1YlN0ZXBzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFN0ZXBzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IHdhc0V4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIHN1cGVyLnRvZ2dsZSgpO1xuICAgIC8vIEVtaXQgZXZlbnQgd2hlbiBleHBhbmRpbmcgKHRyYW5zaXRpb25pbmcgZnJvbSBjb2xsYXBzZWQgdG8gZXhwYW5kZWQpXG4gICAgaWYgKCF3YXNFeHBhbmRlZCAmJiB0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMub25FeHBhbmQuZW1pdCgpO1xuICAgICAgLy8gSWYgdGhpcyBzdGVwIGhhcyBjaGlsZHJlbiAoaGFzQ2hpbGQgaXMgdHJ1ZSkgYW5kIG9uRXhwYW5kSGFuZGxlciBpcyBwcm92aWRlZCwgY2FsbCBpdCB0byBmZXRjaCBjaGlsZHJlblxuICAgICAgaWYgKHRoaXMub25FeHBhbmRIYW5kbGVyICYmIHRoaXMuY29uZmlnICYmIHRoaXMuaGFzQ2hpbGQpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc3RlcCBjb25maWcgb2JqZWN0IGZvciB0aGUgaGFuZGxlciB3aXRoIGhhc0NoaWxkIHByb3BlcnR5XG4gICAgICAgIGNvbnN0IHN0ZXBDb25maWcgPSB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgZXhwYW5kZWQ6IHRydWUsIC8vIEVuc3VyZSBleHBhbmRlZCBpcyBzZXRcbiAgICAgICAgICB0ZXN0U3RlcFR5cGU6ICh0aGlzLmNvbmZpZyBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCAodGhpcy5sb29wVHlwZSA9PT0gJ2ZvcicgPyAnRk9SX0xPT1AnIDogJ1dISUxFX0xPT1AnKSxcbiAgICAgICAgICBjaGlsZHJlbjogdGhpcy5jb25maWcubmVzdGVkU3RlcHMgfHwgW10sXG4gICAgICAgICAgdGVzdFN0ZXBSZXN1bHRJZDogdGhpcy50ZXN0U3RlcFJlc3VsdElkLFxuICAgICAgICAgIGlkOiB0aGlzLmlkXG4gICAgICAgIH0gYXMgRXhlY3V0aW9uU3RlcENvbmZpZyAmIHsgaGFzQ2hpbGQ6IGJvb2xlYW47IHRlc3RTdGVwVHlwZT86IHN0cmluZzsgY2hpbGRyZW4/OiBhbnlbXTsgZXhwYW5kZWQ/OiBib29sZWFuIH07XG4gICAgICAgIHRoaXMub25FeHBhbmRIYW5kbGVyKHN0ZXBDb25maWcpO1xuICAgICAgfVxuICAgICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGZvciBhbGwgbmVzdGVkIHN0ZXBzXG4gICAgICBpZiAodGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5uZXN0ZWRTdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICAgIGlmIChzdGVwSWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIC8vIENsZWFyIGxvYWRpbmcgc3RhdGUgd2hlbiBjb2xsYXBzaW5nXG4gICAgICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBleHBhbmRlZCBzdGF0ZSBpcyBzeW5jZWQgd2l0aCBjb25maWdcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLmV4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgc3RlcCBpcyBzdGlsbCBsb2FkaW5nXG4gIGlzTmVzdGVkU3RlcExvYWRpbmcoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIHJldHVybiBzdGVwSWQgPyB0aGlzLmxvYWRpbmdTdGVwcy5oYXMoU3RyaW5nKHN0ZXBJZCkpIDogZmFsc2U7XG4gIH1cblxuICAvLyBNYXJrIGEgc3RlcCBhcyBsb2FkZWQgKGNhbGxlZCB3aGVuIHN0ZXAtcmVuZGVyZXIgaXMgcmVhZHkpXG4gIG1hcmtTdGVwTG9hZGVkKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICBpZiAoc3RlcElkKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdGVwcy5kZWxldGUoU3RyaW5nKHN0ZXBJZCkpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTogdm9pZCB7XG4gICAgLy8gRmlyc3QsIHRyeSB0byB1c2Ugc2VsZWN0ZWRJdGVyYXRpb25JZCBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVyYXRpb25zLmZpbmQoXG4gICAgICAgIGl0ZXIgPT4gaXRlci5pZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIC8vIFJlc2V0IHByb2Nlc3Npbmcgd2hlbiBzd2l0Y2hpbmcgdG8gYSBkaWZmZXJlbnQgaXRlcmF0aW9uXG4gICAgICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uaWQgIT09IGZvdW5kLmlkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiA9IGZvdW5kO1xuICAgICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGlzIHNlbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NMaXZlU3ViU3RlcHMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdXNlciBoYXMgbWFudWFsbHkgc2VsZWN0ZWQgc29tZXRoaW5nLCBwcmVzZXJ2ZSBpdFxuICAgIGlmICh0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaXRlcmF0aW9ucy5maW5kKGl0ZXIgPT4gaXRlci5pZCA9PT0gdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgLy8gUmVzZXQgcHJvY2Vzc2luZyB3aGVuIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBpdGVyYXRpb25cbiAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZm91bmQuaWQpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uID0gZm91bmQ7XG4gICAgICAgIC8vIFByb2Nlc3MgbGl2ZSBzdWItc3RlcHMgd2hlbiBpdGVyYXRpb24gaXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0IGJhc2VkIG9uIGRlZmF1bHRJdGVyYXRpb24gc2V0dGluZ1xuICAgIGlmICh0aGlzLmRlZmF1bHRJdGVyYXRpb24gPT09ICdsYXN0JyAmJiB0aGlzLml0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdEl0ZXJhdGlvbiA9IHRoaXMuaXRlcmF0aW9uc1t0aGlzLml0ZXJhdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAvLyBSZXNldCBwcm9jZXNzaW5nIHdoZW4gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGl0ZXJhdGlvblxuICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gbGFzdEl0ZXJhdGlvbi5pZCkge1xuICAgICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBsYXN0SXRlcmF0aW9uO1xuICAgICAgLy8gU2V0IHVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkIHRvIHRyYWNrIHRoZSBkZWZhdWx0IHNlbGVjdGlvblxuICAgICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCA9IGxhc3RJdGVyYXRpb24uaWQ7XG4gICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGlzIHNlbGVjdGVkXG4gICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RJdGVyYXRpb24gPSB0aGlzLml0ZXJhdGlvbnNbMF07XG4gICAgICAvLyBSZXNldCBwcm9jZXNzaW5nIHdoZW4gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGl0ZXJhdGlvblxuICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZmlyc3RJdGVyYXRpb24uaWQpIHtcbiAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uID0gZmlyc3RJdGVyYXRpb247XG4gICAgICAvLyBTZXQgdXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgdG8gdHJhY2sgdGhlIGRlZmF1bHQgc2VsZWN0aW9uXG4gICAgICB0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkID0gZmlyc3RJdGVyYXRpb24uaWQ7XG4gICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGlzIHNlbGVjdGVkXG4gICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSXRlcmF0aW9uQ2hhbmdlKGl0ZXJhdGlvbjogTG9vcEl0ZXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiSVRFUkFUSU9OIENIQU5HRVwiLCB0aGlzLmNvbmZpZyAsaXRlcmF0aW9uKVxuICAgIC8vIFJlc2V0IHByb2Nlc3Npbmcgd2hlbiBzd2l0Y2hpbmcgaXRlcmF0aW9uc1xuICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uaWQgIT09IGl0ZXJhdGlvbi5pZCkge1xuICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgfVxuICAgIC8vIFN0b3JlIHRoZSB1c2VyJ3MgbWFudWFsIHNlbGVjdGlvblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCA9IGl0ZXJhdGlvbi5pZDtcblxuICAgIGlmICh0aGlzLmlzTGl2ZSkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZXJhdGlvbnMuZmluZEluZGV4KGl0ZXIgPT4gaXRlci5pZCA9PT0gaXRlcmF0aW9uLmlkKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEgJiYgdGhpcy5pdGVyYXRpb25EYXRhPy5baW5kZXhdICYmIHRoaXMubmVzdGVkU3RlcHMpIHtcblxuICAgICAgICBjb25zdCB1cGRhdGVkTmVzdGVkU3RlcHM6IEV4ZWN1dGlvblN0ZXBDb25maWdbXSA9XG4gICAgICAgICAgdGhpcy5uZXN0ZWRTdGVwcy5tYXAoc3RlcCA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkU3ViU3RlcHMgPSB0aGlzLml0ZXJhdGlvbkRhdGFbaW5kZXhdW3N0ZXAuaWRdO1xuICAgICAgICAgICAgc3RlcC5kdXJhdGlvbiA9IHVwZGF0ZWRTdWJTdGVwcy5yZWR1Y2UoKGFjYzogbnVtYmVyLCBzdWJTdGVwOiBhbnkpID0+IGFjYyArIHN1YlN0ZXA/LmR1cmF0aW9uIHx8IDAsIDApO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlZFN1YlN0ZXBzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RlcCxcbiAgICAgICAgICAgICAgICBzdWJTdGVwczogWy4uLnVwZGF0ZWRTdWJTdGVwc11cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RlcCB9O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmVzdGVkU3RlcHMgPSB1cGRhdGVkTmVzdGVkU3RlcHM7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIG5lc3RlZFN0ZXBzOiB1cGRhdGVkTmVzdGVkU3RlcHNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgbGl2ZSBzdWItc3RlcHMgd2hlbiBpdGVyYXRpb24gY2hhbmdlc1xuICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICB0aGlzLnByb2Nlc3NMaXZlU3ViU3RlcHMoKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdWJTdGVwc0ZvclJ1blJlc3VsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFbWl0IHRoZSBldmVudCB3aXRoIHRoZSBpdGVyYXRpb24gSURcbiAgICB0aGlzLm9uSXRlcmF0aW9uQ2hhbmdlLmVtaXQoaXRlcmF0aW9uLmlkKTtcbiAgfVxuXG4gIGNvbXBhcmVJdGVyYXRpb24oYTogTG9vcEl0ZXJhdGlvbiwgYjogTG9vcEl0ZXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhICYmIGIgPyBhLmlkID09PSBiLmlkIDogYSA9PT0gYjtcbiAgfVxuXG4gIGdldExvb3BUeXBlQmFkZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYWRnZXM6IHN0cmluZ1tdID0gWydMT09QJ107XG4gICAgaWYgKHRoaXMubG9vcFR5cGUgPT09ICdmb3InKSB7XG4gICAgICBiYWRnZXMucHVzaCgnRk9SJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvb3BUeXBlID09PSAnd2hpbGUnKSB7XG4gICAgICBiYWRnZXMucHVzaCgnV0hJTEUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhZGdlcztcbiAgfVxuXG4gIGdldEl0ZXJhdGlvbkxhYmVsKGl0ZXJhdGlvbjogTG9vcEl0ZXJhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbi5sYWJlbDtcbiAgfVxuXG4gIG9uVmlld0FsbEl0ZXJhdGlvbnNDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub25WaWV3QWxsSXRlcmF0aW9ucy5lbWl0KCk7XG4gIH1cblxuICBvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBleHBhbmRlZDtcbiAgfVxuXG4gIGdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpOiBTdWJTdGVwW10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uPy5zdWJTdGVwcyB8fCBbXTtcbiAgfVxuXG4gIG9uTWFrZUN1cnJlbnRCYXNlbGluZShldmVudDogbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tYWtlQ3VycmVudEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25VcGxvYWRCYXNlbGluZShldmVudDogdXBsb2FkQmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkQmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkFuYWx5emUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmFseXplLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0Z1bGxMb2dzLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VsZkhlYWxBY3Rpb24oZXZlbnQ6IFNlbGZIZWFsQWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IHNob3dWaWV3TW9yZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkICYmIEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscykgJiZcbiAgICAgIChcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uZXhwZWN0ZWQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uYWN0dWFsKSkgfHxcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmN1cnJlbnQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmJhc2VsaW5lIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5kaWZmZXJlbmNlKVxuICAgICAgICAgIHx8IEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8ubG9ncz8ubGVuZ3RoKSkgfHwgXG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4QXBwbGllZCAmJiAodGhpcy5mYWlsdXJlRGV0YWlscz8uYWlGaXhNZXNzYWdlIHx8IHRoaXMuY29uZmlkZW5jZSB8fCB0aGlzLnJlYXNvbmluZz8ubGVuZ3RoKSkpXG4gICAgICApXG4gIH1cblxuICBvbkRlYnVnUG9pbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZGVidWdQb2ludENoYW5nZS5lbWl0KCF0aGlzLmRlYnVnUG9pbnRTZXQpO1xuICB9XG5cbiAgb25FZGl0U3RlcChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZWRpdFN0ZXAuZW1pdCgpO1xuICB9XG5cbiAgb25BZGRTdGVwT3B0aW9uU2VsZWN0KG9wdGlvbjogQWRkU3RlcE1lbnVPcHRpb24sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5hZGRTdGVwT3B0aW9uU2VsZWN0LmVtaXQob3B0aW9uKTtcbiAgICB0aGlzLmFkZFN0ZXBNZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBvblN0ZXBNb3JlT3B0aW9uU2VsZWN0KG9wdGlvbjogU3RlcE1vcmVNZW51T3B0aW9uLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RlcE1vcmVPcHRpb25TZWxlY3QuZW1pdChvcHRpb24pO1xuICAgIHRoaXMuc3RlcE1vcmVNZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICB0b2dnbGVIZWFkZXIoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIGlmICghdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblN0ZXBDbGlja0hhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHN0ZXBUb1Bhc3MgPSB0aGlzLnN0ZXAgfHwgdGhpcy5jb25maWc7XG4gICAgICBpZiAoc3RlcFRvUGFzcykge1xuICAgICAgICB0aGlzLm9uU3RlcENsaWNrSGFuZGxlcihzdGVwVG9QYXNzLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIHN0ZXAgaXMgYSBzdGVwLWdyb3VwIHdpdGggaGFzQ2hpbGRcbiAgaXNOZXN0ZWRTdGVwR3JvdXBXaXRoQ2hpbGRyZW4oc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGVwLnR5cGUgPT09ICdzdGVwLWdyb3VwJyAmJiAhIShzdGVwIGFzIGFueSkuaGFzQ2hpbGQ7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBncm91cE5hbWUgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRHcm91cE5hbWUoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChzdGVwIGFzIFN0ZXBHcm91cENvbmZpZykuZ3JvdXBOYW1lIHx8ICcnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcHMgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRTdGVwcyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogRXhlY3V0aW9uU3RlcENvbmZpZ1tdIHtcbiAgICBjb25zdCBzdGVwR3JvdXAgPSBzdGVwIGFzIFN0ZXBHcm91cENvbmZpZztcbiAgICByZXR1cm4gc3RlcEdyb3VwLnN0ZXBzIHx8IChzdGVwIGFzIGFueSkuY2hpbGRyZW4gfHwgW107XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIGEgc3RlcCBpcyBhIGNvbmRpdGlvbiBzdGVwXG4gIGlzTmVzdGVkQ29uZGl0aW9uU3RlcChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcFR5cGUgPSAoc3RlcCBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCBzdGVwLnR5cGU7XG4gICAgcmV0dXJuIHN0ZXBUeXBlID09PSAnQ09ORElUSU9OX0lGJyB8fCBzdGVwVHlwZSA9PT0gJ0NPTkRJVElPTl9FTFNFJyB8fCBcbiAgICAgICAgICAgc3RlcFR5cGUgPT09ICdDT05ESVRJT05fRUxTRV9JRicgfHwgc3RlcFR5cGUgPT09ICdDT05ESVRJT05fRUxTRUlGJyB8fFxuICAgICAgICAgICBzdGVwVHlwZSA9PT0gJ2NvbmRpdGlvbic7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIGEgc3RlcCBpcyBhIGxvb3Agc3RlcFxuICBpc05lc3RlZExvb3BTdGVwKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwVHlwZSA9IChzdGVwIGFzIGFueSkudGVzdFN0ZXBUeXBlIHx8IHN0ZXAudHlwZTtcbiAgICByZXR1cm4gc3RlcFR5cGUgPT09ICdGT1JfTE9PUCcgfHwgc3RlcFR5cGUgPT09ICdXSElMRV9MT09QJyB8fCBzdGVwVHlwZSA9PT0gJ2xvb3AnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgbG9vcCB0eXBlIGZyb20gc3RlcCBjb25maWdcbiAgZ2V0TG9vcFR5cGUoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6ICdmb3InIHwgJ3doaWxlJyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RlcFR5cGUgPSAoc3RlcCBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCBzdGVwLnR5cGU7XG4gICAgaWYgKHN0ZXBUeXBlID09PSAnRk9SX0xPT1AnIHx8IChzdGVwIGFzIExvb3BTdGVwQ29uZmlnKS5sb29wVHlwZSA9PT0gJ2ZvcicpIHtcbiAgICAgIHJldHVybiAnZm9yJztcbiAgICB9IGVsc2UgaWYgKHN0ZXBUeXBlID09PSAnV0hJTEVfTE9PUCcgfHwgKHN0ZXAgYXMgTG9vcFN0ZXBDb25maWcpLmxvb3BUeXBlID09PSAnd2hpbGUnKSB7XG4gICAgICByZXR1cm4gJ3doaWxlJztcbiAgICB9XG4gICAgcmV0dXJuIChzdGVwIGFzIExvb3BTdGVwQ29uZmlnKS5sb29wVHlwZTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGl0ZXJhdGlvbnMgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRMb29wSXRlcmF0aW9ucyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYW55W10ge1xuICAgIC8vIFVzZSBoYW5kbGVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjb25maWdcbiAgICBpZiAodGhpcy5nZXRMb29wSXRlcmF0aW9uc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExvb3BJdGVyYXRpb25zSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5pdGVyYXRpb25zIHx8IFtdO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgbmVzdGVkIHN0ZXBzIGZyb20gbG9vcCBzdGVwIGNvbmZpZ1xuICBnZXRMb29wTmVzdGVkU3RlcHMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IEV4ZWN1dGlvblN0ZXBDb25maWdbXSB7XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5uZXN0ZWRTdGVwcyB8fCAoc3RlcCBhcyBhbnkpLmNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBoYW5kbGUgbmVzdGVkIGxvb3Agc3RlcCBleHBhbnNpb25cbiAgaGFuZGxlTG9vcFN0ZXBFeHBhbmQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uRXhwYW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXIoc3RlcCk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBoYW5kbGUgbmVzdGVkIGxvb3Agc3RlcCBpdGVyYXRpb24gY2hhbmdlXG4gIGhhbmRsZUxvb3BTdGVwSXRlcmF0aW9uQ2hhbmdlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIGl0ZXJhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgLy8gRm9yIG5vdywgd2UganVzdCBlbWl0IHRoZSBleHBhbmQgZXZlbnRcbiAgICBpZiAodGhpcy5vbkV4cGFuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMub25FeHBhbmRIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHN0ZXAgdGl0bGVcbiAgZ2V0U3RlcFRpdGxlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmFjdGlvbiB8fCBzdGVwLnRpdGxlIHx8ICcnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcCBzdGF0dXNcbiAgZ2V0U3RlcFN0YXR1cyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogU3RlcFN0YXR1cyB7XG4gICAgY29uc3QgcmVzdWx0ID0gKHN0ZXAgYXMgYW55KS5yZXN1bHQ7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgcmVzdWx0TG93ZXIgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChyZXN1bHRMb3dlciA9PT0gJ3N1Y2Nlc3MnIHx8IHJlc3VsdExvd2VyID09PSAncGFzc2VkJykge1xuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRMb3dlciA9PT0gJ2ZhaWx1cmUnIHx8IHJlc3VsdExvd2VyID09PSAnZmFpbGVkJykge1xuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdExvd2VyID09PSAncGVuZGluZycgfHwgcmVzdWx0TG93ZXIgPT09ICdub3QtZXhlY3V0ZWQnKSB7XG4gICAgICAgIHJldHVybiAncGVuZGluZyc7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdExvd2VyID09PSAncnVubmluZycpIHtcbiAgICAgICAgcmV0dXJuICdydW5uaW5nJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0ZXAuc3RhdHVzIHx8ICdwZW5kaW5nJztcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHN0ZXAgZHVyYXRpb25cbiAgZ2V0U3RlcER1cmF0aW9uKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmR1cmF0aW9uIHx8IHN0ZXAuZHVyYXRpb24gfHwgMDtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb25kaXRpb24gc3RlcCBwcm9wZXJ0aWVzXG4gIGdldENvbmRpdGlvblN0ZXBEdXJhdGlvbihzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogbnVtYmVyIHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuZ2V0U3RlcER1cmF0aW9uKHN0ZXApO1xuICAgIGlmICh0aGlzLmNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXIoZHVyYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZHVyYXRpb247XG4gIH1cblxuICBnZXRDb25kaXRpb25TdGVwRXhwYW5kZWQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RlcEV4cGFuZGVkSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwRXhwYW5kZWRIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcC5leHBhbmRlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldENvbmRpdGlvblN0ZXBUZXh0KHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmFjdGlvbiB8fCBzdGVwLnRpdGxlIHx8ICcnO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcEJyYW5jaGVzKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBDb25kaXRpb25CcmFuY2hbXSB7XG4gICAgaWYgKHRoaXMuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXIoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldENvbmRpdGlvblN0ZXBMb2FkaW5nKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwTG9hZGluZ0hhbmRsZXIoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUNvbmRpdGlvblN0ZXBFeHBhbmQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uRXhwYW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXIoc3RlcCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcEZhaWx1cmVEZXRhaWxzKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBhbnkge1xuICAgIGlmICh0aGlzLmZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcFNlbGZIZWFsQW5hbHlzaXMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFuZGxlQ29uZGl0aW9uU3RlcFNlbGZIZWFsQWN0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcikge1xuICAgICAgdGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ29uZGl0aW9uU3RlcE1ha2VCYXNlbGluZShldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlcikge1xuICAgICAgdGhpcy5vbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb25kaXRpb25TdGVwVXBsb2FkQmFzZWxpbmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb25kaXRpb25TdGVwQW5hbHl6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vbkFuYWx5emVIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uQW5hbHl6ZUhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb25kaXRpb25TdGVwVmlld0xvZ3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub25WaWV3RnVsbExvZ3NIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uVmlld0Z1bGxMb2dzSGFuZGxlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzIHRvIHNhZmVseSBhY2Nlc3MgTG9vcFN0ZXBDb25maWcgcHJvcGVydGllc1xuICBnZXRMb29wU2VsZWN0ZWRJdGVyYXRpb25JZChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsb29wU3RlcCA9IHN0ZXAgYXMgTG9vcFN0ZXBDb25maWc7XG4gICAgcmV0dXJuIGxvb3BTdGVwLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gIH1cblxuICBnZXRMb29wRGVmYXVsdEl0ZXJhdGlvbihzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogJ2ZpcnN0JyB8ICdsYXN0JyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5kZWZhdWx0SXRlcmF0aW9uIHx8ICdsYXN0JztcbiAgfVxuXG4gIGdldExvb3BTaG93Vmlld0FsbEl0ZXJhdGlvbnMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxvb3BTdGVwID0gc3RlcCBhcyBMb29wU3RlcENvbmZpZztcbiAgICByZXR1cm4gbG9vcFN0ZXAuc2hvd1ZpZXdBbGxJdGVyYXRpb25zO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBzdGVwIGlzIGN1cnJlbnRseSBsb2FkaW5nIG5lc3RlZCBjaGlsZHJlblxuICBpc1N0ZXBMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyICYmIHRoaXMuY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcih0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZyB8fCBmYWxzZTtcbiAgfVxuXG4gIG9uSnVtcFRvVGltZXN0YW1wKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmp1bXBUb1RpbWVzdGFtcEhhbmRsZXIgJiYgdGhpcy5zdGVwPy5leGVjdXRlZFJlc3VsdD8udmlkZW9fc3RhcnRfdGltZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc3RlcD8uZXhlY3V0ZWRSZXN1bHQ/LnZpZGVvX3N0YXJ0X3RpbWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHR5cGVvZiB0aGlzLnN0ZXAuZXhlY3V0ZWRSZXN1bHQudmlkZW9fc3RhcnRfdGltZSA9PT0gJ251bWJlcicgXG4gICAgICAgID8gdGhpcy5zdGVwLmV4ZWN1dGVkUmVzdWx0LnZpZGVvX3N0YXJ0X3RpbWUgXG4gICAgICAgIDogTnVtYmVyKHRoaXMuc3RlcC5leGVjdXRlZFJlc3VsdC52aWRlb19zdGFydF90aW1lKTtcbiAgICAgIGNvbnN0IHRlc3RTdGVwSWQgPSB0aGlzLnN0ZXA/LnRlc3RTdGVwSWQ7XG4gICAgICBpZiAoaXNGaW5pdGUodGltZXN0YW1wKSAmJiB0aW1lc3RhbXAgPj0gMCkge1xuICAgICAgICB0aGlzLmp1bXBUb1RpbWVzdGFtcEhhbmRsZXIodGltZXN0YW1wLCB0ZXN0U3RlcElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTGl2ZSB8fCAhdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRMZW5ndGggPSAodGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcyB8fCBbXSkubGVuZ3RoO1xuICAgIC8vIFJlc2V0IGlmIGl0ZXJhdGlvbiBjaGFuZ2VkIChkZXRlY3RlZCBieSBjaGVja2luZyBpZiB3ZSBoYXZlIGEgZGlmZmVyZW50IGl0ZXJhdGlvbidzIHN1YlN0ZXBzKVxuICAgIGlmICh0aGlzLmxhc3RQcm9jZXNzZWRJbmRleCA+IDAgJiYgY3VycmVudExlbmd0aCA8IHRoaXMubGFzdFByb2Nlc3NlZEluZGV4KSB7XG4gICAgICAvLyBMaWtlbHkgc3dpdGNoZWQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0aW9uLCByZXNldFxuICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgfVxuICAgIGlmIChjdXJyZW50TGVuZ3RoICE9PSB0aGlzLmxhc3RQcm9jZXNzZWRJbmRleCkge1xuICAgICAgdGhpcy5wcm9jZXNzTGl2ZVN1YlN0ZXBzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckNvdW50ZG93blRpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NMaXZlU3ViU3RlcHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlcmF0aW9uIHx8ICF0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxTdWJTdGVwcyA9ICh0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzIHx8IFtdKSBhcyBhbnlbXTtcblxuICAgIC8vIFJlc2V0IGlmIHN1YlN0ZXBzIHdlcmUgY2xlYXJlZCBvciByZXBsYWNlZCB3aXRoIGZld2VyIGVudHJpZXNcbiAgICBpZiAoYWxsU3ViU3RlcHMubGVuZ3RoIDwgdGhpcy5sYXN0UHJvY2Vzc2VkSW5kZXgpIHtcbiAgICAgIHRoaXMucmVzZXRMaXZlUHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSB0aGlzLmxhc3RQcm9jZXNzZWRJbmRleDsgaSA8IGFsbFN1YlN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJTdGVwID0gYWxsU3ViU3RlcHNbaV07XG4gICAgICBjb25zdCB1aVR5cGU6IHN0cmluZyA9IHN1YlN0ZXA/LnVpVHlwZSB8fCBzdWJTdGVwPy50eXBlIHx8ICcnO1xuICAgICAgY29uc3Qgc3RhdHVzOiBzdHJpbmcgPSAoc3ViU3RlcD8uc3RhdHVzIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAodWlUeXBlID09PSAnV0FJVF9GT1JfTE9DQVRPUicpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2luZ2xlIGdyb3VwZWQgZW50cnkgd2l0aCBhIGNvdW50ZG93bjsgYWJzb3JicyBGSU5EX0xPQ0FUT1IgYW5kIExPQ0FUT1JfRk9VTkRcbiAgICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSB0eXBlb2Ygc3ViU3RlcC52YWx1ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHN1YlN0ZXAudmFsdWVcbiAgICAgICAgICA6IChzdWJTdGVwLnZhbHVlID8gcGFyc2VGbG9hdChzdWJTdGVwLnZhbHVlKSA6IDMwKTtcblxuICAgICAgICB0aGlzLmNsZWFyQ291bnRkb3duVGltZXIoKTtcblxuICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSA9IHtcbiAgICAgICAgICAuLi5zdWJTdGVwLFxuICAgICAgICAgIHJlbWFpbmluZ1NlY29uZHM6IHRpbWVvdXRTZWNvbmRzLFxuICAgICAgICAgIHN0YXR1czogJ3J1bm5pbmcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSk7XG5cbiAgICAgICAgLy8gVGljayBkb3duIGV2ZXJ5IHNlY29uZFxuICAgICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5yZW1haW5pbmdTZWNvbmRzID0gTWF0aC5tYXgoMCwgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkucmVtYWluaW5nU2Vjb25kcyAtIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5LnJlbWFpbmluZ1NlY29uZHMgPD0gMCkge1xuICAgICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5zdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkucmVtYWluaW5nU2Vjb25kcyA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJDb3VudGRvd25UaW1lcigpO1xuICAgICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgfSBlbHNlIGlmICh1aVR5cGUgPT09ICdGSU5EX0xPQ0FUT1InKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdmYWlsZWQnIHx8IHN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gQWJvcnQgY291bnRkb3duLCByZXBsYWNlIGdyb3VwIGVudHJ5IHdpdGggdGhpcyBmYWlsZWQgbG9nXG4gICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzID0gdGhpcy5wcm9jZXNzZWRTdWJTdGVwcy5maWx0ZXIoZW50cnkgPT4gZW50cnkgIT09IHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb3VudGRvd25UaW1lcigpO1xuICAgICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzLnB1c2goeyAuLi5zdWJTdGVwLCBzdGF0dXM6ICdmYWlsZWQnIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBzaW5nbGUgZ3JvdXAgZW50cnkncyB0ZXh0IHNvIHRoZSB1c2VyIHNlZXMgcHJvZ3Jlc3NcbiAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCBzdWJTdGVwLnRleHQgfHwgc3ViU3RlcC50aXRsZTtcbiAgICAgICAgICBpZiAobmV3VGV4dCkgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkuZGVzY3JpcHRpb24gPSBuZXdUZXh0O1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAodWlUeXBlID09PSAnTE9DQVRPUl9GT1VORCcpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgfHwgc3RhdHVzID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICAvLyBBYm9ydCBjb3VudGRvd24sIHJlcGxhY2UgZ3JvdXAgZW50cnkgd2l0aCB0aGlzIGZhaWxlZCBsb2dcbiAgICAgICAgICBpZiAodGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMgPSB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzLmZpbHRlcihlbnRyeSA9PiBlbnRyeSAhPT0gdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvdW50ZG93blRpbWVyKCk7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh7IC4uLnN1YlN0ZXAsIHN0YXR1czogJ2ZhaWxlZCcgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2VxdWVuY2UgY29tcGxldGUg4oCTIHVwZGF0ZSBncm91cCBlbnRyeSB0byBzaG93IExPQ0FUT1JfRk9VTkQgdGV4dCBhcyBzdWNjZXNzXG4gICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCBzdWJTdGVwLnRleHQgfHwgc3ViU3RlcC50aXRsZTtcbiAgICAgICAgICAgIGlmIChuZXdUZXh0KSB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5kZXNjcmlwdGlvbiA9IG5ld1RleHQ7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5yZW1haW5pbmdTZWNvbmRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb3VudGRvd25UaW1lcigpO1xuICAgICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBhY3RpdmUgZ3JvdXAg4oCTIHB1c2ggTE9DQVRPUl9GT1VORCBub3JtYWxseVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwcy5wdXNoKHsgLi4uc3ViU3RlcCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmICh1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUwnKSB7XG4gICAgICAgIC8vIEFkZCBzaW5nbGUgbG9hZGluZyBlbnRyeTsgd2lsbCBiZSByZXBsYWNlZCBieSBBSV9BVVRPX0hFQUxfU1VDQ0VTUyBvciBBSV9BVVRPX0hFQUxfRkFJTEVEXG4gICAgICAgIHRoaXMuYWlBdXRvSGVhbEdyb3VwRW50cnkgPSB7XG4gICAgICAgICAgLi4uc3ViU3RlcCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCBzdWJTdGVwLnRleHQgfHwgJ0FJIGF1dG8taGVhbCBzdGFydGVkJyxcbiAgICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgICB1aVR5cGU6ICdBSV9BVVRPX0hFQUwnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5KTtcblxuICAgICAgfSBlbHNlIGlmICh1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUxfU1VDQ0VTUycgfHwgdWlUeXBlID09PSAnQUlfQVVUT19IRUFMX0ZBSUxFRCcpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGxvYWRpbmcgZW50cnkgYW5kIGFkZCBUV08gc2VwYXJhdGUgZW50cmllczogdmFsdWUgYW5kIHJlYXNvbmluZyAobGlrZSBBSV9BTlNXRVIpXG4gICAgICAgIGlmICh0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5KSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwcyA9IHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMuZmlsdGVyKGVudHJ5ID0+IGVudHJ5ICE9PSB0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5KTtcbiAgICAgICAgICB0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1N1Y2Nlc3MgPSB1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUxfU1VDQ0VTUyc7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3ViU3RlcC52YWx1ZSA/PyBzdWJTdGVwLnRleHQgPz8gJyc7XG4gICAgICAgIGNvbnN0IHJlYXNvbmluZyA9IHN1YlN0ZXAucmVhc29uaW5nID8/IHN1YlN0ZXAuUmVhc29uaW5nID8/ICcnO1xuICAgICAgICBjb25zdCBiYXNlRHVyYXRpb24gPSBzdWJTdGVwLmR1cmF0aW9uIHx8IDA7XG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0gaXNTdWNjZXNzID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCc7XG5cbiAgICAgICAgLy8gRmlyc3QgZW50cnk6IHZhbHVlL2Rlc2NyaXB0aW9uXG4gICAgICAgIGNvbnN0IHZhbHVlRGVzY3JpcHRpb24gPSBzdWJTdGVwLnRleHQgfHwgc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCAoaXNTdWNjZXNzXG4gICAgICAgICAgPyBgQUkgYXV0by1oZWFsIHN1Y2Nlc3NmdWwuIE5ldyBsb2NhdG9yOiAke3ZhbHVlfWBcbiAgICAgICAgICA6IGBBSSBhdXRvLWhlYWwgZmFpbGVkIGZvciBlbGVtZW50OiAke3ZhbHVlfWApO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzLnB1c2goe1xuICAgICAgICAgIC4uLnN1YlN0ZXAsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHZhbHVlRGVzY3JpcHRpb24sXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHJlYXNvbmluZzogbnVsbCxcbiAgICAgICAgICBzdGF0dXM6IGZpbmFsU3RhdHVzLFxuICAgICAgICAgIHVpVHlwZTogJ0FJX0FVVE9fSEVBTF9WQUxVRScsXG4gICAgICAgICAgdHlwZTogJ0FJX0FVVE9fSEVBTF9WQUxVRScsXG4gICAgICAgICAgZHVyYXRpb246IGJhc2VEdXJhdGlvbixcbiAgICAgICAgICBpc0FpQXV0b0hlYWxSZXN1bHQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2Vjb25kIGVudHJ5OiByZWFzb25pbmcgKG9ubHkgaWYgcHJlc2VudClcbiAgICAgICAgaWYgKHJlYXNvbmluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh7XG4gICAgICAgICAgICAuLi5zdWJTdGVwLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlYXNvbmluZyxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgcmVhc29uaW5nOiByZWFzb25pbmcsXG4gICAgICAgICAgICBzdGF0dXM6IGZpbmFsU3RhdHVzLFxuICAgICAgICAgICAgdWlUeXBlOiAnQUlfQVVUT19IRUFMX1JFQVNPTklORycsXG4gICAgICAgICAgICB0eXBlOiAnQUlfQVVUT19IRUFMX1JFQVNPTklORycsXG4gICAgICAgICAgICBkdXJhdGlvbjogYmFzZUR1cmF0aW9uLFxuICAgICAgICAgICAgaXNBaUF1dG9IZWFsUmVzdWx0OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW55IGZhaWxlZCBsb2cgd2hpbGUgYSBjb3VudGRvd24gaXMgYWN0aXZlIOKAkyByZXNvbHZlIGl0IGFzIGZhaWxlZFxuICAgICAgICBpZiAoKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgfHwgc3RhdHVzID09PSAnZmFpbHVyZScpICYmIHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkuc3RhdHVzID0gJ2ZhaWxlZCc7XG4gICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkucmVtYWluaW5nU2Vjb25kcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jbGVhckNvdW50ZG93blRpbWVyKCk7XG4gICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaChzdWJTdGVwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RQcm9jZXNzZWRJbmRleCA9IGFsbFN1YlN0ZXBzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRMaXZlUHJvY2Vzc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQ291bnRkb3duVGltZXIoKTtcbiAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzID0gW107XG4gICAgdGhpcy5sYXN0UHJvY2Vzc2VkSW5kZXggPSAwO1xuICAgIHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5ID0gbnVsbDtcbiAgICB0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDb3VudGRvd25UaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb3VudGRvd25JbnRlcnZhbElkICE9PSBudWxsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiB8fCAhdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwc0ZvclJ1blJlc3VsdCA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFN1YlN0ZXBzID0gKHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMgfHwgW10pIGFzIGFueVtdO1xuICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHNGb3JSdW5SZXN1bHQgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc3ViU3RlcCBvZiBhbGxTdWJTdGVwcykge1xuICAgICAgY29uc3QgdWlUeXBlOiBzdHJpbmcgPSBzdWJTdGVwPy51aVR5cGUgfHwgc3ViU3RlcD8udHlwZSB8fCAnJztcblxuICAgICAgLy8gU3BsaXQgQUlfQVVUT19IRUFMX1NVQ0NFU1MvRkFJTEVEIGludG8gdHdvIGVudHJpZXNcbiAgICAgIGlmICh1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUxfU1VDQ0VTUycgfHwgdWlUeXBlID09PSAnQUlfQVVUT19IRUFMX0ZBSUxFRCcpIHtcbiAgICAgICAgY29uc3QgaXNTdWNjZXNzID0gdWlUeXBlID09PSAnQUlfQVVUT19IRUFMX1NVQ0NFU1MnO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHN1YlN0ZXAudmFsdWUgPz8gc3ViU3RlcC50ZXh0ID8/ICcnO1xuICAgICAgICBjb25zdCByZWFzb25pbmcgPSBzdWJTdGVwLnJlYXNvbmluZyA/PyBzdWJTdGVwLlJlYXNvbmluZyA/PyAnJztcbiAgICAgICAgY29uc3QgYmFzZUR1cmF0aW9uID0gc3ViU3RlcC5kdXJhdGlvbiB8fCAwO1xuICAgICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IGlzU3VjY2VzcyA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnO1xuXG4gICAgICAgIC8vIEZpcnN0IGVudHJ5OiB2YWx1ZS9kZXNjcmlwdGlvblxuICAgICAgICBjb25zdCB2YWx1ZURlc2NyaXB0aW9uID0gKGlzU3VjY2Vzc1xuICAgICAgICAgID8gYEFJIGF1dG8taGVhbCBzdWNjZXNzZnVsLiBOZXcgbG9jYXRvcjogJHt2YWx1ZX1gXG4gICAgICAgICAgOiBgQUkgYXV0by1oZWFsIGZhaWxlZCBmb3IgZWxlbWVudDogJHt2YWx1ZX1gKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwc0ZvclJ1blJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5zdWJTdGVwLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWx1ZURlc2NyaXB0aW9uLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICByZWFzb25pbmc6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiBmaW5hbFN0YXR1cyxcbiAgICAgICAgICB1aVR5cGU6ICdBSV9BVVRPX0hFQUxfVkFMVUUnLFxuICAgICAgICAgIHR5cGU6ICdBSV9BVVRPX0hFQUxfVkFMVUUnLFxuICAgICAgICAgIGR1cmF0aW9uOiBiYXNlRHVyYXRpb24sXG4gICAgICAgICAgaXNBaUF1dG9IZWFsUmVzdWx0OiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY29uZCBlbnRyeTogcmVhc29uaW5nIChvbmx5IGlmIHByZXNlbnQpXG4gICAgICAgIGlmIChyZWFzb25pbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzRm9yUnVuUmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgLi4uc3ViU3RlcCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZWFzb25pbmcsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIHJlYXNvbmluZzogcmVhc29uaW5nLFxuICAgICAgICAgICAgc3RhdHVzOiBmaW5hbFN0YXR1cyxcbiAgICAgICAgICAgIHVpVHlwZTogJ0FJX0FVVE9fSEVBTF9SRUFTT05JTkcnLFxuICAgICAgICAgICAgdHlwZTogJ0FJX0FVVE9fSEVBTF9SRUFTT05JTkcnLFxuICAgICAgICAgICAgZHVyYXRpb246IGJhc2VEdXJhdGlvbixcbiAgICAgICAgICAgIGlzQWlBdXRvSGVhbFJlc3VsdDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbGwgb3RoZXIgbG9ncyBwYXNzIHRocm91Z2ggYXMtaXNcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwc0ZvclJ1blJlc3VsdC5wdXNoKHN1YlN0ZXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mb250LWludGVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGVIZWFkZXIoJGV2ZW50KVwiPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVidWdJY29uXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1yb3VuZGVkLWZ1bGwgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCIgKGNsaWNrKT1cIm9uRGVidWdQb2ludENsaWNrKCRldmVudClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImRlYnVnUG9pbnRTZXQgPyAnUmVtb3ZlIGRlYnVnIHBvaW50JyA6ICdTZXQgZGVidWcgcG9pbnQnXCI+XG4gICAgICAgIDxzdmcgKm5nSWY9XCJkZWJ1Z1BvaW50U2V0XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjZcIiBmaWxsPVwiI0M2MzUzNVwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxzdmcgKm5nSWY9XCIhZGVidWdQb2ludFNldFwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiN1wiIGN5PVwiN1wiIHI9XCI2XCIgc3Ryb2tlPVwiI0M2MzUzNVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gU3RhdHVzIEljb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8IS0tIFN1Y2Nlc3MgLS0+XG4gICAgICA8c3ZnICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gRmFpbGVkIC0tPlxuICAgICAgPHN2ZyAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZScgfHwgc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsZWQnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjRUY0NDQ0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNCA0TDggOE04IDRMNCA4XCIgc3Ryb2tlPVwiI0VGNDQ0NFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gUGVuZGluZyAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gUnVubmluZyAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3J1bm5pbmcnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjM0I4MkY2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzNCODJGNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIFxuICAgICAgICA8c3BhbiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnc2tpcHBlZCdcIiAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdGV4dC1bMTJweF1cIj5cbiAgICAgICAgICBza2lwX25leHRcbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBMb29wIEljb24gLS0+XG4gICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjRcIiBmaWxsPVwiI0VCRUNGRFwiLz48cGF0aCBkPVwiTTkuNjY2NjMgNC42NjY2NkwxMSA1Ljk5OTk5TDkuNjY2NjMgNy4zMzMzMlwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk01IDcuNjY2NjdWNy4zMzMzM0M1IDYuOTc5NzEgNS4xNDA0OCA2LjY0MDU3IDUuMzkwNTIgNi4zOTA1MkM1LjY0MDU3IDYuMTQwNDggNS45Nzk3MSA2IDYuMzMzMzMgNkgxMVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02LjMzMzMzIDExLjMzMzNMNSA5Ljk5OTk5TDYuMzMzMzMgOC42NjY2NlwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMSA4LjMzMzM0VjguNjY2NjhDMTEgOS4wMjAzIDEwLjg1OTUgOS4zNTk0NCAxMC42MDk1IDkuNjA5NDlDMTAuMzU5NCA5Ljg1OTUzIDEwLjAyMDMgMTAgOS42NjY2NyAxMEg1XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gU3RlcCBOdW1iZXIgYW5kIFRpdGxlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1mb250LWludGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE4cHhdXCIgc3R5bGU9XCJ3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiPlxuICAgICAgICB7eyBjb25maWc/LnN0ZXBOdW1iZXIgfX0uIDxzcGFuIFtpbm5lckhUTUxdPVwiY29uZmlnPy50aXRsZVwiPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIFxuICAgICAgPCEtLSBMb29wIFR5cGUgQmFkZ2VzIC0tPlxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGJhZGdlIG9mIGdldExvb3BUeXBlQmFkZ2VzKClcIiBcbiAgICAgICAgY2xhc3M9XCJjcWEtcHgtMS41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LXByaW1hcnkgY3FhLWJnLVsjRUJFQ0ZEXSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdXCI+XG4gICAgICAgIHt7IGJhZGdlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5zdGVwRGVsZXRlZFwiIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNCNDIzMThdIGNxYS1iZy1bI0ZFRjNGMl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRkVFNEUyXVwiPlxuICAgICAgICBEZWxldGVkXG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcm91bmRlZC1mdWxsIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzA5N0U1M10gY3FhLWJnLVsjQ0ZGMkU1XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1taW4tdy1tYXggY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVs2cHhdXCI+XG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOVwiIGhlaWdodD1cIjlcIiB2aWV3Qm94PVwiMCAwIDkgOVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk00LjUwOTQxIDBDNC41NjQ4OSAwLjAyMjczODQgNC41ODg1OSAwLjA3ODI2NTIgNC42MTEzMSAwLjEyOTg0NkM0LjYyMjY5IDAuMTU5OSA0LjYzMzE0IDAuMTkwMTE3IDQuNjQzMjkgMC4yMjA1NzVDNC42NDcyNiAwLjIzMjI0NyA0LjY1MTIzIDAuMjQzOTE4IDQuNjU1MzIgMC4yNTU5NDNDNC43MDgwNiAwLjQxMzAwNSA0Ljc1NTA0IDAuNTcxNzQ4IDQuODAyMjkgMC43MzAzOEM0LjgxMjk3IDAuNzY2MTkgNC44MjM2OSAwLjgwMTk4NyA0LjgzNDQyIDAuODM3NzgzQzQuODg5MDUgMS4wMjAwNCA0Ljk0MzI3IDEuMjAyNCA0Ljk5NzE5IDEuMzg0ODRDNS4wMDQ3NiAxLjQxMDQ3IDUuMDEyMzQgMS40MzYwOSA1LjAxOTkyIDEuNDYxNzFDNS4wNDEyOCAxLjUzMzk1IDUuMDYyNjIgMS42MDYxOSA1LjA4MzgzIDEuNjc4NDdDNS4xMjg2NyAxLjgzMTIgNS4xNzQ3MyAxLjk4MzQ3IDUuMjIzNzggMi4xMzUwMUM1LjIyODA3IDIuMTQ4MjcgNS4yMzIzNiAyLjE2MTUyIDUuMjM2NzcgMi4xNzUxOEM1LjM2NDIgMi41NjUgNS41NDQ4MiAyLjkxNDM3IDUuODQwOSAzLjIxMTk2QzUuODQ4MjMgMy4yMTk3IDUuODU1NTYgMy4yMjc0NCA1Ljg2MzEyIDMuMjM1NDFDNS45ODk1IDMuMzY0MzcgNi4xNTE2OSAzLjQ2NzcxIDYuMzEzOCAzLjU1MTExQzYuMzIyMDYgMy41NTU0MiA2LjMzMDMxIDMuNTU5NzQgNi4zMzg4MiAzLjU2NDE5QzYuODE1ODcgMy44MDkyNSA3LjM4OTUxIDMuOTE3MDQgNy45MDYxOSA0LjA2MDVDOC4xMzI2IDQuMTIzNCA4LjM1ODMgNC4xODgyOSA4LjU4MzE3IDQuMjU2MDNDOC41OTg5NyA0LjI2MDc5IDguNjE0NzggNC4yNjU1NCA4LjYzMDU4IDQuMjcwMjhDOC42Nzc4NCA0LjI4NDQ1IDguNzI1IDQuMjk4ODcgOC43NzIxMSA0LjMxMzQ3QzguNzgzMSA0LjMxNjc5IDguNzk0MDggNC4zMjAxMSA4LjgwNTM5IDQuMzIzNTNDOC44NzAyOSA0LjM0NDA2IDguOTMyMzkgNC4zNjgyOSA4Ljk4NTY2IDQuNDEwMjdDOS4wMDE5MSA0LjQ0NDE4IDkuMDAxOTEgNC40NDQxOCA4Ljk5NzQ4IDQuNDc4MUM4Ljk0NTY0IDQuNTI3MzYgOC44OTQyIDQuNTUwNDYgOC44MjU3OCA0LjU3M0M4LjgxNiA0LjU3NjMyIDguODA2MjIgNC41Nzk2NSA4Ljc5NjE0IDQuNTgzMDhDOC42ODA2MSA0LjYyMTgzIDguNTYzNTEgNC42NTU3NSA4LjQ0NjI2IDQuNjg5MzVDOC40MjIyIDQuNjk2MyA4LjM5ODE0IDQuNzAzMjYgOC4zNzQwOCA0LjcxMDIxQzguMjI1NzEgNC43NTMwMSA4LjA3NzA4IDQuNzk0OSA3LjkyODI5IDQuODM2MzJDNy43MzIzMiA0Ljg5MDg4IDcuNTM2NjMgNC45NDYzNCA3LjM0MTEzIDUuMDAyNDNDNy4zMDkxIDUuMDExNjIgNy4yNzcwNiA1LjAyMDc4IDcuMjQ1MDEgNS4wMjk5MUM3LjA3NjcxIDUuMDc3ODYgNi45MDkyMyA1LjEyNzUzIDYuNzQzMTQgNS4xODIwOEM2LjcyOTM3IDUuMTg2NTkgNi43MTU1OSA1LjE5MTEgNi43MDEzOSA1LjE5NTc0QzYuMTQ1MTEgNS4zODA4MiA1LjcyMTEgNS43MjYwOSA1LjQ1NTcxIDYuMjMwOTlDNS4zMTI2MyA2LjUxNDc1IDUuMjI4MjMgNi44MjE2MSA1LjE0MjE0IDcuMTI0NDdDNS4xMTg4NCA3LjIwNjE5IDUuMDk0MDkgNy4yODc0NSA1LjA2OTA1IDcuMzY4NjlDNS4wNDk0IDcuNDMyNjEgNS4wMzAyIDcuNDk2NjMgNS4wMTE0OSA3LjU2MDgxQzUuMDA5MjYgNy41Njg0NCA1LjAwNzAzIDcuNTc2MDggNS4wMDQ3MyA3LjU4Mzk1QzQuOTkzOTQgNy42MjA5NCA0Ljk4MzE5IDcuNjU3OTMgNC45NzI1MiA3LjY5NDk1QzQuOTQ1MTkgNy43ODg3OSA0LjkxNTc4IDcuODgxODcgNC44ODU1NSA3Ljk3NDg5QzQuODMxOTEgOC4xNDAyMSA0Ljc4MzEgOC4zMDY3NCA0LjczNDU5IDguNDczNUM0LjY2MTQ0IDguNzI0NTcgNC42NjE0NCA4LjcyNDU3IDQuNjE5OTcgOC44NDUyN0M0LjYxNzIxIDguODUzMzcgNC42MTQ0NiA4Ljg2MTQ3IDQuNjExNjMgOC44Njk4MkM0LjU5NjQ5IDguOTEyNzggNC41ODA5MiA4Ljk1MjMzIDQuNTUyMjYgOC45ODg3QzQuNTA4NjcgOC45OTc4OCA0LjUwODY3IDguOTk3ODggNC40Njk1MSA5QzQuNDI0NzMgOC45Mzc1OSA0LjM5NTA4IDguODc3MTEgNC4zNzEzMyA4LjgwNTA4QzQuMzY3ODcgOC43OTQ4NyA0LjM2NDQxIDguNzg0NjYgNC4zNjA4NSA4Ljc3NDE1QzQuMzE2ODQgOC42NDI0OCA0LjI3NzUxIDguNTA5NDYgNC4yMzgxNyA4LjM3NjQ2QzQuMjI5MTYgOC4zNDYwNCA0LjIyMDExIDguMzE1NjQgNC4yMTEwNSA4LjI4NTI0QzQuMTQzNiA4LjA1ODYzIDQuMDc3MjUgNy44MzE3NCA0LjAxMTAxIDcuNjA0ODFDMy43MzUwNyA2LjQ4MjI0IDMuNzM1MDcgNi40ODIyNCAzLjAzOSA1LjU3NDY2QzMuMDI3ODQgNS41NjU5NiAzLjAxNjY5IDUuNTU3MjYgMy4wMDUxOSA1LjU0ODNDMi41NDkxMyA1LjE5OTAyIDEuOTQ4MzQgNS4wNjk2OSAxLjM5ODE1IDQuOTE4MTNDMS4yNjIwNyA0Ljg4MDYyIDEuMTI2MDUgNC44NDI5MyAwLjk5MDAzMiA0LjgwNTIzQzAuOTc4MTM4IDQuODAxOTMgMC45NzgxMzggNC44MDE5MyAwLjk2NjAwMyA0Ljc5ODU3QzAuNzY5ODExIDQuNzQ0MTcgMC41NzM2NzQgNC42ODk2MyAwLjM3ODIyNCA0LjYzMjgzQzAuMzY5OTU2IDQuNjMwNDUgMC4zNjE2ODggNC42MjgwNiAwLjM1MzE2OSA0LjYyNTYxQzAuMDUyODk4OSA0LjUzODgzIDAuMDUyODk4OSA0LjUzODgzIDAuMDAwNjQ2NTM3IDQuNDc4MUMtMC4wMDA4MzEyNjEgNC40NTA1NCAtMC4wMDA4MzEyNjEgNC40NTA1NCAwLjAxMjQ2ODkgNC40MjE1N0MwLjA2NzA4MzUgNC4zNzA0IDAuMTIwMDc3IDQuMzQ4NDggMC4xOTIxNiA0LjMyNjE5QzAuMjAyNTk3IDQuMzIyODQgMC4yMTMwMzQgNC4zMTk0OCAwLjIyMzc4NyA0LjMxNjAzQzAuMjU1NzUzIDQuMzA1ODIgMC4yODc3ODggNC4yOTU4NCAwLjMxOTg1MSA0LjI4NTkyQzAuMzI5MDAxIDQuMjgzMDUgMC4zMzgxNTEgNC4yODAxNyAwLjM0NzU3OCA0LjI3NzIyQzAuNDEyMjg1IDQuMjU2OTMgMC40NzcyMjUgNC4yMzc0IDAuNTQyMjU5IDQuMjE4MDlDMC41NTgyNCA0LjIxMzMyIDAuNTU4MjQgNC4yMTMzMiAwLjU3NDU0NCA0LjIwODQ2QzAuODUyMjY5IDQuMTI1ODcgMS4xMzE4MSA0LjA0OSAxLjQxMTI2IDMuOTcxOTZDMS42MTk1IDMuOTE0NTUgMS44MjczOCAzLjg1NjE4IDIuMDM0NiAzLjc5NTQ4QzIuMDQ0MTMgMy43OTI3MSAyLjA1MzY1IDMuNzg5OTMgMi4wNjM0NiAzLjc4NzA3QzIuNTQzNSAzLjY0Njk2IDMuMDEyNzggMy40NDgxNiAzLjMyMjc0IDMuMDUzN0MzLjMyNzM4IDMuMDQ3ODUgMy4zMzIwMiAzLjA0MiAzLjMzNjggMy4wMzU5N0MzLjY4MTk3IDIuNTk4MTUgMy44MTY1OCAyLjA2NTcyIDMuOTY2OTUgMS41NDYyMUM0LjAxNjQzIDEuMzc1MzQgNC4wNjY0OSAxLjIwNDY0IDQuMTE2NzMgMS4wMzM5OUM0LjEzMDY0IDAuOTg2NzMzIDQuMTQ0NTMgMC45Mzk0NzEgNC4xNTgzNiAwLjg5MjE5NEM0LjIxMzk0IDAuNzAyMjg5IDQuMjcwMzUgMC41MTI2NDIgNC4zMyAwLjMyMzg2NEM0LjMzNTU4IDAuMzA2MTg2IDQuMzQxMTQgMC4yODg1MDEgNC4zNDY2NiAwLjI3MDgwN0M0LjQzMDE3IDAuMDAzOTg3NjEgNC40MzAxNyAwLjAwMzk4NzYxIDQuNTA5NDEgMFpcIiBmaWxsPVwiIzBEQkQ3RFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTcuMjM1OTcgMC41NTQ4NTlDNy4yOTAyNCAwLjYxMzU5OSA3LjMwMTA5IDAuNjgyNjMxIDcuMzE3OTkgMC43NTc2MzhDNy4zNzQzNiAwLjk5MzI2OSA3LjQzOTI5IDEuMjA5OTMgNy42NjQ2NyAxLjM0NjgxQzcuODAzNzEgMS40MjAzNSA3Ljk2OTQ0IDEuNDUzODEgOC4xMjM1IDEuNDg1NDFDOC4xODg1NCAxLjQ5OTAyIDguMjQzNDggMS41MTcwOSA4LjI5OTI0IDEuNTUzMjFDOC4zMTE4MSAxLjU3MjI5IDguMzExODEgMS41NzIyOSA4LjMxMTA3IDEuNjA1NDlDOC4yOTgxNCAxLjY0NTg4IDguMjg2NzggMS42NTg5IDguMjUyNjkgMS42ODUzM0M4LjIxNTQzIDEuNjk3MjYgOC4yMTU0MyAxLjY5NzI2IDguMTcwNjggMS43MDY1M0M4LjE1Mzc1IDEuNzEwMjUgOC4xMzY4MyAxLjcxNCA4LjExOTkyIDEuNzE3NzlDOC4xMTA4NiAxLjcxOTggOC4xMDE4MSAxLjcyMTgxIDguMDkyNDcgMS43MjM4OEM3LjgxNjk2IDEuNzg0ODIgNy44MTY5NiAxLjc4NDgyIDcuNTc4ODIgMS45MjI3M0M3LjU3MTA4IDEuOTI4NjkgNy41NjMzMyAxLjkzNDY2IDcuNTU1MzYgMS45NDA4QzcuMzg1MTYgMi4wODQzMSA3LjM0OTE2IDIuMzIzMDMgNy4yOTc5MyAyLjUyMzAxQzcuMjk0OTkgMi41MzM5OSA3LjI5MjA2IDIuNTQ0OTcgNy4yODkwMyAyLjU1NjI5QzcuMjg2NDkgMi41NjYwMSA3LjI4Mzk1IDIuNTc1NzMgNy4yODEzMyAyLjU4NTc1QzcuMjcwMjggMi42MTU0NCA3LjI1ODgxIDIuNjM0NzkgNy4yMzU5NyAyLjY1NzU0QzcuMTcyMzQgMi42NjUyNyA3LjE3MjM0IDIuNjY1MjcgNy4xNDEzOSAyLjY1NzU0QzcuMDkyMTYgMi42MjEwNiA3LjA4MTE0IDIuNTc5NSA3LjA2ODI4IDIuNTIzNjVDNy4wNjYxMyAyLjUxNTAxIDcuMDYzOTggMi41MDYzNiA3LjA2MTc2IDIuNDk3NDVDNy4wNTQ4OSAyLjQ2OTgzIDcuMDQ4MjQgMi40NDIxNyA3LjA0MTY0IDIuNDE0NDlDNi45ODk3OSAyLjE5ODk3IDYuOTMxMjYgMS45ODc1MSA2LjcyNDUxIDEuODYxMThDNi41NjI5MyAxLjc3NTAxIDYuMzY2NDYgMS43MzQyNiA2LjE4NTg3IDEuNzAxMzZDNi4xMzYzNyAxLjY5MTUxIDYuMTA4MDIgMS42NzkxMSA2LjA3NzM4IDEuNjQwMTJDNi4wNzA3MyAxLjYwMDU1IDYuMDcwNzMgMS42MDA1NSA2LjA3NzM4IDEuNTYwOThDNi4xMjQ0NyAxLjUxNDM3IDYuMTc0MDIgMS41MDI5OSA2LjIzNzcyIDEuNDg4OTFDNi4yNTc3OCAxLjQ4NDE2IDYuMjc3ODQgMS40NzkzOCA2LjI5Nzg5IDEuNDc0NTZDNi4zMDgyNSAxLjQ3MjA5IDYuMzE4NjEgMS40Njk2MiA2LjMyOTI5IDEuNDY3MDdDNi4zODIxMiAxLjQ1NDA3IDYuNDM0NDMgMS40Mzk0OSA2LjQ4NjczIDEuNDI0NjJDNi40OTYyMyAxLjQyMTk4IDYuNTA1NzMgMS40MTkzNSA2LjUxNTUyIDEuNDE2NjNDNi42MjE4MiAxLjM4NjI0IDYuNzEzNTYgMS4zNDczNyA2Ljc5ODU0IDEuMjc4MzZDNi44MDY0NyAxLjI3MjEzIDYuODE0MzkgMS4yNjU4OSA2LjgyMjU1IDEuMjU5NDZDNi45NTQ4IDEuMTQ1NjUgNi45OTk3NCAwLjk3NDY3NCA3LjA0MDUzIDAuODE1MTM0QzcuMDQzNjQgMC44MDMwMjIgNy4wNDY3NSAwLjc5MDkxIDcuMDQ5OTUgMC43Nzg0MzJDNy4wNTYxNCAwLjc1NDEwMSA3LjA2MjIyIDAuNzI5NzQzIDcuMDY4MTcgMC43MDUzNTlDNy4wNzI0MyAwLjY4ODM5NCA3LjA3MjQzIDAuNjg4Mzk0IDcuMDc2NzggMC42NzEwODZDNy4wNzkyNyAwLjY2MDk1MSA3LjA4MTc1IDAuNjUwODE2IDcuMDg0MzEgMC42NDAzNzNDNy4wOTUyMSAwLjYwODEwOCA3LjEwOTUyIDAuNTgyNzcyIDcuMTI5NTcgMC41NTQ4NTlDNy4xNjgxIDAuNTM2NDM1IDcuMTk1MTUgMC41NDQ3NjQgNy4yMzU5NyAwLjU1NDg1OVpcIiBmaWxsPVwiIzA3NUYzRlwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTEuNzk1NDUgNi4yNDcxQzEuODA5NTEgNi4yNDcxOSAxLjgwOTUxIDYuMjQ3MTkgMS44MjM4NiA2LjI0NzI5QzEuOTI0NzcgNi4yNTAyMiAxLjk5MzA0IDYuMjgxMTUgMi4wNjczNiA2LjM0NjAxQzIuMTUzODQgNi40MzUzMyAyLjE5Mzc3IDYuNTM2MTEgMi4xOTE1IDYuNjU2NUMyLjE4MTc4IDYuNzU0MTIgMi4xMjE1OCA2LjgzOTM1IDIuMDQ3NzMgNi45MDUzM0MxLjk2MDgxIDYuOTcyNDIgMS44NzMxMyA2Ljk5NDU5IDEuNzYyMDYgNi45OTE0OUMxLjY2ODQxIDYuOTgxMDcgMS41ODAzIDYuOTM4NTIgMS41MTM5MyA2Ljg3NDUxQzEuNDMxMzggNi43NjY4MSAxLjQwNzI1IDYuNjY4MDMgMS40MTkzNSA2LjUzNTM3QzEuNDQ0MzMgNi40MzA5MiAxLjUxNjM3IDYuMzQ2MTMgMS42MDg1IDYuMjg2NjZDMS42NzI1MSA2LjI1NTY0IDEuNzIzOTkgNi4yNDY1MiAxLjc5NTQ1IDYuMjQ3MVpcIiBmaWxsPVwiIzBEQkQ3RFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgU2VsZi1oZWFsZWRcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHktMC41IGNxYS1weC0xIGNxYS1iZy1bIzYzNjZGMTFBXSBjcWEtbWwtMSBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eVwiIFxuICAgICAgICAgICAqbmdJZj1cInN0ZXA/LmV4ZWN1dGVkUmVzdWx0Py52aWRlb19zdGFydF90aW1lXCIgXG4gICAgICAgICAgIFttYXRUb29sdGlwXT1cIidKdW1wIHRvIHZpZGVvIHRpbWUnXCIgXG4gICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm9uSnVtcFRvVGltZXN0YW1wKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2MzYzNjNdICFjcWEtdGV4dC1bMTBweF0gIWNxYS13LVsxMHB4XSAhY3FhLWgtWzEwcHhdXCI+XG4gICAgICAgICAgcGxheV9hcnJvd1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVs4cHhdIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyM2MzYzNjNdXCI+XG4gICAgICAgICAge3sgZm9ybWF0RHVyYXRpb25DbG9jayhzdGVwPy5leGVjdXRlZFJlc3VsdD8udmlkZW9fc3RhcnRfdGltZSB8fCAwKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0RlYnVnXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMC41IGNxYS10ZXh0LVsjOUNBM0FGXVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1vcGFjaXR5LTgwIGNxYS10cmFuc2l0aW9uLW9wYWNpdHkgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZVwiIGFyaWEtbGFiZWw9XCJFZGl0XCIgKGNsaWNrKT1cIm9uRWRpdFN0ZXAoJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdGV4dC1bMTRweF0gIWNxYS13LVsxNHB4XSAhY3FhLWgtWzE0cHhdXCI+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjYWRkU3RlcE1lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIiBjbGFzcz1cImNxYS1wLTAgY3FhLWJvcmRlci0wIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCIgYXJpYS1sYWJlbD1cIkFkZFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJhZGRTdGVwTWVudVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdGV4dC1bMTRweF0gIWNxYS13LVsxNHB4XSAhY3FhLWgtWzE0cHhdXCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtbWVudSAjYWRkU3RlcE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJjcWEtYWRkLXN0ZXAtbWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiIHlQb3NpdGlvbj1cImJlbG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBvcHQgb2YgYWRkU3RlcE1lbnVPcHRpb25zXCIgKGNsaWNrKT1cIm9uQWRkU3RlcE9wdGlvblNlbGVjdChvcHQsICRldmVudClcIj5cbiAgICAgICAgICAgIHt7IG9wdC5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjc3RlcE1vcmVNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1vcGFjaXR5LTgwIGNxYS10cmFuc2l0aW9uLW9wYWNpdHkgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZVwiIGFyaWEtbGFiZWw9XCJNb3JlIG9wdGlvbnNcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwic3RlcE1vcmVNZW51XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS10ZXh0LVsxNHB4XSAhY3FhLXctWzE0cHhdICFjcWEtaC1bMTRweF1cIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1tZW51ICNzdGVwTW9yZU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJjcWEtc3RlcC1tb3JlLW1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIiB5UG9zaXRpb249XCJiZWxvd1wiPlxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgb3B0IG9mIHN0ZXBNb3JlTWVudU9wdGlvbnNcIiAoY2xpY2spPVwib25TdGVwTW9yZU9wdGlvblNlbGVjdChvcHQsICRldmVudClcIj57eyBvcHQubGFiZWwgfX08L2J1dHRvbj5cbiAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgICAge3sgZm9ybWF0RHVyYXRpb24oY29uZmlnLmR1cmF0aW9uKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMy41IDVMNyA4LjVMMTAuNSA1XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG4gICAgPCEtLSBJdGVyYXRpb24gU2VsZWN0b3IgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXVwiICpuZ0lmPVwiIWlzTGl2ZSB8fCAoaXNMaXZlICYmIGNvbmZpZz8uaXRlcmF0aW9ucyAhPT0gdW5kZWZpbmVkKVwiPlxuICAgICAgPGxhYmVsPkl0ZXJhdGlvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlIGNxYS13LWZ1bGwgY3FhLW1heC13LVsxNTZweF1cIj5cbiAgICAgICAgPCEtLSBTdGF0dXMgaW5kaWNhdG9yIGZvciBzZWxlY3RlZCBpdGVyYXRpb24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEl0ZXJhdGlvbiAmJiBjb25maWc/Lml0ZXJhdGlvbnMgJiYgY29uZmlnPy5pdGVyYXRpb25zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWxlZnQtWzEwcHhdIGNxYS10b3AtMS8yIGNxYS10cmFuc2Zvcm0gY3FhLS10cmFuc2xhdGUteS0xLzIgY3FhLXBvaW50ZXItZXZlbnRzLW5vbmUgY3FhLXotMTBcIj5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic2VsZWN0ZWRJdGVyYXRpb24uc3RhdHVzID09PSAnc3VjY2VzcydcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCI2XCIgdmlld0JveD1cIjAgMCA2IDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiM1wiIGN5PVwiM1wiIHI9XCIzXCIgZmlsbD1cIiMwMEE2M0VcIi8+PC9zdmc+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNlbGVjdGVkSXRlcmF0aW9uLnN0YXR1cyA9PT0gJ2ZhaWxlZCdcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCI2XCIgdmlld0JveD1cIjAgMCA2IDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiM1wiIGN5PVwiM1wiIHI9XCIzXCIgZmlsbD1cIiNFRjQ0NDRcIi8+PC9zdmc+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNlbGVjdGVkSXRlcmF0aW9uLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXCIgd2lkdGg9XCI2XCIgaGVpZ2h0PVwiNlwiIHZpZXdCb3g9XCIwIDAgNiA2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjNcIiBjeT1cIjNcIiByPVwiM1wiIGZpbGw9XCIjOUNBM0FGXCIvPjwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzZWxlY3RlZEl0ZXJhdGlvbi5zdGF0dXMgPT09ICdydW5uaW5nJ1wiIHdpZHRoPVwiNlwiIGhlaWdodD1cIjZcIiB2aWV3Qm94PVwiMCAwIDYgNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCIzXCIgY3k9XCIzXCIgcj1cIjNcIiBmaWxsPVwiIzNCODJGNlwiLz48L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICBjbGFzcz1cImNxYS1wbC1bMjJweF0gY3FhLXByLTYgY3FhLXB5LVs1cHhdIGNxYS13LWZ1bGwgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRTVFNUU1XSBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtYmctWyNGQUZBRkFdIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtYXBwZWFyYW5jZS1ub25lXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSXRlcmF0aW9uXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJdGVyYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVJdGVyYXRpb25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIoaXNMaXZlICYmIChzdGF0dXMgPT09ICdydW5uaW5nJyB8fCBzdGF0dXMgPT09ICdSVU5OSU5HJykpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdJZj1cIiFjb25maWc/Lml0ZXJhdGlvbnMgfHwgY29uZmlnPy5pdGVyYXRpb25zPy5sZW5ndGggPT09IDBcIiB2YWx1ZT1cIlwiIGRpc2FibGVkPlxuICAgICAgICAgICAgTm8gaXRlcmF0aW9ucyBhdmFpbGFibGVcbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVyYXRpb24gb2YgY29uZmlnLml0ZXJhdGlvbnNcIiBbbmdWYWx1ZV09XCJpdGVyYXRpb25cIj5cbiAgICAgICAgICAgIHt7IGdldEl0ZXJhdGlvbkxhYmVsKGl0ZXJhdGlvbikgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwhLS0gRHJvcGRvd24gYXJyb3cgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXJpZ2h0LTIgY3FhLXRvcC0xLzIgY3FhLXRyYW5zZm9ybSBjcWEtLXRyYW5zbGF0ZS15LTEvMiBjcWEtcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjZcIiB2aWV3Qm94PVwiMCAwIDEwIDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEgMUw1IDVMOSAxXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW1sLWF1dG9cIiAqbmdJZj1cImNvbmZpZz8uaXRlcmF0aW9ucyAmJiBjb25maWc/Lml0ZXJhdGlvbnM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgRGVmYXVsdDoge3sgY29uZmlnLmRlZmF1bHRJdGVyYXRpb24gPT09ICdsYXN0JyA/ICdsYXN0IGl0ZXJhdGlvbicgOiAnZmlyc3QgaXRlcmF0aW9uJyB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxlY3RlZCBJdGVyYXRpb24gU3ViLXN0ZXBzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEl0ZXJhdGlvbiAmJiBzZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtcHktMSBjcWEtbWwtOVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiPlxuICAgICAgPCEtLSBTaW5nbGUgbG9vcDogcmVuZGVyIGFsbCBlbnRyaWVzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJTdGVwIG9mIChpc0xpdmUgPyBwcm9jZXNzZWRTdWJTdGVwcyA6IHByb2Nlc3NlZFN1YlN0ZXBzRm9yUnVuUmVzdWx0KVwiPlxuICAgICAgICA8IS0tIEFJX0FVVE9fSEVBTF9TVUNDRVNTL0ZBSUxFRDogcmVuZGVyIHdpdGggYWktYWdlbnQtc3RlcCBzdHlsZSAoYm90aCBsaXZlIGFuZCBydW4gcmVzdWx0IHNjcmVlbnMpIC0tPlxuICAgICAgICA8Y3FhLWFpLWxvZ3Mtd2l0aC1yZWFzb25pbmdcbiAgICAgICAgICAqbmdJZj1cIiRhbnkoc3ViU3RlcCkuaXNBaUF1dG9IZWFsUmVzdWx0XCJcbiAgICAgICAgICBbc3RhdHVzXT1cInN1YlN0ZXAuc3RhdHVzXCJcbiAgICAgICAgICBbdGV4dF09XCIkYW55KHN1YlN0ZXApLnRleHQgfHwgc3ViU3RlcD8udmFsdWVcIlxuICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCIkYW55KHN1YlN0ZXApLmRlc2NyaXB0aW9uIHx8IHN1YlN0ZXA/LnRleHQgfHwgc3ViU3RlcD8udmFsdWVcIlxuICAgICAgICAgIFtyZWFzb25pbmddPVwiJGFueShzdWJTdGVwKS5yZWFzb25pbmcgfHwgc3ViU3RlcD8ucmVhc29uaW5nXCJcbiAgICAgICAgICBbZHVyYXRpb25dPVwic3ViU3RlcC5kdXJhdGlvblwiPlxuICAgICAgICA8L2NxYS1haS1sb2dzLXdpdGgtcmVhc29uaW5nPlxuXG4gICAgICAgIDwhLS0gUmVndWxhciBzdWItc3RlcHMgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIiEkYW55KHN1YlN0ZXApLmlzQWlBdXRvSGVhbFJlc3VsdFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktWzUuNXB4XSBjcWEtcHgtM1wiPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgU3RhdHVzIEljb24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnIHx8IHN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3Bhc3NlZCdcIiA+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEZhaWx1cmUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnIHx8IHN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWxlZCdcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNy41IDQuNUw0LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA0LjVMNy41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBQZW5kaW5nIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJTdGVwPy5zdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT09ICdwZW5kaW5nJ1wiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gUnVubmluZyAtIFNob3cgc3Bpbm5lciAoYWxzbyB1c2VkIGZvciBhY3RpdmUgV0FJVF9GT1JfTE9DQVRPUiBjb3VudGRvd24gaW4gbGl2ZSBtb2RlKSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZydcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxQTUgNSAwIDAgMSAxMSA2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnc2tpcHBlZCdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjcWEtdGV4dC1bIzlDQTNBRl0gY3FhLXRleHQtWzEycHhdXCI+XG4gICAgICAgICAgICAgIHNraXBfbmV4dFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTdWItc3RlcCBEZXNjcmlwdGlvbiAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtWzEzcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzM2NDE1M11cIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBwcmUtbGluZTsgd29yZC1icmVhazogYnJlYWstd29yZDtcIj5cbiAgICAgICAgICAgIHt7ICRhbnkoc3ViU3RlcCkuZGVzY3JpcHRpb24gfHwgJGFueShzdWJTdGVwKS50ZXh0IH19XG4gICAgICAgICAgICA8IS0tIENvdW50ZG93biBmb3IgYWN0aXZlIFdBSVRfRk9SX0xPQ0FUT1IgaW4gbGl2ZSBtb2RlIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0xpdmUgJiYgJGFueShzdWJTdGVwKS5yZW1haW5pbmdTZWNvbmRzICE9IG51bGxcIiBjbGFzcz1cImNxYS10ZXh0LVsjRjk3MzE2XSBjcWEtZm9udC1tZWRpdW0gY3FhLW1sLTFcIj4oe3sgJGFueShzdWJTdGVwKS5yZW1haW5pbmdTZWNvbmRzIH19cyByZW1haW5pbmcpPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgRHVyYXRpb24gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1tZXRhZGF0YS1rZXlcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKHN1YlN0ZXAuZHVyYXRpb24pIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBOZXN0ZWQgU3RlcHMgLS0+XG4gICAgPGRpdiAqbmdJZj1cImhhc0NoaWxkIHx8IChjb25maWcubmVzdGVkU3RlcHMgJiYgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApXCIgY2xhc3M9XCJjcWEtbWwtOSBjcWEtcGItMSBjcWEtbmVzdGVkLXN0ZXBzLWNvbnRhaW5lclwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXSBjcWEtcHktWzJweF0gY3FhLXB4LTNcIj5OZXN0ZWQgc3RlcHM8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1wbC1bMThweF1cIiBzdHlsZT1cImJvcmRlci1sZWZ0OiAycHggc29saWQgI0M1QzdGQTtcIj5cbiAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciB3aGVuIG5lc3RlZCBzdGVwcyBhcmUgYmVpbmcgbG9hZGVkIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzQ2hpbGQgJiYgKCFjb25maWcubmVzdGVkU3RlcHMgfHwgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA9PT0gMCkgJiYgaXNTdGVwTG9hZGluZygpXCIgXG4gICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHktMiBjcWEtcHgtM1wiPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIG9wYWNpdHk9XCIwLjI1XCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk03IDFBNiA2IDAgMCAxIDEzIDdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzEzcHhdIGNxYS10ZXh0LVsjNzM3MzczXVwiPkxvYWRpbmcgbmVzdGVkIHN0ZXBzLi4uPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RlcCBvZiBjb25maWcubmVzdGVkU3RlcHM7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICA8IS0tIFdyYXBwZXIgdG8gc2hvdyBza2VsZXRvbiB3aGlsZSBzdGVwLXJlbmRlcmVyIGlzIGxvYWRpbmcgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtc3RlcC1yZW5kZXJlci13cmFwcGVyXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIidleGMtJyArIHN0ZXAuaWRcIlxuICAgICAgICAgICAgW2NsYXNzLmxvYWRlZF09XCIhaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwKVwiPlxuICAgICAgICAgICAgPCEtLSBMb2FkaW5nIHNrZWxldG9uIG92ZXJsYXkgLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJpc05lc3RlZFN0ZXBMb2FkaW5nKHN0ZXApXCIgY2xhc3M9XCJjcWEtc3RlcC1za2VsZXRvbi1vdmVybGF5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RlcC1za2VsZXRvbiBjcWEtbXgtMyBjcWEtbXktMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSBVc2Ugc3RlcC1yZW5kZXJlciBmb3IgYWxsIG5lc3RlZCBzdGVwcyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgLS0+XG4gICAgICAgICAgICA8IS0tIFRoZSBzdGVwLXJlbmRlcmVyIHdpbGwgZHluYW1pY2FsbHkgbG9hZCB0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50IGFuZCBwYXNzIGhhbmRsZXJzIC0tPlxuICAgICAgICAgICAgPGNxYS1zdGVwLXJlbmRlcmVyIFxuICAgICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgICAgW3N0ZXBOdW1iZXJdPVwic3RlcE51bWJlciArICcuJyArIChpICsgMSlcIlxuICAgICAgICAgICAgICBbb25FeHBhbmRIYW5kbGVyXT1cIm9uRXhwYW5kSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXJdPVwiZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXT1cIm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2lzU3RlcExvYWRpbmdIYW5kbGVyXT1cImlzU3RlcExvYWRpbmdIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2lzU3RlcEV4cGFuZGVkSGFuZGxlcl09XCJpc1N0ZXBFeHBhbmRlZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcl09XCJjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2Zvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcl09XCJmb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXJdPVwiZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyXT1cImdldExvb3BJdGVyYXRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRBcGlBc3NlcnRpb25zSGFuZGxlcl09XCJnZXRBcGlBc3NlcnRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtmb3JtYXRBY3Rpb25zSGFuZGxlcl09XCJmb3JtYXRBY3Rpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcl09XCJvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyXT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25VcGxvYWRCYXNlbGluZUhhbmRsZXJdPVwib25VcGxvYWRCYXNlbGluZUhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0U2VsZkhlYWxMb2FkaW5nU3RhdGVzSGFuZGxlcl09XCJnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uQW5hbHl6ZUhhbmRsZXJdPVwib25BbmFseXplSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblZpZXdGdWxsTG9nc0hhbmRsZXJdPVwib25WaWV3RnVsbExvZ3NIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uU2VsZkhlYWxBY3Rpb25IYW5kbGVyXT1cIm9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uU3RlcENsaWNrSGFuZGxlcl09XCJvblN0ZXBDbGlja0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25Kc29uUGF0aENvcGllZEhhbmRsZXJdPVwib25Kc29uUGF0aENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25Eb3dubG9hZEhhbmRsZXJdPVwib25Eb3dubG9hZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25GaWxlUGF0aENvcGllZEhhbmRsZXJdPVwib25GaWxlUGF0aENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25UZXh0Q29waWVkSGFuZGxlcl09XCJvblRleHRDb3BpZWRIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2p1bXBUb1RpbWVzdGFtcEhhbmRsZXJdPVwianVtcFRvVGltZXN0YW1wSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtkb3dubG9hZGluZ1N0ZXBJZF09XCJkb3dubG9hZGluZ1N0ZXBJZFwiXG4gICAgICAgICAgICAgIFtpc1VwbG9hZGluZ0Jhc2VsaW5lXT1cImlzVXBsb2FkaW5nQmFzZWxpbmVcIlxuICAgICAgICAgICAgICBbaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVdPVwiaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRJdGVyYXRpb25JZF09XCJzdGVwPy5zZWxlY3RlZEl0ZXJhdGlvbklkIHx8ICcnXCJcbiAgICAgICAgICAgIFtpc0xpdmVdPVwiaXNMaXZlXCJcbiAgICAgICAgICAgIFtpc0RlYnVnXT1cImlzRGVidWdcIlxuICAgICAgICAgICAgW2RlYnVnUG9pbnRTZXRdPVwiZ2V0RGVidWdQb2ludFNldEhhbmRsZXIgPyBnZXREZWJ1Z1BvaW50U2V0SGFuZGxlcihzdGVwKSA6IGRlYnVnUG9pbnRTZXRcIlxuICAgICAgICAgICAgW2dldERlYnVnUG9pbnRTZXRIYW5kbGVyXT1cImdldERlYnVnUG9pbnRTZXRIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvbkRlYnVnUG9pbnRDaGFuZ2VIYW5kbGVyXT1cIm9uRGVidWdQb2ludENoYW5nZUhhbmRsZXJcIlxuICAgICAgICAgICAgW29uRWRpdFN0ZXBIYW5kbGVyXT1cIm9uRWRpdFN0ZXBIYW5kbGVyXCJcbiAgICAgICAgICAgIFthZGRTdGVwTWVudU9wdGlvbnNdPVwiZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkID8gZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkKHN0ZXApIDogYWRkU3RlcE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgIFtvbkFkZFN0ZXBPcHRpb25TZWxlY3RIYW5kbGVyXT1cIm9uQWRkU3RlcE9wdGlvblNlbGVjdEhhbmRsZXJcIlxuICAgICAgICAgICAgW3N0ZXBNb3JlTWVudU9wdGlvbnNdPVwiZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZCA/IGdldFN0ZXBNb3JlTWVudU9wdGlvbnNGb3JOZXN0ZWQoc3RlcCkgOiBzdGVwTW9yZU1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgIFtvblN0ZXBNb3JlT3B0aW9uU2VsZWN0SGFuZGxlcl09XCJvblN0ZXBNb3JlT3B0aW9uU2VsZWN0SGFuZGxlclwiXG4gICAgICAgICAgICBbZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkXT1cImdldEFkZFN0ZXBNZW51T3B0aW9uc0Zvck5lc3RlZFwiXG4gICAgICAgICAgICBbZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZF09XCJnZXRTdGVwTW9yZU1lbnVPcHRpb25zRm9yTmVzdGVkXCJcbiAgICAgICAgICAgICAgKGNvbXBvbmVudFJlYWR5KT1cIm1hcmtTdGVwTG9hZGVkKHN0ZXApXCI+XG4gICAgICAgICAgICA8L2NxYS1zdGVwLXJlbmRlcmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBWaWV3IEFsbCBJdGVyYXRpb25zIExpbmsgLS0+XG4gICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zaG93Vmlld0FsbEl0ZXJhdGlvbnMgJiYgIWlzTGl2ZVwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1weC0zIGNxYS1weS1bMTBweF1cIj5cbiAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9uVmlld0FsbEl0ZXJhdGlvbnNDbGljaygkZXZlbnQpXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1uby11bmRlcmxpbmUgY3FhLXRleHQtcHJpbWFyeSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICBWaWV3IGFsbCBpdGVyYXRpb25zXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNy42MzYzNiAxMS4yNjdMNi43NTg1MiAxMC4zOTc3TDkuMzg3NzggNy43Njg0N0gzVjYuNDk4NThIOS4zODc3OEw2Ljc1ODUyIDMuODczNThMNy42MzYzNiAzTDExLjc2OTkgNy4xMzM1Mkw3LjYzNjM2IDExLjI2N1pcIiBmaWxsPVwiIzNGNDNFRVwiLz48L3N2Zz5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTZWxmIEhlYWwgQW5hbHlzaXMgLS0+XG4gICAgPGNxYS1zZWxmLWhlYWwtYW5hbHlzaXMgXG4gICAgICAqbmdJZj1cInNlbGZIZWFsQW5hbHlzaXNcIlxuICAgICAgW2lkXT1cInN0ZXA/LnRlc3RTdGVwSWRcIlxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICBbaXNMb2FkaW5nQWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nQWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICBbaXNMb2FkaW5nTW9kaWZ5QWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nTW9kaWZ5QWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICAgIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvblxuICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgW3N1YlN0ZXBzXT1cImdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpXCJcbiAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICBbaXNFeHBhbmRlZF09XCJzaG93RmFpbGVkU3RlcERldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93Vmlld01vcmVCdXR0b24gJiZzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIFtpc01ha2luZ0N1cnJlbnRCYXNlbGluZV09XCJpc01ha2luZ0N1cnJlbnRCYXNlbGluZVwiXG4gICAgICBbaXNMaXZlXT1cImlzTGl2ZVwiXG4gICAgICAobWFrZUN1cnJlbnRCYXNlbGluZSk9XCJvbk1ha2VDdXJyZW50QmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAodXBsb2FkQmFzZWxpbmUpPVwib25VcGxvYWRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgIChhbmFseXplKT1cIm9uQW5hbHl6ZSgpXCJcbiAgICAgICh2aWV3RnVsbExvZ3MpPVwib25WaWV3RnVsbExvZ3MoKVwiPlxuICAgIDwvY3FhLXVwZGF0ZWQtZmFpbGVkLXN0ZXA+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
1180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9sb29wLXN0ZXAvbG9vcC1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9sb29wLXN0ZXAvbG9vcC1zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXVELFNBQVMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFM0osT0FBTyxFQUE0Tiw2QkFBNkIsRUFBc0IsOEJBQThCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2VixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUTNELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxpQkFBaUI7SUFMeEQ7O1FBa0JXLHFCQUFnQixHQUFzQixNQUFNLENBQUM7UUFJN0MsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUd4QixZQUFPLEdBQWEsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQWEsS0FBSyxDQUFDO1FBRy9CLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDL0MsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDcEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFDNUQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDL0QsdUJBQWtCLEdBQXdCLDZCQUE2QixDQUFDO1FBQ3hFLHdCQUFtQixHQUF5Qiw4QkFBOEIsQ0FBQztRQXFDM0Usc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQU14Qyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsNEJBQXVCLEdBQUcsRUFBRSxDQUFD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Q0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUkwQixrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNHLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBUXRCLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTG9vcFN0ZXBDb25maWcsIExvb3BJdGVyYXRpb24sIEV4ZWN1dGlvblN0ZXBDb25maWcsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgRmFpbHVyZURldGFpbHMsIFN1YlN0ZXAsIFNlbGZIZWFsQW5hbHlzaXNEYXRhLCBTZWxmSGVhbEFjdGlvbiwgU3RlcEdyb3VwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIFNlbGZIZWFsQWN0aW9uRXZlbnQsIEFkZFN0ZXBNZW51T3B0aW9uLCBERUZBVUxUX0FERF9TVEVQX01FTlVfT1BUSU9OUywgU3RlcE1vcmVNZW51T3B0aW9uLCBERUZBVUxUX1NURVBfTU9SRV9NRU5VX09QVElPTlMgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCwgdXBsb2FkQmFzZWxpbmVFdmVudCB9IGZyb20gJy4uL3Zpc3VhbC1jb21wYXJpc29uL3Zpc3VhbC1jb21wYXJpc29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1sb29wLXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9vcC1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIExvb3BTdGVwQ29tcG9uZW50IGV4dGVuZHMgQmFzZVN0ZXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBEb0NoZWNrIHtcbiAgLy8gSW5kaXZpZHVhbCBpbnB1dHNcbiAgQElucHV0KCkgaWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlc3RTdGVwUmVzdWx0SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBOdW1iZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGF0dXMhOiBTdGVwU3RhdHVzO1xuICBASW5wdXQoKSBkdXJhdGlvbiE6IG51bWJlcjtcbiAgQElucHV0KCkgdGltaW5nQnJlYWtkb3duPzogVGltaW5nQnJlYWtkb3duO1xuICBASW5wdXQoKSBleHBhbmRlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxvb3BUeXBlPzogJ2ZvcicgfCAnd2hpbGUnO1xuICBASW5wdXQoKSBpdGVyYXRpb25zITogTG9vcEl0ZXJhdGlvbltdO1xuICBASW5wdXQoKSBzZWxlY3RlZEl0ZXJhdGlvbklkPzogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0SXRlcmF0aW9uPzogJ2ZpcnN0JyB8ICdsYXN0JyA9ICdsYXN0JztcbiAgQElucHV0KCkgbmVzdGVkU3RlcHM/OiBFeGVjdXRpb25TdGVwQ29uZmlnW107XG4gIEBJbnB1dCgpIHNob3dWaWV3QWxsSXRlcmF0aW9ucz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhhc0NoaWxkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNMaXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN0ZXBEZWxldGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNEZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVidWdQb2ludFNldD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZ2V0RGVidWdQb2ludFNldEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgb25EZWJ1Z1BvaW50Q2hhbmdlSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnLCB2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgQE91dHB1dCgpIGRlYnVnUG9pbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBlZGl0U3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXBPcHRpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEFkZFN0ZXBNZW51T3B0aW9uPigpO1xuICBAT3V0cHV0KCkgc3RlcE1vcmVPcHRpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBNb3JlTWVudU9wdGlvbj4oKTtcbiAgQElucHV0KCkgYWRkU3RlcE1lbnVPcHRpb25zOiBBZGRTdGVwTWVudU9wdGlvbltdID0gREVGQVVMVF9BRERfU1RFUF9NRU5VX09QVElPTlM7XG4gIEBJbnB1dCgpIHN0ZXBNb3JlTWVudU9wdGlvbnM6IFN0ZXBNb3JlTWVudU9wdGlvbltdID0gREVGQVVMVF9TVEVQX01PUkVfTUVOVV9PUFRJT05TO1xuXG4gIC8vIEhhbmRsZXIgZnVuY3Rpb24gdG8gcGFzcyBkb3duIHRvIG5lc3RlZCBjaGlsZCBzdGVwIGdyb3VwcyBmb3IgcmVjdXJzaXZlIGV4cGFuc2lvblxuICBASW5wdXQoKSBvbkV4cGFuZEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHBhc3NlZCB0byBuZXN0ZWQgc3RlcC1yZW5kZXJlciBzbyBFZGl0IG9uIG5lc3RlZCBzdGVwcyBpcyBmb3J3YXJkZWQgd2l0aCB0aGUgc3RlcCBjb25maWcuICovXG4gIEBJbnB1dCgpIG9uRWRpdFN0ZXBIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQWRkU3RlcE9wdGlvblNlbGVjdEhhbmRsZXI/OiAob3B0aW9uOiBBZGRTdGVwTWVudU9wdGlvbiwgc3RlcD86IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyPzogKG9wdGlvbjogU3RlcE1vcmVNZW51T3B0aW9uLCBzdGVwPzogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHVzZWQgdG8gZ2V0IGFkZC1zdGVwIG1lbnUgb3B0aW9ucyBwZXIgbmVzdGVkIHN0ZXA7IG90aGVyd2lzZSBhZGRTdGVwTWVudU9wdGlvbnMgaXMgdXNlZCBmb3IgYWxsLiAqL1xuICBASW5wdXQoKSBnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWQ/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gQWRkU3RlcE1lbnVPcHRpb25bXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHVzZWQgdG8gZ2V0IHN0ZXAtbW9yZSBtZW51IG9wdGlvbnMgcGVyIG5lc3RlZCBzdGVwOyBvdGhlcndpc2Ugc3RlcE1vcmVNZW51T3B0aW9ucyBpcyB1c2VkIGZvciBhbGwuICovXG4gIEBJbnB1dCgpIGdldFN0ZXBNb3JlTWVudU9wdGlvbnNGb3JOZXN0ZWQ/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gU3RlcE1vcmVNZW51T3B0aW9uW107XG5cbiAgLy8gSGFuZGxlciBmdW5jdGlvbnMgZm9yIGNvbmRpdGlvbiBzdGVwc1xuICBASW5wdXQoKSBnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gQ29uZGl0aW9uQnJhbmNoW107XG4gIEBJbnB1dCgpIG9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IGFueSwgYnJhbmNoOiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGlzU3RlcExvYWRpbmdIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RlcEV4cGFuZGVkSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyPzogKGR1cmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcbiAgQElucHV0KCkgZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueTtcbiAgQElucHV0KCkgZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQW5hbHl6ZUhhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblZpZXdGdWxsTG9nc0hhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblNlbGZIZWFsQWN0aW9uSGFuZGxlcj86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBASW5wdXQoKSBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyPzogKCkgPT4geyBpc0xvYWRpbmdBY2NlcHQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9OyBpc0xvYWRpbmdNb2RpZnlBY2NlcHQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IH07XG4gIEBJbnB1dCgpIGdldExvb3BJdGVyYXRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgZ2V0QXBpQXNzZXJ0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIGZvcm1hdEFjdGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblN0ZXBDbGlja0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZywgZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6ICdyZXF1ZXN0Qm9keScgfCAncmVzcG9uc2VCb2R5JyB8ICdyZXF1ZXN0SGVhZGVycycgfCAncmVzcG9uc2VIZWFkZXJzJyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkRvd25sb2FkSGFuZGxlcj86IChldmVudDogeyBmaWxlTmFtZTogc3RyaW5nOyBmaWxlUGF0aD86IHN0cmluZzsgZmlsZVR5cGU6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uRmlsZVBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IGZpbGVQYXRoOiBzdHJpbmc7IHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblRleHRDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHRleHQ6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGp1bXBUb1RpbWVzdGFtcEhhbmRsZXI/OiAodGltZXN0YW1wOiBudW1iZXIsIHRlc3RTdGVwSWQ/OiBudW1iZXIgfCBzdHJpbmcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGRvd25sb2FkaW5nU3RlcElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgc3RlcD86IGFueTtcblxuICBASW5wdXQoKSBmYWlsdXJlRGV0YWlscz86IEZhaWx1cmVEZXRhaWxzO1xuICBASW5wdXQoKSByZWFzb25pbmc/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29uZmlkZW5jZT86IHN0cmluZztcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBpc01ha2luZ0N1cnJlbnRCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIGl0ZXJhdGlvbkRhdGE/OiBhbnk7XG4gIEBPdXRwdXQoKSBtYWtlQ3VycmVudEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjxtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8dXBsb2FkQmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFuYWx5emUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RnVsbExvZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxmSGVhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZkhlYWxBY3Rpb25FdmVudD4oKTtcblxuICBzaG93RmFpbGVkU3RlcERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdhZGRTdGVwTWVudVRyaWdnZXInKSBhZGRTdGVwTWVudVRyaWdnZXI/OiBNYXRNZW51VHJpZ2dlcjtcbiAgQFZpZXdDaGlsZCgnc3RlcE1vcmVNZW51VHJpZ2dlcicpIHN0ZXBNb3JlTWVudVRyaWdnZXI/OiBNYXRNZW51VHJpZ2dlcjtcblxuICAvKiogU2hvdyBkZWJ1ZyBpY29uIHdoZW4gZGVidWcgbW9kZSBpcyBvbiAoc2hvd24gb24gcGFyZW50IGFuZCBhbGwgY2hpbGQgc3RlcHMpLiAqL1xuICBnZXQgc2hvd0RlYnVnSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlYnVnID09PSB0cnVlO1xuICB9XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGZvciB3aGVuIHRoZSBsb29wIHN0ZXAgZXhwYW5kc1xuICBAT3V0cHV0KCkgb25FeHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGZvciB3aGVuIFwiVmlldyBhbGwgaXRlcmF0aW9uc1wiIGlzIGNsaWNrZWRcbiAgQE91dHB1dCgpIG9uVmlld0FsbEl0ZXJhdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGZvciB3aGVuIGl0ZXJhdGlvbiBzZWxlY3Rpb24gY2hhbmdlc1xuICBAT3V0cHV0KCkgb25JdGVyYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvLyBDb25maWcgcHJvcGVydHkgZm9yIGJhc2UgY2xhc3MgLSBidWlsdCBmcm9tIGluZGl2aWR1YWwgaW5wdXRzIGluIG5nT25Jbml0XG4gIG92ZXJyaWRlIGNvbmZpZyE6IExvb3BTdGVwQ29uZmlnO1xuXG4gIHNlbGVjdGVkSXRlcmF0aW9uOiBMb29wSXRlcmF0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdXNlclNlbGVjdGVkSXRlcmF0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB1c2VyJ3MgbWFudWFsIHNlbGVjdGlvblxuICBwcml2YXRlIHByZXZpb3VzU3RhdHVzPzogU3RlcFN0YXR1cztcbiAgcHJpdmF0ZSB1c2VyTWFudWFsbHlDbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gVHJhY2sgd2hpY2ggc3RlcHMgYXJlIHN0aWxsIGxvYWRpbmcgdG8gc2hvdyBza2VsZXRvblxuICBsb2FkaW5nU3RlcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIC8vIFByb2Nlc3NlZCBzdWItc3RlcHMgZm9yIGxpdmUgbW9kZSBXQUlUX0ZPUl9MT0NBVE9SIGNvdW50ZG93biBncm91cGluZ1xuICBwcm9jZXNzZWRTdWJTdGVwczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0UHJvY2Vzc2VkSW5kZXg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgd2FpdExvY2F0b3JHcm91cEVudHJ5OiBhbnkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb3VudGRvd25JbnRlcnZhbElkOiBhbnkgPSBudWxsO1xuXG4gIC8vIEFJX0FVVE9fSEVBTCBncm91cGluZzogc2hvdyBsb2FkaW5nIHVudGlsIEFJX0FVVE9fSEVBTF9TVUNDRVNTIG9yIEFJX0FVVE9fSEVBTF9GQUlMRURcbiAgcHJpdmF0ZSBhaUF1dG9IZWFsR3JvdXBFbnRyeTogYW55IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gUHJvY2Vzc2VkIHN1Yi1zdGVwcyBmb3IgcnVuIHJlc3VsdCBzY3JlZW4gKGZpbHRlciBhbmQgc3BsaXQgQUlfQVVUT19IRUFMX1NVQ0NFU1MvRkFJTEVEKVxuICBwcm9jZXNzZWRTdWJTdGVwc0ZvclJ1blJlc3VsdDogYW55W10gPSBbXTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCBjb25maWcgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIC8vIFVzZSBuZXN0ZWRTdGVwcyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBlbXB0eSBhcnJheVxuICAgIGNvbnN0IHN0ZXBzVG9Vc2UgPSB0aGlzLm5lc3RlZFN0ZXBzIHx8IFtdO1xuXG4gICAgLy8gVXNlIGFjdGlvbiBhcyBmYWxsYmFjayBmb3IgdGl0bGUgaWYgdGl0bGUgaXMgZW1wdHlcbiAgICAvLyBDaGVjayBib3RoIGluc3RhbmNlIHByb3BlcnR5IGFuZCBjb25maWcgZm9yIGFjdGlvblxuICAgIGNvbnN0IGFjdGlvblZhbHVlID0gKHRoaXMgYXMgYW55KS5hY3Rpb24gfHwgJyc7XG4gICAgY29uc3Qgc3RlcFRpdGxlID0gKHRoaXMudGl0bGUgJiYgdGhpcy50aXRsZS50cmltKCkpID8gdGhpcy50aXRsZSA6IGFjdGlvblZhbHVlO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRlc3RTdGVwSWQ6IHRoaXMuc3RlcD8udGVzdFN0ZXBJZCB8fCB1bmRlZmluZWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogc3RlcFRpdGxlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgbG9vcFR5cGU6IHRoaXMubG9vcFR5cGUsXG4gICAgICBpdGVyYXRpb25zOiB0aGlzLml0ZXJhdGlvbnMsXG4gICAgICBzZWxlY3RlZEl0ZXJhdGlvbklkOiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQsXG4gICAgICBkZWZhdWx0SXRlcmF0aW9uOiB0aGlzLmRlZmF1bHRJdGVyYXRpb24sXG4gICAgICBuZXN0ZWRTdGVwczogc3RlcHNUb1VzZSxcbiAgICAgIHN0ZXBEZWxldGVkOiB0aGlzLnN0ZXBEZWxldGVkLFxuICAgICAgc2hvd1ZpZXdBbGxJdGVyYXRpb25zOiB0aGlzLnNob3dWaWV3QWxsSXRlcmF0aW9ucyxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIExvb3BTdGVwQ29uZmlnO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIEluaXRpYWxpemUgbGl2ZSBzdWItc3RlcCBwcm9jZXNzaW5nIGZvciBXQUlUX0ZPUl9MT0NBVE9SIGdyb3VwaW5nXG4gICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcyAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcyAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFByb2Nlc3MgZm9yIHJ1biByZXN1bHQgc2NyZWVuOiBmaWx0ZXIgYW5kIHNwbGl0IEFJX0FVVE9fSEVBTF9TVUNDRVNTL0ZBSUxFRFxuICAgICAgdGhpcy5wcm9jZXNzU3ViU3RlcHNGb3JSdW5SZXN1bHQoKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvbiAtIHByaW9yaXRpemUgc2VsZWN0ZWRJdGVyYXRpb25JZCBpbnB1dCwgdGhlbiBkZWZhdWx0XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCAmJiB0aGlzLml0ZXJhdGlvbnMgJiYgdGhpcy5pdGVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVyYXRpb25zLmZpbmQoaXRlciA9PiBpdGVyLmlkID09PSB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBmb3VuZDtcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCA9IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVyYXRpb25zICYmIHRoaXMuaXRlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTtcbiAgICAgIC8vIElmIGRlZmF1bHRJdGVyYXRpb24gaXMgJ2xhc3QnLCBhbHNvIHNldCB1c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCB0byB0aGUgbGFzdCBpdGVyYXRpb25cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRJdGVyYXRpb24gPT09ICdsYXN0JyAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMudXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgPSB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLmlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbG9hZGluZyBzdGF0ZSBpZiBhbHJlYWR5IGV4cGFuZGVkXG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLm5lc3RlZFN0ZXBzICYmIHRoaXMubmVzdGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICAgIHRoaXMubmVzdGVkU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgICAgIGlmIChzdGVwSWQpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGVwcy5hZGQoU3RyaW5nKHN0ZXBJZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHNlbGVjdGlvbiB3aGVuIHNlbGVjdGVkSXRlcmF0aW9uSWQgaW5wdXQgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10gJiYgdGhpcy5pdGVyYXRpb25zICYmIHRoaXMuaXRlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXS5wcmV2aW91c1ZhbHVlO1xuXG4gICAgICAvLyBBbHdheXMgdXBkYXRlIHdoZW4gc2VsZWN0ZWRJdGVyYXRpb25JZCBpbnB1dCBjaGFuZ2VzIGZyb20gcGFyZW50XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaXRlcmF0aW9ucy5maW5kKGl0ZXIgPT4gaXRlci5pZCA9PT0gY3VycmVudFZhbHVlKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHByb2Nlc3Npbmcgd2hlbiBzd2l0Y2hpbmcgdG8gYSBkaWZmZXJlbnQgaXRlcmF0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLmlkICE9PSBmb3VuZC5pZCkge1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBmb3VuZDtcbiAgICAgICAgICAgIC8vIFN5bmMgdXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgd2l0aCB0aGUgaW5wdXQgdmFsdWVcbiAgICAgICAgICAgIHRoaXMudXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGNoYW5nZXNcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGl2ZVN1YlN0ZXBzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3ViU3RlcHNGb3JSdW5SZXN1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm90IGZvdW5kLCBzZWxlY3QgZGVmYXVsdFxuICAgICAgICAgICAgdGhpcy5zZWxlY3REZWZhdWx0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIG5vIHZhbHVlIHByb3ZpZGVkLCBzZWxlY3QgZGVmYXVsdFxuICAgICAgICAgIHRoaXMuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVwZGF0ZSBzZWxlY3Rpb24gd2hlbiBpdGVyYXRpb25zIGFycmF5IGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlc1snaXRlcmF0aW9ucyddICYmIHRoaXMuaXRlcmF0aW9ucyAmJiB0aGlzLml0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBhIHVzZXIgc2VsZWN0aW9uLCB0cnkgdG8gcHJlc2VydmUgaXRcbiAgICAgIGlmICh0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVyYXRpb25zLmZpbmQoaXRlciA9PiBpdGVyLmlkID09PSB0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgLy8gUmVzZXQgcHJvY2Vzc2luZyB3aGVuIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBpdGVyYXRpb25cbiAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLmlkICE9PSBmb3VuZC5pZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBmb3VuZDtcbiAgICAgICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGNoYW5nZXNcbiAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NMaXZlU3ViU3RlcHMoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFVzZXIgc2VsZWN0aW9uIG5vIGxvbmdlciB2YWxpZCwgdXNlIHNlbGVjdGVkSXRlcmF0aW9uSWQgb3IgZGVmYXVsdFxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQnlJZCA9IHRoaXMuaXRlcmF0aW9ucy5maW5kKGl0ZXIgPT4gaXRlci5pZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgICAgICAgIGlmIChmb3VuZEJ5SWQpIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgcHJvY2Vzc2luZyB3aGVuIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBpdGVyYXRpb25cbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZm91bmRCeUlkLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiA9IGZvdW5kQnlJZDtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWJTdGVwc0ZvclJ1blJlc3VsdCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REZWZhdWx0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkSXRlcmF0aW9uIHx8ICF0aGlzLml0ZXJhdGlvbnMuc29tZShpdGVyID0+IGl0ZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24/LmlkKSkge1xuICAgICAgICAvLyBObyB1c2VyIHNlbGVjdGlvbiwgdXNlIHNlbGVjdGVkSXRlcmF0aW9uSWQgb3IgZGVmYXVsdFxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLml0ZXJhdGlvbnMuZmluZChpdGVyID0+IGl0ZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAvLyBSZXNldCBwcm9jZXNzaW5nIHdoZW4gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGl0ZXJhdGlvblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZm91bmQuaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uID0gZm91bmQ7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3REZWZhdWx0SXRlcmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVXBkYXRlIHRpdGxlIGlmIGl0IGNoYW5nZXMgLSBhbHNvIGNoZWNrIGZvciBhY3Rpb24gaW4gY29uZmlnIG9yIGluc3RhbmNlXG4gICAgaWYgKGNoYW5nZXNbJ3RpdGxlJ10pIHtcbiAgICAgIGNvbnN0IGFjdGlvblZhbHVlID0gKHRoaXMgYXMgYW55KS5hY3Rpb24gfHwgKHRoaXMuY29uZmlnIGFzIGFueSk/LmFjdGlvbiB8fCAnJztcbiAgICAgIGNvbnN0IHN0ZXBUaXRsZSA9ICh0aGlzLnRpdGxlICYmIHRoaXMudGl0bGUudHJpbSgpKSA/IHRoaXMudGl0bGUgOiBhY3Rpb25WYWx1ZTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZy50aXRsZSA9IHN0ZXBUaXRsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snc3RlcERlbGV0ZWQnXSAmJiB0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWcuc3RlcERlbGV0ZWQgPSBjaGFuZ2VzWydzdGVwRGVsZXRlZCddLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdleHBhbmRlZCBjaGFuZ2VkIGluIGxvb3Atc3RlcCcsIHRoaXMuaWQsIGNoYW5nZXNbJ2V4cGFuZGVkJ10pO1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZy5leHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNvbmZpZyB3aGVuIGlucHV0cyBjaGFuZ2VcbiAgICBpZiAoY2hhbmdlc1snaXRlcmF0aW9ucyddIHx8IGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXSB8fCBjaGFuZ2VzWyduZXN0ZWRTdGVwcyddKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcuaXRlcmF0aW9ucyA9IHRoaXMuaXRlcmF0aW9ucztcbiAgICAgICAgdGhpcy5jb25maWcuc2VsZWN0ZWRJdGVyYXRpb25JZCA9IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgdGhpcy5jb25maWcubmVzdGVkU3RlcHMgPSB0aGlzLm5lc3RlZFN0ZXBzIHx8IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC8vIEluaXRpYWxpemUgbG9hZGluZyBzdGF0ZSB3aGVuIG5lc3RlZCBzdGVwcyBhcmUgYWRkZWQgYW5kIHN0ZXAgaXMgZXhwYW5kZWRcbiAgICAvLyBpZiAoY2hhbmdlc1snbmVzdGVkU3RlcHMnXSAmJiB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgLy8gICB0aGlzLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIC8vICAgICBpZiAoc3RlcElkKSB7XG4gICAgLy8gICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGlmIGFscmVhZHkgZXhwYW5kZWQgd2hlbiBjb21wb25lbnQgaW5pdGlhbGl6ZXNcbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICB0aGlzLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICBpZiAoc3RlcElkKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWxzbyBoYW5kbGUgd2hlbiBuZXN0ZWRTdGVwcyBpcyBwYXNzZWQgdmlhIGNoaWxkcmVuIHByb3BlcnR5IChmb3Igc3RlcC1yZW5kZXJlciBjb21wYXRpYmlsaXR5KVxuICAgIGlmIChjaGFuZ2VzWyduZXN0ZWRTdGVwcyddICYmIHRoaXMubmVzdGVkU3RlcHMpIHtcbiAgICAgIC8vIEVuc3VyZSBjb25maWcgaXMgdXBkYXRlZCB3aXRoIG5lc3RlZFN0ZXBzXG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcubmVzdGVkU3RlcHMgPSB0aGlzLm5lc3RlZFN0ZXBzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5lc3RlZFN0ZXBzIGlzIG5vdCBwcm92aWRlZCBidXQgY2hpbGRyZW4gaXMgKGZyb20gc3RlcC1yZW5kZXJlciksIHVzZSBjaGlsZHJlblxuICAgIGlmICghdGhpcy5uZXN0ZWRTdGVwcyAmJiAodGhpcy5jb25maWcgYXMgYW55KS5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KCh0aGlzLmNvbmZpZyBhcyBhbnkpLmNoaWxkcmVuKSkge1xuICAgICAgdGhpcy5uZXN0ZWRTdGVwcyA9ICh0aGlzLmNvbmZpZyBhcyBhbnkpLmNoaWxkcmVuO1xuICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzID0gdGhpcy5uZXN0ZWRTdGVwcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0xpdmUpIHtcbiAgICAgIC8vIFVwZGF0ZSBzdWJTdGVwcyBhcnJheSB3aGVuIG5ldyBvbmVzIGFyZSBhZGRlZFxuICAgICAgaWYgKGNoYW5nZXNbJ25lc3RlZFN0ZXBzJ10pIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdWJTdGVwc0NvdW50ID0gY2hhbmdlc1snbmVzdGVkU3RlcHMnXS5wcmV2aW91c1ZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICAgICAgY29uc3QgY3VycmVudFN1YlN0ZXBzQ291bnQgPSAodGhpcy5uZXN0ZWRTdGVwcyB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgIC8vIFN1Yi1zdGVwcyBhcmUgYXBwZW5kZWQgZXh0ZXJuYWxseSwgc28gd2UganVzdCB1cGRhdGUgdGhlIGNvbmZpZ1xuICAgICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5uZXN0ZWRTdGVwcyA9IHRoaXMubmVzdGVkU3RlcHMgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEF1dG8tZXhwYW5kIGlmIHN0ZXAgaXMgcnVubmluZyBhbmQgbmV3IHN1YlN0ZXBzIGFyZSBhZGRlZCAobG9ncyBjb21pbmcgaW4pXG4gICAgICAgIGlmICghY2hhbmdlc1snbmVzdGVkU3RlcHMnXS5maXJzdENoYW5nZSAmJiBcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSAncnVubmluZycgJiYgXG4gICAgICAgICAgICBjdXJyZW50U3ViU3RlcHNDb3VudCA+IHByZXZpb3VzU3ViU3RlcHNDb3VudCAmJlxuICAgICAgICAgICAgdGhpcy5oYXNTdWJTdGVwcyAmJiBcbiAgICAgICAgICAgICF0aGlzLmlzRXhwYW5kZWQgJiYgXG4gICAgICAgICAgICAhdGhpcy51c2VyTWFudWFsbHlDbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmF1dG9FeHBhbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgc3RhdHVzIGNoYW5nZXMgLSBhdXRvLWV4cGFuZCB3aGVuIHN0ZXAgc3RhcnRzIGV4ZWN1dGluZ1xuICAgICAgaWYgKGNoYW5nZXNbJ3N0YXR1cyddICYmICFjaGFuZ2VzWydzdGF0dXMnXS5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBjaGFuZ2VzWydzdGF0dXMnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IG9sZFN0YXR1cyA9IGNoYW5nZXNbJ3N0YXR1cyddLnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgLy8gQXV0by1leHBhbmQgd2hlbiBzdGF0dXMgY2hhbmdlcyB0byAncnVubmluZycgYW5kIGhhcyBzdWJTdGVwcyAob3Igd2lsbCBoYXZlIHNvb24pXG4gICAgICAgIGlmIChuZXdTdGF0dXMgPT09ICdydW5uaW5nJyAmJiBvbGRTdGF0dXMgIT09ICdydW5uaW5nJyAmJiAhdGhpcy51c2VyTWFudWFsbHlDbG9zZWQpIHtcbiAgICAgICAgICAvLyBFeHBhbmQgaW1tZWRpYXRlbHkgaWYgYWxyZWFkeSBoYXMgc3ViU3RlcHMsIG9yIHdhaXQgZm9yIHRoZW1cbiAgICAgICAgICBpZiAodGhpcy5oYXNTdWJTdGVwcykge1xuICAgICAgICAgICAgdGhpcy5hdXRvRXhwYW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c1N0YXR1cyA9IG5ld1N0YXR1cztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9FeHBhbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5oYXNTdWJTdGVwcykge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudXNlck1hbnVhbGx5Q2xvc2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhhc1N1YlN0ZXBzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFN0ZXBzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IHdhc0V4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIHN1cGVyLnRvZ2dsZSgpO1xuICAgIC8vIEVtaXQgZXZlbnQgd2hlbiBleHBhbmRpbmcgKHRyYW5zaXRpb25pbmcgZnJvbSBjb2xsYXBzZWQgdG8gZXhwYW5kZWQpXG4gICAgaWYgKCF3YXNFeHBhbmRlZCAmJiB0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMub25FeHBhbmQuZW1pdCgpO1xuICAgICAgLy8gSWYgdGhpcyBzdGVwIGhhcyBjaGlsZHJlbiAoaGFzQ2hpbGQgaXMgdHJ1ZSkgYW5kIG9uRXhwYW5kSGFuZGxlciBpcyBwcm92aWRlZCwgY2FsbCBpdCB0byBmZXRjaCBjaGlsZHJlblxuICAgICAgaWYgKHRoaXMub25FeHBhbmRIYW5kbGVyICYmIHRoaXMuY29uZmlnICYmIHRoaXMuaGFzQ2hpbGQpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc3RlcCBjb25maWcgb2JqZWN0IGZvciB0aGUgaGFuZGxlciB3aXRoIGhhc0NoaWxkIHByb3BlcnR5XG4gICAgICAgIGNvbnN0IHN0ZXBDb25maWcgPSB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgZXhwYW5kZWQ6IHRydWUsIC8vIEVuc3VyZSBleHBhbmRlZCBpcyBzZXRcbiAgICAgICAgICB0ZXN0U3RlcFR5cGU6ICh0aGlzLmNvbmZpZyBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCAodGhpcy5sb29wVHlwZSA9PT0gJ2ZvcicgPyAnRk9SX0xPT1AnIDogJ1dISUxFX0xPT1AnKSxcbiAgICAgICAgICBjaGlsZHJlbjogdGhpcy5jb25maWcubmVzdGVkU3RlcHMgfHwgW10sXG4gICAgICAgICAgdGVzdFN0ZXBSZXN1bHRJZDogdGhpcy50ZXN0U3RlcFJlc3VsdElkLFxuICAgICAgICAgIGlkOiB0aGlzLmlkXG4gICAgICAgIH0gYXMgRXhlY3V0aW9uU3RlcENvbmZpZyAmIHsgaGFzQ2hpbGQ6IGJvb2xlYW47IHRlc3RTdGVwVHlwZT86IHN0cmluZzsgY2hpbGRyZW4/OiBhbnlbXTsgZXhwYW5kZWQ/OiBib29sZWFuIH07XG4gICAgICAgIHRoaXMub25FeHBhbmRIYW5kbGVyKHN0ZXBDb25maWcpO1xuICAgICAgfVxuICAgICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGZvciBhbGwgbmVzdGVkIHN0ZXBzXG4gICAgICBpZiAodGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5uZXN0ZWRTdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICAgIGlmIChzdGVwSWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIC8vIENsZWFyIGxvYWRpbmcgc3RhdGUgd2hlbiBjb2xsYXBzaW5nXG4gICAgICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBleHBhbmRlZCBzdGF0ZSBpcyBzeW5jZWQgd2l0aCBjb25maWdcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLmV4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgc3RlcCBpcyBzdGlsbCBsb2FkaW5nXG4gIGlzTmVzdGVkU3RlcExvYWRpbmcoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIHJldHVybiBzdGVwSWQgPyB0aGlzLmxvYWRpbmdTdGVwcy5oYXMoU3RyaW5nKHN0ZXBJZCkpIDogZmFsc2U7XG4gIH1cblxuICAvLyBNYXJrIGEgc3RlcCBhcyBsb2FkZWQgKGNhbGxlZCB3aGVuIHN0ZXAtcmVuZGVyZXIgaXMgcmVhZHkpXG4gIG1hcmtTdGVwTG9hZGVkKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICBpZiAoc3RlcElkKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdGVwcy5kZWxldGUoU3RyaW5nKHN0ZXBJZCkpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTogdm9pZCB7XG4gICAgLy8gRmlyc3QsIHRyeSB0byB1c2Ugc2VsZWN0ZWRJdGVyYXRpb25JZCBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVyYXRpb25zLmZpbmQoXG4gICAgICAgIGl0ZXIgPT4gaXRlci5pZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIC8vIFJlc2V0IHByb2Nlc3Npbmcgd2hlbiBzd2l0Y2hpbmcgdG8gYSBkaWZmZXJlbnQgaXRlcmF0aW9uXG4gICAgICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uaWQgIT09IGZvdW5kLmlkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiA9IGZvdW5kO1xuICAgICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGlzIHNlbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NMaXZlU3ViU3RlcHMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdXNlciBoYXMgbWFudWFsbHkgc2VsZWN0ZWQgc29tZXRoaW5nLCBwcmVzZXJ2ZSBpdFxuICAgIGlmICh0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaXRlcmF0aW9ucy5maW5kKGl0ZXIgPT4gaXRlci5pZCA9PT0gdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgLy8gUmVzZXQgcHJvY2Vzc2luZyB3aGVuIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBpdGVyYXRpb25cbiAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZm91bmQuaWQpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uID0gZm91bmQ7XG4gICAgICAgIC8vIFByb2Nlc3MgbGl2ZSBzdWItc3RlcHMgd2hlbiBpdGVyYXRpb24gaXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0IGJhc2VkIG9uIGRlZmF1bHRJdGVyYXRpb24gc2V0dGluZ1xuICAgIGlmICh0aGlzLmRlZmF1bHRJdGVyYXRpb24gPT09ICdsYXN0JyAmJiB0aGlzLml0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdEl0ZXJhdGlvbiA9IHRoaXMuaXRlcmF0aW9uc1t0aGlzLml0ZXJhdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAvLyBSZXNldCBwcm9jZXNzaW5nIHdoZW4gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGl0ZXJhdGlvblxuICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gbGFzdEl0ZXJhdGlvbi5pZCkge1xuICAgICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBsYXN0SXRlcmF0aW9uO1xuICAgICAgLy8gU2V0IHVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkIHRvIHRyYWNrIHRoZSBkZWZhdWx0IHNlbGVjdGlvblxuICAgICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCA9IGxhc3RJdGVyYXRpb24uaWQ7XG4gICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGlzIHNlbGVjdGVkXG4gICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RJdGVyYXRpb24gPSB0aGlzLml0ZXJhdGlvbnNbMF07XG4gICAgICAvLyBSZXNldCBwcm9jZXNzaW5nIHdoZW4gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGl0ZXJhdGlvblxuICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5pZCAhPT0gZmlyc3RJdGVyYXRpb24uaWQpIHtcbiAgICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uID0gZmlyc3RJdGVyYXRpb247XG4gICAgICAvLyBTZXQgdXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgdG8gdHJhY2sgdGhlIGRlZmF1bHQgc2VsZWN0aW9uXG4gICAgICB0aGlzLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkID0gZmlyc3RJdGVyYXRpb24uaWQ7XG4gICAgICAvLyBQcm9jZXNzIGxpdmUgc3ViLXN0ZXBzIHdoZW4gaXRlcmF0aW9uIGlzIHNlbGVjdGVkXG4gICAgICBpZiAodGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0xpdmVTdWJTdGVwcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0xpdmUgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSXRlcmF0aW9uQ2hhbmdlKGl0ZXJhdGlvbjogTG9vcEl0ZXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiSVRFUkFUSU9OIENIQU5HRVwiLCB0aGlzLmNvbmZpZyAsaXRlcmF0aW9uKVxuICAgIC8vIFJlc2V0IHByb2Nlc3Npbmcgd2hlbiBzd2l0Y2hpbmcgaXRlcmF0aW9uc1xuICAgIGlmICh0aGlzLmlzTGl2ZSAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uaWQgIT09IGl0ZXJhdGlvbi5pZCkge1xuICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgfVxuICAgIC8vIFN0b3JlIHRoZSB1c2VyJ3MgbWFudWFsIHNlbGVjdGlvblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgdGhpcy51c2VyU2VsZWN0ZWRJdGVyYXRpb25JZCA9IGl0ZXJhdGlvbi5pZDtcblxuICAgIGlmICh0aGlzLmlzTGl2ZSkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZXJhdGlvbnMuZmluZEluZGV4KGl0ZXIgPT4gaXRlci5pZCA9PT0gaXRlcmF0aW9uLmlkKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEgJiYgdGhpcy5pdGVyYXRpb25EYXRhPy5baW5kZXhdICYmIHRoaXMubmVzdGVkU3RlcHMpIHtcblxuICAgICAgICBjb25zdCB1cGRhdGVkTmVzdGVkU3RlcHM6IEV4ZWN1dGlvblN0ZXBDb25maWdbXSA9XG4gICAgICAgICAgdGhpcy5uZXN0ZWRTdGVwcy5tYXAoc3RlcCA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkU3ViU3RlcHMgPSB0aGlzLml0ZXJhdGlvbkRhdGFbaW5kZXhdW3N0ZXAuaWRdO1xuICAgICAgICAgICAgc3RlcC5kdXJhdGlvbiA9IHVwZGF0ZWRTdWJTdGVwcy5yZWR1Y2UoKGFjYzogbnVtYmVyLCBzdWJTdGVwOiBhbnkpID0+IGFjYyArIHN1YlN0ZXA/LmR1cmF0aW9uIHx8IDAsIDApO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlZFN1YlN0ZXBzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RlcCxcbiAgICAgICAgICAgICAgICBzdWJTdGVwczogWy4uLnVwZGF0ZWRTdWJTdGVwc11cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RlcCB9O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmVzdGVkU3RlcHMgPSB1cGRhdGVkTmVzdGVkU3RlcHM7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIG5lc3RlZFN0ZXBzOiB1cGRhdGVkTmVzdGVkU3RlcHNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgbGl2ZSBzdWItc3RlcHMgd2hlbiBpdGVyYXRpb24gY2hhbmdlc1xuICAgICAgaWYgKHRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICB0aGlzLnByb2Nlc3NMaXZlU3ViU3RlcHMoKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNMaXZlICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24gJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdWJTdGVwc0ZvclJ1blJlc3VsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFbWl0IHRoZSBldmVudCB3aXRoIHRoZSBpdGVyYXRpb24gSURcbiAgICB0aGlzLm9uSXRlcmF0aW9uQ2hhbmdlLmVtaXQoaXRlcmF0aW9uLmlkKTtcbiAgfVxuXG4gIGNvbXBhcmVJdGVyYXRpb24oYTogTG9vcEl0ZXJhdGlvbiwgYjogTG9vcEl0ZXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhICYmIGIgPyBhLmlkID09PSBiLmlkIDogYSA9PT0gYjtcbiAgfVxuXG4gIGdldExvb3BUeXBlQmFkZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYWRnZXM6IHN0cmluZ1tdID0gWydMT09QJ107XG4gICAgaWYgKHRoaXMubG9vcFR5cGUgPT09ICdmb3InKSB7XG4gICAgICBiYWRnZXMucHVzaCgnRk9SJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvb3BUeXBlID09PSAnd2hpbGUnKSB7XG4gICAgICBiYWRnZXMucHVzaCgnV0hJTEUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhZGdlcztcbiAgfVxuXG4gIGdldEl0ZXJhdGlvbkxhYmVsKGl0ZXJhdGlvbjogTG9vcEl0ZXJhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbi5sYWJlbDtcbiAgfVxuXG4gIG9uVmlld0FsbEl0ZXJhdGlvbnNDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub25WaWV3QWxsSXRlcmF0aW9ucy5lbWl0KCk7XG4gIH1cblxuICBvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBleHBhbmRlZDtcbiAgfVxuXG4gIGdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpOiBTdWJTdGVwW10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uPy5zdWJTdGVwcyB8fCBbXTtcbiAgfVxuXG4gIG9uTWFrZUN1cnJlbnRCYXNlbGluZShldmVudDogbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tYWtlQ3VycmVudEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25VcGxvYWRCYXNlbGluZShldmVudDogdXBsb2FkQmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkQmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkFuYWx5emUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmFseXplLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0Z1bGxMb2dzLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VsZkhlYWxBY3Rpb24oZXZlbnQ6IFNlbGZIZWFsQWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IHNob3dWaWV3TW9yZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkICYmIEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscykgJiZcbiAgICAgIChcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uZXhwZWN0ZWQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uYWN0dWFsKSkgfHxcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmN1cnJlbnQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmJhc2VsaW5lIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5kaWZmZXJlbmNlKVxuICAgICAgICAgIHx8IEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8ubG9ncz8ubGVuZ3RoKSkgfHwgXG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4QXBwbGllZCAmJiAodGhpcy5mYWlsdXJlRGV0YWlscz8uYWlGaXhNZXNzYWdlIHx8IHRoaXMuY29uZmlkZW5jZSB8fCB0aGlzLnJlYXNvbmluZz8ubGVuZ3RoKSkpXG4gICAgICApXG4gIH1cblxuICBvbkRlYnVnUG9pbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZGVidWdQb2ludENoYW5nZS5lbWl0KCF0aGlzLmRlYnVnUG9pbnRTZXQpO1xuICB9XG5cbiAgb25FZGl0U3RlcChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZWRpdFN0ZXAuZW1pdCgpO1xuICB9XG5cbiAgb25BZGRTdGVwT3B0aW9uU2VsZWN0KG9wdGlvbjogQWRkU3RlcE1lbnVPcHRpb24sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5hZGRTdGVwT3B0aW9uU2VsZWN0LmVtaXQob3B0aW9uKTtcbiAgICB0aGlzLmFkZFN0ZXBNZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBvblN0ZXBNb3JlT3B0aW9uU2VsZWN0KG9wdGlvbjogU3RlcE1vcmVNZW51T3B0aW9uLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RlcE1vcmVPcHRpb25TZWxlY3QuZW1pdChvcHRpb24pO1xuICAgIHRoaXMuc3RlcE1vcmVNZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICB0b2dnbGVIZWFkZXIoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIGlmICghdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblN0ZXBDbGlja0hhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHN0ZXBUb1Bhc3MgPSB0aGlzLnN0ZXAgfHwgdGhpcy5jb25maWc7XG4gICAgICBpZiAoc3RlcFRvUGFzcykge1xuICAgICAgICB0aGlzLm9uU3RlcENsaWNrSGFuZGxlcihzdGVwVG9QYXNzLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIHN0ZXAgaXMgYSBzdGVwLWdyb3VwIHdpdGggaGFzQ2hpbGRcbiAgaXNOZXN0ZWRTdGVwR3JvdXBXaXRoQ2hpbGRyZW4oc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGVwLnR5cGUgPT09ICdzdGVwLWdyb3VwJyAmJiAhIShzdGVwIGFzIGFueSkuaGFzQ2hpbGQ7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBncm91cE5hbWUgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRHcm91cE5hbWUoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChzdGVwIGFzIFN0ZXBHcm91cENvbmZpZykuZ3JvdXBOYW1lIHx8ICcnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcHMgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRTdGVwcyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogRXhlY3V0aW9uU3RlcENvbmZpZ1tdIHtcbiAgICBjb25zdCBzdGVwR3JvdXAgPSBzdGVwIGFzIFN0ZXBHcm91cENvbmZpZztcbiAgICByZXR1cm4gc3RlcEdyb3VwLnN0ZXBzIHx8IChzdGVwIGFzIGFueSkuY2hpbGRyZW4gfHwgW107XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIGEgc3RlcCBpcyBhIGNvbmRpdGlvbiBzdGVwXG4gIGlzTmVzdGVkQ29uZGl0aW9uU3RlcChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcFR5cGUgPSAoc3RlcCBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCBzdGVwLnR5cGU7XG4gICAgcmV0dXJuIHN0ZXBUeXBlID09PSAnQ09ORElUSU9OX0lGJyB8fCBzdGVwVHlwZSA9PT0gJ0NPTkRJVElPTl9FTFNFJyB8fCBcbiAgICAgICAgICAgc3RlcFR5cGUgPT09ICdDT05ESVRJT05fRUxTRV9JRicgfHwgc3RlcFR5cGUgPT09ICdDT05ESVRJT05fRUxTRUlGJyB8fFxuICAgICAgICAgICBzdGVwVHlwZSA9PT0gJ2NvbmRpdGlvbic7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIGEgc3RlcCBpcyBhIGxvb3Agc3RlcFxuICBpc05lc3RlZExvb3BTdGVwKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwVHlwZSA9IChzdGVwIGFzIGFueSkudGVzdFN0ZXBUeXBlIHx8IHN0ZXAudHlwZTtcbiAgICByZXR1cm4gc3RlcFR5cGUgPT09ICdGT1JfTE9PUCcgfHwgc3RlcFR5cGUgPT09ICdXSElMRV9MT09QJyB8fCBzdGVwVHlwZSA9PT0gJ2xvb3AnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgbG9vcCB0eXBlIGZyb20gc3RlcCBjb25maWdcbiAgZ2V0TG9vcFR5cGUoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6ICdmb3InIHwgJ3doaWxlJyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RlcFR5cGUgPSAoc3RlcCBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCBzdGVwLnR5cGU7XG4gICAgaWYgKHN0ZXBUeXBlID09PSAnRk9SX0xPT1AnIHx8IChzdGVwIGFzIExvb3BTdGVwQ29uZmlnKS5sb29wVHlwZSA9PT0gJ2ZvcicpIHtcbiAgICAgIHJldHVybiAnZm9yJztcbiAgICB9IGVsc2UgaWYgKHN0ZXBUeXBlID09PSAnV0hJTEVfTE9PUCcgfHwgKHN0ZXAgYXMgTG9vcFN0ZXBDb25maWcpLmxvb3BUeXBlID09PSAnd2hpbGUnKSB7XG4gICAgICByZXR1cm4gJ3doaWxlJztcbiAgICB9XG4gICAgcmV0dXJuIChzdGVwIGFzIExvb3BTdGVwQ29uZmlnKS5sb29wVHlwZTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGl0ZXJhdGlvbnMgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRMb29wSXRlcmF0aW9ucyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYW55W10ge1xuICAgIC8vIFVzZSBoYW5kbGVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjb25maWdcbiAgICBpZiAodGhpcy5nZXRMb29wSXRlcmF0aW9uc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExvb3BJdGVyYXRpb25zSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5pdGVyYXRpb25zIHx8IFtdO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgbmVzdGVkIHN0ZXBzIGZyb20gbG9vcCBzdGVwIGNvbmZpZ1xuICBnZXRMb29wTmVzdGVkU3RlcHMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IEV4ZWN1dGlvblN0ZXBDb25maWdbXSB7XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5uZXN0ZWRTdGVwcyB8fCAoc3RlcCBhcyBhbnkpLmNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBoYW5kbGUgbmVzdGVkIGxvb3Agc3RlcCBleHBhbnNpb25cbiAgaGFuZGxlTG9vcFN0ZXBFeHBhbmQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uRXhwYW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXIoc3RlcCk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBoYW5kbGUgbmVzdGVkIGxvb3Agc3RlcCBpdGVyYXRpb24gY2hhbmdlXG4gIGhhbmRsZUxvb3BTdGVwSXRlcmF0aW9uQ2hhbmdlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIGl0ZXJhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgLy8gRm9yIG5vdywgd2UganVzdCBlbWl0IHRoZSBleHBhbmQgZXZlbnRcbiAgICBpZiAodGhpcy5vbkV4cGFuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMub25FeHBhbmRIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHN0ZXAgdGl0bGVcbiAgZ2V0U3RlcFRpdGxlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmFjdGlvbiB8fCBzdGVwLnRpdGxlIHx8ICcnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcCBzdGF0dXNcbiAgZ2V0U3RlcFN0YXR1cyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogU3RlcFN0YXR1cyB7XG4gICAgY29uc3QgcmVzdWx0ID0gKHN0ZXAgYXMgYW55KS5yZXN1bHQ7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgcmVzdWx0TG93ZXIgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChyZXN1bHRMb3dlciA9PT0gJ3N1Y2Nlc3MnIHx8IHJlc3VsdExvd2VyID09PSAncGFzc2VkJykge1xuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRMb3dlciA9PT0gJ2ZhaWx1cmUnIHx8IHJlc3VsdExvd2VyID09PSAnZmFpbGVkJykge1xuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdExvd2VyID09PSAncGVuZGluZycgfHwgcmVzdWx0TG93ZXIgPT09ICdub3QtZXhlY3V0ZWQnKSB7XG4gICAgICAgIHJldHVybiAncGVuZGluZyc7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdExvd2VyID09PSAncnVubmluZycpIHtcbiAgICAgICAgcmV0dXJuICdydW5uaW5nJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0ZXAuc3RhdHVzIHx8ICdwZW5kaW5nJztcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHN0ZXAgZHVyYXRpb25cbiAgZ2V0U3RlcER1cmF0aW9uKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmR1cmF0aW9uIHx8IHN0ZXAuZHVyYXRpb24gfHwgMDtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb25kaXRpb24gc3RlcCBwcm9wZXJ0aWVzXG4gIGdldENvbmRpdGlvblN0ZXBEdXJhdGlvbihzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogbnVtYmVyIHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuZ2V0U3RlcER1cmF0aW9uKHN0ZXApO1xuICAgIGlmICh0aGlzLmNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXIoZHVyYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZHVyYXRpb247XG4gIH1cblxuICBnZXRDb25kaXRpb25TdGVwRXhwYW5kZWQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RlcEV4cGFuZGVkSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwRXhwYW5kZWRIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcC5leHBhbmRlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldENvbmRpdGlvblN0ZXBUZXh0KHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmFjdGlvbiB8fCBzdGVwLnRpdGxlIHx8ICcnO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcEJyYW5jaGVzKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBDb25kaXRpb25CcmFuY2hbXSB7XG4gICAgaWYgKHRoaXMuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXIoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldENvbmRpdGlvblN0ZXBMb2FkaW5nKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuaXNTdGVwTG9hZGluZ0hhbmRsZXIoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUNvbmRpdGlvblN0ZXBFeHBhbmQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uRXhwYW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXIoc3RlcCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcEZhaWx1cmVEZXRhaWxzKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBhbnkge1xuICAgIGlmICh0aGlzLmZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcFNlbGZIZWFsQW5hbHlzaXMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFuZGxlQ29uZGl0aW9uU3RlcFNlbGZIZWFsQWN0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcikge1xuICAgICAgdGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ29uZGl0aW9uU3RlcE1ha2VCYXNlbGluZShldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlcikge1xuICAgICAgdGhpcy5vbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb25kaXRpb25TdGVwVXBsb2FkQmFzZWxpbmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb25kaXRpb25TdGVwQW5hbHl6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vbkFuYWx5emVIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uQW5hbHl6ZUhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb25kaXRpb25TdGVwVmlld0xvZ3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub25WaWV3RnVsbExvZ3NIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uVmlld0Z1bGxMb2dzSGFuZGxlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzIHRvIHNhZmVseSBhY2Nlc3MgTG9vcFN0ZXBDb25maWcgcHJvcGVydGllc1xuICBnZXRMb29wU2VsZWN0ZWRJdGVyYXRpb25JZChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsb29wU3RlcCA9IHN0ZXAgYXMgTG9vcFN0ZXBDb25maWc7XG4gICAgcmV0dXJuIGxvb3BTdGVwLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gIH1cblxuICBnZXRMb29wRGVmYXVsdEl0ZXJhdGlvbihzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogJ2ZpcnN0JyB8ICdsYXN0JyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5kZWZhdWx0SXRlcmF0aW9uIHx8ICdsYXN0JztcbiAgfVxuXG4gIGdldExvb3BTaG93Vmlld0FsbEl0ZXJhdGlvbnMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxvb3BTdGVwID0gc3RlcCBhcyBMb29wU3RlcENvbmZpZztcbiAgICByZXR1cm4gbG9vcFN0ZXAuc2hvd1ZpZXdBbGxJdGVyYXRpb25zO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBzdGVwIGlzIGN1cnJlbnRseSBsb2FkaW5nIG5lc3RlZCBjaGlsZHJlblxuICBpc1N0ZXBMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyICYmIHRoaXMuY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcih0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZyB8fCBmYWxzZTtcbiAgfVxuXG4gIG9uSnVtcFRvVGltZXN0YW1wKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmp1bXBUb1RpbWVzdGFtcEhhbmRsZXIgJiYgdGhpcy5zdGVwPy5leGVjdXRlZFJlc3VsdD8udmlkZW9fc3RhcnRfdGltZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc3RlcD8uZXhlY3V0ZWRSZXN1bHQ/LnZpZGVvX3N0YXJ0X3RpbWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHR5cGVvZiB0aGlzLnN0ZXAuZXhlY3V0ZWRSZXN1bHQudmlkZW9fc3RhcnRfdGltZSA9PT0gJ251bWJlcicgXG4gICAgICAgID8gdGhpcy5zdGVwLmV4ZWN1dGVkUmVzdWx0LnZpZGVvX3N0YXJ0X3RpbWUgXG4gICAgICAgIDogTnVtYmVyKHRoaXMuc3RlcC5leGVjdXRlZFJlc3VsdC52aWRlb19zdGFydF90aW1lKTtcbiAgICAgIGNvbnN0IHRlc3RTdGVwSWQgPSB0aGlzLnN0ZXA/LnRlc3RTdGVwSWQ7XG4gICAgICBpZiAoaXNGaW5pdGUodGltZXN0YW1wKSAmJiB0aW1lc3RhbXAgPj0gMCkge1xuICAgICAgICB0aGlzLmp1bXBUb1RpbWVzdGFtcEhhbmRsZXIodGltZXN0YW1wLCB0ZXN0U3RlcElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTGl2ZSB8fCAhdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRMZW5ndGggPSAodGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcyB8fCBbXSkubGVuZ3RoO1xuICAgIC8vIFJlc2V0IGlmIGl0ZXJhdGlvbiBjaGFuZ2VkIChkZXRlY3RlZCBieSBjaGVja2luZyBpZiB3ZSBoYXZlIGEgZGlmZmVyZW50IGl0ZXJhdGlvbidzIHN1YlN0ZXBzKVxuICAgIGlmICh0aGlzLmxhc3RQcm9jZXNzZWRJbmRleCA+IDAgJiYgY3VycmVudExlbmd0aCA8IHRoaXMubGFzdFByb2Nlc3NlZEluZGV4KSB7XG4gICAgICAvLyBMaWtlbHkgc3dpdGNoZWQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0aW9uLCByZXNldFxuICAgICAgdGhpcy5yZXNldExpdmVQcm9jZXNzaW5nKCk7XG4gICAgfVxuICAgIGlmIChjdXJyZW50TGVuZ3RoICE9PSB0aGlzLmxhc3RQcm9jZXNzZWRJbmRleCkge1xuICAgICAgdGhpcy5wcm9jZXNzTGl2ZVN1YlN0ZXBzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckNvdW50ZG93blRpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NMaXZlU3ViU3RlcHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlcmF0aW9uIHx8ICF0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzKSB7XG4gICAgICB0aGlzLnJlc2V0TGl2ZVByb2Nlc3NpbmcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxTdWJTdGVwcyA9ICh0aGlzLnNlbGVjdGVkSXRlcmF0aW9uLnN1YlN0ZXBzIHx8IFtdKSBhcyBhbnlbXTtcblxuICAgIC8vIFJlc2V0IGlmIHN1YlN0ZXBzIHdlcmUgY2xlYXJlZCBvciByZXBsYWNlZCB3aXRoIGZld2VyIGVudHJpZXNcbiAgICBpZiAoYWxsU3ViU3RlcHMubGVuZ3RoIDwgdGhpcy5sYXN0UHJvY2Vzc2VkSW5kZXgpIHtcbiAgICAgIHRoaXMucmVzZXRMaXZlUHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSB0aGlzLmxhc3RQcm9jZXNzZWRJbmRleDsgaSA8IGFsbFN1YlN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJTdGVwID0gYWxsU3ViU3RlcHNbaV07XG4gICAgICBjb25zdCB1aVR5cGU6IHN0cmluZyA9IHN1YlN0ZXA/LnVpVHlwZSB8fCBzdWJTdGVwPy50eXBlIHx8ICcnO1xuICAgICAgY29uc3Qgc3RhdHVzOiBzdHJpbmcgPSAoc3ViU3RlcD8uc3RhdHVzIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAodWlUeXBlID09PSAnV0FJVF9GT1JfTE9DQVRPUicpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2luZ2xlIGdyb3VwZWQgZW50cnkgd2l0aCBhIGNvdW50ZG93bjsgYWJzb3JicyBGSU5EX0xPQ0FUT1IgYW5kIExPQ0FUT1JfRk9VTkRcbiAgICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSB0eXBlb2Ygc3ViU3RlcC52YWx1ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHN1YlN0ZXAudmFsdWVcbiAgICAgICAgICA6IChzdWJTdGVwLnZhbHVlID8gcGFyc2VGbG9hdChzdWJTdGVwLnZhbHVlKSA6IDMwKTtcblxuICAgICAgICB0aGlzLmNsZWFyQ291bnRkb3duVGltZXIoKTtcblxuICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSA9IHtcbiAgICAgICAgICAuLi5zdWJTdGVwLFxuICAgICAgICAgIHJlbWFpbmluZ1NlY29uZHM6IHRpbWVvdXRTZWNvbmRzLFxuICAgICAgICAgIHN0YXR1czogJ3J1bm5pbmcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSk7XG5cbiAgICAgICAgLy8gVGljayBkb3duIGV2ZXJ5IHNlY29uZFxuICAgICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5yZW1haW5pbmdTZWNvbmRzID0gTWF0aC5tYXgoMCwgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkucmVtYWluaW5nU2Vjb25kcyAtIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5LnJlbWFpbmluZ1NlY29uZHMgPD0gMCkge1xuICAgICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5zdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkucmVtYWluaW5nU2Vjb25kcyA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJDb3VudGRvd25UaW1lcigpO1xuICAgICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgfSBlbHNlIGlmICh1aVR5cGUgPT09ICdGSU5EX0xPQ0FUT1InKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdmYWlsZWQnIHx8IHN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gQWJvcnQgY291bnRkb3duLCByZXBsYWNlIGdyb3VwIGVudHJ5IHdpdGggdGhpcyBmYWlsZWQgbG9nXG4gICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzID0gdGhpcy5wcm9jZXNzZWRTdWJTdGVwcy5maWx0ZXIoZW50cnkgPT4gZW50cnkgIT09IHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb3VudGRvd25UaW1lcigpO1xuICAgICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzLnB1c2goeyAuLi5zdWJTdGVwLCBzdGF0dXM6ICdmYWlsZWQnIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBzaW5nbGUgZ3JvdXAgZW50cnkncyB0ZXh0IHNvIHRoZSB1c2VyIHNlZXMgcHJvZ3Jlc3NcbiAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCBzdWJTdGVwLnRleHQgfHwgc3ViU3RlcC50aXRsZTtcbiAgICAgICAgICBpZiAobmV3VGV4dCkgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkuZGVzY3JpcHRpb24gPSBuZXdUZXh0O1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAodWlUeXBlID09PSAnTE9DQVRPUl9GT1VORCcpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgfHwgc3RhdHVzID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICAvLyBBYm9ydCBjb3VudGRvd24sIHJlcGxhY2UgZ3JvdXAgZW50cnkgd2l0aCB0aGlzIGZhaWxlZCBsb2dcbiAgICAgICAgICBpZiAodGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMgPSB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzLmZpbHRlcihlbnRyeSA9PiBlbnRyeSAhPT0gdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvdW50ZG93blRpbWVyKCk7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh7IC4uLnN1YlN0ZXAsIHN0YXR1czogJ2ZhaWxlZCcgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2VxdWVuY2UgY29tcGxldGUg4oCTIHVwZGF0ZSBncm91cCBlbnRyeSB0byBzaG93IExPQ0FUT1JfRk9VTkQgdGV4dCBhcyBzdWNjZXNzXG4gICAgICAgICAgaWYgKHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCBzdWJTdGVwLnRleHQgfHwgc3ViU3RlcC50aXRsZTtcbiAgICAgICAgICAgIGlmIChuZXdUZXh0KSB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5kZXNjcmlwdGlvbiA9IG5ld1RleHQ7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICB0aGlzLndhaXRMb2NhdG9yR3JvdXBFbnRyeS5yZW1haW5pbmdTZWNvbmRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb3VudGRvd25UaW1lcigpO1xuICAgICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBhY3RpdmUgZ3JvdXAg4oCTIHB1c2ggTE9DQVRPUl9GT1VORCBub3JtYWxseVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwcy5wdXNoKHsgLi4uc3ViU3RlcCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmICh1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUwnKSB7XG4gICAgICAgIC8vIEFkZCBzaW5nbGUgbG9hZGluZyBlbnRyeTsgd2lsbCBiZSByZXBsYWNlZCBieSBBSV9BVVRPX0hFQUxfU1VDQ0VTUyBvciBBSV9BVVRPX0hFQUxfRkFJTEVEXG4gICAgICAgIHRoaXMuYWlBdXRvSGVhbEdyb3VwRW50cnkgPSB7XG4gICAgICAgICAgLi4uc3ViU3RlcCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCBzdWJTdGVwLnRleHQgfHwgJ0FJIGF1dG8taGVhbCBzdGFydGVkJyxcbiAgICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgICB1aVR5cGU6ICdBSV9BVVRPX0hFQUwnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5KTtcblxuICAgICAgfSBlbHNlIGlmICh1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUxfU1VDQ0VTUycgfHwgdWlUeXBlID09PSAnQUlfQVVUT19IRUFMX0ZBSUxFRCcpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGxvYWRpbmcgZW50cnkgYW5kIGFkZCBUV08gc2VwYXJhdGUgZW50cmllczogdmFsdWUgYW5kIHJlYXNvbmluZyAobGlrZSBBSV9BTlNXRVIpXG4gICAgICAgIGlmICh0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5KSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwcyA9IHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMuZmlsdGVyKGVudHJ5ID0+IGVudHJ5ICE9PSB0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5KTtcbiAgICAgICAgICB0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1N1Y2Nlc3MgPSB1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUxfU1VDQ0VTUyc7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3ViU3RlcC52YWx1ZSA/PyBzdWJTdGVwLnRleHQgPz8gJyc7XG4gICAgICAgIGNvbnN0IHJlYXNvbmluZyA9IHN1YlN0ZXAucmVhc29uaW5nID8/IHN1YlN0ZXAuUmVhc29uaW5nID8/ICcnO1xuICAgICAgICBjb25zdCBiYXNlRHVyYXRpb24gPSBzdWJTdGVwLmR1cmF0aW9uIHx8IDA7XG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0gaXNTdWNjZXNzID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCc7XG5cbiAgICAgICAgLy8gRmlyc3QgZW50cnk6IHZhbHVlL2Rlc2NyaXB0aW9uXG4gICAgICAgIGNvbnN0IHZhbHVlRGVzY3JpcHRpb24gPSBzdWJTdGVwLnRleHQgfHwgc3ViU3RlcC5kZXNjcmlwdGlvbiB8fCAoaXNTdWNjZXNzXG4gICAgICAgICAgPyBgQUkgYXV0by1oZWFsIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgOiBgQUkgYXV0by1oZWFsIGZhaWxlZGApO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzLnB1c2goe1xuICAgICAgICAgIC4uLnN1YlN0ZXAsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHZhbHVlRGVzY3JpcHRpb24sXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHJlYXNvbmluZzogbnVsbCxcbiAgICAgICAgICBzdGF0dXM6IGZpbmFsU3RhdHVzLFxuICAgICAgICAgIHVpVHlwZTogJ0FJX0FVVE9fSEVBTF9WQUxVRScsXG4gICAgICAgICAgdHlwZTogJ0FJX0FVVE9fSEVBTF9WQUxVRScsXG4gICAgICAgICAgZHVyYXRpb246IGJhc2VEdXJhdGlvbixcbiAgICAgICAgICBpc0FpQXV0b0hlYWxSZXN1bHQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2Vjb25kIGVudHJ5OiByZWFzb25pbmcgKG9ubHkgaWYgcHJlc2VudClcbiAgICAgICAgaWYgKHJlYXNvbmluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaCh7XG4gICAgICAgICAgICAuLi5zdWJTdGVwLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlYXNvbmluZyxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgcmVhc29uaW5nOiByZWFzb25pbmcsXG4gICAgICAgICAgICBzdGF0dXM6IGZpbmFsU3RhdHVzLFxuICAgICAgICAgICAgdWlUeXBlOiAnQUlfQVVUT19IRUFMX1JFQVNPTklORycsXG4gICAgICAgICAgICB0eXBlOiAnQUlfQVVUT19IRUFMX1JFQVNPTklORycsXG4gICAgICAgICAgICBkdXJhdGlvbjogYmFzZUR1cmF0aW9uLFxuICAgICAgICAgICAgaXNBaUF1dG9IZWFsUmVzdWx0OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW55IGZhaWxlZCBsb2cgd2hpbGUgYSBjb3VudGRvd24gaXMgYWN0aXZlIOKAkyByZXNvbHZlIGl0IGFzIGZhaWxlZFxuICAgICAgICBpZiAoKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgfHwgc3RhdHVzID09PSAnZmFpbHVyZScpICYmIHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5KSB7XG4gICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkuc3RhdHVzID0gJ2ZhaWxlZCc7XG4gICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkucmVtYWluaW5nU2Vjb25kcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jbGVhckNvdW50ZG93blRpbWVyKCk7XG4gICAgICAgICAgdGhpcy53YWl0TG9jYXRvckdyb3VwRW50cnkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHMucHVzaChzdWJTdGVwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RQcm9jZXNzZWRJbmRleCA9IGFsbFN1YlN0ZXBzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRMaXZlUHJvY2Vzc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQ291bnRkb3duVGltZXIoKTtcbiAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzID0gW107XG4gICAgdGhpcy5sYXN0UHJvY2Vzc2VkSW5kZXggPSAwO1xuICAgIHRoaXMud2FpdExvY2F0b3JHcm91cEVudHJ5ID0gbnVsbDtcbiAgICB0aGlzLmFpQXV0b0hlYWxHcm91cEVudHJ5ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDb3VudGRvd25UaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb3VudGRvd25JbnRlcnZhbElkICE9PSBudWxsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N1YlN0ZXBzRm9yUnVuUmVzdWx0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbiB8fCAhdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwcykge1xuICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwc0ZvclJ1blJlc3VsdCA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFN1YlN0ZXBzID0gKHRoaXMuc2VsZWN0ZWRJdGVyYXRpb24uc3ViU3RlcHMgfHwgW10pIGFzIGFueVtdO1xuICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHNGb3JSdW5SZXN1bHQgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc3ViU3RlcCBvZiBhbGxTdWJTdGVwcykge1xuICAgICAgY29uc3QgdWlUeXBlOiBzdHJpbmcgPSBzdWJTdGVwPy51aVR5cGUgfHwgc3ViU3RlcD8udHlwZSB8fCAnJztcblxuICAgICAgLy8gU3BsaXQgQUlfQVVUT19IRUFMX1NVQ0NFU1MvRkFJTEVEIGludG8gdHdvIGVudHJpZXNcbiAgICAgIGlmICh1aVR5cGUgPT09ICdBSV9BVVRPX0hFQUxfU1VDQ0VTUycgfHwgdWlUeXBlID09PSAnQUlfQVVUT19IRUFMX0ZBSUxFRCcpIHtcbiAgICAgICAgY29uc3QgaXNTdWNjZXNzID0gdWlUeXBlID09PSAnQUlfQVVUT19IRUFMX1NVQ0NFU1MnO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHN1YlN0ZXAudmFsdWUgPz8gc3ViU3RlcC50ZXh0ID8/ICcnO1xuICAgICAgICBjb25zdCByZWFzb25pbmcgPSBzdWJTdGVwLnJlYXNvbmluZyA/PyBzdWJTdGVwLlJlYXNvbmluZyA/PyAnJztcbiAgICAgICAgY29uc3QgYmFzZUR1cmF0aW9uID0gc3ViU3RlcC5kdXJhdGlvbiB8fCAwO1xuICAgICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IGlzU3VjY2VzcyA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnO1xuXG4gICAgICAgIC8vIEZpcnN0IGVudHJ5OiB2YWx1ZS9kZXNjcmlwdGlvblxuICAgICAgICBjb25zdCB2YWx1ZURlc2NyaXB0aW9uID0gKGlzU3VjY2Vzc1xuICAgICAgICAgID8gYEFJIGF1dG8taGVhbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5YFxuICAgICAgICAgIDogYEFJIGF1dG8taGVhbCBmYWlsZWRgKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRTdWJTdGVwc0ZvclJ1blJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5zdWJTdGVwLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWx1ZURlc2NyaXB0aW9uLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICByZWFzb25pbmc6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiBmaW5hbFN0YXR1cyxcbiAgICAgICAgICB1aVR5cGU6ICdBSV9BVVRPX0hFQUxfVkFMVUUnLFxuICAgICAgICAgIHR5cGU6ICdBSV9BVVRPX0hFQUxfVkFMVUUnLFxuICAgICAgICAgIGR1cmF0aW9uOiBiYXNlRHVyYXRpb24sXG4gICAgICAgICAgaXNBaUF1dG9IZWFsUmVzdWx0OiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY29uZCBlbnRyeTogcmVhc29uaW5nIChvbmx5IGlmIHByZXNlbnQpXG4gICAgICAgIGlmIChyZWFzb25pbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzRm9yUnVuUmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgLi4uc3ViU3RlcCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZWFzb25pbmcsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIHJlYXNvbmluZzogcmVhc29uaW5nLFxuICAgICAgICAgICAgc3RhdHVzOiBmaW5hbFN0YXR1cyxcbiAgICAgICAgICAgIHVpVHlwZTogJ0FJX0FVVE9fSEVBTF9SRUFTT05JTkcnLFxuICAgICAgICAgICAgdHlwZTogJ0FJX0FVVE9fSEVBTF9SRUFTT05JTkcnLFxuICAgICAgICAgICAgZHVyYXRpb246IGJhc2VEdXJhdGlvbixcbiAgICAgICAgICAgIGlzQWlBdXRvSGVhbFJlc3VsdDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSAoc3ViU3RlcD8uc3RhdHVzID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGlzRmFpbGVkID0gc3RhdHVzID09PSAnZmFpbGVkJyB8fCBzdGF0dXMgPT09ICdmYWlsdXJlJztcbiAgICAgICAgY29uc3QgaXNMb2NhdG9yU3RlcCA9IHVpVHlwZSA9PT0gJ1dBSVRfRk9SX0xPQ0FUT1InIHx8IHVpVHlwZSA9PT0gJ0ZJTkRfTE9DQVRPUicgfHwgdWlUeXBlID09PSAnTE9DQVRPUl9GT1VORCc7XG4gICAgICAgIGlmIChpc0xvY2F0b3JTdGVwICYmIGlzRmFpbGVkKSB7XG4gICAgICAgICAgY29uc3QgYmFzZURlc2MgPSBzdWJTdGVwPy5kZXNjcmlwdGlvbiA/PyBzdWJTdGVwPy50ZXh0ID8/IHN1YlN0ZXA/LnRpdGxlID8/ICcnO1xuICAgICAgICAgIGNvbnN0IG5vdEZvdW5kU3VmZml4ID0gJyAtIEVsZW1lbnQgbm90IGZvdW5kJztcbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZFN1YlN0ZXBzRm9yUnVuUmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgLi4uc3ViU3RlcCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAoYmFzZURlc2MgPyBiYXNlRGVzYyArIG5vdEZvdW5kU3VmZml4IDogbm90Rm91bmRTdWZmaXgudHJpbSgpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc2VkU3ViU3RlcHNGb3JSdW5SZXN1bHQucHVzaChzdWJTdGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mb250LWludGVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGVIZWFkZXIoJGV2ZW50KVwiPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVidWdJY29uXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1yb3VuZGVkLWZ1bGwgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCIgKGNsaWNrKT1cIm9uRGVidWdQb2ludENsaWNrKCRldmVudClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImRlYnVnUG9pbnRTZXQgPyAnUmVtb3ZlIGRlYnVnIHBvaW50JyA6ICdTZXQgZGVidWcgcG9pbnQnXCI+XG4gICAgICAgIDxzdmcgKm5nSWY9XCJkZWJ1Z1BvaW50U2V0XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjZcIiBmaWxsPVwiI0M2MzUzNVwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxzdmcgKm5nSWY9XCIhZGVidWdQb2ludFNldFwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiN1wiIGN5PVwiN1wiIHI9XCI2XCIgc3Ryb2tlPVwiI0M2MzUzNVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gU3RhdHVzIEljb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8IS0tIFN1Y2Nlc3MgLS0+XG4gICAgICA8c3ZnICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gRmFpbGVkIC0tPlxuICAgICAgPHN2ZyAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZScgfHwgc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsZWQnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjRUY0NDQ0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNCA0TDggOE04IDRMNCA4XCIgc3Ryb2tlPVwiI0VGNDQ0NFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gUGVuZGluZyAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gUnVubmluZyAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3J1bm5pbmcnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjM0I4MkY2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzNCODJGNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIFxuICAgICAgICA8c3BhbiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnc2tpcHBlZCdcIiAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdGV4dC1bMTJweF1cIj5cbiAgICAgICAgICBza2lwX25leHRcbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBMb29wIEljb24gLS0+XG4gICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjRcIiBmaWxsPVwiI0VCRUNGRFwiLz48cGF0aCBkPVwiTTkuNjY2NjMgNC42NjY2NkwxMSA1Ljk5OTk5TDkuNjY2NjMgNy4zMzMzMlwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk01IDcuNjY2NjdWNy4zMzMzM0M1IDYuOTc5NzEgNS4xNDA0OCA2LjY0MDU3IDUuMzkwNTIgNi4zOTA1MkM1LjY0MDU3IDYuMTQwNDggNS45Nzk3MSA2IDYuMzMzMzMgNkgxMVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02LjMzMzMzIDExLjMzMzNMNSA5Ljk5OTk5TDYuMzMzMzMgOC42NjY2NlwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMSA4LjMzMzM0VjguNjY2NjhDMTEgOS4wMjAzIDEwLjg1OTUgOS4zNTk0NCAxMC42MDk1IDkuNjA5NDlDMTAuMzU5NCA5Ljg1OTUzIDEwLjAyMDMgMTAgOS42NjY2NyAxMEg1XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gU3RlcCBOdW1iZXIgYW5kIFRpdGxlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1mb250LWludGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE4cHhdXCIgc3R5bGU9XCJ3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiPlxuICAgICAgICB7eyBjb25maWc/LnN0ZXBOdW1iZXIgfX0uIDxzcGFuIFtpbm5lckhUTUxdPVwiY29uZmlnPy50aXRsZVwiPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIFxuICAgICAgPCEtLSBMb29wIFR5cGUgQmFkZ2VzIC0tPlxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGJhZGdlIG9mIGdldExvb3BUeXBlQmFkZ2VzKClcIiBcbiAgICAgICAgY2xhc3M9XCJjcWEtcHgtMS41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LXByaW1hcnkgY3FhLWJnLVsjRUJFQ0ZEXSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdXCI+XG4gICAgICAgIHt7IGJhZGdlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5zdGVwRGVsZXRlZFwiIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNCNDIzMThdIGNxYS1iZy1bI0ZFRjNGMl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRkVFNEUyXVwiPlxuICAgICAgICBEZWxldGVkXG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcm91bmRlZC1mdWxsIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzA5N0U1M10gY3FhLWJnLVsjQ0ZGMkU1XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1taW4tdy1tYXggY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVs2cHhdXCI+XG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOVwiIGhlaWdodD1cIjlcIiB2aWV3Qm94PVwiMCAwIDkgOVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk00LjUwOTQxIDBDNC41NjQ4OSAwLjAyMjczODQgNC41ODg1OSAwLjA3ODI2NTIgNC42MTEzMSAwLjEyOTg0NkM0LjYyMjY5IDAuMTU5OSA0LjYzMzE0IDAuMTkwMTE3IDQuNjQzMjkgMC4yMjA1NzVDNC42NDcyNiAwLjIzMjI0NyA0LjY1MTIzIDAuMjQzOTE4IDQuNjU1MzIgMC4yNTU5NDNDNC43MDgwNiAwLjQxMzAwNSA0Ljc1NTA0IDAuNTcxNzQ4IDQuODAyMjkgMC43MzAzOEM0LjgxMjk3IDAuNzY2MTkgNC44MjM2OSAwLjgwMTk4NyA0LjgzNDQyIDAuODM3NzgzQzQuODg5MDUgMS4wMjAwNCA0Ljk0MzI3IDEuMjAyNCA0Ljk5NzE5IDEuMzg0ODRDNS4wMDQ3NiAxLjQxMDQ3IDUuMDEyMzQgMS40MzYwOSA1LjAxOTkyIDEuNDYxNzFDNS4wNDEyOCAxLjUzMzk1IDUuMDYyNjIgMS42MDYxOSA1LjA4MzgzIDEuNjc4NDdDNS4xMjg2NyAxLjgzMTIgNS4xNzQ3MyAxLjk4MzQ3IDUuMjIzNzggMi4xMzUwMUM1LjIyODA3IDIuMTQ4MjcgNS4yMzIzNiAyLjE2MTUyIDUuMjM2NzcgMi4xNzUxOEM1LjM2NDIgMi41NjUgNS41NDQ4MiAyLjkxNDM3IDUuODQwOSAzLjIxMTk2QzUuODQ4MjMgMy4yMTk3IDUuODU1NTYgMy4yMjc0NCA1Ljg2MzEyIDMuMjM1NDFDNS45ODk1IDMuMzY0MzcgNi4xNTE2OSAzLjQ2NzcxIDYuMzEzOCAzLjU1MTExQzYuMzIyMDYgMy41NTU0MiA2LjMzMDMxIDMuNTU5NzQgNi4zMzg4MiAzLjU2NDE5QzYuODE1ODcgMy44MDkyNSA3LjM4OTUxIDMuOTE3MDQgNy45MDYxOSA0LjA2MDVDOC4xMzI2IDQuMTIzNCA4LjM1ODMgNC4xODgyOSA4LjU4MzE3IDQuMjU2MDNDOC41OTg5NyA0LjI2MDc5IDguNjE0NzggNC4yNjU1NCA4LjYzMDU4IDQuMjcwMjhDOC42Nzc4NCA0LjI4NDQ1IDguNzI1IDQuMjk4ODcgOC43NzIxMSA0LjMxMzQ3QzguNzgzMSA0LjMxNjc5IDguNzk0MDggNC4zMjAxMSA4LjgwNTM5IDQuMzIzNTNDOC44NzAyOSA0LjM0NDA2IDguOTMyMzkgNC4zNjgyOSA4Ljk4NTY2IDQuNDEwMjdDOS4wMDE5MSA0LjQ0NDE4IDkuMDAxOTEgNC40NDQxOCA4Ljk5NzQ4IDQuNDc4MUM4Ljk0NTY0IDQuNTI3MzYgOC44OTQyIDQuNTUwNDYgOC44MjU3OCA0LjU3M0M4LjgxNiA0LjU3NjMyIDguODA2MjIgNC41Nzk2NSA4Ljc5NjE0IDQuNTgzMDhDOC42ODA2MSA0LjYyMTgzIDguNTYzNTEgNC42NTU3NSA4LjQ0NjI2IDQuNjg5MzVDOC40MjIyIDQuNjk2MyA4LjM5ODE0IDQuNzAzMjYgOC4zNzQwOCA0LjcxMDIxQzguMjI1NzEgNC43NTMwMSA4LjA3NzA4IDQuNzk0OSA3LjkyODI5IDQuODM2MzJDNy43MzIzMiA0Ljg5MDg4IDcuNTM2NjMgNC45NDYzNCA3LjM0MTEzIDUuMDAyNDNDNy4zMDkxIDUuMDExNjIgNy4yNzcwNiA1LjAyMDc4IDcuMjQ1MDEgNS4wMjk5MUM3LjA3NjcxIDUuMDc3ODYgNi45MDkyMyA1LjEyNzUzIDYuNzQzMTQgNS4xODIwOEM2LjcyOTM3IDUuMTg2NTkgNi43MTU1OSA1LjE5MTEgNi43MDEzOSA1LjE5NTc0QzYuMTQ1MTEgNS4zODA4MiA1LjcyMTEgNS43MjYwOSA1LjQ1NTcxIDYuMjMwOTlDNS4zMTI2MyA2LjUxNDc1IDUuMjI4MjMgNi44MjE2MSA1LjE0MjE0IDcuMTI0NDdDNS4xMTg4NCA3LjIwNjE5IDUuMDk0MDkgNy4yODc0NSA1LjA2OTA1IDcuMzY4NjlDNS4wNDk0IDcuNDMyNjEgNS4wMzAyIDcuNDk2NjMgNS4wMTE0OSA3LjU2MDgxQzUuMDA5MjYgNy41Njg0NCA1LjAwNzAzIDcuNTc2MDggNS4wMDQ3MyA3LjU4Mzk1QzQuOTkzOTQgNy42MjA5NCA0Ljk4MzE5IDcuNjU3OTMgNC45NzI1MiA3LjY5NDk1QzQuOTQ1MTkgNy43ODg3OSA0LjkxNTc4IDcuODgxODcgNC44ODU1NSA3Ljk3NDg5QzQuODMxOTEgOC4xNDAyMSA0Ljc4MzEgOC4zMDY3NCA0LjczNDU5IDguNDczNUM0LjY2MTQ0IDguNzI0NTcgNC42NjE0NCA4LjcyNDU3IDQuNjE5OTcgOC44NDUyN0M0LjYxNzIxIDguODUzMzcgNC42MTQ0NiA4Ljg2MTQ3IDQuNjExNjMgOC44Njk4MkM0LjU5NjQ5IDguOTEyNzggNC41ODA5MiA4Ljk1MjMzIDQuNTUyMjYgOC45ODg3QzQuNTA4NjcgOC45OTc4OCA0LjUwODY3IDguOTk3ODggNC40Njk1MSA5QzQuNDI0NzMgOC45Mzc1OSA0LjM5NTA4IDguODc3MTEgNC4zNzEzMyA4LjgwNTA4QzQuMzY3ODcgOC43OTQ4NyA0LjM2NDQxIDguNzg0NjYgNC4zNjA4NSA4Ljc3NDE1QzQuMzE2ODQgOC42NDI0OCA0LjI3NzUxIDguNTA5NDYgNC4yMzgxNyA4LjM3NjQ2QzQuMjI5MTYgOC4zNDYwNCA0LjIyMDExIDguMzE1NjQgNC4yMTEwNSA4LjI4NTI0QzQuMTQzNiA4LjA1ODYzIDQuMDc3MjUgNy44MzE3NCA0LjAxMTAxIDcuNjA0ODFDMy43MzUwNyA2LjQ4MjI0IDMuNzM1MDcgNi40ODIyNCAzLjAzOSA1LjU3NDY2QzMuMDI3ODQgNS41NjU5NiAzLjAxNjY5IDUuNTU3MjYgMy4wMDUxOSA1LjU0ODNDMi41NDkxMyA1LjE5OTAyIDEuOTQ4MzQgNS4wNjk2OSAxLjM5ODE1IDQuOTE4MTNDMS4yNjIwNyA0Ljg4MDYyIDEuMTI2MDUgNC44NDI5MyAwLjk5MDAzMiA0LjgwNTIzQzAuOTc4MTM4IDQuODAxOTMgMC45NzgxMzggNC44MDE5MyAwLjk2NjAwMyA0Ljc5ODU3QzAuNzY5ODExIDQuNzQ0MTcgMC41NzM2NzQgNC42ODk2MyAwLjM3ODIyNCA0LjYzMjgzQzAuMzY5OTU2IDQuNjMwNDUgMC4zNjE2ODggNC42MjgwNiAwLjM1MzE2OSA0LjYyNTYxQzAuMDUyODk4OSA0LjUzODgzIDAuMDUyODk4OSA0LjUzODgzIDAuMDAwNjQ2NTM3IDQuNDc4MUMtMC4wMDA4MzEyNjEgNC40NTA1NCAtMC4wMDA4MzEyNjEgNC40NTA1NCAwLjAxMjQ2ODkgNC40MjE1N0MwLjA2NzA4MzUgNC4zNzA0IDAuMTIwMDc3IDQuMzQ4NDggMC4xOTIxNiA0LjMyNjE5QzAuMjAyNTk3IDQuMzIyODQgMC4yMTMwMzQgNC4zMTk0OCAwLjIyMzc4NyA0LjMxNjAzQzAuMjU1NzUzIDQuMzA1ODIgMC4yODc3ODggNC4yOTU4NCAwLjMxOTg1MSA0LjI4NTkyQzAuMzI5MDAxIDQuMjgzMDUgMC4zMzgxNTEgNC4yODAxNyAwLjM0NzU3OCA0LjI3NzIyQzAuNDEyMjg1IDQuMjU2OTMgMC40NzcyMjUgNC4yMzc0IDAuNTQyMjU5IDQuMjE4MDlDMC41NTgyNCA0LjIxMzMyIDAuNTU4MjQgNC4yMTMzMiAwLjU3NDU0NCA0LjIwODQ2QzAuODUyMjY5IDQuMTI1ODcgMS4xMzE4MSA0LjA0OSAxLjQxMTI2IDMuOTcxOTZDMS42MTk1IDMuOTE0NTUgMS44MjczOCAzLjg1NjE4IDIuMDM0NiAzLjc5NTQ4QzIuMDQ0MTMgMy43OTI3MSAyLjA1MzY1IDMuNzg5OTMgMi4wNjM0NiAzLjc4NzA3QzIuNTQzNSAzLjY0Njk2IDMuMDEyNzggMy40NDgxNiAzLjMyMjc0IDMuMDUzN0MzLjMyNzM4IDMuMDQ3ODUgMy4zMzIwMiAzLjA0MiAzLjMzNjggMy4wMzU5N0MzLjY4MTk3IDIuNTk4MTUgMy44MTY1OCAyLjA2NTcyIDMuOTY2OTUgMS41NDYyMUM0LjAxNjQzIDEuMzc1MzQgNC4wNjY0OSAxLjIwNDY0IDQuMTE2NzMgMS4wMzM5OUM0LjEzMDY0IDAuOTg2NzMzIDQuMTQ0NTMgMC45Mzk0NzEgNC4xNTgzNiAwLjg5MjE5NEM0LjIxMzk0IDAuNzAyMjg5IDQuMjcwMzUgMC41MTI2NDIgNC4zMyAwLjMyMzg2NEM0LjMzNTU4IDAuMzA2MTg2IDQuMzQxMTQgMC4yODg1MDEgNC4zNDY2NiAwLjI3MDgwN0M0LjQzMDE3IDAuMDAzOTg3NjEgNC40MzAxNyAwLjAwMzk4NzYxIDQuNTA5NDEgMFpcIiBmaWxsPVwiIzBEQkQ3RFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTcuMjM1OTcgMC41NTQ4NTlDNy4yOTAyNCAwLjYxMzU5OSA3LjMwMTA5IDAuNjgyNjMxIDcuMzE3OTkgMC43NTc2MzhDNy4zNzQzNiAwLjk5MzI2OSA3LjQzOTI5IDEuMjA5OTMgNy42NjQ2NyAxLjM0NjgxQzcuODAzNzEgMS40MjAzNSA3Ljk2OTQ0IDEuNDUzODEgOC4xMjM1IDEuNDg1NDFDOC4xODg1NCAxLjQ5OTAyIDguMjQzNDggMS41MTcwOSA4LjI5OTI0IDEuNTUzMjFDOC4zMTE4MSAxLjU3MjI5IDguMzExODEgMS41NzIyOSA4LjMxMTA3IDEuNjA1NDlDOC4yOTgxNCAxLjY0NTg4IDguMjg2NzggMS42NTg5IDguMjUyNjkgMS42ODUzM0M4LjIxNTQzIDEuNjk3MjYgOC4yMTU0MyAxLjY5NzI2IDguMTcwNjggMS43MDY1M0M4LjE1Mzc1IDEuNzEwMjUgOC4xMzY4MyAxLjcxNCA4LjExOTkyIDEuNzE3NzlDOC4xMTA4NiAxLjcxOTggOC4xMDE4MSAxLjcyMTgxIDguMDkyNDcgMS43MjM4OEM3LjgxNjk2IDEuNzg0ODIgNy44MTY5NiAxLjc4NDgyIDcuNTc4ODIgMS45MjI3M0M3LjU3MTA4IDEuOTI4NjkgNy41NjMzMyAxLjkzNDY2IDcuNTU1MzYgMS45NDA4QzcuMzg1MTYgMi4wODQzMSA3LjM0OTE2IDIuMzIzMDMgNy4yOTc5MyAyLjUyMzAxQzcuMjk0OTkgMi41MzM5OSA3LjI5MjA2IDIuNTQ0OTcgNy4yODkwMyAyLjU1NjI5QzcuMjg2NDkgMi41NjYwMSA3LjI4Mzk1IDIuNTc1NzMgNy4yODEzMyAyLjU4NTc1QzcuMjcwMjggMi42MTU0NCA3LjI1ODgxIDIuNjM0NzkgNy4yMzU5NyAyLjY1NzU0QzcuMTcyMzQgMi42NjUyNyA3LjE3MjM0IDIuNjY1MjcgNy4xNDEzOSAyLjY1NzU0QzcuMDkyMTYgMi42MjEwNiA3LjA4MTE0IDIuNTc5NSA3LjA2ODI4IDIuNTIzNjVDNy4wNjYxMyAyLjUxNTAxIDcuMDYzOTggMi41MDYzNiA3LjA2MTc2IDIuNDk3NDVDNy4wNTQ4OSAyLjQ2OTgzIDcuMDQ4MjQgMi40NDIxNyA3LjA0MTY0IDIuNDE0NDlDNi45ODk3OSAyLjE5ODk3IDYuOTMxMjYgMS45ODc1MSA2LjcyNDUxIDEuODYxMThDNi41NjI5MyAxLjc3NTAxIDYuMzY2NDYgMS43MzQyNiA2LjE4NTg3IDEuNzAxMzZDNi4xMzYzNyAxLjY5MTUxIDYuMTA4MDIgMS42NzkxMSA2LjA3NzM4IDEuNjQwMTJDNi4wNzA3MyAxLjYwMDU1IDYuMDcwNzMgMS42MDA1NSA2LjA3NzM4IDEuNTYwOThDNi4xMjQ0NyAxLjUxNDM3IDYuMTc0MDIgMS41MDI5OSA2LjIzNzcyIDEuNDg4OTFDNi4yNTc3OCAxLjQ4NDE2IDYuMjc3ODQgMS40NzkzOCA2LjI5Nzg5IDEuNDc0NTZDNi4zMDgyNSAxLjQ3MjA5IDYuMzE4NjEgMS40Njk2MiA2LjMyOTI5IDEuNDY3MDdDNi4zODIxMiAxLjQ1NDA3IDYuNDM0NDMgMS40Mzk0OSA2LjQ4NjczIDEuNDI0NjJDNi40OTYyMyAxLjQyMTk4IDYuNTA1NzMgMS40MTkzNSA2LjUxNTUyIDEuNDE2NjNDNi42MjE4MiAxLjM4NjI0IDYuNzEzNTYgMS4zNDczNyA2Ljc5ODU0IDEuMjc4MzZDNi44MDY0NyAxLjI3MjEzIDYuODE0MzkgMS4yNjU4OSA2LjgyMjU1IDEuMjU5NDZDNi45NTQ4IDEuMTQ1NjUgNi45OTk3NCAwLjk3NDY3NCA3LjA0MDUzIDAuODE1MTM0QzcuMDQzNjQgMC44MDMwMjIgNy4wNDY3NSAwLjc5MDkxIDcuMDQ5OTUgMC43Nzg0MzJDNy4wNTYxNCAwLjc1NDEwMSA3LjA2MjIyIDAuNzI5NzQzIDcuMDY4MTcgMC43MDUzNTlDNy4wNzI0MyAwLjY4ODM5NCA3LjA3MjQzIDAuNjg4Mzk0IDcuMDc2NzggMC42NzEwODZDNy4wNzkyNyAwLjY2MDk1MSA3LjA4MTc1IDAuNjUwODE2IDcuMDg0MzEgMC42NDAzNzNDNy4wOTUyMSAwLjYwODEwOCA3LjEwOTUyIDAuNTgyNzcyIDcuMTI5NTcgMC41NTQ4NTlDNy4xNjgxIDAuNTM2NDM1IDcuMTk1MTUgMC41NDQ3NjQgNy4yMzU5NyAwLjU1NDg1OVpcIiBmaWxsPVwiIzA3NUYzRlwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTEuNzk1NDUgNi4yNDcxQzEuODA5NTEgNi4yNDcxOSAxLjgwOTUxIDYuMjQ3MTkgMS44MjM4NiA2LjI0NzI5QzEuOTI0NzcgNi4yNTAyMiAxLjk5MzA0IDYuMjgxMTUgMi4wNjczNiA2LjM0NjAxQzIuMTUzODQgNi40MzUzMyAyLjE5Mzc3IDYuNTM2MTEgMi4xOTE1IDYuNjU2NUMyLjE4MTc4IDYuNzU0MTIgMi4xMjE1OCA2LjgzOTM1IDIuMDQ3NzMgNi45MDUzM0MxLjk2MDgxIDYuOTcyNDIgMS44NzMxMyA2Ljk5NDU5IDEuNzYyMDYgNi45OTE0OUMxLjY2ODQxIDYuOTgxMDcgMS41ODAzIDYuOTM4NTIgMS41MTM5MyA2Ljg3NDUxQzEuNDMxMzggNi43NjY4MSAxLjQwNzI1IDYuNjY4MDMgMS40MTkzNSA2LjUzNTM3QzEuNDQ0MzMgNi40MzA5MiAxLjUxNjM3IDYuMzQ2MTMgMS42MDg1IDYuMjg2NjZDMS42NzI1MSA2LjI1NTY0IDEuNzIzOTkgNi4yNDY1MiAxLjc5NTQ1IDYuMjQ3MVpcIiBmaWxsPVwiIzBEQkQ3RFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgU2VsZi1oZWFsZWRcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHktMC41IGNxYS1weC0xIGNxYS1iZy1bIzYzNjZGMTFBXSBjcWEtbWwtMSBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eVwiIFxuICAgICAgICAgICAqbmdJZj1cInN0ZXA/LmV4ZWN1dGVkUmVzdWx0Py52aWRlb19zdGFydF90aW1lXCIgXG4gICAgICAgICAgIFttYXRUb29sdGlwXT1cIidKdW1wIHRvIHZpZGVvIHRpbWUnXCIgXG4gICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm9uSnVtcFRvVGltZXN0YW1wKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2MzYzNjNdICFjcWEtdGV4dC1bMTBweF0gIWNxYS13LVsxMHB4XSAhY3FhLWgtWzEwcHhdXCI+XG4gICAgICAgICAgcGxheV9hcnJvd1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVs4cHhdIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyM2MzYzNjNdXCI+XG4gICAgICAgICAge3sgZm9ybWF0RHVyYXRpb25DbG9jayhzdGVwPy5leGVjdXRlZFJlc3VsdD8udmlkZW9fc3RhcnRfdGltZSB8fCAwKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0RlYnVnXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMC41IGNxYS10ZXh0LVsjOUNBM0FGXVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1vcGFjaXR5LTgwIGNxYS10cmFuc2l0aW9uLW9wYWNpdHkgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZVwiIGFyaWEtbGFiZWw9XCJFZGl0XCIgKGNsaWNrKT1cIm9uRWRpdFN0ZXAoJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdGV4dC1bMTRweF0gIWNxYS13LVsxNHB4XSAhY3FhLWgtWzE0cHhdXCI+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjYWRkU3RlcE1lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIiBjbGFzcz1cImNxYS1wLTAgY3FhLWJvcmRlci0wIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCIgYXJpYS1sYWJlbD1cIkFkZFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJhZGRTdGVwTWVudVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdGV4dC1bMTRweF0gIWNxYS13LVsxNHB4XSAhY3FhLWgtWzE0cHhdXCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtbWVudSAjYWRkU3RlcE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJjcWEtYWRkLXN0ZXAtbWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiIHlQb3NpdGlvbj1cImJlbG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBvcHQgb2YgYWRkU3RlcE1lbnVPcHRpb25zXCIgKGNsaWNrKT1cIm9uQWRkU3RlcE9wdGlvblNlbGVjdChvcHQsICRldmVudClcIj5cbiAgICAgICAgICAgIHt7IG9wdC5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjc3RlcE1vcmVNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1vcGFjaXR5LTgwIGNxYS10cmFuc2l0aW9uLW9wYWNpdHkgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZVwiIGFyaWEtbGFiZWw9XCJNb3JlIG9wdGlvbnNcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwic3RlcE1vcmVNZW51XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS10ZXh0LVsxNHB4XSAhY3FhLXctWzE0cHhdICFjcWEtaC1bMTRweF1cIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1tZW51ICNzdGVwTW9yZU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJjcWEtc3RlcC1tb3JlLW1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIiB5UG9zaXRpb249XCJiZWxvd1wiPlxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgb3B0IG9mIHN0ZXBNb3JlTWVudU9wdGlvbnNcIiAoY2xpY2spPVwib25TdGVwTW9yZU9wdGlvblNlbGVjdChvcHQsICRldmVudClcIj57eyBvcHQubGFiZWwgfX08L2J1dHRvbj5cbiAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgICAge3sgZm9ybWF0RHVyYXRpb24oY29uZmlnLmR1cmF0aW9uKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMy41IDVMNyA4LjVMMTAuNSA1XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG4gICAgPCEtLSBJdGVyYXRpb24gU2VsZWN0b3IgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXVwiICpuZ0lmPVwiIWlzTGl2ZSB8fCAoaXNMaXZlICYmIGNvbmZpZz8uaXRlcmF0aW9ucyAhPT0gdW5kZWZpbmVkKVwiPlxuICAgICAgPGxhYmVsPkl0ZXJhdGlvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlIGNxYS13LWZ1bGwgY3FhLW1heC13LVsxNTZweF1cIj5cbiAgICAgICAgPCEtLSBTdGF0dXMgaW5kaWNhdG9yIGZvciBzZWxlY3RlZCBpdGVyYXRpb24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEl0ZXJhdGlvbiAmJiBjb25maWc/Lml0ZXJhdGlvbnMgJiYgY29uZmlnPy5pdGVyYXRpb25zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWxlZnQtWzEwcHhdIGNxYS10b3AtMS8yIGNxYS10cmFuc2Zvcm0gY3FhLS10cmFuc2xhdGUteS0xLzIgY3FhLXBvaW50ZXItZXZlbnRzLW5vbmUgY3FhLXotMTBcIj5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic2VsZWN0ZWRJdGVyYXRpb24uc3RhdHVzID09PSAnc3VjY2VzcydcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCI2XCIgdmlld0JveD1cIjAgMCA2IDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiM1wiIGN5PVwiM1wiIHI9XCIzXCIgZmlsbD1cIiMwMEE2M0VcIi8+PC9zdmc+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNlbGVjdGVkSXRlcmF0aW9uLnN0YXR1cyA9PT0gJ2ZhaWxlZCdcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCI2XCIgdmlld0JveD1cIjAgMCA2IDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiM1wiIGN5PVwiM1wiIHI9XCIzXCIgZmlsbD1cIiNFRjQ0NDRcIi8+PC9zdmc+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNlbGVjdGVkSXRlcmF0aW9uLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXCIgd2lkdGg9XCI2XCIgaGVpZ2h0PVwiNlwiIHZpZXdCb3g9XCIwIDAgNiA2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjNcIiBjeT1cIjNcIiByPVwiM1wiIGZpbGw9XCIjOUNBM0FGXCIvPjwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzZWxlY3RlZEl0ZXJhdGlvbi5zdGF0dXMgPT09ICdydW5uaW5nJ1wiIHdpZHRoPVwiNlwiIGhlaWdodD1cIjZcIiB2aWV3Qm94PVwiMCAwIDYgNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCIzXCIgY3k9XCIzXCIgcj1cIjNcIiBmaWxsPVwiIzNCODJGNlwiLz48L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICBjbGFzcz1cImNxYS1wbC1bMjJweF0gY3FhLXByLTYgY3FhLXB5LVs1cHhdIGNxYS13LWZ1bGwgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRTVFNUU1XSBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtYmctWyNGQUZBRkFdIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtYXBwZWFyYW5jZS1ub25lXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSXRlcmF0aW9uXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJdGVyYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVJdGVyYXRpb25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIoaXNMaXZlICYmIChzdGF0dXMgPT09ICdydW5uaW5nJyB8fCBzdGF0dXMgPT09ICdSVU5OSU5HJykpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdJZj1cIiFjb25maWc/Lml0ZXJhdGlvbnMgfHwgY29uZmlnPy5pdGVyYXRpb25zPy5sZW5ndGggPT09IDBcIiB2YWx1ZT1cIlwiIGRpc2FibGVkPlxuICAgICAgICAgICAgTm8gaXRlcmF0aW9ucyBhdmFpbGFibGVcbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVyYXRpb24gb2YgY29uZmlnLml0ZXJhdGlvbnNcIiBbbmdWYWx1ZV09XCJpdGVyYXRpb25cIj5cbiAgICAgICAgICAgIHt7IGdldEl0ZXJhdGlvbkxhYmVsKGl0ZXJhdGlvbikgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwhLS0gRHJvcGRvd24gYXJyb3cgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXJpZ2h0LTIgY3FhLXRvcC0xLzIgY3FhLXRyYW5zZm9ybSBjcWEtLXRyYW5zbGF0ZS15LTEvMiBjcWEtcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjZcIiB2aWV3Qm94PVwiMCAwIDEwIDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEgMUw1IDVMOSAxXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW1sLWF1dG9cIiAqbmdJZj1cImNvbmZpZz8uaXRlcmF0aW9ucyAmJiBjb25maWc/Lml0ZXJhdGlvbnM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgRGVmYXVsdDoge3sgY29uZmlnLmRlZmF1bHRJdGVyYXRpb24gPT09ICdsYXN0JyA/ICdsYXN0IGl0ZXJhdGlvbicgOiAnZmlyc3QgaXRlcmF0aW9uJyB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxlY3RlZCBJdGVyYXRpb24gU3ViLXN0ZXBzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEl0ZXJhdGlvbiAmJiBzZWxlY3RlZEl0ZXJhdGlvbi5zdWJTdGVwc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtcHktMSBjcWEtbWwtOVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiPlxuICAgICAgPCEtLSBTaW5nbGUgbG9vcDogcmVuZGVyIGFsbCBlbnRyaWVzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJTdGVwIG9mIChpc0xpdmUgPyBwcm9jZXNzZWRTdWJTdGVwcyA6IHByb2Nlc3NlZFN1YlN0ZXBzRm9yUnVuUmVzdWx0KVwiPlxuICAgICAgICA8IS0tIEFJX0FVVE9fSEVBTF9TVUNDRVNTL0ZBSUxFRDogcmVuZGVyIHdpdGggYWktYWdlbnQtc3RlcCBzdHlsZSAoYm90aCBsaXZlIGFuZCBydW4gcmVzdWx0IHNjcmVlbnMpIC0tPlxuICAgICAgICA8Y3FhLWFpLWxvZ3Mtd2l0aC1yZWFzb25pbmdcbiAgICAgICAgICAqbmdJZj1cIiRhbnkoc3ViU3RlcCkuaXNBaUF1dG9IZWFsUmVzdWx0XCJcbiAgICAgICAgICBbc3RhdHVzXT1cInN1YlN0ZXAuc3RhdHVzXCJcbiAgICAgICAgICBbdGV4dF09XCIkYW55KHN1YlN0ZXApLnRleHQgfHwgc3ViU3RlcD8udmFsdWVcIlxuICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCIkYW55KHN1YlN0ZXApLmRlc2NyaXB0aW9uIHx8IHN1YlN0ZXA/LnRleHQgfHwgc3ViU3RlcD8udmFsdWVcIlxuICAgICAgICAgIFtyZWFzb25pbmddPVwiJGFueShzdWJTdGVwKS5yZWFzb25pbmcgfHwgc3ViU3RlcD8ucmVhc29uaW5nXCJcbiAgICAgICAgICBbZHVyYXRpb25dPVwic3ViU3RlcC5kdXJhdGlvblwiPlxuICAgICAgICA8L2NxYS1haS1sb2dzLXdpdGgtcmVhc29uaW5nPlxuXG4gICAgICAgIDwhLS0gUmVndWxhciBzdWItc3RlcHMgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIiEkYW55KHN1YlN0ZXApLmlzQWlBdXRvSGVhbFJlc3VsdFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktWzUuNXB4XSBjcWEtcHgtM1wiPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgU3RhdHVzIEljb24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnIHx8IHN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3Bhc3NlZCdcIiA+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEZhaWx1cmUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnIHx8IHN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWxlZCdcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNy41IDQuNUw0LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA0LjVMNy41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBQZW5kaW5nIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJTdGVwPy5zdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT09ICdwZW5kaW5nJ1wiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gUnVubmluZyAtIFNob3cgc3Bpbm5lciAoYWxzbyB1c2VkIGZvciBhY3RpdmUgV0FJVF9GT1JfTE9DQVRPUiBjb3VudGRvd24gaW4gbGl2ZSBtb2RlKSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZydcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxQTUgNSAwIDAgMSAxMSA2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnc2tpcHBlZCdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjcWEtdGV4dC1bIzlDQTNBRl0gY3FhLXRleHQtWzEycHhdXCI+XG4gICAgICAgICAgICAgIHNraXBfbmV4dFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTdWItc3RlcCBEZXNjcmlwdGlvbiAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtWzEzcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzM2NDE1M11cIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBwcmUtbGluZTsgd29yZC1icmVhazogYnJlYWstd29yZDtcIj5cbiAgICAgICAgICAgIHt7ICRhbnkoc3ViU3RlcCkuZGVzY3JpcHRpb24gfHwgJGFueShzdWJTdGVwKS50ZXh0IH19XG4gICAgICAgICAgICA8IS0tIENvdW50ZG93biBmb3IgYWN0aXZlIFdBSVRfRk9SX0xPQ0FUT1IgaW4gbGl2ZSBtb2RlIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0xpdmUgJiYgJGFueShzdWJTdGVwKS5yZW1haW5pbmdTZWNvbmRzICE9IG51bGxcIiBjbGFzcz1cImNxYS10ZXh0LVsjRjk3MzE2XSBjcWEtZm9udC1tZWRpdW0gY3FhLW1sLTFcIj4oe3sgJGFueShzdWJTdGVwKS5yZW1haW5pbmdTZWNvbmRzIH19cyByZW1haW5pbmcpPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgRHVyYXRpb24gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1tZXRhZGF0YS1rZXlcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKHN1YlN0ZXAuZHVyYXRpb24pIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBOZXN0ZWQgU3RlcHMgLS0+XG4gICAgPGRpdiAqbmdJZj1cImhhc0NoaWxkIHx8IChjb25maWcubmVzdGVkU3RlcHMgJiYgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApXCIgY2xhc3M9XCJjcWEtbWwtOSBjcWEtcGItMSBjcWEtbmVzdGVkLXN0ZXBzLWNvbnRhaW5lclwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXSBjcWEtcHktWzJweF0gY3FhLXB4LTNcIj5OZXN0ZWQgc3RlcHM8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1wbC1bMThweF1cIiBzdHlsZT1cImJvcmRlci1sZWZ0OiAycHggc29saWQgI0M1QzdGQTtcIj5cbiAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciB3aGVuIG5lc3RlZCBzdGVwcyBhcmUgYmVpbmcgbG9hZGVkIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzQ2hpbGQgJiYgKCFjb25maWcubmVzdGVkU3RlcHMgfHwgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA9PT0gMCkgJiYgaXNTdGVwTG9hZGluZygpXCIgXG4gICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHktMiBjcWEtcHgtM1wiPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIG9wYWNpdHk9XCIwLjI1XCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk03IDFBNiA2IDAgMCAxIDEzIDdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzEzcHhdIGNxYS10ZXh0LVsjNzM3MzczXVwiPkxvYWRpbmcgbmVzdGVkIHN0ZXBzLi4uPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RlcCBvZiBjb25maWcubmVzdGVkU3RlcHM7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICA8IS0tIFdyYXBwZXIgdG8gc2hvdyBza2VsZXRvbiB3aGlsZSBzdGVwLXJlbmRlcmVyIGlzIGxvYWRpbmcgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtc3RlcC1yZW5kZXJlci13cmFwcGVyXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIidleGMtJyArIHN0ZXAuaWRcIlxuICAgICAgICAgICAgW2NsYXNzLmxvYWRlZF09XCIhaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwKVwiPlxuICAgICAgICAgICAgPCEtLSBMb2FkaW5nIHNrZWxldG9uIG92ZXJsYXkgLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJpc05lc3RlZFN0ZXBMb2FkaW5nKHN0ZXApXCIgY2xhc3M9XCJjcWEtc3RlcC1za2VsZXRvbi1vdmVybGF5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RlcC1za2VsZXRvbiBjcWEtbXgtMyBjcWEtbXktMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPCEtLSBVc2Ugc3RlcC1yZW5kZXJlciBmb3IgYWxsIG5lc3RlZCBzdGVwcyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgLS0+XG4gICAgICAgICAgICA8IS0tIFRoZSBzdGVwLXJlbmRlcmVyIHdpbGwgZHluYW1pY2FsbHkgbG9hZCB0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50IGFuZCBwYXNzIGhhbmRsZXJzIC0tPlxuICAgICAgICAgICAgPGNxYS1zdGVwLXJlbmRlcmVyIFxuICAgICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgICAgW3N0ZXBOdW1iZXJdPVwic3RlcE51bWJlciArICcuJyArIChpICsgMSlcIlxuICAgICAgICAgICAgICBbb25FeHBhbmRIYW5kbGVyXT1cIm9uRXhwYW5kSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXJdPVwiZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXT1cIm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2lzU3RlcExvYWRpbmdIYW5kbGVyXT1cImlzU3RlcExvYWRpbmdIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2lzU3RlcEV4cGFuZGVkSGFuZGxlcl09XCJpc1N0ZXBFeHBhbmRlZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcl09XCJjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2Zvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcl09XCJmb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXJdPVwiZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyXT1cImdldExvb3BJdGVyYXRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRBcGlBc3NlcnRpb25zSGFuZGxlcl09XCJnZXRBcGlBc3NlcnRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtmb3JtYXRBY3Rpb25zSGFuZGxlcl09XCJmb3JtYXRBY3Rpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcl09XCJvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyXT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25VcGxvYWRCYXNlbGluZUhhbmRsZXJdPVwib25VcGxvYWRCYXNlbGluZUhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0U2VsZkhlYWxMb2FkaW5nU3RhdGVzSGFuZGxlcl09XCJnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uQW5hbHl6ZUhhbmRsZXJdPVwib25BbmFseXplSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblZpZXdGdWxsTG9nc0hhbmRsZXJdPVwib25WaWV3RnVsbExvZ3NIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uU2VsZkhlYWxBY3Rpb25IYW5kbGVyXT1cIm9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uU3RlcENsaWNrSGFuZGxlcl09XCJvblN0ZXBDbGlja0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25Kc29uUGF0aENvcGllZEhhbmRsZXJdPVwib25Kc29uUGF0aENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25Eb3dubG9hZEhhbmRsZXJdPVwib25Eb3dubG9hZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25GaWxlUGF0aENvcGllZEhhbmRsZXJdPVwib25GaWxlUGF0aENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25UZXh0Q29waWVkSGFuZGxlcl09XCJvblRleHRDb3BpZWRIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2p1bXBUb1RpbWVzdGFtcEhhbmRsZXJdPVwianVtcFRvVGltZXN0YW1wSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtkb3dubG9hZGluZ1N0ZXBJZF09XCJkb3dubG9hZGluZ1N0ZXBJZFwiXG4gICAgICAgICAgICAgIFtpc1VwbG9hZGluZ0Jhc2VsaW5lXT1cImlzVXBsb2FkaW5nQmFzZWxpbmVcIlxuICAgICAgICAgICAgICBbaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVdPVwiaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRJdGVyYXRpb25JZF09XCJzdGVwPy5zZWxlY3RlZEl0ZXJhdGlvbklkIHx8ICcnXCJcbiAgICAgICAgICAgIFtpc0xpdmVdPVwiaXNMaXZlXCJcbiAgICAgICAgICAgIFtpc0RlYnVnXT1cImlzRGVidWdcIlxuICAgICAgICAgICAgW2RlYnVnUG9pbnRTZXRdPVwiZ2V0RGVidWdQb2ludFNldEhhbmRsZXIgPyBnZXREZWJ1Z1BvaW50U2V0SGFuZGxlcihzdGVwKSA6IGRlYnVnUG9pbnRTZXRcIlxuICAgICAgICAgICAgW2dldERlYnVnUG9pbnRTZXRIYW5kbGVyXT1cImdldERlYnVnUG9pbnRTZXRIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvbkRlYnVnUG9pbnRDaGFuZ2VIYW5kbGVyXT1cIm9uRGVidWdQb2ludENoYW5nZUhhbmRsZXJcIlxuICAgICAgICAgICAgW29uRWRpdFN0ZXBIYW5kbGVyXT1cIm9uRWRpdFN0ZXBIYW5kbGVyXCJcbiAgICAgICAgICAgIFthZGRTdGVwTWVudU9wdGlvbnNdPVwiZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkID8gZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkKHN0ZXApIDogYWRkU3RlcE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgIFtvbkFkZFN0ZXBPcHRpb25TZWxlY3RIYW5kbGVyXT1cIm9uQWRkU3RlcE9wdGlvblNlbGVjdEhhbmRsZXJcIlxuICAgICAgICAgICAgW3N0ZXBNb3JlTWVudU9wdGlvbnNdPVwiZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZCA/IGdldFN0ZXBNb3JlTWVudU9wdGlvbnNGb3JOZXN0ZWQoc3RlcCkgOiBzdGVwTW9yZU1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgIFtvblN0ZXBNb3JlT3B0aW9uU2VsZWN0SGFuZGxlcl09XCJvblN0ZXBNb3JlT3B0aW9uU2VsZWN0SGFuZGxlclwiXG4gICAgICAgICAgICBbZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkXT1cImdldEFkZFN0ZXBNZW51T3B0aW9uc0Zvck5lc3RlZFwiXG4gICAgICAgICAgICBbZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZF09XCJnZXRTdGVwTW9yZU1lbnVPcHRpb25zRm9yTmVzdGVkXCJcbiAgICAgICAgICAgICAgKGNvbXBvbmVudFJlYWR5KT1cIm1hcmtTdGVwTG9hZGVkKHN0ZXApXCI+XG4gICAgICAgICAgICA8L2NxYS1zdGVwLXJlbmRlcmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBWaWV3IEFsbCBJdGVyYXRpb25zIExpbmsgLS0+XG4gICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zaG93Vmlld0FsbEl0ZXJhdGlvbnMgJiYgIWlzTGl2ZVwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1weC0zIGNxYS1weS1bMTBweF1cIj5cbiAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9uVmlld0FsbEl0ZXJhdGlvbnNDbGljaygkZXZlbnQpXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1uby11bmRlcmxpbmUgY3FhLXRleHQtcHJpbWFyeSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICBWaWV3IGFsbCBpdGVyYXRpb25zXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNy42MzYzNiAxMS4yNjdMNi43NTg1MiAxMC4zOTc3TDkuMzg3NzggNy43Njg0N0gzVjYuNDk4NThIOS4zODc3OEw2Ljc1ODUyIDMuODczNThMNy42MzYzNiAzTDExLjc2OTkgNy4xMzM1Mkw3LjYzNjM2IDExLjI2N1pcIiBmaWxsPVwiIzNGNDNFRVwiLz48L3N2Zz5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTZWxmIEhlYWwgQW5hbHlzaXMgLS0+XG4gICAgPGNxYS1zZWxmLWhlYWwtYW5hbHlzaXMgXG4gICAgICAqbmdJZj1cInNlbGZIZWFsQW5hbHlzaXNcIlxuICAgICAgW2lkXT1cInN0ZXA/LnRlc3RTdGVwSWRcIlxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICBbaXNMb2FkaW5nQWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nQWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICBbaXNMb2FkaW5nTW9kaWZ5QWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nTW9kaWZ5QWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICAgIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvblxuICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgW3N1YlN0ZXBzXT1cImdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpXCJcbiAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICBbaXNFeHBhbmRlZF09XCJzaG93RmFpbGVkU3RlcERldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93Vmlld01vcmVCdXR0b24gJiZzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIFtpc01ha2luZ0N1cnJlbnRCYXNlbGluZV09XCJpc01ha2luZ0N1cnJlbnRCYXNlbGluZVwiXG4gICAgICBbaXNMaXZlXT1cImlzTGl2ZVwiXG4gICAgICAobWFrZUN1cnJlbnRCYXNlbGluZSk9XCJvbk1ha2VDdXJyZW50QmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAodXBsb2FkQmFzZWxpbmUpPVwib25VcGxvYWRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgIChhbmFseXplKT1cIm9uQW5hbHl6ZSgpXCJcbiAgICAgICh2aWV3RnVsbExvZ3MpPVwib25WaWV3RnVsbExvZ3MoKVwiPlxuICAgIDwvY3FhLXVwZGF0ZWQtZmFpbGVkLXN0ZXA+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=